57
58
%%% After frame allocation, every temp must denote a physical register.
59
60
-record(alu, {aluop, src, dst}).
60
-record(call, {'fun', sdesc}).
61
-record(call, {'fun', sdesc, linkage}).
61
62
-record(cmovcc, {cc, src, dst}).
62
-record(cmp, {src, dst}). % a 'sub' alu which doesn't update dst
63
-record(cmp, {src, dst}). % a 'sub' alu which doesn't update dst
63
64
-record(comment, {term}).
66
-record(fmov, {src, dst}).
65
-record(fmove, {src, dst}).
67
66
-record(fp_binop, {op, src, dst}).
68
-record(fp_unop, {op, arg}).
67
-record(fp_unop, {op, arg}). % arg may be [] :-(
70
68
-record(jcc, {cc, label}).
71
-record(jmp_fun, {'fun'}). % tailcall, direct or indirect
69
-record(jmp_fun, {'fun', linkage}). % tailcall, direct or indirect
72
70
-record(jmp_label, {label}). % local jmp, direct
73
71
-record(jmp_switch, {temp, jtab, labels}). % local jmp, indirect
74
-record(label, {label, isfail}).
72
-record(label, {label}).
75
73
-record(lea, {mem, temp}).
76
74
-record(move, {src, dst}).
75
-record(move64, {imm, dst}).
77
76
-record(movsx, {src, dst}).
78
77
-record(movzx, {src, dst}).
80
-record(prefix_fs, {}).
81
-record(pseudo_call, {dsts, 'fun', arity, contlab, exnlab}). % dsts is [] or [EAX]
78
-record(pseudo_call, {'fun', sdesc, contlab, linkage}).
82
79
-record(pseudo_jcc, {cc, true_label, false_label, pred}).
83
-record(pseudo_tailcall, {'fun', arity, stkargs}).
80
-record(pseudo_tailcall, {'fun', arity, stkargs, linkage}).
84
81
-record(pseudo_tailcall_prepare, {}).
85
82
-record(push, {src}).
86
84
-record(ret, {npop}). % EAX is live-in
87
85
-record(shift, {shiftop, src, dst}).
86
-record(test, {src, dst}).
88
88
%%% Function definitions.
90
90
-record(defun, {mfa, formals, code, data, isclosure, isleaf,