Commit Graph

1985 Commits

Author SHA1 Message Date
Peter Cawley
33ee12a91b Have lj_ir_kptr_ accept pointers in [0, 4G) rather than [-2G, 2G)
The assertion logic is the only thing actually changing within
`lj_ir_kptr_`: the existing `mref` / `setmref` invocations already deal in
zero-extended pointers rather than sign-extended pointers.

Perhaps surprisingly, the logic around continuation pointers is changing.
To appreciate why, the following cryptic comment from vm_x86.dasc comes
into play:
```
  |->cont_dispatch:
...
  |  movsxd RAa, dword [RB-16]  // May be negative on WIN64 with debug.
```
Namely, when using MSVC in debug mode, function symbols with external
linkage are subject to extra jump stubs in order to support incremental
linking. For example, these jump stubs might look like:
```
...
lj_bcwrite:
07FFC47A5EF23  jmp         lj_bcwrite (07FFC47AB5750h)
lj_cont_ra:
07FFC47A5EF28  jmp         lj_cont_ra (07FFC47A6230Dh)
lj_ir_call:
07FFC47A5EF2D  jmp         lj_ir_call (07FFC47AF6310h)
lj_cconv_tv_bf:
07FFC47A5EF32  jmp         lj_cconv_tv_bf (07FFC47AC1EA0h)
...
```
When continutation pointers are formed, it is e.g. 07FFC47A5EF28 rather
than 07FFC47A6230 from which lj_vm_asm_begin gets subtracted, and it can
be the case that 07FFC47A5EF28 is less than lj_vm_asm_begin. Consequently,
this could previously result in continuation pointers in range [-2G, 0).
(The eagle-eyed reader might think that lj_vm_asm_begin is also a function
symbol with external linkage, but buildvm is careful to define it as a
data symbol rather than a function symbol).

This change was actually motivated by an assertion failure in WIN64 debug
mode (wherein `snap_replay_const` does `lj_ir_kptr(J, ir_kptr(ir))`, as
`ir_kptr` performs zero-extension, and then `lj_ir_kptr` would barf), but
given the recent block allocator change to support the [0, 4G) address
range on (non-x64) 64-bit platforms, the change seems prudent for other
reasons too.
2016-04-23 23:13:37 +01:00
Mike Pall
344fe5f01d Merge branch 'master' into v2.1 2016-04-21 17:01:36 +02:00
Mike Pall
2f0001fad0 Fix handling of non-numeric strings in arithmetic coercions.
Thanks to Vyacheslav Egorov.
2016-04-21 17:00:58 +02:00
Mike Pall
4c6498d245 Merge branch 'master' into v2.1 2016-04-18 13:41:41 +02:00
Mike Pall
cc4f5d056a Whitespace. 2016-04-18 13:40:49 +02:00
Mike Pall
d13d420980 Merge branch 'master' into v2.1 2016-04-18 11:17:15 +02:00
Mike Pall
73680a5fc7 x86/x64: Search for exit jumps with instruction length decoder.
Contributed by Peter Cawley.
2016-04-18 11:16:13 +02:00
Mike Pall
0c6fdc1039 Rewrite memory block allocator.
Use a mix of linear probing and pseudo-random probing.
Workaround for 1GB MAP_32BIT limit on Linux/x64. Now 2GB with !LJ_GC64.
Enforce 128TB LJ_GC64 limit for > 47 bit memory layouts (ARM64).
2016-04-18 10:57:49 +02:00
Mike Pall
101115ddd8 Merge branch 'master' into v2.1 2016-04-14 00:16:17 +02:00
Mike Pall
e5b5e079c3 MIPS: Fix BC_ISNEXT fallback path.
Thanks to RT-RK.com.
2016-04-14 00:14:42 +02:00
Mike Pall
096a7cf4e4 x64/LJ_GC64: Fix BC_UCLO check for fast-path.
Thanks to Vyacheslav Egorov.
2016-04-13 16:10:03 +02:00
Mike Pall
ac9193cfeb x86: Improve disassembly of BMI2 instructions.
Thanks to Peter Cawley.
2016-04-05 15:10:14 +02:00
Mike Pall
d150fbf441 Merge branch 'master' into v2.1 2016-04-03 19:13:37 +02:00
Mike Pall
1c6fd13dbd Fix recording of select(n, ...) with off-trace varargs
Thanks to Peter Cawley.
2016-04-03 19:12:28 +02:00
Mike Pall
25b377942a Merge branch 'master' into v2.1 2016-04-03 19:08:32 +02:00
Mike Pall
4ab6367b21 Cygwin: Allow cross-builds to non-Cygwin targets. 2016-04-03 19:07:19 +02:00
Mike Pall
296f0ca8d7 Windows/x64/LJ_GC64: Fix math.frexp() and math.modf() (again).
Thanks to Peter Cawley.
2016-03-31 04:17:21 +02:00
Mike Pall
6e623b9914 Merge branch 'master' into v2.1 2016-03-30 16:30:44 +02:00
Mike Pall
62af101524 MIPS: Fix use of ffgccheck delay slots in interpreter. 2016-03-30 16:26:27 +02:00
Mike Pall
892887e584 x86: Generate BMI2 shifts and rotates, if available.
Contributed by Peter Cawley.
2016-03-28 23:05:20 +02:00
Mike Pall
6801e7165c x86: Detect BMI2 instruction support. 2016-03-28 23:04:33 +02:00
Mike Pall
c24c8e5312 x64/LJ_GC64: Fix JIT glue code in interpreter.
Thanks to Peter Cawley.
2016-03-28 22:31:18 +02:00
Mike Pall
d7145616ae Merge branch 'master' into v2.1 2016-03-28 22:24:01 +02:00
Mike Pall
9531eb235b Windows: Remove intermediate files at end of build. 2016-03-28 22:23:37 +02:00
Mike Pall
e03e5979c4 Fix compiler warnings. 2016-03-28 22:19:45 +02:00
Mike Pall
df7bb5bb72 Merge branch 'master' into v2.1 2016-03-28 22:17:41 +02:00
Mike Pall
e23fc10883 Fix display of NULL (light)userdata in -jdump.
Thanks to Peter Cawley.
2016-03-28 22:15:13 +02:00
Mike Pall
c7305408d1 Fix formatting of some small denormals at low precision.
Contributed by Peter Cawley.
2016-03-28 21:39:31 +02:00
Mike Pall
713e34054f Merge branch 'master' into v2.1 2016-03-22 22:22:51 +01:00
Mike Pall
7e05355a08 Fix install for cross-builds. 2016-03-22 22:22:43 +01:00
Mike Pall
cf3e01e136 Merge branch 'master' into v2.1 2016-03-22 20:42:00 +01:00
Mike Pall
ddadbe8099 Fix compiler warnings.
Thanks to Demetri Obenour.
2016-03-22 20:40:41 +01:00
Mike Pall
be2559291e ARM: Fix build problem with external frame unwinding. 2016-03-15 11:27:06 +01:00
Mike Pall
64c6da6b21 MIPS soft-float: Fix code generation for HREF. 2016-03-10 17:08:55 +01:00
Mike Pall
75d046dbdd DynASM/x86: Add ADX instructions.
Thanks to Peter Cawley.
2016-03-06 12:25:03 +01:00
Mike Pall
3e4a196777 RELEASE LuaJIT-2.1.0-beta2 2016-03-03 12:40:02 +01:00
Mike Pall
82900761be Update changelog. 2016-03-03 12:29:01 +01:00
Mike Pall
f4231949b5 Merge branch 'master' into v2.1 2016-03-03 12:11:37 +01:00
Mike Pall
db1b399af1 Bump copyright date to 2016. 2016-03-03 12:02:22 +01:00
Mike Pall
6f3eed9fd8 Fix Android/x86 build. 2016-03-03 11:46:48 +01:00
Mike Pall
1c45c6a6a2 Fix build with JIT disabled.
Thanks to Peter Melnichenko.
2016-03-01 13:26:42 +01:00
Mike Pall
18f6aa97fd Use internal implementation for converting FP numbers to strings.
Contributed by Peter Cawley.
2016-02-26 18:03:08 +01:00
Mike Pall
339a1fd696 Windows/x64/LJ_GC64: Fix math.frexp() and math.modf().
Thanks to Eddie Edwards.
2016-02-22 19:14:20 +01:00
Mike Pall
6cb38f788f Merge branch 'master' into v2.1 2016-02-10 18:53:42 +01:00
Mike Pall
a443889677 Don't allocate unused 2nd result register in JIT compiler backend. 2016-02-10 18:51:02 +01:00
Mike Pall
f547a1425e MIPS: Add soft-float support to JIT compiler backend. 2016-02-10 18:49:22 +01:00
Mike Pall
825dcdc4d1 Generalize LJ_SOFTFP dependencies in lj_asm.c. 2016-02-09 17:29:23 +01:00
Mike Pall
bfbcd72eb7 PS4: Switch default build to amalgamated and LJ_GC64 mode.
Thanks to Eddie Edwards.
2016-02-01 18:18:56 +01:00
Mike Pall
60de2f3d51 MIPS: Switch to dual-number mode. Fix soft-float interpreter. 2016-01-29 07:03:36 +01:00
Mike Pall
2f6b2967c7 Add proper DynASM dependency. 2016-01-18 16:57:30 +01:00