1 <DEFINE DOUBLE-ADDR (FROB "AUX" AC)
2 <COND (<TYPE? .FROB VARTBL>
3 <COND (<SET AC <VAR-VALUE-IN-AC? .FROB>>
8 <MA-DEF-DISP ,AC-M <+ <ADD-MVEC .FROB> 4>>)>>
10 <DEFINE DOUBLE-GEN (OPER "TUPLE" ARGS "AUX" (RES ,HAS-RESULT)
11 RRES TLAB (TAC <>) (VAC <>))
12 <SET OPER <SPNAME .OPER>>
13 <COND (<MEMBER .OPER '["ADD" "SUB" "MUL" "DIV"]>
15 <EMIT <COND (<=? .OPER "ADD"> ,INST-ADDD3)
16 (<=? .OPER "SUB"> ,INST-SUBD3)
17 (<=? .OPER "MUL"> ,INST-MULD3)
18 (<=? .OPER "DIV"> ,INST-DIVD3)>
19 <DOUBLE-ADDR <1 .ARGS>>
20 <DOUBLE-ADDR <2 .ARGS>>
21 <DOUBLE-ADDR <3 .ARGS>>>)
22 (<MEMBER .OPER '["G?" "=?" "L?"]>
23 <COND (<TYPE? .RES VARTBL>
24 <COND (<SET TAC <VAR-TYPE-WORD-IN-AC? .RES>>
26 <COND (<SET VAC <VAR-VALUE-IN-AC? .RES>>
29 <SET TLAB <MAKE-LABEL>>
30 <COND (<==? .RES STACK>
31 <EMIT-PUSH <TYPE-WORD FALSE> LONG>)
33 <EMIT-MOVE <TYPE-WORD FALSE> <MA-REG .TAC> LONG>)
35 <EMIT-MOVE <TYPE-WORD FALSE> <VAR-TYPE-ADDRESS .RES> LONG>)>
37 <DOUBLE-ADDR <1 .ARGS>>
38 <DOUBLE-ADDR <2 .ARGS>>>
39 <GEN-BRANCH <COND (<=? .OPER "G?">
46 <COND (<==? .RES STACK>
47 <EMIT-MOVE <TYPE-WORD FIX> <MA-DISP ,AC-TP -4> LONG>)
49 <EMIT-MOVE <TYPE-WORD FIX> <MA-REG .TAC> LONG>)
51 <EMIT-MOVE <TYPE-WORD FIX> <VAR-TYPE-ADDRESS .RES> LONG>)>
53 <COND (<==? .RES STACK>
54 <EMIT-PUSH <MA-IMM 0> LONG>)
56 <EMIT-MOVE <MA-IMM 0> <MA-REG .VAC> LONG>)
58 <EMIT-MOVE <MA-IMM 0> <VAR-VALUE-ADDRESS .RES> LONG>)>
60 <LINK-VAR-TO-AC .RES .TAC TYPE-WORD>)>
62 <LINK-VAR-TO-AC .RES .VAC VALUE>)>)
63 (<=? .OPER "DOUBLE-TO-SINGLE">
64 <COND (<TYPE? .RES VARTBL>
65 <COND (<SET VAC <VAR-VALUE-IN-AC? .RES>>
68 <SET VAC <GET-AC PREF-VAL T>>)>
71 <EMIT-PUSH <TYPE-WORD FLOAT> LONG>)>
72 <EMIT ,INST-CVTDF <DOUBLE-ADDR <1 .ARGS>>
73 <COND (.VAC <MA-REG .VAC>)
77 <DEST-DECL .VAC .RES FLOAT>)>)
78 (<=? .OPER "SINGLE-TO-DOUBLE">
79 <SET VAC <LOAD-VAR <2 .ARGS> VALUE T PREF-VAL>>
80 <SET TAC <LOAD-VAR <2 .ARGS> TYPE <> <PREV-AC .VAC>>>
82 <VAR-VALUE-ADDRESS <1 .ARGS>>
84 <COND (.RES <DEST-PAIR .VAC .TAC .RES>)>)>