#include <perms.h>

//          Edinburgh IMP77 Compiler - Version 8.4
//
//     1        %EXTERNALINTEGERFN IAND(%INTEGERNAME A,B)

int IAND(int *A, int *B) {
  //     2        %RESULT=A&B

  return *A & *B;

  //     3        %END

} /* end of IAND */

//     4        %EXTERNALINTEGERFN IOR(%INTEGERNAME A,B)

int IOR(int *A, int *B) {
  //     5        %RESULT=A!B

  return *A | *B;

  //     6        %END

} /* end of IOR */

//     7        %EXTERNALINTEGERFN IEOR(%INTEGERNAME A,B)

int IEOR(int *A, int *B) {
  //     8        %RESULT=A!!B

  return *A ^ *B;

  //     9        %END

} /* end of IEOR */

//    10        %EXTERNALINTEGERFN NOT(%INTEGERNAME A)

int NOT(int *A) {
  //    11        %RESULT=\A

  return (~*A);

  //    12        %END

} /* end of NOT */

//    13        %EXTERNALINTEGERFN ISHFT(%INTEGERNAME A,B)

int ISHFT(int *A, int *B) {
  //    14        %IF B>0 %THEN %RESULT=A<<B %ELSE %RESULT=A>>(-B)

  if (*B <= 0) goto L_0001;
  return *A << *B;
L_0001:;
  return (unsigned int)*A >> -*B;

  //    15        %END

} /* end of ISHFT */

//    16        %EXTERNALINTEGERFNSPEC RETURNCODE

extern int RETURNCODE(void);

//    17        %EXTERNALINTEGERFN SUCESS(%INTEGERNAME DUMMY)

int SUCESS(int *DUMMY) {
  //    18        %RESULT=RETURNCODE

  return RETURNCODE();

  //    19        %END

} /* end of SUCESS */

// ?DUMMY unused
//    20        %ENDOFFILE