78 |
|
|
79 |
fun greg r = GP r |
fun greg r = GP r |
80 |
fun oreg r = GP (r + 8) |
fun oreg r = GP (r + 8) |
81 |
|
fun ireg r = GP (r + 24) |
82 |
fun freg r = FP r |
fun freg r = FP r |
83 |
|
|
84 |
fun reg32 r = T.REG (32, r) |
fun reg32 r = T.REG (32, r) |
138 |
pack (0, 1, l) |
pack (0, 1, l) |
139 |
end |
end |
140 |
|
|
141 |
|
(**** START NEW CODE ****) |
142 |
|
|
143 |
|
(* the location of arguments/parameters; offsets are given with respect to the |
144 |
|
* low end of the parameter area (see paramAreaOffset above). |
145 |
|
*) |
146 |
|
datatype arg_location |
147 |
|
= Reg of T.ty * T.reg (* integer/pointer argument in register *) |
148 |
|
| FReg of T.fty * T.reg (* floating-point argument in register *) |
149 |
|
| Stk of T.ty * T.I.machine_int (* integer/pointer argument in parameter area *) |
150 |
|
| FStk of T.fty * T.I.machine_int (* floating-point argument in parameter area *) |
151 |
|
| Args of arg_location list |
152 |
|
|
153 |
|
fun layout {conv, retTy, paramTys} = let |
154 |
|
in |
155 |
|
raise Fail "layout not implemented yet" |
156 |
|
end |
157 |
|
|
158 |
|
(* C callee-save registers *) |
159 |
|
val calleeSaveRegs = (* %l0-%l7 and %i0-%i7 *) |
160 |
|
List.tabulate (16, fn r => GP(r+16)) |
161 |
|
val calleeSaveFRegs = [] |
162 |
|
|
163 |
|
(**** END NEW CODE ****) |
164 |
|
|
165 |
fun genCall { name, proto, paramAlloc, structRet, saveRestoreDedicated, |
fun genCall { name, proto, paramAlloc, structRet, saveRestoreDedicated, |
166 |
callComment, args } = let |
callComment, args } = let |
167 |
val { conv, retTy, paramTys } = proto |
val { conv, retTy, paramTys } = proto |