// File: /workspace/github_c_makefile_star2_O0/simh[P]simtools/crossassemblers/macro7/macro7.c
// Function: getExpr
SYM_T *getExpr()
{
  delimiter = line[lexterm];

  if( line[lexstart] == '-' )
  {
    nextLexBlank();
    sym_getexpr = *(eval());
    sym_getexpr.val = sym_getexpr.val ^ 0777777;
  }
  else
  {
    sym_getexpr = *(eval());
  }


  if( is_blank( delimiter ))
  {
    return( &sym_getexpr );
  }

  /* Here we assume the current lexeme is the operator separating the         */
  /* previous operator from the next, if any.                                 */
  while( TRUE )
  {
    /* assert line[lexstart] == delimiter                                     */
    if( is_blank( delimiter ))
    {
      return( &sym_getexpr );
    }

    switch( line[lexstart] )
    {
    case '+':                   /* add                                        */
      nextLexBlank();           /* skip over the operator                     */
      sym_getexpr.val += (eval())->val;
      if( sym_getexpr.val >= 01000000 )
      {
        sym_getexpr.val = ( sym_getexpr.val + 1 ) & 0777777;
      }
      break;

    case '-':                   /* subtract                                   */
      nextLexBlank();           /* skip over the operator                     */
      sym_getexpr.val = sym_getexpr.val +
        ( (eval())->val ^ 0777777 );
      if( sym_getexpr.val >= 01000000 )
      {
        sym_getexpr.val = ( sym_getexpr.val + 1 ) & 0777777;
      }
      break;

    case '^':                   /* multiply                                   */
      nextLexBlank();           /* skip over the operator                     */
      sym_getexpr.val *= (eval())->val;
      break;

    case '%':                   /* divide                                     */
      nextLexBlank();           /* skip over the operator                     */
      sym_getexpr.val /= (eval())->val;
      break;

    case '&':                   /* and                                        */
      nextLexBlank();           /* skip over the operator                     */
      sym_getexpr.val &= (eval())->val;
      break;

    case '!':                   /* or                                         */
      nextLexBlank();           /* skip over the operator                     */
      sym_getexpr.val |= (eval())->val;
      break;

    default:
      if( isend( line[lexstart] ))
      {
        return( &sym_getexpr );
      }

      switch( line[lexstart] )
      {
      case '/':
      case '\t':
      case ')':
      case '<':
      case ':':
      case ',':
        break;

      case '=':
        errorMessage( &illegal_equals, lexstart );
        moveToEndOfLine();
        sym_getexpr.val = 0;
        break;

      default:
        errorMessage( &illegal_expression, lexstart );
        moveToEndOfLine();
        sym_getexpr.val = 0;
        break;
      }
      return( &sym_getexpr );
    }
  } /* end while                                                              */
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movslq 0x10c61(%rip), %rcx     # 0x15170
leaq 0x10aca(%rip), %rax     # 0x14fe0
movb (%rax,%rcx), %al
movb %al, 0x10c55(%rip)      # 0x15174
movslq 0x10c3a(%rip), %rcx     # 0x15160
leaq 0x10ab3(%rip), %rax     # 0x14fe0
movsbl (%rax,%rcx), %eax
cmpl $0x2d, %eax
jne 0x4573
callq 0x4e00
callq 0x5d80
movq (%rax), %rcx
movq %rcx, 0x6a3e(%rip)      # 0xaf88
movq 0x8(%rax), %rcx
movq %rcx, 0x6a3b(%rip)      # 0xaf90
movq 0x10(%rax), %rax
movq %rax, 0x6a38(%rip)      # 0xaf98
movl 0x6a2e(%rip), %eax      # 0xaf94
xorl $0x3ffff, %eax          # imm = 0x3FFFF
movl %eax, 0x6a23(%rip)      # 0xaf94
jmp 0x4598
callq 0x5d80
movq (%rax), %rcx
movq %rcx, 0x6a06(%rip)      # 0xaf88
movq 0x8(%rax), %rcx
movq %rcx, 0x6a03(%rip)      # 0xaf90
movq 0x10(%rax), %rax
movq %rax, 0x6a00(%rip)      # 0xaf98
movsbl 0x10bd5(%rip), %eax     # 0x15174
cmpl $0x20, %eax
je 0x45bc
movsbl 0x10bc9(%rip), %eax     # 0x15174
cmpl $0xc, %eax
je 0x45bc
movsbl 0x10bbd(%rip), %eax     # 0x15174
cmpl $0x3e, %eax
jne 0x45cc
leaq 0x69c5(%rip), %rax      # 0xaf88
movq %rax, -0x8(%rbp)
jmp 0x485a
jmp 0x45ce
movsbl 0x10b9f(%rip), %eax     # 0x15174
cmpl $0x20, %eax
je 0x45f2
movsbl 0x10b93(%rip), %eax     # 0x15174
cmpl $0xc, %eax
je 0x45f2
movsbl 0x10b87(%rip), %eax     # 0x15174
cmpl $0x3e, %eax
jne 0x4602
leaq 0x698f(%rip), %rax      # 0xaf88
movq %rax, -0x8(%rbp)
jmp 0x485a
movslq 0x10b57(%rip), %rax     # 0x15160
leaq 0x109d0(%rip), %rcx     # 0x14fe0
movsbl (%rax,%rcx), %eax
movl %eax, -0xc(%rbp)
subl $0x21, %eax
je 0x474e
jmp 0x4622
movl -0xc(%rbp), %eax
subl $0x25, %eax
je 0x470f
jmp 0x4630
movl -0xc(%rbp), %eax
subl $0x26, %eax
je 0x4730
jmp 0x463e
movl -0xc(%rbp), %eax
subl $0x2b, %eax
je 0x4663
jmp 0x4648
movl -0xc(%rbp), %eax
subl $0x2d, %eax
je 0x46a1
jmp 0x4652
movl -0xc(%rbp), %eax
subl $0x5e, %eax
je 0x46f0
jmp 0x476c
callq 0x4e00
callq 0x5d80
movl 0xc(%rax), %eax
addl 0x691e(%rip), %eax      # 0xaf94
movl %eax, 0x6918(%rip)      # 0xaf94
cmpl $0x40000, 0x690e(%rip)  # imm = 0x40000
jl 0x469c
movl 0x6906(%rip), %eax      # 0xaf94
addl $0x1, %eax
andl $0x3ffff, %eax          # imm = 0x3FFFF
movl %eax, 0x68f8(%rip)      # 0xaf94
jmp 0x4855
callq 0x4e00
movl 0x68e8(%rip), %eax      # 0xaf94
movl %eax, -0x10(%rbp)
callq 0x5d80
movq %rax, %rcx
movl -0x10(%rbp), %eax
movl 0xc(%rcx), %ecx
xorl $0x3ffff, %ecx          # imm = 0x3FFFF
addl %ecx, %eax
movl %eax, 0x68c9(%rip)      # 0xaf94
cmpl $0x40000, 0x68bf(%rip)  # imm = 0x40000
jl 0x46eb
movl 0x68b7(%rip), %eax      # 0xaf94
addl $0x1, %eax
andl $0x3ffff, %eax          # imm = 0x3FFFF
movl %eax, 0x68a9(%rip)      # 0xaf94
jmp 0x4855
callq 0x4e00
callq 0x5d80
movl 0xc(%rax), %eax
imull 0x6890(%rip), %eax      # 0xaf94
movl %eax, 0x688a(%rip)      # 0xaf94
jmp 0x4855
callq 0x4e00
callq 0x5d80
movl 0xc(%rax), %ecx
movl 0x6872(%rip), %eax      # 0xaf94
cltd
idivl %ecx
movl %eax, 0x6869(%rip)      # 0xaf94
jmp 0x4855
callq 0x4e00
callq 0x5d80
movl 0xc(%rax), %eax
andl 0x6851(%rip), %eax      # 0xaf94
movl %eax, 0x684b(%rip)      # 0xaf94
jmp 0x4855
callq 0x4e00
callq 0x5d80
movl 0xc(%rax), %eax
orl 0x6833(%rip), %eax      # 0xaf94
movl %eax, 0x682d(%rip)      # 0xaf94
jmp 0x4855
movslq 0x109ed(%rip), %rcx     # 0x15160
leaq 0x10866(%rip), %rax     # 0x14fe0
movsbl (%rax,%rcx), %eax
cmpl $0x0, %eax
je 0x479a
movslq 0x109d6(%rip), %rcx     # 0x15160
leaq 0x1084f(%rip), %rax     # 0x14fe0
movsbl (%rax,%rcx), %eax
cmpl $0xa, %eax
jne 0x47aa
leaq 0x67e7(%rip), %rax      # 0xaf88
movq %rax, -0x8(%rbp)
jmp 0x485a
movslq 0x109af(%rip), %rax     # 0x15160
leaq 0x10828(%rip), %rcx     # 0x14fe0
movsbl (%rax,%rcx), %eax
movl %eax, -0x14(%rbp)
subl $0x9, %eax
je 0x4802
jmp 0x47c6
movl -0x14(%rbp), %eax
subl $0x29, %eax
je 0x4802
jmp 0x47d0
movl -0x14(%rbp), %eax
subl $0x2c, %eax
je 0x4802
jmp 0x47da
movl -0x14(%rbp), %eax
subl $0x2f, %eax
je 0x4802
jmp 0x47e4
movl -0x14(%rbp), %eax
subl $0x3a, %eax
je 0x4802
jmp 0x47ee
movl -0x14(%rbp), %eax
subl $0x3c, %eax
je 0x4802
jmp 0x47f8
movl -0x14(%rbp), %eax
subl $0x3d, %eax
je 0x4804
jmp 0x4827
jmp 0x4848
movl 0x10956(%rip), %esi     # 0x15160
leaq 0x660f(%rip), %rdi      # 0xae20
callq 0x6200
callq 0x6290
movl $0x0, 0x676f(%rip)      # 0xaf94
jmp 0x4848
movl 0x10933(%rip), %esi     # 0x15160
leaq 0x659c(%rip), %rdi      # 0xadd0
callq 0x6200
callq 0x6290
movl $0x0, 0x674c(%rip)      # 0xaf94
leaq 0x6739(%rip), %rax      # 0xaf88
movq %rax, -0x8(%rbp)
jmp 0x485a
jmp 0x45ce
movq -0x8(%rbp), %rax
addq $0x20, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)