; > &.Hdr.FPMacros as hacked by Tutu to be usable

;
; Macros to generate new floating point instructions in AAsm
;

f0      FN      0
f1      FN      1
f2      FN      2
f3      FN      3
f4      FN      4
f5      FN      5
f6      FN      6
f7      FN      7


        GBLA    mask

        GBLA    cond_mask
        GBLA    prepost_mask
        GBLA    incdec_mask
        GBLA    size_mask
        GBLA    size_rt_mask
        GBLA    Wb_mask
        GBLA    Rn_mask
        GBLA    Rd_mask
        GBLA    Fd_mask
        GBLA    Fn_mask
        GBLA    Fm_mask
        GBLA    offset_mask
        GBLA    round_mask


; Set offset_mask from numeric variable offset

        MACRO
        set_offset $offset
        [       ($offset >= 1024) :LOR: ($offset < 0)
        !       0, "FP offset out of range "
        MEXIT
        ]
        [       ($offset :AND: 3) <> 0
        !       0, "Invalid FP offset"
        MEXIT
        ]
offset_mask     SETA    $offset/4
        MEND


; Set Fd_mask from string $Fd

        MACRO
        set_Fd  $Fd
        [       $Fd = f0
Fd_mask SETA    &00000000
        MEXIT
        ]
        [       $Fd = f1
Fd_mask SETA    &00001000
        MEXIT
        ]
        [       $Fd = f2
Fd_mask SETA    &00002000
        MEXIT
        ]
        [       $Fd = f3
Fd_mask SETA    &00003000
        MEXIT
        ]
        [       $Fd = f4
Fd_mask SETA    &00004000
        MEXIT
        ]
        [       $Fd = f5
Fd_mask SETA    &00005000
        MEXIT
        ]
        [       $Fd = f6
Fd_mask SETA    &00006000
        MEXIT
        ]
        [       $Fd = f7
Fd_mask SETA    &00007000
        MEXIT
        ]
        MEND


; Set Fn_mask from string $Fn

        MACRO
        set_Fn  $Fn
        [       $Fn = f0
Fn_mask SETA    &00000000
        MEXIT
        ]
        [       $Fn = f1
Fn_mask SETA    &00010000
        MEXIT
        ]
        [       $Fn = f2
Fn_mask SETA    &00020000
        MEXIT
        ]
        [       $Fn = f3
Fn_mask SETA    &00030000
        MEXIT
        ]
        [       $Fn = f4
Fn_mask SETA    &00040000
        MEXIT
        ]
        [       $Fn = f5
Fn_mask SETA    &00050000
        MEXIT
        ]
        [       $Fn = f6
Fn_mask SETA    &00060000
        MEXIT
        ]
        [       $Fn = f7
Fn_mask SETA    &00070000
        MEXIT
        ]
        MEND


; Set Fm_mask from string $Fm

        MACRO
        set_Fm  $Fm
        [       "$Fm" = "0.0"
Fm_mask SETA    &00000008
        MEXIT
        ]
        [       "$Fm" = "1.0"
Fm_mask SETA    &00000009
        MEXIT
        ]
        [       "$Fm" = "2.0"
Fm_mask SETA    &0000000A
        MEXIT
        ]
        [       "$Fm" = "3.0"
Fm_mask SETA    &0000000B
        MEXIT
        ]
        [       "$Fm" = "4.0"
Fm_mask SETA    &0000000C
        MEXIT
        ]
        [       "$Fm" = "5.0"
Fm_mask SETA    &0000000D
        MEXIT
        ]
        [       "$Fm" = "0.5"
Fm_mask SETA    &0000000E
        MEXIT
        ]
        [       "$Fm" = "10.0"
Fm_mask SETA    &0000000F
        MEXIT
        ]
        [       $Fm = f0
Fm_mask SETA    &00000000
        MEXIT
        ]
        [       $Fm = f1
Fm_mask SETA    &00000001
        MEXIT
        ]
        [       $Fm = f2
Fm_mask SETA    &00000002
        MEXIT
        ]
        [       $Fm = f3
Fm_mask SETA    &00000003
        MEXIT
        ]
        [       $Fm = f4
Fm_mask SETA    &00000004
        MEXIT
        ]
        [       $Fm = f5
Fm_mask SETA    &00000005
        MEXIT
        ]
        [       $Fm = f6
Fm_mask SETA    &00000006
        MEXIT
        ]
        [       $Fm = f7
Fm_mask SETA    &00000007
        MEXIT
        ]
        MEND


; Set Rn_mask from string $Rn

        MACRO
        set_Rn  $Rn
        [       $Rn = r0
Rn_mask SETA    &00000000
        MEXIT
        ]
        [       $Rn = r1
Rn_mask SETA    &00010000
        MEXIT
        ]
        [       $Rn = r2
Rn_mask SETA    &00020000
        MEXIT
        ]
        [       $Rn = r3
Rn_mask SETA    &00030000
        MEXIT
        ]
        [       $Rn = r4
Rn_mask SETA    &00040000
        MEXIT
        ]
        [       $Rn = r5
Rn_mask SETA    &00050000
        MEXIT
        ]
        [       $Rn = r6
Rn_mask SETA    &00060000
        MEXIT
        ]
        [       $Rn = r7
Rn_mask SETA    &00070000
        MEXIT
        ]
        [       $Rn = r8
Rn_mask SETA    &00080000
        MEXIT
        ]
        [       $Rn = r9
Rn_mask SETA    &00090000
        MEXIT
        ]
        [       $Rn = r10
Rn_mask SETA    &000A0000
        MEXIT
        ]
        [       $Rn = r11
Rn_mask SETA    &000B0000
        MEXIT
        ]
        [       $Rn = r12
Rn_mask SETA    &000C0000
        MEXIT
        ]
        [       $Rn = r13
Rn_mask SETA    &000D0000
        MEXIT
        ]
        [       $Rn = r14
Rn_mask SETA    &000E0000
        MEXIT
        ]
        [       $Rn = r15
Rn_mask SETA    &000F0000
        MEXIT
        ]
        MEND


; Set Rd_mask from string $Rd

        MACRO
        set_Rd  $Rd
        [       $Rd = r0
Rd_mask SETA    &00000000
        MEXIT
        ]
        [       $Rd = r1
Rd_mask SETA    &00001000
        MEXIT
        ]
        [       $Rd = r2
Rd_mask SETA    &00002000
        MEXIT
        ]
        [       $Rd = r3
Rd_mask SETA    &00003000
        MEXIT
        ]
        [       $Rd = r4
Rd_mask SETA    &00004000
        MEXIT
        ]
        [       $Rd = r5
Rd_mask SETA    &00005000
        MEXIT
        ]
        [       $Rd = r6
Rd_mask SETA    &00006000
        MEXIT
        ]
        [       $Rd = r7
Rd_mask SETA    &00007000
        MEXIT
        ]
        [       $Rd = r8
Rd_mask SETA    &00008000
        MEXIT
        ]
        [       $Rd = r9
Rd_mask SETA    &00009000
        MEXIT
        ]
        [       $Rd = r10
Rd_mask SETA    &0000A000
        MEXIT
        ]
        [       $Rd = r11
Rd_mask SETA    &0000B000
        MEXIT
        ]
        [       $Rd = r12
Rd_mask SETA    &0000C000
        MEXIT
        ]
        [       $Rd = r13
Rd_mask SETA    &0000D000
        MEXIT
        ]
        [       $Rd = r14
Rd_mask SETA    &0000E000
        MEXIT
        ]
        [       $Rd = r15
Rd_mask SETA    &0000F000
        MEXIT
        ]
        MEND


; Set Wb_mask from string $Wb (writeback is like xxM not xxR)

        MACRO
        set_Wb  $Wb
        [       "$Wb"="!"
Wb_mask SETA    2_00000000001000000000000000000000
        |
Wb_mask SETA    0
        ]
        MEND


; Set size_mask from string $size

        MACRO
        set_size $size
        [       "$size"="S"
size_mask       SETA    2_00000000000000000000000000000000
        MEXIT
        ]
        [       "$size"="D"
size_mask       SETA    2_00000000000000001000000000000000
        MEXIT
        ]
        [       "$size"="E"
size_mask       SETA    2_00000000010000000000000000000000
        MEXIT
        ]
        [       "$size"="P"
size_mask       SETA    2_00000000010000001000000000000000
        MEXIT
        ]
        MEND


; Set size_rt_mask from string $size_rt

        MACRO
        set_size_rt $size_rt
        [       "$size_rt"="S"
size_rt_mask       SETA    2_00000000000000000000000000000000
        MEXIT
        ]
        [       "$size_rt"="D"
size_rt_mask       SETA    2_00000000000000000000000010000000
        MEXIT
        ]
        [       "$size_rt"="E"
size_rt_mask       SETA    2_00000000000010000000000000000000
        MEXIT
        ]
        [       "$size_rt"="P"
size_rt_mask       SETA    2_00000000000010000000000010000000
        MEXIT
        ]
        MEND


; Set incdec_mask from string $incdec

        MACRO
        set_incdec $incdec
        [       "$incdec"="inc"
incdec_mask     SETA    2_00000000100000000000000000000000
        |
incdec_mask     SETA    0
        ]
        MEND


; Set prepost_mask from string $prepost

        MACRO
        set_prepost $prepost
        [       "$prepost"="pre"
prepost_mask    SETA    2_00000001000000000000000000000000
        |
prepost_mask    SETA    0
        ]
        MEND


; Set round_mask from string $round

        MACRO
        set_round $round
round_mask      SETA    0
        [       "$round"="Z"
round_mask      SETA    &00000060
        MEXIT
        ]
        [       "$round"="P"
round_mask      SETA    &00000020
        MEXIT
        ]
        [       "$round"="M"
round_mask      SETA    &00000040
        MEXIT
        ]
        MEND


; Set cond_mask from string $cond

        MACRO
        set_cond $cond
        [       "$cond"=""
cond_mask       SETA    &E0000000
        MEXIT
        ]
        [       "$cond"="EQ"
cond_mask       SETA    &00000000
        MEXIT
        ]
        [       "$cond"="NE"
cond_mask       SETA    &10000000
        MEXIT
        ]
        [       "$cond"="CS" :LOR: "$cond"="HS"
cond_mask       SETA    &20000000
        MEXIT
        ]
        [       "$cond"="CC" :LOR: "$cond"="LO"
cond_mask       SETA    &30000000
        MEXIT
        ]
        [       "$cond"="MI"
cond_mask       SETA    &40000000
        MEXIT
        ]
        [       "$cond"="PL"
cond_mask       SETA    &50000000
        MEXIT
        ]
        [       "$cond"="VS"
cond_mask       SETA    &60000000
        MEXIT
        ]
        [       "$cond"="VC"
cond_mask       SETA    &70000000
        MEXIT
        ]
        [       "$cond"="HI"
cond_mask       SETA    &80000000
        MEXIT
        ]
        [       "$cond"="LS"
cond_mask       SETA    &90000000
        MEXIT
        ]
        [       "$cond"="GE"
cond_mask       SETA    &A0000000
        MEXIT
        ]
        [       "$cond"="LT"
cond_mask       SETA    &B0000000
        MEXIT
        ]
        [       "$cond"="GT"
cond_mask       SETA    &C0000000
        MEXIT
        ]
        [       "$cond"="LE"
cond_mask       SETA    &D0000000
        MEXIT
        ]
        [       "$cond"="AL"
cond_mask       SETA    &E0000000
        MEXIT
        ]
        [       "$cond"="NV"
cond_mask       SETA    &F0000000
        MEXIT
        ]
        MEND


; +++++++++++++ Now for actual fp instruction generating macros +++++++++++++++

        MACRO
$label  LDF     $cond,$size,$Fd,$Rn,$offset,$prepost,$incdec,$Wb
$label
        set_cond $cond
        set_size $size
        set_Fd   $Fd
        set_Rn   $Rn
        set_offset $offset
        set_prepost $prepost
        set_incdec $incdec
        set_Wb   $Wb

mask    SETA    cond_mask :OR: size_mask :OR: Fd_mask :OR: Rn_mask
mask    SETA    mask :OR: offset_mask :OR: prepost_mask :OR: Wb_mask
mask    SETA    mask :OR: incdec_mask

        DCD     mask :OR: 2_00001100000100000000000100000000
        MEND


        MACRO
$label  STF     $cond,$size,$Fd,$Rn,$offset,$prepost,$incdec,$Wb
$label
        set_cond $cond
        set_size $size
        set_Fd   $Fd
        set_Rn   $Rn
        set_offset $offset
        set_prepost $prepost
        set_incdec $incdec
        set_Wb   $Wb

mask    SETA    cond_mask :OR: size_mask :OR: Fd_mask :OR: Rn_mask
mask    SETA    mask :OR: offset_mask :OR: prepost_mask :OR: Wb_mask
mask    SETA    mask :OR: incdec_mask

        DCD     mask :OR: 2_00001100000000000000000100000000
        MEND


        MACRO
$label  WFS     $cond,$Rd
$label
        set_cond $cond
        set_Rd  $Rd

        DCD     cond_mask :OR: Rd_mask :OR: 2_00001110001000000000000100010000
        MEND


        MACRO
$label  RFS     $cond,$Rd
$label
        set_cond $cond
        set_Rd  $Rd

        DCD     cond_mask :OR: Rd_mask :OR: 2_00001110001100000000000100010000
        MEND


        MACRO
$label  FLT     $cond,$size_rt,$Fn,$Rd,$round
$label
        set_cond $cond
        set_size_rt $size_rt
        set_Fn $Fn
        set_Rd $Rd
        set_round $round

mask    SETA    cond_mask :OR: size_rt_mask :OR: Fn_mask :OR: Rd_mask

        DCD     mask :OR: 2_00001110000000000000000100010000
        MEND


        MACRO
$label  FIX     $cond,$Rd,$Fm,$round
$label
        set_cond $cond
        set_Rd $Rd
        set_Fm $Fm
        set_round $round

mask    SETA    cond_mask :OR: Rd_mask :OR: Fm_mask

        DCD     mask :OR: 2_00001110000100000000000100010000
        MEND


        MACRO
$label  CMF     $cond,$Fn,$Fm
$label
        set_cond $cond
        set_Fn $Fn
        set_Fm $Fm

mask    SETA    cond_mask :OR: Fn_mask :OR: Fm_mask

        DCD     mask :OR: 2_00001110100100001111000100010000
        MEND


        MACRO
$label  CNF     $cond,$Fn,$Fm
$label
        set_cond $cond
        set_Fn $Fn
        set_Fm $Fm

mask    SETA    cond_mask :OR: Fn_mask :OR: Fm_mask

        DCD     mask :OR: 2_00001110101100001111000100010000
        MEND


        MACRO
$label  CMFE    $cond,$Fn,$Fm
$label
        set_cond $cond
        set_Fn $Fn
        set_Fm $Fm

mask    SETA    cond_mask :OR: Fn_mask :OR: Fm_mask

        DCD     mask :OR: 2_00001110110100001111000100010000
        MEND


        MACRO
$label  CNFE    $cond,$Fn,$Fm
$label
        set_cond $cond
        set_Fn $Fn
        set_Fm $Fm

mask    SETA    cond_mask :OR: Fn_mask :OR: Fm_mask

        DCD     mask :OR: 2_00001110111100001111000100010000
        MEND


        MACRO
$label  mvf     $cond,$size_rt,$Fd,$Fm,$round
$label
        set_cond $cond
        set_size_rt $size_rt
        set_Fd $Fd
        set_Fm $Fm
        set_round $round

mask    SETA    cond_mask :OR: size_rt_mask :OR: Fd_mask :OR: Fm_mask

        DCD     mask :OR: 2_00001110000000001000000100000000
        MEND


        MACRO
$label  MNF     $cond,$size_rt,$Fd,$Fm,$round
$label
        set_cond $cond
        set_size_rt $size_rt
        set_Fd $Fd
        set_Fm $Fm
        set_round $round

mask    SETA    cond_mask :OR: size_rt_mask :OR: Fd_mask :OR: Fm_mask

        DCD     mask :OR: 2_00001110000100001000000100000000
        MEND


        MACRO
$label  ABS     $cond,$size_rt,$Fd,$Fm,$round
$label
        set_cond $cond
        set_size_rt $size_rt
        set_Fd $Fd
        set_Fm $Fm
        set_round $round

mask    SETA    cond_mask :OR: size_rt_mask :OR: Fd_mask :OR: Fm_mask

        DCD     mask :OR: 2_00001110001000001000000100000000
        MEND


        MACRO
$label  RND     $cond,$size_rt,$Fd,$Fm,$round
$label
        set_cond $cond
        set_size_rt $size_rt
        set_Fd $Fd
        set_Fm $Fm
        set_round $round

mask    SETA    cond_mask :OR: size_rt_mask :OR: Fd_mask :OR: Fm_mask

        DCD     mask :OR: 2_00001110001100001000000100000000
        MEND


        MACRO
$label  SQT     $cond,$size_rt,$Fd,$Fm,$round
$label
        set_cond $cond
        set_size_rt $size_rt
        set_Fd $Fd
        set_Fm $Fm
        set_round $round

mask    SETA    cond_mask :OR: size_rt_mask :OR: Fd_mask :OR: Fm_mask

        DCD     mask :OR: 2_00001110010000001000000100000000
        MEND


        MACRO
$label  LOG     $cond,$size_rt,$Fd,$Fm,$round
$label
        set_cond $cond
        set_size_rt $size_rt
        set_Fd $Fd
        set_Fm $Fm
        set_round $round

mask    SETA    cond_mask :OR: size_rt_mask :OR: Fd_mask :OR: Fm_mask

        DCD     mask :OR: 2_00001110010100001000000100000000
        MEND


        MACRO
$label  LGN     $cond,$size_rt,$Fd,$Fm,$round
$label
        set_cond $cond
        set_size_rt $size_rt
        set_Fd $Fd
        set_Fm $Fm
        set_round $round

mask    SETA    cond_mask :OR: size_rt_mask :OR: Fd_mask :OR: Fm_mask

        DCD     mask :OR: 2_00001110011000001000000100000000
        MEND


        MACRO
$label  EXP     $cond,$size_rt,$Fd,$Fm,$round
$label
        set_cond $cond
        set_size_rt $size_rt
        set_Fd $Fd
        set_Fm $Fm
        set_round $round

mask    SETA    cond_mask :OR: size_rt_mask :OR: Fd_mask :OR: Fm_mask

        DCD     mask :OR: 2_00001110011100001000000100000000
        MEND


        MACRO
$label  SIN     $cond,$size_rt,$Fd,$Fm,$round
$label
        set_cond $cond
        set_size_rt $size_rt
        set_Fd $Fd
        set_Fm $Fm
        set_round $round

mask    SETA    cond_mask :OR: size_rt_mask :OR: Fd_mask :OR: Fm_mask

        DCD     mask :OR: 2_00001110100000001000000100000000
        MEND


        MACRO
$label  COS     $cond,$size_rt,$Fd,$Fm,$round
$label
        set_cond $cond
        set_size_rt $size_rt
        set_Fd $Fd
        set_Fm $Fm
        set_round $round

mask    SETA    cond_mask :OR: size_rt_mask :OR: Fd_mask :OR: Fm_mask

        DCD     mask :OR: 2_00001110100100001000000100000000
        MEND


        MACRO
$label  TAN     $cond,$size_rt,$Fd,$Fm,$round
$label
        set_cond $cond
        set_size_rt $size_rt
        set_Fd $Fd
        set_Fm $Fm
        set_round $round

mask    SETA    cond_mask :OR: size_rt_mask :OR: Fd_mask :OR: Fm_mask

        DCD     mask :OR: 2_00001110101000001000000100000000
        MEND


        MACRO
$label  ASN     $cond,$size_rt,$Fd,$Fm,$round
$label
        set_cond $cond
        set_size_rt $size_rt
        set_Fd $Fd
        set_Fm $Fm
        set_round $round

mask    SETA    cond_mask :OR: size_rt_mask :OR: Fd_mask :OR: Fm_mask

        DCD     mask :OR: 2_00001110101100001000000100000000
        MEND


        MACRO
$label  ACS     $cond,$size_rt,$Fd,$Fm,$round
$label
        set_cond $cond
        set_size_rt $size_rt
        set_Fd $Fd
        set_Fm $Fm
        set_round $round

mask    SETA    cond_mask :OR: size_rt_mask :OR: Fd_mask :OR: Fm_mask

        DCD     mask :OR: 2_00001110110000001000000100000000
        MEND


        MACRO
$label  ATN     $cond,$size_rt,$Fd,$Fm,$round
$label
        set_cond $cond
        set_size_rt $size_rt
        set_Fd $Fd
        set_Fm $Fm
        set_round $round

mask    SETA    cond_mask :OR: size_rt_mask :OR: Fd_mask :OR: Fm_mask

        DCD     mask :OR: 2_00001110110100001000000100000000
        MEND


        MACRO
$label  ADF     $cond,$size_rt,$Fd,$Fn,$Fm,$round
$label
        set_cond $cond
        set_size_rt $size_rt
        set_Fd $Fd
        set_Fn $Fn
        set_Fm $Fm
        set_round $round

mask    SETA    cond_mask :OR: size_rt_mask :OR: Fd_mask :OR: Fn_mask
mask    SETA    mask :OR: Fm_mask :OR: round_mask

        DCD     mask :OR: 2_00001110000000000000000100000000
        MEND


        MACRO
$label  SUF     $cond,$size_rt,$Fd,$Fn,$Fm,$round
$label
        set_cond $cond
        set_size_rt $size_rt
        set_Fd $Fd
        set_Fn $Fn
        set_Fm $Fm
        set_round $round

mask    SETA    cond_mask :OR: size_rt_mask :OR: Fd_mask :OR: Fn_mask
mask    SETA    mask :OR: Fm_mask :OR: round_mask

        DCD     mask :OR: 2_00001110001000000000000100000000
        MEND


        MACRO
$label  RSF     $cond,$size_rt,$Fd,$Fn,$Fm,$round
$label
        set_cond $cond
        set_size_rt $size_rt
        set_Fd $Fd
        set_Fn $Fn
        set_Fm $Fm
        set_round $round

mask    SETA    cond_mask :OR: size_rt_mask :OR: Fd_mask :OR: Fn_mask
mask    SETA    mask :OR: Fm_mask :OR: round_mask

        DCD     mask :OR: 2_00001110001100000000000100000000
        MEND


        MACRO
$label  MUF     $cond,$size_rt,$Fd,$Fn,$Fm,$round
$label
        set_cond $cond
        set_size_rt $size_rt
        set_Fd $Fd
        set_Fn $Fn
        set_Fm $Fm
        set_round $round

mask    SETA    cond_mask :OR: size_rt_mask :OR: Fd_mask :OR: Fn_mask
mask    SETA    mask :OR: Fm_mask :OR: round_mask

        DCD     mask :OR: 2_00001110000100000000000100000000
        MEND


        MACRO
$label  FML     $cond,$size_rt,$Fd,$Fn,$Fm,$round
$label
        set_cond $cond
        set_size_rt $size_rt
        set_Fd $Fd
        set_Fn $Fn
        set_Fm $Fm
        set_round $round

mask    SETA    cond_mask :OR: size_rt_mask :OR: Fd_mask :OR: Fn_mask
mask    SETA    mask :OR: Fm_mask :OR: round_mask

        DCD     mask :OR: 2_00001110100100000000000100000000
        MEND


        MACRO
$label  DVF     $cond,$size_rt,$Fd,$Fn,$Fm,$round
$label
        set_cond $cond
        set_size_rt $size_rt
        set_Fd $Fd
        set_Fn $Fn
        set_Fm $Fm
        set_round $round

mask    SETA    cond_mask :OR: size_rt_mask :OR: Fd_mask :OR: Fn_mask
mask    SETA    mask :OR: Fm_mask :OR: round_mask

        DCD     mask :OR: 2_00001110010000000000000100000000
        MEND


        MACRO
$label  RDF     $cond,$size_rt,$Fd,$Fn,$Fm,$round
$label
        set_cond $cond
        set_size_rt $size_rt
        set_Fd $Fd
        set_Fn $Fn
        set_Fm $Fm
        set_round $round

mask    SETA    cond_mask :OR: size_rt_mask :OR: Fd_mask :OR: Fn_mask
mask    SETA    mask :OR: Fm_mask :OR: round_mask

        DCD     mask :OR: 2_00001110010100000000000100000000
        MEND


        MACRO
$label  POW     $cond,$size_rt,$Fd,$Fn,$Fm,$round
$label
        set_cond $cond
        set_size_rt $size_rt
        set_Fd $Fd
        set_Fn $Fn
        set_Fm $Fm
        set_round $round

mask    SETA    cond_mask :OR: size_rt_mask :OR: Fd_mask :OR: Fn_mask
mask    SETA    mask :OR: Fm_mask :OR: round_mask

        DCD     mask :OR: 2_00001110011000000000000100000000
        MEND


        MACRO
$label  RPW     $cond,$size_rt,$Fd,$Fn,$Fm,$round
$label
        set_cond $cond
        set_size_rt $size_rt
        set_Fd $Fd
        set_Fn $Fn
        set_Fm $Fm
        set_round $round

mask    SETA    cond_mask :OR: size_rt_mask :OR: Fd_mask :OR: Fn_mask
mask    SETA    mask :OR: Fm_mask :OR: round_mask

        DCD     mask :OR: 2_00001110011100000000000100000000
        MEND


        MACRO
$label  FDV     $cond,$size_rt,$Fd,$Fn,$Fm,$round
$label
        set_cond $cond
        set_size_rt $size_rt
        set_Fd $Fd
        set_Fn $Fn
        set_Fm $Fm
        set_round $round

mask    SETA    cond_mask :OR: size_rt_mask :OR: Fd_mask :OR: Fn_mask
mask    SETA    mask :OR: Fm_mask :OR: round_mask

        DCD     mask :OR: 2_00001110101000000000000100000000
        MEND


        MACRO
$label  FRD     $cond,$size_rt,$Fd,$Fn,$Fm,$round
$label
        set_cond $cond
        set_size_rt $size_rt
        set_Fd $Fd
        set_Fn $Fn
        set_Fm $Fm
        set_round $round

mask    SETA    cond_mask :OR: size_rt_mask :OR: Fd_mask :OR: Fn_mask
mask    SETA    mask :OR: Fm_mask :OR: round_mask

        DCD     mask :OR: 2_00001110101100000000000100000000
        MEND


        MACRO
$label  POL     $cond,$size_rt,$Fd,$Fn,$Fm,$round
$label
        set_cond $cond
        set_size_rt $size_rt
        set_Fd $Fd
        set_Fn $Fn
        set_Fm $Fm
        set_round $round

mask    SETA    cond_mask :OR: size_rt_mask :OR: Fd_mask :OR: Fn_mask
mask    SETA    mask :OR: Fm_mask :OR: round_mask

        DCD     mask :OR: 2_00001110110000000000000100000000
        MEND


        MACRO
$label  RMF     $cond,$size_rt,$Fd,$Fn,$Fm,$round
$label
        set_cond $cond
        set_size_rt $size_rt
        set_Fd $Fd
        set_Fn $Fn
        set_Fm $Fm
        set_round $round

mask    SETA    cond_mask :OR: size_rt_mask :OR: Fd_mask :OR: Fn_mask
mask    SETA    mask :OR: Fm_mask :OR: round_mask

        DCD     mask :OR: 2_00001110100000000000000100000000
        MEND


        END
