Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Annotation of /sml/trunk/src/runtime/mach-dep/BYTECODE.prim.asm
ViewVC logotype

Annotation of /sml/trunk/src/runtime/mach-dep/BYTECODE.prim.asm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2 - (view) (download)

1 : monnier 2 /* BYTECODE.prim.asm
2 :     */
3 :    
4 :     #include "ml-base.h"
5 :     #include "asm-base.h"
6 :     #include "tags.h"
7 :     #include "ml-request.h"
8 :     #include "bc-instrs.h"
9 :     #include "reg-mask.h"
10 :    
11 :     /* assumes that CALLESAVE > 0 */
12 :     #define CONTINUE \
13 :     I_JMPind(r1)
14 :    
15 :    
16 :     RDATA
17 :    
18 :     GLOBAL(asm_start)
19 :     LABEL(CSYM(asm_start))
20 :    
21 :     /* sigh_return_a:
22 :     * The return continuation for the ML signal handler.
23 :     */
24 :     ML_CODE_HDR(sigh_return_a)
25 :     I_CALLC(REQ_SIG_RETURN)
26 :    
27 :     /* sigh_resume:
28 :     * Resume execution at the point at which a handler trap occurred. This is a
29 :     * standard two-argument function, thus the closure is in ml_cont (a1).
30 :     */
31 :     GLOBAL(sigh_resume)
32 :     LABEL(sigh_resume)
33 :     I_CALLC(REQ_SIG_RESUME)
34 :    
35 :     ML_CODE_HDR(handle_a)
36 :     I_CALLC(REQ_EXN)
37 :    
38 :     ML_CODE_HDR(return_a)
39 :     I_CALLC(REQ_RETURN)
40 :    
41 :     ML_CODE_HDR(build_literals_a)
42 :     I_LIMITCHK(0,FUN_MASK) /* in case there is a pending signal */
43 :     I_CALLC(REQ_BUILD_LITERALS)
44 :    
45 :     ML_CODE_HDR(callc_a)
46 :     I_LIMITCHK(0,FUN_MASK) /* in case there is a pending signal */
47 :     I_CALLC(REQ_CALLC)
48 :    
49 :     /* array : (int * 'a) -> 'a array
50 :     * Allocate and initialize a new array. This can cause GC.
51 :     */
52 :     ML_CODE_HDR(array_a)
53 :     I_ARRAY
54 :     CONTINUE
55 :    
56 :     /* create_v : int * 'a list -> 'a vector
57 :     * Creates a vector with elements taken from a list.
58 :     * n.b. The front end ensure that list cannot be nil.
59 :     */
60 :     ML_CODE_HDR(create_v_a)
61 :     I_VECTOR
62 :     CONTINUE
63 :    
64 :     /* create_s : int -> string
65 :     * Create a string of given length. This can cause GC.
66 :     */
67 :     ML_CODE_HDR(create_s_a)
68 :     I_STRING
69 :     CONTINUE
70 :    
71 :     /* create_b : int -> bytearray
72 :     * Create a bytearray of given length. This can cause GC.
73 :     */
74 :     ML_CODE_HDR(create_b_a)
75 :     I_BYTEARRAY
76 :     CONTINUE
77 :    
78 :     /* create_r : int -> realarray
79 :     * Create a realarray of given length. This can cause GC.
80 :     */
81 :     ML_CODE_HDR(create_r_a)
82 :     I_REALARRAY
83 :     CONTINUE
84 :    
85 :     /* try_lock: spin_lock -> bool.
86 :     * low-level test-and-set style primitive for mutual-exclusion among
87 :     * processors. For now, we only provide a uni-processor trivial version.
88 :     */
89 :     ML_CODE_HDR(try_lock_a)
90 :     CONTINUE
91 :    
92 :     /* unlock : releases a spin lock
93 :     */
94 :     ML_CODE_HDR(unlock_a)
95 :     CONTINUE
96 :    
97 :     /* floor : real -> int
98 :     * Return the floor of the argument or else raise Float("floor") if out of range.
99 :     */
100 :     ML_CODE_HDR(floor_a)
101 :     I_FLOAD(f0,r0)
102 :     I_FLOOR(r0,f0)
103 :     I_ASHL1(r0,r0)
104 :     I_INCR(r0,1)
105 :     CONTINUE
106 :    
107 :     /* logb : real -> int
108 :     * Extract and unbias the exponent, return 0 for a zero exponent.
109 :     * The IEEE bias is 1023.
110 :     */
111 :     ML_CODE_HDR(logb_a)
112 :     I_FLOAD(f0,r0)
113 :     I_LOGB(r0,f0)
114 :     CONTINUE
115 :    
116 :     /* scalb : (real * int) -> real
117 :     * Scale the first argument by 2 raised to the second argument. Raise
118 :     * Float("underflow") or Float("overflow") as appropriate.
119 :     */
120 :     ML_CODE_HDR(scalb_a)
121 :     I_LIMITCHK(3,FUN_MASK)
122 :     I_LOAD(r14,r0)
123 :     I_FLOAD(f0,r14)
124 :     I_LOADoffset(r0,r0,4)
125 :     I_SCALB(f0,f0,r0)
126 :     I_FALLOC(r0,f0)
127 :     CONTINUE
128 :    
129 :     GLOBAL(asm_end)
130 :     LABEL(CSYM(asm_end))

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0