Exemplo n.º 1
0
def int_sub(expr: str, si: int, env: dict) -> str:
    asm: str = ''
    asm += cmp.compile_expr(pf.args_list(expr)[0], si, env)
    asm += cmp.emit('movl %eax, '+si+'(%esp)')
    asm += cmp.compile_expr(pf.args_list(expr)[1], si-dt.wordsize, env)
    asm += cmp.emit('subl ' + si+'(%esp), %eax')
    return asm
Exemplo n.º 2
0
def int_mul(expr: str, si: int, env: dict) -> str:
    asm: str = ''
    asm += cmp.compile_expr(pf.args_list(expr)[0], si, env)
    asm += cmp.emit('movl %eax, '+si+'(%esp)')
    asm += cmp.compile_expr(pf.args_list(expr)[1], si-dt.wordsize, env)
    asm += cmp.emit('shrl $'+dt.fixnum_shift + ', %eax')
    asm += cmp.emit('imull ' + si+'(%esp), %eax')
    return asm
Exemplo n.º 3
0
def int_lt(expr: str, si: int, env: dict) -> str:
    asm: str = ''
    asm += cmp.compile_expr(pf.args_list(expr)[0], si, env)
    asm += cmp.emit('movl %eax, '+si+'(%esp)')
    asm += cmp.compile_expr(pf.args_list(expr)[1], si-dt.wordsize, env)
    asm += cmp.emit('cmpl ' + si+'(%esp), %eax')
    asm += cmp.emit('xorl %eax, %eax')
    asm += cmp.emit('setl %al')
    asm += cmp.emit('sall $'+dt.bool_shift+', %eax')
    asm += cmp.emit('orl $'+dt.bool_tag+', %eax')
    return asm
Exemplo n.º 4
0
def is_zero(expr: str, si: int, env: dict)->str:
    asm: str = ''
    asm += cmp.compile_expr(pf.args_list(expr)[0], si, env)
    asm += emit_is_eax_equal_to('0')
    return asm
Exemplo n.º 5
0
def is_char(expr: str, si: int, env: dict) -> str:
    asm: str = ''
    asm += cmp.compile_expr(pf.args_list(expr)[0], si, env)
    asm += cmp.emit('andl $'+dt.char_mask+', %eax')
    asm += emit_is_eax_equal_to(str(dt.char_mask))
    return asm
Exemplo n.º 6
0
def subl(expr: str, si: int, env: str) -> str:
    asm: str = ''
    asm += cmp.compile_expr(pf.args_list(expr)[0], si, env)
    asm += cmp.emit('subl $'+dt.immediate_rep('1') + ', %eax')
    return asm