[snip]
; Format      :	ELF64 for x86-64 (Relocatable)
;
; Source File :	'procs.adb'

.686p
.mmx
.model flat
.intel_syntax noprefix


; Segment type:	Pure code
; Segment permissions: Read/Execute
_text segment word public 'CODE' use64
assume cs:_text
assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing


; Attributes: bp-based frame

public procs__a
procs__a proc near

var_40=	qword ptr -40h
var_38=	qword ptr -38h
var_30=	qword ptr -30h
var_24=	dword ptr -24h

push	rbp
mov	rbp, rsp
push	r13
push	r12
push	rbx
sub	rsp, 28h
mov	rax, cs:procs__x ; procs(long long)
add	rax, 1
mov	cs:procs__x, rax ; procs(long long)
mov	rax, cs:procs__x ; procs(long long)
cmp	rax, 1000000h
ja	loc_1D6
call	mt__gen_u32
mov	[rbp+var_24], eax
mov	ecx, [rbp+var_24]
mov	edx, 0AAAAAAABh
mov	eax, ecx
mul	edx
mov	eax, edx
shr	eax, 1
mov	edx, eax
add	edx, edx
add	edx, eax
mov	eax, ecx
sub	eax, edx
test	eax, eax
jnz	short loc_67
call	procs__b	; procs(bool)
call	procs__c	; procs(char)
jmp	loc_1D6

loc_67:
mov	ecx, [rbp+var_24]
mov	edx, 0AAAAAAABh
mov	eax, ecx
mul	edx
shr	edx, 1
mov	eax, edx
add	eax, eax
add	eax, edx
sub	ecx, eax
mov	edx, ecx
cmp	edx, 1
jnz	short loc_8E
call	procs__b	; procs(bool)
jmp	loc_1D6

loc_8E:			; procs(char)
call	procs__c
jmp	loc_1D6
cmp	rdx, 2
jz	short loc_101
cmp	rdx, 3
jz	loc_148
cmp	rdx, 1
jz	short loc_B6
mov	rdi, rax
call	_Unwind_Resume

loc_B6:
mov	[rbp+var_30], rax
mov	rax, [rbp+var_30]
mov	rdi, rax
mov	eax, 0
call	__gnat_begin_handler
mov	rax, cs:procs__y
add	rax, 0Ah
mov	cs:procs__y, rax
mov	ebx, 0

loc_E2:
mov	rax, [rbp+var_30]
mov	rdi, rax
mov	eax, 0
call	__gnat_end_handler
cmp	ebx, 1
jz	loc_19D
jmp	loc_1D6

loc_101:
mov	[rbp+var_38], rax
mov	rax, [rbp+var_38]
mov	rdi, rax
mov	eax, 0
call	__gnat_begin_handler
mov	rax, cs:procs__y
add	rax, 64h
mov	cs:procs__y, rax
mov	ebx, 0

loc_12D:
mov	rax, [rbp+var_38]
mov	rdi, rax
mov	eax, 0
call	__gnat_end_handler
cmp	ebx, 1
jz	short loc_1B5
jmp	loc_1D6

loc_148:
mov	[rbp+var_40], rax
mov	rax, [rbp+var_40]
mov	rdi, rax
mov	eax, 0
call	__gnat_begin_handler
mov	rax, cs:procs__y
add	rax, 3E8h
mov	cs:procs__y, rax
mov	r12d, 0

loc_177:
mov	rax, [rbp+var_40]
mov	rdi, rax
mov	eax, 0
call	__gnat_end_handler
cmp	r12d, 1
jz	short loc_1CB
jmp	short loc_1D6
mov	r13, rax
mov	ebx, 1
jmp	loc_E2

loc_19D:
mov	rax, r13
mov	rdi, rax
call	_Unwind_Resume
mov	r12, rax
mov	ebx, 1
jmp	loc_12D

loc_1B5:
mov	rax, r12
mov	rdi, rax
call	_Unwind_Resume
mov	rbx, rax
mov	r12d, 1
jmp	short loc_177

loc_1CB:
mov	rax, rbx
mov	rdi, rax
call	_Unwind_Resume

loc_1D6:
add	rsp, 28h
pop	rbx
pop	r12
pop	r13
pop	rbp
retn
procs__a endp

unk_1E1	db  90h	; 


; Attributes: bp-based frame

; __int64 __fastcall procs(bool)
public procs__b
procs__b proc near

var_40=	qword ptr -40h
var_38=	qword ptr -38h
var_30=	qword ptr -30h
var_24=	dword ptr -24h

push	rbp
mov	rbp, rsp
push	r13
push	r12
push	rbx
sub	rsp, 28h
mov	rax, cs:procs__x ; procs(long long)
add	rax, 1
mov	cs:procs__x, rax ; procs(long long)
mov	rax, cs:procs__x ; procs(long long)
cmp	rax, 1000000h
ja	loc_3B8
call	mt__gen_u32
mov	[rbp+var_24], eax
mov	ecx, [rbp+var_24]
mov	edx, 0AAAAAAABh
mov	eax, ecx
mul	edx
mov	eax, edx
shr	eax, 1
mov	edx, eax
add	edx, edx
add	edx, eax
mov	eax, ecx
sub	eax, edx
test	eax, eax
jnz	short loc_249
call	procs__a
call	procs__c	; procs(char)
jmp	loc_3B8

loc_249:
mov	ecx, [rbp+var_24]
mov	edx, 0AAAAAAABh
mov	eax, ecx
mul	edx
shr	edx, 1
mov	eax, edx
add	eax, eax
add	eax, edx
sub	ecx, eax
mov	edx, ecx
cmp	edx, 1
jnz	short loc_270
call	procs__a
jmp	loc_3B8

loc_270:		; procs(char)
call	procs__c
jmp	loc_3B8
cmp	rdx, 2
jz	short loc_2E3
cmp	rdx, 3
jz	loc_32A
cmp	rdx, 1
jz	short loc_298
mov	rdi, rax
call	_Unwind_Resume

loc_298:
mov	[rbp+var_30], rax
mov	rax, [rbp+var_30]
mov	rdi, rax
mov	eax, 0
call	__gnat_begin_handler
mov	rax, cs:procs__y
add	rax, 0Ah
mov	cs:procs__y, rax
mov	ebx, 0

loc_2C4:
mov	rax, [rbp+var_30]
mov	rdi, rax
mov	eax, 0
call	__gnat_end_handler
cmp	ebx, 1
jz	loc_37F
jmp	loc_3B8

loc_2E3:
mov	[rbp+var_38], rax
mov	rax, [rbp+var_38]
mov	rdi, rax
mov	eax, 0
call	__gnat_begin_handler
mov	rax, cs:procs__y
add	rax, 64h
mov	cs:procs__y, rax
mov	ebx, 0

loc_30F:
mov	rax, [rbp+var_38]
mov	rdi, rax
mov	eax, 0
call	__gnat_end_handler
cmp	ebx, 1
jz	short loc_397
jmp	loc_3B8

loc_32A:
mov	[rbp+var_40], rax
mov	rax, [rbp+var_40]
mov	rdi, rax
mov	eax, 0
call	__gnat_begin_handler
mov	rax, cs:procs__y
add	rax, 3E8h
mov	cs:procs__y, rax
mov	r12d, 0

loc_359:
mov	rax, [rbp+var_40]
mov	rdi, rax
mov	eax, 0
call	__gnat_end_handler
cmp	r12d, 1
jz	short loc_3AD
jmp	short loc_3B8
mov	r13, rax
mov	ebx, 1
jmp	loc_2C4

loc_37F:
mov	rax, r13
mov	rdi, rax
call	_Unwind_Resume
mov	r12, rax
mov	ebx, 1
jmp	loc_30F

loc_397:
mov	rax, r12
mov	rdi, rax
call	_Unwind_Resume
mov	rbx, rax
mov	r12d, 1
jmp	short loc_359

loc_3AD:
mov	rax, rbx
mov	rdi, rax
call	_Unwind_Resume

loc_3B8:
add	rsp, 28h
pop	rbx
pop	r12
pop	r13
pop	rbp
retn
procs__b endp

align 4


; Attributes: bp-based frame

; __int64 __fastcall procs(char)
public procs__c
procs__c proc near

var_40=	qword ptr -40h
var_38=	qword ptr -38h
var_30=	qword ptr -30h
var_24=	dword ptr -24h

push	rbp
mov	rbp, rsp
push	r13
push	r12
push	rbx
sub	rsp, 28h
mov	rax, cs:procs__x ; procs(long long)
add	rax, 1
mov	cs:procs__x, rax ; procs(long long)
mov	rax, cs:procs__x ; procs(long long)
cmp	rax, 1000000h
ja	loc_59A
call	mt__gen_u32
mov	[rbp+var_24], eax
mov	ecx, [rbp+var_24]
mov	edx, 0AAAAAAABh
mov	eax, ecx
mul	edx
mov	eax, edx
shr	eax, 1
mov	edx, eax
add	edx, edx
add	edx, eax
mov	eax, ecx
sub	eax, edx
test	eax, eax
jnz	short loc_42B
call	procs__a
call	procs__b	; procs(bool)
jmp	loc_59A

loc_42B:
mov	ecx, [rbp+var_24]
mov	edx, 0AAAAAAABh
mov	eax, ecx
mul	edx
shr	edx, 1
mov	eax, edx
add	eax, eax
add	eax, edx
sub	ecx, eax
mov	edx, ecx
cmp	edx, 1
jnz	short loc_452
call	procs__a
jmp	loc_59A

loc_452:		; procs(bool)
call	procs__b
jmp	loc_59A
cmp	rdx, 2
jz	short loc_4C5
cmp	rdx, 3
jz	loc_50C
cmp	rdx, 1
jz	short loc_47A
mov	rdi, rax
call	_Unwind_Resume

loc_47A:
mov	[rbp+var_30], rax
mov	rax, [rbp+var_30]
mov	rdi, rax
mov	eax, 0
call	__gnat_begin_handler
mov	rax, cs:procs__y
add	rax, 0Ah
mov	cs:procs__y, rax
mov	ebx, 0

loc_4A6:
mov	rax, [rbp+var_30]
mov	rdi, rax
mov	eax, 0
call	__gnat_end_handler
cmp	ebx, 1
jz	loc_561
jmp	loc_59A

loc_4C5:
mov	[rbp+var_38], rax
mov	rax, [rbp+var_38]
mov	rdi, rax
mov	eax, 0
call	__gnat_begin_handler
mov	rax, cs:procs__y
add	rax, 64h
mov	cs:procs__y, rax
mov	ebx, 0

loc_4F1:
mov	rax, [rbp+var_38]
mov	rdi, rax
mov	eax, 0
call	__gnat_end_handler
cmp	ebx, 1
jz	short loc_579
jmp	loc_59A

loc_50C:
mov	[rbp+var_40], rax
mov	rax, [rbp+var_40]
mov	rdi, rax
mov	eax, 0
call	__gnat_begin_handler
mov	rax, cs:procs__y
add	rax, 3E8h
mov	cs:procs__y, rax
mov	r12d, 0

loc_53B:
mov	rax, [rbp+var_40]
mov	rdi, rax
mov	eax, 0
call	__gnat_end_handler
cmp	r12d, 1
jz	short loc_58F
jmp	short loc_59A
mov	r13, rax
mov	ebx, 1
jmp	loc_4A6

loc_561:
mov	rax, r13
mov	rdi, rax
call	_Unwind_Resume
mov	r12, rax
mov	ebx, 1
jmp	loc_4F1

loc_579:
mov	rax, r12
mov	rdi, rax
call	_Unwind_Resume
mov	rbx, rax
mov	r12d, 1
jmp	short loc_53B

loc_58F:
mov	rax, rbx
mov	rdi, rax
call	_Unwind_Resume

loc_59A:
add	rsp, 28h
pop	rbx
pop	r12
pop	r13
pop	rbp
retn
procs__c endp

align 2


; Attributes: bp-based frame

public procs___elabb
procs___elabb proc near
push	rbp
mov	rbp, rsp
mov	dword ptr cs:procs__seeds, 111h
mov	dword ptr cs:procs__seeds+4, 222h
mov	dword ptr cs:procs__seeds+8, 333h
mov	dword ptr cs:procs__seeds+0Ch, 444h
mov	rdx, cs:procs__seeds
mov	rax, cs:procs__seeds+8
mov	rdi, rdx
mov	rsi, rax
call	mt__init_genrand__2
pop	rbp
retn
procs___elabb endp

align 2


; Attributes: bp-based frame

public procs___elabs
procs___elabs proc near
push	rbp
mov	rbp, rsp
mov	edi, offset procs__e1
call	system__exception_table__register_exception
mov	edi, offset procs__e2
call	system__exception_table__register_exception
mov	edi, offset procs__e3
call	system__exception_table__register_exception
pop	rbp

locret_611:
retn
procs___elabs endp

_text ends


; Segment type:	Pure data
; Segment permissions: Read/Write
; Segment alignment '32byte' can not be represented in assembly
_data segment para public 'DATA' use64
assume cs:_data
;org 620h
public procs_E
procs_E	db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
public procs__e1
procs__e1 db	0
db  41h	; A
db    0
db    0
db    9
db    0
db    0
db    0
dq offset procs__e1E	; "PROCS.E1"
align 40h
public procs__e2
procs__e2 db	0
db  41h	; A
db    0
db    0
db    9
db    0
db    0
db    0
dq offset procs__e2E	; "PROCS.E2"
align 40h
public procs__e3
procs__e3 db	0
db  41h	; A
db    0
db    0
db    9
db    0
db    0
db    0
dq offset procs__e3E	; "PROCS.E3"
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    0
public procs__y
procs__y dq 0
public procs__x
; procs(long long)
procs__x dq 0
_data ends


; Segment type:	Uninitialized
; Segment permissions: Read/Write
_bss segment para public 'BSS' use64
assume cs:_bss
;org 700h
assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing
public procs__seeds
procs__seeds dq	?
align 10h
_bss ends


; Segment type:	Pure data
; Segment permissions: Read
_rodata	segment	para public 'CONST' use64
assume cs:_rodata
;org 710h
public procs__e1E
procs__e1E db 'PROCS.E1',0
align 20h
public procs__R2s
procs__R2s dq offset procs__e1E	; "PROCS.E1"
align 10h
public procs__e2E
procs__e2E db 'PROCS.E2',0
align 20h
public procs__R5s
procs__R5s dq offset procs__e2E	; "PROCS.E2"
align 10h
public procs__e3E
procs__e3E db 'PROCS.E3',0
align 20h
public procs__R8s
procs__R8s dq offset procs__e3E	; "PROCS.E3"
public procs__max
procs__max db	 0
db    0
db    0
db    1
db    0
db    0
db    0
db    0
_rodata	ends


; Segment type:	Pure data
; Segment permissions: Read
_gcc_except_table segment dword	public 'CONST' use64
assume cs:_gcc_except_table
;org 770h
unk_770	db 0FFh
db    3
db  45h	; E
db    1
db  2Fh	; /
db    9
db    4
db    0
db    0
db  32h	; 2
db  61h	; a
db  98h	; 
db    1
db    5
db 0B1h	; 
db    1
db    5
db    0
db    0
db 0C6h	; 
db    1
db    5
db  90h	; 
db    3
db    0
db 0EEh	; 
db    1
db    5
db    0
db    0
db  91h	; 
db    2
db    5
db 0A8h	; 
db    3
db    0
db 0B9h	; 
db    2
db    5
db    0
db    0
db 0D8h	; 
db    2
db    5
db 0C0h	; 
db    3
db    0
db  83h	; 
db    3
db  57h	; W
db    0
db    0
db    3
db    0
db    2
db  7Dh	; }
db    1
db  7Dh	; }
db    0
db    0
dd offset procs__e3
dd offset procs__e2
dd offset procs__e1
db 0FFh
db    3
db  45h	; E
db    1
db  2Fh	; /
db    9
db    4
db    0
db    0
db  32h	; 2
db  61h	; a
db  98h	; 
db    1
db    5
db 0B1h	; 
db    1
db    5
db    0
db    0
db 0C6h	; 
db    1
db    5
db  90h	; 
db    3
db    0
db 0EEh	; 
db    1
db    5
db    0
db    0
db  91h	; 
db    2
db    5
db 0A8h	; 
db    3
db    0
db 0B9h	; 
db    2
db    5
db    0
db    0
db 0D8h	; 
db    2
db    5
db 0C0h	; 
db    3
db    0
db  83h	; 
db    3
db  57h	; W
db    0
db    0
db    3
db    0
db    2
db  7Dh	; }
db    1
db  7Dh	; }
db    0
db    0
dd offset procs__e3
dd offset procs__e2
dd offset procs__e1
unk_800	db 0FFh
db    3
db  45h	; E
db    1
db  2Fh	; /
db    9
db    4
db    0
db    0
db  32h	; 2
db  61h	; a
db  98h	; 
db    1
db    5
db 0B1h	; 
db    1
db    5
db    0
db    0
db 0C6h	; 
db    1
db    5
db  90h	; 
db    3
db    0
db 0EEh	; 
db    1
db    5
db    0
db    0
db  91h	; 
db    2
db    5
db 0A8h	; 
db    3
db    0
db 0B9h	; 
db    2
db    5
db    0
db    0
db 0D8h	; 
db    2
db    5
db 0C0h	; 
db    3
db    0
db  83h	; 
db    3
db  57h	; W
db    0
db    0
db    3
db    0
db    2
db  7Dh	; }
db    1
db  7Dh	; }
db    0
db    0
dd offset procs__e3
dd offset procs__e2
dd offset procs__e1
_gcc_except_table ends


; Segment type:	Pure data
; Segment permissions: Read
; Segment alignment 'qword' can not be represented in assembly
_eh_frame segment para public 'CONST' use64
assume cs:_eh_frame
;org 848h
db  1Ch
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    1
db  7Ah	; z
db  50h	; P
db  4Ch	; L
db  52h	; R
db    0
db    1
db  78h	; x
db  10h
db    7
db    3
dd offset __gnat_personality_v0
db    3
db  1Bh
db  0Ch
db    7
db    8
db  90h	; 
db    1
db    0
db    0
db  28h	; (
db    0
db    0
db    0
db  24h	; $
db    0
db    0
db    0
dd offset locret_611+0FFFFF17Fh
dd offset unk_1E1
db    4
dd offset unk_770
db  41h	; A
db  0Eh
db  10h
db  86h	; 
db    2
db  43h	; C
db  0Dh
db    6
db  49h	; I
db  8Dh	; 
db    3
db  8Ch	; 
db    4
db  83h	; 
db    5
db    3
db 0D3h	; 
db    1
db  0Ch
db    7
db    8
db    0
db    0
db  28h	; (
db    0
db    0
db    0
db  50h	; P
db    0
db    0
db    0
dd offset locret_611+0FFFFF335h
dq 7B804000001E1h
db    0
db  41h	; A
db  0Eh
db  10h
db  86h	; 
db    2
db  43h	; C
db  0Dh
db    6
db  49h	; I
db  8Dh	; 
db    3
db  8Ch	; 
db    4
db  83h	; 
db    5
db    3
db 0D3h	; 
db    1
db  0Ch
db    7
db    8
db    0
db    0
db  28h	; (
db    0
db    0
db    0
db  7Ch	; |
db    0
db    0
db    0
dd offset locret_611+0FFFFF4EBh
dd offset unk_1E1
db    4
dd offset unk_800
db  41h	; A
db  0Eh
db  10h
db  86h	; 
db    2
db  43h	; C
db  0Dh
db    6
db  49h	; I
db  8Dh	; 
db    3
db  8Ch	; 
db    4
db  83h	; 
db    5
db    3
db 0D3h	; 
db    1
db  0Ch
db    7
db    8
db    0
db    0
db  14h
db    0
db    0
db    0
db    0
db    0
db    0
db    0
db    1
db  7Ah	; z
db  52h	; R
db    0
db    1
db  78h	; x
db  10h
db    1
db  1Bh
db  0Ch
db    7
db    8
db  90h	; 
db    1
db    0
db    0
db  1Ch
db    0
db    0
db    0
db  1Ch
db    0
db    0
db    0
dd offset locret_611+0FFFFF689h
dq 100E410000000047h
db  86h	; 
db    2
db  43h	; C
db  0Dh
db    6
db    2
db  42h	; B
db  0Ch
db    7
db    8
db    0
db    0
db  20h
db    0
db    0
db    0
db  3Ch	; <
db    0
db    0
db    0
dd offset locret_611+0FFFFF6B1h
dq 100E410000000024h
db  86h	; 
db    2
db  43h	; C
db  0Dh
db    6
db  5Fh	; _
db  0Ch
db    7
db    8
db    0
db    0
db    0
db    0
db    0
db    0
db    0
_eh_frame ends


; Segment type:	Externs
; extern
extrn __gnat_personality_v0
extrn mt__gen_u32:near
extrn _Unwind_Resume:near
extrn __gnat_begin_handler:near
extrn __gnat_end_handler:near
extrn mt__init_genrand__2:near
extrn system__exception_table__register_exception:near


end
