(herald (assembler ppc_flo) (env t (assembler as_open) (assembler ppc_machine) (assembler ppc_format)) (syntax-table tas-ppc-syntax-table)) ;;;; PowerPC Instruction Set: Floating-Point Instructions ;;; Copyright (C) 2005, Taylor Campbell ;;; All rights reserved. ;;; See the LICENCE file for details. ;;; Arithmetic (define-binaryB-flop fadd #b111111 #b10101) ;Add Double (define-binaryB-flop fadds #b111101 #b10101) ;Add Single (define-binaryB-flop fsub #b111111 #b10100) ;Subtract Double (define-binaryB-flop fsubs #b111101 #b10100) ;Subtract Single (define-binaryC-flop fmul #b111111 #b11001) ;Multiply Double (define-binaryC-flop fmuls #b111101 #b11001) ;Multiply Single (define-binaryC-flop fdiv #b111111 #b10010) ;Divide Double (define-binaryC-flop fdivs #b111101 #b10010) ;Divide Single (define-unary-flop fabs #b111111 #b0100001000) ;Absolute Value (define-unary-flop fnabs #b111111 #b0010001000) ;Negative Abs. Value (define-unary-flop fneg #b111111 #b0000101000) ;Negate (define-unary-flop fres #b111111 #b0000011000) ;Recip. Est. Single (define-unary-flop frsqrte #b111111 #b0000011010) ;Recip. Sq. Rt. Est. (define-unary-flop fsqrt #b111111 #b0000010110) ;Square Root Double (define-unary-flop fsqrts #b111101 #b0000010110) ;Square Root Single ;;; Multiply-add (define-ternary-flop fmadd #b111111 #b11101) ;Multiply-Add Double (define-ternary-flop fmadds #b111101 #b11101) ;Multiply-Add Single (define-ternary-flop fmsub #b111111 #b11100) ;Multiply-Sub Double (define-ternary-flop fmsubs #b111101 #b11100) ;Multiply-Sub Single (define-ternary-flop fnmadd #b111111 #b11111) ;Neg Mul-Add Double (define-ternary-flop fnmadds #b111101 #b11111) ;Neg Mul-Add Single (define-ternary-flop fnmsub #b111111 #b11110) ;Neg Mul-Sub Double (define-ternary-flop fnmsubs #b111101 #b11110) ;Neg Mul-Sub Single ;;; Comparison (define-ppc-op (fcmpo cr-field rA rB) ;Compare Ordered (ppc/cmp-format #b111111 cr-field rA (ppc/cmp-reg-operand rB 32) "fcmpo")) (define-ppc-op (fcmpu cr-field rA rB) ;Compare Unordered (ppc/cmp-format #b111111 cr-field rA (ppc/cmp-reg-operand rB 0) "fcmpu")) ;;; Movement, rounding, & conversion (define-unary-flop fmr #b111111 #b0001001000) ;Move Register (define-ternary-flop fsel #b111111 #b10111) ;Select (define-unary-flop frsp #b111111 #b0000001100) ;Round to Single (define-unary-flop fctiw #b111111 #b0000001110) ;Convert to Int. Word (define-unary-flop fctiwz #b111111 #b0000001111) ; " with Round to Zero