diff options
-rw-r--r-- | src/lj_parse.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/lj_parse.c b/src/lj_parse.c index aca719a3..0f32d121 100644 --- a/src/lj_parse.c +++ b/src/lj_parse.c | |||
@@ -833,13 +833,14 @@ static void bcemit_comp(FuncState *fs, BinOpr opr, ExpDesc *e1, ExpDesc *e2) | |||
833 | } | 833 | } |
834 | } else { | 834 | } else { |
835 | uint32_t op = opr-OPR_LT+BC_ISLT; | 835 | uint32_t op = opr-OPR_LT+BC_ISLT; |
836 | BCReg ra; | 836 | BCReg ra, rd; |
837 | if ((op-BC_ISLT) & 1) { /* GT -> LT, GE -> LE */ | 837 | if ((op-BC_ISLT) & 1) { /* GT -> LT, GE -> LE */ |
838 | e1 = e2; e2 = eret; /* Swap operands. */ | 838 | e1 = e2; e2 = eret; /* Swap operands. */ |
839 | op = ((op-BC_ISLT)^3)+BC_ISLT; | 839 | op = ((op-BC_ISLT)^3)+BC_ISLT; |
840 | } | 840 | } |
841 | rd = expr_toanyreg(fs, e2); | ||
841 | ra = expr_toanyreg(fs, e1); | 842 | ra = expr_toanyreg(fs, e1); |
842 | ins = BCINS_AD(op, ra, expr_toanyreg(fs, e2)); | 843 | ins = BCINS_AD(op, ra, rd); |
843 | } | 844 | } |
844 | /* Using expr_free might cause asserts if the order is wrong. */ | 845 | /* Using expr_free might cause asserts if the order is wrong. */ |
845 | if (e1->k == VNONRELOC && e1->u.s.info >= fs->nactvar) fs->freereg--; | 846 | if (e1->k == VNONRELOC && e1->u.s.info >= fs->nactvar) fs->freereg--; |