Stefan Reinauer [Sun, 31 May 2026 02:59:04 +0000 (19:59 -0700)]
cd32_fmv: include libmpeg2 headers as C
The external libmpeg2 headers declare a C API. Wrap them in
extern "C" when they are included from C++ so the CD32 FMV decoder
links against the library's C symbols.
Stefan Reinauer [Sun, 31 May 2026 02:57:32 +0000 (19:57 -0700)]
prowizard: use C linkage for ripper hooks
The ripper entry points are consumed from C++ code. Wrap the public
declarations and the compiled search entry point in C linkage so names
match across C and C++ builds.
Stefan Reinauer [Sat, 23 May 2026 04:26:23 +0000 (21:26 -0700)]
archive: support official LZMA SDK 16.04 APIs
The bundled 7z reader used older SDK field names directly. Keep the
existing Windows SDK layout as the default path, and add an opt-in
UAE_7Z_SDK_1604 path for the public 16.04 headers.
Select the matching XZ finish constant by SDK family so the shared
archive code can build with either header set.
Stefan Reinauer [Thu, 21 May 2026 23:11:14 +0000 (16:11 -0700)]
chd: make LZMA and inline helpers portable
Use the public LZMA property writer to build decoder properties
instead of the MAME-only allocator helper. This keeps the CHD LZMA
path compatible with the stock SDK interface.
Make ATTR_FORCE_INLINE produce inline definitions on GCC and Clang so
header-defined helpers can be included safely by multiple translation
units. Define PTR64 from CPU_64_BIT when the build has not already
provided it.
Stefan Reinauer [Sun, 31 May 2026 02:56:31 +0000 (19:56 -0700)]
jit: use ucontext_t for gregset access
The generic Unix exception path works with ucontext_t directly. Use that
typedef instead of struct ucontext so platforms that expose only
ucontext_t still build.
Stefan Reinauer [Tue, 26 May 2026 01:14:33 +0000 (18:14 -0700)]
gfxboard: rewind Picasso IV flash before autoconfig
Picasso IV autoconfig is read from the flash image, but the
initializer can run more than once while the expansion list is
scanned and sorted. loadp4rom() leaves the flash zfile positioned
later in the image, so a later dry scan read all-0xff data and the
board looked like it had no autoconfig block.
Seek back to the beginning before reading the Picasso IV
autoconfig bytes so repeated scans see the same board data.
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.