diff options
-rw-r--r-- | src/jit/dump.lua | 4 | ||||
-rw-r--r-- | src/lj_asm_arm64.h | 2 | ||||
-rw-r--r-- | src/lj_asm_mips.h | 2 | ||||
-rw-r--r-- | src/lj_asm_x86.h | 2 | ||||
-rw-r--r-- | src/lj_ir.h | 1 |
5 files changed, 7 insertions, 4 deletions
diff --git a/src/jit/dump.lua b/src/jit/dump.lua index abd72287..34ced76d 100644 --- a/src/jit/dump.lua +++ b/src/jit/dump.lua | |||
@@ -278,7 +278,9 @@ local litname = { | |||
278 | s = irtype[band(shr(mode, 5), 31)].."."..s | 278 | s = irtype[band(shr(mode, 5), 31)].."."..s |
279 | if band(mode, 0x800) ~= 0 then s = s.." sext" end | 279 | if band(mode, 0x800) ~= 0 then s = s.." sext" end |
280 | local c = shr(mode, 12) | 280 | local c = shr(mode, 12) |
281 | if c == 2 then s = s.." index" elseif c == 3 then s = s.." check" end | 281 | if c == 1 then s = s.." none" |
282 | elseif c == 2 then s = s.." index" | ||
283 | elseif c == 3 then s = s.." check" end | ||
282 | t[mode] = s | 284 | t[mode] = s |
283 | return s | 285 | return s |
284 | end}), | 286 | end}), |
diff --git a/src/lj_asm_arm64.h b/src/lj_asm_arm64.h index f6e99d9c..c9ba7b7b 100644 --- a/src/lj_asm_arm64.h +++ b/src/lj_asm_arm64.h | |||
@@ -602,7 +602,7 @@ static void asm_conv(ASMState *as, IRIns *ir) | |||
602 | emit_dn(as, A64I_SXTW, dest, left); | 602 | emit_dn(as, A64I_SXTW, dest, left); |
603 | } | 603 | } |
604 | } else { | 604 | } else { |
605 | if (st64) { | 605 | if (st64 && !(ir->op2 & IRCONV_NONE)) { |
606 | /* This is either a 32 bit reg/reg mov which zeroes the hiword | 606 | /* This is either a 32 bit reg/reg mov which zeroes the hiword |
607 | ** or a load of the loword from a 64 bit address. | 607 | ** or a load of the loword from a 64 bit address. |
608 | */ | 608 | */ |
diff --git a/src/lj_asm_mips.h b/src/lj_asm_mips.h index a3ab2f8e..f775d08b 100644 --- a/src/lj_asm_mips.h +++ b/src/lj_asm_mips.h | |||
@@ -751,7 +751,7 @@ static void asm_conv(ASMState *as, IRIns *ir) | |||
751 | } | 751 | } |
752 | } | 752 | } |
753 | } else { | 753 | } else { |
754 | if (st64) { | 754 | if (st64 && !(ir->op2 & IRCONV_NONE)) { |
755 | /* This is either a 32 bit reg/reg mov which zeroes the hiword | 755 | /* This is either a 32 bit reg/reg mov which zeroes the hiword |
756 | ** or a load of the loword from a 64 bit address. | 756 | ** or a load of the loword from a 64 bit address. |
757 | */ | 757 | */ |
diff --git a/src/lj_asm_x86.h b/src/lj_asm_x86.h index 060ed974..715e1535 100644 --- a/src/lj_asm_x86.h +++ b/src/lj_asm_x86.h | |||
@@ -924,7 +924,7 @@ static void asm_conv(ASMState *as, IRIns *ir) | |||
924 | } | 924 | } |
925 | } else { | 925 | } else { |
926 | Reg dest = ra_dest(as, ir, RSET_GPR); | 926 | Reg dest = ra_dest(as, ir, RSET_GPR); |
927 | if (st64) { | 927 | if (st64 && !(ir->op2 & IRCONV_NONE)) { |
928 | Reg left = asm_fuseload(as, lref, RSET_GPR); | 928 | Reg left = asm_fuseload(as, lref, RSET_GPR); |
929 | /* This is either a 32 bit reg/reg mov which zeroes the hiword | 929 | /* This is either a 32 bit reg/reg mov which zeroes the hiword |
930 | ** or a load of the loword from a 64 bit address. | 930 | ** or a load of the loword from a 64 bit address. |
diff --git a/src/lj_ir.h b/src/lj_ir.h index f953ff0e..ea8616ec 100644 --- a/src/lj_ir.h +++ b/src/lj_ir.h | |||
@@ -250,6 +250,7 @@ IRFLDEF(FLENUM) | |||
250 | #define IRCONV_ANY (1<<IRCONV_CSH) /* Any FP number is ok. */ | 250 | #define IRCONV_ANY (1<<IRCONV_CSH) /* Any FP number is ok. */ |
251 | #define IRCONV_INDEX (2<<IRCONV_CSH) /* Check + special backprop rules. */ | 251 | #define IRCONV_INDEX (2<<IRCONV_CSH) /* Check + special backprop rules. */ |
252 | #define IRCONV_CHECK (3<<IRCONV_CSH) /* Number checked for integerness. */ | 252 | #define IRCONV_CHECK (3<<IRCONV_CSH) /* Number checked for integerness. */ |
253 | #define IRCONV_NONE IRCONV_ANY /* INT|*64 no conv, but change type. */ | ||
253 | 254 | ||
254 | /* TOSTR mode, stored in op2. */ | 255 | /* TOSTR mode, stored in op2. */ |
255 | #define IRTOSTR_INT 0 /* Convert integer to string. */ | 256 | #define IRTOSTR_INT 0 /* Convert integer to string. */ |