#include <perms.h>
void Callsignal(void);
extern void Primdiv(void) {
  __label__ L0;
  __label__ L1;
  __label__ L2;
  asm("CMPS     R2, #0");
  asm("BNE      L0");
  asm("MOV   R1, #14");
  asm("MOV   R2, #2");
  asm("MOV   R3, #0");
  asm("STMDB   Sp!, <R1, R2, R3, Fp, Sb, Link>");
  Callsignal();
L0:;
  asm("MOV      R4, #1                {result sign}");
  asm("RSBLT    R2, R2, #0            {R2 = |R2|}");
  asm("RSBLT    R4, R4, #0            {invert result sign}");
  asm("ADDS     R5, R1, #0            {preserve Dividend & test sign}");
  asm("RSBLT    R1, R1, #0            {R1 = |R1|}");
  asm("RSBLT    R4, R4, #0            {invert result sign}");
  asm("MOV      R3, #1");
L1:;
  asm("CMPS     R2, #16_80000000");
  asm("CMPCCS   R2, R1");
  asm("MOVCC    R2, R2, %LSL #1");
  asm("MOVCC    R3, R3, %LSL #1");
  asm("BCC      L1");
  asm("MOV      R0, #0");
L2:;
  asm("CMPS     R1, R2");
  asm("SUBCS    R1, R1, R2");
  asm("ADDCS    R0, R0, R3");
  asm("MOVS     R3, R3, %LSR #1");
  asm("MOVNE    R2, R2, %LSR #1");
  asm("BNE      L2");
  asm("CMPS     R4, #0");
  asm("RSBLT    R0, R0, #0         {negate quotient}");
  asm("CMPS     R5, #0");
  asm("RSBLT    R1, R1, #0         {negate remainder}");
  asm("MOV      Pc, Link");
}
