diff options
| author | Mike Pall <mike> | 2011-01-19 02:05:12 +0100 |
|---|---|---|
| committer | Mike Pall <mike> | 2011-01-19 02:05:12 +0100 |
| commit | 8407ac0eca109d466b388d04b29f12f21265a1e0 (patch) | |
| tree | 0b9a3f45efc93f93993a51a2df028d65372f8a9d /src | |
| parent | 925050fe3ffae269f77757679270432dbad7f010 (diff) | |
| download | luajit-8407ac0eca109d466b388d04b29f12f21265a1e0.tar.gz luajit-8407ac0eca109d466b388d04b29f12f21265a1e0.tar.bz2 luajit-8407ac0eca109d466b388d04b29f12f21265a1e0.zip | |
Add volatile XLOADs.
Diffstat (limited to 'src')
| -rw-r--r-- | src/lj_ir.h | 3 | ||||
| -rw-r--r-- | src/lj_opt_mem.c | 5 |
2 files changed, 6 insertions, 2 deletions
diff --git a/src/lj_ir.h b/src/lj_ir.h index d3104017..68901325 100644 --- a/src/lj_ir.h +++ b/src/lj_ir.h | |||
| @@ -206,7 +206,8 @@ IRFLDEF(FLENUM) | |||
| 206 | 206 | ||
| 207 | /* XLOAD mode, stored in op2. */ | 207 | /* XLOAD mode, stored in op2. */ |
| 208 | #define IRXLOAD_READONLY 1 /* Load from read-only data. */ | 208 | #define IRXLOAD_READONLY 1 /* Load from read-only data. */ |
| 209 | #define IRXLOAD_UNALIGNED 2 /* Unaligned load. */ | 209 | #define IRXLOAD_VOLATILE 2 /* Load from volatile data. */ |
| 210 | #define IRXLOAD_UNALIGNED 4 /* Unaligned load. */ | ||
| 210 | 211 | ||
| 211 | /* CONV mode, stored in op2. */ | 212 | /* CONV mode, stored in op2. */ |
| 212 | #define IRCONV_SRCMASK 0x001f /* Source IRType. */ | 213 | #define IRCONV_SRCMASK 0x001f /* Source IRType. */ |
diff --git a/src/lj_opt_mem.c b/src/lj_opt_mem.c index 9c22362b..cad85bb7 100644 --- a/src/lj_opt_mem.c +++ b/src/lj_opt_mem.c | |||
| @@ -669,6 +669,8 @@ TRef LJ_FASTCALL lj_opt_fwd_xload(jit_State *J) | |||
| 669 | 669 | ||
| 670 | if ((fins->op2 & IRXLOAD_READONLY)) | 670 | if ((fins->op2 & IRXLOAD_READONLY)) |
| 671 | goto cselim; | 671 | goto cselim; |
| 672 | if ((fins->op2 & IRXLOAD_VOLATILE)) | ||
| 673 | goto doemit; | ||
| 672 | 674 | ||
| 673 | /* Search for conflicting stores. */ | 675 | /* Search for conflicting stores. */ |
| 674 | ref = J->chain[IR_XSTORE]; | 676 | ref = J->chain[IR_XSTORE]; |
| @@ -721,7 +723,8 @@ cselim: | |||
| 721 | xr = IR(xref); | 723 | xr = IR(xref); |
| 722 | goto retry; /* Retry with the reassociated reference. */ | 724 | goto retry; /* Retry with the reassociated reference. */ |
| 723 | } | 725 | } |
| 724 | return lj_ir_emit(J); | 726 | doemit: |
| 727 | return EMITFOLD; | ||
| 725 | } | 728 | } |
| 726 | 729 | ||
| 727 | /* XSTORE elimination. */ | 730 | /* XSTORE elimination. */ |
