From 8407ac0eca109d466b388d04b29f12f21265a1e0 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Wed, 19 Jan 2011 02:05:12 +0100 Subject: Add volatile XLOADs. --- src/lj_ir.h | 3 ++- src/lj_opt_mem.c | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) (limited to 'src') 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) /* XLOAD mode, stored in op2. */ #define IRXLOAD_READONLY 1 /* Load from read-only data. */ -#define IRXLOAD_UNALIGNED 2 /* Unaligned load. */ +#define IRXLOAD_VOLATILE 2 /* Load from volatile data. */ +#define IRXLOAD_UNALIGNED 4 /* Unaligned load. */ /* CONV mode, stored in op2. */ #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) if ((fins->op2 & IRXLOAD_READONLY)) goto cselim; + if ((fins->op2 & IRXLOAD_VOLATILE)) + goto doemit; /* Search for conflicting stores. */ ref = J->chain[IR_XSTORE]; @@ -721,7 +723,8 @@ cselim: xr = IR(xref); goto retry; /* Retry with the reassociated reference. */ } - return lj_ir_emit(J); +doemit: + return EMITFOLD; } /* XSTORE elimination. */ -- cgit v1.2.3-55-g6feb