// File: /workspace/github_c_makefile_star2_O1/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 0x7ab1(%rip), %rax      # 0xd81c
leaq 0x7a1e(%rip), %r15      # 0xd790
movb (%rax,%r15), %al
movb %al, 0x7aa4(%rip)       # 0xd820
movslq 0x7a91(%rip), %rax      # 0xd814
cmpb $0x2d, (%rax,%r15)
jne 0x5dc0
callq 0x4498
xorl %edi, %edi
callq 0x5f39
movq %rax, %rbx
callq 0x3b84
cmpq $0x800001, %rbx         # imm = 0x800001
jb 0x5dbb
movl 0x7a67(%rip), %esi      # 0xd814
leaq 0x5464(%rip), %rdi      # 0xb218
callq 0x5ab5
xorl %ebx, %ebx
negq %rbx
jmp 0x5dec
xorl %edi, %edi
callq 0x5f39
movq %rax, %rbx
callq 0x3b84
cmpq $0x800000, %rbx         # imm = 0x800000
jb 0x5dec
movl 0x7a36(%rip), %esi      # 0xd814
leaq 0x5433(%rip), %rdi      # 0xb218
callq 0x5ab5
xorl %ebx, %ebx
movzbl 0x7a2d(%rip), %eax      # 0xd820
movabsq $0x4000000100001200, %r12 # imm = 0x4000000100001200
cmpq $0x3e, %rax
ja 0x5e1b
btq %rax, %r12
jae 0x5e1b
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x5326(%rip), %r14      # 0xb148
movabsq $0x286200000000, %r13   # imm = 0x286200000000
movabsq $0x800800000000401, %rbp # imm = 0x800800000000401
movzbl 0x79e3(%rip), %eax      # 0xd820
cmpq $0x3e, %rax
ja 0x5e4d
btq %rax, %r12
jb 0x5ee9
movslq 0x79c0(%rip), %rsi      # 0xd814
movzbl (%rsi,%r15), %eax
cmpq $0x3b, %rax
ja 0x5eb3
btq %rax, %r13
jae 0x5ea9
movq %r14, %rdi
callq 0x5ab5
movslq 0x79b8(%rip), %rax      # 0xd82c
movq %rax, %rcx
addq %r15, %rcx
movzbl (%rcx), %edx
testl %edx, %edx
je 0x5e93
cmpl $0xa, %edx
je 0x5e93
incl %eax
movl %eax, 0x799e(%rip)      # 0xd82c
incq %rcx
jmp 0x5e7a
movl %eax, 0x797b(%rip)      # 0xd814
movl %eax, 0x797d(%rip)      # 0xd81c
movl %eax, 0x797f(%rip)      # 0xd824
xorl %ebx, %ebx
jmp 0x5e36
btq %rax, %rbp
jb 0x5e09
cmpl $0x5e, %eax
je 0x5e65
leaq 0x5289(%rip), %rdi      # 0xb148
callq 0x5ab5
movslq 0x7961(%rip), %rax      # 0xd82c
leal 0x1(%rax), %ecx
movzbl (%rax,%r15), %edx
testl %edx, %edx
je 0x5f20
cmpl $0xa, %edx
je 0x5f20
incq %rax
movl %ecx, 0x7947(%rip)      # 0xd82c
incl %ecx
jmp 0x5ece
movl 0x7925(%rip), %esi      # 0xd814
leaq 0x5252(%rip), %rdi      # 0xb148
callq 0x5ab5
movslq 0x792a(%rip), %rax      # 0xd82c
leal 0x1(%rax), %ecx
movzbl (%rax,%r15), %edx
testl %edx, %edx
je 0x5f20
cmpl $0xa, %edx
je 0x5f20
incq %rax
movl %ecx, 0x7910(%rip)      # 0xd82c
incl %ecx
jmp 0x5f05
movl %eax, 0x78ee(%rip)      # 0xd814
movl %eax, 0x78f0(%rip)      # 0xd81c
movl %eax, 0x78f2(%rip)      # 0xd824
xorl %ebx, %ebx
jmp 0x5e09