// File: /workspace/github_c_makefile_star2_O3/AK6DN[P]dec-utilities-for-pdp/palbart/palbart.c
// Function: getDublExpr
WORD32 getDublExpr()
{
  WORD32 dublvalue;

  delimiter = line[lexterm];
  if( line[lexstart] == '-' )
  {
    nextLexBlank();
    dublvalue = evalDubl( 0 );
    nextLexeme();
    /* Test for any value greater than 23 bits in length.                     */
    if( (unsigned long int)dublvalue > 040000000L )
    {
      errorMessage( &dubl_overflow, lexstart );
      dublvalue = 0;
    }
    dublvalue = -dublvalue;
  }
  else
  {
    dublvalue = evalDubl( 0 );
    nextLexeme();
    /* Test for any value greater than 23 bits in length.                     */
    if( (unsigned long int)dublvalue > 037777777L )
    {
      errorMessage( &dubl_overflow, lexstart );
      dublvalue = 0;
    }
  }

  if( is_blank( delimiter ))
  {
    return( dublvalue );
  }

  /* 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 ))
    {
      errorMessage( &illegal_expression, lexstart );
      moveToEndOfLine();
      dublvalue = 0;
      return( dublvalue );
    }

    switch( line[lexstart] )
    {
    case '+':                   /* add                                        */
    case '-':                   /* subtract                                   */
    case '^':                   /* multiply                                   */
    case '%':                   /* divide                                     */
    case '&':                   /* and                                        */
    case '!':                   /* or                                         */
      errorMessage( &illegal_expression, lexstart );
      moveToEndOfLine();
      dublvalue = 0;
      break;

    default:
      if( isend( line[lexstart] ))
      {
        return( dublvalue );
      }

      switch( line[lexstart] )
      {
      case '/':
      case ';':
        break;

      default:
        errorMessage( &illegal_expression, lexstart );
        moveToEndOfLine();
        dublvalue = 0;
        break;
      }
      return( dublvalue );
    }
  } /* end while                                                              */
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movslq 0x7a9a(%rip), %rax      # 0xd81c
leaq 0x7a07(%rip), %r15      # 0xd790
movb (%rax,%r15), %al
movb %al, 0x7a8d(%rip)       # 0xd820
movslq 0x7a7a(%rip), %rax      # 0xd814
cmpb $0x2d, (%rax,%r15)
jne 0x5dd7
callq 0x44ee
xorl %edi, %edi
callq 0x5f50
movq %rax, %rbx
callq 0x3be8
cmpq $0x800001, %rbx         # imm = 0x800001
jb 0x5dd2
movl 0x7a50(%rip), %esi      # 0xd814
leaq 0x544d(%rip), %rdi      # 0xb218
callq 0x5ac8
xorl %ebx, %ebx
negq %rbx
jmp 0x5e03
xorl %edi, %edi
callq 0x5f50
movq %rax, %rbx
callq 0x3be8
cmpq $0x800000, %rbx         # imm = 0x800000
jb 0x5e03
movl 0x7a1f(%rip), %esi      # 0xd814
leaq 0x541c(%rip), %rdi      # 0xb218
callq 0x5ac8
xorl %ebx, %ebx
movzbl 0x7a16(%rip), %eax      # 0xd820
movabsq $0x4000000100001200, %r12 # imm = 0x4000000100001200
cmpq $0x3e, %rax
ja 0x5e32
btq %rax, %r12
jae 0x5e32
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x530f(%rip), %r14      # 0xb148
movabsq $0x286200000000, %r13   # imm = 0x286200000000
movabsq $0x800800000000401, %rbp # imm = 0x800800000000401
cmpb $0x3e, %al
ja 0x5e5e
movzbl %al, %eax
btq %rax, %r12
jb 0x5f00
movslq 0x79af(%rip), %rsi      # 0xd814
movzbl (%rsi,%r15), %eax
cmpq $0x3b, %rax
ja 0x5eca
btq %rax, %r13
jae 0x5ec0
movq %r14, %rdi
callq 0x5ac8
movslq 0x79a7(%rip), %rax      # 0xd82c
movq %rax, %rcx
addq %r15, %rcx
movzbl (%rcx), %edx
testl %edx, %edx
je 0x5ea4
cmpl $0xa, %edx
je 0x5ea4
incl %eax
movl %eax, 0x798d(%rip)      # 0xd82c
incq %rcx
jmp 0x5e8b
movl %eax, 0x796a(%rip)      # 0xd814
movl %eax, 0x796c(%rip)      # 0xd81c
movl %eax, 0x796e(%rip)      # 0xd824
movb 0x7964(%rip), %al       # 0xd820
xorl %ebx, %ebx
jmp 0x5e4d
btq %rax, %rbp
jb 0x5e20
cmpl $0x5e, %eax
je 0x5e76
leaq 0x5272(%rip), %rdi      # 0xb148
callq 0x5ac8
movslq 0x794a(%rip), %rax      # 0xd82c
leal 0x1(%rax), %ecx
movzbl (%rax,%r15), %edx
testl %edx, %edx
je 0x5f37
cmpl $0xa, %edx
je 0x5f37
incq %rax
movl %ecx, 0x7930(%rip)      # 0xd82c
incl %ecx
jmp 0x5ee5
movl 0x790e(%rip), %esi      # 0xd814
leaq 0x523b(%rip), %rdi      # 0xb148
callq 0x5ac8
movslq 0x7913(%rip), %rax      # 0xd82c
leal 0x1(%rax), %ecx
movzbl (%rax,%r15), %edx
testl %edx, %edx
je 0x5f37
cmpl $0xa, %edx
je 0x5f37
incq %rax
movl %ecx, 0x78f9(%rip)      # 0xd82c
incl %ecx
jmp 0x5f1c
movl %eax, 0x78d7(%rip)      # 0xd814
movl %eax, 0x78d9(%rip)      # 0xd81c
movl %eax, 0x78db(%rip)      # 0xd824
xorl %ebx, %ebx
jmp 0x5e20