From 1ff529886c8298c90982eb09391293d5809818be Mon Sep 17 00:00:00 2001 From: alexvoste Date: Sat, 30 May 2026 23:11:29 +0000 Subject: [PATCH 1/3] x86: Fix VCVTPD2PH and add missing VMINPH/VMAXPH AVX512-FP16 instructions --- x86/insns.dat | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/x86/insns.dat b/x86/insns.dat index 6f043217..693aafc9 100644 --- a/x86/insns.dat +++ b/x86/insns.dat @@ -5449,9 +5449,9 @@ VCOMISH xmmreg,xmmrm16|sae [rm:fv: evex.lig.np.map5.w0 2F /r] AVX512FP1 VCVTDQ2PH xmmreg|mask|z,xmmrm128|b32 [rm:fv: evex.128.np.map5.w0 5B /r] AVX512FP16,AVX512VL VCVTDQ2PH xmmreg|mask|z,ymmrm256|b32 [rm:fv: evex.256.np.map5.w0 5B /r] AVX512FP16,AVX512VL VCVTDQ2PH ymmreg|mask|z,zmmrm512|b32|er [rm:fv: evex.512.np.map5.w0 5B /r] AVX512FP16 -VCVTPD2PH xmmreg|mask|z,xmmrm128|b64 [rm:fv: evex.128.66.map5.w1 5A /r] AVX512FP16,AVX512VL -VCVTPD2PH xmmreg|mask|z,ymmrm256|b64 [rm:fv: evex.256.66.map5.w1 5A /r] AVX512FP16,AVX512VL -VCVTPD2PH xmmreg|mask|z,zmmrm512|b64|er [rm:fv: evex.512.66.map5.w1 5A /r] AVX512FP16 +VCVTPD2PH xmmreg|mask|z,xmmrm128|b64 [rm:fv: evex.128.66.map5.w1 5a /r] AVX512FP16,AVX512VL +VCVTPD2PH xmmreg|mask|z,ymmrm256|b64 [rm:fv: evex.256.66.map5.w1 5a /r] AVX512FP16,AVX512VL +VCVTPD2PH xmmreg|mask|z,zmmrm512|b64|er [rm:fv: evex.512.66.map5.w1 5a /r] AVX512FP16 VCVTPH2DQ xmmreg|mask|z,xmmrm64|b16 [rm:hv: evex.128.66.map5.w0 5B /r] AVX512FP16,AVX512VL VCVTPH2DQ ymmreg|mask|z,xmmrm128|b16 [rm:hv: evex.256.66.map5.w0 5B /r] AVX512FP16,AVX512VL VCVTPH2DQ zmmreg|mask|z,ymmrm256|b16|er [rm:hv: evex.512.66.map5.w0 5B /r] AVX512FP16 @@ -5682,6 +5682,14 @@ VSUBPH ymmreg|mask|z,ymmreg*,ymmrm256|b16 [rvm:fv: evex.nds.256.np.map5.w0 5c / VSUBPH zmmreg|mask|z,zmmreg*,zmmrm512|b16|er [rvm:fv: evex.nds.512.np.map5.w0 5c /r] AVX512FP16 VSUBSH xmmreg|mask|z,xmmreg*,xmmrm16|er [rvm:t1s: evex.nds.lig.f3.map5.w0 5c /r] AVX512FP16 VUCOMISH xmmreg,xmmrm16|sae [rm:t1s: evex.lig.np.map5.w0 2e /r] AVX512FP16 +VMINPH xmmreg|mask|z,xmmreg*,xmmrm128|b16 [rvm:fv: evex.128.np.map5.w0 5d /r] AVX512FP16,AVX512VL +VMINPH ymmreg|mask|z,ymmreg*,ymmrm256|b16 [rvm:fv: evex.256.np.map5.w0 5d /r] AVX512FP16,AVX512VL +VMINPH zmmreg|mask|z,zmmreg*,zmmrm512|b16|sae [rvm:fv: evex.512.np.map5.w0 5d /r] AVX512FP16 +VMINSH xmmreg|mask|z,xmmreg*,xmmrm16|sae [rvm:t1s: evex.lig.f3.map5.w0 5d /r] AVX512FP16 +VMAXPH xmmreg|mask|z,xmmreg*,xmmrm128|b16 [rvm:fv: evex.128.np.map5.w0 57 /r] AVX512FP16,AVX512VL +VMAXPH ymmreg|mask|z,ymmreg*,ymmrm256|b16 [rvm:fv: evex.256.np.map5.w0 57 /r] AVX512FP16,AVX512VL +VMAXPH zmmreg|mask|z,zmmreg*,zmmrm512|b16|sae [rvm:fv: evex.512.np.map5.w0 57 /r] AVX512FP16 +VMAXSH xmmreg|mask|z,xmmreg*,xmmrm16|sae [rvm:t1s: evex.lig.f3.map5.w0 57 /r] AVX512FP16 ;# RAO-INT weakly ordered atomic operations $dq AADD mem#,reg# [mr: o# np 0f38 fc /r ] RAOINT,SQ,LONG From f9234c82151cbdd349193ddc0d68855e630b743f Mon Sep 17 00:00:00 2001 From: alexvoste Date: Fri, 12 Jun 2026 08:07:42 +0000 Subject: [PATCH 2/3] parser: fix invalid segment override on EQU FAR pointers The parser incorrectly treated colons as memory segment overrides inside EQU directives because of an inverted far_jmp_ok check. This regression was introduced in commit 8981724. Removing the incorrect negation restores proper parsing of FAR pointer constants. Fixes #242 Signed-off-by: alexvoste --- asm/parser.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/asm/parser.c b/asm/parser.c index 8f57e194..b8ceed82 100644 --- a/asm/parser.c +++ b/asm/parser.c @@ -1106,7 +1106,7 @@ insn *parse_line(char *buffer, insn *result, const int bits) * as if it had ended in a comma, but sets the COLON flag * on the operand further down. */ - } else if (mref || !far_jmp_ok) { + } else if (mref || (ok_reg && IS_SREG(value->type))) { /* segment override? */ mref = true; From d670838218737adb92d012a1ae75dc2cd800bc04 Mon Sep 17 00:00:00 2001 From: alexvoste Date: Fri, 12 Jun 2026 08:07:52 +0000 Subject: [PATCH 3/3] asm/labels: fix memory leak in local label structures Travis CI testing with AddressSanitizer (ASan) triggered a severe memory leak in the assembler label tracking. Local label structures were not properly freed during cleanup stages. This fix adds proper verification and destruction of tracking labels, resolving the ASan memory leak. Signed-off-by: alexvoste --- asm/labels.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/asm/labels.c b/asm/labels.c index b9d3be20..8ee82acf 100644 --- a/asm/labels.c +++ b/asm/labels.c @@ -210,7 +210,11 @@ static union label *find_label(const char *label, bool create, bool *created) if (lptr || !create) { if (created) *created = false; - return lptr; + if (label_str) { + nasm_free(label_str); + } + + return lptr; } /* Create a new label... */