From 3a7a9b8e67dc5529128cbbe3dedfa3e2f49ee911 Mon Sep 17 00:00:00 2001 From: liuq19 Date: Tue, 14 May 2024 16:40:46 +0800 Subject: [PATCH 1/2] feat: suport more instructions --- asm2asm.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/asm2asm.py b/asm2asm.py index 0cb60eb..5f1e8cb 100755 --- a/asm2asm.py +++ b/asm2asm.py @@ -465,6 +465,10 @@ def __call__(self, *args, **kwargs): 'MOVABSQ' : x86_64.MOV, 'VCMPEQPS' : VectorCompare(x86_64.VCMPPS, 0x00), 'VCMPTRUEPS' : VectorCompare(x86_64.VCMPPS, 0x0f), + 'VCVTSI2SDL' : x86_64.VCVTSI2SD, + 'VCVTSI2SDQ' : x86_64.VCVTSI2SD, + 'CVTSI2SDQ' : x86_64.CVTSI2SD, + 'CVTSI2SDL' : x86_64.CVTSI2SD, } @functools.cached_property @@ -532,6 +536,14 @@ def _instr_size(self) -> Optional[int]: 'MOVSBQ' : 1, 'MOVSWQ' : 2, 'MOVSLQ' : 4, + 'SETNE' : 1, + 'SETNZ' : 1, + 'SETLE' : 1, + 'SETNLE' : 1, + 'SETG' : 1, + 'SETNG' : 1, + 'SETGE' : 1, + 'SETNGE' : 1, } @staticmethod From d95441ede377f7a0e7bed4993d6e3c32d0f8c06f Mon Sep 17 00:00:00 2001 From: liuq19 Date: Wed, 15 May 2024 17:01:48 +0800 Subject: [PATCH 2/2] fix: allow ignore some symbols --- asm2asm.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/asm2asm.py b/asm2asm.py index 5f1e8cb..b6571c1 100755 --- a/asm2asm.py +++ b/asm2asm.py @@ -1858,6 +1858,7 @@ def _alloc_instr(self, instr: Instruction): __instr_repl__ = { 'movdqa' : 'movdqu', 'movaps' : 'movups', + 'movapd' : 'movupd', 'vmovdqa' : 'vmovdqu', 'vmovaps' : 'vmovups', 'vmovapd' : 'vmovupd', @@ -2505,6 +2506,12 @@ def make_subr_filename(name: str) -> str: else: return '%s_subr_%s.go' % ('_'.join(base[:-1]), base[-1]) + +IGNORED_STUBS = { + "_do_xprintf", + "_write_syscall" +} + def main(): # check for arguments if len(sys.argv) < 3: @@ -2588,6 +2595,13 @@ def main(): print('import (\n\t`github.com/bytedance/sonic/loader`\n)', file = fp) print(file = fp) print('const (', file = fp) + + # remove duplicated symbols + keys = list(asm.code.funcs.keys()) + for name in keys: + if name in IGNORED_STUBS: + asm.code.funcs.pop(name) + for name in asm.code.funcs.keys(): addr = asm.code.get(name) if addr is not None: @@ -2626,7 +2640,7 @@ def main(): print('var _cfunc%s = []loader.CFunc{' % name, file = fp) print(' {"%s_entry", 0, _entry_%s, 0, nil},' % (name, name), file = fp) print(' {"%s", _entry_%s, _size_%s, _stack_%s, _pcsp_%s},' % (name, name, name, name, name), file = fp) - print('}', file = fp) + print('}', file = fp) else: print(file = fp)