X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Farch%2Fmips%2Fmips-codegen.h;h=c579c88a9b3a990a26afc0edaeac0c2da8693417;hb=ef0ddf45c3081e799edcb4e95770186514b80cf1;hp=e05bc38ac596ccc3915dd6a00ef8debb94560c24;hpb=8ef4e4703172fd32ada3f74b22df5203b4683493;p=mono.git diff --git a/mono/arch/mips/mips-codegen.h b/mono/arch/mips/mips-codegen.h index e05bc38ac59..c579c88a9b3 100644 --- a/mono/arch/mips/mips-codegen.h +++ b/mono/arch/mips/mips-codegen.h @@ -4,6 +4,7 @@ * Copyright (c) 2004 Novell, Inc * Author: Paolo Molaro (lupus@ximian.com) * + * Licensed under the MIT license. See LICENSE file in the project root for full license information. */ /* registers */ @@ -193,21 +194,17 @@ enum { #define mips_format_r(code,op,rs,rt,rd,sa,func) mips_emit32 ((code), (((op)<<26)|((rs)<<21)|((rt)<<16)|((rd)<<11)|((sa)<<6)|(func))) #define mips_format_divmul(code,op,src1,src2,fun) mips_emit32 ((code), (((op)<<26)|((src1)<<21)|((src2)<<16)|(fun))) -#define mips_is_imm16(val) ((gint)(val) >= (gint)-(1<<15) && (gint)(val) <= (gint)((1<<15)-1)) +#define mips_is_imm16(val) ((gint)(gshort)(gint)(val) == (gint)(val)) /* Load always using lui/addiu pair (for later patching) */ #define mips_load(c,D,v) do { \ - if (!mips_is_imm16 ((v))) { \ - if (((guint32)(v)) & (1 << 15)) { \ - mips_lui ((c), (D), mips_zero, (((guint32)(v))>>16)+1); \ - } \ - else { \ - mips_lui ((c), (D), mips_zero, (((guint32)(v))>>16)); \ - } \ - mips_addiu ((c), (D), (D), ((guint32)(v)) & 0xffff); \ - } \ - else \ - mips_addiu ((c), (D), mips_zero, ((guint32)(v)) & 0xffff); \ + if (((guint32)(v)) & (1 << 15)) { \ + mips_lui ((c), (D), mips_zero, (((guint32)(v))>>16)+1); \ + } \ + else { \ + mips_lui ((c), (D), mips_zero, (((guint32)(v))>>16)); \ + } \ + mips_addiu ((c), (D), (D), ((guint32)(v)) & 0xffff); \ } while (0) /* load constant - no patch-up */ @@ -338,7 +335,7 @@ enum { /* misc and coprocessor ops */ #define mips_move(c,dest,src) mips_addu(c,dest,src,mips_zero) #define mips_dmove(c,dest,src) mips_daddu(c,dest,src,mips_zero) -#define mips_nop(c) mips_sll(c,0,0,0) +#define mips_nop(c) mips_or(c,mips_at,mips_at,0) #define mips_break(c,code) mips_emit32(c, ((code)<<6)|13) #define mips_mfhi(c,dest) mips_format_r(c,0,0,0,dest,0,16) #define mips_mflo(c,dest) mips_format_r(c,0,0,0,dest,0,18)