diff options
author | Mike Pall <mike> | 2010-12-06 00:38:21 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2010-12-06 00:38:21 +0100 |
commit | 281f426d602596f855d8fea787ad7a514365244d (patch) | |
tree | 3dd722ea40c3adf64aa40d5751c098aa420cc175 /src | |
parent | 588fa0481fff746b5a866dd8b90ddd00618da71d (diff) | |
download | luajit-281f426d602596f855d8fea787ad7a514365244d.tar.gz luajit-281f426d602596f855d8fea787ad7a514365244d.tar.bz2 luajit-281f426d602596f855d8fea787ad7a514365244d.zip |
Add minimal set of fold rules for KINT64.
Diffstat (limited to 'src')
-rw-r--r-- | src/lj_opt_fold.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/lj_opt_fold.c b/src/lj_opt_fold.c index 6df1a08a..8ccfc6bd 100644 --- a/src/lj_opt_fold.c +++ b/src/lj_opt_fold.c | |||
@@ -661,6 +661,25 @@ LJFOLDF(simplify_intsub_k) | |||
661 | return RETRYFOLD; | 661 | return RETRYFOLD; |
662 | } | 662 | } |
663 | 663 | ||
664 | LJFOLD(ADD any KINT64) | ||
665 | LJFOLDF(simplify_intadd_k64) | ||
666 | { | ||
667 | if (ir_kint64(fright)->u64 == 0) /* i + 0 ==> i */ | ||
668 | return LEFTFOLD; | ||
669 | return NEXTFOLD; | ||
670 | } | ||
671 | |||
672 | LJFOLD(SUB any KINT64) | ||
673 | LJFOLDF(simplify_intsub_k64) | ||
674 | { | ||
675 | uint64_t k = ir_kint64(fright)->u64; | ||
676 | if (k == 0) /* i - 0 ==> i */ | ||
677 | return LEFTFOLD; | ||
678 | fins->o = IR_ADD; /* i - k ==> i + (-k) */ | ||
679 | fins->op2 = (IRRef1)lj_ir_kint64(J, -k); /* Overflow for -2^63 ok. */ | ||
680 | return RETRYFOLD; | ||
681 | } | ||
682 | |||
664 | LJFOLD(SUB any any) | 683 | LJFOLD(SUB any any) |
665 | LJFOLD(SUBOV any any) | 684 | LJFOLD(SUBOV any any) |
666 | LJFOLDF(simplify_intsub) | 685 | LJFOLDF(simplify_intsub) |