From 5de49744cbc2c86886354c13b59346810b3050f9 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Wed, 15 May 2013 22:16:10 -0400 Subject: [PATCH] Bug 869072 - Test whether the upper 32 bits of a register are zeroed by loading an unsigned UINT32_MAX into a register and comparing with that, since x86's cmp instruction's immediate field is a 32-bit signed field. r=sstangl --- js/src/ion/x64/MacroAssembler-x64.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/js/src/ion/x64/MacroAssembler-x64.h b/js/src/ion/x64/MacroAssembler-x64.h index 114027a54db4..873a351bac35 100644 --- a/js/src/ion/x64/MacroAssembler-x64.h +++ b/js/src/ion/x64/MacroAssembler-x64.h @@ -206,15 +206,16 @@ class MacroAssemblerX64 : public MacroAssemblerX86Shared JS_ASSERT(src != dest); JSValueShiftedTag tag = (JSValueShiftedTag)JSVAL_TYPE_TO_SHIFTED_TAG(type); - mov(ImmShiftedTag(tag), dest); #ifdef DEBUG if (type == JSVAL_TYPE_INT32 || type == JSVAL_TYPE_BOOLEAN) { Label upper32BitsZeroed; - branchPtr(Assembler::BelowOrEqual, src, Imm32(UINT32_MAX), &upper32BitsZeroed); + movePtr(ImmWord(UINT32_MAX), dest); + branchPtr(Assembler::BelowOrEqual, src, dest, &upper32BitsZeroed); breakpoint(); bind(&upper32BitsZeroed); } #endif + mov(ImmShiftedTag(tag), dest); orq(src, dest); }