Stefan Reinauer [Thu, 21 May 2026 19:52:04 +0000 (12:52 -0700)]
dms: include target configuration header
crc_csum.cpp uses UAE target types through the DMS headers. Include
sysconfig.h first so those target type definitions are available
before the archive declarations are parsed.
Stefan Reinauer [Thu, 21 May 2026 00:37:36 +0000 (17:37 -0700)]
isofs: avoid undefined timezone sign extension
make_date() sign-extends the ISO9660 timezone byte when the high
bit is set. (-1 << 8) shifts a negative signed value, which is
undefined behavior in C++.
Use ~0xff to build the same extension mask without relying on
that undefined shift.
Stefan Reinauer [Sun, 31 May 2026 02:55:32 +0000 (19:55 -0700)]
native2amiga: pass signal state as pipe pointer
write_comm_pipe_pvoid stores a pointer-sized value. Cast the
processed-state token through void * at the call site so the helper
receives the type it expects.
Stefan Reinauer [Sun, 31 May 2026 07:32:59 +0000 (00:32 -0700)]
softfloat: drop stale float_raise declaration
float_raise() is provided as a static inline helper by
softfloat-specialize.h. Remove the separate external prototype from
softfloat.h so the header does not advertise a non-existent external
definition.
Stefan Reinauer [Sun, 31 May 2026 07:32:30 +0000 (00:32 -0700)]
softfloat: copy mod/rem quotient through uint64_t
floatx80_mod() and floatx80_rem() take a uint64_t quotient pointer,
while the FPU wrapper stores the quotient in uae_u64. Copy through a
temporary so the call does not depend on those typedefs being the same
type on every host.
Stefan Reinauer [Sun, 31 May 2026 07:28:39 +0000 (00:28 -0700)]
softfloat: use lowercase macro header name
The source already includes the macro helper as softfloat-macros.h.
Rename the tracked file to match that spelling so case-sensitive file
systems do not depend on the old all-caps name.
jit/x86-64: fix FPU FLDCW codegen crashes on 64-bit hosts
The x86-64 JIT could crash when compiling FPU rounding-mode changes
(FLDCW with an indexed operand) via two defects in codegen_x86.cpp:
1. x86_64_rex() dereferenced its 'b' (REX.B) pointer unconditionally and
ignored 'r'/'x'. raw_fldcw_m_indexed() passes its index register in the
'x' (REX.X) slot with b == NULL, so the function read through a NULL
pointer; an index register in r8-r15 would also have been mis-encoded.
x86_64_rex() now null-guards each pointer and emits REX.R/X/B (and W).
2. raw_fldcw_m_indexed() loaded the 64-bit base of the x87 control-word
table into RAX. RAX is allocatable (not in always_used[]) and may hold a
live m68k value mid-block, and a LOWFUNC cannot declare a register
clobber, so the allocator's view of RAX was silently corrupted; a later
access through that register (e.g. MOVEM.L ...,-(An)) then dereferenced
the table pointer as an m68k address and faulted. The base is now
materialized in a push/pop-preserved scratch register chosen to differ
from the index register.
Only x86-64 is affected; the 32-bit path uses a direct FLDCW [reg] encoding
and ARM64 uses different codegen.
Enable the ARM64 JIT build path, keep natmem above 4GB, reserve the full direct-memory window, commit read-only natmem gaps, and install a Windows ARM64 vectored exception handler for JIT access faults.
Add a GitHub Actions Windows ARM64 binary job that installs the ARM64 MSVC tools and builds winuae_msvc.vcxproj directly without ARM64-building host generator projects.
Validated with ARM64 Release and FullRelease MSBuild builds, plus VMware Windows ARM64 runtime logs showing the handler catching ramsey_low probes instead of crashing.