def op_eq():
global sp
sp = (sp - 2) & WORD_MASK
- mem[sp & MEM_MASK] = int(
+ mem[sp & MEM_MASK] = -int(
mem[sp & MEM_MASK] == mem[(sp + 1) & MEM_MASK]
- )
+ ) & WORD_MASK
sp = (sp + 1) & WORD_MASK
def op_eqv():
# xnor
def op_ge():
global sp
sp = (sp - 2) & WORD_MASK
- mem[sp & MEM_MASK] = int(
+ mem[sp & MEM_MASK] = -int(
(mem[sp & MEM_MASK] ^ 0x400000000000) >=
(mem[(sp + 1) & MEM_MASK] ^ 0x400000000000)
- )
+ ) & WORD_MASK
sp = (sp + 1) & WORD_MASK
def op_global():
global pc
def op_gr():
global sp
sp = (sp - 2) & WORD_MASK
- mem[sp & MEM_MASK] = int(
+ mem[sp & MEM_MASK] = -int(
(mem[sp & MEM_MASK] ^ 0x400000000000) >
(mem[(sp + 1) & MEM_MASK] ^ 0x400000000000)
- )
+ ) & WORD_MASK
sp = (sp + 1) & WORD_MASK
def op_iteml():
assert False
def op_le():
global sp
sp = (sp - 2) & WORD_MASK
- mem[sp & MEM_MASK] = int(
+ mem[sp & MEM_MASK] = -int(
(mem[sp & MEM_MASK] ^ 0x400000000000) <=
(mem[(sp + 1) & MEM_MASK] ^ 0x400000000000)
- )
+ ) & WORD_MASK
sp = (sp + 1) & WORD_MASK
def op_lg():
global pc, sp
def op_ls():
global sp
sp = (sp - 2) & WORD_MASK
- mem[sp & MEM_MASK] = int(
+ mem[sp & MEM_MASK] = -int(
(mem[sp & MEM_MASK] ^ 0x400000000000) <
(mem[(sp + 1) & MEM_MASK] ^ 0x400000000000)
- )
+ ) & WORD_MASK
sp = (sp + 1) & WORD_MASK
def op_lshift():
# unsigned shift by positive or negative count (too large => return 0)
def op_ne():
global sp
sp = (sp - 2) & WORD_MASK
- mem[sp & MEM_MASK] = int(
+ mem[sp & MEM_MASK] = -int(
mem[sp & MEM_MASK] != mem[(sp + 1) & MEM_MASK]
- )
+ ) & WORD_MASK
sp = (sp + 1) & WORD_MASK
def op_neg():
global sp