diff options
| author | Mike Pall <mike> | 2014-03-28 19:11:35 +0100 |
|---|---|---|
| committer | Mike Pall <mike> | 2014-03-28 19:11:35 +0100 |
| commit | b65515fb4831d3cd9071c31ed56ba2a95578189a (patch) | |
| tree | 8894110473196a06d6b3dc580722bd7de5d7539a | |
| parent | 4401af88dca4c8b415cd98e548d17688df92acee (diff) | |
| parent | c735293921724b3d660d2353c08f2ce15887b71d (diff) | |
| download | luajit-b65515fb4831d3cd9071c31ed56ba2a95578189a.tar.gz luajit-b65515fb4831d3cd9071c31ed56ba2a95578189a.tar.bz2 luajit-b65515fb4831d3cd9071c31ed56ba2a95578189a.zip | |
Merge branch 'master' into v2.1
| -rw-r--r-- | src/lj_opt_mem.c | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/src/lj_opt_mem.c b/src/lj_opt_mem.c index 400fb48e..21c861bb 100644 --- a/src/lj_opt_mem.c +++ b/src/lj_opt_mem.c | |||
| @@ -749,21 +749,19 @@ retry: | |||
| 749 | case ALIAS_MUST: | 749 | case ALIAS_MUST: |
| 750 | /* Emit conversion if the loaded type doesn't match the forwarded type. */ | 750 | /* Emit conversion if the loaded type doesn't match the forwarded type. */ |
| 751 | if (!irt_sametype(fins->t, IR(store->op2)->t)) { | 751 | if (!irt_sametype(fins->t, IR(store->op2)->t)) { |
| 752 | IRType st = irt_type(fins->t); | 752 | IRType dt = irt_type(fins->t), st = irt_type(IR(store->op2)->t); |
| 753 | if (st == IRT_I8 || st == IRT_I16) { /* Trunc + sign-extend. */ | 753 | if (dt == IRT_I8 || dt == IRT_I16) { /* Trunc + sign-extend. */ |
| 754 | st |= IRCONV_SEXT; | 754 | st = dt | IRCONV_SEXT; |
| 755 | } else if (st == IRT_U8 || st == IRT_U16) { /* Trunc + zero-extend. */ | 755 | dt = IRT_INT; |
| 756 | } else if (st == IRT_INT) { | 756 | } else if (dt == IRT_U8 || dt == IRT_U16) { /* Trunc + zero-extend. */ |
| 757 | st = irt_type(IR(store->op2)->t); /* Needs dummy CONV.int.*. */ | 757 | st = dt; |
| 758 | } else { /* I64/U64 are boxed, U32 is hidden behind a CONV.num.u32. */ | 758 | dt = IRT_INT; |
| 759 | goto store_fwd; | ||
| 760 | } | 759 | } |
| 761 | fins->ot = IRTI(IR_CONV); | 760 | fins->ot = IRT(IR_CONV, dt); |
| 762 | fins->op1 = store->op2; | 761 | fins->op1 = store->op2; |
| 763 | fins->op2 = (IRT_INT<<5)|st; | 762 | fins->op2 = (dt<<5)|st; |
| 764 | return RETRYFOLD; | 763 | return RETRYFOLD; |
| 765 | } | 764 | } |
| 766 | store_fwd: | ||
| 767 | return store->op2; /* Store forwarding. */ | 765 | return store->op2; /* Store forwarding. */ |
| 768 | } | 766 | } |
| 769 | ref = store->prev; | 767 | ref = store->prev; |
