aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2011-01-19 02:05:12 +0100
committerMike Pall <mike>2011-01-19 02:05:12 +0100
commit8407ac0eca109d466b388d04b29f12f21265a1e0 (patch)
tree0b9a3f45efc93f93993a51a2df028d65372f8a9d
parent925050fe3ffae269f77757679270432dbad7f010 (diff)
downloadluajit-8407ac0eca109d466b388d04b29f12f21265a1e0.tar.gz
luajit-8407ac0eca109d466b388d04b29f12f21265a1e0.tar.bz2
luajit-8407ac0eca109d466b388d04b29f12f21265a1e0.zip
Add volatile XLOADs.
Diffstat (limited to '')
-rw-r--r--lib/dump.lua2
-rw-r--r--src/lj_ir.h3
-rw-r--r--src/lj_opt_mem.c5
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); 726doemit:
727 return EMITFOLD;
725} 728}
726 729
727/* XSTORE elimination. */ 730/* XSTORE elimination. */