+ emit IRETURN = do pop eax; emit RETURN
+ emit invalid = error $ "insn not implemented yet: " ++ show invalid
+
+ emitFieldOffset :: Word16 -> CodeGen e s Int32
+ emitFieldOffset x = do
+ pop eax -- this pointer
+ let (cname, fname) = buildFieldOffset cls x
+ liftIO $ getFieldOffset cname fname
+
+ emitIF :: CMP -> CodeGen e s ()
+ emitIF cond = let
+ sid = case successor bb of TwoTarget _ t -> t; _ -> error "bad"
+ l = getLabel sid lmap
+ in case cond of
+ C_EQ -> je l; C_NE -> jne l
+ C_LT -> jl l; C_GT -> jg l
+ C_GE -> jge l; C_LE -> jle l