From a07ae80ab54e85d02a3b50721072bbcaa9db3db3 Mon Sep 17 00:00:00 2001 From: Paolo Molaro Date: Mon, 27 Aug 2001 03:43:09 +0000 Subject: [PATCH] Mon Aug 27 09:29:00 CEST 2001 Paolo Molaro * x86/x86-codegen.h: fix x86_call_code (). x86_mov_regp_reg () added. svn path=/trunk/mono/; revision=636 --- mono/arch/ChangeLog | 4 ++++ mono/arch/x86/test.c | 5 ++++- mono/arch/x86/x86-codegen.h | 17 ++++++++++++++--- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/mono/arch/ChangeLog b/mono/arch/ChangeLog index 31eecbfec39..0116763cbe4 100644 --- a/mono/arch/ChangeLog +++ b/mono/arch/ChangeLog @@ -1,4 +1,8 @@ +Mon Aug 27 09:29:00 CEST 2001 Paolo Molaro + + * x86/x86-codegen.h: fix x86_call_code (). x86_mov_regp_reg () added. + Sat Aug 18 12:40:32 CEST 2001 Paolo Molaro * x86/x86-codegen.h: fix a couple of buglets and add x86_regp_emit(). diff --git a/mono/arch/x86/test.c b/mono/arch/x86/test.c index 231b7f665e7..23e56f73344 100644 --- a/mono/arch/x86/test.c +++ b/mono/arch/x86/test.c @@ -110,6 +110,9 @@ int main() { 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); @@ -179,7 +182,7 @@ int main() { 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); diff --git a/mono/arch/x86/x86-codegen.h b/mono/arch/x86/x86-codegen.h index 166030eb957..f671ceefeb6 100644 --- a/mono/arch/x86/x86-codegen.h +++ b/mono/arch/x86/x86-codegen.h @@ -1,7 +1,7 @@ /* 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 @@ -648,6 +648,17 @@ typedef union { 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)) { \ @@ -1121,8 +1132,8 @@ typedef union { #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) -- 2.25.1