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 | |
parent | 925050fe3ffae269f77757679270432dbad7f010 (diff) | |
download | luajit-8407ac0eca109d466b388d04b29f12f21265a1e0.tar.gz luajit-8407ac0eca109d466b388d04b29f12f21265a1e0.tar.bz2 luajit-8407ac0eca109d466b388d04b29f12f21265a1e0.zip |
Add volatile XLOADs.
-rw-r--r-- | lib/dump.lua | 2 | ||||
-rw-r--r-- | src/lj_ir.h | 3 | ||||
-rw-r--r-- | src/lj_opt_mem.c | 5 |
3 files changed, 7 insertions, 3 deletions
diff --git a/lib/dump.lua b/lib/dump.lua index d79ae8b6..555b4b45 100644 --- a/lib/dump.lua +++ b/lib/dump.lua | |||
@@ -234,7 +234,7 @@ local litname = { | |||
234 | t[mode] = s | 234 | t[mode] = s |
235 | return s | 235 | return s |
236 | end}), | 236 | end}), |
237 | ["XLOAD "] = { [0] = "", "R", "U", "RU", }, | 237 | ["XLOAD "] = { [0] = "", "R", "V", "RV", "U", "RU", "VU", "RVU", }, |
238 | ["CONV "] = setmetatable({}, { __index = function(t, mode) | 238 | ["CONV "] = setmetatable({}, { __index = function(t, mode) |
239 | local s = irtype[band(mode, 31)] | 239 | local s = irtype[band(mode, 31)] |
240 | s = irtype[band(shr(mode, 5), 31)].."."..s | 240 | s = irtype[band(shr(mode, 5), 31)].."."..s |
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. */ |