boot2

Playing with the boostrap
git clone https://git.ryansepassi.com/git/boot2.git
Log | Files | Refs | README

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