Library multi_add_s_s_u_prg
Require Import machine_int.
Import MachineInt.
Require Import mips_cmd.
Import expr_m.
Require Import pick_sign_prg multi_lt_prg multi_add_u_u_prg multi_sub_u_u_prg.
Require Import multi_negate_prg copy_s_u_prg multi_is_zero_u_prg abs_prg.
Require Import multi_zero_s_prg copy_s_s_prg.
Local Open Scope mips_cmd_scope.
Import MachineInt.
Require Import mips_cmd.
Import expr_m.
Require Import pick_sign_prg multi_lt_prg multi_add_u_u_prg multi_sub_u_u_prg.
Require Import multi_negate_prg copy_s_u_prg multi_is_zero_u_prg abs_prg.
Require Import multi_zero_s_prg copy_s_s_prg.
Local Open Scope mips_cmd_scope.
z <- x + y with z, x signed and y unsigned
Definition multi_add_s_s_u0 rk rz rx ry a0 a1 a2 a3 a4 ret X Z : while.cmd :=
lw Z four16 rz ;
lw X four16 rx ;
pick_sign rx a0 a1 ;
If_bgez a1 Then
If_beq a1, r0 Then
copy_s_u rk rz ry a0 a1 a2 a3 ;
addiu a3 r0 zero16
Else
multi_add_u_u rk a1 ry X Z a2 a3 a4 ;
mflo a3;
sw rk zero16 rz
Else
(multi_lt rk ry X a0 a1 ret a2 a3 a4 ;
If_beq ret, r0 Then
If_beq a2, r0 Then
multi_zero_s rz ;
addiu a3 r0 zero16
Else
multi_sub_u_u rk ry X Z a0 a1 a2 a3 a4 ret;
sw rk zero16 rz
Else
(multi_sub_u_u rk X ry Z a0 a1 ret a3 a2 a4;
subu a0 r0 rk ;
sw a0 zero16 rz
)).
Definition multi_add_s_s_u rk rz rx ry a0 a1 a2 a3 a4 ret X Z :=
multi_is_zero_u rk ry a0 a1 a2 ;
If_bne a2 , r0 Then
copy_s_s rk rz rx a0 a1 a2 a3 a4 ;
addiu a3 r0 zero16
Else
multi_add_s_s_u0 rk rz rx ry a0 a1 a2 a3 a4 ret X Z.
lw Z four16 rz ;
lw X four16 rx ;
pick_sign rx a0 a1 ;
If_bgez a1 Then
If_beq a1, r0 Then
copy_s_u rk rz ry a0 a1 a2 a3 ;
addiu a3 r0 zero16
Else
multi_add_u_u rk a1 ry X Z a2 a3 a4 ;
mflo a3;
sw rk zero16 rz
Else
(multi_lt rk ry X a0 a1 ret a2 a3 a4 ;
If_beq ret, r0 Then
If_beq a2, r0 Then
multi_zero_s rz ;
addiu a3 r0 zero16
Else
multi_sub_u_u rk ry X Z a0 a1 a2 a3 a4 ret;
sw rk zero16 rz
Else
(multi_sub_u_u rk X ry Z a0 a1 ret a3 a2 a4;
subu a0 r0 rk ;
sw a0 zero16 rz
)).
Definition multi_add_s_s_u rk rz rx ry a0 a1 a2 a3 a4 ret X Z :=
multi_is_zero_u rk ry a0 a1 a2 ;
If_bne a2 , r0 Then
copy_s_s rk rz rx a0 a1 a2 a3 a4 ;
addiu a3 r0 zero16
Else
multi_add_s_s_u0 rk rz rx ry a0 a1 a2 a3 a4 ret X Z.