Library multi_sub_s_u_prg
Require Import machine_int.
Import MachineInt.
Require Import mips_cmd.
Require Import pick_sign_prg multi_add_s_u_prg multi_add_u_u_prg multi_lt_prg.
Require Import multi_sub_u_u_prg multi_negate_prg copy_u_u_prg multi_is_zero_u_prg.
Local Open Scope mips_cmd_scope.
Section multi_sub_s_u0_sect.
Variables rk rx ry a0 a1 a2 a3 a4 a5 rX : reg.
Import MachineInt.
Require Import mips_cmd.
Require Import pick_sign_prg multi_add_s_u_prg multi_add_u_u_prg multi_lt_prg.
Require Import multi_sub_u_u_prg multi_negate_prg copy_u_u_prg multi_is_zero_u_prg.
Local Open Scope mips_cmd_scope.
Section multi_sub_s_u0_sect.
Variables rk rx ry a0 a1 a2 a3 a4 a5 rX : reg.
x <- x - y with x signed, y unsigned and <> 0
expect both to be rk words long
Definition multi_sub_s_u0 :=
lw rX four16 rx ;
pick_sign rx a0 a1 ;
If_bgez a1 Then
If_beq a1 , r0 Then
copy_u_u rk rX ry a2 a3 a4 ;
addiu a3 r0 zero16 ;
sw rk zero16 rx ;
multi_negate rx a0
Else
multi_lt rk rX ry a0 a1 a5 a2 a3 a4 ;
If_beq a5 , r0 Then
If_beq a2 , r0 Then
addiu a3 r0 zero16 ;
sw r0 zero16 rx
Else
multi_sub_u_u rk rX ry rX a0 a1 a2 a3 a4 a5
Else
multi_sub_u_u rk ry rX rX a0 a1 a2 a3 a4 a5 ;
multi_negate rx a0
Else
addiu a3 r0 one16 ;
multi_add_u_u rk a3 ry rX rX a0 a1 a2 ;
mflo a3.
End multi_sub_s_u0_sect.
Section multi_sub_s_u_sect.
Variables rk rx ry a0 a1 a2 a3 a4 a5 rX : reg.
lw rX four16 rx ;
pick_sign rx a0 a1 ;
If_bgez a1 Then
If_beq a1 , r0 Then
copy_u_u rk rX ry a2 a3 a4 ;
addiu a3 r0 zero16 ;
sw rk zero16 rx ;
multi_negate rx a0
Else
multi_lt rk rX ry a0 a1 a5 a2 a3 a4 ;
If_beq a5 , r0 Then
If_beq a2 , r0 Then
addiu a3 r0 zero16 ;
sw r0 zero16 rx
Else
multi_sub_u_u rk rX ry rX a0 a1 a2 a3 a4 a5
Else
multi_sub_u_u rk ry rX rX a0 a1 a2 a3 a4 a5 ;
multi_negate rx a0
Else
addiu a3 r0 one16 ;
multi_add_u_u rk a3 ry rX rX a0 a1 a2 ;
mflo a3.
End multi_sub_s_u0_sect.
Section multi_sub_s_u_sect.
Variables rk rx ry a0 a1 a2 a3 a4 a5 rX : reg.
same as above, but y can be 0
Definition multi_sub_s_u :=
multi_is_zero_u rk ry a0 a1 a2 ;
If_bne a2 , r0 Then
addiu a3 r0 zero16
Else
multi_sub_s_u0 rk rx ry a0 a1 a2 a3 a4 a5 rX.
End multi_sub_s_u_sect.
multi_is_zero_u rk ry a0 a1 a2 ;
If_bne a2 , r0 Then
addiu a3 r0 zero16
Else
multi_sub_s_u0 rk rx ry a0 a1 a2 a3 a4 a5 rX.
End multi_sub_s_u_sect.