+ | transform (X.AND (dest, src)) =
+ unspill X.Long (src, spillreg1) @
+ [ X.AND(
+ realoper dest handle Spilled => stackoper dest,
+ realoper src handle Spilled => X.REG spillreg1)]
+ | transform (X.OR (dest, src)) =
+ unspill X.Long (src, spillreg1) @
+ [ X.OR(
+ realoper dest handle Spilled => stackoper dest,
+ realoper src handle Spilled => X.REG spillreg1)]
+ | transform (X.XOR (dest, src)) =
+ unspill X.Long (src, spillreg1) @
+ [ X.XOR(
+ realoper dest handle Spilled => stackoper dest,
+ realoper src handle Spilled => X.REG spillreg1)]
+ | transform (X.CMP (op1, op2)) =
+ unspill X.Long (op2, spillreg1) @
+ [ X.CMP(
+ realoper op1 handle Spilled => stackoper op1,
+ realoper op2 handle Spilled => X.REG spillreg1)]
+ | transform (X.TEST (op1, op2)) =
+ unspill X.Long (op2, spillreg1) @
+ [ X.TEST(
+ realoper op1 handle Spilled => stackoper op1,
+ realoper op2 handle Spilled => X.REG spillreg1)]
+ | transform (X.SETcc (c,src)) = [ X.SETcc(c, realoper src handle Spilled => stackoper src)]
+ | transform (X.CALL l) = [ X.CALL l ]
+ | transform (X.MOVZB (dest, src)) =
+ [ X.MOVZB(
+ realoper dest handle Spilled => X.REG spillreg1,
+ realoper src handle Spilled => stackoper src)]
+ @ spill X.Long (dest, spillreg1)
+ | transform (X.RET) = if nsave < 2 then (epilogue @ [X.RET]) else [X.JMP endlbl]
+ | transform (X.LABEL l) = [ X.LABEL l ]
+ | transform (X.JMP l) = [ X.JMP l ]
+ | transform (X.Jcc (c,l)) = [X.Jcc (c,l)]