#include <perms.h>
int _imp_mainep(int _imp_argc, char **_imp_argv) {
  _imp_enter();  // option...
  asm("TEMP D0-D1/A0-A1");
  static int FAILURES = 0;
  auto void PASS(void) {
    _imp_enter();
    PRINTSTRING(_imp_str_literal(" -- Pass"));
    NEWLINE();
    _imp_leave();
  }
  auto void FAIL(void) {
    _imp_enter();
    PRINTSTRING(_imp_str_literal(" -- FAIL"));
    NEWLINE();
    FAILURES = FAILURES + 1;
    _imp_leave();
  }
  auto void REG0(void) {
    _imp_enter();
    int R1;
    int R2;
    PRINTSTRING(_imp_str_literal("Basic"));
    R2 = 0;
    for (R1 = 1; R1 != 10 + 1; R1 += 1) {
      R2 = R2 + R1;
    }
    if (R2 == 55)
      PASS();
    else
      FAIL();
    _imp_leave();
  }
  static char A[10 - 1 + 1] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  static short AA[2 - 1 + 1] = {100, 200};
  auto void REG1(void) {
    _imp_enter();
    int R1;
    int R2;
    PRINTSTRING(_imp_str_literal("Data registers"));
    R1 = 0;
    if (R1 == 0)
      PASS();
    else
      FAIL();
    R1 = R1 + 1;
    if (R1 == 1)
      PASS();
    else
      FAIL();
    R1 = R1 - 3;
    if (R1 == -2)
      PASS();
    else
      FAIL();
    R1 = -R1;
    if (R1 == 2)
      PASS();
    else
      FAIL();
    R1 = ~R1;
    if (R1 == -3)
      PASS();
    else
      FAIL();
    R1 = R1 + R1;
    if (R1 == -6)
      PASS();
    else
      FAIL();
    R1 = R1 * R1;
    if (R1 == 36)
      PASS();
    else
      FAIL();
    R1 = R1 / 2;
    if (R1 == 18)
      PASS();
    else
      FAIL();
    R1 = R1 | 3;
    if (R1 == 19)
      PASS();
    else
      FAIL();
    R1 = R1 ^ 6;
    if (R1 == 21)
      PASS();
    else
      FAIL();
    R1 = R1 & 15;
    if (R1 == 5)
      PASS();
    else
      FAIL();
    R1 = 1 - R1;
    if (R1 == -4)
      PASS();
    else
      FAIL();
    R2 = 2;
    R1 = R1 + R2;
    if (R1 == -2)
      PASS();
    else
      FAIL();
    R1 = R1 - R2;
    if (R1 == -4)
      PASS();
    else
      FAIL();
    R1 = R2 - R1;
    if (R1 == 6)
      PASS();
    else
      FAIL();
    R1 = R1 * R2;
    if (R1 == 12)
      PASS();
    else
      FAIL();
    R1 = R2 * R1;
    if (R1 == 24)
      PASS();
    else
      FAIL();
    R1 = R2 * R2;
    if (R1 == 4)
      PASS();
    else
      FAIL();
    R1 = R1 & (1 - R1);
    if (R1 == 4)
      PASS();
    else
      FAIL();
    R1 = (R1 | 32) + '0';
    if (R1 == 84)
      PASS();
    else
      FAIL();
    R1 = (R1 | 32) + R1;
    if (R1 == 200)
      PASS();
    else
      FAIL();
    R1 = R1 >> 6;
    if (R1 == 3)
      PASS();
    else
      FAIL();
    R1 = A[R1];
    if (R1 == 3)
      PASS();
    else
      FAIL();
    R1 = AA[R1 - 1];
    if (R1 == 200)
      PASS();
    else
      FAIL();
    _imp_leave();
  }
  auto void REG2(void) {
    _imp_enter();
    int R1;
    int R2;
    PRINTSTRING(_imp_str_literal("Address registers for data"));
    R1 = 0;
    if (R1 == 0)
      PASS();
    else
      FAIL();
    R1 = R1 + 1;
    if (R1 == 1)
      PASS();
    else
      FAIL();
    R1 = R1 - 3;
    if (R1 == -2)
      PASS();
    else
      FAIL();
    R1 = -R1;
    if (R1 == 2)
      PASS();
    else
      FAIL();
    R1 = ~R1;
    if (R1 == -3)
      PASS();
    else
      FAIL();
    R1 = R1 + R1;
    if (R1 == -6)
      PASS();
    else
      FAIL();
    R1 = R1 * R1;
    if (R1 == 36)
      PASS();
    else
      FAIL();
    R1 = R1 / 2;
    if (R1 == 18)
      PASS();
    else
      FAIL();
    R1 = R1 | 3;
    if (R1 == 19)
      PASS();
    else
      FAIL();
    R1 = R1 ^ 6;
    if (R1 == 21)
      PASS();
    else
      FAIL();
    R1 = R1 & 15;
    if (R1 == 5)
      PASS();
    else
      FAIL();
    R1 = 1 - R1;
    if (R1 == -4)
      PASS();
    else
      FAIL();
    R2 = 2;
    R1 = R1 + R2;
    if (R1 == -2)
      PASS();
    else
      FAIL();
    R1 = R1 - R2;
    if (R1 == -4)
      PASS();
    else
      FAIL();
    R1 = R2 - R1;
    if (R1 == 6)
      PASS();
    else
      FAIL();
    R1 = R1 * R2;
    if (R1 == 12)
      PASS();
    else
      FAIL();
    R1 = R2 * R1;
    if (R1 == 24)
      PASS();
    else
      FAIL();
    R1 = R2 * R2;
    if (R1 == 4)
      PASS();
    else
      FAIL();
    R1 = R1 & (1 - R1);
    if (R1 == 4)
      PASS();
    else
      FAIL();
    R1 = (R1 | 32) + '0';
    if (R1 == 84)
      PASS();
    else
      FAIL();
    R1 = (R1 | 32) + R1;
    if (R1 == 200)
      PASS();
    else
      FAIL();
    R1 = R1 >> 6;
    if (R1 == 3)
      PASS();
    else
      FAIL();
    R1 = A[R1];
    if (R1 == 3)
      PASS();
    else
      FAIL();
    R1 = AA[R1 - 1];
    if (R1 == 200)
      PASS();
    else
      FAIL();
    _imp_leave();
  }
  auto void REG3(void) {
    _imp_enter();
    char *BN;
    short *SN;
    PRINTSTRING(_imp_str_literal("Name assignment & modification"));
    BN = &A[4];
    if (BN == 4)
      PASS();
    else
      FAIL();
    BN = BN;
    if (BN == 5)
      PASS();
    else
      FAIL();
    BN = BN;
    if (BN == 10)
      PASS();
    else
      FAIL();
    SN = &AA[2];
    if (SN == 200)
      PASS();
    else
      FAIL();
    SN = SN;
    if (SN == 100)
      PASS();
    else
      FAIL();
    _imp_leave();
  }
  OPENOUTPUT(1, _imp_str_literal("JOURNAL"));
  REG0();
  REG1();
  REG2();
  REG3();
  SELECTOUTPUT(0);
  WRITE(FAILURES, 1);
  PRINTSTRING(_imp_str_literal(" failure(s)"));
  NEWLINE();
  _imp_leave();
  exit(0);
  return (0);
}
