common.py (1346B)
1 from collections import namedtuple 2 3 4 ArchDef = namedtuple( 5 'ArchDef', 6 'name word_bytes stack_align syscall_numbers encoders start_stub', 7 ) 8 9 Banner = namedtuple('Banner', 'text') 10 Literal = namedtuple('Literal', 'name hex_by_arch') 11 Nullary = namedtuple('Nullary', 'name kind') 12 Li = namedtuple('Li', 'name rd') 13 La = namedtuple('La', 'name rd') 14 LaBr = namedtuple('LaBr', 'name') 15 Mov = namedtuple('Mov', 'name rd rs') 16 Rrr = namedtuple('Rrr', 'name op rd ra rb') 17 AddI = namedtuple('AddI', 'name rd ra imm') 18 LogI = namedtuple('LogI', 'name op rd ra imm') 19 ShiftI = namedtuple('ShiftI', 'name op rd ra imm') 20 Mem = namedtuple('Mem', 'name op rt rn off') 21 LdArg = namedtuple('LdArg', 'name rd slot') 22 BranchReg = namedtuple('BranchReg', 'name kind rs') 23 CondB = namedtuple('CondB', 'name op ra rb') 24 CondBZ = namedtuple('CondBZ', 'name op ra') 25 Enter = namedtuple('Enter', 'name size') 26 27 28 def byte(n): 29 return f'{n & 0xFF:02X}' 30 31 32 def le32(n): 33 return (n & 0xFFFFFFFF).to_bytes(4, 'little').hex().upper() 34 35 36 def le64(n): 37 return (n & 0xFFFFFFFFFFFFFFFF).to_bytes(8, 'little').hex().upper() 38 39 40 def word_hex(word_bytes, n): 41 if word_bytes == 4: 42 return le32(n) 43 if word_bytes == 8: 44 return le64(n) 45 raise ValueError(f'unsupported word size: {word_bytes}') 46 47 48 def round_up(align, n): 49 return ((n + align - 1) // align) * align