def _mulf16(ins): ''' Multiplies 2 32bit (16.16) fixed point numbers. The result is pushed onto the stack. ''' op1, op2 = tuple(ins.quad[2:]) if _f_ops(op1, op2) is not None: op1, op2 = _f_ops(op1, op2) if op2 == 1: # A * 1 => A output = _f16_oper(op1) output.append('push de') output.append('push hl') return output if op2 == -1: return _neg32(ins) output = _f16_oper(op1) if op2 == 0: output.append('ld hl, 0') output.append('ld e, h') output.append('ld d, l') output.append('push de') output.append('push hl') return output output = _f16_oper(op1, str(op2)) output.append('call __MULF16') output.append('push de') output.append('push hl') REQUIRES.add('mulf16.asm') return output
def _mulf(ins): ''' Multiplie 2 float values. The result is pushed onto the stack. ''' op1, op2 = tuple(ins.quad[2:]) if _f_ops(op1, op2) is not None: opa, opb = _f_ops(op1, op2) if opb == 1: # A * 1 => A output = _float_oper(opa) output.extend(_fpush()) return output output = _float_oper(op1, op2) output.append('call __MULF') output.extend(_fpush()) REQUIRES.add('mulf.asm') return output
def _addf(ins): ''' Adds 2 float values. The result is pushed onto the stack. ''' op1, op2 = tuple(ins.quad[2:]) if _f_ops(op1, op2) is not None: opa, opb = _f_ops(op1, op2) if opb == 0: # A + 0 => A output = _float_oper(opa) output.extend(_fpush()) return output output = _float_oper(op1, op2) output.append('call __ADDF') output.extend(_fpush()) REQUIRES.add('addf.asm') return output