+Mon Aug 27 09:29:00 CEST 2001 Paolo Molaro <lupus@ximian.com>
+
+ * x86/x86-codegen.h: fix x86_call_code (). x86_mov_regp_reg () added.
+
Sat Aug 18 12:40:32 CEST 2001 Paolo Molaro <lupus@ximian.com>
* x86/x86-codegen.h: fix a couple of buglets and add x86_regp_emit().
x86_mov_mem_reg (p, mem_addr, X86_EAX, 1);
x86_mov_membase_reg (p, X86_EBP, 4, X86_EAX, 1);
+ x86_mov_regp_reg (p, X86_EAX, X86_EAX, 4);
+ x86_mov_membase_reg (p, X86_EAX, 0, X86_EAX, 4);
+ x86_mov_reg_membase (p, X86_EAX, X86_EAX, 0, 4);
x86_mov_reg_reg (p, X86_EAX, X86_EAX, 1);
x86_mov_reg_reg (p, X86_EAX, X86_EAX, 4);
x86_mov_reg_mem (p, X86_EAX, mem_addr, 4);
x86_branch (p, X86_CC_GT, target, 0);
x86_branch_disp (p, X86_CC_NE, -4, 0);
- x86_call_imm (p, printf);
+ x86_call_code (p, printf);
x86_call_reg (p, X86_ECX);
x86_sahf (p);
/* Copyright (C) 2000 Intel Corporation. All rights reserved.
Copyright (C) 2001 Ximian, Inc.
//
-// $Header: /home/miguel/third-conversion/public/mono/mono/arch/x86/x86-codegen.h,v 1.4 2001/08/18 06:55:29 lupus Exp $
+// $Header: /home/miguel/third-conversion/public/mono/mono/arch/x86/x86-codegen.h,v 1.5 2001/08/27 03:43:09 lupus Exp $
*/
#ifndef X86_H
x86_mem_emit ((inst), (reg), (mem)); \
} while (0)
+#define x86_mov_regp_reg(inst,regp,reg,size) \
+ do { \
+ switch ((size)) { \
+ case 1: *(inst)++ = (unsigned char)0x88; break; \
+ case 2: *(inst)++ = (unsigned char)0x66; /* fall through */ \
+ case 4: *(inst)++ = (unsigned char)0x89; break; \
+ default: assert (0); \
+ } \
+ x86_regp_emit ((inst), (reg), (regp)); \
+ } while (0)
+
#define x86_mov_membase_reg(inst,basereg,disp,reg,size) \
do { \
switch ((size)) { \
#define x86_call_code(inst,target) \
do { \
- int offset = (target) - (inst); \
- offset -= 5 \
+ int offset = (unsigned char*)(target) - (inst); \
+ offset -= 5; \
x86_call_imm ((inst), offset); \
} while (0)