diff options
| author | Mike Pall <mike> | 2011-02-19 23:04:16 +0100 |
|---|---|---|
| committer | Mike Pall <mike> | 2011-02-19 23:04:16 +0100 |
| commit | 32eaa48c792f8a03b7144383128a9ee82babab83 (patch) | |
| tree | f2b71d27131e7bac2874f61638036d4bb8b530c3 | |
| parent | bd29d16141d07ca4e436fe457fd6cbefd638ad15 (diff) | |
| download | luajit-32eaa48c792f8a03b7144383128a9ee82babab83.tar.gz luajit-32eaa48c792f8a03b7144383128a9ee82babab83.tar.bz2 luajit-32eaa48c792f8a03b7144383128a9ee82babab83.zip | |
FFI: Fix recording of ffi.copy() and ffi.fill().
| -rw-r--r-- | src/lj_crecord.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/lj_crecord.c b/src/lj_crecord.c index 73575fe2..a24c541e 100644 --- a/src/lj_crecord.c +++ b/src/lj_crecord.c | |||
| @@ -984,11 +984,12 @@ void LJ_FASTCALL recff_ffi_copy(jit_State *J, RecordFFData *rd) | |||
| 984 | if (trlen) { | 984 | if (trlen) { |
| 985 | trlen = crec_toint(J, cts, trlen, &rd->argv[2]); | 985 | trlen = crec_toint(J, cts, trlen, &rd->argv[2]); |
| 986 | } else { | 986 | } else { |
| 987 | trlen = emitir(IRTI(IR_FLOAD), trsrc, IRFL_STR_LEN); | 987 | trlen = emitir(IRTI(IR_FLOAD), J->base[1], IRFL_STR_LEN); |
| 988 | trlen = emitir(IRTI(IR_ADD), trlen, lj_ir_kint(J, 1)); | 988 | trlen = emitir(IRTI(IR_ADD), trlen, lj_ir_kint(J, 1)); |
| 989 | } | 989 | } |
| 990 | lj_ir_call(J, IRCALL_memcpy, trdst, trsrc, trlen); | 990 | lj_ir_call(J, IRCALL_memcpy, trdst, trsrc, trlen); |
| 991 | emitir(IRT(IR_XBAR, IRT_NIL), 0, 0); | 991 | emitir(IRT(IR_XBAR, IRT_NIL), 0, 0); |
| 992 | rd->nres = 0; | ||
| 992 | } /* else: interpreter will throw. */ | 993 | } /* else: interpreter will throw. */ |
| 993 | } | 994 | } |
| 994 | 995 | ||
| @@ -1005,6 +1006,7 @@ void LJ_FASTCALL recff_ffi_fill(jit_State *J, RecordFFData *rd) | |||
| 1005 | trfill = lj_ir_kint(J, 0); | 1006 | trfill = lj_ir_kint(J, 0); |
| 1006 | lj_ir_call(J, IRCALL_memset, tr, trfill, trlen); | 1007 | lj_ir_call(J, IRCALL_memset, tr, trfill, trlen); |
| 1007 | emitir(IRT(IR_XBAR, IRT_NIL), 0, 0); | 1008 | emitir(IRT(IR_XBAR, IRT_NIL), 0, 0); |
| 1009 | rd->nres = 0; | ||
| 1008 | } /* else: interpreter will throw. */ | 1010 | } /* else: interpreter will throw. */ |
| 1009 | } | 1011 | } |
| 1010 | 1012 | ||
