diff options
author | Yunsup Lee <yunsup@cs.berkeley.edu> | 2013-04-22 14:56:59 -0700 |
---|---|---|
committer | Yunsup Lee <yunsup@cs.berkeley.edu> | 2013-04-22 14:56:59 -0700 |
commit | 81ad66f25ce4c15180e558696961bd8eaf967fea (patch) | |
tree | d70676fb1d11a4a66a268f7860d3ef7d469987fe | |
download | riscv-tests-81ad66f25ce4c15180e558696961bd8eaf967fea.zip riscv-tests-81ad66f25ce4c15180e558696961bd8eaf967fea.tar.gz riscv-tests-81ad66f25ce4c15180e558696961bd8eaf967fea.tar.bz2 |
initial commit
189 files changed, 44573 insertions, 0 deletions
diff --git a/env/p/link.ld b/env/p/link.ld new file mode 100644 index 0000000..6b19389 --- /dev/null +++ b/env/p/link.ld @@ -0,0 +1,44 @@ +/*======================================================================*/ +/* Proxy kernel linker script */ +/*======================================================================*/ +/* This is the linker script used when building the proxy kernel. */ + +/*----------------------------------------------------------------------*/ +/* Setup */ +/*----------------------------------------------------------------------*/ + +/* The OUTPUT_ARCH command specifies the machine architecture where the + argument is one of the names used in the BFD library. More + specifically one of the entires in bfd/cpu-mips.c */ + +OUTPUT_ARCH( "riscv" ) + +/* The ENTRY command specifies the entry point (ie. first instruction + to execute). The symbol _start should be defined in each test. */ + +ENTRY( _start ) + +/*----------------------------------------------------------------------*/ +/* Sections */ +/*----------------------------------------------------------------------*/ + +SECTIONS +{ + + /* text: test code section */ + . = 0x00002000; + .text : + { + *(.text) + } + + /* data: Initialized data segment */ + .data : + { + *(.data) + } + + /* End of uninitalized data segement */ + _end = .; +} + diff --git a/env/p/riscv_test.h b/env/p/riscv_test.h new file mode 100644 index 0000000..a4f9668 --- /dev/null +++ b/env/p/riscv_test.h @@ -0,0 +1,76 @@ +#ifndef _ENV_PHYSICAL_SINGLE_CORE_H +#define _ENV_PHYSICAL_SINGLE_CORE_H + +//----------------------------------------------------------------------- +// Begin Macro +//----------------------------------------------------------------------- + +#define RVTEST_RV64U \ + +#define RVTEST_RV64S \ + +#define RVTEST_FP_ENABLE \ + setpcr cr0, 2; \ + mfpcr a0, cr0; \ + and a0, a0, 2; \ + beqz a0, 1f; \ + mtfsr x0; \ +1: + +#define RVTEST_PASS_NOFP \ + RVTEST_FP_ENABLE \ + bnez a0, 2f; \ + RVTEST_PASS \ +2: \ + +#define RVTEST_VEC_ENABLE \ + mfpcr a0, cr0; \ + ori a0, a0, 4; \ + mtpcr a0, cr0; \ + li a0, 0xff; \ + mtpcr a0, cr18; \ + +#define RVTEST_CODE_BEGIN \ + .text; \ + .align 4; \ + .global _start; \ +_start: \ + RVTEST_FP_ENABLE \ + RVTEST_VEC_ENABLE \ + mfpcr a0, cr10; 1: bnez a0, 1b; \ + +//----------------------------------------------------------------------- +// End Macro +//----------------------------------------------------------------------- + +#define RVTEST_CODE_END \ + +//----------------------------------------------------------------------- +// Pass/Fail Macro +//----------------------------------------------------------------------- + +#define RVTEST_PASS \ + fence; \ + li x1, 1; \ + mtpcr x1, cr30; \ +1: b 1b; \ + +#define RVTEST_FAIL \ + fence; \ + beqz x28, 1f; \ + sll x28, x28, 1; \ + or x28, x28, 1; \ + mtpcr x28, cr30; \ +1: b 1b; \ + +//----------------------------------------------------------------------- +// Data Section Macro +//----------------------------------------------------------------------- + +#define RVTEST_DATA_BEGIN +#define RVTEST_DATA_END + +//#define RVTEST_DATA_BEGIN .align 4; .global begin_signature; begin_signature: +//#define RVTEST_DATA_END .align 4; .global end_signature; end_signature: + +#endif diff --git a/env/pm/link.ld b/env/pm/link.ld new file mode 100644 index 0000000..6b19389 --- /dev/null +++ b/env/pm/link.ld @@ -0,0 +1,44 @@ +/*======================================================================*/ +/* Proxy kernel linker script */ +/*======================================================================*/ +/* This is the linker script used when building the proxy kernel. */ + +/*----------------------------------------------------------------------*/ +/* Setup */ +/*----------------------------------------------------------------------*/ + +/* The OUTPUT_ARCH command specifies the machine architecture where the + argument is one of the names used in the BFD library. More + specifically one of the entires in bfd/cpu-mips.c */ + +OUTPUT_ARCH( "riscv" ) + +/* The ENTRY command specifies the entry point (ie. first instruction + to execute). The symbol _start should be defined in each test. */ + +ENTRY( _start ) + +/*----------------------------------------------------------------------*/ +/* Sections */ +/*----------------------------------------------------------------------*/ + +SECTIONS +{ + + /* text: test code section */ + . = 0x00002000; + .text : + { + *(.text) + } + + /* data: Initialized data segment */ + .data : + { + *(.data) + } + + /* End of uninitalized data segement */ + _end = .; +} + diff --git a/env/pm/riscv_test.h b/env/pm/riscv_test.h new file mode 100644 index 0000000..102e6e0 --- /dev/null +++ b/env/pm/riscv_test.h @@ -0,0 +1,75 @@ +#ifndef _ENV_PHYSICAL_MULTI_CORE_H +#define _ENV_PHYSICAL_MULTI_CORE_H + +//----------------------------------------------------------------------- +// Begin Macro +//----------------------------------------------------------------------- + +#define RVTEST_RV64U \ + +#define RVTEST_RV64S \ + +#define RVTEST_FP_ENABLE \ + setpcr cr0, 2; \ + mfpcr a0, cr0; \ + and a0, a0, 2; \ + beqz a0, 1f; \ + mtfsr x0; \ +1: + +#define RVTEST_PASS_NOFP \ + RVTEST_FP_ENABLE \ + bnez a0, 2f; \ + RVTEST_PASS \ +2: \ + +#define RVTEST_VEC_ENABLE \ + mfpcr a0, cr0; \ + ori a0, a0, 4; \ + mtpcr a0, cr0; \ + li a0, 0xff; \ + mtpcr a0, cr18; \ + +#define RVTEST_CODE_BEGIN \ + .text; \ + .align 4; \ + .global _start; \ +_start: \ + RVTEST_FP_ENABLE \ + RVTEST_VEC_ENABLE \ + +//----------------------------------------------------------------------- +// End Macro +//----------------------------------------------------------------------- + +#define RVTEST_CODE_END \ + +//----------------------------------------------------------------------- +// Pass/Fail Macro +//----------------------------------------------------------------------- + +#define RVTEST_FAIL \ + fence; \ + beqz x28, 1f; \ + sll x28, x28, 1; \ + or x28, x28, 1; \ + mtpcr x28, cr30; \ +1: b 1b; \ + +#define RVTEST_PASS \ + fence; \ + li x1, 1; \ + mtpcr x1, cr30; \ +1: b 1b; \ + +//----------------------------------------------------------------------- +// Data Section Macro +//----------------------------------------------------------------------- + +#define RVTEST_DATA_BEGIN +#define RVTEST_DATA_END + +//#define RVTEST_DATA_BEGIN .align 4; .global begin_signature; begin_signature: +//#define RVTEST_DATA_END .align 4; .global end_signature; end_signature: + +#endif diff --git a/env/pt/link.ld b/env/pt/link.ld new file mode 100644 index 0000000..6b19389 --- /dev/null +++ b/env/pt/link.ld @@ -0,0 +1,44 @@ +/*======================================================================*/ +/* Proxy kernel linker script */ +/*======================================================================*/ +/* This is the linker script used when building the proxy kernel. */ + +/*----------------------------------------------------------------------*/ +/* Setup */ +/*----------------------------------------------------------------------*/ + +/* The OUTPUT_ARCH command specifies the machine architecture where the + argument is one of the names used in the BFD library. More + specifically one of the entires in bfd/cpu-mips.c */ + +OUTPUT_ARCH( "riscv" ) + +/* The ENTRY command specifies the entry point (ie. first instruction + to execute). The symbol _start should be defined in each test. */ + +ENTRY( _start ) + +/*----------------------------------------------------------------------*/ +/* Sections */ +/*----------------------------------------------------------------------*/ + +SECTIONS +{ + + /* text: test code section */ + . = 0x00002000; + .text : + { + *(.text) + } + + /* data: Initialized data segment */ + .data : + { + *(.data) + } + + /* End of uninitalized data segement */ + _end = .; +} + diff --git a/env/pt/pcr.h b/env/pt/pcr.h new file mode 100644 index 0000000..72043b7 --- /dev/null +++ b/env/pt/pcr.h @@ -0,0 +1,93 @@ +#ifndef _RISCV_PCR_H +#define _RISCV_PCR_H + +#define SR_ET 0x00000001 +#define SR_EF 0x00000002 +#define SR_EV 0x00000004 +#define SR_EC 0x00000008 +#define SR_PS 0x00000010 +#define SR_S 0x00000020 +#define SR_U64 0x00000040 +#define SR_S64 0x00000080 +#define SR_VM 0x00000100 +#define SR_IM 0x00FF0000 +#define SR_ZERO ~(SR_ET|SR_EF|SR_EV|SR_EC|SR_PS|SR_S|SR_U64|SR_S64|SR_VM|SR_IM) +#define SR_IM_SHIFT 16 + +#define PCR_SR 0 +#define PCR_EPC 1 +#define PCR_BADVADDR 2 +#define PCR_EVEC 3 +#define PCR_COUNT 4 +#define PCR_COMPARE 5 +#define PCR_CAUSE 6 +#define PCR_PTBR 7 +#define PCR_SEND_IPI 8 +#define PCR_CLR_IPI 9 +#define PCR_COREID 10 +#define PCR_IMPL 11 +#define PCR_K0 12 +#define PCR_K1 13 +#define PCR_VECBANK 18 +#define PCR_VECCFG 19 +#define PCR_RESET 29 +#define PCR_TOHOST 30 +#define PCR_FROMHOST 31 + +#define IMPL_ISASIM 1 +#define IMPL_ROCKET 2 + +#define IRQ_IPI 5 +#define IRQ_TIMER 7 + +#define CAUSE_MISALIGNED_FETCH 0 +#define CAUSE_FAULT_FETCH 1 +#define CAUSE_ILLEGAL_INSTRUCTION 2 +#define CAUSE_PRIVILEGED_INSTRUCTION 3 +#define CAUSE_FP_DISABLED 4 +#define CAUSE_SYSCALL 6 +#define CAUSE_BREAKPOINT 7 +#define CAUSE_MISALIGNED_LOAD 8 +#define CAUSE_MISALIGNED_STORE 9 +#define CAUSE_FAULT_LOAD 10 +#define CAUSE_FAULT_STORE 11 +#define CAUSE_VECTOR_DISABLED 12 +#define CAUSE_VECTOR_BANK 13 + +#define CAUSE_VECTOR_MISALIGNED_FETCH 24 +#define CAUSE_VECTOR_FAULT_FETCH 25 +#define CAUSE_VECTOR_ILLEGAL_INSTRUCTION 26 +#define CAUSE_VECTOR_ILLEGAL_COMMAND 27 +#define CAUSE_VECTOR_MISALIGNED_LOAD 28 +#define CAUSE_VECTOR_MISALIGNED_STORE 29 +#define CAUSE_VECTOR_FAULT_LOAD 30 +#define CAUSE_VECTOR_FAULT_STORE 31 + +#ifdef __riscv + +#define ASM_CR(r) _ASM_CR(r) +#define _ASM_CR(r) cr##r + +#ifndef __ASSEMBLER__ + +#define mtpcr(reg,val) ({ long __tmp = (long)(val), __tmp2; \ + asm volatile ("mtpcr %0,%1,cr%2" : "=r"(__tmp2) : "r"(__tmp),"i"(reg)); \ + __tmp2; }) + +#define mfpcr(reg) ({ long __tmp; \ + asm volatile ("mfpcr %0,cr%1" : "=r"(__tmp) : "i"(reg)); \ + __tmp; }) + +#define setpcr(reg,val) ({ long __tmp; \ + asm volatile ("setpcr %0,cr%2,%1" : "=r"(__tmp) : "i"(val), "i"(reg)); \ + __tmp; }) + +#define clearpcr(reg,val) ({ long __tmp; \ + asm volatile ("clearpcr %0,cr%2,%1" : "=r"(__tmp) : "i"(val), "i"(reg)); \ + __tmp; }) + +#endif + +#endif + +#endif diff --git a/env/pt/riscv_test.h b/env/pt/riscv_test.h new file mode 100644 index 0000000..4c42803 --- /dev/null +++ b/env/pt/riscv_test.h @@ -0,0 +1,236 @@ +#ifndef _ENV_PHYSICAL_SINGLE_CORE_TIMER_H +#define _ENV_PHYSICAL_SINGLE_CORE_TIMER_H + +#include "pcr.h" + +//----------------------------------------------------------------------- +// Begin Macro +//----------------------------------------------------------------------- + +#define RVTEST_RV64U \ + +#define RVTEST_FP_ENABLE \ + setpcr cr0, 2; \ + mfpcr a0, cr0; \ + and a0, a0, 2; \ + beqz a0, 1f; \ + mtfsr x0; \ +1: + +#define RVTEST_PASS_NOFP \ + RVTEST_FP_ENABLE \ + bnez a0, 2f; \ + RVTEST_PASS \ +2: \ + +#define RVTEST_VEC_ENABLE \ + mfpcr a0, cr0; \ + ori a0, a0, 4; \ + mtpcr a0, cr0; \ + li a0, 0xff; \ + mtpcr a0, cr18; \ + +#define RVTEST_CODE_BEGIN \ + .text; \ + .align 4; \ + .global _start; \ +_start: \ + RVTEST_FP_ENABLE \ + RVTEST_VEC_ENABLE \ + mfpcr a0, cr10; 1: bnez a0, 1b; \ + ENABLE_TIMER_INTERRUPT \ + +//----------------------------------------------------------------------- +// End Macro +//----------------------------------------------------------------------- + +#define RVTEST_CODE_END \ + XCPT_HANDLER \ + +//----------------------------------------------------------------------- +// Pass/Fail Macro +//----------------------------------------------------------------------- + +#define RVTEST_PASS \ + fence; \ + li x1, 1; \ + mtpcr x1, cr30; \ +1: b 1b; \ + +#define RVTEST_FAIL \ + fence; \ + beqz x28, 1f; \ + sll x28, x28, 1; \ + or x28, x28, 1; \ + mtpcr x28, cr30; \ +1: b 1b; \ + +//----------------------------------------------------------------------- +// Data Section Macro +//----------------------------------------------------------------------- + +#define RVTEST_DATA_BEGIN \ + .align 3; \ +regspill: \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ +evac: \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + .dword 0xdeadbeefcafebabe; \ + +#define RVTEST_DATA_END + +//#define RVTEST_DATA_BEGIN .align 4; .global begin_signature; begin_signature: +//#define RVTEST_DATA_END .align 4; .global end_signature; end_signature: + +//----------------------------------------------------------------------- +// Misc +//----------------------------------------------------------------------- + +#define ENABLE_TIMER_INTERRUPT \ + mtpcr x0,ASM_CR(PCR_CLR_IPI);\ + mfpcr a0,ASM_CR(PCR_SR); \ + li a1, SR_ET|SR_IM; \ + or a0,a0,a1; \ + mtpcr a0,ASM_CR(PCR_SR); \ + la a0,handler; \ + mtpcr a0,ASM_CR(PCR_EVEC); \ + mtpcr x0,ASM_CR(PCR_COUNT); \ + addi a0,x0,60; \ + mtpcr a0,ASM_CR(PCR_COMPARE);\ + +#define XCPT_HANDLER \ +handler: \ + mtpcr a0,ASM_CR(PCR_K0); \ + mtpcr a1,ASM_CR(PCR_K1); \ + la a0,regspill; \ + sd a2,0(a0); \ + sd a3,8(a0); \ + sd a4,16(a0); \ + sd a5,24(a0); \ + sd s0,32(a0); \ + sd s1,40(a0); \ + mfpcr s1,ASM_CR(PCR_VECBANK);\ + mfpcr s0,ASM_CR(PCR_VECCFG); \ + la a0,evac; \ + vxcptevac a0; \ + mtpcr s1,ASM_CR(PCR_VECBANK);\ + srli a1,s0,12; \ + andi a1,a1,0x3f; \ + srli a2,s0,18; \ + andi a2,a2,0x3f; \ + vvcfg a1,a2; \ + li a2,0xfff; \ + and a1,s0,a2; \ + vsetvl a1,a1; \ + vxcpthold; \ + li a5,0; \ +handler_loop: \ + ld a1,0(a0); \ + addi a0,a0,8; \ + blt a1,x0,done; \ + srli a2,a1,32; \ + andi a2,a2,0x1; \ + beq a2,x0,vcnt; \ +vcmd: \ + beq a5,x0,vcmd_skip; \ + venqcmd a4,a3; \ +vcmd_skip: \ + li a5,1; \ + move a4,a1; \ + srli a3,a4,36; \ + andi a3,a3,0x1; \ +vimm1: \ + srli a2,a4,35; \ + andi a2,a2,0x1; \ + beq a2,x0,vimm2; \ + ld a1,0(a0); \ + addi a0,a0,8; \ + venqimm1 a1,a3; \ +vimm2: \ + srli a2,a4,34; \ + andi a2,a2,0x1; \ + beq a2,x0,end; \ + ld a1,0(a0); \ + addi a0,a0,8; \ + venqimm2 a1,a3; \ + j end; \ +vcnt: \ + ld a2,0(a0); \ + srli a2,a2,31; \ + andi a2,a2,0x2; \ + or a3,a3,a2; \ + venqcnt a1,a3; \ +end: \ + j handler_loop; \ +done: \ + beq a5,x0,done_skip; \ + venqcmd a4,a3; \ +done_skip: \ + la a0,regspill; \ + ld a2,0(a0); \ + ld a3,8(a0); \ + ld a4,16(a0); \ + ld a5,24(a0); \ + ld s0,32(a0); \ + ld s1,40(a0); \ + mfpcr a0,ASM_CR(PCR_COUNT); \ + addi a0,a0,60; \ + mtpcr a0,ASM_CR(PCR_COMPARE);\ + mfpcr a0,ASM_CR(PCR_K0); \ + mfpcr a1,ASM_CR(PCR_K1); \ + eret; \ + +#endif diff --git a/env/v/entry.S b/env/v/entry.S new file mode 100644 index 0000000..35eaae3 --- /dev/null +++ b/env/v/entry.S @@ -0,0 +1,171 @@ +#include "riscv_test.h" + +#ifdef __riscv64 +# define STORE sd +# define LOAD ld +# define REGBYTES 8 +#else +# define STORE sw +# define LOAD lw +# define REGBYTES 4 +#endif + + .text + .global _start +_start: + la sp, stack_top + li a1, 1337 + la a0, userstart + j vm_boot + +save_tf: # write the trap frame onto the stack + + # save gprs + STORE x3,3*REGBYTES(x2) + STORE x4,4*REGBYTES(x2) + STORE x5,5*REGBYTES(x2) + STORE x6,6*REGBYTES(x2) + STORE x7,7*REGBYTES(x2) + STORE x8,8*REGBYTES(x2) + STORE x9,9*REGBYTES(x2) + STORE x10,10*REGBYTES(x2) + STORE x11,11*REGBYTES(x2) + STORE x12,12*REGBYTES(x2) + STORE x13,13*REGBYTES(x2) + STORE x14,14*REGBYTES(x2) + STORE x15,15*REGBYTES(x2) + STORE x16,16*REGBYTES(x2) + STORE x17,17*REGBYTES(x2) + STORE x18,18*REGBYTES(x2) + STORE x19,19*REGBYTES(x2) + STORE x20,20*REGBYTES(x2) + STORE x21,21*REGBYTES(x2) + STORE x22,22*REGBYTES(x2) + STORE x23,23*REGBYTES(x2) + STORE x24,24*REGBYTES(x2) + STORE x25,25*REGBYTES(x2) + STORE x26,26*REGBYTES(x2) + STORE x27,27*REGBYTES(x2) + STORE x28,28*REGBYTES(x2) + STORE x29,29*REGBYTES(x2) + STORE x30,30*REGBYTES(x2) + STORE x31,31*REGBYTES(x2) + + mfpcr x3,ASM_CR(PCR_K0) + STORE x3,1*REGBYTES(x2) # x1 is in PCR_K0 + mfpcr x3,ASM_CR(PCR_K1) + STORE x3,2*REGBYTES(x2) # x2 is in PCR_K1 + + # get sr, epc, badvaddr, cause + mfpcr x3,ASM_CR(PCR_SR) # sr + STORE x3,32*REGBYTES(x2) + mfpcr x4,ASM_CR(PCR_EPC) # epc + STORE x4,33*REGBYTES(x2) + mfpcr x3,ASM_CR(PCR_BADVADDR) # badvaddr + STORE x3,34*REGBYTES(x2) + mfpcr x3,ASM_CR(PCR_CAUSE) # cause + STORE x3,35*REGBYTES(x2) + + # get faulting insn, if it wasn't a fetch-related trap + li x5, CAUSE_MISALIGNED_FETCH + li x6, CAUSE_FAULT_FETCH + beq x3, x5, 1f + beq x3, x6, 1f + lh x3,0(x4) + lh x4,2(x4) + sh x3, 36*REGBYTES(x2) + sh x4,2+36*REGBYTES(x2) +1: + + mfpcr x3,ASM_CR(PCR_VECBANK) # vecbank + STORE x3,37*REGBYTES(x2) + mfpcr x3,ASM_CR(PCR_VECCFG) # veccfg + STORE x3,38*REGBYTES(x2) + + ret + + .globl pop_tf +pop_tf: # write the trap frame onto the stack + # restore gprs + LOAD a1,32*REGBYTES(a0) # restore sr (should disable interrupts) + mtpcr a1,ASM_CR(PCR_SR) + + LOAD x1,1*REGBYTES(a0) + mtpcr x1,ASM_CR(PCR_K0) + LOAD x1,2*REGBYTES(a0) + mtpcr x1,ASM_CR(PCR_K1) + move x1,a0 + LOAD x3,3*REGBYTES(x1) + LOAD x4,4*REGBYTES(x1) + LOAD x5,5*REGBYTES(x1) + LOAD x6,6*REGBYTES(x1) + LOAD x7,7*REGBYTES(x1) + LOAD x8,8*REGBYTES(x1) + LOAD x9,9*REGBYTES(x1) + LOAD x10,10*REGBYTES(x1) + LOAD x11,11*REGBYTES(x1) + LOAD x12,12*REGBYTES(x1) + LOAD x13,13*REGBYTES(x1) + LOAD x14,14*REGBYTES(x1) + LOAD x15,15*REGBYTES(x1) + LOAD x16,16*REGBYTES(x1) + LOAD x17,17*REGBYTES(x1) + LOAD x18,18*REGBYTES(x1) + LOAD x19,19*REGBYTES(x1) + LOAD x20,20*REGBYTES(x1) + LOAD x21,21*REGBYTES(x1) + LOAD x22,22*REGBYTES(x1) + LOAD x23,23*REGBYTES(x1) + LOAD x24,24*REGBYTES(x1) + LOAD x25,25*REGBYTES(x1) + LOAD x26,26*REGBYTES(x1) + LOAD x27,27*REGBYTES(x1) + LOAD x28,28*REGBYTES(x1) + LOAD x29,29*REGBYTES(x1) + LOAD x30,30*REGBYTES(x1) + LOAD x31,31*REGBYTES(x1) + + # gtfo! + LOAD x2,33*REGBYTES(x1) + mtpcr x2,ASM_CR(PCR_EPC) + mfpcr x1,ASM_CR(PCR_K0) + mfpcr x2,ASM_CR(PCR_K1) + eret + + .global trap_entry +trap_entry: + mtpcr ra,ASM_CR(PCR_K0) + mtpcr x2,ASM_CR(PCR_K1) + + # coming from kernel? + mfpcr ra,ASM_CR(PCR_SR) + and ra,ra,SR_PS + bnez ra, 1f + + # no, so start at the top of the stack + la x2,stack_top+MAX_TEST_PAGES*PGSIZE-SIZEOF_TRAPFRAME_T + jal save_tf + move sp,x2 + setpcr ASM_CR(PCR_SR), SR_ET + move a0,x2 + mfpcr ra,ASM_CR(PCR_SR) + and ra,ra,SR_EV + beqz ra, 2f + addi x2,x2,39*REGBYTES + vxcptsave x2 +2:jal handle_trap + + # when coming from kernel, continue below its stack +1:add x2, sp, -SIZEOF_TRAPFRAME_T + jal save_tf + move sp,x2 + setpcr ASM_CR(PCR_SR), SR_ET + move a0,x2 + jal handle_trap + + .bss + .global stack_bot + .global stack_top +stack_bot: + .skip 32768 +stack_top: diff --git a/env/v/link.ld b/env/v/link.ld new file mode 100644 index 0000000..4efeaaa --- /dev/null +++ b/env/v/link.ld @@ -0,0 +1,50 @@ +/*======================================================================*/ +/* Proxy kernel linker script */ +/*======================================================================*/ +/* This is the linker script used when building the proxy kernel. */ + +/*----------------------------------------------------------------------*/ +/* Setup */ +/*----------------------------------------------------------------------*/ + +/* The OUTPUT_ARCH command specifies the machine architecture where the + argument is one of the names used in the BFD library. More + specifically one of the entires in bfd/cpu-mips.c */ + +OUTPUT_ARCH( "riscv" ) + +/* The ENTRY command specifies the entry point (ie. first instruction + to execute). The symbol _start should be defined in each test. */ + +ENTRY( _start ) + +/*----------------------------------------------------------------------*/ +/* Sections */ +/*----------------------------------------------------------------------*/ + +SECTIONS +{ + + /* text: test code section */ + . = 0x00002000; + .text : + { + *(.text) + } + + /* data: Initialized data segment */ + .data ALIGN(0x2000): + { + *(.data) + } + + /* bss: Initialized bss segment */ + .bss ALIGN(0x2000): + { + *(.bss) + } + + /* End of uninitalized bss segement */ + _end = .; +} + diff --git a/env/v/pcr.h b/env/v/pcr.h new file mode 100644 index 0000000..72043b7 --- /dev/null +++ b/env/v/pcr.h @@ -0,0 +1,93 @@ +#ifndef _RISCV_PCR_H +#define _RISCV_PCR_H + +#define SR_ET 0x00000001 +#define SR_EF 0x00000002 +#define SR_EV 0x00000004 +#define SR_EC 0x00000008 +#define SR_PS 0x00000010 +#define SR_S 0x00000020 +#define SR_U64 0x00000040 +#define SR_S64 0x00000080 +#define SR_VM 0x00000100 +#define SR_IM 0x00FF0000 +#define SR_ZERO ~(SR_ET|SR_EF|SR_EV|SR_EC|SR_PS|SR_S|SR_U64|SR_S64|SR_VM|SR_IM) +#define SR_IM_SHIFT 16 + +#define PCR_SR 0 +#define PCR_EPC 1 +#define PCR_BADVADDR 2 +#define PCR_EVEC 3 +#define PCR_COUNT 4 +#define PCR_COMPARE 5 +#define PCR_CAUSE 6 +#define PCR_PTBR 7 +#define PCR_SEND_IPI 8 +#define PCR_CLR_IPI 9 +#define PCR_COREID 10 +#define PCR_IMPL 11 +#define PCR_K0 12 +#define PCR_K1 13 +#define PCR_VECBANK 18 +#define PCR_VECCFG 19 +#define PCR_RESET 29 +#define PCR_TOHOST 30 +#define PCR_FROMHOST 31 + +#define IMPL_ISASIM 1 +#define IMPL_ROCKET 2 + +#define IRQ_IPI 5 +#define IRQ_TIMER 7 + +#define CAUSE_MISALIGNED_FETCH 0 +#define CAUSE_FAULT_FETCH 1 +#define CAUSE_ILLEGAL_INSTRUCTION 2 +#define CAUSE_PRIVILEGED_INSTRUCTION 3 +#define CAUSE_FP_DISABLED 4 +#define CAUSE_SYSCALL 6 +#define CAUSE_BREAKPOINT 7 +#define CAUSE_MISALIGNED_LOAD 8 +#define CAUSE_MISALIGNED_STORE 9 +#define CAUSE_FAULT_LOAD 10 +#define CAUSE_FAULT_STORE 11 +#define CAUSE_VECTOR_DISABLED 12 +#define CAUSE_VECTOR_BANK 13 + +#define CAUSE_VECTOR_MISALIGNED_FETCH 24 +#define CAUSE_VECTOR_FAULT_FETCH 25 +#define CAUSE_VECTOR_ILLEGAL_INSTRUCTION 26 +#define CAUSE_VECTOR_ILLEGAL_COMMAND 27 +#define CAUSE_VECTOR_MISALIGNED_LOAD 28 +#define CAUSE_VECTOR_MISALIGNED_STORE 29 +#define CAUSE_VECTOR_FAULT_LOAD 30 +#define CAUSE_VECTOR_FAULT_STORE 31 + +#ifdef __riscv + +#define ASM_CR(r) _ASM_CR(r) +#define _ASM_CR(r) cr##r + +#ifndef __ASSEMBLER__ + +#define mtpcr(reg,val) ({ long __tmp = (long)(val), __tmp2; \ + asm volatile ("mtpcr %0,%1,cr%2" : "=r"(__tmp2) : "r"(__tmp),"i"(reg)); \ + __tmp2; }) + +#define mfpcr(reg) ({ long __tmp; \ + asm volatile ("mfpcr %0,cr%1" : "=r"(__tmp) : "i"(reg)); \ + __tmp; }) + +#define setpcr(reg,val) ({ long __tmp; \ + asm volatile ("setpcr %0,cr%2,%1" : "=r"(__tmp) : "i"(val), "i"(reg)); \ + __tmp; }) + +#define clearpcr(reg,val) ({ long __tmp; \ + asm volatile ("clearpcr %0,cr%2,%1" : "=r"(__tmp) : "i"(val), "i"(reg)); \ + __tmp; }) + +#endif + +#endif + +#endif diff --git a/env/v/riscv_test.h b/env/v/riscv_test.h new file mode 100644 index 0000000..4d9cceb --- /dev/null +++ b/env/v/riscv_test.h @@ -0,0 +1,129 @@ +#ifndef _ENV_VIRTUAL_SINGLE_CORE_H +#define _ENV_VIRTUAL_SINGLE_CORE_H + +//----------------------------------------------------------------------- +// Begin Macro +//----------------------------------------------------------------------- + +#define RVTEST_RV64U \ + +#define RVTEST_RV64S \ + +#define RVTEST_FP_ENABLE \ + mfpcr t0, cr0; \ + or t0, t0, 2; \ + mtpcr t0, cr0; \ + mtfsr x0; \ + +#define RVTEST_VEC_ENABLE \ + mfpcr t0, cr0; \ + ori t0, t0, 4; \ + mtpcr t0, cr0; \ + li t0, 0xff; \ + mtpcr t0, cr11; \ + +#define RVTEST_CODE_BEGIN \ + .text; \ + .align 13; \ + .global userstart; \ +userstart: \ + +//----------------------------------------------------------------------- +// End Macro +//----------------------------------------------------------------------- + +#define RVTEST_CODE_END \ + +//----------------------------------------------------------------------- +// Pass/Fail Macro +//----------------------------------------------------------------------- + +#define RVTEST_PASS li a0, 1; syscall; +#define RVTEST_FAIL sll a0, x28, 1; 1:beqz a0, 1b; or a0, a0, 1; syscall; + +#define RVTEST_PASS_NOFP li a0, 1234; syscall; + +//----------------------------------------------------------------------- +// Data Section Macro +//----------------------------------------------------------------------- + +#define RVTEST_DATA_BEGIN +#define RVTEST_DATA_END + +//#define RVTEST_DATA_BEGIN .align 4; .global begin_signature; begin_signature: +//#define RVTEST_DATA_END .align 4; .global end_signature; end_signature: + +//----------------------------------------------------------------------- +// Supervisor mode definitions and macros +//----------------------------------------------------------------------- + +#include "pcr.h" + +#define vvcfg(nxregs, nfregs) ({ \ + asm volatile ("vvcfg %0,%1" : : "r"(nxregs), "r"(nfregs)); }) + +#define vsetvl(vl) ({ long __tmp; \ + asm volatile ("vsetvl %0,%1" : "=r"(__tmp) : "r"(vl)); }) + +#define vcfg(word) ({ vvcfg((word)>>12, (word)>>18); vsetvl((word)); }) + +#define dword_bit_cmd(dw) ((dw >> 32) & 0x1) +#define dword_bit_cnt(dw) (!dword_bit_cmd(dw)) +#define dword_bit_imm1(dw) ((dw >> 35) & 0x1) +#define dword_bit_imm2(dw) ((dw >> 34) & 0x1) +#define dword_bit_pf(dw) ((dw >> 36) & 0x1) + +#define fencevl() ({ \ + asm volatile ("fence.v.l" ::: "memory"); }) + +#define vxcptkill() ({ \ + asm volatile ("vxcptkill"); }) + +#define vxcpthold() ({ \ + asm volatile ("vxcpthold"); }) + +#define venqcmd(bits, pf) ({ \ + asm volatile ("venqcmd %0,%1" : : "r"(bits), "r"(pf)); }) + +#define venqimm1(bits, pf) ({ \ + asm volatile ("venqimm1 %0,%1" : : "r"(bits), "r"(pf)); }) + +#define venqimm2(bits, pf) ({ \ + asm volatile ("venqimm2 %0,%1" : : "r"(bits), "r"(pf)); }) + +#define venqcnt(bits, pf) ({ \ + asm volatile ("venqcnt %0,%1" :: "r"(bits), "r"(pf)); }) + +#define MAX_TEST_PAGES 63 // this must be the period of the LFSR below +#define LFSR_NEXT(x) (((((x)^((x)>>1)) & 1) << 5) | ((x) >> 1)) + +#define PGSHIFT 13 +#define PGSIZE (1 << PGSHIFT) + +#define SIZEOF_TRAPFRAME_T 1336 + +#ifndef __ASSEMBLER__ + + +typedef unsigned long pte_t; +#define LEVELS (sizeof(pte_t) == sizeof(uint64_t) ? 3 : 2) +#define PTIDXBITS (PGSHIFT - (sizeof(pte_t) == 8 ? 3 : 2)) +#define VPN_BITS (PTIDXBITS * LEVELS) +#define VA_BITS (VPN_BITS + PGSHIFT) +#define PTES_PER_PT (PGSIZE/sizeof(pte_t)) + +typedef struct +{ + long gpr[32]; + long sr; + long epc; + long badvaddr; + long cause; + long insn; + long vecbank; + long veccfg; + long evac[128]; +} trapframe_t; +#endif + +#endif diff --git a/env/v/vm.c b/env/v/vm.c new file mode 100644 index 0000000..37ef19e --- /dev/null +++ b/env/v/vm.c @@ -0,0 +1,263 @@ +#include <stdint.h> +#include <string.h> +#include <stdio.h> + +#include "riscv_test.h" + +void trap_entry(); +void pop_tf(trapframe_t*); + +static void cputchar(int x) +{ + while (mtpcr(PCR_TOHOST, 0x0101000000000000 | (unsigned char)x)); +} + +static void cputstring(const char* s) +{ + while(*s) + cputchar(*s++); + cputchar('\n'); +} + +static void terminate(int code) +{ + while (mtpcr(PCR_TOHOST, code)); +} + +#define stringify1(x) #x +#define stringify(x) stringify1(x) +#define assert(x) do { \ + if (x) break; \ + cputstring("Assertion failed: " stringify(x)); \ + terminate(3); \ + while(1); \ +} while(0) + +#define RELOC(x) ((typeof(x))((char*)(x) + (PGSIZE*MAX_TEST_PAGES))) + +typedef struct { pte_t addr; void* next; } freelist_t; + +pte_t l1pt[PTES_PER_PT] __attribute__((aligned(PGSIZE))); +pte_t l2pt[PTES_PER_PT] __attribute__((aligned(PGSIZE))); +pte_t l3pt[PTES_PER_PT] __attribute__((aligned(PGSIZE))); +freelist_t user_mapping[MAX_TEST_PAGES]; +freelist_t freelist_nodes[MAX_TEST_PAGES]; +freelist_t *freelist_head, *freelist_tail; + +void printhex(uint64_t x) +{ + char str[17]; + for (int i = 0; i < 16; i++) + { + str[15-i] = (x & 0xF) + ((x & 0xF) < 10 ? '0' : 'a'-10); + x >>= 4; + } + str[16] = 0; + + cputstring(str); +} + +void evict(unsigned long addr) +{ + assert(addr >= PGSIZE && addr < RELOC(0L)); + addr = addr/PGSIZE*PGSIZE; + + freelist_t* node = RELOC(&user_mapping[addr/PGSIZE]); + if (node->addr) + { + memcpy((void*)RELOC(addr), (void*)addr, PGSIZE); + RELOC(&user_mapping[addr/PGSIZE])->addr = 0; + + if (*RELOC(&freelist_tail) == 0) + *RELOC(&freelist_head) = *RELOC(&freelist_tail) = node; + else + { + (*RELOC(&freelist_tail))->next = node; + *RELOC(&freelist_tail) = node; + } + } +} + +void handle_fault(unsigned long addr) +{ + assert(addr >= PGSIZE && addr < RELOC(0L)); + addr = addr/PGSIZE*PGSIZE; + + freelist_t* node = *RELOC(&freelist_head); + assert(node); + *RELOC(&freelist_head) = node->next; + if (*RELOC(&freelist_head) == *RELOC(&freelist_tail)) + *RELOC(&freelist_tail) = 0; + + *RELOC(&l3pt[addr/PGSIZE]) = node->addr | 0x3F2; + mtpcr(PCR_PTBR, l1pt); + + assert(RELOC(&user_mapping[addr/PGSIZE])->addr == 0); + *RELOC(&user_mapping[addr/PGSIZE]) = *node; + memcpy((void*)addr, (void*)RELOC(addr), PGSIZE); + + __builtin___clear_cache(0,0); +} + +void emulate_vxcptsave(trapframe_t* tf) +{ + long where = tf->gpr[(tf->insn >> 22) & 0x1F]; + + asm volatile ("vxcptevac %0" : : "r"(where)); + fencevl(); +} + +void do_vxcptrestore(long* where) +{ + vxcpthold(); + + int idx = 0; + long dword, cmd, pf; + int first = 1; + + while (1) + { + dword = where[idx++]; + + if (dword < 0) break; + + if (dword_bit_cnt(dword)) + { + venqcnt(dword, pf | (dword_bit_cmd(where[idx]) << 1)); + } + else + { + if (!first) + { + venqcmd(cmd, pf); + } + + first = 0; + cmd = dword; + pf = dword_bit_pf(cmd); + + if (dword_bit_imm1(cmd)) + { + venqimm1(where[idx++], pf); + } + if (dword_bit_imm2(cmd)) + { + venqimm2(where[idx++], pf); + } + } + } + if (!first) + { + venqcmd(cmd, pf); + } +} + +void emulate_vxcptrestore(trapframe_t* tf) +{ + long* where = (long*)tf->gpr[(tf->insn >> 22) & 0x1F]; + vxcptkill(); + vcfg(tf->veccfg); + do_vxcptrestore(where); +} + +void restore_vector(trapframe_t* tf) +{ + mtpcr(PCR_VECBANK, tf->vecbank); + vcfg(tf->veccfg); + + if (mfpcr(PCR_IMPL) == IMPL_ROCKET) + do_vxcptrestore(tf->evac); + else + asm volatile("vxcptrestore %0" : : "r"(tf->evac) : "memory"); +} + +void handle_trap(trapframe_t* tf) +{ + if (tf->cause == CAUSE_SYSCALL) + { + int n = tf->gpr[18]; + if (n == 1234) // TEST_PASS_NOFP + { + if (mfpcr(PCR_SR) & SR_EF) + { + tf->epc += 4; + goto out; + } + n = 1; + } + + for (long i = 1; i < MAX_TEST_PAGES; i++) + evict(i*PGSIZE); + + terminate(n); + while(1); + } + else if (tf->cause == CAUSE_FAULT_FETCH) + handle_fault(tf->epc); + else if (tf->cause == CAUSE_ILLEGAL_INSTRUCTION) + { + if ((tf->insn & 0xF83FFFFF) == 0x37B) + emulate_vxcptsave(tf); + else if ((tf->insn & 0xF83FFFFF) == 0x77B) + emulate_vxcptrestore(tf); + else + assert(0); + tf->epc += 4; + } + else if (tf->cause == CAUSE_FAULT_LOAD || tf->cause == CAUSE_FAULT_STORE || + tf->cause == CAUSE_VECTOR_FAULT_LOAD || tf->cause == CAUSE_VECTOR_FAULT_STORE || + tf->cause == CAUSE_VECTOR_FAULT_FETCH) + handle_fault(tf->badvaddr); + else + assert(0); + +out: + if (!(tf->sr & SR_PS) && (tf->sr & SR_EV)) + restore_vector(tf); + pop_tf(tf); +} + +void vm_boot(long test_addr, long seed) +{ + while (mfpcr(PCR_COREID) > 0); // only core 0 proceeds + + assert(SIZEOF_TRAPFRAME_T == sizeof(trapframe_t)); + + seed = 1 + (seed % MAX_TEST_PAGES); + freelist_head = RELOC(&freelist_nodes[0]); + freelist_tail = RELOC(&freelist_nodes[MAX_TEST_PAGES-1]); + for (long i = 0; i < MAX_TEST_PAGES; i++) + { + freelist_nodes[i].addr = (MAX_TEST_PAGES+i)*PGSIZE; + freelist_nodes[i].next = RELOC(&freelist_nodes[i+1]); + seed = LFSR_NEXT(seed); + } + freelist_nodes[MAX_TEST_PAGES-1].next = 0; + + assert(MAX_TEST_PAGES*2 < PTES_PER_PT); + l1pt[0] = (pte_t)l2pt | 1; + l2pt[0] = (pte_t)l3pt | 1; + for (long i = 0; i < MAX_TEST_PAGES; i++) + l3pt[i] = l3pt[i+MAX_TEST_PAGES] = (i*PGSIZE) | 0x382; + + mtpcr(PCR_PTBR, l1pt); + mtpcr(PCR_SR, mfpcr(PCR_SR) | SR_VM | SR_EF); + + if (mfpcr(PCR_SR) & SR_EF) + asm volatile ("mtfsr x0"); + + // relocate + long adjustment = RELOC(0L), tmp; + mtpcr(PCR_EVEC, (char*)&trap_entry + adjustment); + asm volatile ("add sp, sp, %1; rdpc %0; addi %0, %0, 16; add %0, %0, %1; jr %0" : "=&r"(tmp) : "r"(adjustment)); + + memset(RELOC(&l3pt[0]), 0, MAX_TEST_PAGES*sizeof(pte_t)); + mtpcr(PCR_PTBR, l1pt); + + trapframe_t tf; + memset(&tf, 0, sizeof(tf)); + tf.sr = SR_EF | SR_EV | SR_S | SR_U64 | SR_S64 | SR_VM; + tf.epc = test_addr; + + pop_tf(&tf); +} diff --git a/isa/macros/scalar/test_macros.h b/isa/macros/scalar/test_macros.h new file mode 100644 index 0000000..21ecdce --- /dev/null +++ b/isa/macros/scalar/test_macros.h @@ -0,0 +1,690 @@ +#ifndef __TEST_MACROS_SCALAR_H +#define __TEST_MACROS_SCALAR_H + +#define TEST_DATA + +#----------------------------------------------------------------------- +# Helper macros +#----------------------------------------------------------------------- + +#define TEST_CASE( testnum, testreg, correctval, code... ) \ +test_ ## testnum: \ + code; \ + li x29, correctval; \ + li x28, testnum; \ + bne testreg, x29, fail; + +#define TEST_CASE_JUMP( testnum, testreg, correctval, code... ) \ +test_ ## testnum: \ + code; \ + li x29, correctval; \ + li x28, testnum; \ + beq testreg, x29, pass_ ## testnum; \ + j fail; \ +pass_ ## testnum: \ + +# We use a macro hack to simpify code generation for various numbers +# of bubble cycles. + +#define TEST_INSERT_NOPS_0 +#define TEST_INSERT_NOPS_1 nop; TEST_INSERT_NOPS_0 +#define TEST_INSERT_NOPS_2 nop; TEST_INSERT_NOPS_1 +#define TEST_INSERT_NOPS_3 nop; TEST_INSERT_NOPS_2 +#define TEST_INSERT_NOPS_4 nop; TEST_INSERT_NOPS_3 +#define TEST_INSERT_NOPS_5 nop; TEST_INSERT_NOPS_4 +#define TEST_INSERT_NOPS_6 nop; TEST_INSERT_NOPS_5 +#define TEST_INSERT_NOPS_7 nop; TEST_INSERT_NOPS_6 +#define TEST_INSERT_NOPS_8 nop; TEST_INSERT_NOPS_7 +#define TEST_INSERT_NOPS_9 nop; TEST_INSERT_NOPS_8 +#define TEST_INSERT_NOPS_10 nop; TEST_INSERT_NOPS_9 + +#----------------------------------------------------------------------- +# Tests for instructions with immediate operand +#----------------------------------------------------------------------- + +#define TEST_IMM_OP( testnum, inst, result, val1, imm ) \ + TEST_CASE( testnum, x3, result, \ + li x1, val1; \ + inst x3, x1, imm; \ + ) + +#define TEST_IMM_SRC1_EQ_DEST( testnum, inst, result, val1, imm ) \ + TEST_CASE( testnum, x1, result, \ + li x1, val1; \ + inst x1, x1, imm; \ + ) + +#define TEST_IMM_DEST_BYPASS( testnum, nop_cycles, inst, result, val1, imm ) \ + TEST_CASE( testnum, x6, result, \ + li x4, 0; \ +1: li x1, val1; \ + inst x3, x1, imm; \ + TEST_INSERT_NOPS_ ## nop_cycles \ + addi x6, x3, 0; \ + addi x4, x4, 1; \ + li x5, 2; \ + bne x4, x5, 1b \ + ) + +#define TEST_IMM_SRC1_BYPASS( testnum, nop_cycles, inst, result, val1, imm ) \ + TEST_CASE( testnum, x3, result, \ + li x4, 0; \ +1: li x1, val1; \ + TEST_INSERT_NOPS_ ## nop_cycles \ + inst x3, x1, imm; \ + addi x4, x4, 1; \ + li x5, 2; \ + bne x4, x5, 1b \ + ) + +#define TEST_IMM_ZEROSRC1( testnum, inst, result, imm ) \ + TEST_CASE( testnum, x1, result, \ + inst x1, x0, imm; \ + ) + +#define TEST_IMM_ZERODEST( testnum, inst, val1, imm ) \ + TEST_CASE( testnum, x0, 0, \ + li x1, val1; \ + inst x0, x1, imm; \ + ) + +#----------------------------------------------------------------------- +# Tests for vector config instructions +#----------------------------------------------------------------------- + +#define TEST_VVCFGIVL( testnum, nxpr, nfpr, bank, vl, result ) \ + TEST_CASE_JUMP( testnum, x1, result, \ + li x2, bank; \ + mtpcr x2, cr18; \ + li x1, vl; \ + vvcfgivl x1,x1,nxpr,nfpr; \ + ) + +#define TEST_VVCFG( testnum, nxpr, nfpr, bank, vl, result ) \ + TEST_CASE_JUMP( testnum, x1, result, \ + li x2, bank; \ + mtpcr x2, cr18; \ + li x1, nxpr; \ + li x2, nfpr; \ + vvcfg x1,x2; \ + li x1, vl; \ + vsetvl x1,x1; \ + ) + +#define TEST_VSETVL( testnum, nxpr, nfpr, bank, vl, result ) \ + TEST_CASE_JUMP( testnum, x1, result, \ + li x2, bank; \ + mtpcr x2, cr18; \ + vvcfgivl x0,x0,nxpr,nfpr; \ + li x1, vl; \ + vsetvl x1, x1; \ + ) + +#----------------------------------------------------------------------- +# Tests for an instruction with register operands +#----------------------------------------------------------------------- + +#define TEST_R_OP( testnum, inst, result, val1 ) \ + TEST_CASE( testnum, x3, result, \ + li x1, val1; \ + inst x3, x1; \ + ) + +#define TEST_R_SRC1_EQ_DEST( testnum, inst, result, val1 ) \ + TEST_CASE( testnum, x1, result, \ + li x1, val1; \ + inst x1, x1; \ + ) + +#define TEST_R_DEST_BYPASS( testnum, nop_cycles, inst, result, val1 ) \ + TEST_CASE( testnum, x6, result, \ + li x4, 0; \ +1: li x1, val1; \ + inst x3, x1; \ + TEST_INSERT_NOPS_ ## nop_cycles \ + addi x6, x3, 0; \ + addi x4, x4, 1; \ + li x5, 2; \ + bne x4, x5, 1b \ + ) + +#----------------------------------------------------------------------- +# Tests for an instruction with register-register operands +#----------------------------------------------------------------------- + +#define TEST_RR_OP( testnum, inst, result, val1, val2 ) \ + TEST_CASE( testnum, x3, result, \ + li x1, val1; \ + li x2, val2; \ + inst x3, x1, x2; \ + ) + +#define TEST_RR_SRC1_EQ_DEST( testnum, inst, result, val1, val2 ) \ + TEST_CASE( testnum, x1, result, \ + li x1, val1; \ + li x2, val2; \ + inst x1, x1, x2; \ + ) + +#define TEST_RR_SRC2_EQ_DEST( testnum, inst, result, val1, val2 ) \ + TEST_CASE( testnum, x2, result, \ + li x1, val1; \ + li x2, val2; \ + inst x2, x1, x2; \ + ) + +#define TEST_RR_SRC12_EQ_DEST( testnum, inst, result, val1 ) \ + TEST_CASE( testnum, x1, result, \ + li x1, val1; \ + inst x1, x1, x1; \ + ) + +#define TEST_RR_DEST_BYPASS( testnum, nop_cycles, inst, result, val1, val2 ) \ + TEST_CASE( testnum, x6, result, \ + li x4, 0; \ +1: li x1, val1; \ + li x2, val2; \ + inst x3, x1, x2; \ + TEST_INSERT_NOPS_ ## nop_cycles \ + addi x6, x3, 0; \ + addi x4, x4, 1; \ + li x5, 2; \ + bne x4, x5, 1b \ + ) + +#define TEST_RR_SRC12_BYPASS( testnum, src1_nops, src2_nops, inst, result, val1, val2 ) \ + TEST_CASE( testnum, x3, result, \ + li x4, 0; \ +1: li x1, val1; \ + TEST_INSERT_NOPS_ ## src1_nops \ + li x2, val2; \ + TEST_INSERT_NOPS_ ## src2_nops \ + inst x3, x1, x2; \ + addi x4, x4, 1; \ + li x5, 2; \ + bne x4, x5, 1b \ + ) + +#define TEST_RR_SRC21_BYPASS( testnum, src1_nops, src2_nops, inst, result, val1, val2 ) \ + TEST_CASE( testnum, x3, result, \ + li x4, 0; \ +1: li x2, val2; \ + TEST_INSERT_NOPS_ ## src1_nops \ + li x1, val1; \ + TEST_INSERT_NOPS_ ## src2_nops \ + inst x3, x1, x2; \ + addi x4, x4, 1; \ + li x5, 2; \ + bne x4, x5, 1b \ + ) + +#define TEST_RR_ZEROSRC1( testnum, inst, result, val ) \ + TEST_CASE( testnum, x2, result, \ + li x1, val; \ + inst x2, x0, x1; \ + ) + +#define TEST_RR_ZEROSRC2( testnum, inst, result, val ) \ + TEST_CASE( testnum, x2, result, \ + li x1, val; \ + inst x2, x1, x0; \ + ) + +#define TEST_RR_ZEROSRC12( testnum, inst, result ) \ + TEST_CASE( testnum, x1, result, \ + inst x1, x0, x0; \ + ) + +#define TEST_RR_ZERODEST( testnum, inst, val1, val2 ) \ + TEST_CASE( testnum, x0, 0, \ + li x1, val1; \ + li x2, val2; \ + inst x0, x1, x2; \ + ) + +#----------------------------------------------------------------------- +# Test memory instructions +#----------------------------------------------------------------------- + +#define TEST_LD_OP( testnum, inst, result, offset, base ) \ + TEST_CASE( testnum, x3, result, \ + la x1, base; \ + inst x3, offset(x1); \ + ) + +#define TEST_ST_OP( testnum, load_inst, store_inst, result, offset, base ) \ + TEST_CASE( testnum, x3, result, \ + la x1, base; \ + li x2, result; \ + store_inst x2, offset(x1); \ + load_inst x3, offset(x1); \ + ) + +#define TEST_LD_DEST_BYPASS( testnum, nop_cycles, inst, result, offset, base ) \ +test_ ## testnum: \ + li x28, testnum; \ + li x4, 0; \ +1: la x1, base; \ + inst x3, offset(x1); \ + TEST_INSERT_NOPS_ ## nop_cycles \ + addi x6, x3, 0; \ + li x29, result; \ + bne x6, x29, fail; \ + addi x4, x4, 1; \ + li x5, 2; \ + bne x4, x5, 1b; \ + +#define TEST_LD_SRC1_BYPASS( testnum, nop_cycles, inst, result, offset, base ) \ +test_ ## testnum: \ + li x28, testnum; \ + li x4, 0; \ +1: la x1, base; \ + TEST_INSERT_NOPS_ ## nop_cycles \ + inst x3, offset(x1); \ + li x29, result; \ + bne x3, x29, fail; \ + addi x4, x4, 1; \ + li x5, 2; \ + bne x4, x5, 1b \ + +#define TEST_ST_SRC12_BYPASS( testnum, src1_nops, src2_nops, load_inst, store_inst, result, offset, base ) \ +test_ ## testnum: \ + li x28, testnum; \ + li x4, 0; \ +1: la x1, result; \ + TEST_INSERT_NOPS_ ## src1_nops \ + la x2, base; \ + TEST_INSERT_NOPS_ ## src2_nops \ + store_inst x1, offset(x2); \ + load_inst x3, offset(x2); \ + li x29, result; \ + bne x3, x29, fail; \ + addi x4, x4, 1; \ + li x5, 2; \ + bne x4, x5, 1b \ + +#define TEST_ST_SRC21_BYPASS( testnum, src1_nops, src2_nops, load_inst, store_inst, result, offset, base ) \ +test_ ## testnum: \ + li x28, testnum; \ + li x4, 0; \ +1: la x2, base; \ + TEST_INSERT_NOPS_ ## src1_nops \ + la x1, result; \ + TEST_INSERT_NOPS_ ## src2_nops \ + store_inst x1, offset(x2); \ + load_inst x3, offset(x2); \ + li x29, result; \ + bne x3, x29, fail; \ + addi x4, x4, 1; \ + li x5, 2; \ + bne x4, x5, 1b \ + +#----------------------------------------------------------------------- +# Test branch instructions +#----------------------------------------------------------------------- + +#define TEST_BR1_OP_TAKEN( testnum, inst, val1 ) \ +test_ ## testnum: \ + li x28, testnum; \ + li x1, val1; \ + inst x1, 2f; \ + bne x0, x28, fail; \ +1: bne x0, x28, 3f; \ +2: inst x1, 1b; \ + bne x0, x28, fail; \ +3: + +#define TEST_BR1_OP_NOTTAKEN( testnum, inst, val1 ) \ +test_ ## testnum: \ + li x28, testnum; \ + li x1, val1; \ + inst x1, 1f; \ + bne x0, x28, 2f; \ +1: bne x0, x28, fail; \ +2: inst x1, 1b; \ +3: + +#define TEST_BR1_SRC1_BYPASS( testnum, nop_cycles, inst, val1 ) \ +test_ ## testnum: \ + li x28, testnum; \ + li x4, 0; \ +1: li x1, val1; \ + TEST_INSERT_NOPS_ ## nop_cycles \ + inst x1, fail; \ + addi x4, x4, 1; \ + li x5, 2; \ + bne x4, x5, 1b \ + +#define TEST_BR2_OP_TAKEN( testnum, inst, val1, val2 ) \ +test_ ## testnum: \ + li x28, testnum; \ + li x1, val1; \ + li x2, val2; \ + inst x1, x2, 2f; \ + bne x0, x28, fail; \ +1: bne x0, x28, 3f; \ +2: inst x1, x2, 1b; \ + bne x0, x28, fail; \ +3: + +#define TEST_BR2_OP_NOTTAKEN( testnum, inst, val1, val2 ) \ +test_ ## testnum: \ + li x28, testnum; \ + li x1, val1; \ + li x2, val2; \ + inst x1, x2, 1f; \ + bne x0, x28, 2f; \ +1: bne x0, x28, fail; \ +2: inst x1, x2, 1b; \ +3: + +#define TEST_BR2_SRC12_BYPASS( testnum, src1_nops, src2_nops, inst, val1, val2 ) \ +test_ ## testnum: \ + li x28, testnum; \ + li x4, 0; \ +1: li x1, val1; \ + TEST_INSERT_NOPS_ ## src1_nops \ + li x2, val2; \ + TEST_INSERT_NOPS_ ## src2_nops \ + inst x1, x2, fail; \ + addi x4, x4, 1; \ + li x5, 2; \ + bne x4, x5, 1b \ + +#define TEST_BR2_SRC21_BYPASS( testnum, src1_nops, src2_nops, inst, val1, val2 ) \ +test_ ## testnum: \ + li x28, testnum; \ + li x4, 0; \ +1: li x2, val2; \ + TEST_INSERT_NOPS_ ## src1_nops \ + li x1, val1; \ + TEST_INSERT_NOPS_ ## src2_nops \ + inst x1, x2, fail; \ + addi x4, x4, 1; \ + li x5, 2; \ + bne x4, x5, 1b \ + +#----------------------------------------------------------------------- +# Test jump instructions +#----------------------------------------------------------------------- + +#define TEST_JR_SRC1_BYPASS( testnum, nop_cycles, inst ) \ +test_ ## testnum: \ + li x28, testnum; \ + li x4, 0; \ +1: la x6, 2f; \ + TEST_INSERT_NOPS_ ## nop_cycles \ + inst x6; \ + bne x0, x28, fail; \ +2: addi x4, x4, 1; \ + li x5, 2; \ + bne x4, x5, 1b \ + +#define TEST_JALR_SRC1_BYPASS( testnum, nop_cycles, inst ) \ +test_ ## testnum: \ + li x28, testnum; \ + li x4, 0; \ +1: la x6, 2f; \ + TEST_INSERT_NOPS_ ## nop_cycles \ + inst x19, x6, 0; \ + bne x0, x28, fail; \ +2: addi x4, x4, 1; \ + li x5, 2; \ + bne x4, x5, 1b \ + +#----------------------------------------------------------------------- +# Tests floating-point instructions +#----------------------------------------------------------------------- + +#define TEST_FP_OP_S_INTERNAL( testnum, result, val1, val2, val3, code... ) \ +test_ ## testnum: \ + li x28, testnum; \ + la a0, test_ ## testnum ## _data ;\ + flw f0, 0(a0); \ + flw f1, 4(a0); \ + flw f2, 8(a0); \ + lw a3, 12(a0); \ + code; \ + bne a0, a3, fail; \ + b 1f; \ + .align 2; \ + test_ ## testnum ## _data: \ + .float val1; \ + .float val2; \ + .float val3; \ + .result; \ +1: + +#define TEST_FP_OP_D_INTERNAL( testnum, result, val1, val2, val3, code... ) \ +test_ ## testnum: \ + li x28, testnum; \ + la a0, test_ ## testnum ## _data ;\ + fld f0, 0(a0); \ + fld f1, 8(a0); \ + fld f2, 16(a0); \ + ld a3, 24(a0); \ + code; \ + bne a0, a3, fail; \ + b 1f; \ + .align 3; \ + test_ ## testnum ## _data: \ + .double val1; \ + .double val2; \ + .double val3; \ + .result; \ +1: + +#define TEST_FCVT_S_D( testnum, result, val1 ) \ + TEST_FP_OP_D_INTERNAL( testnum, double result, val1, 0.0, 0.0, \ + fcvt.s.d f3, f0; fcvt.d.s f3, f3; mftx.d a0, f3) + +#define TEST_FCVT_D_S( testnum, result, val1 ) \ + TEST_FP_OP_S_INTERNAL( testnum, float result, val1, 0.0, 0.0, \ + fcvt.d.s f3, f0; fcvt.s.d f3, f3; mftx.s a0, f3) + +#define TEST_FP_OP1_S( testnum, inst, result, val1 ) \ + TEST_FP_OP_S_INTERNAL( testnum, float result, val1, 0.0, 0.0, \ + inst f3, f0; mftx.s a0, f3) + +#define TEST_FP_OP1_D( testnum, inst, result, val1 ) \ + TEST_FP_OP_D_INTERNAL( testnum, double result, val1, 0.0, 0.0, \ + inst f3, f0; mftx.d a0, f3) + +#define TEST_FP_OP2_S( testnum, inst, result, val1, val2 ) \ + TEST_FP_OP_S_INTERNAL( testnum, float result, val1, val2, 0.0, \ + inst f3, f0, f1; mftx.s a0, f3) + +#define TEST_FP_OP2_D( testnum, inst, result, val1, val2 ) \ + TEST_FP_OP_D_INTERNAL( testnum, double result, val1, val2, 0.0, \ + inst f3, f0, f1; mftx.d a0, f3) + +#define TEST_FP_OP3_S( testnum, inst, result, val1, val2, val3 ) \ + TEST_FP_OP_S_INTERNAL( testnum, float result, val1, val2, val3, \ + inst f3, f0, f1, f2; mftx.s a0, f3) + +#define TEST_FP_OP3_D( testnum, inst, result, val1, val2, val3 ) \ + TEST_FP_OP_D_INTERNAL( testnum, double result, val1, val2, val3, \ + inst f3, f0, f1, f2; mftx.d a0, f3) + +#define TEST_FP_INT_OP_S( testnum, inst, result, val1, rm ) \ + TEST_FP_OP_S_INTERNAL( testnum, word result, val1, 0.0, 0.0, \ + inst a0, f0, rm) + +#define TEST_FP_INT_OP_D( testnum, inst, result, val1, rm ) \ + TEST_FP_OP_D_INTERNAL( testnum, dword result, val1, 0.0, 0.0, \ + inst a0, f0, rm) + +#define TEST_FP_CMP_OP_S( testnum, inst, result, val1, val2 ) \ + TEST_FP_OP_S_INTERNAL( testnum, word result, val1, val2, 0.0, \ + inst a0, f0, f1) + +#define TEST_FP_CMP_OP_D( testnum, inst, result, val1, val2 ) \ + TEST_FP_OP_D_INTERNAL( testnum, dword result, val1, val2, 0.0, \ + inst a0, f0, f1) + +#define TEST_INT_FP_OP_S( testnum, inst, result, val1 ) \ +test_ ## testnum: \ + li x28, testnum; \ + la a0, test_ ## testnum ## _data ;\ + lw a3, 0(a0); \ + li a0, val1; \ + inst f0, a0; \ + mftx.s a0, f0; \ + bne a0, a3, fail; \ + b 1f; \ + .align 2; \ + test_ ## testnum ## _data: \ + .float result; \ +1: + +#define TEST_INT_FP_OP_D( testnum, inst, result, val1 ) \ +test_ ## testnum: \ + li x28, testnum; \ + la a0, test_ ## testnum ## _data ;\ + ld a3, 0(a0); \ + li a0, val1; \ + inst f0, a0; \ + mftx.d a0, f0; \ + bne a0, a3, fail; \ + b 1f; \ + .align 3; \ + test_ ## testnum ## _data: \ + .double result; \ +1: + +#define TEST_ILLEGAL_VT_REGID( testnum, nxreg, nfreg, inst, reg1, reg2, reg3) \ + mfpcr a0,cr0; \ + li a1,1; \ + slli a3,a1,8; \ + or a0,a0,a1; \ + mtpcr a0,cr0; \ + la a0, handler ## testnum; \ + mtpcr a0, cr3; \ + li a0, 4; \ + vvcfgivl a0, a0, nxreg, nfreg; \ + la a0, src1; \ + la a1, src2; \ + vld vx2, a0; \ + vld vx3, a1; \ + lui a0,%hi(vtcode1 ## testnum); \ + vf %lo(vtcode1 ## testnum)(a0); \ + la a3, dest; \ + vsd vx2, a3; \ + fence.v.l; \ +vtcode1 ## testnum: \ + add x2, x2, x3; \ +illegal ## testnum: \ + inst reg1, reg2, reg3; \ + stop; \ +vtcode2 ## testnum: \ + add x2, x2, x3; \ + stop; \ +handler ## testnum: \ + vxcptkill; \ + li x28,2; \ + mfpcr a0,cr6; \ + li a1,26; \ + bne a0,a1,fail; \ + mfpcr a0,cr2; \ + la a1,illegal ## testnum; \ + bne a0,a1,fail; \ + li a0,4; \ + vvcfgivl a0,a0,32,0; \ + la a0,src1; \ + la a1,src2; \ + vld vx2,a0; \ + vld vx3,a1; \ + lui a0,%hi(vtcode2 ## testnum); \ + vf %lo(vtcode2 ## testnum)(a0); \ + la a3,dest; \ + vsd vx2,a3; \ + fence.v.l; \ + ld a1,0(a3); \ + li a2,5; \ + li x28,2; \ + bne a1,a2,fail; \ + ld a1,8(a3); \ + li x28,3; \ + bne a1,a2,fail; \ + ld a1,16(a3); \ + li x28,4; \ + bne a1,a2,fail; \ + ld a1,24(a3); \ + li x28,5; \ + bne a1,a2,fail; \ + +#define TEST_ILLEGAL_TVEC_REGID( testnum, nxreg, nfreg, inst, reg1, reg2, aux) \ + mfpcr a0,cr0; \ + li a1,1; \ + slli a2,a1,8; \ + or a0,a0,a1; \ + mtpcr a0,cr0; \ + la a0, handler ## testnum; \ + mtpcr a0, cr3; \ + li a0, 4; \ + vvcfgivl a0, a0, nxreg, nfreg; \ + la a0, src1; \ + la a1, src2; \ + vld vx2, a0; \ + vld vx3, a1; \ + lui a0,%hi(vtcode1 ## testnum); \ + vf %lo(vtcode1 ## testnum)(a0); \ + la reg2, dest; \ +illegal ## testnum: \ + inst reg1, reg2; \ + la a3, dest; \ + vsd vx2, a3; \ + fence.v.l; \ +vtcode1 ## testnum: \ + add x2, x2, x3; \ + stop; \ +vtcode2 ## testnum: \ + add x2, x2, x3; \ + stop; \ +handler ## testnum: \ + vxcptkill; \ + li x28,2; \ + mfpcr a0,cr6; \ + li a1,27; \ + bne a0,a1,fail; \ + mfpcr a0, cr2; \ + li a1, aux; \ + bne a0, a1, fail; \ + li a0,4; \ + vvcfgivl a0,a0,32,0; \ + la a0,src1; \ + la a1,src2; \ + vld vx2,a0; \ + vld vx3,a1; \ + lui a0,%hi(vtcode2 ## testnum); \ + vf %lo(vtcode2 ## testnum)(a0); \ + la a3,dest; \ + vsd vx2,a3; \ + fence.v.l; \ + ld a1,0(a3); \ + li a2,5; \ + li x28,2; \ + bne a1,a2,fail; \ + ld a1,8(a3); \ + li x28,3; \ + bne a1,a2,fail; \ + ld a1,16(a3); \ + li x28,4; \ + bne a1,a2,fail; \ + ld a1,24(a3); \ + li x28,5; \ + bne a1,a2,fail; \ + +#----------------------------------------------------------------------- +# Pass and fail code (assumes test num is in x28) +#----------------------------------------------------------------------- + + +#define TEST_PASSFAIL \ + bne x0, x28, pass; \ +fail: \ + RVTEST_FAIL \ +pass: \ + RVTEST_PASS \ + +#endif diff --git a/isa/macros/vector/test_macros.h b/isa/macros/vector/test_macros.h new file mode 100644 index 0000000..a367291 --- /dev/null +++ b/isa/macros/vector/test_macros.h @@ -0,0 +1,584 @@ +#ifndef __TEST_MACROS_VECTOR_H +#define __TEST_MACROS_VECTOR_H + +#define TEST_DATA \ + .data; \ + .align 3; \ +dst: \ + .skip 16384; \ + +#----------------------------------------------------------------------- +# Helper macros +#----------------------------------------------------------------------- + +#define TEST_CASE( testnum, testreg, correctval, code... ) \ + TEST_CASE_NREG( testnum, 32, 32, testreg, correctval, code ) + +# We use j fail, because for some cases branches are not enough to jump to fail + +#define TEST_CASE_NREG( testnum, nxreg, nfreg, testreg, correctval, code... ) \ +test_ ## testnum: \ + li a3,2048; \ + vvcfgivl a3,a3,nxreg,nfreg; \ + lui a0,%hi(vtcode ## testnum ); \ + vf %lo(vtcode ## testnum )(a0); \ + la a4,dst; \ + vsd v ## testreg, a4; \ + fence.v.l; \ + li a1,correctval; \ + li a2,0; \ + li x28, testnum; \ +test_loop ## testnum: \ + ld a0,0(a4); \ + beq a0,a1,skip ## testnum; \ + j fail; \ +skip ## testnum : \ + addi a4,a4,8; \ + addi a2,a2,1; \ + bne a2,a3,test_loop ## testnum; \ + j next ## testnum; \ +vtcode ## testnum : \ + code; \ + stop; \ +next ## testnum : + +# We use a macro hack to simpify code generation for various numbers +# of bubble cycles. + +#define TEST_INSERT_NOPS_0 +#define TEST_INSERT_NOPS_1 nop; TEST_INSERT_NOPS_0 +#define TEST_INSERT_NOPS_2 nop; TEST_INSERT_NOPS_1 +#define TEST_INSERT_NOPS_3 nop; TEST_INSERT_NOPS_2 +#define TEST_INSERT_NOPS_4 nop; TEST_INSERT_NOPS_3 +#define TEST_INSERT_NOPS_5 nop; TEST_INSERT_NOPS_4 +#define TEST_INSERT_NOPS_6 nop; TEST_INSERT_NOPS_5 +#define TEST_INSERT_NOPS_7 nop; TEST_INSERT_NOPS_6 +#define TEST_INSERT_NOPS_8 nop; TEST_INSERT_NOPS_7 +#define TEST_INSERT_NOPS_9 nop; TEST_INSERT_NOPS_8 +#define TEST_INSERT_NOPS_10 nop; TEST_INSERT_NOPS_9 + +#----------------------------------------------------------------------- +# Tests for instructions with immediate operand +#----------------------------------------------------------------------- + +#define TEST_IMM_OP( testnum, inst, result, val1, imm ) \ + TEST_CASE_NREG( testnum, 4, 0, x3, result, \ + li x1, val1; \ + inst x3, x1, imm; \ + ) + +#define TEST_IMM_SRC1_EQ_DEST( testnum, inst, result, val1, imm ) \ + TEST_CASE_NREG( testnum, 2, 0, x1, result, \ + li x1, val1; \ + inst x1, x1, imm; \ + ) + +#define TEST_IMM_DEST_BYPASS( testnum, nop_cycles, inst, result, val1, imm ) \ + TEST_CASE_NREG( testnum, 5, 0, x4, result, \ + li x1, val1; \ + inst x3, x1, imm; \ + TEST_INSERT_NOPS_ ## nop_cycles \ + addi x4, x3, 0; \ + ) + +#define TEST_IMM_SRC1_BYPASS( testnum, nop_cycles, inst, result, val1, imm ) \ + TEST_CASE_NREG( testnum, 4, 0, x3, result, \ + li x1, val1; \ + TEST_INSERT_NOPS_ ## nop_cycles \ + inst x3, x1, imm; \ + ) + +#define TEST_IMM_ZEROSRC1( testnum, inst, result, imm ) \ + TEST_CASE_NREG( testnum, 2, 0, x1, result, \ + inst x1, x0, imm; \ + ) + +#define TEST_IMM_ZERODEST( testnum, inst, val1, imm ) \ + TEST_CASE_NREG( testnum, 2, 0, x0, 0, \ + li x1, val1; \ + inst x0, x1, imm; \ + ) + +#----------------------------------------------------------------------- +# Tests for an instruction with register operands +#----------------------------------------------------------------------- + +#define TEST_R_OP( testnum, inst, result, val1 ) \ + TEST_CASE_NREG( testnum, 4, 0, x3, result, \ + li x1, val1; \ + inst x3, x1; \ + ) + +#define TEST_R_SRC1_EQ_DEST( testnum, inst, result, val1 ) \ + TEST_CASE_NREG( testnum, 2, 0, x1, result, \ + li x1, val1; \ + inst x1, x1; \ + ) + +#define TEST_R_DEST_BYPASS( testnum, nop_cycles, inst, result, val1 ) \ + TEST_CASE_NREG( testnum, 5, 0, x4, result, \ + li x1, val1; \ + inst x3, x1; \ + TEST_INSERT_NOPS_ ## nop_cycles \ + addi x4, x3, 0; \ + ) + +#----------------------------------------------------------------------- +# Tests for an instruction with register-register operands +#----------------------------------------------------------------------- + +#define TEST_RR_OP( testnum, inst, result, val1, val2 ) \ + TEST_CASE_NREG( testnum, 4, 0, x3, result, \ + li x1, val1; \ + li x2, val2; \ + inst x3, x1, x2; \ + ) + +#define TEST_RR_SRC1_EQ_DEST( testnum, inst, result, val1, val2 ) \ + TEST_CASE_NREG( testnum, 3, 0, x1, result, \ + li x1, val1; \ + li x2, val2; \ + inst x1, x1, x2; \ + ) + +#define TEST_RR_SRC2_EQ_DEST( testnum, inst, result, val1, val2 ) \ + TEST_CASE_NREG( testnum, 3, 0, x2, result, \ + li x1, val1; \ + li x2, val2; \ + inst x2, x1, x2; \ + ) + +#define TEST_RR_SRC12_EQ_DEST( testnum, inst, result, val1 ) \ + TEST_CASE_NREG( testnum, 2, 0, x1, result, \ + li x1, val1; \ + inst x1, x1, x1; \ + ) + +#define TEST_RR_DEST_BYPASS( testnum, nop_cycles, inst, result, val1, val2 ) \ + TEST_CASE_NREG( testnum, 5, 0, x4, result, \ + li x1, val1; \ + li x2, val2; \ + inst x3, x1, x2; \ + TEST_INSERT_NOPS_ ## nop_cycles \ + addi x4, x3, 0; \ + ) + +#define TEST_RR_SRC12_BYPASS( testnum, src1_nops, src2_nops, inst, result, val1, val2 ) \ + TEST_CASE_NREG( testnum, 4, 0, x3, result, \ + li x1, val1; \ + TEST_INSERT_NOPS_ ## src1_nops \ + li x2, val2; \ + TEST_INSERT_NOPS_ ## src2_nops \ + inst x3, x1, x2; \ + ) + +#define TEST_RR_SRC21_BYPASS( testnum, src1_nops, src2_nops, inst, result, val1, val2 ) \ + TEST_CASE_NREG( testnum, 4, 0, x3, result, \ + li x2, val2; \ + TEST_INSERT_NOPS_ ## src1_nops \ + li x1, val1; \ + TEST_INSERT_NOPS_ ## src2_nops \ + inst x3, x1, x2; \ + ) + +#define TEST_RR_ZEROSRC1( testnum, inst, result, val ) \ + TEST_CASE_NREG( testnum, 3, 0, x2, result, \ + li x1, val; \ + inst x2, x0, x1; \ + ) + +#define TEST_RR_ZEROSRC2( testnum, inst, result, val ) \ + TEST_CASE_NREG( testnum, 3, 0, x2, result, \ + li x1, val; \ + inst x2, x1, x0; \ + ) + +#define TEST_RR_ZEROSRC12( testnum, inst, result ) \ + TEST_CASE_NREG( testnum, 2, 0, x1, result, \ + inst x1, x0, x0; \ + ) + +#define TEST_RR_ZERODEST( testnum, inst, val1, val2 ) \ + TEST_CASE_NREG( testnum, 3, 0, x0, 0, \ + li x1, val1; \ + li x2, val2; \ + inst x0, x1, x2; \ + ) + +#----------------------------------------------------------------------- +# Test branch instructions +#----------------------------------------------------------------------- + +#define TEST_BR2_OP_TAKEN( testnum, inst, val1, val2) \ + TEST_CASE_NREG( testnum, 4, 0, x3, 0, \ + li x1, val1; \ + li x2, val2; \ + add x3, x0, x0; \ + inst x1, x2, 2f; \ + addi x3, x3, 1; \ +1: j 3f; \ + addi x3, x3, 4; \ +2: inst x1, x2, 1b; \ + addi x3, x3, 2; \ +3: \ + ) + +#define TEST_BR2_OP_NOTTAKEN( testnum, inst, val1, val2 ) \ + TEST_CASE_NREG( testnum, 4, 0, x3, 0, \ + li x1, val1; \ + li x2, val2; \ + add x3, x0, x0; \ + inst x1, x2, 1f; \ + j 2f; \ +1: addi x3, x3, 1; \ + j 3f; \ +2: inst x1, x2, 1b; \ +3: \ + ) + +#define TEST_BR2_SRC12_BYPASS( testnum, src1_nops, src2_nops, inst, val1, val2 ) \ + TEST_CASE_NREG( testnum, 6, 0, x3, 0, \ + add x3, x0, x0; \ + li x4, 0; \ +1: li x1, val1; \ + TEST_INSERT_NOPS_ ## src1_nops \ + li x2, val2; \ + TEST_INSERT_NOPS_ ## src2_nops \ + inst x1, x2, 2f; \ + addi x4, x4, 1; \ + li x5, 2; \ + bne x4, x5, 1b; \ + j 3f; \ +2: add x3, x3, 1; \ +3: \ + ) + +#define TEST_BR2_SRC21_BYPASS( testnum, src1_nops, src2_nops, inst, val1, val2 ) \ + TEST_CASE_NREG( testnum, 6, 0, x3, 0, \ + add x3, x0, x0; \ + li x4, 0; \ +1: li x2, val2; \ + TEST_INSERT_NOPS_ ## src1_nops \ + li x1, val1; \ + TEST_INSERT_NOPS_ ## src2_nops \ + inst x1, x2, 2f; \ + addi x4, x4, 1; \ + li x5, 2; \ + bne x4, x4, 1b; \ + j 3f; \ +2: add x3, x3, 1; \ +3: \ + ) + +#define TEST_BR2_DIVERGED_ODD_EVEN( testnum, inst, n, result, code...) \ + TEST_CASE_NREG( testnum, 5, 0, x3, result, \ + utidx x1; \ + andi x2, x1, 1;\ + add x3, x0, x0; \ + li x4, n; \ +1: \ + beq x0, x2, 2f; \ + code; \ + j 3f; \ +2: \ + code; \ +3: \ + addi x4, x4, -1; \ + bne x4, x0, 1b; \ + ) + +#define TEST_BR2_DIVERGED_FULL12( testnum, inst, n, result, code... ) \ + TEST_CASE_NREG( testnum, 5, 0, x3, result, \ + utidx x1; \ + sltiu x2, x1, 1; \ + add x3, x0, x0; \ + li x4, n; \ +1: \ + inst x2, x4, 2f; \ + addi x1, x1, -1; \ + sltiu x2, x1, 1; \ + j 1b; \ +2: \ + code; \ + ) + +#define TEST_BR2_DIVERGED_FULL21( testnum, inst, n, result, code... ) \ + TEST_CASE_NREG( testnum, 5, 0, x3, result, \ + utidx x1; \ + sltiu x2, x1, 1; \ + add x3, x0, x0; \ + li x4, n; \ +1: \ + inst x4, x2, 2f; \ + addi x1, x1, -1; \ + sltiu x2, x1, 1; \ + j 1b; \ +2: \ + code; \ + ) + +#define TEST_CASE_NREG_MEM( testnum, nxreg, nfreg, correctval, code... ) \ +test_ ## testnum: \ + li a3,2048; \ + vvcfgivl a3,a3,nxreg,nfreg; \ + lui a0,%hi(vtcode ## testnum ); \ + vf %lo(vtcode ## testnum )(a0); \ + la a4,dst; \ + fence.v.l; \ + li a1,correctval; \ + li a2,0; \ + li x28, testnum; \ +test_loop ## testnum: \ + ld a0,0(a4); \ + beq a0,a1,skip ## testnum; \ + j fail; \ +skip ## testnum : \ + addi a4,a4,8; \ + addi a2,a2,1; \ + bne a2,a3,test_loop ## testnum; \ + j next ## testnum; \ +vtcode ## testnum : \ + code; \ + stop; \ +next ## testnum : + +#define TEST_BR2_DIVERGED_MEM_FULL12( testnum, inst, n) \ + TEST_CASE_NREG_MEM( testnum, 7, 0, 1, \ + utidx x5; \ + slli x5, x5, 3; \ + la x6, dst; \ + add x5, x5, x6; \ + sd x0, 0(x5); \ + utidx x1; \ + sltiu x2, x1, 1; \ + li x4, n; \ +1: \ + inst x2, x4, 2f; \ + addi x1, x1, -1; \ + sltiu x2, x1, 1; \ + j 1b; \ +2: \ + ld x3, 0(x5); \ + addi x3, x3, 1; \ + sd x3, 0(x5); \ + ) + +#define TEST_BR2_DIVERGED_MEM_FULL21( testnum, inst, n) \ + TEST_CASE_NREG_MEM( testnum, 7, 0, 1, \ + utidx x5; \ + slli x5, x5, 3; \ + la x6, dst; \ + add x5, x5, x6; \ + sd x0, 0(x5); \ + utidx x1; \ + sltiu x2, x1, 1; \ + li x4, n; \ +1: \ + inst x4, x2, 2f; \ + addi x1, x1, -1; \ + sltiu x2, x1, 1; \ + j 1b; \ +2: \ + ld x3, 0(x5); \ + addi x3, x3, 1; \ + sd x3, 0(x5); \ + ) + +#----------------------------------------------------------------------- +# Tests floating-point instructions +#----------------------------------------------------------------------- + +#define TEST_FP_OP_S_INTERNAL_NREG( testnum, nxreg, nfreg, result, val1, val2, val3, code... ) \ +test_ ## testnum: \ + li a3,2048; \ + vvcfgivl a3,a3,nxreg,nfreg; \ + la a5, test_ ## testnum ## _data ;\ + vflstw vf0, a5, x0; \ + addi a5,a5,4; \ + vflstw vf1, a5, x0; \ + addi a5,a5,4; \ + vflstw vf2, a5, x0; \ + addi a5,a5,4; \ + lui a0,%hi(vtcode ## testnum ); \ + vf %lo(vtcode ## testnum )(a0); \ + la a4,dst; \ + vsw vx1, a4; \ + fence.v.l; \ + lw a1, 0(a5); \ + li a2, 0; \ + li x28, testnum; \ +test_loop ## testnum: \ + lw a0,0(a4); \ + beq a0,a1,skip ## testnum; \ + j fail; \ +skip ## testnum : \ + addi a4,a4,4; \ + addi a2,a2,1; \ + bne a2,a3,test_loop ## testnum; \ + b 1f; \ +vtcode ## testnum : \ + code; \ + stop; \ + .align 2; \ + test_ ## testnum ## _data: \ + .float val1; \ + .float val2; \ + .float val3; \ + .result; \ +1: + +#define TEST_FP_OP_D_INTERNAL_NREG( testnum, nxreg, nfreg, result, val1, val2, val3, code... ) \ +test_ ## testnum: \ + li a3,2048; \ + vvcfgivl a3,a3,nxreg,nfreg; \ + la a5, test_ ## testnum ## _data ;\ + vflstd vf0, a5, x0; \ + addi a5,a5,8; \ + vflstd vf1, a5, x0; \ + addi a5,a5,8; \ + vflstd vf2, a5, x0; \ + addi a5,a5,8; \ + lui a0,%hi(vtcode ## testnum ); \ + vf %lo(vtcode ## testnum )(a0); \ + la a4,dst; \ + vsd vx1, a4; \ + fence.v.l; \ + ld a1, 0(a5); \ + li a2, 0; \ + li x28, testnum; \ +test_loop ## testnum: \ + ld a0,0(a4); \ + beq a0,a1,skip ## testnum; \ + j fail; \ +skip ## testnum : \ + addi a4,a4,8; \ + addi a2,a2,1; \ + bne a2,a3,test_loop ## testnum; \ + b 1f; \ +vtcode ## testnum : \ + code; \ + stop; \ + .align 3; \ + test_ ## testnum ## _data: \ + .double val1; \ + .double val2; \ + .double val3; \ + .result; \ +1: + +#define TEST_FCVT_S_D( testnum, result, val1 ) \ + TEST_FP_OP_D_INTERNAL_NREG( testnum, 2, 4, double result, val1, 0.0, 0.0, \ + fcvt.s.d f3, f0; fcvt.d.s f3, f3; mftx.d x1, f3) + +#define TEST_FCVT_D_S( testnum, result, val1 ) \ + TEST_FP_OP_S_INTERNAL_NREG( testnum, 2, 4, float result, val1, 0.0, 0.0, \ + fcvt.d.s f3, f0; fcvt.s.d f3, f3; mftx.s x1, f3) + +#define TEST_FP_OP2_S( testnum, inst, result, val1, val2 ) \ + TEST_FP_OP_S_INTERNAL_NREG( testnum, 2, 4, float result, val1, val2, 0.0, \ + inst f3, f0, f1; mftx.s x1, f3) + +#define TEST_FP_OP2_D( testnum, inst, result, val1, val2 ) \ + TEST_FP_OP_D_INTERNAL_NREG( testnum, 2, 4, double result, val1, val2, 0.0, \ + inst f3, f0, f1; mftx.d x1, f3) + +#define TEST_FP_OP3_S( testnum, inst, result, val1, val2, val3 ) \ + TEST_FP_OP_S_INTERNAL_NREG( testnum, 2, 4, float result, val1, val2, val3, \ + inst f3, f0, f1, f2; mftx.s x1, f3) + +#define TEST_FP_OP3_D( testnum, inst, result, val1, val2, val3 ) \ + TEST_FP_OP_D_INTERNAL_NREG( testnum, 2, 4, double result, val1, val2, val3, \ + inst f3, f0, f1, f2; mftx.d x1, f3) + +#define TEST_FP_INT_OP_S( testnum, inst, result, val1, rm ) \ + TEST_FP_OP_S_INTERNAL_NREG( testnum, 2, 4, word result, val1, 0.0, 0.0, \ + inst x1, f0, rm) + +#define TEST_FP_INT_OP_D( testnum, inst, result, val1, rm ) \ + TEST_FP_OP_D_INTERNAL_NREG( testnum, 2, 4, dword result, val1, 0.0, 0.0, \ + inst x1, f0, rm) + +#define TEST_FP_CMP_OP_S( testnum, inst, result, val1, val2 ) \ + TEST_FP_OP_S_INTERNAL_NREG( testnum, 2, 4, word result, val1, val2, 0.0, \ + inst x1, f0, f1) + +#define TEST_FP_CMP_OP_D( testnum, inst, result, val1, val2 ) \ + TEST_FP_OP_D_INTERNAL_NREG( testnum, 2, 4, dword result, val1, val2, 0.0, \ + inst x1, f0, f1) + +#define TEST_INT_FP_OP_S( testnum, inst, result, val1 ) \ +test_ ## testnum: \ + li a3,2048; \ + vvcfgivl a3,a3,2,1; \ + lui a0,%hi(vtcode ## testnum ); \ + vf %lo(vtcode ## testnum )(a0); \ + la a4,dst; \ + vsw vx1, a4; \ + fence.v.l; \ + la a5, test_ ## testnum ## _data ;\ + lw a1, 0(a5); \ + li a2, 0; \ + li x28, testnum; \ +test_loop ## testnum: \ + lw a0,0(a4); \ + beq a0,a1,skip ## testnum; \ + j fail; \ +skip ## testnum : \ + addi a4,a4,4; \ + addi a2,a2,1; \ + bne a2,a3,test_loop ## testnum; \ + b 1f; \ +vtcode ## testnum : \ + li x1, val1; \ + inst f0, x1; \ + mftx.s x1, f0; \ + stop; \ + .align 2; \ + test_ ## testnum ## _data: \ + .float result; \ +1: + +#define TEST_INT_FP_OP_D( testnum, inst, result, val1 ) \ +test_ ## testnum: \ + li a3,2048; \ + vvcfgivl a3,a3,2,1; \ + lui a0,%hi(vtcode ## testnum ); \ + vf %lo(vtcode ## testnum )(a0); \ + la a4,dst; \ + vsd vx1, a4; \ + fence.v.l; \ + la a5, test_ ## testnum ## _data ;\ + ld a1, 0(a5); \ + li a2, 0; \ + li x28, testnum; \ +test_loop ## testnum: \ + ld a0,0(a4); \ + beq a0,a1,skip ## testnum; \ + j fail; \ +skip ## testnum : \ + addi a4,a4,8; \ + addi a2,a2,1; \ + bne a2,a3,test_loop ## testnum; \ + b 1f; \ +vtcode ## testnum : \ + li x1, val1; \ + inst f0, x1; \ + mftx.d x1, f0; \ + stop; \ + .align 3; \ + test_ ## testnum ## _data: \ + .double result; \ +1: + +#----------------------------------------------------------------------- +# Pass and fail code (assumes test num is in x28) +#----------------------------------------------------------------------- + +#define TEST_PASSFAIL \ + bne x0, x28, pass; \ +fail: \ + RVTEST_FAIL \ +pass: \ + RVTEST_PASS \ + +#endif diff --git a/isa/rv64si/Makefile b/isa/rv64si/Makefile new file mode 100644 index 0000000..c6db077 --- /dev/null +++ b/isa/rv64si/Makefile @@ -0,0 +1,99 @@ +#======================================================================= +# Makefile for riscv-tests +#----------------------------------------------------------------------- + +default: all + +#-------------------------------------------------------------------- +# Sources +#-------------------------------------------------------------------- + +rv64si_sc_tests = \ + coreid \ + +rv64si_mc_tests = \ + ipi \ + +rv64si_sc_vec_tests = \ + +#-------------------------------------------------------------------- +# Build rules +#-------------------------------------------------------------------- + +RISCV_GCC = riscv-gcc +RISCV_GCC_OPTS = -nostdlib -nostartfiles +RISCV_OBJDUMP = riscv-objdump --disassemble-all --disassemble-zeroes --section=.text --section=.data --section=.bss +RISCV_SIM = riscv-isa-run + +#------------------------------------------------------------ +# Build assembly tests + +%.hex: % + elf2hex 16 16384 $< > $@ + +%.dump: % + $(RISCV_OBJDUMP) $< > $@ + +%.out: % + $(RISCV_SIM) $< 2> $@ + +rv64si_p_tests_bin = $(addprefix rv64si-p-, $(rv64si_sc_tests)) +rv64si_p_tests_dump = $(addsuffix .dump, $(rv64si_p_tests_bin)) +rv64si_p_tests_hex = $(addsuffix .hex, $(rv64si_p_tests_bin)) +rv64si_p_tests_out = $(addsuffix .out, $(rv64si_p_tests_bin)) + +$(rv64si_p_tests_bin): rv64si-p-%: %.S + $(RISCV_GCC) $(RISCV_GCC_OPTS) -I../../env/p -I../macros/scalar -T../../env/p/link.ld $< -o $@ + +rv64si_pm_tests_bin = $(addprefix rv64si-pm-, $(rv64si_mc_tests)) +rv64si_pm_tests_dump = $(addsuffix .dump, $(rv64si_pm_tests_bin)) +rv64si_pm_tests_hex = $(addsuffix .hex, $(rv64si_pm_tests_bin)) +rv64si_pm_tests_out = $(addsuffix .out, $(rv64si_pm_tests_bin)) + +$(rv64si_pm_tests_bin): rv64si-pm-%: %.S + $(RISCV_GCC) $(RISCV_GCC_OPTS) -I../../env/pm -I../macros/scalar -T../../env/pm/link.ld $< -o $@ + +rv64si_p_vec_tests_bin = $(addprefix rv64si-p-vec-, $(rv64si_sc_vec_tests)) +rv64si_p_vec_tests_dump = $(addsuffix .dump, $(rv64si_p_vec_tests_bin)) +rv64si_p_vec_tests_hex = $(addsuffix .hex, $(rv64si_p_vec_tests_bin)) +rv64si_p_vec_tests_out = $(addsuffix .out, $(rv64si_p_vec_tests_bin)) + +$(rv64si_p_vec_tests_bin): rv64si-p-vec-%: %.S + $(RISCV_GCC) $(RISCV_GCC_OPTS) -I../../env/p -I../macros/vector -T../../env/p/link.ld $< -o $@ + +rv64si_pt_vec_tests_bin = $(addprefix rv64si-pt-vec-, $(rv64si_sc_vec_tests)) +rv64si_pt_vec_tests_dump = $(addsuffix .dump, $(rv64si_pt_vec_tests_bin)) +rv64si_pt_vec_tests_hex = $(addsuffix .hex, $(rv64si_pt_vec_tests_bin)) +rv64si_pt_vec_tests_out = $(addsuffix .out, $(rv64si_pt_vec_tests_bin)) + +$(rv64si_pt_vec_tests_bin): rv64si-pt-vec-%: %.S + $(RISCV_GCC) $(RISCV_GCC_OPTS) -I../../env/pt -I../macros/vector -T../../env/pt/link.ld $< -o $@ + +riscv-: \ + $(rv64si_p_tests_dump) $(rv64si_p_tests_hex) \ + $(rv64si_pm_tests_dump) $(rv64si_pm_tests_hex) \ + $(rv64si_p_vec_tests_dump) $(rv64si_p_vec_tests_hex) \ + $(rv64si_pt_vec_tests_dump) $(rv64si_pt_vec_tests_hex) \ + +out = $(rv64si_p_tests_out) $(rv64si_pm_tests_out) $(rv64si_p_vec_tests_out) + +run: $(out) + echo; perl -ne 'print " [$$1] $$ARGV \t$$2\n" if /\*{3}(.{8})\*{3}(.*)/' \ + $(out); echo; + +junk += \ + $(rv64si_p_tests_bin) $(rv64si_p_tests_dump) $(rv64si_p_tests_hex) $(rv64si_p_tests_out) \ + $(rv64si_pm_tests_bin) $(rv64si_pm_tests_dump) $(rv64si_pm_tests_hex) $(rv64si_pm_tests_out) \ + $(rv64si_p_vec_tests_bin) $(rv64si_p_vec_tests_dump) $(rv64si_p_vec_tests_hex) $(rv64si_p_vec_tests_out) \ + $(rv64si_pt_vec_tests_bin) $(rv64si_pt_vec_tests_dump) $(rv64si_pt_vec_tests_hex) $(rv64si_pt_vec_tests_out) \ + +#------------------------------------------------------------ +# Default + +all: riscv- + +#------------------------------------------------------------ +# Clean up + +clean: + rm -rf $(junk) diff --git a/isa/rv64si/coreid.S b/isa/rv64si/coreid.S new file mode 100644 index 0000000..2b7ffc3 --- /dev/null +++ b/isa/rv64si/coreid.S @@ -0,0 +1,29 @@ +#***************************************************************************** +# coreid.S +#----------------------------------------------------------------------------- +# +# Test coreid. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64S +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Basic tests + #------------------------------------------------------------- + + TEST_CASE( 2, x1, 0x0, mfpcr x1, cr12 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64si/ipi.S b/isa/rv64si/ipi.S new file mode 100644 index 0000000..92ae149 --- /dev/null +++ b/isa/rv64si/ipi.S @@ -0,0 +1,61 @@ +#***************************************************************************** +# ipi.S +#----------------------------------------------------------------------------- +# +# Test interprocessor interrupts. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64S +RVTEST_CODE_BEGIN + + # clear pending IPIs then enable interrupts + la a0, handler + mtpcr a0, cr3 + mtpcr x0, cr9 + mfpcr a0, cr0 + li a1, 0x00ff0001 + or a0, a0, a1 + mtpcr a0, cr0 + + # wait for all cores to boot + la a0, coreid + li a1, 1 + amoadd.w x0, a1, 0(a0) + lw a3, 4(x0) + 1: lw a1, 0(a0) + blt a1, a3, 1b + + # IPI dominoes + mfpcr a0, cr10 + 1: bnez a0, 1b + add a0, a0, 1 + rem a0, a0, a3 + mtpcr a0, cr8 + 1: b 1b + + handler: + mfpcr a0, cr10 + bnez a0, 2f + RVTEST_PASS + + TEST_PASSFAIL + + 2: add a0, a0, 1 + rem a0, a0, a3 + mtpcr a0, cr8 + 1: b 1b + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +coreid: .word 0 +foo: .word 0 + +RVTEST_DATA_END diff --git a/isa/rv64sv/Makefile b/isa/rv64sv/Makefile new file mode 100644 index 0000000..670f8d9 --- /dev/null +++ b/isa/rv64sv/Makefile @@ -0,0 +1,101 @@ +#======================================================================= +# Makefile for riscv-tests +#----------------------------------------------------------------------- + +default: all + +#-------------------------------------------------------------------- +# Sources +#-------------------------------------------------------------------- + +rv64sv_sc_tests = \ + illegal_tvec_cmd illegal_tvec_regid \ + illegal_vt_inst illegal_vt_regid \ + ma_utld ma_utsd ma_vld ma_vsd \ + ma_vt_inst \ + +rv64sv_mc_tests = \ + +rv64sv_sc_vec_tests = \ + +#-------------------------------------------------------------------- +# Build rules +#-------------------------------------------------------------------- + +RISCV_GCC = riscv-gcc +RISCV_GCC_OPTS = -nostdlib -nostartfiles +RISCV_OBJDUMP = riscv-objdump --disassemble-all --disassemble-zeroes --section=.text --section=.data --section=.bss +RISCV_SIM = riscv-isa-run + +#------------------------------------------------------------ +# Build assembly tests + +%.hex: % + elf2hex 16 16384 $< > $@ + +%.dump: % + $(RISCV_OBJDUMP) $< > $@ + +%.out: % + $(RISCV_SIM) $< 2> $@ + +rv64sv_p_tests_bin = $(addprefix rv64sv-p-, $(rv64sv_sc_tests)) +rv64sv_p_tests_dump = $(addsuffix .dump, $(rv64sv_p_tests_bin)) +rv64sv_p_tests_hex = $(addsuffix .hex, $(rv64sv_p_tests_bin)) +rv64sv_p_tests_out = $(addsuffix .out, $(rv64sv_p_tests_bin)) + +$(rv64sv_p_tests_bin): rv64sv-p-%: %.S + $(RISCV_GCC) $(RISCV_GCC_OPTS) -I../../env/p -I../macros/scalar -T../../env/p/link.ld $< -o $@ + +rv64sv_pm_tests_bin = $(addprefix rv64sv-pm-, $(rv64sv_mc_tests)) +rv64sv_pm_tests_dump = $(addsuffix .dump, $(rv64sv_pm_tests_bin)) +rv64sv_pm_tests_hex = $(addsuffix .hex, $(rv64sv_pm_tests_bin)) +rv64sv_pm_tests_out = $(addsuffix .out, $(rv64sv_pm_tests_bin)) + +$(rv64sv_pm_tests_bin): rv64sv-pm-%: %.S + $(RISCV_GCC) $(RISCV_GCC_OPTS) -I../../env/pm -I../macros/scalar -T../../env/pm/link.ld $< -o $@ + +rv64sv_p_vec_tests_bin = $(addprefix rv64sv-p-vec-, $(rv64sv_sc_vec_tests)) +rv64sv_p_vec_tests_dump = $(addsuffix .dump, $(rv64sv_p_vec_tests_bin)) +rv64sv_p_vec_tests_hex = $(addsuffix .hex, $(rv64sv_p_vec_tests_bin)) +rv64sv_p_vec_tests_out = $(addsuffix .out, $(rv64sv_p_vec_tests_bin)) + +$(rv64sv_p_vec_tests_bin): rv64sv-p-vec-%: %.S + $(RISCV_GCC) $(RISCV_GCC_OPTS) -I../../env/p -I../macros/vector -T../../env/p/link.ld $< -o $@ + +rv64sv_pt_vec_tests_bin = $(addprefix rv64sv-pt-vec-, $(rv64sv_sc_vec_tests)) +rv64sv_pt_vec_tests_dump = $(addsuffix .dump, $(rv64sv_pt_vec_tests_bin)) +rv64sv_pt_vec_tests_hex = $(addsuffix .hex, $(rv64sv_pt_vec_tests_bin)) +rv64sv_pt_vec_tests_out = $(addsuffix .out, $(rv64sv_pt_vec_tests_bin)) + +$(rv64sv_pt_vec_tests_bin): rv64sv-pt-vec-%: %.S + $(RISCV_GCC) $(RISCV_GCC_OPTS) -I../../env/pt -I../macros/vector -T../../env/pt/link.ld $< -o $@ + +riscv-: \ + $(rv64sv_p_tests_dump) $(rv64sv_p_tests_hex) \ + $(rv64sv_pm_tests_dump) $(rv64sv_pm_tests_hex) \ + $(rv64sv_p_vec_tests_dump) $(rv64sv_p_vec_tests_hex) \ + $(rv64sv_pt_vec_tests_dump) $(rv64sv_pt_vec_tests_hex) \ + +out = + +run: $(out) + echo; perl -ne 'print " [$$1] $$ARGV \t$$2\n" if /\*{3}(.{8})\*{3}(.*)/' \ + $(out); echo; + +junk += \ + $(rv64sv_p_tests_bin) $(rv64sv_p_tests_dump) $(rv64sv_p_tests_hex) $(rv64sv_p_tests_out) \ + $(rv64sv_pm_tests_bin) $(rv64sv_pm_tests_dump) $(rv64sv_pm_tests_hex) $(rv64sv_pm_tests_out) \ + $(rv64sv_p_vec_tests_bin) $(rv64sv_p_vec_tests_dump) $(rv64sv_p_vec_tests_hex) $(rv64sv_p_vec_tests_out) \ + $(rv64sv_pt_vec_tests_bin) $(rv64sv_pt_vec_tests_dump) $(rv64sv_pt_vec_tests_hex) $(rv64sv_pt_vec_tests_out) \ + +#------------------------------------------------------------ +# Default + +all: riscv- + +#------------------------------------------------------------ +# Clean up + +clean: + rm -rf $(junk) diff --git a/isa/rv64sv/illegal_tvec_cmd.S b/isa/rv64sv/illegal_tvec_cmd.S new file mode 100644 index 0000000..d6d8d38 --- /dev/null +++ b/isa/rv64sv/illegal_tvec_cmd.S @@ -0,0 +1,112 @@ +#***************************************************************************** +# illegal_tvec_cmd.S +#----------------------------------------------------------------------------- +# +# Test illegal tvec command trap. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64S +RVTEST_CODE_BEGIN + + mfpcr a3,cr0 + li a4,1 + slli a5,a4,8 + or a3,a3,a4 # enable traps + mtpcr a3,cr0 + + la a3,handler + mtpcr a3,cr3 # set exception handler + + li a3,4 + vvcfgivl a3,a3,32,0 + + la a3, dest+1 + vmsv vx1, a3 + addi a3, x0, 0x1 + sll a3, a3, 12 + venqcmd a3, x0 + lui a0,%hi(vtcode1) + vf %lo(vtcode1)(a0) + fence.v.l + +vtcode1: + lw x2, 0(x1) + stop + +vtcode2: + add x2,x2,x3 + stop + +handler: + vxcptkill + + li x28,2 + + # check cause + mfpcr a3,cr6 + li a4,27 + bne a3,a4,fail + + # check vec irq aux + mfpcr a3,cr2 + addi a4, x0, 0x1 + sll a4, a4, 12 + bne a3,a4,fail + + # make sure vector unit has cleared out + li a3,4 + vvcfgivl a3,a3,32,0 + + la a3,src1 + la a4,src2 + vld vx2,a3 + vld vx3,a4 + lui a0,%hi(vtcode2) + vf %lo(vtcode2)(a0) + la a5,dest + vsd vx2,a5 + fence.v.l + + ld a1,0(a5) + li a2,5 + li x28,2 + bne a1,a2,fail + ld a1,8(a5) + li x28,3 + bne a1,a2,fail + ld a1,16(a5) + li x28,4 + bne a1,a2,fail + ld a1,24(a5) + li x28,5 + bne a1,a2,fail + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src1: + .dword 1 + .dword 2 + .dword 3 + .dword 4 +src2: + .dword 4 + .dword 3 + .dword 2 + .dword 1 +dest: + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + +RVTEST_DATA_END diff --git a/isa/rv64sv/illegal_tvec_regid.S b/isa/rv64sv/illegal_tvec_regid.S new file mode 100644 index 0000000..4f48f8f --- /dev/null +++ b/isa/rv64sv/illegal_tvec_regid.S @@ -0,0 +1,51 @@ +#***************************************************************************** +# illegal_tvec_regid.S +#----------------------------------------------------------------------------- +# +# Test illegal tvec regid trap. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64S +RVTEST_CODE_BEGIN + + mfpcr a0,cr0 + li a1,1 + slli a2,a1,8 + or a0,a0,a1 # enable traps + mtpcr a0,cr0 + + TEST_ILLEGAL_TVEC_REGID(2, 5, 5, vsd, vx7, a2, 0x931c7) + TEST_ILLEGAL_TVEC_REGID(3, 5, 5, vld, vx7, a2, 0x831c7) + + TEST_ILLEGAL_TVEC_REGID(4, 5, 5, vfsd, vf7, a2, 0x9b9e7) + TEST_ILLEGAL_TVEC_REGID(5, 5, 5, vfld, vf7, a2, 0x8b9e7) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src1: + .dword 1 + .dword 2 + .dword 3 + .dword 4 +src2: + .dword 4 + .dword 3 + .dword 2 + .dword 1 +dest: + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + +RVTEST_DATA_END diff --git a/isa/rv64sv/illegal_vt_inst.S b/isa/rv64sv/illegal_vt_inst.S new file mode 100644 index 0000000..d749104 --- /dev/null +++ b/isa/rv64sv/illegal_vt_inst.S @@ -0,0 +1,112 @@ +#***************************************************************************** +# illegal_vt_inst.S +#----------------------------------------------------------------------------- +# +# Test illegal vt instruction trap. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64S +RVTEST_CODE_BEGIN + + mfpcr a3,cr0 + li a4,1 + slli a5,a4,8 + or a3,a3,a4 # enable traps + mtpcr a3,cr0 + + la a3,handler + mtpcr a3,cr3 # set exception handler + + li a3,4 + vvcfgivl a3,a3,32,0 + + la a3,src1 + la a4,src2 + vld vx2,a3 + vld vx3,a4 + lui a0,%hi(vtcode1) + vf %lo(vtcode1)(a0) + fence.v.l + +vtcode1: + add x2,x2,x3 +illegal: + .word 0x0 + stop + +vtcode2: + add x2,x2,x3 + stop + +handler: + vxcptkill + + li x28,2 + + # check cause + mfpcr a3,cr6 + li a4,26 + bne a3,a4,fail + + # check badvaddr + mfpcr a3,cr2 + la a4,illegal + bne a3,a4,fail + + # make sure vector unit has cleared out + li a3,4 + vvcfgivl a3,a3,32,0 + + la a3,src1 + la a4,src2 + vld vx2,a3 + vld vx3,a4 + lui a0,%hi(vtcode2) + vf %lo(vtcode2)(a0) + la a5,dest + vsd vx2,a5 + fence.v.l + + ld a1,0(a5) + li a2,5 + li x28,2 + bne a1,a2,fail + ld a1,8(a5) + li x28,3 + bne a1,a2,fail + ld a1,16(a5) + li x28,4 + bne a1,a2,fail + ld a1,24(a5) + li x28,5 + bne a1,a2,fail + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src1: + .dword 1 + .dword 2 + .dword 3 + .dword 4 +src2: + .dword 4 + .dword 3 + .dword 2 + .dword 1 +dest: + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + +RVTEST_DATA_END diff --git a/isa/rv64sv/illegal_vt_regid.S b/isa/rv64sv/illegal_vt_regid.S new file mode 100644 index 0000000..8baa918 --- /dev/null +++ b/isa/rv64sv/illegal_vt_regid.S @@ -0,0 +1,53 @@ +#***************************************************************************** +# xcpt_illegal_vt_regid.S +#----------------------------------------------------------------------------- +# +# Test illegal vt regid trap. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64S +RVTEST_CODE_BEGIN + + mfpcr a0,cr0 + li a1,1 + slli a2,a1,8 + or a0,a0,a1 # enable traps + mtpcr a0,cr0 + + TEST_ILLEGAL_VT_REGID(2, 5, 5, add, x7, x1, x2) + TEST_ILLEGAL_VT_REGID(3, 5, 5, add, x1, x7, x2) + TEST_ILLEGAL_VT_REGID(4, 5, 5, add, x1, x2, x7) + + TEST_ILLEGAL_VT_REGID(5, 5, 5, fadd.d, f7, f1, f2) + TEST_ILLEGAL_VT_REGID(6, 5, 5, fadd.d, f1, f7, f2) + TEST_ILLEGAL_VT_REGID(7, 5, 5, fadd.d, f1, f2, f7) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src1: + .dword 1 + .dword 2 + .dword 3 + .dword 4 +src2: + .dword 4 + .dword 3 + .dword 2 + .dword 1 +dest: + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + +RVTEST_DATA_END diff --git a/isa/rv64sv/ma_utld.S b/isa/rv64sv/ma_utld.S new file mode 100644 index 0000000..a71c4a1 --- /dev/null +++ b/isa/rv64sv/ma_utld.S @@ -0,0 +1,108 @@ +#***************************************************************************** +# ma_utld.S +#----------------------------------------------------------------------------- +# +# Test misaligned ut ld trap. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64S +RVTEST_CODE_BEGIN + + mfpcr a3,cr0 + li a4,1 + slli a5,a4,8 + or a3,a3,a4 # enable traps + mtpcr a3,cr0 + + la a3,handler + mtpcr a3,cr3 # set exception handler + + li a3,4 + vvcfgivl a3,a3,32,0 + + la a3, dest+1 + vmsv vx1, a3 + lui a0,%hi(vtcode1) + vf %lo(vtcode1)(a0) + fence.v.l + +vtcode1: + lw x2, 0(x1) + stop + +vtcode2: + add x2,x2,x3 + stop + +handler: + vxcptkill + + li x28,2 + + # check cause + mfpcr a3,cr6 + li a4,28 + bne a3,a4,fail + + # check vec irq aux + mfpcr a3,cr2 + la a4,dest+1 + bne a3,a4,fail + + # make sure vector unit has cleared out + li a3,4 + vvcfgivl a3,a3,32,0 + + la a3,src1 + la a4,src2 + vld vx2,a3 + vld vx3,a4 + lui a0,%hi(vtcode2) + vf %lo(vtcode2)(a0) + la a5,dest + vsd vx2,a5 + fence.v.l + + ld a1,0(a5) + li a2,5 + li x28,2 + bne a1,a2,fail + ld a1,8(a5) + li x28,3 + bne a1,a2,fail + ld a1,16(a5) + li x28,4 + bne a1,a2,fail + ld a1,24(a5) + li x28,5 + bne a1,a2,fail + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src1: + .dword 1 + .dword 2 + .dword 3 + .dword 4 +src2: + .dword 4 + .dword 3 + .dword 2 + .dword 1 +dest: + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + +RVTEST_DATA_END diff --git a/isa/rv64sv/ma_utsd.S b/isa/rv64sv/ma_utsd.S new file mode 100644 index 0000000..6bdfcd5 --- /dev/null +++ b/isa/rv64sv/ma_utsd.S @@ -0,0 +1,110 @@ +#***************************************************************************** +# ma_utsd.S +#----------------------------------------------------------------------------- +# +# Test misaligned ut sd trap. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64S +RVTEST_CODE_BEGIN + + mfpcr a3,cr0 + li a4,1 + slli a5,a4,8 + or a3,a3,a4 # enable traps + mtpcr a3,cr0 + + la a3,handler + mtpcr a3,cr3 # set exception handler + + li a3,4 + vvcfgivl a3,a3,32,0 + + la a3, dest+1 + vmsv vx1, a3 + lui a0,%hi(vtcode1) + vf %lo(vtcode1)(a0) + la a3, dest+1 + vsd vx1, a3 + fence.v.l + +vtcode1: + sw x2, 0(x1) + stop + +vtcode2: + add x2,x2,x3 + stop + +handler: + vxcptkill + + li x28,2 + + # check cause + mfpcr a3,cr6 + li a4,29 + bne a3,a4,fail + + # check vec irq aux + mfpcr a3,cr2 + la a4, dest+1 + bne a3,a4,fail + + # make sure vector unit has cleared out + li a3,4 + vvcfgivl a3,a3,32,0 + + la a3,src1 + la a4,src2 + vld vx2,a3 + vld vx3,a4 + lui a0,%hi(vtcode2) + vf %lo(vtcode2)(a0) + la a5,dest + vsd vx2,a5 + fence.v.l + + ld a1,0(a5) + li a2,5 + li x28,2 + bne a1,a2,fail + ld a1,8(a5) + li x28,3 + bne a1,a2,fail + ld a1,16(a5) + li x28,4 + bne a1,a2,fail + ld a1,24(a5) + li x28,5 + bne a1,a2,fail + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src1: + .dword 1 + .dword 2 + .dword 3 + .dword 4 +src2: + .dword 4 + .dword 3 + .dword 2 + .dword 1 +dest: + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + +RVTEST_DATA_END diff --git a/isa/rv64sv/ma_vld.S b/isa/rv64sv/ma_vld.S new file mode 100644 index 0000000..ef862c4 --- /dev/null +++ b/isa/rv64sv/ma_vld.S @@ -0,0 +1,109 @@ +#***************************************************************************** +# ma_vld.S +#----------------------------------------------------------------------------- +# +# Test misaligned vector ld trap. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64S +RVTEST_CODE_BEGIN + + mfpcr a3,cr0 + li a4,1 + slli a5,a4,8 + or a3,a3,a4 # enable traps + mtpcr a3,cr0 + + la a3,handler + mtpcr a3,cr3 # set exception handler + + li a3,4 + vvcfgivl a3,a3,32,0 + + la a3, dest+1 + vld vx2,a3 + vld vx3,a4 + lui a0,%hi(vtcode1) + vf %lo(vtcode1)(a0) + fence.v.l + +vtcode1: + add x2,x2,x3 + stop + +vtcode2: + add x2,x2,x3 + stop + +handler: + vxcptkill + + li x28,2 + + # check cause + mfpcr a3,cr6 + li a4,28 + bne a3,a4,fail + + # check vec irq aux + mfpcr a3,cr2 + la a4,dest+1 + bne a3,a4,fail + + # make sure vector unit has cleared out + li a3,4 + vvcfgivl a3,a3,32,0 + + la a3,src1 + la a4,src2 + vld vx2,a3 + vld vx3,a4 + lui a0,%hi(vtcode2) + vf %lo(vtcode2)(a0) + la a5,dest + vsd vx2,a5 + fence.v.l + + ld a1,0(a5) + li a2,5 + li x28,2 + bne a1,a2,fail + ld a1,8(a5) + li x28,3 + bne a1,a2,fail + ld a1,16(a5) + li x28,4 + bne a1,a2,fail + ld a1,24(a5) + li x28,5 + bne a1,a2,fail + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src1: + .dword 1 + .dword 2 + .dword 3 + .dword 4 +src2: + .dword 4 + .dword 3 + .dword 2 + .dword 1 +dest: + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + +RVTEST_DATA_END diff --git a/isa/rv64sv/ma_vsd.S b/isa/rv64sv/ma_vsd.S new file mode 100644 index 0000000..b82eb98 --- /dev/null +++ b/isa/rv64sv/ma_vsd.S @@ -0,0 +1,112 @@ +#***************************************************************************** +# ma_vsd.S +#----------------------------------------------------------------------------- +# +# Test misaligned vector sd trap. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64S +RVTEST_CODE_BEGIN + + mfpcr a3,cr0 + li a4,1 + slli a5,a4,8 + or a3,a3,a4 # enable traps + mtpcr a3,cr0 + + la a3,handler + mtpcr a3,cr3 # set exception handler + + li a3,4 + vvcfgivl a3,a3,32,0 + + la a3, src1 + la a4, src2 + vld vx2,a3 + vld vx3,a4 + lui a0,%hi(vtcode1) + vf %lo(vtcode1)(a0) + la a3, dest+1 + vsd vx1, a3 + fence.v.l + +vtcode1: + add x2,x2,x3 + stop + +vtcode2: + add x2,x2,x3 + stop + +handler: + vxcptkill + + li x28,2 + + # check cause + mfpcr a3,cr6 + li a4,29 + bne a3,a4,fail + + # check vec irq aux + mfpcr a3,cr2 + la a4,dest+1 + bne a3,a4,fail + + # make sure vector unit has cleared out + li a3,4 + vvcfgivl a3,a3,32,0 + + la a3,src1 + la a4,src2 + vld vx2,a3 + vld vx3,a4 + lui a0,%hi(vtcode2) + vf %lo(vtcode2)(a0) + la a5,dest + vsd vx2,a5 + fence.v.l + + ld a1,0(a5) + li a2,5 + li x28,2 + bne a1,a2,fail + ld a1,8(a5) + li x28,3 + bne a1,a2,fail + ld a1,16(a5) + li x28,4 + bne a1,a2,fail + ld a1,24(a5) + li x28,5 + bne a1,a2,fail + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src1: + .dword 1 + .dword 2 + .dword 3 + .dword 4 +src2: + .dword 4 + .dword 3 + .dword 2 + .dword 1 +dest: + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + +RVTEST_DATA_END diff --git a/isa/rv64sv/ma_vt_inst.S b/isa/rv64sv/ma_vt_inst.S new file mode 100644 index 0000000..c8b7acb --- /dev/null +++ b/isa/rv64sv/ma_vt_inst.S @@ -0,0 +1,102 @@ +#***************************************************************************** +# ma_vt_inst.S +#----------------------------------------------------------------------------- +# +# Test misaligned vt instruction trap. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64S +RVTEST_CODE_BEGIN + + mfpcr a3,cr0 + li a4,1 + slli a5,a4,8 + or a3,a3,a4 # enable traps + mtpcr a3,cr0 + + la a3,handler + mtpcr a3,cr3 # set exception handler + + li a3,4 + vvcfgivl a3,a3,32,0 + + lui a0,%hi(vtcode1+2) + vf %lo(vtcode1+2)(a0) +1: j 1b + +vtcode1: + add x2,x2,x3 + stop + +handler: + vxcptkill + + li x28,2 + + # check cause + mfpcr a3,cr6 + li a4,24 + bne a3,a4,fail + + # check badvaddr + mfpcr a3,cr2 + la a4,vtcode1+2 + bne a3,a4,fail + + # make sure vector unit has cleared out + li a3,4 + vvcfgivl a3,a3,32,0 + + la a3,src1 + la a4,src2 + vld vx2,a3 + vld vx3,a4 + lui a0,%hi(vtcode1) + vf %lo(vtcode1)(a0) + la a5,dest + vsd vx2,a5 + fence.v.l + + ld a1,0(a5) + li a2,5 + li x28,2 + bne a1,a2,fail + ld a1,8(a5) + li x28,3 + bne a1,a2,fail + ld a1,16(a5) + li x28,4 + bne a1,a2,fail + ld a1,24(a5) + li x28,5 + bne a1,a2,fail + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src1: + .dword 1 + .dword 2 + .dword 3 + .dword 4 +src2: + .dword 4 + .dword 3 + .dword 2 + .dword 1 +dest: + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + +RVTEST_DATA_END diff --git a/isa/rv64uf/Makefile b/isa/rv64uf/Makefile new file mode 100644 index 0000000..65470ed --- /dev/null +++ b/isa/rv64uf/Makefile @@ -0,0 +1,120 @@ +#======================================================================= +# Makefile for riscv-tests +#----------------------------------------------------------------------- + +default: all + +#-------------------------------------------------------------------- +# Sources +#-------------------------------------------------------------------- + +rv64uf_sc_tests = \ + fadd fcmp fcvt fcvt_w fmadd fmin fsgnj \ + ldst move structural \ + +rv64uf_mc_tests =\ + +rv64uf_sc_vec_tests = \ + fadd fcmp fcvt fcvt_w fmadd fmin fsgnj \ + +#-------------------------------------------------------------------- +# Build rules +#-------------------------------------------------------------------- + +RISCV_GCC = riscv-gcc +RISCV_GCC_OPTS = -nostdlib -nostartfiles +RISCV_OBJDUMP = riscv-objdump --disassemble-all --disassemble-zeroes --section=.text --section=.data --section=.bss +RISCV_SIM = riscv-isa-run + +#------------------------------------------------------------ +# Build assembly tests + +%.hex: % + elf2hex 16 16384 $< > $@ + +%.dump: % + $(RISCV_OBJDUMP) $< > $@ + +%.out: % + $(RISCV_SIM) $< 2> $@ + +rv64uf_p_tests_bin = $(addprefix rv64uf-p-, $(rv64uf_sc_tests)) +rv64uf_p_tests_dump = $(addsuffix .dump, $(rv64uf_p_tests_bin)) +rv64uf_p_tests_hex = $(addsuffix .hex, $(rv64uf_p_tests_bin)) +rv64uf_p_tests_out = $(addsuffix .out, $(rv64uf_p_tests_bin)) + +$(rv64uf_p_tests_bin): rv64uf-p-%: %.S + $(RISCV_GCC) $(RISCV_GCC_OPTS) -I../../env/p -I../macros/scalar -T../../env/p/link.ld $< -o $@ + +rv64uf_pm_tests_bin = $(addprefix rv64uf-pm-, $(rv64uf_mc_tests)) +rv64uf_pm_tests_dump = $(addsuffix .dump, $(rv64uf_pm_tests_bin)) +rv64uf_pm_tests_hex = $(addsuffix .hex, $(rv64uf_pm_tests_bin)) +rv64uf_pm_tests_out = $(addsuffix .out, $(rv64uf_pm_tests_bin)) + +$(rv64uf_pm_tests_bin): rv64uf-pm-%: %.S + $(RISCV_GCC) $(RISCV_GCC_OPTS) -I../../env/pm -I../macros/scalar -T../../env/pm/link.ld $< -o $@ + +rv64uf_v_tests_bin = $(addprefix rv64uf-v-, $(rv64uf_sc_tests)) +rv64uf_v_tests_dump = $(addsuffix .dump, $(rv64uf_v_tests_bin)) +rv64uf_v_tests_hex = $(addsuffix .hex, $(rv64uf_v_tests_bin)) +rv64uf_v_tests_out = $(addsuffix .out, $(rv64uf_v_tests_bin)) + +$(rv64uf_v_tests_bin): rv64uf-v-%: %.S + $(RISCV_GCC) $(RISCV_GCC_OPTS) -std=gnu99 -O2 -I../../env/v -I../macros/scalar -T../../env/v/link.ld ../../env/v/entry.S ../../env/v/vm.c $< -lc -o $@ + +rv64uf_p_vec_tests_bin = $(addprefix rv64uf-p-vec-, $(rv64uf_sc_vec_tests)) +rv64uf_p_vec_tests_dump = $(addsuffix .dump, $(rv64uf_p_vec_tests_bin)) +rv64uf_p_vec_tests_hex = $(addsuffix .hex, $(rv64uf_p_vec_tests_bin)) +rv64uf_p_vec_tests_out = $(addsuffix .out, $(rv64uf_p_vec_tests_bin)) + +$(rv64uf_p_vec_tests_bin): rv64uf-p-vec-%: %.S + $(RISCV_GCC) $(RISCV_GCC_OPTS) -I../../env/p -I../macros/vector -T../../env/p/link.ld $< -o $@ + +rv64uf_pt_vec_tests_bin = $(addprefix rv64uf-pt-vec-, $(rv64uf_sc_vec_tests)) +rv64uf_pt_vec_tests_dump = $(addsuffix .dump, $(rv64uf_pt_vec_tests_bin)) +rv64uf_pt_vec_tests_hex = $(addsuffix .hex, $(rv64uf_pt_vec_tests_bin)) +rv64uf_pt_vec_tests_out = $(addsuffix .out, $(rv64uf_pt_vec_tests_bin)) + +$(rv64uf_pt_vec_tests_bin): rv64uf-pt-vec-%: %.S + $(RISCV_GCC) $(RISCV_GCC_OPTS) -I../../env/pt -I../macros/vector -T../../env/pt/link.ld $< -o $@ + +rv64uf_v_vec_tests_bin = $(addprefix rv64uf-v-vec-, $(rv64uf_sc_vec_tests)) +rv64uf_v_vec_tests_dump = $(addsuffix .dump, $(rv64uf_v_vec_tests_bin)) +rv64uf_v_vec_tests_hex = $(addsuffix .hex, $(rv64uf_v_vec_tests_bin)) +rv64uf_v_vec_tests_out = $(addsuffix .out, $(rv64uf_v_vec_tests_bin)) + +$(rv64uf_v_vec_tests_bin): rv64uf-v-vec-%: %.S + $(RISCV_GCC) $(RISCV_GCC_OPTS) -std=gnu99 -O2 -I../../env/v -I../macros/vector -T../../env/v/link.ld ../../env/v/entry.S ../../env/v/vm.c $< -lc -o $@ + +riscv-: \ + $(rv64uf_p_tests_dump) $(rv64uf_p_tests_hex) \ + $(rv64uf_pm_tests_dump) $(rv64uf_pm_tests_hex) \ + $(rv64uf_v_tests_dump) $(rv64uf_v_tests_hex) \ + $(rv64uf_p_vec_tests_dump) $(rv64uf_p_vec_tests_hex) \ + $(rv64uf_pt_vec_tests_dump) $(rv64uf_pt_vec_tests_hex) \ + $(rv64uf_v_vec_tests_dump) $(rv64uf_v_vec_tests_hex) \ + +out = $(rv64uf_p_tests_out) $(rv64uf_pm_tests_out) $(rv64uf_v_tests_out) $(rv64uf_p_vec_tests_out) $(rv64uf_v_vec_tests_out) + +run: $(out) + echo; perl -ne 'print " [$$1] $$ARGV \t$$2\n" if /\*{3}(.{8})\*{3}(.*)/' \ + $(out); echo; + +junk += \ + $(rv64uf_p_tests_bin) $(rv64uf_p_tests_dump) $(rv64uf_p_tests_hex) $(rv64uf_p_tests_out) \ + $(rv64uf_pm_tests_bin) $(rv64uf_pm_tests_dump) $(rv64uf_pm_tests_hex) $(rv64uf_pm_tests_out) \ + $(rv64uf_v_tests_bin) $(rv64uf_v_tests_dump) $(rv64uf_v_tests_hex) $(rv64uf_v_tests_out) \ + $(rv64uf_p_vec_tests_bin) $(rv64uf_p_vec_tests_dump) $(rv64uf_p_vec_tests_hex) $(rv64uf_p_vec_tests_out) \ + $(rv64uf_pt_vec_tests_bin) $(rv64uf_pt_vec_tests_dump) $(rv64uf_pt_vec_tests_hex) $(rv64uf_pt_vec_tests_out) \ + $(rv64uf_v_vec_tests_bin) $(rv64uf_v_vec_tests_dump) $(rv64uf_v_vec_tests_hex) $(rv64uf_v_vec_tests_out) \ + +#------------------------------------------------------------ +# Default + +all: riscv- + +#------------------------------------------------------------ +# Clean up + +clean: + rm -rf $(junk) diff --git a/isa/rv64uf/fadd.S b/isa/rv64uf/fadd.S new file mode 100644 index 0000000..58f44be --- /dev/null +++ b/isa/rv64uf/fadd.S @@ -0,0 +1,51 @@ +#***************************************************************************** +# fadd.S +#----------------------------------------------------------------------------- +# +# Test f{add|sub|mul}.{s|d} instructions. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_FP_OP2_S( 2, fadd.s, 3.5, 2.5, 1.0 ); + TEST_FP_OP2_S( 3, fadd.s, -1234, -1235.1, 1.1 ); + TEST_FP_OP2_S( 4, fadd.s, 3.14159265, 3.14159265, 0.00000001 ); + + TEST_FP_OP2_D( 5, fadd.d, 3.5, 2.5, 1.0 ); + TEST_FP_OP2_D( 6, fadd.d, -1234, -1235.1, 1.1 ); + TEST_FP_OP2_D( 7, fadd.d, 3.14159266, 3.14159265, 0.00000001 ); + + TEST_FP_OP2_S(12, fsub.s, 1.5, 2.5, 1.0 ); + TEST_FP_OP2_S(13, fsub.s, -1234, -1235.1, -1.1 ); + TEST_FP_OP2_S(14, fsub.s, 3.14159265, 3.14159265, 0.00000001 ); + + TEST_FP_OP2_D(15, fsub.d, 1.5, 2.5, 1.0 ); + TEST_FP_OP2_D(16, fsub.d, -1234, -1235.1, -1.1 ); + TEST_FP_OP2_D(17, fsub.d, 3.1415926400000001, 3.14159265, 0.00000001 ); + + TEST_FP_OP2_S(22, fmul.s, 2.5, 2.5, 1.0 ); + TEST_FP_OP2_S(23, fmul.s, 1358.61, -1235.1, -1.1 ); + TEST_FP_OP2_S(24, fmul.s, 3.14159265e-8, 3.14159265, 0.00000001 ); + + TEST_FP_OP2_D(25, fmul.d, 2.5, 2.5, 1.0 ); + TEST_FP_OP2_D(26, fmul.d, 1358.61, -1235.1, -1.1 ); + TEST_FP_OP2_D(27, fmul.d, 3.14159265e-8, 3.14159265, 0.00000001 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64uf/fcmp.S b/isa/rv64uf/fcmp.S new file mode 100644 index 0000000..845db3c --- /dev/null +++ b/isa/rv64uf/fcmp.S @@ -0,0 +1,35 @@ +#***************************************************************************** +# fcmp.S +#----------------------------------------------------------------------------- +# +# Test f{eq|lt|le}.{s|d} instructions. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_FP_CMP_OP_S( 2, feq.s, 1, -1.36, -1.36) + TEST_FP_CMP_OP_S( 3, fle.s, 1, -1.36, -1.36) + TEST_FP_CMP_OP_S( 4, flt.s, 0, -1.36, -1.36) + + TEST_FP_CMP_OP_S( 5, feq.s, 0, -1.37, -1.36) + TEST_FP_CMP_OP_S( 6, fle.s, 1, -1.37, -1.36) + TEST_FP_CMP_OP_S( 7, flt.s, 1, -1.37, -1.36) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64uf/fcvt.S b/isa/rv64uf/fcvt.S new file mode 100644 index 0000000..bb9a9c4 --- /dev/null +++ b/isa/rv64uf/fcvt.S @@ -0,0 +1,54 @@ +#***************************************************************************** +# fcvt.S +#----------------------------------------------------------------------------- +# +# Test fcvt.{s|d}.{wu|w|lu|l}, fcvt.s.d, and fcvt.d.s instructions. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_INT_FP_OP_S( 2, fcvt.s.w, 2.0, 2); + TEST_INT_FP_OP_S( 3, fcvt.s.w, -2.0, -2); + + TEST_INT_FP_OP_S( 4, fcvt.s.wu, 2.0, 2); + TEST_INT_FP_OP_S( 5, fcvt.s.wu, 4.2949673e9, -2); + + TEST_INT_FP_OP_S( 6, fcvt.s.l, 2.0, 2); + TEST_INT_FP_OP_S( 7, fcvt.s.l, -2.0, -2); + + TEST_INT_FP_OP_S( 8, fcvt.s.lu, 2.0, 2); + TEST_INT_FP_OP_S( 9, fcvt.s.lu, 1.8446744e19, -2); + + TEST_INT_FP_OP_D(12, fcvt.d.w, 2.0, 2); + TEST_INT_FP_OP_D(13, fcvt.d.w, -2.0, -2); + + TEST_INT_FP_OP_D(14, fcvt.d.wu, 2.0, 2); + TEST_INT_FP_OP_D(15, fcvt.d.wu, 4294967294, -2); + + TEST_INT_FP_OP_D(16, fcvt.d.l, 2.0, 2); + TEST_INT_FP_OP_D(17, fcvt.d.l, -2.0, -2); + + TEST_INT_FP_OP_D(18, fcvt.d.lu, 2.0, 2); + TEST_INT_FP_OP_D(19, fcvt.d.lu, 1.8446744073709552e19, -2); + + TEST_FCVT_S_D(20, -1.5, -1.5) + TEST_FCVT_D_S(21, -1.5, -1.5) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64uf/fcvt_w.S b/isa/rv64uf/fcvt_w.S new file mode 100644 index 0000000..e2e1686 --- /dev/null +++ b/isa/rv64uf/fcvt_w.S @@ -0,0 +1,83 @@ +#***************************************************************************** +# fcvt_w.S +#----------------------------------------------------------------------------- +# +# Test fcvt{wu|w|lu|l}.{s|d} instructions. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_FP_INT_OP_S( 2, fcvt.w.s, -1, -1.1, rtz); + TEST_FP_INT_OP_S( 3, fcvt.w.s, -1, -1.0, rtz); + TEST_FP_INT_OP_S( 4, fcvt.w.s, 0, -0.9, rtz); + TEST_FP_INT_OP_S( 5, fcvt.w.s, 0, 0.9, rtz); + TEST_FP_INT_OP_S( 6, fcvt.w.s, 1, 1.0, rtz); + TEST_FP_INT_OP_S( 7, fcvt.w.s, 1, 1.1, rtz); + + TEST_FP_INT_OP_S(12, fcvt.wu.s, -1, -3.0, rtz); # invalid + TEST_FP_INT_OP_S(13, fcvt.wu.s, -1, -1.0, rtz); # invalid + TEST_FP_INT_OP_S(14, fcvt.wu.s, 0, -0.9, rtz); + TEST_FP_INT_OP_S(15, fcvt.wu.s, 0, 0.9, rtz); + TEST_FP_INT_OP_S(16, fcvt.wu.s, 1, 1.0, rtz); + TEST_FP_INT_OP_S(17, fcvt.wu.s, 1, 1.1, rtz); + + TEST_FP_INT_OP_S(22, fcvt.l.s, -1, -1.1, rtz); + TEST_FP_INT_OP_S(23, fcvt.l.s, -1, -1.0, rtz); + TEST_FP_INT_OP_S(24, fcvt.l.s, 0, -0.9, rtz); + TEST_FP_INT_OP_S(25, fcvt.l.s, 0, 0.9, rtz); + TEST_FP_INT_OP_S(26, fcvt.l.s, 1, 1.0, rtz); + TEST_FP_INT_OP_S(27, fcvt.l.s, 1, 1.1, rtz); + + TEST_FP_INT_OP_S(32, fcvt.lu.s, -1, -3.0, rtz); # invalid + TEST_FP_INT_OP_S(33, fcvt.lu.s, -1, -1.0, rtz); # invalid + TEST_FP_INT_OP_S(34, fcvt.lu.s, 0, -0.9, rtz); + TEST_FP_INT_OP_S(35, fcvt.lu.s, 0, 0.9, rtz); + TEST_FP_INT_OP_S(36, fcvt.lu.s, 1, 1.0, rtz); + TEST_FP_INT_OP_S(37, fcvt.lu.s, 1, 1.1, rtz); + + TEST_FP_INT_OP_D(42, fcvt.w.d, -1, -1.1, rtz); + TEST_FP_INT_OP_D(43, fcvt.w.d, -1, -1.0, rtz); + TEST_FP_INT_OP_D(44, fcvt.w.d, 0, -0.9, rtz); + TEST_FP_INT_OP_D(45, fcvt.w.d, 0, 0.9, rtz); + TEST_FP_INT_OP_D(46, fcvt.w.d, 1, 1.0, rtz); + TEST_FP_INT_OP_D(47, fcvt.w.d, 1, 1.1, rtz); + + TEST_FP_INT_OP_D(52, fcvt.wu.d, -1, -3.0, rtz); # invalid + TEST_FP_INT_OP_D(53, fcvt.wu.d, -1, -1.0, rtz); # invalid + TEST_FP_INT_OP_D(54, fcvt.wu.d, 0, -0.9, rtz); + TEST_FP_INT_OP_D(55, fcvt.wu.d, 0, 0.9, rtz); + TEST_FP_INT_OP_D(56, fcvt.wu.d, 1, 1.0, rtz); + TEST_FP_INT_OP_D(57, fcvt.wu.d, 1, 1.1, rtz); + + TEST_FP_INT_OP_D(62, fcvt.l.d, -1, -1.1, rtz); + TEST_FP_INT_OP_D(63, fcvt.l.d, -1, -1.0, rtz); + TEST_FP_INT_OP_D(64, fcvt.l.d, 0, -0.9, rtz); + TEST_FP_INT_OP_D(65, fcvt.l.d, 0, 0.9, rtz); + TEST_FP_INT_OP_D(66, fcvt.l.d, 1, 1.0, rtz); + TEST_FP_INT_OP_D(67, fcvt.l.d, 1, 1.1, rtz); + + TEST_FP_INT_OP_D(72, fcvt.lu.d, -1, -3.0, rtz); # invalid + TEST_FP_INT_OP_D(73, fcvt.lu.d, -1, -1.0, rtz); # invalid + TEST_FP_INT_OP_D(74, fcvt.lu.d, 0, -0.9, rtz); + TEST_FP_INT_OP_D(75, fcvt.lu.d, 0, 0.9, rtz); + TEST_FP_INT_OP_D(76, fcvt.lu.d, 1, 1.0, rtz); + TEST_FP_INT_OP_D(77, fcvt.lu.d, 1, 1.1, rtz); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64uf/fmadd.S b/isa/rv64uf/fmadd.S new file mode 100644 index 0000000..76e5e9f --- /dev/null +++ b/isa/rv64uf/fmadd.S @@ -0,0 +1,59 @@ +#***************************************************************************** +# fmadd.S +#----------------------------------------------------------------------------- +# +# Test f[n]m{add|sub}.s and f[n]m{add|sub}.d instructions. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_FP_OP3_S( 2, fmadd.s, 3.5, 1.0, 2.5, 1.0 ); + TEST_FP_OP3_S( 3, fmadd.s, 1236.2, -1.0, -1235.1, 1.1 ); + TEST_FP_OP3_S( 4, fmadd.s, -12.0, 2.0, -5.0, -2.0 ); + + TEST_FP_OP3_D( 5, fmadd.d, 3.5, 1.0, 2.5, 1.0 ); + TEST_FP_OP3_D( 6, fmadd.d, 1236.1999999999999, -1.0, -1235.1, 1.1 ); + TEST_FP_OP3_D( 7, fmadd.d, -12.0, 2.0, -5.0, -2.0 ); + + TEST_FP_OP3_S( 8, fnmadd.s, -3.5, 1.0, 2.5, 1.0 ); + TEST_FP_OP3_S( 9, fnmadd.s, -1236.2, -1.0, -1235.1, 1.1 ); + TEST_FP_OP3_S(10, fnmadd.s, 12.0, 2.0, -5.0, -2.0 ); + + TEST_FP_OP3_D(11, fnmadd.d, -3.5, 1.0, 2.5, 1.0 ); + TEST_FP_OP3_D(12, fnmadd.d, -1236.1999999999999, -1.0, -1235.1, 1.1 ); + TEST_FP_OP3_D(13, fnmadd.d, 12.0, 2.0, -5.0, -2.0 ); + + TEST_FP_OP3_S(14, fmsub.s, 1.5, 1.0, 2.5, 1.0 ); + TEST_FP_OP3_S(15, fmsub.s, 1234, -1.0, -1235.1, 1.1 ); + TEST_FP_OP3_S(16, fmsub.s, -8.0, 2.0, -5.0, -2.0 ); + + TEST_FP_OP3_D(17, fmsub.d, 1.5, 1.0, 2.5, 1.0 ); + TEST_FP_OP3_D(18, fmsub.d, 1234, -1.0, -1235.1, 1.1 ); + TEST_FP_OP3_D(19, fmsub.d, -8.0, 2.0, -5.0, -2.0 ); + + TEST_FP_OP3_S(20, fnmsub.s, -1.5, 1.0, 2.5, 1.0 ); + TEST_FP_OP3_S(21, fnmsub.s, -1234, -1.0, -1235.1, 1.1 ); + TEST_FP_OP3_S(22, fnmsub.s, 8.0, 2.0, -5.0, -2.0 ); + + TEST_FP_OP3_D(23, fnmsub.d, -1.5, 1.0, 2.5, 1.0 ); + TEST_FP_OP3_D(24, fnmsub.d, -1234, -1.0, -1235.1, 1.1 ); + TEST_FP_OP3_D(25, fnmsub.d, 8.0, 2.0, -5.0, -2.0 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64uf/fmin.S b/isa/rv64uf/fmin.S new file mode 100644 index 0000000..0041ea5 --- /dev/null +++ b/isa/rv64uf/fmin.S @@ -0,0 +1,55 @@ +#***************************************************************************** +# fmin.S +#----------------------------------------------------------------------------- +# +# Test f{min|max}.{s|d} instructinos. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_FP_OP2_S( 2, fmin.s, 1.0, 2.5, 1.0 ); + TEST_FP_OP2_S( 3, fmin.s, -1235.1, -1235.1, 1.1 ); + TEST_FP_OP2_S( 4, fmin.s, -1235.1, 1.1, -1235.1 ); + TEST_FP_OP2_S( 5, fmin.s, -1235.1, NaN, -1235.1 ); + TEST_FP_OP2_S( 6, fmin.s, 0.00000001, 3.14159265, 0.00000001 ); + TEST_FP_OP2_S( 7, fmin.s, -2.0, -1.0, -2.0 ); + + TEST_FP_OP2_S(12, fmax.s, 2.5, 2.5, 1.0 ); + TEST_FP_OP2_S(13, fmax.s, 1.1, -1235.1, 1.1 ); + TEST_FP_OP2_S(14, fmax.s, 1.1, 1.1, -1235.1 ); + TEST_FP_OP2_S(15, fmax.s, -1235.1, NaN, -1235.1 ); + TEST_FP_OP2_S(16, fmax.s, 3.14159265, 3.14159265, 0.00000001 ); + TEST_FP_OP2_S(17, fmax.s, -1.0, -1.0, -2.0 ); + + TEST_FP_OP2_D(22, fmin.d, 1.0, 2.5, 1.0 ); + TEST_FP_OP2_D(23, fmin.d, -1235.1, -1235.1, 1.1 ); + TEST_FP_OP2_D(24, fmin.d, -1235.1, 1.1, -1235.1 ); + TEST_FP_OP2_D(25, fmin.d, -1235.1, NaN, -1235.1 ); + TEST_FP_OP2_D(26, fmin.d, 0.00000001, 3.14159265, 0.00000001 ); + TEST_FP_OP2_D(27, fmin.d, -2.0, -1.0, -2.0 ); + + TEST_FP_OP2_D(32, fmax.d, 2.5, 2.5, 1.0 ); + TEST_FP_OP2_D(33, fmax.d, 1.1, -1235.1, 1.1 ); + TEST_FP_OP2_D(34, fmax.d, 1.1, 1.1, -1235.1 ); + TEST_FP_OP2_D(35, fmax.d, -1235.1, NaN, -1235.1 ); + TEST_FP_OP2_D(36, fmax.d, 3.14159265, 3.14159265, 0.00000001 ); + TEST_FP_OP2_D(37, fmax.d, -1.0, -1.0, -2.0 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64uf/fsgnj.S b/isa/rv64uf/fsgnj.S new file mode 100644 index 0000000..0d2124b --- /dev/null +++ b/isa/rv64uf/fsgnj.S @@ -0,0 +1,57 @@ +#***************************************************************************** +# fsgnj.S +#----------------------------------------------------------------------------- +# +# Test fsgn{j|jn|x}.{s|d} instructions. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_FP_OP2_S( 2, fsgnj.s, -6.3, 6.3, -1.0 ); + TEST_FP_OP2_S( 3, fsgnj.s, 7.3, 7.3, 2.0 ); + TEST_FP_OP2_S( 4, fsgnj.s, -8.3, -8.3, -3.0 ); + TEST_FP_OP2_S( 5, fsgnj.s, 9.3, -9.3, 4.0 ); + + TEST_FP_OP2_S(12, fsgnjn.s, 6.3, 6.3, -1.0 ); + TEST_FP_OP2_S(13, fsgnjn.s, -7.3, 7.3, 2.0 ); + TEST_FP_OP2_S(14, fsgnjn.s, 8.3, -8.3, -3.0 ); + TEST_FP_OP2_S(15, fsgnjn.s, -9.3, -9.3, 4.0 ); + + TEST_FP_OP2_S(22, fsgnjx.s, -6.3, 6.3, -1.0 ); + TEST_FP_OP2_S(23, fsgnjx.s, 7.3, 7.3, 2.0 ); + TEST_FP_OP2_S(24, fsgnjx.s, 8.3, -8.3, -3.0 ); + TEST_FP_OP2_S(25, fsgnjx.s, -9.3, -9.3, 4.0 ); + + TEST_FP_OP2_D(32, fsgnj.d, -6.3, 6.3, -1.0 ); + TEST_FP_OP2_D(33, fsgnj.d, 7.3, 7.3, 2.0 ); + TEST_FP_OP2_D(34, fsgnj.d, -8.3, -8.3, -3.0 ); + TEST_FP_OP2_D(35, fsgnj.d, 9.3, -9.3, 4.0 ); + + TEST_FP_OP2_D(42, fsgnjn.d, 6.3, 6.3, -1.0 ); + TEST_FP_OP2_D(43, fsgnjn.d, -7.3, 7.3, 2.0 ); + TEST_FP_OP2_D(44, fsgnjn.d, 8.3, -8.3, -3.0 ); + TEST_FP_OP2_D(45, fsgnjn.d, -9.3, -9.3, 4.0 ); + + TEST_FP_OP2_D(52, fsgnjx.d, -6.3, 6.3, -1.0 ); + TEST_FP_OP2_D(53, fsgnjx.d, 7.3, 7.3, 2.0 ); + TEST_FP_OP2_D(54, fsgnjx.d, 8.3, -8.3, -3.0 ); + TEST_FP_OP2_D(55, fsgnjx.d, -9.3, -9.3, 4.0 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64uf/ldst.S b/isa/rv64uf/ldst.S new file mode 100644 index 0000000..6e4c028 --- /dev/null +++ b/isa/rv64uf/ldst.S @@ -0,0 +1,30 @@ +#***************************************************************************** +# ldst.S +#----------------------------------------------------------------------------- +# +# This test verifies that flw, fld, fsw, and fsd work properly. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + TEST_CASE(2, a0, 0x4000000040400000, la a1, tdat; flw f1, 4(a1); fsw f1, 12(a1); ld a0, 8(a1)) + TEST_CASE(3, a0, 0x400000003f800000, la a1, tdat; fld f2, 0(a1); fsd f2, 8(a1); ld a0, 8(a1)) + + TEST_PASSFAIL + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +tdat: +.word 0x3f800000 +.word 0x40000000 +.word 0x40400000 +.word 0x40800000 + +RVTEST_DATA_END diff --git a/isa/rv64uf/move.S b/isa/rv64uf/move.S new file mode 100644 index 0000000..f06e324 --- /dev/null +++ b/isa/rv64uf/move.S @@ -0,0 +1,39 @@ +#***************************************************************************** +# move.S +#----------------------------------------------------------------------------- +# +# This test verifies that mxtf.[s,d], mftx.[s,d], mtfsr, mffsr, +# and fsgnj[x|n].[s|d] work properly. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + +li a0, 1 +mtfsr a0 + + TEST_CASE(2, a1, 1, li a0, 0x1234; mtfsr a1, a0) + TEST_CASE(3, a0, 0x34, mffsr a0) + TEST_CASE(4, a0, 0x34, mffsr a0) + + TEST_CASE(5, a0, 0xFFFFFFFFBF812345, li a1, 0xFFFFFFFFBF812345; mxtf.s f0, a1; mftx.s a0, f0) + TEST_CASE(6, a0, 0x3FF02468A0000000, li a1, 0x3FF02468A0000000; mxtf.d f1, a1; mftx.d a0, f1) + + TEST_CASE(7, a0, 0xFFFFFFFFBF812345, li a1, 0xFFFFFFFFBF812345; mxtf.s f0, a1; fsgnj.s f1, f0, f0; mftx.s a0, f1) + TEST_CASE(8, a0, 0x000000004BA98765, li a1, 0xFFFFFFFFCBA98765; mxtf.s f0, a1; fsgnjx.s f1, f0, f0; mftx.s a0, f1) + TEST_CASE(9, a0, 0x000000005EADBEEF, li a1, 0xFFFFFFFFDEADBEEF; mxtf.s f0, a1; fsgnjn.s f1, f0, f0; mftx.s a0, f1) + TEST_CASE(10, a0, 0xBFF02468A0001000, li a1, 0x3FF02468A0001000; li a2, -1; mxtf.d f1, a1; mxtf.d f2, a2; fsgnj.d f0, f1, f2; mftx.d a0, f0) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64uf/structural.S b/isa/rv64uf/structural.S new file mode 100644 index 0000000..0c74ab5 --- /dev/null +++ b/isa/rv64uf/structural.S @@ -0,0 +1,56 @@ +#***************************************************************************** +# structural.S +#----------------------------------------------------------------------------- +# +# This test verifies that the FPU correctly obviates structural hazards on its +# writeback port (e.g. fadd followed by fsgnj) +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + +li x25, 1 + +li x2, 0x3FF0000000000000 +li x1, 0x3F800000 + +#define TEST(nops, errcode) \ + mxtf.d f4, x0 ;\ + mxtf.s f3, x0 ;\ + mxtf.d f2, x2 ;\ + mxtf.s f1, x1 ;\ + b 1f ;\ + .align 5 ;\ +1:fmul.d f4, f2, f2 ;\ + nops ;\ + fsgnj.s f3, f1, f1 ;\ + mftx.d x4, f4 ;\ + mftx.s x3, f3 ;\ + beq x1, x3, 2f ;\ + RVTEST_FAIL ;\ +2:beq x2, x4, 2f ;\ + RVTEST_FAIL; \ +2:mxtf.d f2, zero ;\ + mxtf.s f1, zero ;\ + +TEST(;,2) +TEST(nop,4) +TEST(nop;nop,6) +TEST(nop;nop;nop,8) +TEST(nop;nop;nop;nop,10) +TEST(nop;nop;nop;nop;nop,12) +TEST(nop;nop;nop;nop;nop;nop,14) + +RVTEST_PASS + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/Makefile b/isa/rv64ui/Makefile new file mode 100644 index 0000000..0efb128 --- /dev/null +++ b/isa/rv64ui/Makefile @@ -0,0 +1,151 @@ +#======================================================================= +# Makefile for riscv-tests +#----------------------------------------------------------------------- + +default: all + +#-------------------------------------------------------------------- +# Sources +#-------------------------------------------------------------------- + +rv64ui_sc_tests = \ + add addi addiw addw \ + amoadd_d amoand_d amomax_d amomaxu_d amomin_d amominu_d amoor_d amoswap_d \ + amoadd_w amoand_w amomax_w amomaxu_w amomin_w amominu_w amoor_w amoswap_w \ + and andi \ + auipc \ + beq bge bgeu blt bltu bne \ + div divu divuw divw \ + example simple \ + fence_i \ + j jal jalr jalr_j jalr_r \ + lb lbu lh lhu lw lwu ld \ + lui \ + mul mulh mulhsu mulhu mulw \ + or ori \ + rem remu remuw remw \ + sb sh sw sd \ + sll slli slliw sllw \ + slt slti sltiu sltu \ + sra srai sraiw sraw \ + srl srli srliw srlw \ + sub subw \ + xor xori \ + +rv64ui_mc_tests =\ + lrsc + +rv64ui_sc_vec_tests = \ + add addi addiw addw \ + and andi \ + lui \ + mul mulh mulhsu mulhu mulw \ + or ori \ + sll slli slliw sllw \ + slt slti sltiu sltu \ + sra srai sraiw sraw \ + srl srli srliw srlw \ + sub subw \ + xor xori \ + +#-------------------------------------------------------------------- +# Build rules +#-------------------------------------------------------------------- + +RISCV_GCC = riscv-gcc +RISCV_GCC_OPTS = -nostdlib -nostartfiles +RISCV_OBJDUMP = riscv-objdump --disassemble-all --disassemble-zeroes --section=.text --section=.data --section=.bss +RISCV_SIM = riscv-isa-run + +#------------------------------------------------------------ +# Build assembly tests + +%.hex: % + elf2hex 16 16384 $< > $@ + +%.dump: % + $(RISCV_OBJDUMP) $< > $@ + +%.out: % + $(RISCV_SIM) $< 2> $@ + +rv64ui_p_tests_bin = $(addprefix rv64ui-p-, $(rv64ui_sc_tests)) +rv64ui_p_tests_dump = $(addsuffix .dump, $(rv64ui_p_tests_bin)) +rv64ui_p_tests_hex = $(addsuffix .hex, $(rv64ui_p_tests_bin)) +rv64ui_p_tests_out = $(addsuffix .out, $(rv64ui_p_tests_bin)) + +$(rv64ui_p_tests_bin): rv64ui-p-%: %.S + $(RISCV_GCC) $(RISCV_GCC_OPTS) -I../../env/p -I../macros/scalar -T../../env/p/link.ld $< -o $@ + +rv64ui_pm_tests_bin = $(addprefix rv64ui-pm-, $(rv64ui_mc_tests)) +rv64ui_pm_tests_dump = $(addsuffix .dump, $(rv64ui_pm_tests_bin)) +rv64ui_pm_tests_hex = $(addsuffix .hex, $(rv64ui_pm_tests_bin)) +rv64ui_pm_tests_out = $(addsuffix .out, $(rv64ui_pm_tests_bin)) + +$(rv64ui_pm_tests_bin): rv64ui-pm-%: %.S + $(RISCV_GCC) $(RISCV_GCC_OPTS) -I../../env/pm -I../macros/scalar -T../../env/pm/link.ld $< -o $@ + +rv64ui_v_tests_bin = $(addprefix rv64ui-v-, $(rv64ui_sc_tests)) +rv64ui_v_tests_dump = $(addsuffix .dump, $(rv64ui_v_tests_bin)) +rv64ui_v_tests_hex = $(addsuffix .hex, $(rv64ui_v_tests_bin)) +rv64ui_v_tests_out = $(addsuffix .out, $(rv64ui_v_tests_bin)) + +$(rv64ui_v_tests_bin): rv64ui-v-%: %.S + $(RISCV_GCC) $(RISCV_GCC_OPTS) -std=gnu99 -O2 -I../../env/v -I../macros/scalar -T../../env/v/link.ld ../../env/v/entry.S ../../env/v/vm.c $< -lc -o $@ + +rv64ui_p_vec_tests_bin = $(addprefix rv64ui-p-vec-, $(rv64ui_sc_vec_tests)) +rv64ui_p_vec_tests_dump = $(addsuffix .dump, $(rv64ui_p_vec_tests_bin)) +rv64ui_p_vec_tests_hex = $(addsuffix .hex, $(rv64ui_p_vec_tests_bin)) +rv64ui_p_vec_tests_out = $(addsuffix .out, $(rv64ui_p_vec_tests_bin)) + +$(rv64ui_p_vec_tests_bin): rv64ui-p-vec-%: %.S + $(RISCV_GCC) $(RISCV_GCC_OPTS) -I../../env/p -I../macros/vector -T../../env/p/link.ld $< -o $@ + +rv64ui_pt_vec_tests_bin = $(addprefix rv64ui-pt-vec-, $(rv64ui_sc_vec_tests)) +rv64ui_pt_vec_tests_dump = $(addsuffix .dump, $(rv64ui_pt_vec_tests_bin)) +rv64ui_pt_vec_tests_hex = $(addsuffix .hex, $(rv64ui_pt_vec_tests_bin)) +rv64ui_pt_vec_tests_out = $(addsuffix .out, $(rv64ui_pt_vec_tests_bin)) + +$(rv64ui_pt_vec_tests_bin): rv64ui-pt-vec-%: %.S + $(RISCV_GCC) $(RISCV_GCC_OPTS) -I../../env/pt -I../macros/vector -T../../env/pt/link.ld $< -o $@ + +rv64ui_v_vec_tests_bin = $(addprefix rv64ui-v-vec-, $(rv64ui_sc_vec_tests)) +rv64ui_v_vec_tests_dump = $(addsuffix .dump, $(rv64ui_v_vec_tests_bin)) +rv64ui_v_vec_tests_hex = $(addsuffix .hex, $(rv64ui_v_vec_tests_bin)) +rv64ui_v_vec_tests_out = $(addsuffix .out, $(rv64ui_v_vec_tests_bin)) + +$(rv64ui_v_vec_tests_bin): rv64ui-v-vec-%: %.S + $(RISCV_GCC) $(RISCV_GCC_OPTS) -std=gnu99 -O2 -I../../env/v -I../macros/vector -T../../env/v/link.ld ../../env/v/entry.S ../../env/v/vm.c $< -lc -o $@ + +riscv-: \ + $(rv64ui_p_tests_dump) $(rv64ui_p_tests_hex) \ + $(rv64ui_pm_tests_dump) $(rv64ui_pm_tests_hex) \ + $(rv64ui_v_tests_dump) $(rv64ui_v_tests_hex) \ + $(rv64ui_p_vec_tests_dump) $(rv64ui_p_vec_tests_hex) \ + $(rv64ui_pt_vec_tests_dump) $(rv64ui_pt_vec_tests_hex) \ + $(rv64ui_v_vec_tests_dump) $(rv64ui_v_vec_tests_hex) \ + +out = $(rv64ui_p_tests_out) $(rv64ui_pm_tests_out) $(rv64ui_v_tests_out) $(rv64ui_p_vec_tests_out) $(rv64ui_v_vec_tests_out) + +run: $(out) + echo; perl -ne 'print " [$$1] $$ARGV \t$$2\n" if /\*{3}(.{8})\*{3}(.*)/' \ + $(out); echo; + +junk += \ + $(rv64ui_p_tests_bin) $(rv64ui_p_tests_dump) $(rv64ui_p_tests_hex) $(rv64ui_p_tests_out) \ + $(rv64ui_pm_tests_bin) $(rv64ui_pm_tests_dump) $(rv64ui_pm_tests_hex) $(rv64ui_pm_tests_out) \ + $(rv64ui_v_tests_bin) $(rv64ui_v_tests_dump) $(rv64ui_v_tests_hex) $(rv64ui_v_tests_out) \ + $(rv64ui_p_vec_tests_bin) $(rv64ui_p_vec_tests_dump) $(rv64ui_p_vec_tests_hex) $(rv64ui_p_vec_tests_out) \ + $(rv64ui_pt_vec_tests_bin) $(rv64ui_pt_vec_tests_dump) $(rv64ui_pt_vec_tests_hex) $(rv64ui_pt_vec_tests_out) \ + $(rv64ui_v_vec_tests_bin) $(rv64ui_v_vec_tests_dump) $(rv64ui_v_vec_tests_hex) $(rv64ui_v_vec_tests_out) \ + +#------------------------------------------------------------ +# Default + +all: riscv- + +#------------------------------------------------------------ +# Clean up + +clean: + rm -rf $(junk) diff --git a/isa/rv64ui/add.S b/isa/rv64ui/add.S new file mode 100644 index 0000000..2b45eda --- /dev/null +++ b/isa/rv64ui/add.S @@ -0,0 +1,83 @@ +#***************************************************************************** +# add.S +#----------------------------------------------------------------------------- +# +# Test add instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_RR_OP( 2, add, 0x00000000, 0x00000000, 0x00000000 ); + TEST_RR_OP( 3, add, 0x00000002, 0x00000001, 0x00000001 ); + TEST_RR_OP( 4, add, 0x0000000a, 0x00000003, 0x00000007 ); + + TEST_RR_OP( 5, add, 0xffffffffffff8000, 0x0000000000000000, 0xffffffffffff8000 ); + TEST_RR_OP( 6, add, 0xffffffff80000000, 0xffffffff80000000, 0x00000000 ); + TEST_RR_OP( 7, add, 0xffffffff7fff8000, 0xffffffff80000000, 0xffffffffffff8000 ); + + TEST_RR_OP( 8, add, 0x0000000000007fff, 0x0000000000000000, 0x0000000000007fff ); + TEST_RR_OP( 9, add, 0x000000007fffffff, 0x000000007fffffff, 0x0000000000000000 ); + TEST_RR_OP( 10, add, 0x0000000080007ffe, 0x000000007fffffff, 0x0000000000007fff ); + + TEST_RR_OP( 11, add, 0xffffffff80007fff, 0xffffffff80000000, 0x0000000000007fff ); + TEST_RR_OP( 12, add, 0x000000007fff7fff, 0x000000007fffffff, 0xffffffffffff8000 ); + + TEST_RR_OP( 13, add, 0xffffffffffffffff, 0x0000000000000000, 0xffffffffffffffff ); + TEST_RR_OP( 14, add, 0x0000000000000000, 0xffffffffffffffff, 0x0000000000000001 ); + TEST_RR_OP( 15, add, 0xfffffffffffffffe, 0xffffffffffffffff, 0xffffffffffffffff ); + + TEST_RR_OP( 16, add, 0x0000000080000000, 0x0000000000000001, 0x000000007fffffff ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_RR_SRC1_EQ_DEST( 17, add, 24, 13, 11 ); + TEST_RR_SRC2_EQ_DEST( 18, add, 25, 14, 11 ); + TEST_RR_SRC12_EQ_DEST( 19, add, 26, 13 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_RR_DEST_BYPASS( 20, 0, add, 24, 13, 11 ); + TEST_RR_DEST_BYPASS( 21, 1, add, 25, 14, 11 ); + TEST_RR_DEST_BYPASS( 22, 2, add, 26, 15, 11 ); + + TEST_RR_SRC12_BYPASS( 23, 0, 0, add, 24, 13, 11 ); + TEST_RR_SRC12_BYPASS( 24, 0, 1, add, 25, 14, 11 ); + TEST_RR_SRC12_BYPASS( 25, 0, 2, add, 26, 15, 11 ); + TEST_RR_SRC12_BYPASS( 26, 1, 0, add, 24, 13, 11 ); + TEST_RR_SRC12_BYPASS( 27, 1, 1, add, 25, 14, 11 ); + TEST_RR_SRC12_BYPASS( 28, 2, 0, add, 26, 15, 11 ); + + TEST_RR_SRC21_BYPASS( 29, 0, 0, add, 24, 13, 11 ); + TEST_RR_SRC21_BYPASS( 30, 0, 1, add, 25, 14, 11 ); + TEST_RR_SRC21_BYPASS( 31, 0, 2, add, 26, 15, 11 ); + TEST_RR_SRC21_BYPASS( 32, 1, 0, add, 24, 13, 11 ); + TEST_RR_SRC21_BYPASS( 33, 1, 1, add, 25, 14, 11 ); + TEST_RR_SRC21_BYPASS( 34, 2, 0, add, 26, 15, 11 ); + + TEST_RR_ZEROSRC1( 35, add, 15, 15 ); + TEST_RR_ZEROSRC2( 36, add, 32, 32 ); + TEST_RR_ZEROSRC12( 37, add, 0 ); + TEST_RR_ZERODEST( 38, add, 16, 30 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/addi.S b/isa/rv64ui/addi.S new file mode 100644 index 0000000..c32d729 --- /dev/null +++ b/isa/rv64ui/addi.S @@ -0,0 +1,69 @@ +#***************************************************************************** +# addi.S +#----------------------------------------------------------------------------- +# +# Test addi instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_IMM_OP( 2, addi, 0x00000000, 0x00000000, 0x000 ); + TEST_IMM_OP( 3, addi, 0x00000002, 0x00000001, 0x001 ); + TEST_IMM_OP( 4, addi, 0x0000000a, 0x00000003, 0x007 ); + + TEST_IMM_OP( 5, addi, 0xfffffffffffff800, 0x0000000000000000, 0x800 ); + TEST_IMM_OP( 6, addi, 0xffffffff80000000, 0xffffffff80000000, 0x000 ); + TEST_IMM_OP( 7, addi, 0xffffffff7ffff800, 0xffffffff80000000, 0x800 ); + + TEST_IMM_OP( 8, addi, 0x00000000000007ff, 0x00000000, 0x7ff ); + TEST_IMM_OP( 9, addi, 0x000000007fffffff, 0x7fffffff, 0x000 ); + TEST_IMM_OP( 10, addi, 0x00000000800007fe, 0x7fffffff, 0x7ff ); + + TEST_IMM_OP( 11, addi, 0xffffffff800007ff, 0xffffffff80000000, 0x7ff ); + TEST_IMM_OP( 12, addi, 0x000000007ffff7ff, 0x000000007fffffff, 0x800 ); + + TEST_IMM_OP( 13, addi, 0xffffffffffffffff, 0x0000000000000000, 0xfff ); + TEST_IMM_OP( 14, addi, 0x0000000000000000, 0xffffffffffffffff, 0x001 ); + TEST_IMM_OP( 15, addi, 0xfffffffffffffffe, 0xffffffffffffffff, 0xfff ); + + TEST_IMM_OP( 16, addi, 0x0000000080000000, 0x7fffffff, 0x001 ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_IMM_SRC1_EQ_DEST( 17, addi, 24, 13, 11 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_IMM_DEST_BYPASS( 18, 0, addi, 24, 13, 11 ); + TEST_IMM_DEST_BYPASS( 19, 1, addi, 23, 13, 10 ); + TEST_IMM_DEST_BYPASS( 20, 2, addi, 22, 13, 9 ); + + TEST_IMM_SRC1_BYPASS( 21, 0, addi, 24, 13, 11 ); + TEST_IMM_SRC1_BYPASS( 22, 1, addi, 23, 13, 10 ); + TEST_IMM_SRC1_BYPASS( 23, 2, addi, 22, 13, 9 ); + + TEST_IMM_ZEROSRC1( 24, addi, 32, 32 ); + TEST_IMM_ZERODEST( 25, addi, 33, 50 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/addiw.S b/isa/rv64ui/addiw.S new file mode 100644 index 0000000..db9220a --- /dev/null +++ b/isa/rv64ui/addiw.S @@ -0,0 +1,69 @@ +#***************************************************************************** +# addiw.S +#----------------------------------------------------------------------------- +# +# Test addiw instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_IMM_OP( 2, addiw, 0x00000000, 0x00000000, 0x000 ); + TEST_IMM_OP( 3, addiw, 0x00000002, 0x00000001, 0x001 ); + TEST_IMM_OP( 4, addiw, 0x0000000a, 0x00000003, 0x007 ); + + TEST_IMM_OP( 5, addiw, 0xfffffffffffff800, 0x0000000000000000, 0x800 ); + TEST_IMM_OP( 6, addiw, 0xffffffff80000000, 0xffffffff80000000, 0x000 ); + TEST_IMM_OP( 7, addiw, 0x000000007ffff800, 0xffffffff80000000, 0x800 ); + + TEST_IMM_OP( 8, addiw, 0x00000000000007ff, 0x00000000, 0x7ff ); + TEST_IMM_OP( 9, addiw, 0x000000007fffffff, 0x7fffffff, 0x000 ); + TEST_IMM_OP( 10, addiw, 0xffffffff800007fe, 0x7fffffff, 0x7ff ); + + TEST_IMM_OP( 11, addiw, 0xffffffff800007ff, 0xffffffff80000000, 0x7ff ); + TEST_IMM_OP( 12, addiw, 0x000000007ffff7ff, 0x000000007fffffff, 0x800 ); + + TEST_IMM_OP( 13, addiw, 0xffffffffffffffff, 0x0000000000000000, 0xfff ); + TEST_IMM_OP( 14, addiw, 0x0000000000000000, 0xffffffffffffffff, 0x001 ); + TEST_IMM_OP( 15, addiw, 0xfffffffffffffffe, 0xffffffffffffffff, 0xfff ); + + TEST_IMM_OP( 16, addiw, 0xffffffff80000000, 0x7fffffff, 0x001 ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_IMM_SRC1_EQ_DEST( 17, addiw, 24, 13, 11 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_IMM_DEST_BYPASS( 18, 0, addiw, 24, 13, 11 ); + TEST_IMM_DEST_BYPASS( 19, 1, addiw, 23, 13, 10 ); + TEST_IMM_DEST_BYPASS( 20, 2, addiw, 22, 13, 9 ); + + TEST_IMM_SRC1_BYPASS( 21, 0, addiw, 24, 13, 11 ); + TEST_IMM_SRC1_BYPASS( 22, 1, addiw, 23, 13, 10 ); + TEST_IMM_SRC1_BYPASS( 23, 2, addiw, 22, 13, 9 ); + + TEST_IMM_ZEROSRC1( 24, addiw, 32, 32 ); + TEST_IMM_ZERODEST( 25, addiw, 33, 50 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/addw.S b/isa/rv64ui/addw.S new file mode 100644 index 0000000..069ea46 --- /dev/null +++ b/isa/rv64ui/addw.S @@ -0,0 +1,83 @@ +#***************************************************************************** +# addw.S +#----------------------------------------------------------------------------- +# +# Test addw instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_RR_OP( 2, addw, 0x00000000, 0x00000000, 0x00000000 ); + TEST_RR_OP( 3, addw, 0x00000002, 0x00000001, 0x00000001 ); + TEST_RR_OP( 4, addw, 0x0000000a, 0x00000003, 0x00000007 ); + + TEST_RR_OP( 5, addw, 0xffffffffffff8000, 0x0000000000000000, 0xffffffffffff8000 ); + TEST_RR_OP( 6, addw, 0xffffffff80000000, 0xffffffff80000000, 0x00000000 ); + TEST_RR_OP( 7, addw, 0x000000007fff8000, 0xffffffff80000000, 0xffffffffffff8000 ); + + TEST_RR_OP( 8, addw, 0x0000000000007fff, 0x0000000000000000, 0x0000000000007fff ); + TEST_RR_OP( 9, addw, 0x000000007fffffff, 0x000000007fffffff, 0x0000000000000000 ); + TEST_RR_OP( 10, addw, 0xffffffff80007ffe, 0x000000007fffffff, 0x0000000000007fff ); + + TEST_RR_OP( 11, addw, 0xffffffff80007fff, 0xffffffff80000000, 0x0000000000007fff ); + TEST_RR_OP( 12, addw, 0x000000007fff7fff, 0x000000007fffffff, 0xffffffffffff8000 ); + + TEST_RR_OP( 13, addw, 0xffffffffffffffff, 0x0000000000000000, 0xffffffffffffffff ); + TEST_RR_OP( 14, addw, 0x0000000000000000, 0xffffffffffffffff, 0x0000000000000001 ); + TEST_RR_OP( 15, addw, 0xfffffffffffffffe, 0xffffffffffffffff, 0xffffffffffffffff ); + + TEST_RR_OP( 16, addw, 0xffffffff80000000, 0x0000000000000001, 0x000000007fffffff ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_RR_SRC1_EQ_DEST( 17, addw, 24, 13, 11 ); + TEST_RR_SRC2_EQ_DEST( 18, addw, 25, 14, 11 ); + TEST_RR_SRC12_EQ_DEST( 19, addw, 26, 13 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_RR_DEST_BYPASS( 20, 0, addw, 24, 13, 11 ); + TEST_RR_DEST_BYPASS( 21, 1, addw, 25, 14, 11 ); + TEST_RR_DEST_BYPASS( 22, 2, addw, 26, 15, 11 ); + + TEST_RR_SRC12_BYPASS( 23, 0, 0, addw, 24, 13, 11 ); + TEST_RR_SRC12_BYPASS( 24, 0, 1, addw, 25, 14, 11 ); + TEST_RR_SRC12_BYPASS( 25, 0, 2, addw, 26, 15, 11 ); + TEST_RR_SRC12_BYPASS( 26, 1, 0, addw, 24, 13, 11 ); + TEST_RR_SRC12_BYPASS( 27, 1, 1, addw, 25, 14, 11 ); + TEST_RR_SRC12_BYPASS( 28, 2, 0, addw, 26, 15, 11 ); + + TEST_RR_SRC21_BYPASS( 29, 0, 0, addw, 24, 13, 11 ); + TEST_RR_SRC21_BYPASS( 30, 0, 1, addw, 25, 14, 11 ); + TEST_RR_SRC21_BYPASS( 31, 0, 2, addw, 26, 15, 11 ); + TEST_RR_SRC21_BYPASS( 32, 1, 0, addw, 24, 13, 11 ); + TEST_RR_SRC21_BYPASS( 33, 1, 1, addw, 25, 14, 11 ); + TEST_RR_SRC21_BYPASS( 34, 2, 0, addw, 26, 15, 11 ); + + TEST_RR_ZEROSRC1( 35, addw, 15, 15 ); + TEST_RR_ZEROSRC2( 36, addw, 32, 32 ); + TEST_RR_ZEROSRC12( 37, addw, 0 ); + TEST_RR_ZERODEST( 38, addw, 16, 30 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/amoadd_d.S b/isa/rv64ui/amoadd_d.S new file mode 100644 index 0000000..21d534c --- /dev/null +++ b/isa/rv64ui/amoadd_d.S @@ -0,0 +1,62 @@ +#***************************************************************************** +# amoadd_d.S +#----------------------------------------------------------------------------- +# +# Test amoadd.d instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + TEST_CASE(2, a4, 0xffffffff80000000, \ + li a0, 0xffffffff80000000; \ + li a1, 0xfffffffffffff800; \ + la a3, amo_operand; \ + sd a0, 0(a3); \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + amoadd.d a4, a1, 0(a3); \ + ) + + TEST_CASE(3, a5, 0xffffffff7ffff800, ld a5, 0(a3)) + + # try again after a cache miss + TEST_CASE(4, a4, 0xffffffff7ffff800, \ + li a4, 16384; \ + add a5, a3, a4; \ + ld x0, 0(a5); \ + add a5, a5, a4; \ + ld x0, 0(a5); \ + add a5, a5, a4; \ + ld x0, 0(a5); \ + add a5, a5, a4; \ + ld x0, 0(a5); \ + amoadd.d a4, a1, 0(a3); \ + ) + + TEST_CASE(5, a5, 0xffffffff7ffff000, ld a5, 0(a3)) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END + + .bss + .align 3 +amo_operand: + .dword 0 + .skip 65536 diff --git a/isa/rv64ui/amoadd_w.S b/isa/rv64ui/amoadd_w.S new file mode 100644 index 0000000..4c71ac8 --- /dev/null +++ b/isa/rv64ui/amoadd_w.S @@ -0,0 +1,63 @@ +#***************************************************************************** +# amoadd_w.S +#----------------------------------------------------------------------------- +# +# Test amoadd.w instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + TEST_CASE(2, a4, 0xffffffff80000000, \ + li a0, 0xffffffff80000000; \ + li a1, 0xfffffffffffff800; \ + la a3, amo_operand; \ + sw a0, 0(a3); \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + amoadd.w a4, a1, 0(a3); \ + ) + + TEST_CASE(3, a5, 0x000000007ffff800, lw a5, 0(a3)) + + # try again after a cache miss + TEST_CASE(4, a4, 0x000000007ffff800, \ + li a1, 0xffffffff80000000; \ + li a4, 16384; \ + add a5, a3, a4; \ + lw x0, 0(a5); \ + add a5, a5, a4; \ + lw x0, 0(a5); \ + add a5, a5, a4; \ + lw x0, 0(a5); \ + add a5, a5, a4; \ + lw x0, 0(a5); \ + amoadd.w a4, a1, 0(a3); \ + ) + + TEST_CASE(5, a5, 0xfffffffffffff800, lw a5, 0(a3)) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END + + .bss + .align 3 +amo_operand: + .dword 0 + .skip 65536 diff --git a/isa/rv64ui/amoand_d.S b/isa/rv64ui/amoand_d.S new file mode 100644 index 0000000..0c4985c --- /dev/null +++ b/isa/rv64ui/amoand_d.S @@ -0,0 +1,63 @@ +#***************************************************************************** +# amoand_d.S +#----------------------------------------------------------------------------- +# +# Test amoand.d instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + TEST_CASE(2, a4, 0xffffffff80000000, \ + li a0, 0xffffffff80000000; \ + li a1, 0xfffffffffffff800; \ + la a3, amo_operand; \ + sd a0, 0(a3); \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + amoand.d a4, a1, 0(a3); \ + ) + + TEST_CASE(3, a5, 0xffffffff80000000, ld a5, 0(a3)) + + # try again after a cache miss + TEST_CASE(4, a4, 0xffffffff80000000, \ + li a1, 0x0000000080000000; \ + li a4, 16384; \ + add a5, a3, a4; \ + ld x0, 0(a5); \ + add a5, a5, a4; \ + ld x0, 0(a5); \ + add a5, a5, a4; \ + ld x0, 0(a5); \ + add a5, a5, a4; \ + ld x0, 0(a5); \ + amoand.d a4, a1, 0(a3); \ + ) + + TEST_CASE(5, a5, 0x0000000080000000, ld a5, 0(a3)) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END + + .bss + .align 3 +amo_operand: + .dword 0 + .skip 65536 diff --git a/isa/rv64ui/amoand_w.S b/isa/rv64ui/amoand_w.S new file mode 100644 index 0000000..0433860 --- /dev/null +++ b/isa/rv64ui/amoand_w.S @@ -0,0 +1,63 @@ +#***************************************************************************** +# amoand.w.S +#----------------------------------------------------------------------------- +# +# Test amoand.w instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + TEST_CASE(2, a4, 0xffffffff80000000, \ + li a0, 0xffffffff80000000; \ + li a1, 0xfffffffffffff800; \ + la a3, amo_operand; \ + sd a0, 0(a3); \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + amoand.w a4, a1, 0(a3); \ + ) + + TEST_CASE(3, a5, 0xffffffff80000000, lw a5, 0(a3)) + + # try again after a cache miss + TEST_CASE(4, a4, 0xffffffff80000000, \ + li a1, 0x0000000080000000; \ + li a4, 16384; \ + add a5, a3, a4; \ + lw x0, 0(a5); \ + add a5, a5, a4; \ + lw x0, 0(a5); \ + add a5, a5, a4; \ + lw x0, 0(a5); \ + add a5, a5, a4; \ + lw x0, 0(a5); \ + amoand.w a4, a1, 0(a3); \ + ) + + TEST_CASE(5, a5, 0xffffffff80000000, lw a5, 0(a3)) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END + + .bss + .align 3 +amo_operand: + .dword 0 + .skip 65536 diff --git a/isa/rv64ui/amomax_d.S b/isa/rv64ui/amomax_d.S new file mode 100644 index 0000000..a0dc2aa --- /dev/null +++ b/isa/rv64ui/amomax_d.S @@ -0,0 +1,47 @@ +#***************************************************************************** +# amomax_d.S +#----------------------------------------------------------------------------- +# +# Test amomax.d instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + TEST_CASE(2, a4, 0xffffffff80000000, \ + li a0, 0xffffffff80000000; \ + li a1, 0xfffffffffffff800; \ + la a3, amo_operand; \ + sd a0, 0(a3); \ + amomax.d a4, a1, 0(a3); \ + ) + + TEST_CASE(3, a5, 0xfffffffffffff800, ld a5, 0(a3)) + + TEST_CASE(4, a4, 0, \ + li a1, 1; \ + sd x0, 0(a3); \ + amomax.d a4, a1, 0(a3); \ + ) + + TEST_CASE(5, a5, 1, ld a5, 0(a3)) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END + + .bss + .align 3 +amo_operand: + .dword 0 + .skip 65536 diff --git a/isa/rv64ui/amomax_w.S b/isa/rv64ui/amomax_w.S new file mode 100644 index 0000000..0fe3352 --- /dev/null +++ b/isa/rv64ui/amomax_w.S @@ -0,0 +1,47 @@ +#***************************************************************************** +# amomax_d.S +#----------------------------------------------------------------------------- +# +# Test amomax.w instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + TEST_CASE(2, a4, 0xffffffff80000000, \ + li a0, 0xffffffff80000000; \ + li a1, 0xfffffffffffff800; \ + la a3, amo_operand; \ + sw a0, 0(a3); \ + amomax.w a4, a1, 0(a3); \ + ) + + TEST_CASE(3, a5, 0xfffffffffffff800, lw a5, 0(a3)) + + TEST_CASE(4, a4, 0, \ + li a1, 1; \ + sw x0, 0(a3); \ + amomax.w a4, a1, 0(a3); \ + ) + + TEST_CASE(5, a5, 1, lw a5, 0(a3)) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END + + .bss + .align 3 +amo_operand: + .dword 0 + .skip 65536 diff --git a/isa/rv64ui/amomaxu_d.S b/isa/rv64ui/amomaxu_d.S new file mode 100644 index 0000000..9dc13e4 --- /dev/null +++ b/isa/rv64ui/amomaxu_d.S @@ -0,0 +1,47 @@ +#***************************************************************************** +# amomaxu_d.S +#----------------------------------------------------------------------------- +# +# Test amomaxu.d instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + TEST_CASE(2, a4, 0xffffffff80000000, \ + li a0, 0xffffffff80000000; \ + li a1, 0xfffffffffffff800; \ + la a3, amo_operand; \ + sd a0, 0(a3); \ + amomaxu.d a4, a1, 0(a3); \ + ) + + TEST_CASE(3, a5, 0xfffffffffffff800, ld a5, 0(a3)) + + TEST_CASE(4, a4, 0, \ + li a1, 0xffffffffffffffff; \ + sd x0, 0(a3); \ + amomaxu.d a4, a1, 0(a3); \ + ) + + TEST_CASE(5, a5, 0xffffffffffffffff, ld a5, 0(a3)) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END + + .bss + .align 3 +amo_operand: + .dword 0 + .skip 65536 diff --git a/isa/rv64ui/amomaxu_w.S b/isa/rv64ui/amomaxu_w.S new file mode 100644 index 0000000..8e774b6 --- /dev/null +++ b/isa/rv64ui/amomaxu_w.S @@ -0,0 +1,47 @@ +#***************************************************************************** +# amomaxu_d.S +#----------------------------------------------------------------------------- +# +# Test amomaxu.w instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + TEST_CASE(2, a4, 0xffffffff80000000, \ + li a0, 0xffffffff80000000; \ + li a1, 0xfffffffffffff800; \ + la a3, amo_operand; \ + sw a0, 0(a3); \ + amomaxu.w a4, a1, 0(a3); \ + ) + + TEST_CASE(3, a5, 0xfffffffffffff800, lw a5, 0(a3)) + + TEST_CASE(4, a4, 0, \ + li a1, 0xffffffffffffffff; \ + sw x0, 0(a3); \ + amomaxu.w a4, a1, 0(a3); \ + ) + + TEST_CASE(5, a5, 0xffffffffffffffff, lw a5, 0(a3)) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END + + .bss + .align 3 +amo_operand: + .dword 0 + .skip 65536 diff --git a/isa/rv64ui/amomin_d.S b/isa/rv64ui/amomin_d.S new file mode 100644 index 0000000..168ae3c --- /dev/null +++ b/isa/rv64ui/amomin_d.S @@ -0,0 +1,47 @@ +#***************************************************************************** +# amomin_d.S +#----------------------------------------------------------------------------- +# +# Test amomin.d instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + TEST_CASE(2, a4, 0xffffffff80000000, \ + li a0, 0xffffffff80000000; \ + li a1, 0xfffffffffffff800; \ + la a3, amo_operand; \ + sd a0, 0(a3); \ + amomin.d a4, a1, 0(a3); \ + ) + + TEST_CASE(3, a5, 0xffffffff80000000, ld a5, 0(a3)) + + TEST_CASE(4, a4, 0, \ + li a1, 0xffffffffffffffff; \ + sd x0, 0(a3); \ + amomin.d a4, a1, 0(a3); \ + ) + + TEST_CASE(5, a5, 0xffffffffffffffff, ld a5, 0(a3)) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END + + .bss + .align 3 +amo_operand: + .dword 0 + .skip 65536 diff --git a/isa/rv64ui/amomin_w.S b/isa/rv64ui/amomin_w.S new file mode 100644 index 0000000..e6822d8 --- /dev/null +++ b/isa/rv64ui/amomin_w.S @@ -0,0 +1,47 @@ +#***************************************************************************** +# amomin_d.S +#----------------------------------------------------------------------------- +# +# Test amomin.w instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + TEST_CASE(2, a4, 0xffffffff80000000, \ + li a0, 0xffffffff80000000; \ + li a1, 0xfffffffffffff800; \ + la a3, amo_operand; \ + sw a0, 0(a3); \ + amomin.w a4, a1, 0(a3); \ + ) + + TEST_CASE(3, a5, 0xffffffff80000000, lw a5, 0(a3)) + + TEST_CASE(4, a4, 0, \ + li a1, 0xffffffffffffffff; \ + sw x0, 0(a3); \ + amomin.w a4, a1, 0(a3); \ + ) + + TEST_CASE(5, a5, 0xffffffffffffffff, lw a5, 0(a3)) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END + + .bss + .align 3 +amo_operand: + .dword 0 + .skip 65536 diff --git a/isa/rv64ui/amominu_d.S b/isa/rv64ui/amominu_d.S new file mode 100644 index 0000000..9572d95 --- /dev/null +++ b/isa/rv64ui/amominu_d.S @@ -0,0 +1,47 @@ +#***************************************************************************** +# amominu_d.S +#----------------------------------------------------------------------------- +# +# Test amominu.d instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + TEST_CASE(2, a4, 0xffffffff80000000, \ + li a0, 0xffffffff80000000; \ + li a1, 0xfffffffffffff800; \ + la a3, amo_operand; \ + sd a0, 0(a3); \ + amominu.d a4, a1, 0(a3); \ + ) + + TEST_CASE(3, a5, 0xffffffff80000000, ld a5, 0(a3)) + + TEST_CASE(4, a4, 0, \ + li a1, 0xffffffffffffffff; \ + sd x0, 0(a3); \ + amominu.d a4, a1, 0(a3); \ + ) + + TEST_CASE(5, a5, 0, ld a5, 0(a3)) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END + + .bss + .align 3 +amo_operand: + .dword 0 + .skip 65536 diff --git a/isa/rv64ui/amominu_w.S b/isa/rv64ui/amominu_w.S new file mode 100644 index 0000000..cf2f516 --- /dev/null +++ b/isa/rv64ui/amominu_w.S @@ -0,0 +1,47 @@ +#***************************************************************************** +# amominu_d.S +#----------------------------------------------------------------------------- +# +# Test amominu.w instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + TEST_CASE(2, a4, 0xffffffff80000000, \ + li a0, 0xffffffff80000000; \ + li a1, 0xfffffffffffff800; \ + la a3, amo_operand; \ + sw a0, 0(a3); \ + amominu.w a4, a1, 0(a3); \ + ) + + TEST_CASE(3, a5, 0xffffffff80000000, lw a5, 0(a3)) + + TEST_CASE(4, a4, 0, \ + li a1, 0xffffffffffffffff; \ + sw x0, 0(a3); \ + amominu.w a4, a1, 0(a3); \ + ) + + TEST_CASE(5, a5, 0, lw a5, 0(a3)) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END + + .bss + .align 3 +amo_operand: + .dword 0 + .skip 65536 diff --git a/isa/rv64ui/amoor_d.S b/isa/rv64ui/amoor_d.S new file mode 100644 index 0000000..ce1a843 --- /dev/null +++ b/isa/rv64ui/amoor_d.S @@ -0,0 +1,63 @@ +#***************************************************************************** +# amoor_d.S +#----------------------------------------------------------------------------- +# +# Test amoor.d instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + TEST_CASE(2, a4, 0xffffffff80000000, \ + li a0, 0xffffffff80000000; \ + li a1, 0xfffffffffffff800; \ + la a3, amo_operand; \ + sd a0, 0(a3); \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + amoor.d a4, a1, 0(a3); \ + ) + + TEST_CASE(3, a5, 0xfffffffffffff800, ld a5, 0(a3)) + + # try again after a cache miss + TEST_CASE(4, a4, 0xfffffffffffff800, \ + li a1, 1; \ + li a4, 16384; \ + add a5, a3, a4; \ + ld x0, 0(a5); \ + add a5, a5, a4; \ + ld x0, 0(a5); \ + add a5, a5, a4; \ + ld x0, 0(a5); \ + add a5, a5, a4; \ + ld x0, 0(a5); \ + amoor.d a4, a1, 0(a3); \ + ) + + TEST_CASE(5, a5, 0xfffffffffffff801, ld a5, 0(a3)) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END + + .bss + .align 3 +amo_operand: + .dword 0 + .skip 65536 diff --git a/isa/rv64ui/amoor_w.S b/isa/rv64ui/amoor_w.S new file mode 100644 index 0000000..784aee7 --- /dev/null +++ b/isa/rv64ui/amoor_w.S @@ -0,0 +1,63 @@ +#***************************************************************************** +# amoor.w.S +#----------------------------------------------------------------------------- +# +# Test amoor.w instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + TEST_CASE(2, a4, 0xffffffff80000000, \ + li a0, 0xffffffff80000000; \ + li a1, 0xfffffffffffff800; \ + la a3, amo_operand; \ + sd a0, 0(a3); \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + amoor.w a4, a1, 0(a3); \ + ) + + TEST_CASE(3, a5, 0xfffffffffffff800, lw a5, 0(a3)) + + # try again after a cache miss + TEST_CASE(4, a4, 0xfffffffffffff800, \ + li a1, 1; \ + li a4, 16384; \ + add a5, a3, a4; \ + lw x0, 0(a5); \ + add a5, a5, a4; \ + lw x0, 0(a5); \ + add a5, a5, a4; \ + lw x0, 0(a5); \ + add a5, a5, a4; \ + lw x0, 0(a5); \ + amoor.w a4, a1, 0(a3); \ + ) + + TEST_CASE(5, a5, 0xfffffffffffff801, lw a5, 0(a3)) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END + + .bss + .align 3 +amo_operand: + .dword 0 + .skip 65536 diff --git a/isa/rv64ui/amoswap_d.S b/isa/rv64ui/amoswap_d.S new file mode 100644 index 0000000..b78e653 --- /dev/null +++ b/isa/rv64ui/amoswap_d.S @@ -0,0 +1,63 @@ +#***************************************************************************** +# amoswap.d.S +#----------------------------------------------------------------------------- +# +# Test amoswap.d instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + TEST_CASE(2, a4, 0xffffffff80000000, \ + li a0, 0xffffffff80000000; \ + li a1, 0xfffffffffffff800; \ + la a3, amo_operand; \ + sd a0, 0(a3); \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + amoswap.d a4, a1, 0(a3); \ + ) + + TEST_CASE(3, a5, 0xfffffffffffff800, ld a5, 0(a3)) + + # try again after a cache miss + TEST_CASE(4, a4, 0xfffffffffffff800, \ + li a1, 0x0000000080000000; \ + li a4, 16384; \ + add a5, a3, a4; \ + ld x0, 0(a5); \ + add a5, a5, a4; \ + ld x0, 0(a5); \ + add a5, a5, a4; \ + ld x0, 0(a5); \ + add a5, a5, a4; \ + ld x0, 0(a5); \ + amoswap.d a4, a1, 0(a3); \ + ) + + TEST_CASE(5, a5, 0x0000000080000000, ld a5, 0(a3)) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END + + .bss + .align 3 +amo_operand: + .dword 0 + .skip 65536 diff --git a/isa/rv64ui/amoswap_w.S b/isa/rv64ui/amoswap_w.S new file mode 100644 index 0000000..174676b --- /dev/null +++ b/isa/rv64ui/amoswap_w.S @@ -0,0 +1,63 @@ +#***************************************************************************** +# amoswap_w.S +#----------------------------------------------------------------------------- +# +# Test amoswap.w instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + TEST_CASE(2, a4, 0xffffffff80000000, \ + li a0, 0xffffffff80000000; \ + li a1, 0xfffffffffffff800; \ + la a3, amo_operand; \ + sw a0, 0(a3); \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + nop; nop; nop; nop; \ + amoswap.w a4, a1, 0(a3); \ + ) + + TEST_CASE(3, a5, 0xfffffffffffff800, lw a5, 0(a3)) + + # try again after a cache miss + TEST_CASE(4, a4, 0xfffffffffffff800, \ + li a1, 0x0000000080000000; \ + li a4, 16384; \ + add a5, a3, a4; \ + lw x0, 0(a5); \ + add a5, a5, a4; \ + lw x0, 0(a5); \ + add a5, a5, a4; \ + lw x0, 0(a5); \ + add a5, a5, a4; \ + lw x0, 0(a5); \ + amoswap.w a4, a1, 0(a3); \ + ) + + TEST_CASE(5, a5, 0xffffffff80000000, lw a5, 0(a3)) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END + + .bss + .align 3 +amo_operand: + .dword 0 + .skip 65536 diff --git a/isa/rv64ui/and.S b/isa/rv64ui/and.S new file mode 100644 index 0000000..75ca9a6 --- /dev/null +++ b/isa/rv64ui/and.S @@ -0,0 +1,67 @@ +#***************************************************************************** +# and.S +#----------------------------------------------------------------------------- +# +# Test and instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Logical tests + #------------------------------------------------------------- + + TEST_RR_OP( 2, and, 0x0f000f00, 0xff00ff00, 0x0f0f0f0f ); + TEST_RR_OP( 3, and, 0x00f000f0, 0x0ff00ff0, 0xf0f0f0f0 ); + TEST_RR_OP( 4, and, 0x000f000f, 0x00ff00ff, 0x0f0f0f0f ); + TEST_RR_OP( 5, and, 0xf000f000, 0xf00ff00f, 0xf0f0f0f0 ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_RR_SRC1_EQ_DEST( 6, and, 0x0f000f00, 0xff00ff00, 0x0f0f0f0f ); + TEST_RR_SRC2_EQ_DEST( 7, and, 0x00f000f0, 0x0ff00ff0, 0xf0f0f0f0 ); + TEST_RR_SRC12_EQ_DEST( 8, and, 0xff00ff00, 0xff00ff00 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_RR_DEST_BYPASS( 9, 0, and, 0x0f000f00, 0xff00ff00, 0x0f0f0f0f ); + TEST_RR_DEST_BYPASS( 10, 1, and, 0x00f000f0, 0x0ff00ff0, 0xf0f0f0f0 ); + TEST_RR_DEST_BYPASS( 11, 2, and, 0x000f000f, 0x00ff00ff, 0x0f0f0f0f ); + + TEST_RR_SRC12_BYPASS( 12, 0, 0, and, 0x0f000f00, 0xff00ff00, 0x0f0f0f0f ); + TEST_RR_SRC12_BYPASS( 13, 0, 1, and, 0x00f000f0, 0x0ff00ff0, 0xf0f0f0f0 ); + TEST_RR_SRC12_BYPASS( 14, 0, 2, and, 0x000f000f, 0x00ff00ff, 0x0f0f0f0f ); + TEST_RR_SRC12_BYPASS( 15, 1, 0, and, 0x0f000f00, 0xff00ff00, 0x0f0f0f0f ); + TEST_RR_SRC12_BYPASS( 16, 1, 1, and, 0x00f000f0, 0x0ff00ff0, 0xf0f0f0f0 ); + TEST_RR_SRC12_BYPASS( 17, 2, 0, and, 0x000f000f, 0x00ff00ff, 0x0f0f0f0f ); + + TEST_RR_SRC21_BYPASS( 18, 0, 0, and, 0x0f000f00, 0xff00ff00, 0x0f0f0f0f ); + TEST_RR_SRC21_BYPASS( 19, 0, 1, and, 0x00f000f0, 0x0ff00ff0, 0xf0f0f0f0 ); + TEST_RR_SRC21_BYPASS( 20, 0, 2, and, 0x000f000f, 0x00ff00ff, 0x0f0f0f0f ); + TEST_RR_SRC21_BYPASS( 21, 1, 0, and, 0x0f000f00, 0xff00ff00, 0x0f0f0f0f ); + TEST_RR_SRC21_BYPASS( 22, 1, 1, and, 0x00f000f0, 0x0ff00ff0, 0xf0f0f0f0 ); + TEST_RR_SRC21_BYPASS( 23, 2, 0, and, 0x000f000f, 0x00ff00ff, 0x0f0f0f0f ); + + TEST_RR_ZEROSRC1( 24, and, 0, 0xff00ff00 ); + TEST_RR_ZEROSRC2( 25, and, 0, 0x00ff00ff ); + TEST_RR_ZEROSRC12( 26, and, 0 ); + TEST_RR_ZERODEST( 27, and, 0x11111111, 0x22222222 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/andi.S b/isa/rv64ui/andi.S new file mode 100644 index 0000000..b7a2d81 --- /dev/null +++ b/isa/rv64ui/andi.S @@ -0,0 +1,53 @@ +#***************************************************************************** +# andi.S +#----------------------------------------------------------------------------- +# +# Test andi instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Logical tests + #------------------------------------------------------------- + + TEST_IMM_OP( 2, andi, 0xff00ff00, 0xff00ff00, 0xf0f ); + TEST_IMM_OP( 3, andi, 0x000000f0, 0x0ff00ff0, 0x0f0 ); + TEST_IMM_OP( 4, andi, 0x0000000f, 0x00ff00ff, 0x70f ); + TEST_IMM_OP( 5, andi, 0x00000000, 0xf00ff00f, 0x0f0 ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_IMM_SRC1_EQ_DEST( 6, andi, 0x00000000, 0xff00ff00, 0x0f0 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_IMM_DEST_BYPASS( 7, 0, andi, 0x00000700, 0x0ff00ff0, 0x70f ); + TEST_IMM_DEST_BYPASS( 8, 1, andi, 0x000000f0, 0x00ff00ff, 0x0f0 ); + TEST_IMM_DEST_BYPASS( 9, 2, andi, 0xf00ff00f, 0xf00ff00f, 0xf0f ); + + TEST_IMM_SRC1_BYPASS( 10, 0, andi, 0x00000700, 0x0ff00ff0, 0x70f ); + TEST_IMM_SRC1_BYPASS( 11, 1, andi, 0x000000f0, 0x00ff00ff, 0x0f0 ); + TEST_IMM_SRC1_BYPASS( 12, 2, andi, 0x0000000f, 0xf00ff00f, 0x70f ); + + TEST_IMM_ZEROSRC1( 13, andi, 0, 0x0f0 ); + TEST_IMM_ZERODEST( 14, andi, 0x00ff00ff, 0x70f ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/auipc.S b/isa/rv64ui/auipc.S new file mode 100644 index 0000000..9b291b5 --- /dev/null +++ b/isa/rv64ui/auipc.S @@ -0,0 +1,35 @@ +#***************************************************************************** +# auipc.S +#----------------------------------------------------------------------------- +# +# Test auipc instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + TEST_CASE(2, a0, -4096+8, \ + auipc a0, 0x00001; \ + jal 1f; \ + 1: sub a0, ra, a0; \ + ) + + TEST_CASE(3, a0, 4096+8, \ + auipc a0, 0xfffff; \ + jal 1f; \ + 1: sub a0, ra, a0; \ + ) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/beq.S b/isa/rv64ui/beq.S new file mode 100644 index 0000000..32d6275 --- /dev/null +++ b/isa/rv64ui/beq.S @@ -0,0 +1,71 @@ +#***************************************************************************** +# beq.S +#----------------------------------------------------------------------------- +# +# Test beq instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Branch tests + #------------------------------------------------------------- + + # Each test checks both forward and backward branches + + TEST_BR2_OP_TAKEN( 2, beq, 0, 0 ); + TEST_BR2_OP_TAKEN( 3, beq, 1, 1 ); + TEST_BR2_OP_TAKEN( 4, beq, -1, -1 ); + + TEST_BR2_OP_NOTTAKEN( 5, beq, 0, 1 ); + TEST_BR2_OP_NOTTAKEN( 6, beq, 1, 0 ); + TEST_BR2_OP_NOTTAKEN( 7, beq, -1, 1 ); + TEST_BR2_OP_NOTTAKEN( 8, beq, 1, -1 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_BR2_SRC12_BYPASS( 9, 0, 0, beq, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 10, 0, 1, beq, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 11, 0, 2, beq, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 12, 1, 0, beq, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 13, 1, 1, beq, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 14, 2, 0, beq, 0, -1 ); + + TEST_BR2_SRC12_BYPASS( 15, 0, 0, beq, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 16, 0, 1, beq, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 17, 0, 2, beq, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 18, 1, 0, beq, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 19, 1, 1, beq, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 20, 2, 0, beq, 0, -1 ); + + #------------------------------------------------------------- + # Test delay slot instructions not executed nor bypassed + #------------------------------------------------------------- + + TEST_CASE( 21, x1, 3, \ + li x1, 1; \ + beq x0, x0, 1f; \ + addi x1, x1, 1; \ + addi x1, x1, 1; \ + addi x1, x1, 1; \ + addi x1, x1, 1; \ +1: addi x1, x1, 1; \ + addi x1, x1, 1; \ + ) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/bge.S b/isa/rv64ui/bge.S new file mode 100644 index 0000000..908b5d1 --- /dev/null +++ b/isa/rv64ui/bge.S @@ -0,0 +1,74 @@ +#***************************************************************************** +# bge.S +#----------------------------------------------------------------------------- +# +# Test bge instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Branch tests + #------------------------------------------------------------- + + # Each test checks both forward and backward branches + + TEST_BR2_OP_TAKEN( 2, bge, 0, 0 ); + TEST_BR2_OP_TAKEN( 3, bge, 1, 1 ); + TEST_BR2_OP_TAKEN( 4, bge, -1, -1 ); + TEST_BR2_OP_TAKEN( 5, bge, 1, 0 ); + TEST_BR2_OP_TAKEN( 6, bge, 1, -1 ); + TEST_BR2_OP_TAKEN( 7, bge, -1, -2 ); + + TEST_BR2_OP_NOTTAKEN( 8, bge, 0, 1 ); + TEST_BR2_OP_NOTTAKEN( 9, bge, -1, 1 ); + TEST_BR2_OP_NOTTAKEN( 10, bge, -2, -1 ); + TEST_BR2_OP_NOTTAKEN( 11, bge, -2, 1 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_BR2_SRC12_BYPASS( 12, 0, 0, bge, -1, 0 ); + TEST_BR2_SRC12_BYPASS( 13, 0, 1, bge, -1, 0 ); + TEST_BR2_SRC12_BYPASS( 14, 0, 2, bge, -1, 0 ); + TEST_BR2_SRC12_BYPASS( 15, 1, 0, bge, -1, 0 ); + TEST_BR2_SRC12_BYPASS( 16, 1, 1, bge, -1, 0 ); + TEST_BR2_SRC12_BYPASS( 17, 2, 0, bge, -1, 0 ); + + TEST_BR2_SRC12_BYPASS( 18, 0, 0, bge, -1, 0 ); + TEST_BR2_SRC12_BYPASS( 19, 0, 1, bge, -1, 0 ); + TEST_BR2_SRC12_BYPASS( 20, 0, 2, bge, -1, 0 ); + TEST_BR2_SRC12_BYPASS( 21, 1, 0, bge, -1, 0 ); + TEST_BR2_SRC12_BYPASS( 22, 1, 1, bge, -1, 0 ); + TEST_BR2_SRC12_BYPASS( 23, 2, 0, bge, -1, 0 ); + + #------------------------------------------------------------- + # Test delay slot instructions not executed nor bypassed + #------------------------------------------------------------- + + TEST_CASE( 24, x1, 3, \ + li x1, 1; \ + bge x1, x0, 1f; \ + addi x1, x1, 1; \ + addi x1, x1, 1; \ + addi x1, x1, 1; \ + addi x1, x1, 1; \ +1: addi x1, x1, 1; \ + addi x1, x1, 1; \ + ) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/bgeu.S b/isa/rv64ui/bgeu.S new file mode 100644 index 0000000..100e247 --- /dev/null +++ b/isa/rv64ui/bgeu.S @@ -0,0 +1,74 @@ +#***************************************************************************** +# bgeu.S +#----------------------------------------------------------------------------- +# +# Test bgeu instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Branch tests + #------------------------------------------------------------- + + # Each test checks both forward and backward branches + + TEST_BR2_OP_TAKEN( 2, bgeu, 0x00000000, 0x00000000 ); + TEST_BR2_OP_TAKEN( 3, bgeu, 0x00000001, 0x00000001 ); + TEST_BR2_OP_TAKEN( 4, bgeu, 0xffffffff, 0xffffffff ); + TEST_BR2_OP_TAKEN( 5, bgeu, 0x00000001, 0x00000000 ); + TEST_BR2_OP_TAKEN( 6, bgeu, 0xffffffff, 0xfffffffe ); + TEST_BR2_OP_TAKEN( 7, bgeu, 0xffffffff, 0x00000000 ); + + TEST_BR2_OP_NOTTAKEN( 8, bgeu, 0x00000000, 0x00000001 ); + TEST_BR2_OP_NOTTAKEN( 9, bgeu, 0xfffffffe, 0xffffffff ); + TEST_BR2_OP_NOTTAKEN( 10, bgeu, 0x00000000, 0xffffffff ); + TEST_BR2_OP_NOTTAKEN( 11, bgeu, 0x7fffffff, 0x80000000 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_BR2_SRC12_BYPASS( 12, 0, 0, bgeu, 0xefffffff, 0xf0000000 ); + TEST_BR2_SRC12_BYPASS( 13, 0, 1, bgeu, 0xefffffff, 0xf0000000 ); + TEST_BR2_SRC12_BYPASS( 14, 0, 2, bgeu, 0xefffffff, 0xf0000000 ); + TEST_BR2_SRC12_BYPASS( 15, 1, 0, bgeu, 0xefffffff, 0xf0000000 ); + TEST_BR2_SRC12_BYPASS( 16, 1, 1, bgeu, 0xefffffff, 0xf0000000 ); + TEST_BR2_SRC12_BYPASS( 17, 2, 0, bgeu, 0xefffffff, 0xf0000000 ); + + TEST_BR2_SRC12_BYPASS( 18, 0, 0, bgeu, 0xefffffff, 0xf0000000 ); + TEST_BR2_SRC12_BYPASS( 19, 0, 1, bgeu, 0xefffffff, 0xf0000000 ); + TEST_BR2_SRC12_BYPASS( 20, 0, 2, bgeu, 0xefffffff, 0xf0000000 ); + TEST_BR2_SRC12_BYPASS( 21, 1, 0, bgeu, 0xefffffff, 0xf0000000 ); + TEST_BR2_SRC12_BYPASS( 22, 1, 1, bgeu, 0xefffffff, 0xf0000000 ); + TEST_BR2_SRC12_BYPASS( 23, 2, 0, bgeu, 0xefffffff, 0xf0000000 ); + + #------------------------------------------------------------- + # Test delay slot instructions not executed nor bypassed + #------------------------------------------------------------- + + TEST_CASE( 24, x1, 3, \ + li x1, 1; \ + bgeu x1, x0, 1f; \ + addi x1, x1, 1; \ + addi x1, x1, 1; \ + addi x1, x1, 1; \ + addi x1, x1, 1; \ +1: addi x1, x1, 1; \ + addi x1, x1, 1; \ + ) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/blt.S b/isa/rv64ui/blt.S new file mode 100644 index 0000000..aa995d7 --- /dev/null +++ b/isa/rv64ui/blt.S @@ -0,0 +1,71 @@ +#***************************************************************************** +# blt.S +#----------------------------------------------------------------------------- +# +# Test blt instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Branch tests + #------------------------------------------------------------- + + # Each test checks both forward and backward branches + + TEST_BR2_OP_TAKEN( 2, blt, 0, 1 ); + TEST_BR2_OP_TAKEN( 3, blt, -1, 1 ); + TEST_BR2_OP_TAKEN( 4, blt, -2, -1 ); + + TEST_BR2_OP_NOTTAKEN( 5, blt, 1, 0 ); + TEST_BR2_OP_NOTTAKEN( 6, blt, 1, -1 ); + TEST_BR2_OP_NOTTAKEN( 7, blt, -1, -2 ); + TEST_BR2_OP_NOTTAKEN( 8, blt, 1, -2 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_BR2_SRC12_BYPASS( 9, 0, 0, blt, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 10, 0, 1, blt, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 11, 0, 2, blt, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 12, 1, 0, blt, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 13, 1, 1, blt, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 14, 2, 0, blt, 0, -1 ); + + TEST_BR2_SRC12_BYPASS( 15, 0, 0, blt, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 16, 0, 1, blt, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 17, 0, 2, blt, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 18, 1, 0, blt, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 19, 1, 1, blt, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 20, 2, 0, blt, 0, -1 ); + + #------------------------------------------------------------- + # Test delay slot instructions not executed nor bypassed + #------------------------------------------------------------- + + TEST_CASE( 21, x1, 3, \ + li x1, 1; \ + blt x0, x1, 1f; \ + addi x1, x1, 1; \ + addi x1, x1, 1; \ + addi x1, x1, 1; \ + addi x1, x1, 1; \ +1: addi x1, x1, 1; \ + addi x1, x1, 1; \ + ) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/bltu.S b/isa/rv64ui/bltu.S new file mode 100644 index 0000000..73ad3ab --- /dev/null +++ b/isa/rv64ui/bltu.S @@ -0,0 +1,71 @@ +#***************************************************************************** +# bltu.S +#----------------------------------------------------------------------------- +# +# Test bltu instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Branch tests + #------------------------------------------------------------- + + # Each test checks both forward and backward branches + + TEST_BR2_OP_TAKEN( 2, bltu, 0x00000000, 0x00000001 ); + TEST_BR2_OP_TAKEN( 3, bltu, 0xfffffffe, 0xffffffff ); + TEST_BR2_OP_TAKEN( 4, bltu, 0x00000000, 0xffffffff ); + + TEST_BR2_OP_NOTTAKEN( 5, bltu, 0x00000001, 0x00000000 ); + TEST_BR2_OP_NOTTAKEN( 6, bltu, 0xffffffff, 0xfffffffe ); + TEST_BR2_OP_NOTTAKEN( 7, bltu, 0xffffffff, 0x00000000 ); + TEST_BR2_OP_NOTTAKEN( 8, bltu, 0x80000000, 0x7fffffff ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_BR2_SRC12_BYPASS( 9, 0, 0, bltu, 0xf0000000, 0xefffffff ); + TEST_BR2_SRC12_BYPASS( 10, 0, 1, bltu, 0xf0000000, 0xefffffff ); + TEST_BR2_SRC12_BYPASS( 11, 0, 2, bltu, 0xf0000000, 0xefffffff ); + TEST_BR2_SRC12_BYPASS( 12, 1, 0, bltu, 0xf0000000, 0xefffffff ); + TEST_BR2_SRC12_BYPASS( 13, 1, 1, bltu, 0xf0000000, 0xefffffff ); + TEST_BR2_SRC12_BYPASS( 14, 2, 0, bltu, 0xf0000000, 0xefffffff ); + + TEST_BR2_SRC12_BYPASS( 15, 0, 0, bltu, 0xf0000000, 0xefffffff ); + TEST_BR2_SRC12_BYPASS( 16, 0, 1, bltu, 0xf0000000, 0xefffffff ); + TEST_BR2_SRC12_BYPASS( 17, 0, 2, bltu, 0xf0000000, 0xefffffff ); + TEST_BR2_SRC12_BYPASS( 18, 1, 0, bltu, 0xf0000000, 0xefffffff ); + TEST_BR2_SRC12_BYPASS( 19, 1, 1, bltu, 0xf0000000, 0xefffffff ); + TEST_BR2_SRC12_BYPASS( 20, 2, 0, bltu, 0xf0000000, 0xefffffff ); + + #------------------------------------------------------------- + # Test delay slot instructions not executed nor bypassed + #------------------------------------------------------------- + + TEST_CASE( 21, x1, 3, \ + li x1, 1; \ + bltu x0, x1, 1f; \ + addi x1, x1, 1; \ + addi x1, x1, 1; \ + addi x1, x1, 1; \ + addi x1, x1, 1; \ +1: addi x1, x1, 1; \ + addi x1, x1, 1; \ + ) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/bne.S b/isa/rv64ui/bne.S new file mode 100644 index 0000000..5ab2dee --- /dev/null +++ b/isa/rv64ui/bne.S @@ -0,0 +1,71 @@ +#***************************************************************************** +# bne.S +#----------------------------------------------------------------------------- +# +# Test bne instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Branch tests + #------------------------------------------------------------- + + # Each test checks both forward and backward branches + + TEST_BR2_OP_TAKEN( 2, bne, 0, 1 ); + TEST_BR2_OP_TAKEN( 3, bne, 1, 0 ); + TEST_BR2_OP_TAKEN( 4, bne, -1, 1 ); + TEST_BR2_OP_TAKEN( 5, bne, 1, -1 ); + + TEST_BR2_OP_NOTTAKEN( 6, bne, 0, 0 ); + TEST_BR2_OP_NOTTAKEN( 7, bne, 1, 1 ); + TEST_BR2_OP_NOTTAKEN( 8, bne, -1, -1 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_BR2_SRC12_BYPASS( 9, 0, 0, bne, 0, 0 ); + TEST_BR2_SRC12_BYPASS( 10, 0, 1, bne, 0, 0 ); + TEST_BR2_SRC12_BYPASS( 11, 0, 2, bne, 0, 0 ); + TEST_BR2_SRC12_BYPASS( 12, 1, 0, bne, 0, 0 ); + TEST_BR2_SRC12_BYPASS( 13, 1, 1, bne, 0, 0 ); + TEST_BR2_SRC12_BYPASS( 14, 2, 0, bne, 0, 0 ); + + TEST_BR2_SRC12_BYPASS( 15, 0, 0, bne, 0, 0 ); + TEST_BR2_SRC12_BYPASS( 16, 0, 1, bne, 0, 0 ); + TEST_BR2_SRC12_BYPASS( 17, 0, 2, bne, 0, 0 ); + TEST_BR2_SRC12_BYPASS( 18, 1, 0, bne, 0, 0 ); + TEST_BR2_SRC12_BYPASS( 19, 1, 1, bne, 0, 0 ); + TEST_BR2_SRC12_BYPASS( 20, 2, 0, bne, 0, 0 ); + + #------------------------------------------------------------- + # Test delay slot instructions not executed nor bypassed + #------------------------------------------------------------- + + TEST_CASE( 21, x1, 3, \ + li x1, 1; \ + bne x1, x0, 1f; \ + addi x1, x1, 1; \ + addi x1, x1, 1; \ + addi x1, x1, 1; \ + addi x1, x1, 1; \ +1: addi x1, x1, 1; \ + addi x1, x1, 1; \ + ) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/div.S b/isa/rv64ui/div.S new file mode 100644 index 0000000..13b118b --- /dev/null +++ b/isa/rv64ui/div.S @@ -0,0 +1,39 @@ +#***************************************************************************** +# div.S +#----------------------------------------------------------------------------- +# +# Test div instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_RR_OP( 2, div, 3, 20, 6 ); + TEST_RR_OP( 3, div, -3, -20, 6 ); + TEST_RR_OP( 4, div, -3, 20, -6 ); + TEST_RR_OP( 5, div, 3, -20, -6 ); + + TEST_RR_OP( 6, div, -1<<63, -1<<63, 1 ); + TEST_RR_OP( 7, div, -1<<63, -1<<63, -1 ); + + TEST_RR_OP( 8, div, -1, -1<<63, 0 ); + TEST_RR_OP( 9, div, -1, 1, 0 ); + TEST_RR_OP(10, div, -1, 0, 0 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/divu.S b/isa/rv64ui/divu.S new file mode 100644 index 0000000..3fa4bdb --- /dev/null +++ b/isa/rv64ui/divu.S @@ -0,0 +1,39 @@ +#***************************************************************************** +# divu.S +#----------------------------------------------------------------------------- +# +# Test divu instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_RR_OP( 2, divu, 3, 20, 6 ); + TEST_RR_OP( 3, divu, 3074457345618258599, -20, 6 ); + TEST_RR_OP( 4, divu, 0, 20, -6 ); + TEST_RR_OP( 5, divu, 0, -20, -6 ); + + TEST_RR_OP( 6, divu, -1<<63, -1<<63, 1 ); + TEST_RR_OP( 7, divu, 0, -1<<63, -1 ); + + TEST_RR_OP( 8, divu, -1, -1<<63, 0 ); + TEST_RR_OP( 9, divu, -1, 1, 0 ); + TEST_RR_OP(10, divu, -1, 0, 0 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/divuw.S b/isa/rv64ui/divuw.S new file mode 100644 index 0000000..21fd092 --- /dev/null +++ b/isa/rv64ui/divuw.S @@ -0,0 +1,39 @@ +#***************************************************************************** +# divuw.S +#----------------------------------------------------------------------------- +# +# Test divuw instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_RR_OP( 2, divuw, 3, 20, 6 ); + TEST_RR_OP( 3, divuw, 715827879, -20 << 32 >> 32, 6 ); + TEST_RR_OP( 4, divuw, 0, 20, -6 ); + TEST_RR_OP( 5, divuw, 0, -20, -6 ); + + TEST_RR_OP( 6, divuw, -1<<31, -1<<31, 1 ); + TEST_RR_OP( 7, divuw, 0, -1<<31, -1 ); + + TEST_RR_OP( 8, divuw, -1, -1<<31, 0 ); + TEST_RR_OP( 9, divuw, -1, 1, 0 ); + TEST_RR_OP(10, divuw, -1, 0, 0 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/divw.S b/isa/rv64ui/divw.S new file mode 100644 index 0000000..847fdb0 --- /dev/null +++ b/isa/rv64ui/divw.S @@ -0,0 +1,39 @@ +#***************************************************************************** +# divw.S +#----------------------------------------------------------------------------- +# +# Test divw instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_RR_OP( 2, divw, 3, 20, 6 ); + TEST_RR_OP( 3, divw, -3, -20, 6 ); + TEST_RR_OP( 4, divw, -3, 20, -6 ); + TEST_RR_OP( 5, divw, 3, -20, -6 ); + + TEST_RR_OP( 6, divw, -1<<31, -1<<31, 1 ); + TEST_RR_OP( 7, divw, -1<<31, -1<<31, -1 ); + + TEST_RR_OP( 8, divw, -1, -1<<31, 0 ); + TEST_RR_OP( 9, divw, -1, 1, 0 ); + TEST_RR_OP(10, divw, -1, 0, 0 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/example.S b/isa/rv64ui/example.S new file mode 100644 index 0000000..a667035 --- /dev/null +++ b/isa/rv64ui/example.S @@ -0,0 +1,25 @@ +#***************************************************************************** +# simple.S +#----------------------------------------------------------------------------- +# +# This is the most basic self checking test. If your simulator does not +# pass thiss then there is little chance that it will pass any of the +# more complicated self checking tests. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + +RVTEST_PASS + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/fence_i.S b/isa/rv64ui/fence_i.S new file mode 100644 index 0000000..4e79b41 --- /dev/null +++ b/isa/rv64ui/fence_i.S @@ -0,0 +1,51 @@ +#***************************************************************************** +# fence_i.S +#----------------------------------------------------------------------------- +# +# Test self-modifying code and the fence.i instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + +li a3, 111 +la a0, 3f +la a1, 1f +la a2, 2f +lw a0, 0(a0) + +# test I$ hit +.align 6 +sw a0, 0(a1) +fence.i + +1: addi a3, a3, 222 +TEST_CASE( 2, a3, 444, nop ) + +# test prefetcher hit +li a4, 100 +1: addi a4, a4, -1 +bnez a4, 1b + +sw a0, 0(a2) +fence.i + +.align 6 +2: addi a3, a3, 555 +TEST_CASE( 3, a3, 777, nop ) + +3: addi a3, a3, 333 + +TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/j.S b/isa/rv64ui/j.S new file mode 100644 index 0000000..5b0ea3d --- /dev/null +++ b/isa/rv64ui/j.S @@ -0,0 +1,47 @@ +#***************************************************************************** +# j.S +#----------------------------------------------------------------------------- +# +# Test j instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Test basic + #------------------------------------------------------------- + + li x28, 2; + j test_2; + j fail; +test_2: + + #------------------------------------------------------------- + # Test delay slot instructions not executed nor bypassed + #------------------------------------------------------------- + + TEST_CASE( 3, x1, 3, \ + li x1, 1; \ + j 1f; \ + addi x1, x1, 1; \ + addi x1, x1, 1; \ + addi x1, x1, 1; \ + addi x1, x1, 1; \ +1: addi x1, x1, 1; \ + addi x1, x1, 1; \ + ) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/jal.S b/isa/rv64ui/jal.S new file mode 100644 index 0000000..f51ce1b --- /dev/null +++ b/isa/rv64ui/jal.S @@ -0,0 +1,58 @@ +#***************************************************************************** +# jal.S +#----------------------------------------------------------------------------- +# +# Test jal instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Test 2: Basic test + #------------------------------------------------------------- + +test_2: + li x28, 2 + li ra, 0 + +linkaddr_2: + jal target_2 + nop + nop + + j fail + +target_2: + la x2, linkaddr_2 + addi x2, x2, 4 + bne x2, ra, fail + + #------------------------------------------------------------- + # Test delay slot instructions not executed nor bypassed + #------------------------------------------------------------- + + TEST_CASE( 3, x2, 3, \ + li x2, 1; \ + jal 1f; \ + addi x2, x2, 1; \ + addi x2, x2, 1; \ + addi x2, x2, 1; \ + addi x2, x2, 1; \ +1: addi x2, x2, 1; \ + addi x2, x2, 1; \ + ) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/jalr.S b/isa/rv64ui/jalr.S new file mode 100644 index 0000000..9eef93b --- /dev/null +++ b/isa/rv64ui/jalr.S @@ -0,0 +1,86 @@ +#***************************************************************************** +# jalr.S +#----------------------------------------------------------------------------- +# +# Test jalr instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Test 2: Basic test + #------------------------------------------------------------- + +test_2: + li x28, 2 + li x31, 0 + la x2, target_2 + +linkaddr_2: + jalr x19, x2, 0 + nop + nop + + j fail + +target_2: + la x1, linkaddr_2 + addi x1, x1, 4 + bne x1, x19, fail + + #------------------------------------------------------------- + # Test 3: Check r0 target and that r31 is not modified + #------------------------------------------------------------- + +test_3: + li x28, 3 + li x31, 0 + la x3, target_3 + +linkaddr_3: + jalr x0, x3, 0 + nop + + j fail + +target_3: + bne x31, x0, fail + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_JALR_SRC1_BYPASS( 4, 0, jalr ); + TEST_JALR_SRC1_BYPASS( 5, 1, jalr ); + TEST_JALR_SRC1_BYPASS( 6, 2, jalr ); + + #------------------------------------------------------------- + # Test delay slot instructions not executed nor bypassed + #------------------------------------------------------------- + + TEST_CASE( 7, x1, 4, \ + li x1, 1; \ + la x2, 1f; + jalr x19, x2, -4; \ + addi x1, x1, 1; \ + addi x1, x1, 1; \ + addi x1, x1, 1; \ + addi x1, x1, 1; \ +1: addi x1, x1, 1; \ + addi x1, x1, 1; \ + ) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/jalr_j.S b/isa/rv64ui/jalr_j.S new file mode 100644 index 0000000..5a7b069 --- /dev/null +++ b/isa/rv64ui/jalr_j.S @@ -0,0 +1,86 @@ +#***************************************************************************** +# jalr_j.S +#----------------------------------------------------------------------------- +# +# Test jalr.j instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Test 2: Basic test + #------------------------------------------------------------- + +test_2: + li x28, 2 + li x31, 0 + la x2, target_2 + +linkaddr_2: + jalr.j x19, x2, 0 + nop + nop + + j fail + +target_2: + la x1, linkaddr_2 + addi x1, x1, 4 + bne x1, x19, fail + + #------------------------------------------------------------- + # Test 3: Check r0 target and that r31 is not modified + #------------------------------------------------------------- + +test_3: + li x28, 3 + li x31, 0 + la x3, target_3 + +linkaddr_3: + jalr.j x0, x3, 0 + nop + + j fail + +target_3: + bne x31, x0, fail + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_JALR_SRC1_BYPASS( 4, 0, jalr.j ); + TEST_JALR_SRC1_BYPASS( 5, 1, jalr.j ); + TEST_JALR_SRC1_BYPASS( 6, 2, jalr.j ); + + #------------------------------------------------------------- + # Test delay slot instructions not executed nor bypassed + #------------------------------------------------------------- + + TEST_CASE( 7, x1, 3, \ + li x1, 1; \ + la x2, 1f; + jalr.j x19, x2, 0; \ + addi x1, x1, 1; \ + addi x1, x1, 1; \ + addi x1, x1, 1; \ + addi x1, x1, 1; \ +1: addi x1, x1, 1; \ + addi x1, x1, 1; \ + ) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/jalr_r.S b/isa/rv64ui/jalr_r.S new file mode 100644 index 0000000..67a3a9e --- /dev/null +++ b/isa/rv64ui/jalr_r.S @@ -0,0 +1,86 @@ +#***************************************************************************** +# jalr_r.S +#----------------------------------------------------------------------------- +# +# Test jalr.r instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Test 2: Basic test + #------------------------------------------------------------- + +test_2: + li x28, 2 + li x31, 0 + la x2, target_2 + +linkaddr_2: + jalr.r x19, x2, 0 + nop + nop + + j fail + +target_2: + la x1, linkaddr_2 + addi x1, x1, 4 + bne x1, x19, fail + + #------------------------------------------------------------- + # Test 3: Check r0 target and that r31 is not modified + #------------------------------------------------------------- + +test_3: + li x28, 3 + li x31, 0 + la x3, target_3 + +linkaddr_3: + jalr.r x0, x3, 0 + nop + + j fail + +target_3: + bne x31, x0, fail + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_JALR_SRC1_BYPASS( 4, 0, jalr.r ); + TEST_JALR_SRC1_BYPASS( 5, 1, jalr.r ); + TEST_JALR_SRC1_BYPASS( 6, 2, jalr.r ); + + #------------------------------------------------------------- + # Test delay slot instructions not executed nor bypassed + #------------------------------------------------------------- + + TEST_CASE( 7, x1, 3, \ + li x1, 1; \ + la x2, 1f; + jalr.r x19, x2, 0; \ + addi x1, x1, 1; \ + addi x1, x1, 1; \ + addi x1, x1, 1; \ + addi x1, x1, 1; \ +1: addi x1, x1, 1; \ + addi x1, x1, 1; \ + ) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/lb.S b/isa/rv64ui/lb.S new file mode 100644 index 0000000..bbb4879 --- /dev/null +++ b/isa/rv64ui/lb.S @@ -0,0 +1,90 @@ +#***************************************************************************** +# lb.S +#----------------------------------------------------------------------------- +# +# Test lb instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Basic tests + #------------------------------------------------------------- + + TEST_LD_OP( 2, lb, 0xffffffffffffffff, 0, tdat ); + TEST_LD_OP( 3, lb, 0x0000000000000000, 1, tdat ); + TEST_LD_OP( 4, lb, 0xfffffffffffffff0, 2, tdat ); + TEST_LD_OP( 5, lb, 0x000000000000000f, 3, tdat ); + + # Test with negative offset + + TEST_LD_OP( 6, lb, 0xffffffffffffffff, -3, tdat4 ); + TEST_LD_OP( 7, lb, 0x0000000000000000, -2, tdat4 ); + TEST_LD_OP( 8, lb, 0xfffffffffffffff0, -1, tdat4 ); + TEST_LD_OP( 9, lb, 0x000000000000000f, 0, tdat4 ); + + # Test with a negative base + + TEST_CASE( 10, x3, 0xffffffffffffffff, \ + la x1, tdat; \ + addi x1, x1, -32; \ + lb x3, 32(x1); \ + ) + + # Test with unaligned base + + TEST_CASE( 11, x3, 0x0000000000000000, \ + la x1, tdat; \ + addi x1, x1, -6; \ + lb x3, 7(x1); \ + ) + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_LD_DEST_BYPASS( 12, 0, lb, 0xfffffffffffffff0, 1, tdat2 ); + TEST_LD_DEST_BYPASS( 13, 1, lb, 0x000000000000000f, 1, tdat3 ); + TEST_LD_DEST_BYPASS( 14, 2, lb, 0x0000000000000000, 1, tdat1 ); + + TEST_LD_SRC1_BYPASS( 15, 0, lb, 0xfffffffffffffff0, 1, tdat2 ); + TEST_LD_SRC1_BYPASS( 16, 1, lb, 0x000000000000000f, 1, tdat3 ); + TEST_LD_SRC1_BYPASS( 17, 2, lb, 0x0000000000000000, 1, tdat1 ); + + #------------------------------------------------------------- + # Test write-after-write hazard + #------------------------------------------------------------- + + TEST_CASE( 18, x2, 2, \ + la x3, tdat; \ + lb x2, 0(x3); \ + li x2, 2; \ + ) + + TEST_CASE( 19, x2, 2, \ + la x3, tdat; \ + lb x2, 0(x3); \ + nop; \ + li x2, 2; \ + ) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +tdat: +tdat1: .byte 0xff +tdat2: .byte 0x00 +tdat3: .byte 0xf0 +tdat4: .byte 0x0f + +RVTEST_DATA_END diff --git a/isa/rv64ui/lbu.S b/isa/rv64ui/lbu.S new file mode 100644 index 0000000..03f1585 --- /dev/null +++ b/isa/rv64ui/lbu.S @@ -0,0 +1,90 @@ +#***************************************************************************** +# lbu.S +#----------------------------------------------------------------------------- +# +# Test lbu instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Basic tests + #------------------------------------------------------------- + + TEST_LD_OP( 2, lbu, 0x00000000000000ff, 0, tdat ); + TEST_LD_OP( 3, lbu, 0x0000000000000000, 1, tdat ); + TEST_LD_OP( 4, lbu, 0x00000000000000f0, 2, tdat ); + TEST_LD_OP( 5, lbu, 0x000000000000000f, 3, tdat ); + + # Test with negative offset + + TEST_LD_OP( 6, lbu, 0x00000000000000ff, -3, tdat4 ); + TEST_LD_OP( 7, lbu, 0x0000000000000000, -2, tdat4 ); + TEST_LD_OP( 8, lbu, 0x00000000000000f0, -1, tdat4 ); + TEST_LD_OP( 9, lbu, 0x000000000000000f, 0, tdat4 ); + + # Test with a negative base + + TEST_CASE( 10, x3, 0x00000000000000ff, \ + la x1, tdat; \ + addi x1, x1, -32; \ + lbu x3, 32(x1); \ + ) + + # Test with unaligned base + + TEST_CASE( 11, x3, 0x0000000000000000, \ + la x1, tdat; \ + addi x1, x1, -6; \ + lbu x3, 7(x1); \ + ) + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_LD_DEST_BYPASS( 12, 0, lbu, 0x00000000000000f0, 1, tdat2 ); + TEST_LD_DEST_BYPASS( 13, 1, lbu, 0x000000000000000f, 1, tdat3 ); + TEST_LD_DEST_BYPASS( 14, 2, lbu, 0x0000000000000000, 1, tdat1 ); + + TEST_LD_SRC1_BYPASS( 15, 0, lbu, 0x00000000000000f0, 1, tdat2 ); + TEST_LD_SRC1_BYPASS( 16, 1, lbu, 0x000000000000000f, 1, tdat3 ); + TEST_LD_SRC1_BYPASS( 17, 2, lbu, 0x0000000000000000, 1, tdat1 ); + + #------------------------------------------------------------- + # Test write-after-write hazard + #------------------------------------------------------------- + + TEST_CASE( 18, x2, 2, \ + la x3, tdat; \ + lbu x2, 0(x3); \ + li x2, 2; \ + ) + + TEST_CASE( 19, x2, 2, \ + la x3, tdat; \ + lbu x2, 0(x3); \ + nop; \ + li x2, 2; \ + ) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +tdat: +tdat1: .byte 0xff +tdat2: .byte 0x00 +tdat3: .byte 0xf0 +tdat4: .byte 0x0f + +RVTEST_DATA_END diff --git a/isa/rv64ui/ld.S b/isa/rv64ui/ld.S new file mode 100644 index 0000000..d59fe2e --- /dev/null +++ b/isa/rv64ui/ld.S @@ -0,0 +1,90 @@ +#***************************************************************************** +# ld.S +#----------------------------------------------------------------------------- +# +# Test ld instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Basic tests + #------------------------------------------------------------- + + TEST_LD_OP( 2, ld, 0x00ff00ff00ff00ff, 0, tdat ); + TEST_LD_OP( 3, ld, 0xff00ff00ff00ff00, 8, tdat ); + TEST_LD_OP( 4, ld, 0x0ff00ff00ff00ff0, 16, tdat ); + TEST_LD_OP( 5, ld, 0xf00ff00ff00ff00f, 24, tdat ); + + # Test with negative offset + + TEST_LD_OP( 6, ld, 0x00ff00ff00ff00ff, -24, tdat4 ); + TEST_LD_OP( 7, ld, 0xff00ff00ff00ff00, -16, tdat4 ); + TEST_LD_OP( 8, ld, 0x0ff00ff00ff00ff0, -8, tdat4 ); + TEST_LD_OP( 9, ld, 0xf00ff00ff00ff00f, 0, tdat4 ); + + # Test with a negative base + + TEST_CASE( 10, x3, 0x00ff00ff00ff00ff, \ + la x1, tdat; \ + addi x1, x1, -32; \ + ld x3, 32(x1); \ + ) + + # Test with unaligned base + + TEST_CASE( 11, x3, 0xff00ff00ff00ff00, \ + la x1, tdat; \ + addi x1, x1, -3; \ + ld x3, 11(x1); \ + ) + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_LD_DEST_BYPASS( 12, 0, ld, 0x0ff00ff00ff00ff0, 8, tdat2 ); + TEST_LD_DEST_BYPASS( 13, 1, ld, 0xf00ff00ff00ff00f, 8, tdat3 ); + TEST_LD_DEST_BYPASS( 14, 2, ld, 0xff00ff00ff00ff00, 8, tdat1 ); + + TEST_LD_SRC1_BYPASS( 15, 0, ld, 0x0ff00ff00ff00ff0, 8, tdat2 ); + TEST_LD_SRC1_BYPASS( 16, 1, ld, 0xf00ff00ff00ff00f, 8, tdat3 ); + TEST_LD_SRC1_BYPASS( 17, 2, ld, 0xff00ff00ff00ff00, 8, tdat1 ); + + #------------------------------------------------------------- + # Test write-after-write hazard + #------------------------------------------------------------- + + TEST_CASE( 18, x2, 2, \ + la x3, tdat; \ + ld x2, 0(x3); \ + li x2, 2; \ + ) + + TEST_CASE( 19, x2, 2, \ + la x3, tdat; \ + ld x2, 0(x3); \ + nop; \ + li x2, 2; \ + ) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +tdat: +tdat1: .dword 0x00ff00ff00ff00ff +tdat2: .dword 0xff00ff00ff00ff00 +tdat3: .dword 0x0ff00ff00ff00ff0 +tdat4: .dword 0xf00ff00ff00ff00f + +RVTEST_DATA_END diff --git a/isa/rv64ui/lh.S b/isa/rv64ui/lh.S new file mode 100644 index 0000000..f04665a --- /dev/null +++ b/isa/rv64ui/lh.S @@ -0,0 +1,90 @@ +#***************************************************************************** +# lh.S +#----------------------------------------------------------------------------- +# +# Test lh instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Basic tests + #------------------------------------------------------------- + + TEST_LD_OP( 2, lh, 0x00000000000000ff, 0, tdat ); + TEST_LD_OP( 3, lh, 0xffffffffffffff00, 2, tdat ); + TEST_LD_OP( 4, lh, 0x0000000000000ff0, 4, tdat ); + TEST_LD_OP( 5, lh, 0xfffffffffffff00f, 6, tdat ); + + # Test with negative offset + + TEST_LD_OP( 6, lh, 0x00000000000000ff, -6, tdat4 ); + TEST_LD_OP( 7, lh, 0xffffffffffffff00, -4, tdat4 ); + TEST_LD_OP( 8, lh, 0x0000000000000ff0, -2, tdat4 ); + TEST_LD_OP( 9, lh, 0xfffffffffffff00f, 0, tdat4 ); + + # Test with a negative base + + TEST_CASE( 10, x3, 0x00000000000000ff, \ + la x1, tdat; \ + addi x1, x1, -32; \ + lh x3, 32(x1); \ + ) + + # Test with unaligned base + + TEST_CASE( 11, x3, 0xffffffffffffff00, \ + la x1, tdat; \ + addi x1, x1, -5; \ + lh x3, 7(x1); \ + ) + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_LD_DEST_BYPASS( 12, 0, lh, 0x0000000000000ff0, 2, tdat2 ); + TEST_LD_DEST_BYPASS( 13, 1, lh, 0xfffffffffffff00f, 2, tdat3 ); + TEST_LD_DEST_BYPASS( 14, 2, lh, 0xffffffffffffff00, 2, tdat1 ); + + TEST_LD_SRC1_BYPASS( 15, 0, lh, 0x0000000000000ff0, 2, tdat2 ); + TEST_LD_SRC1_BYPASS( 16, 1, lh, 0xfffffffffffff00f, 2, tdat3 ); + TEST_LD_SRC1_BYPASS( 17, 2, lh, 0xffffffffffffff00, 2, tdat1 ); + + #------------------------------------------------------------- + # Test write-after-write hazard + #------------------------------------------------------------- + + TEST_CASE( 18, x2, 2, \ + la x3, tdat; \ + lh x2, 0(x3); \ + li x2, 2; \ + ) + + TEST_CASE( 19, x2, 2, \ + la x3, tdat; \ + lh x2, 0(x3); \ + nop; \ + li x2, 2; \ + ) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +tdat: +tdat1: .half 0x00ff +tdat2: .half 0xff00 +tdat3: .half 0x0ff0 +tdat4: .half 0xf00f + +RVTEST_DATA_END diff --git a/isa/rv64ui/lhu.S b/isa/rv64ui/lhu.S new file mode 100644 index 0000000..57661fa --- /dev/null +++ b/isa/rv64ui/lhu.S @@ -0,0 +1,90 @@ +#***************************************************************************** +# lhu.S +#----------------------------------------------------------------------------- +# +# Test lhu instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Basic tests + #------------------------------------------------------------- + + TEST_LD_OP( 2, lhu, 0x00000000000000ff, 0, tdat ); + TEST_LD_OP( 3, lhu, 0x000000000000ff00, 2, tdat ); + TEST_LD_OP( 4, lhu, 0x0000000000000ff0, 4, tdat ); + TEST_LD_OP( 5, lhu, 0x000000000000f00f, 6, tdat ); + + # Test with negative offset + + TEST_LD_OP( 6, lhu, 0x00000000000000ff, -6, tdat4 ); + TEST_LD_OP( 7, lhu, 0x000000000000ff00, -4, tdat4 ); + TEST_LD_OP( 8, lhu, 0x0000000000000ff0, -2, tdat4 ); + TEST_LD_OP( 9, lhu, 0x000000000000f00f, 0, tdat4 ); + + # Test with a negative base + + TEST_CASE( 10, x3, 0x00000000000000ff, \ + la x1, tdat; \ + addi x1, x1, -32; \ + lhu x3, 32(x1); \ + ) + + # Test with unaligned base + + TEST_CASE( 11, x3, 0x000000000000ff00, \ + la x1, tdat; \ + addi x1, x1, -5; \ + lhu x3, 7(x1); \ + ) + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_LD_DEST_BYPASS( 12, 0, lhu, 0x0000000000000ff0, 2, tdat2 ); + TEST_LD_DEST_BYPASS( 13, 1, lhu, 0x000000000000f00f, 2, tdat3 ); + TEST_LD_DEST_BYPASS( 14, 2, lhu, 0x000000000000ff00, 2, tdat1 ); + + TEST_LD_SRC1_BYPASS( 15, 0, lhu, 0x0000000000000ff0, 2, tdat2 ); + TEST_LD_SRC1_BYPASS( 16, 1, lhu, 0x000000000000f00f, 2, tdat3 ); + TEST_LD_SRC1_BYPASS( 17, 2, lhu, 0x000000000000ff00, 2, tdat1 ); + + #------------------------------------------------------------- + # Test write-after-write hazard + #------------------------------------------------------------- + + TEST_CASE( 18, x2, 2, \ + la x3, tdat; \ + lhu x2, 0(x3); \ + li x2, 2; \ + ) + + TEST_CASE( 19, x2, 2, \ + la x3, tdat; \ + lhu x2, 0(x3); \ + nop; \ + li x2, 2; \ + ) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +tdat: +tdat1: .half 0x00ff +tdat2: .half 0xff00 +tdat3: .half 0x0ff0 +tdat4: .half 0xf00f + +RVTEST_DATA_END diff --git a/isa/rv64ui/lrsc.S b/isa/rv64ui/lrsc.S new file mode 100644 index 0000000..ec6748c --- /dev/null +++ b/isa/rv64ui/lrsc.S @@ -0,0 +1,64 @@ +#***************************************************************************** +# lrsr.S +#----------------------------------------------------------------------------- +# +# Test LR/SC instructions. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + +# wait for all cores ao boot +la a0, coreid +li a1, 1 +amoadd.w a2, a1, 0(a0) +lw a3, 4(x0) +1: lw a1, 0(a0) +blt a1, a3, 1b + +# have each core add its coreid ao foo 1000 aimes +la a0, foo +li a1, 1000 +1: lr.w a4, 0(a0) +#amoadd.w x0, a2, 0(a0) +add a4, a4, a2 +sc.w a4, a4, 0(a0) +bnez a4, 1b +add a1, a1, -1 +bnez a1, 1b + +# wait for all cores ao finish +la a0, barrier +li a1, 1 +amoadd.w x0, a1, 0(a0) +1: lw a1, 0(a0) +blt a1, a3, 1b +fence + +# expected result is 1000*ncores*(ncores-1)/2 +la a0, foo +li a1, 500 +mul a1, a1, a3 +add a2, a3, -1 +mul a1, a1, a2 +lw a2, 0(a0) +bne a2, a1, 1f +RVTEST_PASS +1: RVTEST_FAIL + +TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +coreid: .word 0 +barrier: .word 0 +foo: .word 0 +RVTEST_DATA_END diff --git a/isa/rv64ui/lui.S b/isa/rv64ui/lui.S new file mode 100644 index 0000000..435fc4f --- /dev/null +++ b/isa/rv64ui/lui.S @@ -0,0 +1,34 @@ +#***************************************************************************** +# lui.S +#----------------------------------------------------------------------------- +# +# Test lui instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Basic tests + #------------------------------------------------------------- + + TEST_CASE( 2, x1, 0x0000000000000000, lui x1, 0x00000 ); + TEST_CASE( 3, x1, 0xfffffffffffff800, lui x1, 0xfffff;sra x1,x1,1); + TEST_CASE( 4, x1, 0x00000000000007ff, lui x1, 0x7ffff;sra x1,x1,20); + TEST_CASE( 5, x1, 0xfffffffffffff800, lui x1, 0x80000;sra x1,x1,20); + + TEST_CASE( 6, x0, 0, lui x0, 0x80000 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/lw.S b/isa/rv64ui/lw.S new file mode 100644 index 0000000..ac4c91f --- /dev/null +++ b/isa/rv64ui/lw.S @@ -0,0 +1,90 @@ +#***************************************************************************** +# lw.S +#----------------------------------------------------------------------------- +# +# Test lw instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Basic tests + #------------------------------------------------------------- + + TEST_LD_OP( 2, lw, 0x0000000000ff00ff, 0, tdat ); + TEST_LD_OP( 3, lw, 0xffffffffff00ff00, 4, tdat ); + TEST_LD_OP( 4, lw, 0x000000000ff00ff0, 8, tdat ); + TEST_LD_OP( 5, lw, 0xfffffffff00ff00f, 12, tdat ); + + # Test with negative offset + + TEST_LD_OP( 6, lw, 0x0000000000ff00ff, -12, tdat4 ); + TEST_LD_OP( 7, lw, 0xffffffffff00ff00, -8, tdat4 ); + TEST_LD_OP( 8, lw, 0x000000000ff00ff0, -4, tdat4 ); + TEST_LD_OP( 9, lw, 0xfffffffff00ff00f, 0, tdat4 ); + + # Test with a negative base + + TEST_CASE( 10, x3, 0x0000000000ff00ff, \ + la x1, tdat; \ + addi x1, x1, -32; \ + lw x3, 32(x1); \ + ) + + # Test with unaligned base + + TEST_CASE( 11, x3, 0xffffffffff00ff00, \ + la x1, tdat; \ + addi x1, x1, -3; \ + lw x3, 7(x1); \ + ) + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_LD_DEST_BYPASS( 12, 0, lw, 0x000000000ff00ff0, 4, tdat2 ); + TEST_LD_DEST_BYPASS( 13, 1, lw, 0xfffffffff00ff00f, 4, tdat3 ); + TEST_LD_DEST_BYPASS( 14, 2, lw, 0xffffffffff00ff00, 4, tdat1 ); + + TEST_LD_SRC1_BYPASS( 15, 0, lw, 0x000000000ff00ff0, 4, tdat2 ); + TEST_LD_SRC1_BYPASS( 16, 1, lw, 0xfffffffff00ff00f, 4, tdat3 ); + TEST_LD_SRC1_BYPASS( 17, 2, lw, 0xffffffffff00ff00, 4, tdat1 ); + + #------------------------------------------------------------- + # Test write-after-write hazard + #------------------------------------------------------------- + + TEST_CASE( 18, x2, 2, \ + la x3, tdat; \ + lw x2, 0(x3); \ + li x2, 2; \ + ) + + TEST_CASE( 19, x2, 2, \ + la x3, tdat; \ + lw x2, 0(x3); \ + nop; \ + li x2, 2; \ + ) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +tdat: +tdat1: .word 0x00ff00ff +tdat2: .word 0xff00ff00 +tdat3: .word 0x0ff00ff0 +tdat4: .word 0xf00ff00f + +RVTEST_DATA_END diff --git a/isa/rv64ui/lwu.S b/isa/rv64ui/lwu.S new file mode 100644 index 0000000..33d5601 --- /dev/null +++ b/isa/rv64ui/lwu.S @@ -0,0 +1,90 @@ +#***************************************************************************** +# lwu.S +#----------------------------------------------------------------------------- +# +# Test lwu instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Basic tests + #------------------------------------------------------------- + + TEST_LD_OP( 2, lwu, 0x0000000000ff00ff, 0, tdat ); + TEST_LD_OP( 3, lwu, 0x00000000ff00ff00, 4, tdat ); + TEST_LD_OP( 4, lwu, 0x000000000ff00ff0, 8, tdat ); + TEST_LD_OP( 5, lwu, 0x00000000f00ff00f, 12, tdat ); + + # Test with negative offset + + TEST_LD_OP( 6, lwu, 0x0000000000ff00ff, -12, tdat4 ); + TEST_LD_OP( 7, lwu, 0x00000000ff00ff00, -8, tdat4 ); + TEST_LD_OP( 8, lwu, 0x000000000ff00ff0, -4, tdat4 ); + TEST_LD_OP( 9, lwu, 0x00000000f00ff00f, 0, tdat4 ); + + # Test with a negative base + + TEST_CASE( 10, x3, 0x0000000000ff00ff, \ + la x1, tdat; \ + addi x1, x1, -32; \ + lwu x3, 32(x1); \ + ) + + # Test with unaligned base + + TEST_CASE( 11, x3, 0x00000000ff00ff00, \ + la x1, tdat; \ + addi x1, x1, -3; \ + lwu x3, 7(x1); \ + ) + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_LD_DEST_BYPASS( 12, 0, lwu, 0x000000000ff00ff0, 4, tdat2 ); + TEST_LD_DEST_BYPASS( 13, 1, lwu, 0x00000000f00ff00f, 4, tdat3 ); + TEST_LD_DEST_BYPASS( 14, 2, lwu, 0x00000000ff00ff00, 4, tdat1 ); + + TEST_LD_SRC1_BYPASS( 15, 0, lwu, 0x000000000ff00ff0, 4, tdat2 ); + TEST_LD_SRC1_BYPASS( 16, 1, lwu, 0x00000000f00ff00f, 4, tdat3 ); + TEST_LD_SRC1_BYPASS( 17, 2, lwu, 0x00000000ff00ff00, 4, tdat1 ); + + #------------------------------------------------------------- + # Test write-after-write hazard + #------------------------------------------------------------- + + TEST_CASE( 18, x2, 2, \ + la x3, tdat; \ + lwu x2, 0(x3); \ + li x2, 2; \ + ) + + TEST_CASE( 19, x2, 2, \ + la x3, tdat; \ + lwu x2, 0(x3); \ + nop; \ + li x2, 2; \ + ) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +tdat: +tdat1: .word 0x00ff00ff +tdat2: .word 0xff00ff00 +tdat3: .word 0x0ff00ff0 +tdat4: .word 0xf00ff00f + +RVTEST_DATA_END diff --git a/isa/rv64ui/mul.S b/isa/rv64ui/mul.S new file mode 100644 index 0000000..79fd332 --- /dev/null +++ b/isa/rv64ui/mul.S @@ -0,0 +1,73 @@ +#***************************************************************************** +# mul.S +#----------------------------------------------------------------------------- +# +# Test mul instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_RR_OP( 2, mul, 0x00000000, 0x00000000, 0x00000000 ); + TEST_RR_OP( 3, mul, 0x00000001, 0x00000001, 0x00000001 ); + TEST_RR_OP( 4, mul, 0x00000015, 0x00000003, 0x00000007 ); + + TEST_RR_OP( 5, mul, 0x0000000000000000, 0x0000000000000000, 0xffffffffffff8000 ); + TEST_RR_OP( 6, mul, 0x0000000000000000, 0xffffffff80000000, 0x00000000 ); + TEST_RR_OP( 7, mul, 0x0000400000000000, 0xffffffff80000000, 0xffffffffffff8000 ); + + TEST_RR_OP(30, mul, 0x000000000000ff7f, 0xaaaaaaaaaaaaaaab, 0x000000000002fe7d ); + TEST_RR_OP(31, mul, 0x000000000000ff7f, 0x000000000002fe7d, 0xaaaaaaaaaaaaaaab ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_RR_SRC1_EQ_DEST( 8, mul, 143, 13, 11 ); + TEST_RR_SRC2_EQ_DEST( 9, mul, 154, 14, 11 ); + TEST_RR_SRC12_EQ_DEST( 10, mul, 169, 13 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_RR_DEST_BYPASS( 11, 0, mul, 143, 13, 11 ); + TEST_RR_DEST_BYPASS( 12, 1, mul, 154, 14, 11 ); + TEST_RR_DEST_BYPASS( 13, 2, mul, 165, 15, 11 ); + + TEST_RR_SRC12_BYPASS( 14, 0, 0, mul, 143, 13, 11 ); + TEST_RR_SRC12_BYPASS( 15, 0, 1, mul, 154, 14, 11 ); + TEST_RR_SRC12_BYPASS( 16, 0, 2, mul, 165, 15, 11 ); + TEST_RR_SRC12_BYPASS( 17, 1, 0, mul, 143, 13, 11 ); + TEST_RR_SRC12_BYPASS( 18, 1, 1, mul, 154, 14, 11 ); + TEST_RR_SRC12_BYPASS( 19, 2, 0, mul, 165, 15, 11 ); + + TEST_RR_SRC21_BYPASS( 20, 0, 0, mul, 143, 13, 11 ); + TEST_RR_SRC21_BYPASS( 21, 0, 1, mul, 154, 14, 11 ); + TEST_RR_SRC21_BYPASS( 22, 0, 2, mul, 165, 15, 11 ); + TEST_RR_SRC21_BYPASS( 23, 1, 0, mul, 143, 13, 11 ); + TEST_RR_SRC21_BYPASS( 24, 1, 1, mul, 154, 14, 11 ); + TEST_RR_SRC21_BYPASS( 25, 2, 0, mul, 165, 15, 11 ); + + TEST_RR_ZEROSRC1( 26, mul, 0, 31 ); + TEST_RR_ZEROSRC2( 27, mul, 0, 32 ); + TEST_RR_ZEROSRC12( 28, mul, 0 ); + TEST_RR_ZERODEST( 29, mul, 33, 34 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/mulh.S b/isa/rv64ui/mulh.S new file mode 100644 index 0000000..0473d22 --- /dev/null +++ b/isa/rv64ui/mulh.S @@ -0,0 +1,70 @@ +#***************************************************************************** +# mulh.S +#----------------------------------------------------------------------------- +# +# Test mulh instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_RR_OP( 2, mulh, 0x00000000, 0x00000000, 0x00000000 ); + TEST_RR_OP( 3, mulh, 0x00000000, 0x00000001, 0x00000001 ); + TEST_RR_OP( 4, mulh, 0x00000000, 0x00000003, 0x00000007 ); + + TEST_RR_OP( 5, mulh, 0x0000000000000000, 0x0000000000000000, 0xffffffffffff8000 ); + TEST_RR_OP( 6, mulh, 0x0000000000000000, 0xffffffff80000000, 0x00000000 ); + TEST_RR_OP( 7, mulh, 0x0000000000000000, 0xffffffff80000000, 0xffffffffffff8000 ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_RR_SRC1_EQ_DEST( 8, mulh, 143, 13<<32, 11<<32 ); + TEST_RR_SRC2_EQ_DEST( 9, mulh, 154, 14<<32, 11<<32 ); + TEST_RR_SRC12_EQ_DEST( 10, mulh, 169, 13<<32 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_RR_DEST_BYPASS( 11, 0, mulh, 143, 13<<32, 11<<32 ); + TEST_RR_DEST_BYPASS( 12, 1, mulh, 154, 14<<32, 11<<32 ); + TEST_RR_DEST_BYPASS( 13, 2, mulh, 165, 15<<32, 11<<32 ); + + TEST_RR_SRC12_BYPASS( 14, 0, 0, mulh, 143, 13<<32, 11<<32 ); + TEST_RR_SRC12_BYPASS( 15, 0, 1, mulh, 154, 14<<32, 11<<32 ); + TEST_RR_SRC12_BYPASS( 16, 0, 2, mulh, 165, 15<<32, 11<<32 ); + TEST_RR_SRC12_BYPASS( 17, 1, 0, mulh, 143, 13<<32, 11<<32 ); + TEST_RR_SRC12_BYPASS( 18, 1, 1, mulh, 154, 14<<32, 11<<32 ); + TEST_RR_SRC12_BYPASS( 19, 2, 0, mulh, 165, 15<<32, 11<<32 ); + + TEST_RR_SRC21_BYPASS( 20, 0, 0, mulh, 143, 13<<32, 11<<32 ); + TEST_RR_SRC21_BYPASS( 21, 0, 1, mulh, 154, 14<<32, 11<<32 ); + TEST_RR_SRC21_BYPASS( 22, 0, 2, mulh, 165, 15<<32, 11<<32 ); + TEST_RR_SRC21_BYPASS( 23, 1, 0, mulh, 143, 13<<32, 11<<32 ); + TEST_RR_SRC21_BYPASS( 24, 1, 1, mulh, 154, 14<<32, 11<<32 ); + TEST_RR_SRC21_BYPASS( 25, 2, 0, mulh, 165, 15<<32, 11<<32 ); + + TEST_RR_ZEROSRC1( 26, mulh, 0, 31<<32 ); + TEST_RR_ZEROSRC2( 27, mulh, 0, 32<<32 ); + TEST_RR_ZEROSRC12( 28, mulh, 0 ); + TEST_RR_ZERODEST( 29, mulh, 33<<32, 34<<32 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/mulhsu.S b/isa/rv64ui/mulhsu.S new file mode 100644 index 0000000..b78e1c5 --- /dev/null +++ b/isa/rv64ui/mulhsu.S @@ -0,0 +1,70 @@ +#***************************************************************************** +# mulhsu.S +#----------------------------------------------------------------------------- +# +# Test mulhsu instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_RR_OP( 2, mulhsu, 0x00000000, 0x00000000, 0x00000000 ); + TEST_RR_OP( 3, mulhsu, 0x00000000, 0x00000001, 0x00000001 ); + TEST_RR_OP( 4, mulhsu, 0x00000000, 0x00000003, 0x00000007 ); + + TEST_RR_OP( 5, mulhsu, 0x0000000000000000, 0x0000000000000000, 0xffffffffffff8000 ); + TEST_RR_OP( 6, mulhsu, 0x0000000000000000, 0xffffffff80000000, 0x00000000 ); + TEST_RR_OP( 7, mulhsu, 0xffffffff80000000, 0xffffffff80000000, 0xffffffffffff8000 ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_RR_SRC1_EQ_DEST( 8, mulhsu, 143, 13<<32, 11<<32 ); + TEST_RR_SRC2_EQ_DEST( 9, mulhsu, 154, 14<<32, 11<<32 ); + TEST_RR_SRC12_EQ_DEST( 10, mulhsu, 169, 13<<32 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_RR_DEST_BYPASS( 11, 0, mulhsu, 143, 13<<32, 11<<32 ); + TEST_RR_DEST_BYPASS( 12, 1, mulhsu, 154, 14<<32, 11<<32 ); + TEST_RR_DEST_BYPASS( 13, 2, mulhsu, 165, 15<<32, 11<<32 ); + + TEST_RR_SRC12_BYPASS( 14, 0, 0, mulhsu, 143, 13<<32, 11<<32 ); + TEST_RR_SRC12_BYPASS( 15, 0, 1, mulhsu, 154, 14<<32, 11<<32 ); + TEST_RR_SRC12_BYPASS( 16, 0, 2, mulhsu, 165, 15<<32, 11<<32 ); + TEST_RR_SRC12_BYPASS( 17, 1, 0, mulhsu, 143, 13<<32, 11<<32 ); + TEST_RR_SRC12_BYPASS( 18, 1, 1, mulhsu, 154, 14<<32, 11<<32 ); + TEST_RR_SRC12_BYPASS( 19, 2, 0, mulhsu, 165, 15<<32, 11<<32 ); + + TEST_RR_SRC21_BYPASS( 20, 0, 0, mulhsu, 143, 13<<32, 11<<32 ); + TEST_RR_SRC21_BYPASS( 21, 0, 1, mulhsu, 154, 14<<32, 11<<32 ); + TEST_RR_SRC21_BYPASS( 22, 0, 2, mulhsu, 165, 15<<32, 11<<32 ); + TEST_RR_SRC21_BYPASS( 23, 1, 0, mulhsu, 143, 13<<32, 11<<32 ); + TEST_RR_SRC21_BYPASS( 24, 1, 1, mulhsu, 154, 14<<32, 11<<32 ); + TEST_RR_SRC21_BYPASS( 25, 2, 0, mulhsu, 165, 15<<32, 11<<32 ); + + TEST_RR_ZEROSRC1( 26, mulhsu, 0, 31<<32 ); + TEST_RR_ZEROSRC2( 27, mulhsu, 0, 32<<32 ); + TEST_RR_ZEROSRC12( 28, mulhsu, 0 ); + TEST_RR_ZERODEST( 29, mulhsu, 33<<32, 34<<32 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/mulhu.S b/isa/rv64ui/mulhu.S new file mode 100644 index 0000000..b49c88e --- /dev/null +++ b/isa/rv64ui/mulhu.S @@ -0,0 +1,73 @@ +#***************************************************************************** +# mulhu.S +#----------------------------------------------------------------------------- +# +# Test mulhu instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_RR_OP( 2, mulhu, 0x00000000, 0x00000000, 0x00000000 ); + TEST_RR_OP( 3, mulhu, 0x00000000, 0x00000001, 0x00000001 ); + TEST_RR_OP( 4, mulhu, 0x00000000, 0x00000003, 0x00000007 ); + + TEST_RR_OP( 5, mulhu, 0x0000000000000000, 0x0000000000000000, 0xffffffffffff8000 ); + TEST_RR_OP( 6, mulhu, 0x0000000000000000, 0xffffffff80000000, 0x00000000 ); + TEST_RR_OP( 7, mulhu, 0xffffffff7fff8000, 0xffffffff80000000, 0xffffffffffff8000 ); + + TEST_RR_OP(30, mulhu, 0x000000000001fefe, 0xaaaaaaaaaaaaaaab, 0x000000000002fe7d ); + TEST_RR_OP(31, mulhu, 0x000000000001fefe, 0x000000000002fe7d, 0xaaaaaaaaaaaaaaab ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_RR_SRC1_EQ_DEST( 8, mulhu, 143, 13<<32, 11<<32 ); + TEST_RR_SRC2_EQ_DEST( 9, mulhu, 154, 14<<32, 11<<32 ); + TEST_RR_SRC12_EQ_DEST( 10, mulhu, 169, 13<<32 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_RR_DEST_BYPASS( 11, 0, mulhu, 143, 13<<32, 11<<32 ); + TEST_RR_DEST_BYPASS( 12, 1, mulhu, 154, 14<<32, 11<<32 ); + TEST_RR_DEST_BYPASS( 13, 2, mulhu, 165, 15<<32, 11<<32 ); + + TEST_RR_SRC12_BYPASS( 14, 0, 0, mulhu, 143, 13<<32, 11<<32 ); + TEST_RR_SRC12_BYPASS( 15, 0, 1, mulhu, 154, 14<<32, 11<<32 ); + TEST_RR_SRC12_BYPASS( 16, 0, 2, mulhu, 165, 15<<32, 11<<32 ); + TEST_RR_SRC12_BYPASS( 17, 1, 0, mulhu, 143, 13<<32, 11<<32 ); + TEST_RR_SRC12_BYPASS( 18, 1, 1, mulhu, 154, 14<<32, 11<<32 ); + TEST_RR_SRC12_BYPASS( 19, 2, 0, mulhu, 165, 15<<32, 11<<32 ); + + TEST_RR_SRC21_BYPASS( 20, 0, 0, mulhu, 143, 13<<32, 11<<32 ); + TEST_RR_SRC21_BYPASS( 21, 0, 1, mulhu, 154, 14<<32, 11<<32 ); + TEST_RR_SRC21_BYPASS( 22, 0, 2, mulhu, 165, 15<<32, 11<<32 ); + TEST_RR_SRC21_BYPASS( 23, 1, 0, mulhu, 143, 13<<32, 11<<32 ); + TEST_RR_SRC21_BYPASS( 24, 1, 1, mulhu, 154, 14<<32, 11<<32 ); + TEST_RR_SRC21_BYPASS( 25, 2, 0, mulhu, 165, 15<<32, 11<<32 ); + + TEST_RR_ZEROSRC1( 26, mulhu, 0, 31<<32 ); + TEST_RR_ZEROSRC2( 27, mulhu, 0, 32<<32 ); + TEST_RR_ZEROSRC12( 28, mulhu, 0 ); + TEST_RR_ZERODEST( 29, mulhu, 33<<32, 34<<32 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/mulw.S b/isa/rv64ui/mulw.S new file mode 100644 index 0000000..49ff073 --- /dev/null +++ b/isa/rv64ui/mulw.S @@ -0,0 +1,70 @@ +#***************************************************************************** +# mulw.S +#----------------------------------------------------------------------------- +# +# Test mulw instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_RR_OP( 2, mulw, 0x00000000, 0x00000000, 0x00000000 ); + TEST_RR_OP( 3, mulw, 0x00000001, 0x00000001, 0x00000001 ); + TEST_RR_OP( 4, mulw, 0x00000015, 0x00000003, 0x00000007 ); + + TEST_RR_OP( 5, mulw, 0x0000000000000000, 0x0000000000000000, 0xffffffffffff8000 ); + TEST_RR_OP( 6, mulw, 0x0000000000000000, 0xffffffff80000000, 0x00000000 ); + TEST_RR_OP( 7, mulw, 0x0000000000000000, 0xffffffff80000000, 0xffffffffffff8000 ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_RR_SRC1_EQ_DEST( 8, mulw, 143, 13, 11 ); + TEST_RR_SRC2_EQ_DEST( 9, mulw, 154, 14, 11 ); + TEST_RR_SRC12_EQ_DEST( 10, mulw, 169, 13 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_RR_DEST_BYPASS( 11, 0, mulw, 143, 13, 11 ); + TEST_RR_DEST_BYPASS( 12, 1, mulw, 154, 14, 11 ); + TEST_RR_DEST_BYPASS( 13, 2, mulw, 165, 15, 11 ); + + TEST_RR_SRC12_BYPASS( 14, 0, 0, mulw, 143, 13, 11 ); + TEST_RR_SRC12_BYPASS( 15, 0, 1, mulw, 154, 14, 11 ); + TEST_RR_SRC12_BYPASS( 16, 0, 2, mulw, 165, 15, 11 ); + TEST_RR_SRC12_BYPASS( 17, 1, 0, mulw, 143, 13, 11 ); + TEST_RR_SRC12_BYPASS( 18, 1, 1, mulw, 154, 14, 11 ); + TEST_RR_SRC12_BYPASS( 19, 2, 0, mulw, 165, 15, 11 ); + + TEST_RR_SRC21_BYPASS( 20, 0, 0, mulw, 143, 13, 11 ); + TEST_RR_SRC21_BYPASS( 21, 0, 1, mulw, 154, 14, 11 ); + TEST_RR_SRC21_BYPASS( 22, 0, 2, mulw, 165, 15, 11 ); + TEST_RR_SRC21_BYPASS( 23, 1, 0, mulw, 143, 13, 11 ); + TEST_RR_SRC21_BYPASS( 24, 1, 1, mulw, 154, 14, 11 ); + TEST_RR_SRC21_BYPASS( 25, 2, 0, mulw, 165, 15, 11 ); + + TEST_RR_ZEROSRC1( 26, mulw, 0, 31 ); + TEST_RR_ZEROSRC2( 27, mulw, 0, 32 ); + TEST_RR_ZEROSRC12( 28, mulw, 0 ); + TEST_RR_ZERODEST( 29, mulw, 33, 34 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/or.S b/isa/rv64ui/or.S new file mode 100644 index 0000000..81daae1 --- /dev/null +++ b/isa/rv64ui/or.S @@ -0,0 +1,67 @@ +#***************************************************************************** +# or.S +#----------------------------------------------------------------------------- +# +# Test or instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Logical tests + #------------------------------------------------------------- + + TEST_RR_OP( 2, or, 0xff0fff0f, 0xff00ff00, 0x0f0f0f0f ); + TEST_RR_OP( 3, or, 0xfff0fff0, 0x0ff00ff0, 0xf0f0f0f0 ); + TEST_RR_OP( 4, or, 0x0fff0fff, 0x00ff00ff, 0x0f0f0f0f ); + TEST_RR_OP( 5, or, 0xf0fff0ff, 0xf00ff00f, 0xf0f0f0f0 ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_RR_SRC1_EQ_DEST( 6, or, 0xff0fff0f, 0xff00ff00, 0x0f0f0f0f ); + TEST_RR_SRC2_EQ_DEST( 7, or, 0xff0fff0f, 0xff00ff00, 0x0f0f0f0f ); + TEST_RR_SRC12_EQ_DEST( 8, or, 0xff00ff00, 0xff00ff00 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_RR_DEST_BYPASS( 9, 0, or, 0xff0fff0f, 0xff00ff00, 0x0f0f0f0f ); + TEST_RR_DEST_BYPASS( 10, 1, or, 0xfff0fff0, 0x0ff00ff0, 0xf0f0f0f0 ); + TEST_RR_DEST_BYPASS( 11, 2, or, 0x0fff0fff, 0x00ff00ff, 0x0f0f0f0f ); + + TEST_RR_SRC12_BYPASS( 12, 0, 0, or, 0xff0fff0f, 0xff00ff00, 0x0f0f0f0f ); + TEST_RR_SRC12_BYPASS( 13, 0, 1, or, 0xfff0fff0, 0x0ff00ff0, 0xf0f0f0f0 ); + TEST_RR_SRC12_BYPASS( 14, 0, 2, or, 0x0fff0fff, 0x00ff00ff, 0x0f0f0f0f ); + TEST_RR_SRC12_BYPASS( 15, 1, 0, or, 0xff0fff0f, 0xff00ff00, 0x0f0f0f0f ); + TEST_RR_SRC12_BYPASS( 16, 1, 1, or, 0xfff0fff0, 0x0ff00ff0, 0xf0f0f0f0 ); + TEST_RR_SRC12_BYPASS( 17, 2, 0, or, 0x0fff0fff, 0x00ff00ff, 0x0f0f0f0f ); + + TEST_RR_SRC21_BYPASS( 18, 0, 0, or, 0xff0fff0f, 0xff00ff00, 0x0f0f0f0f ); + TEST_RR_SRC21_BYPASS( 19, 0, 1, or, 0xfff0fff0, 0x0ff00ff0, 0xf0f0f0f0 ); + TEST_RR_SRC21_BYPASS( 20, 0, 2, or, 0x0fff0fff, 0x00ff00ff, 0x0f0f0f0f ); + TEST_RR_SRC21_BYPASS( 21, 1, 0, or, 0xff0fff0f, 0xff00ff00, 0x0f0f0f0f ); + TEST_RR_SRC21_BYPASS( 22, 1, 1, or, 0xfff0fff0, 0x0ff00ff0, 0xf0f0f0f0 ); + TEST_RR_SRC21_BYPASS( 23, 2, 0, or, 0x0fff0fff, 0x00ff00ff, 0x0f0f0f0f ); + + TEST_RR_ZEROSRC1( 24, or, 0xff00ff00, 0xff00ff00 ); + TEST_RR_ZEROSRC2( 25, or, 0x00ff00ff, 0x00ff00ff ); + TEST_RR_ZEROSRC12( 26, or, 0 ); + TEST_RR_ZERODEST( 27, or, 0x11111111, 0x22222222 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/ori.S b/isa/rv64ui/ori.S new file mode 100644 index 0000000..5f6c018 --- /dev/null +++ b/isa/rv64ui/ori.S @@ -0,0 +1,53 @@ +#***************************************************************************** +# ori.S +#----------------------------------------------------------------------------- +# +# Test ori instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Logical tests + #------------------------------------------------------------- + + TEST_IMM_OP( 2, ori, 0xffffffffffffff0f, 0xffffffffff00ff00, 0xf0f ); + TEST_IMM_OP( 3, ori, 0x000000000ff00ff0, 0x000000000ff00ff0, 0x0f0 ); + TEST_IMM_OP( 4, ori, 0x0000000000ff07ff, 0x0000000000ff00ff, 0x70f ); + TEST_IMM_OP( 5, ori, 0xfffffffff00ff0ff, 0xfffffffff00ff00f, 0x0f0 ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_IMM_SRC1_EQ_DEST( 6, ori, 0xff00fff0, 0xff00ff00, 0x0f0 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_IMM_DEST_BYPASS( 7, 0, ori, 0x000000000ff00ff0, 0x000000000ff00ff0, 0x0f0 ); + TEST_IMM_DEST_BYPASS( 8, 1, ori, 0x0000000000ff07ff, 0x0000000000ff00ff, 0x70f ); + TEST_IMM_DEST_BYPASS( 9, 2, ori, 0xfffffffff00ff0ff, 0xfffffffff00ff00f, 0x0f0 ); + + TEST_IMM_SRC1_BYPASS( 10, 0, ori, 0x000000000ff00ff0, 0x000000000ff00ff0, 0x0f0 ); + TEST_IMM_SRC1_BYPASS( 11, 1, ori, 0xffffffffffffffff, 0x0000000000ff00ff, 0xf0f ); + TEST_IMM_SRC1_BYPASS( 12, 2, ori, 0xfffffffff00ff0ff, 0xfffffffff00ff00f, 0x0f0 ); + + TEST_IMM_ZEROSRC1( 13, ori, 0x0f0, 0x0f0 ); + TEST_IMM_ZERODEST( 14, ori, 0x00ff00ff, 0x70f ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/rdnpc.S b/isa/rv64ui/rdnpc.S new file mode 100644 index 0000000..09253b3 --- /dev/null +++ b/isa/rv64ui/rdnpc.S @@ -0,0 +1,29 @@ +#***************************************************************************** +# rdnpc_w.S +#----------------------------------------------------------------------------- +# +# Test rdnpc instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + TEST_CASE(2, a0, 4, \ + rdnpc a0; \ + jal 1f; \ + 1: sub a0, ra, a0; \ + ) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/rem.S b/isa/rv64ui/rem.S new file mode 100644 index 0000000..40dd68c --- /dev/null +++ b/isa/rv64ui/rem.S @@ -0,0 +1,39 @@ +#***************************************************************************** +# rem.S +#----------------------------------------------------------------------------- +# +# Test rem instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_RR_OP( 2, rem, 2, 20, 6 ); + TEST_RR_OP( 3, rem, -2, -20, 6 ); + TEST_RR_OP( 4, rem, 2, 20, -6 ); + TEST_RR_OP( 5, rem, -2, -20, -6 ); + + TEST_RR_OP( 6, rem, 0, -1<<63, 1 ); + TEST_RR_OP( 7, rem, 0, -1<<63, -1 ); + + TEST_RR_OP( 8, rem, -1<<63, -1<<63, 0 ); + TEST_RR_OP( 9, rem, 1, 1, 0 ); + TEST_RR_OP(10, rem, 0, 0, 0 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/remu.S b/isa/rv64ui/remu.S new file mode 100644 index 0000000..9089a3d --- /dev/null +++ b/isa/rv64ui/remu.S @@ -0,0 +1,39 @@ +#***************************************************************************** +# remu.S +#----------------------------------------------------------------------------- +# +# Test remu instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_RR_OP( 2, remu, 2, 20, 6 ); + TEST_RR_OP( 3, remu, 2, -20, 6 ); + TEST_RR_OP( 4, remu, 20, 20, -6 ); + TEST_RR_OP( 5, remu, -20, -20, -6 ); + + TEST_RR_OP( 6, remu, 0, -1<<63, 1 ); + TEST_RR_OP( 7, remu, -1<<63, -1<<63, -1 ); + + TEST_RR_OP( 8, remu, -1<<63, -1<<63, 0 ); + TEST_RR_OP( 9, remu, 1, 1, 0 ); + TEST_RR_OP(10, remu, 0, 0, 0 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/remuw.S b/isa/rv64ui/remuw.S new file mode 100644 index 0000000..8b978b5 --- /dev/null +++ b/isa/rv64ui/remuw.S @@ -0,0 +1,39 @@ +#***************************************************************************** +# remuw.S +#----------------------------------------------------------------------------- +# +# Test remuw instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_RR_OP( 2, remuw, 2, 20, 6 ); + TEST_RR_OP( 3, remuw, 2, -20, 6 ); + TEST_RR_OP( 4, remuw, 20, 20, -6 ); + TEST_RR_OP( 5, remuw, -20, -20, -6 ); + + TEST_RR_OP( 6, remuw, 0, -1<<31, 1 ); + TEST_RR_OP( 7, remuw, -1<<31, -1<<31, -1 ); + + TEST_RR_OP( 8, remuw, -1<<31, -1<<31, 0 ); + TEST_RR_OP( 9, remuw, 1, 1, 0 ); + TEST_RR_OP(10, remuw, 0, 0, 0 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/remw.S b/isa/rv64ui/remw.S new file mode 100644 index 0000000..26820e3 --- /dev/null +++ b/isa/rv64ui/remw.S @@ -0,0 +1,39 @@ +#***************************************************************************** +# remw.S +#----------------------------------------------------------------------------- +# +# Test remw instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_RR_OP( 2, remw, 2, 20, 6 ); + TEST_RR_OP( 3, remw, -2, -20, 6 ); + TEST_RR_OP( 4, remw, 2, 20, -6 ); + TEST_RR_OP( 5, remw, -2, -20, -6 ); + + TEST_RR_OP( 6, remw, 0, -1<<31, 1 ); + TEST_RR_OP( 7, remw, 0, -1<<31, -1 ); + + TEST_RR_OP( 8, remw, -1<<31, -1<<31, 0 ); + TEST_RR_OP( 9, remw, 1, 1, 0 ); + TEST_RR_OP(10, remw, 0, 0, 0 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/sb.S b/isa/rv64ui/sb.S new file mode 100644 index 0000000..e072cd5 --- /dev/null +++ b/isa/rv64ui/sb.S @@ -0,0 +1,100 @@ +#***************************************************************************** +# sb.S +#----------------------------------------------------------------------------- +# +# Test sb instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Basic tests + #------------------------------------------------------------- + + TEST_ST_OP( 2, lb, sb, 0xffffffffffffffaa, 0, tdat ); + TEST_ST_OP( 3, lb, sb, 0x0000000000000000, 1, tdat ); +#ifdef __RISCVEL + TEST_ST_OP( 4, lh, sb, 0xffffffffffffefa0, 2, tdat ); +#elif defined(__RISCVEB) +#else + TEST_ST_OP( 4, lh, sb, 0xffffffffffffa0ef, 2, tdat ); +#error unknown endianness! +#endif + TEST_ST_OP( 5, lb, sb, 0x000000000000000a, 3, tdat ); + + # Test with negative offset + + TEST_ST_OP( 6, lb, sb, 0xffffffffffffffaa, -3, tdat8 ); + TEST_ST_OP( 7, lb, sb, 0x0000000000000000, -2, tdat8 ); + TEST_ST_OP( 8, lb, sb, 0xffffffffffffffa0, -1, tdat8 ); + TEST_ST_OP( 9, lb, sb, 0x000000000000000a, 0, tdat8 ); + + # Test with a negative base + + TEST_CASE( 10, x3, 0x78, \ + la x1, tdat9; \ + li x2, 0x12345678; \ + addi x4, x1, -32; \ + sb x2, 32(x4); \ + lb x3, 0(x1); \ + ) + + # Test with unaligned base + + TEST_CASE( 11, x3, 0xffffffffffffff98, \ + la x1, tdat9; \ + li x2, 0x00003098; \ + addi x1, x1, -6; \ + sb x2, 7(x1); \ + la x4, tdat10; \ + lb x3, 0(x4); \ + ) + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_ST_SRC12_BYPASS( 12, 0, 0, lb, sb, 0xffffffffffffffdd, 0, tdat ); + TEST_ST_SRC12_BYPASS( 13, 0, 1, lb, sb, 0xffffffffffffffcd, 1, tdat ); + TEST_ST_SRC12_BYPASS( 14, 0, 2, lb, sb, 0xffffffffffffffcc, 2, tdat ); + TEST_ST_SRC12_BYPASS( 15, 1, 0, lb, sb, 0xffffffffffffffbc, 3, tdat ); + TEST_ST_SRC12_BYPASS( 16, 1, 1, lb, sb, 0xffffffffffffffbb, 4, tdat ); + TEST_ST_SRC12_BYPASS( 17, 2, 0, lb, sb, 0xffffffffffffffab, 5, tdat ); + + TEST_ST_SRC21_BYPASS( 18, 0, 0, lb, sb, 0x33, 0, tdat ); + TEST_ST_SRC21_BYPASS( 19, 0, 1, lb, sb, 0x23, 1, tdat ); + TEST_ST_SRC21_BYPASS( 20, 0, 2, lb, sb, 0x22, 2, tdat ); + TEST_ST_SRC21_BYPASS( 21, 1, 0, lb, sb, 0x12, 3, tdat ); + TEST_ST_SRC21_BYPASS( 22, 1, 1, lb, sb, 0x11, 4, tdat ); + TEST_ST_SRC21_BYPASS( 23, 2, 0, lb, sb, 0x01, 5, tdat ); + + li a0, 0xef + la a1, tdat + sb a0, 3(a1) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +tdat: +tdat1: .byte 0xef +tdat2: .byte 0xef +tdat3: .byte 0xef +tdat4: .byte 0xef +tdat5: .byte 0xef +tdat6: .byte 0xef +tdat7: .byte 0xef +tdat8: .byte 0xef +tdat9: .byte 0xef +tdat10: .byte 0xef + +RVTEST_DATA_END diff --git a/isa/rv64ui/sd.S b/isa/rv64ui/sd.S new file mode 100644 index 0000000..6f6cb45 --- /dev/null +++ b/isa/rv64ui/sd.S @@ -0,0 +1,90 @@ +#***************************************************************************** +# sd.S +#----------------------------------------------------------------------------- +# +# Test sd instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Basic tests + #------------------------------------------------------------- + + TEST_ST_OP( 2, ld, sd, 0x00aa00aa00aa00aa, 0, tdat ); + TEST_ST_OP( 3, ld, sd, 0xaa00aa00aa00aa00, 8, tdat ); + TEST_ST_OP( 4, ld, sd, 0x0aa00aa00aa00aa0, 16, tdat ); + TEST_ST_OP( 5, ld, sd, 0xa00aa00aa00aa00a, 24, tdat ); + + # Test with negative offset + + TEST_ST_OP( 6, ld, sd, 0x00aa00aa00aa00aa, -24, tdat8 ); + TEST_ST_OP( 7, ld, sd, 0xaa00aa00aa00aa00, -16, tdat8 ); + TEST_ST_OP( 8, ld, sd, 0x0aa00aa00aa00aa0, -8, tdat8 ); + TEST_ST_OP( 9, ld, sd, 0xa00aa00aa00aa00a, 0, tdat8 ); + + # Test with a negative base + + TEST_CASE( 10, x3, 0x1234567812345678, \ + la x1, tdat9; \ + li x2, 0x1234567812345678; \ + addi x4, x1, -32; \ + sd x2, 32(x4); \ + ld x3, 0(x1); \ + ) + + # Test with unaligned base + + TEST_CASE( 11, x3, 0x5821309858213098, \ + la x1, tdat9; \ + li x2, 0x5821309858213098; \ + addi x1, x1, -3; \ + sd x2, 11(x1); \ + la x4, tdat10; \ + ld x3, 0(x4); \ + ) + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_ST_SRC12_BYPASS( 12, 0, 0, ld, sd, 0xabbccdd, 0, tdat ); + TEST_ST_SRC12_BYPASS( 13, 0, 1, ld, sd, 0xaabbccd, 8, tdat ); + TEST_ST_SRC12_BYPASS( 14, 0, 2, ld, sd, 0xdaabbcc, 16, tdat ); + TEST_ST_SRC12_BYPASS( 15, 1, 0, ld, sd, 0xddaabbc, 24, tdat ); + TEST_ST_SRC12_BYPASS( 16, 1, 1, ld, sd, 0xcddaabb, 32, tdat ); + TEST_ST_SRC12_BYPASS( 17, 2, 0, ld, sd, 0xccddaab, 40, tdat ); + + TEST_ST_SRC21_BYPASS( 18, 0, 0, ld, sd, 0x00112233, 0, tdat ); + TEST_ST_SRC21_BYPASS( 19, 0, 1, ld, sd, 0x30011223, 8, tdat ); + TEST_ST_SRC21_BYPASS( 20, 0, 2, ld, sd, 0x33001122, 16, tdat ); + TEST_ST_SRC21_BYPASS( 21, 1, 0, ld, sd, 0x23300112, 24, tdat ); + TEST_ST_SRC21_BYPASS( 22, 1, 1, ld, sd, 0x22330011, 32, tdat ); + TEST_ST_SRC21_BYPASS( 23, 2, 0, ld, sd, 0x12233001, 40, tdat ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +tdat: +tdat1: .dword 0xdeadbeefdeadbeef +tdat2: .dword 0xdeadbeefdeadbeef +tdat3: .dword 0xdeadbeefdeadbeef +tdat4: .dword 0xdeadbeefdeadbeef +tdat5: .dword 0xdeadbeefdeadbeef +tdat6: .dword 0xdeadbeefdeadbeef +tdat7: .dword 0xdeadbeefdeadbeef +tdat8: .dword 0xdeadbeefdeadbeef +tdat9: .dword 0xdeadbeefdeadbeef +tdat10: .dword 0xdeadbeefdeadbeef + +RVTEST_DATA_END diff --git a/isa/rv64ui/sh.S b/isa/rv64ui/sh.S new file mode 100644 index 0000000..e68f31a --- /dev/null +++ b/isa/rv64ui/sh.S @@ -0,0 +1,100 @@ +#***************************************************************************** +# sh.S +#----------------------------------------------------------------------------- +# +# Test sh instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Basic tests + #------------------------------------------------------------- + + TEST_ST_OP( 2, lh, sh, 0x00000000000000aa, 0, tdat ); + TEST_ST_OP( 3, lh, sh, 0xffffffffffffaa00, 2, tdat ); +#ifdef __RISCVEL + TEST_ST_OP( 4, lw, sh, 0xffffffffbeef0aa0, 4, tdat ); +#elif defined(__RISCVEB) +#else + TEST_ST_OP( 4, lw, sh, 0x000000000aa0beef, 4, tdat ); +#error unknown endianness! +#endif + TEST_ST_OP( 5, lh, sh, 0xffffffffffffa00a, 6, tdat ); + + # Test with negative offset + + TEST_ST_OP( 6, lh, sh, 0x00000000000000aa, -6, tdat8 ); + TEST_ST_OP( 7, lh, sh, 0xffffffffffffaa00, -4, tdat8 ); + TEST_ST_OP( 8, lh, sh, 0x0000000000000aa0, -2, tdat8 ); + TEST_ST_OP( 9, lh, sh, 0xffffffffffffa00a, 0, tdat8 ); + + # Test with a negative base + + TEST_CASE( 10, x3, 0x5678, \ + la x1, tdat9; \ + li x2, 0x12345678; \ + addi x4, x1, -32; \ + sh x2, 32(x4); \ + lh x3, 0(x1); \ + ) + + # Test with unaligned base + + TEST_CASE( 11, x3, 0x3098, \ + la x1, tdat9; \ + li x2, 0x00003098; \ + addi x1, x1, -5; \ + sh x2, 7(x1); \ + la x4, tdat10; \ + lh x3, 0(x4); \ + ) + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_ST_SRC12_BYPASS( 12, 0, 0, lh, sh, 0xffffffffffffccdd, 0, tdat ); + TEST_ST_SRC12_BYPASS( 13, 0, 1, lh, sh, 0xffffffffffffbccd, 2, tdat ); + TEST_ST_SRC12_BYPASS( 14, 0, 2, lh, sh, 0xffffffffffffbbcc, 4, tdat ); + TEST_ST_SRC12_BYPASS( 15, 1, 0, lh, sh, 0xffffffffffffabbc, 6, tdat ); + TEST_ST_SRC12_BYPASS( 16, 1, 1, lh, sh, 0xffffffffffffaabb, 8, tdat ); + TEST_ST_SRC12_BYPASS( 17, 2, 0, lh, sh, 0xffffffffffffdaab, 10, tdat ); + + TEST_ST_SRC21_BYPASS( 18, 0, 0, lh, sh, 0x2233, 0, tdat ); + TEST_ST_SRC21_BYPASS( 19, 0, 1, lh, sh, 0x1223, 2, tdat ); + TEST_ST_SRC21_BYPASS( 20, 0, 2, lh, sh, 0x1122, 4, tdat ); + TEST_ST_SRC21_BYPASS( 21, 1, 0, lh, sh, 0x0112, 6, tdat ); + TEST_ST_SRC21_BYPASS( 22, 1, 1, lh, sh, 0x0011, 8, tdat ); + TEST_ST_SRC21_BYPASS( 23, 2, 0, lh, sh, 0x3001, 10, tdat ); + + li a0, 0xbeef + la a1, tdat + sh a0, 6(a1) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +tdat: +tdat1: .half 0xbeef +tdat2: .half 0xbeef +tdat3: .half 0xbeef +tdat4: .half 0xbeef +tdat5: .half 0xbeef +tdat6: .half 0xbeef +tdat7: .half 0xbeef +tdat8: .half 0xbeef +tdat9: .half 0xbeef +tdat10: .half 0xbeef + +RVTEST_DATA_END diff --git a/isa/rv64ui/simple.S b/isa/rv64ui/simple.S new file mode 100644 index 0000000..a667035 --- /dev/null +++ b/isa/rv64ui/simple.S @@ -0,0 +1,25 @@ +#***************************************************************************** +# simple.S +#----------------------------------------------------------------------------- +# +# This is the most basic self checking test. If your simulator does not +# pass thiss then there is little chance that it will pass any of the +# more complicated self checking tests. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + +RVTEST_PASS + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/sll.S b/isa/rv64ui/sll.S new file mode 100644 index 0000000..935da3d --- /dev/null +++ b/isa/rv64ui/sll.S @@ -0,0 +1,88 @@ +#***************************************************************************** +# sll.S +#----------------------------------------------------------------------------- +# +# Test sll instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_RR_OP( 2, sll, 0x0000000000000001, 0x0000000000000001, 0 ); + TEST_RR_OP( 3, sll, 0x0000000000000002, 0x0000000000000001, 1 ); + TEST_RR_OP( 4, sll, 0x0000000000000080, 0x0000000000000001, 7 ); + TEST_RR_OP( 5, sll, 0x0000000000004000, 0x0000000000000001, 14 ); + TEST_RR_OP( 6, sll, 0x0000000080000000, 0x0000000000000001, 31 ); + + TEST_RR_OP( 7, sll, 0xffffffffffffffff, 0xffffffffffffffff, 0 ); + TEST_RR_OP( 8, sll, 0xfffffffffffffffe, 0xffffffffffffffff, 1 ); + TEST_RR_OP( 9, sll, 0xffffffffffffff80, 0xffffffffffffffff, 7 ); + TEST_RR_OP( 10, sll, 0xffffffffffffc000, 0xffffffffffffffff, 14 ); + TEST_RR_OP( 11, sll, 0xffffffff80000000, 0xffffffffffffffff, 31 ); + + TEST_RR_OP( 12, sll, 0x0000000021212121, 0x0000000021212121, 0 ); + TEST_RR_OP( 13, sll, 0x0000000042424242, 0x0000000021212121, 1 ); + TEST_RR_OP( 14, sll, 0x0000001090909080, 0x0000000021212121, 7 ); + TEST_RR_OP( 15, sll, 0x0000084848484000, 0x0000000021212121, 14 ); + TEST_RR_OP( 16, sll, 0x1090909080000000, 0x0000000021212121, 31 ); + + # Verify that shifts only use bottom six bits + + TEST_RR_OP( 17, sll, 0x0000000021212121, 0x0000000021212121, 0xffffffffffffffc0 ); + TEST_RR_OP( 18, sll, 0x0000000042424242, 0x0000000021212121, 0xffffffffffffffc1 ); + TEST_RR_OP( 19, sll, 0x0000001090909080, 0x0000000021212121, 0xffffffffffffffc7 ); + TEST_RR_OP( 20, sll, 0x0000084848484000, 0x0000000021212121, 0xffffffffffffffce ); + TEST_RR_OP( 21, sll, 0x8000000000000000, 0x0000000021212121, 0xffffffffffffffff ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_RR_SRC1_EQ_DEST( 22, sll, 0x00000080, 0x00000001, 7 ); + TEST_RR_SRC2_EQ_DEST( 23, sll, 0x00004000, 0x00000001, 14 ); + TEST_RR_SRC12_EQ_DEST( 24, sll, 24, 3 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_RR_DEST_BYPASS( 25, 0, sll, 0x0000000000000080, 0x0000000000000001, 7 ); + TEST_RR_DEST_BYPASS( 26, 1, sll, 0x0000000000004000, 0x0000000000000001, 14 ); + TEST_RR_DEST_BYPASS( 27, 2, sll, 0x0000000080000000, 0x0000000000000001, 31 ); + + TEST_RR_SRC12_BYPASS( 28, 0, 0, sll, 0x0000000000000080, 0x0000000000000001, 7 ); + TEST_RR_SRC12_BYPASS( 29, 0, 1, sll, 0x0000000000004000, 0x0000000000000001, 14 ); + TEST_RR_SRC12_BYPASS( 30, 0, 2, sll, 0x0000000080000000, 0x0000000000000001, 31 ); + TEST_RR_SRC12_BYPASS( 31, 1, 0, sll, 0x0000000000000080, 0x0000000000000001, 7 ); + TEST_RR_SRC12_BYPASS( 32, 1, 1, sll, 0x0000000000004000, 0x0000000000000001, 14 ); + TEST_RR_SRC12_BYPASS( 33, 2, 0, sll, 0x0000000080000000, 0x0000000000000001, 31 ); + + TEST_RR_SRC21_BYPASS( 34, 0, 0, sll, 0x0000000000000080, 0x0000000000000001, 7 ); + TEST_RR_SRC21_BYPASS( 35, 0, 1, sll, 0x0000000000004000, 0x0000000000000001, 14 ); + TEST_RR_SRC21_BYPASS( 36, 0, 2, sll, 0x0000000080000000, 0x0000000000000001, 31 ); + TEST_RR_SRC21_BYPASS( 37, 1, 0, sll, 0x0000000000000080, 0x0000000000000001, 7 ); + TEST_RR_SRC21_BYPASS( 38, 1, 1, sll, 0x0000000000004000, 0x0000000000000001, 14 ); + TEST_RR_SRC21_BYPASS( 39, 2, 0, sll, 0x0000000080000000, 0x0000000000000001, 31 ); + + TEST_RR_ZEROSRC1( 40, sll, 0, 15 ); + TEST_RR_ZEROSRC2( 41, sll, 32, 32 ); + TEST_RR_ZEROSRC12( 42, sll, 0 ); + TEST_RR_ZERODEST( 43, sll, 1024, 2048 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/slli.S b/isa/rv64ui/slli.S new file mode 100644 index 0000000..aeb5ce9 --- /dev/null +++ b/isa/rv64ui/slli.S @@ -0,0 +1,66 @@ +#***************************************************************************** +# slli.S +#----------------------------------------------------------------------------- +# +# Test slli instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_IMM_OP( 2, slli, 0x0000000000000001, 0x0000000000000001, 0 ); + TEST_IMM_OP( 3, slli, 0x0000000000000002, 0x0000000000000001, 1 ); + TEST_IMM_OP( 4, slli, 0x0000000000000080, 0x0000000000000001, 7 ); + TEST_IMM_OP( 5, slli, 0x0000000000004000, 0x0000000000000001, 14 ); + TEST_IMM_OP( 6, slli, 0x0000000080000000, 0x0000000000000001, 31 ); + + TEST_IMM_OP( 7, slli, 0xffffffffffffffff, 0xffffffffffffffff, 0 ); + TEST_IMM_OP( 8, slli, 0xfffffffffffffffe, 0xffffffffffffffff, 1 ); + TEST_IMM_OP( 9, slli, 0xffffffffffffff80, 0xffffffffffffffff, 7 ); + TEST_IMM_OP( 10, slli, 0xffffffffffffc000, 0xffffffffffffffff, 14 ); + TEST_IMM_OP( 11, slli, 0xffffffff80000000, 0xffffffffffffffff, 31 ); + + TEST_IMM_OP( 12, slli, 0x0000000021212121, 0x0000000021212121, 0 ); + TEST_IMM_OP( 13, slli, 0x0000000042424242, 0x0000000021212121, 1 ); + TEST_IMM_OP( 14, slli, 0x0000001090909080, 0x0000000021212121, 7 ); + TEST_IMM_OP( 15, slli, 0x0000084848484000, 0x0000000021212121, 14 ); + TEST_IMM_OP( 16, slli, 0x1090909080000000, 0x0000000021212121, 31 ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_IMM_SRC1_EQ_DEST( 17, slli, 0x00000080, 0x00000001, 7 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_IMM_DEST_BYPASS( 18, 0, slli, 0x0000000000000080, 0x0000000000000001, 7 ); + TEST_IMM_DEST_BYPASS( 19, 1, slli, 0x0000000000004000, 0x0000000000000001, 14 ); + TEST_IMM_DEST_BYPASS( 20, 2, slli, 0x0000000080000000, 0x0000000000000001, 31 ); + + TEST_IMM_SRC1_BYPASS( 21, 0, slli, 0x0000000000000080, 0x0000000000000001, 7 ); + TEST_IMM_SRC1_BYPASS( 22, 1, slli, 0x0000000000004000, 0x0000000000000001, 14 ); + TEST_IMM_SRC1_BYPASS( 23, 2, slli, 0x0000000080000000, 0x0000000000000001, 31 ); + + TEST_IMM_ZEROSRC1( 24, slli, 0, 32 ); + TEST_IMM_ZERODEST( 25, slli, 33, 50 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/slliw.S b/isa/rv64ui/slliw.S new file mode 100644 index 0000000..7cc7c41 --- /dev/null +++ b/isa/rv64ui/slliw.S @@ -0,0 +1,66 @@ +#***************************************************************************** +# slliw.S +#----------------------------------------------------------------------------- +# +# Test slliw instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_IMM_OP( 2, slliw, 0x0000000000000001, 0x0000000000000001, 0 ); + TEST_IMM_OP( 3, slliw, 0x0000000000000002, 0x0000000000000001, 1 ); + TEST_IMM_OP( 4, slliw, 0x0000000000000080, 0x0000000000000001, 7 ); + TEST_IMM_OP( 5, slliw, 0x0000000000004000, 0x0000000000000001, 14 ); + TEST_IMM_OP( 6, slliw, 0xffffffff80000000, 0x0000000000000001, 31 ); + + TEST_IMM_OP( 7, slliw, 0xffffffffffffffff, 0xffffffffffffffff, 0 ); + TEST_IMM_OP( 8, slliw, 0xfffffffffffffffe, 0xffffffffffffffff, 1 ); + TEST_IMM_OP( 9, slliw, 0xffffffffffffff80, 0xffffffffffffffff, 7 ); + TEST_IMM_OP( 10, slliw, 0xffffffffffffc000, 0xffffffffffffffff, 14 ); + TEST_IMM_OP( 11, slliw, 0xffffffff80000000, 0xffffffffffffffff, 31 ); + + TEST_IMM_OP( 12, slliw, 0x0000000021212121, 0x0000000021212121, 0 ); + TEST_IMM_OP( 13, slliw, 0x0000000042424242, 0x0000000021212121, 1 ); + TEST_IMM_OP( 14, slliw, 0xffffffff90909080, 0x0000000021212121, 7 ); + TEST_IMM_OP( 15, slliw, 0x0000000048484000, 0x0000000021212121, 14 ); + TEST_IMM_OP( 16, slliw, 0xffffffff80000000, 0x0000000021212121, 31 ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_IMM_SRC1_EQ_DEST( 17, slliw, 0x00000080, 0x00000001, 7 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_IMM_DEST_BYPASS( 18, 0, slliw, 0x0000000000000080, 0x0000000000000001, 7 ); + TEST_IMM_DEST_BYPASS( 19, 1, slliw, 0x0000000000004000, 0x0000000000000001, 14 ); + TEST_IMM_DEST_BYPASS( 20, 2, slliw, 0xffffffff80000000, 0x0000000000000001, 31 ); + + TEST_IMM_SRC1_BYPASS( 21, 0, slliw, 0x0000000000000080, 0x0000000000000001, 7 ); + TEST_IMM_SRC1_BYPASS( 22, 1, slliw, 0x0000000000004000, 0x0000000000000001, 14 ); + TEST_IMM_SRC1_BYPASS( 23, 2, slliw, 0xffffffff80000000, 0x0000000000000001, 31 ); + + TEST_IMM_ZEROSRC1( 24, slliw, 0, 31 ); + TEST_IMM_ZERODEST( 25, slliw, 31, 28 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/sllw.S b/isa/rv64ui/sllw.S new file mode 100644 index 0000000..4663be3 --- /dev/null +++ b/isa/rv64ui/sllw.S @@ -0,0 +1,88 @@ +#***************************************************************************** +# sllw.S +#----------------------------------------------------------------------------- +# +# Test sllw instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_RR_OP( 2, sllw, 0x0000000000000001, 0x0000000000000001, 0 ); + TEST_RR_OP( 3, sllw, 0x0000000000000002, 0x0000000000000001, 1 ); + TEST_RR_OP( 4, sllw, 0x0000000000000080, 0x0000000000000001, 7 ); + TEST_RR_OP( 5, sllw, 0x0000000000004000, 0x0000000000000001, 14 ); + TEST_RR_OP( 6, sllw, 0xffffffff80000000, 0x0000000000000001, 31 ); + + TEST_RR_OP( 7, sllw, 0xffffffffffffffff, 0xffffffffffffffff, 0 ); + TEST_RR_OP( 8, sllw, 0xfffffffffffffffe, 0xffffffffffffffff, 1 ); + TEST_RR_OP( 9, sllw, 0xffffffffffffff80, 0xffffffffffffffff, 7 ); + TEST_RR_OP( 10, sllw, 0xffffffffffffc000, 0xffffffffffffffff, 14 ); + TEST_RR_OP( 11, sllw, 0xffffffff80000000, 0xffffffffffffffff, 31 ); + + TEST_RR_OP( 12, sllw, 0x0000000021212121, 0x0000000021212121, 0 ); + TEST_RR_OP( 13, sllw, 0x0000000042424242, 0x0000000021212121, 1 ); + TEST_RR_OP( 14, sllw, 0xffffffff90909080, 0x0000000021212121, 7 ); + TEST_RR_OP( 15, sllw, 0x0000000048484000, 0x0000000021212121, 14 ); + TEST_RR_OP( 16, sllw, 0xffffffff80000000, 0x0000000021212121, 31 ); + + # Verify that shifts only use bottom five bits + + TEST_RR_OP( 17, sllw, 0x0000000021212121, 0x0000000021212121, 0xffffffffffffffe0 ); + TEST_RR_OP( 18, sllw, 0x0000000042424242, 0x0000000021212121, 0xffffffffffffffe1 ); + TEST_RR_OP( 19, sllw, 0xffffffff90909080, 0x0000000021212121, 0xffffffffffffffe7 ); + TEST_RR_OP( 20, sllw, 0x0000000048484000, 0x0000000021212121, 0xffffffffffffffee ); + TEST_RR_OP( 21, sllw, 0xffffffff80000000, 0x0000000021212121, 0xffffffffffffffff ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_RR_SRC1_EQ_DEST( 22, sllw, 0x00000080, 0x00000001, 7 ); + TEST_RR_SRC2_EQ_DEST( 23, sllw, 0x00004000, 0x00000001, 14 ); + TEST_RR_SRC12_EQ_DEST( 24, sllw, 24, 3 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_RR_DEST_BYPASS( 25, 0, sllw, 0x0000000000000080, 0x0000000000000001, 7 ); + TEST_RR_DEST_BYPASS( 26, 1, sllw, 0x0000000000004000, 0x0000000000000001, 14 ); + TEST_RR_DEST_BYPASS( 27, 2, sllw, 0xffffffff80000000, 0x0000000000000001, 31 ); + + TEST_RR_SRC12_BYPASS( 28, 0, 0, sllw, 0x0000000000000080, 0x0000000000000001, 7 ); + TEST_RR_SRC12_BYPASS( 29, 0, 1, sllw, 0x0000000000004000, 0x0000000000000001, 14 ); + TEST_RR_SRC12_BYPASS( 30, 0, 2, sllw, 0xffffffff80000000, 0x0000000000000001, 31 ); + TEST_RR_SRC12_BYPASS( 31, 1, 0, sllw, 0x0000000000000080, 0x0000000000000001, 7 ); + TEST_RR_SRC12_BYPASS( 32, 1, 1, sllw, 0x0000000000004000, 0x0000000000000001, 14 ); + TEST_RR_SRC12_BYPASS( 33, 2, 0, sllw, 0xffffffff80000000, 0x0000000000000001, 31 ); + + TEST_RR_SRC21_BYPASS( 34, 0, 0, sllw, 0x0000000000000080, 0x0000000000000001, 7 ); + TEST_RR_SRC21_BYPASS( 35, 0, 1, sllw, 0x0000000000004000, 0x0000000000000001, 14 ); + TEST_RR_SRC21_BYPASS( 36, 0, 2, sllw, 0xffffffff80000000, 0x0000000000000001, 31 ); + TEST_RR_SRC21_BYPASS( 37, 1, 0, sllw, 0x0000000000000080, 0x0000000000000001, 7 ); + TEST_RR_SRC21_BYPASS( 38, 1, 1, sllw, 0x0000000000004000, 0x0000000000000001, 14 ); + TEST_RR_SRC21_BYPASS( 39, 2, 0, sllw, 0xffffffff80000000, 0x0000000000000001, 31 ); + + TEST_RR_ZEROSRC1( 40, sllw, 0, 15 ); + TEST_RR_ZEROSRC2( 41, sllw, 32, 32 ); + TEST_RR_ZEROSRC12( 42, sllw, 0 ); + TEST_RR_ZERODEST( 43, sllw, 1024, 2048 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/slt.S b/isa/rv64ui/slt.S new file mode 100644 index 0000000..ee3203a --- /dev/null +++ b/isa/rv64ui/slt.S @@ -0,0 +1,82 @@ +#***************************************************************************** +# slt.S +#----------------------------------------------------------------------------- +# +# Test slt instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_RR_OP( 2, slt, 0, 0x0000000000000000, 0x0000000000000000 ); + TEST_RR_OP( 3, slt, 0, 0x0000000000000001, 0x0000000000000001 ); + TEST_RR_OP( 4, slt, 1, 0x0000000000000003, 0x0000000000000007 ); + TEST_RR_OP( 5, slt, 0, 0x0000000000000007, 0x0000000000000003 ); + + TEST_RR_OP( 6, slt, 0, 0x0000000000000000, 0xffffffffffff8000 ); + TEST_RR_OP( 7, slt, 1, 0xffffffff80000000, 0x0000000000000000 ); + TEST_RR_OP( 8, slt, 1, 0xffffffff80000000, 0xffffffffffff8000 ); + + TEST_RR_OP( 9, slt, 1, 0x0000000000000000, 0x0000000000007fff ); + TEST_RR_OP( 10, slt, 0, 0x000000007fffffff, 0x0000000000000000 ); + TEST_RR_OP( 11, slt, 0, 0x000000007fffffff, 0x0000000000007fff ); + + TEST_RR_OP( 12, slt, 1, 0xffffffff80000000, 0x0000000000007fff ); + TEST_RR_OP( 13, slt, 0, 0x000000007fffffff, 0xffffffffffff8000 ); + + TEST_RR_OP( 14, slt, 0, 0x0000000000000000, 0xffffffffffffffff ); + TEST_RR_OP( 15, slt, 1, 0xffffffffffffffff, 0x0000000000000001 ); + TEST_RR_OP( 16, slt, 0, 0xffffffffffffffff, 0xffffffffffffffff ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_RR_SRC1_EQ_DEST( 17, slt, 0, 14, 13 ); + TEST_RR_SRC2_EQ_DEST( 18, slt, 1, 11, 13 ); + TEST_RR_SRC12_EQ_DEST( 19, slt, 0, 13 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_RR_DEST_BYPASS( 20, 0, slt, 1, 11, 13 ); + TEST_RR_DEST_BYPASS( 21, 1, slt, 0, 14, 13 ); + TEST_RR_DEST_BYPASS( 22, 2, slt, 1, 12, 13 ); + + TEST_RR_SRC12_BYPASS( 23, 0, 0, slt, 0, 14, 13 ); + TEST_RR_SRC12_BYPASS( 24, 0, 1, slt, 1, 11, 13 ); + TEST_RR_SRC12_BYPASS( 25, 0, 2, slt, 0, 15, 13 ); + TEST_RR_SRC12_BYPASS( 26, 1, 0, slt, 1, 10, 13 ); + TEST_RR_SRC12_BYPASS( 27, 1, 1, slt, 0, 16, 13 ); + TEST_RR_SRC12_BYPASS( 28, 2, 0, slt, 1, 9, 13 ); + + TEST_RR_SRC21_BYPASS( 29, 0, 0, slt, 0, 17, 13 ); + TEST_RR_SRC21_BYPASS( 30, 0, 1, slt, 1, 8, 13 ); + TEST_RR_SRC21_BYPASS( 31, 0, 2, slt, 0, 18, 13 ); + TEST_RR_SRC21_BYPASS( 32, 1, 0, slt, 1, 7, 13 ); + TEST_RR_SRC21_BYPASS( 33, 1, 1, slt, 0, 19, 13 ); + TEST_RR_SRC21_BYPASS( 34, 2, 0, slt, 1, 6, 13 ); + + TEST_RR_ZEROSRC1( 35, slt, 0, -1 ); + TEST_RR_ZEROSRC2( 36, slt, 1, -1 ); + TEST_RR_ZEROSRC12( 37, slt, 0 ); + TEST_RR_ZERODEST( 38, slt, 16, 30 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/slti.S b/isa/rv64ui/slti.S new file mode 100644 index 0000000..77dc52c --- /dev/null +++ b/isa/rv64ui/slti.S @@ -0,0 +1,68 @@ +#***************************************************************************** +# slti.S +#----------------------------------------------------------------------------- +# +# Test slti instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_IMM_OP( 2, slti, 0, 0x0000000000000000, 0x000 ); + TEST_IMM_OP( 3, slti, 0, 0x0000000000000001, 0x001 ); + TEST_IMM_OP( 4, slti, 1, 0x0000000000000003, 0x007 ); + TEST_IMM_OP( 5, slti, 0, 0x0000000000000007, 0x003 ); + + TEST_IMM_OP( 6, slti, 0, 0x0000000000000000, 0x800 ); + TEST_IMM_OP( 7, slti, 1, 0xffffffff80000000, 0x000 ); + TEST_IMM_OP( 8, slti, 1, 0xffffffff80000000, 0x800 ); + + TEST_IMM_OP( 9, slti, 1, 0x0000000000000000, 0x7ff ); + TEST_IMM_OP( 10, slti, 0, 0x000000007fffffff, 0x000 ); + TEST_IMM_OP( 11, slti, 0, 0x000000007fffffff, 0x7ff ); + + TEST_IMM_OP( 12, slti, 1, 0xffffffff80000000, 0x7ff ); + TEST_IMM_OP( 13, slti, 0, 0x000000007fffffff, 0x800 ); + + TEST_IMM_OP( 14, slti, 0, 0x0000000000000000, 0xfff ); + TEST_IMM_OP( 15, slti, 1, 0xffffffffffffffff, 0x001 ); + TEST_IMM_OP( 16, slti, 0, 0xffffffffffffffff, 0xfff ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_IMM_SRC1_EQ_DEST( 17, sltiu, 1, 11, 13 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_IMM_DEST_BYPASS( 18, 0, slti, 0, 15, 10 ); + TEST_IMM_DEST_BYPASS( 19, 1, slti, 1, 10, 16 ); + TEST_IMM_DEST_BYPASS( 20, 2, slti, 0, 16, 9 ); + + TEST_IMM_SRC1_BYPASS( 21, 0, slti, 1, 11, 15 ); + TEST_IMM_SRC1_BYPASS( 22, 1, slti, 0, 17, 8 ); + TEST_IMM_SRC1_BYPASS( 23, 2, slti, 1, 12, 14 ); + + TEST_IMM_ZEROSRC1( 24, slti, 0, 0xfff ); + TEST_IMM_ZERODEST( 25, slti, 0x00ff00ff, 0xfff ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/sltiu.S b/isa/rv64ui/sltiu.S new file mode 100644 index 0000000..0617e38 --- /dev/null +++ b/isa/rv64ui/sltiu.S @@ -0,0 +1,68 @@ +#***************************************************************************** +# sltiu.S +#----------------------------------------------------------------------------- +# +# Test sltiu instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_IMM_OP( 2, sltiu, 0, 0x0000000000000000, 0x000 ); + TEST_IMM_OP( 3, sltiu, 0, 0x0000000000000001, 0x001 ); + TEST_IMM_OP( 4, sltiu, 1, 0x0000000000000003, 0x007 ); + TEST_IMM_OP( 5, sltiu, 0, 0x0000000000000007, 0x003 ); + + TEST_IMM_OP( 6, sltiu, 1, 0x0000000000000000, 0x800 ); + TEST_IMM_OP( 7, sltiu, 0, 0xffffffff80000000, 0x000 ); + TEST_IMM_OP( 8, sltiu, 1, 0xffffffff80000000, 0x800 ); + + TEST_IMM_OP( 9, sltiu, 1, 0x0000000000000000, 0x7ff ); + TEST_IMM_OP( 10, sltiu, 0, 0x000000007fffffff, 0x000 ); + TEST_IMM_OP( 11, sltiu, 0, 0x000000007fffffff, 0x7ff ); + + TEST_IMM_OP( 12, sltiu, 0, 0xffffffff80000000, 0x7ff ); + TEST_IMM_OP( 13, sltiu, 1, 0x000000007fffffff, 0x800 ); + + TEST_IMM_OP( 14, sltiu, 1, 0x0000000000000000, 0xfff ); + TEST_IMM_OP( 15, sltiu, 0, 0xffffffffffffffff, 0x001 ); + TEST_IMM_OP( 16, sltiu, 0, 0xffffffffffffffff, 0xfff ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_IMM_SRC1_EQ_DEST( 17, sltiu, 1, 11, 13 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_IMM_DEST_BYPASS( 18, 0, sltiu, 0, 15, 10 ); + TEST_IMM_DEST_BYPASS( 19, 1, sltiu, 1, 10, 16 ); + TEST_IMM_DEST_BYPASS( 20, 2, sltiu, 0, 16, 9 ); + + TEST_IMM_SRC1_BYPASS( 21, 0, sltiu, 1, 11, 15 ); + TEST_IMM_SRC1_BYPASS( 22, 1, sltiu, 0, 17, 8 ); + TEST_IMM_SRC1_BYPASS( 23, 2, sltiu, 1, 12, 14 ); + + TEST_IMM_ZEROSRC1( 24, sltiu, 1, 0xfff ); + TEST_IMM_ZERODEST( 25, sltiu, 0x00ff00ff, 0xfff ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/sltu.S b/isa/rv64ui/sltu.S new file mode 100644 index 0000000..f853d95 --- /dev/null +++ b/isa/rv64ui/sltu.S @@ -0,0 +1,82 @@ +#***************************************************************************** +# sltu.S +#----------------------------------------------------------------------------- +# +# Test sltu instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_RR_OP( 2, sltu, 0, 0x00000000, 0x00000000 ); + TEST_RR_OP( 3, sltu, 0, 0x00000001, 0x00000001 ); + TEST_RR_OP( 4, sltu, 1, 0x00000003, 0x00000007 ); + TEST_RR_OP( 5, sltu, 0, 0x00000007, 0x00000003 ); + + TEST_RR_OP( 6, sltu, 1, 0x00000000, 0xffff8000 ); + TEST_RR_OP( 7, sltu, 0, 0x80000000, 0x00000000 ); + TEST_RR_OP( 8, sltu, 1, 0x80000000, 0xffff8000 ); + + TEST_RR_OP( 9, sltu, 1, 0x00000000, 0x00007fff ); + TEST_RR_OP( 10, sltu, 0, 0x7fffffff, 0x00000000 ); + TEST_RR_OP( 11, sltu, 0, 0x7fffffff, 0x00007fff ); + + TEST_RR_OP( 12, sltu, 0, 0x80000000, 0x00007fff ); + TEST_RR_OP( 13, sltu, 1, 0x7fffffff, 0xffff8000 ); + + TEST_RR_OP( 14, sltu, 1, 0x00000000, 0xffffffff ); + TEST_RR_OP( 15, sltu, 0, 0xffffffff, 0x00000001 ); + TEST_RR_OP( 16, sltu, 0, 0xffffffff, 0xffffffff ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_RR_SRC1_EQ_DEST( 17, sltu, 0, 14, 13 ); + TEST_RR_SRC2_EQ_DEST( 18, sltu, 1, 11, 13 ); + TEST_RR_SRC12_EQ_DEST( 19, sltu, 0, 13 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_RR_DEST_BYPASS( 20, 0, sltu, 1, 11, 13 ); + TEST_RR_DEST_BYPASS( 21, 1, sltu, 0, 14, 13 ); + TEST_RR_DEST_BYPASS( 22, 2, sltu, 1, 12, 13 ); + + TEST_RR_SRC12_BYPASS( 23, 0, 0, sltu, 0, 14, 13 ); + TEST_RR_SRC12_BYPASS( 24, 0, 1, sltu, 1, 11, 13 ); + TEST_RR_SRC12_BYPASS( 25, 0, 2, sltu, 0, 15, 13 ); + TEST_RR_SRC12_BYPASS( 26, 1, 0, sltu, 1, 10, 13 ); + TEST_RR_SRC12_BYPASS( 27, 1, 1, sltu, 0, 16, 13 ); + TEST_RR_SRC12_BYPASS( 28, 2, 0, sltu, 1, 9, 13 ); + + TEST_RR_SRC21_BYPASS( 29, 0, 0, sltu, 0, 17, 13 ); + TEST_RR_SRC21_BYPASS( 30, 0, 1, sltu, 1, 8, 13 ); + TEST_RR_SRC21_BYPASS( 31, 0, 2, sltu, 0, 18, 13 ); + TEST_RR_SRC21_BYPASS( 32, 1, 0, sltu, 1, 7, 13 ); + TEST_RR_SRC21_BYPASS( 33, 1, 1, sltu, 0, 19, 13 ); + TEST_RR_SRC21_BYPASS( 34, 2, 0, sltu, 1, 6, 13 ); + + TEST_RR_ZEROSRC1( 35, sltu, 1, -1 ); + TEST_RR_ZEROSRC2( 36, sltu, 0, -1 ); + TEST_RR_ZEROSRC12( 37, sltu, 0 ); + TEST_RR_ZERODEST( 38, sltu, 16, 30 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/sra.S b/isa/rv64ui/sra.S new file mode 100644 index 0000000..2dca12e --- /dev/null +++ b/isa/rv64ui/sra.S @@ -0,0 +1,88 @@ +#***************************************************************************** +# sra.S +#----------------------------------------------------------------------------- +# +# Test sra instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_RR_OP( 2, sra, 0xffffffff80000000, 0xffffffff80000000, 0 ); + TEST_RR_OP( 3, sra, 0xffffffffc0000000, 0xffffffff80000000, 1 ); + TEST_RR_OP( 4, sra, 0xffffffffff000000, 0xffffffff80000000, 7 ); + TEST_RR_OP( 5, sra, 0xfffffffffffe0000, 0xffffffff80000000, 14 ); + TEST_RR_OP( 6, sra, 0xffffffffffffffff, 0xffffffff80000001, 31 ); + + TEST_RR_OP( 7, sra, 0x000000007fffffff, 0x000000007fffffff, 0 ); + TEST_RR_OP( 8, sra, 0x000000003fffffff, 0x000000007fffffff, 1 ); + TEST_RR_OP( 9, sra, 0x0000000000ffffff, 0x000000007fffffff, 7 ); + TEST_RR_OP( 10, sra, 0x000000000001ffff, 0x000000007fffffff, 14 ); + TEST_RR_OP( 11, sra, 0x0000000000000000, 0x000000007fffffff, 31 ); + + TEST_RR_OP( 12, sra, 0xffffffff81818181, 0xffffffff81818181, 0 ); + TEST_RR_OP( 13, sra, 0xffffffffc0c0c0c0, 0xffffffff81818181, 1 ); + TEST_RR_OP( 14, sra, 0xffffffffff030303, 0xffffffff81818181, 7 ); + TEST_RR_OP( 15, sra, 0xfffffffffffe0606, 0xffffffff81818181, 14 ); + TEST_RR_OP( 16, sra, 0xffffffffffffffff, 0xffffffff81818181, 31 ); + + # Verify that shifts only use bottom five bits + + TEST_RR_OP( 17, sra, 0xffffffff81818181, 0xffffffff81818181, 0xffffffffffffffc0 ); + TEST_RR_OP( 18, sra, 0xffffffffc0c0c0c0, 0xffffffff81818181, 0xffffffffffffffc1 ); + TEST_RR_OP( 19, sra, 0xffffffffff030303, 0xffffffff81818181, 0xffffffffffffffc7 ); + TEST_RR_OP( 20, sra, 0xfffffffffffe0606, 0xffffffff81818181, 0xffffffffffffffce ); + TEST_RR_OP( 21, sra, 0xffffffffffffffff, 0xffffffff81818181, 0xffffffffffffffff ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_RR_SRC1_EQ_DEST( 22, sra, 0xffffffffff000000, 0xffffffff80000000, 7 ); + TEST_RR_SRC2_EQ_DEST( 23, sra, 0xfffffffffffe0000, 0xffffffff80000000, 14 ); + TEST_RR_SRC12_EQ_DEST( 24, sra, 0, 7 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_RR_DEST_BYPASS( 25, 0, sra, 0xffffffffff000000, 0xffffffff80000000, 7 ); + TEST_RR_DEST_BYPASS( 26, 1, sra, 0xfffffffffffe0000, 0xffffffff80000000, 14 ); + TEST_RR_DEST_BYPASS( 27, 2, sra, 0xffffffffffffffff, 0xffffffff80000000, 31 ); + + TEST_RR_SRC12_BYPASS( 28, 0, 0, sra, 0xffffffffff000000, 0xffffffff80000000, 7 ); + TEST_RR_SRC12_BYPASS( 29, 0, 1, sra, 0xfffffffffffe0000, 0xffffffff80000000, 14 ); + TEST_RR_SRC12_BYPASS( 30, 0, 2, sra, 0xffffffffffffffff, 0xffffffff80000000, 31 ); + TEST_RR_SRC12_BYPASS( 31, 1, 0, sra, 0xffffffffff000000, 0xffffffff80000000, 7 ); + TEST_RR_SRC12_BYPASS( 32, 1, 1, sra, 0xfffffffffffe0000, 0xffffffff80000000, 14 ); + TEST_RR_SRC12_BYPASS( 33, 2, 0, sra, 0xffffffffffffffff, 0xffffffff80000000, 31 ); + + TEST_RR_SRC21_BYPASS( 34, 0, 0, sra, 0xffffffffff000000, 0xffffffff80000000, 7 ); + TEST_RR_SRC21_BYPASS( 35, 0, 1, sra, 0xfffffffffffe0000, 0xffffffff80000000, 14 ); + TEST_RR_SRC21_BYPASS( 36, 0, 2, sra, 0xffffffffffffffff, 0xffffffff80000000, 31 ); + TEST_RR_SRC21_BYPASS( 37, 1, 0, sra, 0xffffffffff000000, 0xffffffff80000000, 7 ); + TEST_RR_SRC21_BYPASS( 38, 1, 1, sra, 0xfffffffffffe0000, 0xffffffff80000000, 14 ); + TEST_RR_SRC21_BYPASS( 39, 2, 0, sra, 0xffffffffffffffff, 0xffffffff80000000, 31 ); + + TEST_RR_ZEROSRC1( 40, sra, 0, 15 ); + TEST_RR_ZEROSRC2( 41, sra, 32, 32 ); + TEST_RR_ZEROSRC12( 42, sra, 0 ); + TEST_RR_ZERODEST( 43, sra, 1024, 2048 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/srai.S b/isa/rv64ui/srai.S new file mode 100644 index 0000000..4923254 --- /dev/null +++ b/isa/rv64ui/srai.S @@ -0,0 +1,66 @@ +#***************************************************************************** +# srai.S +#----------------------------------------------------------------------------- +# +# Test srai instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_IMM_OP( 2, srai, 0xffffff8000000000, 0xffffff8000000000, 0 ); + TEST_IMM_OP( 3, srai, 0xffffffffc0000000, 0xffffffff80000000, 1 ); + TEST_IMM_OP( 4, srai, 0xffffffffff000000, 0xffffffff80000000, 7 ); + TEST_IMM_OP( 5, srai, 0xfffffffffffe0000, 0xffffffff80000000, 14 ); + TEST_IMM_OP( 6, srai, 0xffffffffffffffff, 0xffffffff80000001, 31 ); + + TEST_IMM_OP( 7, srai, 0x000000007fffffff, 0x000000007fffffff, 0 ); + TEST_IMM_OP( 8, srai, 0x000000003fffffff, 0x000000007fffffff, 1 ); + TEST_IMM_OP( 9, srai, 0x0000000000ffffff, 0x000000007fffffff, 7 ); + TEST_IMM_OP( 10, srai, 0x000000000001ffff, 0x000000007fffffff, 14 ); + TEST_IMM_OP( 11, srai, 0x0000000000000000, 0x000000007fffffff, 31 ); + + TEST_IMM_OP( 12, srai, 0xffffffff81818181, 0xffffffff81818181, 0 ); + TEST_IMM_OP( 13, srai, 0xffffffffc0c0c0c0, 0xffffffff81818181, 1 ); + TEST_IMM_OP( 14, srai, 0xffffffffff030303, 0xffffffff81818181, 7 ); + TEST_IMM_OP( 15, srai, 0xfffffffffffe0606, 0xffffffff81818181, 14 ); + TEST_IMM_OP( 16, srai, 0xffffffffffffffff, 0xffffffff81818181, 31 ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_IMM_SRC1_EQ_DEST( 17, srai, 0xffffffffff000000, 0xffffffff80000000, 7 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_IMM_DEST_BYPASS( 18, 0, srai, 0xffffffffff000000, 0xffffffff80000000, 7 ); + TEST_IMM_DEST_BYPASS( 19, 1, srai, 0xfffffffffffe0000, 0xffffffff80000000, 14 ); + TEST_IMM_DEST_BYPASS( 20, 2, srai, 0xffffffffffffffff, 0xffffffff80000001, 31 ); + + TEST_IMM_SRC1_BYPASS( 21, 0, srai, 0xffffffffff000000, 0xffffffff80000000, 7 ); + TEST_IMM_SRC1_BYPASS( 22, 1, srai, 0xfffffffffffe0000, 0xffffffff80000000, 14 ); + TEST_IMM_SRC1_BYPASS( 23, 2, srai, 0xffffffffffffffff, 0xffffffff80000001, 31 ); + + TEST_IMM_ZEROSRC1( 24, srai, 0, 32 ); + TEST_IMM_ZERODEST( 25, srai, 33, 50 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/sraiw.S b/isa/rv64ui/sraiw.S new file mode 100644 index 0000000..a66f81b --- /dev/null +++ b/isa/rv64ui/sraiw.S @@ -0,0 +1,69 @@ +#***************************************************************************** +# sraiw.S +#----------------------------------------------------------------------------- +# +# Test sraiw instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_IMM_OP( 2, sraiw, 0xffffffff80000000, 0xffffffff80000000, 0 ); + TEST_IMM_OP( 3, sraiw, 0xffffffffc0000000, 0xffffffff80000000, 1 ); + TEST_IMM_OP( 4, sraiw, 0xffffffffff000000, 0xffffffff80000000, 7 ); + TEST_IMM_OP( 5, sraiw, 0xfffffffffffe0000, 0xffffffff80000000, 14 ); + TEST_IMM_OP( 6, sraiw, 0xffffffffffffffff, 0xffffffff80000001, 31 ); + + TEST_IMM_OP( 7, sraiw, 0x000000007fffffff, 0x000000007fffffff, 0 ); + TEST_IMM_OP( 8, sraiw, 0x000000003fffffff, 0x000000007fffffff, 1 ); + TEST_IMM_OP( 9, sraiw, 0x0000000000ffffff, 0x000000007fffffff, 7 ); + TEST_IMM_OP( 10, sraiw, 0x000000000001ffff, 0x000000007fffffff, 14 ); + TEST_IMM_OP( 11, sraiw, 0x0000000000000000, 0x000000007fffffff, 31 ); + + TEST_IMM_OP( 12, sraiw, 0xffffffff81818181, 0xffffffff81818181, 0 ); + TEST_IMM_OP( 13, sraiw, 0xffffffffc0c0c0c0, 0xffffffff81818181, 1 ); + TEST_IMM_OP( 14, sraiw, 0xffffffffff030303, 0xffffffff81818181, 7 ); + TEST_IMM_OP( 15, sraiw, 0xfffffffffffe0606, 0xffffffff81818181, 14 ); + TEST_IMM_OP( 16, sraiw, 0xffffffffffffffff, 0xffffffff81818181, 31 ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_IMM_SRC1_EQ_DEST( 17, sraiw, 0xffffffffff000000, 0xffffffff80000000, 7 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_IMM_DEST_BYPASS( 18, 0, sraiw, 0xffffffffff000000, 0xffffffff80000000, 7 ); + TEST_IMM_DEST_BYPASS( 19, 1, sraiw, 0xfffffffffffe0000, 0xffffffff80000000, 14 ); + TEST_IMM_DEST_BYPASS( 20, 2, sraiw, 0xffffffffffffffff, 0xffffffff80000001, 31 ); + + TEST_IMM_SRC1_BYPASS( 21, 0, sraiw, 0xffffffffff000000, 0xffffffff80000000, 7 ); + TEST_IMM_SRC1_BYPASS( 22, 1, sraiw, 0xfffffffffffe0000, 0xffffffff80000000, 14 ); + TEST_IMM_SRC1_BYPASS( 23, 2, sraiw, 0xffffffffffffffff, 0xffffffff80000001, 31 ); + + TEST_IMM_ZEROSRC1( 24, sraiw, 0, 31 ); + TEST_IMM_ZERODEST( 25, sraiw, 31, 28 ); + + TEST_IMM_OP( 26, sraiw, 0x0000000000000000, 0x00e0000000000000, 28) + TEST_IMM_OP( 27, sraiw, 0xffffffffff000000, 0x00000000f0000000, 4) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/sraw.S b/isa/rv64ui/sraw.S new file mode 100644 index 0000000..e6a2951 --- /dev/null +++ b/isa/rv64ui/sraw.S @@ -0,0 +1,88 @@ +#***************************************************************************** +# sraw.S +#----------------------------------------------------------------------------- +# +# Test sraw instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_RR_OP( 2, sraw, 0xffffffff80000000, 0xffffffff80000000, 0 ); + TEST_RR_OP( 3, sraw, 0xffffffffc0000000, 0xffffffff80000000, 1 ); + TEST_RR_OP( 4, sraw, 0xffffffffff000000, 0xffffffff80000000, 7 ); + TEST_RR_OP( 5, sraw, 0xfffffffffffe0000, 0xffffffff80000000, 14 ); + TEST_RR_OP( 6, sraw, 0xffffffffffffffff, 0xffffffff80000001, 31 ); + + TEST_RR_OP( 7, sraw, 0x000000007fffffff, 0x000000007fffffff, 0 ); + TEST_RR_OP( 8, sraw, 0x000000003fffffff, 0x000000007fffffff, 1 ); + TEST_RR_OP( 9, sraw, 0x0000000000ffffff, 0x000000007fffffff, 7 ); + TEST_RR_OP( 10, sraw, 0x000000000001ffff, 0x000000007fffffff, 14 ); + TEST_RR_OP( 11, sraw, 0x0000000000000000, 0x000000007fffffff, 31 ); + + TEST_RR_OP( 12, sraw, 0xffffffff81818181, 0xffffffff81818181, 0 ); + TEST_RR_OP( 13, sraw, 0xffffffffc0c0c0c0, 0xffffffff81818181, 1 ); + TEST_RR_OP( 14, sraw, 0xffffffffff030303, 0xffffffff81818181, 7 ); + TEST_RR_OP( 15, sraw, 0xfffffffffffe0606, 0xffffffff81818181, 14 ); + TEST_RR_OP( 16, sraw, 0xffffffffffffffff, 0xffffffff81818181, 31 ); + + # Verify that shifts only use bottom five bits + + TEST_RR_OP( 17, sraw, 0xffffffff81818181, 0xffffffff81818181, 0xffffffffffffffe0 ); + TEST_RR_OP( 18, sraw, 0xffffffffc0c0c0c0, 0xffffffff81818181, 0xffffffffffffffe1 ); + TEST_RR_OP( 19, sraw, 0xffffffffff030303, 0xffffffff81818181, 0xffffffffffffffe7 ); + TEST_RR_OP( 20, sraw, 0xfffffffffffe0606, 0xffffffff81818181, 0xffffffffffffffee ); + TEST_RR_OP( 21, sraw, 0xffffffffffffffff, 0xffffffff81818181, 0xffffffffffffffff ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_RR_SRC1_EQ_DEST( 22, sraw, 0xffffffffff000000, 0xffffffff80000000, 7 ); + TEST_RR_SRC2_EQ_DEST( 23, sraw, 0xfffffffffffe0000, 0xffffffff80000000, 14 ); + TEST_RR_SRC12_EQ_DEST( 24, sraw, 0, 7 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_RR_DEST_BYPASS( 25, 0, sraw, 0xffffffffff000000, 0xffffffff80000000, 7 ); + TEST_RR_DEST_BYPASS( 26, 1, sraw, 0xfffffffffffe0000, 0xffffffff80000000, 14 ); + TEST_RR_DEST_BYPASS( 27, 2, sraw, 0xffffffffffffffff, 0xffffffff80000000, 31 ); + + TEST_RR_SRC12_BYPASS( 28, 0, 0, sraw, 0xffffffffff000000, 0xffffffff80000000, 7 ); + TEST_RR_SRC12_BYPASS( 29, 0, 1, sraw, 0xfffffffffffe0000, 0xffffffff80000000, 14 ); + TEST_RR_SRC12_BYPASS( 30, 0, 2, sraw, 0xffffffffffffffff, 0xffffffff80000000, 31 ); + TEST_RR_SRC12_BYPASS( 31, 1, 0, sraw, 0xffffffffff000000, 0xffffffff80000000, 7 ); + TEST_RR_SRC12_BYPASS( 32, 1, 1, sraw, 0xfffffffffffe0000, 0xffffffff80000000, 14 ); + TEST_RR_SRC12_BYPASS( 33, 2, 0, sraw, 0xffffffffffffffff, 0xffffffff80000000, 31 ); + + TEST_RR_SRC21_BYPASS( 34, 0, 0, sraw, 0xffffffffff000000, 0xffffffff80000000, 7 ); + TEST_RR_SRC21_BYPASS( 35, 0, 1, sraw, 0xfffffffffffe0000, 0xffffffff80000000, 14 ); + TEST_RR_SRC21_BYPASS( 36, 0, 2, sraw, 0xffffffffffffffff, 0xffffffff80000000, 31 ); + TEST_RR_SRC21_BYPASS( 37, 1, 0, sraw, 0xffffffffff000000, 0xffffffff80000000, 7 ); + TEST_RR_SRC21_BYPASS( 38, 1, 1, sraw, 0xfffffffffffe0000, 0xffffffff80000000, 14 ); + TEST_RR_SRC21_BYPASS( 39, 2, 0, sraw, 0xffffffffffffffff, 0xffffffff80000000, 31 ); + + TEST_RR_ZEROSRC1( 40, sraw, 0, 15 ); + TEST_RR_ZEROSRC2( 41, sraw, 32, 32 ); + TEST_RR_ZEROSRC12( 42, sraw, 0 ); + TEST_RR_ZERODEST( 43, sraw, 1024, 2048 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/srl.S b/isa/rv64ui/srl.S new file mode 100644 index 0000000..2087b90 --- /dev/null +++ b/isa/rv64ui/srl.S @@ -0,0 +1,88 @@ +#***************************************************************************** +# srl.S +#----------------------------------------------------------------------------- +# +# Test srl instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_RR_OP( 2, srl, 0xffffffff80000000, 0xffffffff80000000, 0 ); + TEST_RR_OP( 3, srl, 0x7fffffffc0000000, 0xffffffff80000000, 1 ); + TEST_RR_OP( 4, srl, 0x01ffffffff000000, 0xffffffff80000000, 7 ); + TEST_RR_OP( 5, srl, 0x0003fffffffe0000, 0xffffffff80000000, 14 ); + TEST_RR_OP( 6, srl, 0x00000001ffffffff, 0xffffffff80000001, 31 ); + + TEST_RR_OP( 7, srl, 0xffffffffffffffff, 0xffffffffffffffff, 0 ); + TEST_RR_OP( 8, srl, 0x7fffffffffffffff, 0xffffffffffffffff, 1 ); + TEST_RR_OP( 9, srl, 0x01ffffffffffffff, 0xffffffffffffffff, 7 ); + TEST_RR_OP( 10, srl, 0x0003ffffffffffff, 0xffffffffffffffff, 14 ); + TEST_RR_OP( 11, srl, 0x00000001ffffffff, 0xffffffffffffffff, 31 ); + + TEST_RR_OP( 12, srl, 0x0000000021212121, 0x0000000021212121, 0 ); + TEST_RR_OP( 13, srl, 0x0000000010909090, 0x0000000021212121, 1 ); + TEST_RR_OP( 14, srl, 0x0000000000424242, 0x0000000021212121, 7 ); + TEST_RR_OP( 15, srl, 0x0000000000008484, 0x0000000021212121, 14 ); + TEST_RR_OP( 16, srl, 0x0000000000000000, 0x0000000021212121, 31 ); + + # Verify that shifts only use bottom five bits + + TEST_RR_OP( 17, srl, 0x0000000021212121, 0x0000000021212121, 0xffffffffffffffc0 ); + TEST_RR_OP( 18, srl, 0x0000000010909090, 0x0000000021212121, 0xffffffffffffffc1 ); + TEST_RR_OP( 19, srl, 0x0000000000424242, 0x0000000021212121, 0xffffffffffffffc7 ); + TEST_RR_OP( 20, srl, 0x0000000000008484, 0x0000000021212121, 0xffffffffffffffce ); + TEST_RR_OP( 21, srl, 0x0000000000000000, 0x0000000021212121, 0xffffffffffffffff ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_RR_SRC1_EQ_DEST( 22, srl, 0x01ffffffff000000, 0xffffffff80000000, 7 ); + TEST_RR_SRC2_EQ_DEST( 23, srl, 0x0003fffffffe0000, 0xffffffff80000000, 14 ); + TEST_RR_SRC12_EQ_DEST( 24, srl, 0, 7 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_RR_DEST_BYPASS( 25, 0, srl, 0x01ffffffff000000, 0xffffffff80000000, 7 ); + TEST_RR_DEST_BYPASS( 26, 1, srl, 0x0003fffffffe0000, 0xffffffff80000000, 14 ); + TEST_RR_DEST_BYPASS( 27, 2, srl, 0x00000001ffffffff, 0xffffffff80000000, 31 ); + + TEST_RR_SRC12_BYPASS( 28, 0, 0, srl, 0x01ffffffff000000, 0xffffffff80000000, 7 ); + TEST_RR_SRC12_BYPASS( 29, 0, 1, srl, 0x0003fffffffe0000, 0xffffffff80000000, 14 ); + TEST_RR_SRC12_BYPASS( 30, 0, 2, srl, 0x00000001ffffffff, 0xffffffff80000000, 31 ); + TEST_RR_SRC12_BYPASS( 31, 1, 0, srl, 0x01ffffffff000000, 0xffffffff80000000, 7 ); + TEST_RR_SRC12_BYPASS( 32, 1, 1, srl, 0x0003fffffffe0000, 0xffffffff80000000, 14 ); + TEST_RR_SRC12_BYPASS( 33, 2, 0, srl, 0x00000001ffffffff, 0xffffffff80000000, 31 ); + + TEST_RR_SRC21_BYPASS( 34, 0, 0, srl, 0x01ffffffff000000, 0xffffffff80000000, 7 ); + TEST_RR_SRC21_BYPASS( 35, 0, 1, srl, 0x0003fffffffe0000, 0xffffffff80000000, 14 ); + TEST_RR_SRC21_BYPASS( 36, 0, 2, srl, 0x00000001ffffffff, 0xffffffff80000000, 31 ); + TEST_RR_SRC21_BYPASS( 37, 1, 0, srl, 0x01ffffffff000000, 0xffffffff80000000, 7 ); + TEST_RR_SRC21_BYPASS( 38, 1, 1, srl, 0x0003fffffffe0000, 0xffffffff80000000, 14 ); + TEST_RR_SRC21_BYPASS( 39, 2, 0, srl, 0x00000001ffffffff, 0xffffffff80000000, 31 ); + + TEST_RR_ZEROSRC1( 40, srl, 0, 15 ); + TEST_RR_ZEROSRC2( 41, srl, 32, 32 ); + TEST_RR_ZEROSRC12( 42, srl, 0 ); + TEST_RR_ZERODEST( 43, srl, 1024, 2048 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/srli.S b/isa/rv64ui/srli.S new file mode 100644 index 0000000..755db14 --- /dev/null +++ b/isa/rv64ui/srli.S @@ -0,0 +1,66 @@ +#***************************************************************************** +# srli.S +#----------------------------------------------------------------------------- +# +# Test srli instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_IMM_OP( 2, srli, 0xffffffff80000000, 0xffffffff80000000, 0 ); + TEST_IMM_OP( 3, srli, 0x7fffffffc0000000, 0xffffffff80000000, 1 ); + TEST_IMM_OP( 4, srli, 0x01ffffffff000000, 0xffffffff80000000, 7 ); + TEST_IMM_OP( 5, srli, 0x0003fffffffe0000, 0xffffffff80000000, 14 ); + TEST_IMM_OP( 6, srli, 0x00000001ffffffff, 0xffffffff80000001, 31 ); + + TEST_IMM_OP( 7, srli, 0xffffffffffffffff, 0xffffffffffffffff, 0 ); + TEST_IMM_OP( 8, srli, 0x7fffffffffffffff, 0xffffffffffffffff, 1 ); + TEST_IMM_OP( 9, srli, 0x01ffffffffffffff, 0xffffffffffffffff, 7 ); + TEST_IMM_OP( 10, srli, 0x0003ffffffffffff, 0xffffffffffffffff, 14 ); + TEST_IMM_OP( 11, srli, 0x00000001ffffffff, 0xffffffffffffffff, 31 ); + + TEST_IMM_OP( 12, srli, 0x0000000021212121, 0x0000000021212121, 0 ); + TEST_IMM_OP( 13, srli, 0x0000000010909090, 0x0000000021212121, 1 ); + TEST_IMM_OP( 14, srli, 0x0000000000424242, 0x0000000021212121, 7 ); + TEST_IMM_OP( 15, srli, 0x0000000000008484, 0x0000000021212121, 14 ); + TEST_IMM_OP( 16, srli, 0x0000000000000000, 0x0000000021212121, 31 ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_IMM_SRC1_EQ_DEST( 17, srli, 0x01ffffffff000000, 0xffffffff80000000, 7 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_IMM_DEST_BYPASS( 18, 0, srli, 0x01ffffffff000000, 0xffffffff80000000, 7 ); + TEST_IMM_DEST_BYPASS( 19, 1, srli, 0x0003fffffffe0000, 0xffffffff80000000, 14 ); + TEST_IMM_DEST_BYPASS( 20, 2, srli, 0x00000001ffffffff, 0xffffffff80000001, 31 ); + + TEST_IMM_SRC1_BYPASS( 21, 0, srli, 0x01ffffffff000000, 0xffffffff80000000, 7 ); + TEST_IMM_SRC1_BYPASS( 22, 1, srli, 0x0003fffffffe0000, 0xffffffff80000000, 14 ); + TEST_IMM_SRC1_BYPASS( 23, 2, srli, 0x00000001ffffffff, 0xffffffff80000001, 31 ); + + TEST_IMM_ZEROSRC1( 24, srli, 0, 32 ); + TEST_IMM_ZERODEST( 25, srli, 33, 50 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/srliw.S b/isa/rv64ui/srliw.S new file mode 100644 index 0000000..d4159d1 --- /dev/null +++ b/isa/rv64ui/srliw.S @@ -0,0 +1,66 @@ +#***************************************************************************** +# srliw.S +#----------------------------------------------------------------------------- +# +# Test srliw instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_IMM_OP( 2, srliw, 0xffffffff80000000, 0xffffffff80000000, 0 ); + TEST_IMM_OP( 3, srliw, 0x0000000040000000, 0xffffffff80000000, 1 ); + TEST_IMM_OP( 4, srliw, 0x0000000001000000, 0xffffffff80000000, 7 ); + TEST_IMM_OP( 5, srliw, 0x0000000000020000, 0xffffffff80000000, 14 ); + TEST_IMM_OP( 6, srliw, 0x0000000000000001, 0xffffffff80000001, 31 ); + + TEST_IMM_OP( 7, srliw, 0xffffffffffffffff, 0xffffffffffffffff, 0 ); + TEST_IMM_OP( 8, srliw, 0x000000007fffffff, 0xffffffffffffffff, 1 ); + TEST_IMM_OP( 9, srliw, 0x0000000001ffffff, 0xffffffffffffffff, 7 ); + TEST_IMM_OP( 10, srliw, 0x000000000003ffff, 0xffffffffffffffff, 14 ); + TEST_IMM_OP( 11, srliw, 0x0000000000000001, 0xffffffffffffffff, 31 ); + + TEST_IMM_OP( 12, srliw, 0x0000000021212121, 0x0000000021212121, 0 ); + TEST_IMM_OP( 13, srliw, 0x0000000010909090, 0x0000000021212121, 1 ); + TEST_IMM_OP( 14, srliw, 0x0000000000424242, 0x0000000021212121, 7 ); + TEST_IMM_OP( 15, srliw, 0x0000000000008484, 0x0000000021212121, 14 ); + TEST_IMM_OP( 16, srliw, 0x0000000000000000, 0x0000000021212121, 31 ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_IMM_SRC1_EQ_DEST( 17, srliw, 0x0000000001000000, 0xffffffff80000000, 7 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_IMM_DEST_BYPASS( 18, 0, srliw, 0x0000000001000000, 0xffffffff80000000, 7 ); + TEST_IMM_DEST_BYPASS( 19, 1, srliw, 0x0000000000020000, 0xffffffff80000000, 14 ); + TEST_IMM_DEST_BYPASS( 20, 2, srliw, 0x0000000000000001, 0xffffffff80000001, 31 ); + + TEST_IMM_SRC1_BYPASS( 21, 0, srliw, 0x0000000001000000, 0xffffffff80000000, 7 ); + TEST_IMM_SRC1_BYPASS( 22, 1, srliw, 0x0000000000020000, 0xffffffff80000000, 14 ); + TEST_IMM_SRC1_BYPASS( 23, 2, srliw, 0x0000000000000001, 0xffffffff80000001, 31 ); + + TEST_IMM_ZEROSRC1( 24, srliw, 0, 31 ); + TEST_IMM_ZERODEST( 25, srliw, 31, 28 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/srlw.S b/isa/rv64ui/srlw.S new file mode 100644 index 0000000..d103611 --- /dev/null +++ b/isa/rv64ui/srlw.S @@ -0,0 +1,88 @@ +#***************************************************************************** +# srlw.S +#----------------------------------------------------------------------------- +# +# Test srlw instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_RR_OP( 2, srlw, 0xffffffff80000000, 0xffffffff80000000, 0 ); + TEST_RR_OP( 3, srlw, 0x0000000040000000, 0xffffffff80000000, 1 ); + TEST_RR_OP( 4, srlw, 0x0000000001000000, 0xffffffff80000000, 7 ); + TEST_RR_OP( 5, srlw, 0x0000000000020000, 0xffffffff80000000, 14 ); + TEST_RR_OP( 6, srlw, 0x0000000000000001, 0xffffffff80000001, 31 ); + + TEST_RR_OP( 7, srlw, 0xffffffffffffffff, 0xffffffffffffffff, 0 ); + TEST_RR_OP( 8, srlw, 0x000000007fffffff, 0xffffffffffffffff, 1 ); + TEST_RR_OP( 9, srlw, 0x0000000001ffffff, 0xffffffffffffffff, 7 ); + TEST_RR_OP( 10, srlw, 0x000000000003ffff, 0xffffffffffffffff, 14 ); + TEST_RR_OP( 11, srlw, 0x0000000000000001, 0xffffffffffffffff, 31 ); + + TEST_RR_OP( 12, srlw, 0x0000000021212121, 0x0000000021212121, 0 ); + TEST_RR_OP( 13, srlw, 0x0000000010909090, 0x0000000021212121, 1 ); + TEST_RR_OP( 14, srlw, 0x0000000000424242, 0x0000000021212121, 7 ); + TEST_RR_OP( 15, srlw, 0x0000000000008484, 0x0000000021212121, 14 ); + TEST_RR_OP( 16, srlw, 0x0000000000000000, 0x0000000021212121, 31 ); + + # Verify that shifts only use bottom five bits + + TEST_RR_OP( 17, srlw, 0x0000000021212121, 0x0000000021212121, 0xffffffffffffffe0 ); + TEST_RR_OP( 18, srlw, 0x0000000010909090, 0x0000000021212121, 0xffffffffffffffe1 ); + TEST_RR_OP( 19, srlw, 0x0000000000424242, 0x0000000021212121, 0xffffffffffffffe7 ); + TEST_RR_OP( 20, srlw, 0x0000000000008484, 0x0000000021212121, 0xffffffffffffffee ); + TEST_RR_OP( 21, srlw, 0x0000000000000000, 0x0000000021212121, 0xffffffffffffffff ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_RR_SRC1_EQ_DEST( 22, srlw, 0x0000000001000000, 0xffffffff80000000, 7 ); + TEST_RR_SRC2_EQ_DEST( 23, srlw, 0x0000000000020000, 0xffffffff80000000, 14 ); + TEST_RR_SRC12_EQ_DEST( 24, srlw, 0, 7 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_RR_DEST_BYPASS( 25, 0, srlw, 0x0000000001000000, 0xffffffff80000000, 7 ); + TEST_RR_DEST_BYPASS( 26, 1, srlw, 0x0000000000020000, 0xffffffff80000000, 14 ); + TEST_RR_DEST_BYPASS( 27, 2, srlw, 0x0000000000000001, 0xffffffff80000000, 31 ); + + TEST_RR_SRC12_BYPASS( 28, 0, 0, srlw, 0x0000000001000000, 0xffffffff80000000, 7 ); + TEST_RR_SRC12_BYPASS( 29, 0, 1, srlw, 0x0000000000020000, 0xffffffff80000000, 14 ); + TEST_RR_SRC12_BYPASS( 30, 0, 2, srlw, 0x0000000000000001, 0xffffffff80000000, 31 ); + TEST_RR_SRC12_BYPASS( 31, 1, 0, srlw, 0x0000000001000000, 0xffffffff80000000, 7 ); + TEST_RR_SRC12_BYPASS( 32, 1, 1, srlw, 0x0000000000020000, 0xffffffff80000000, 14 ); + TEST_RR_SRC12_BYPASS( 33, 2, 0, srlw, 0x0000000000000001, 0xffffffff80000000, 31 ); + + TEST_RR_SRC21_BYPASS( 34, 0, 0, srlw, 0x0000000001000000, 0xffffffff80000000, 7 ); + TEST_RR_SRC21_BYPASS( 35, 0, 1, srlw, 0x0000000000020000, 0xffffffff80000000, 14 ); + TEST_RR_SRC21_BYPASS( 36, 0, 2, srlw, 0x0000000000000001, 0xffffffff80000000, 31 ); + TEST_RR_SRC21_BYPASS( 37, 1, 0, srlw, 0x0000000001000000, 0xffffffff80000000, 7 ); + TEST_RR_SRC21_BYPASS( 38, 1, 1, srlw, 0x0000000000020000, 0xffffffff80000000, 14 ); + TEST_RR_SRC21_BYPASS( 39, 2, 0, srlw, 0x0000000000000001, 0xffffffff80000000, 31 ); + + TEST_RR_ZEROSRC1( 40, srlw, 0, 15 ); + TEST_RR_ZEROSRC2( 41, srlw, 32, 32 ); + TEST_RR_ZEROSRC12( 42, srlw, 0 ); + TEST_RR_ZERODEST( 43, srlw, 1024, 2048 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/sub.S b/isa/rv64ui/sub.S new file mode 100644 index 0000000..7180e08 --- /dev/null +++ b/isa/rv64ui/sub.S @@ -0,0 +1,81 @@ +#***************************************************************************** +# sub.S +#----------------------------------------------------------------------------- +# +# Test sub instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_RR_OP( 2, sub, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000 ); + TEST_RR_OP( 3, sub, 0x0000000000000000, 0x0000000000000001, 0x0000000000000001 ); + TEST_RR_OP( 4, sub, 0xfffffffffffffffc, 0x0000000000000003, 0x0000000000000007 ); + + TEST_RR_OP( 5, sub, 0x0000000000008000, 0x0000000000000000, 0xffffffffffff8000 ); + TEST_RR_OP( 6, sub, 0xffffffff80000000, 0xffffffff80000000, 0x0000000000000000 ); + TEST_RR_OP( 7, sub, 0xffffffff80008000, 0xffffffff80000000, 0xffffffffffff8000 ); + + TEST_RR_OP( 8, sub, 0xffffffffffff8001, 0x0000000000000000, 0x0000000000007fff ); + TEST_RR_OP( 9, sub, 0x000000007fffffff, 0x000000007fffffff, 0x0000000000000000 ); + TEST_RR_OP( 10, sub, 0x000000007fff8000, 0x000000007fffffff, 0x0000000000007fff ); + + TEST_RR_OP( 11, sub, 0xffffffff7fff8001, 0xffffffff80000000, 0x0000000000007fff ); + TEST_RR_OP( 12, sub, 0x0000000080007fff, 0x000000007fffffff, 0xffffffffffff8000 ); + + TEST_RR_OP( 13, sub, 0x0000000000000001, 0x0000000000000000, 0xffffffffffffffff ); + TEST_RR_OP( 14, sub, 0xfffffffffffffffe, 0xffffffffffffffff, 0x0000000000000001 ); + TEST_RR_OP( 15, sub, 0x0000000000000000, 0xffffffffffffffff, 0xffffffffffffffff ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_RR_SRC1_EQ_DEST( 16, sub, 2, 13, 11 ); + TEST_RR_SRC2_EQ_DEST( 17, sub, 3, 14, 11 ); + TEST_RR_SRC12_EQ_DEST( 18, sub, 0, 13 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_RR_DEST_BYPASS( 19, 0, sub, 2, 13, 11 ); + TEST_RR_DEST_BYPASS( 20, 1, sub, 3, 14, 11 ); + TEST_RR_DEST_BYPASS( 21, 2, sub, 4, 15, 11 ); + + TEST_RR_SRC12_BYPASS( 22, 0, 0, sub, 2, 13, 11 ); + TEST_RR_SRC12_BYPASS( 23, 0, 1, sub, 3, 14, 11 ); + TEST_RR_SRC12_BYPASS( 24, 0, 2, sub, 4, 15, 11 ); + TEST_RR_SRC12_BYPASS( 25, 1, 0, sub, 2, 13, 11 ); + TEST_RR_SRC12_BYPASS( 26, 1, 1, sub, 3, 14, 11 ); + TEST_RR_SRC12_BYPASS( 27, 2, 0, sub, 4, 15, 11 ); + + TEST_RR_SRC21_BYPASS( 28, 0, 0, sub, 2, 13, 11 ); + TEST_RR_SRC21_BYPASS( 29, 0, 1, sub, 3, 14, 11 ); + TEST_RR_SRC21_BYPASS( 30, 0, 2, sub, 4, 15, 11 ); + TEST_RR_SRC21_BYPASS( 31, 1, 0, sub, 2, 13, 11 ); + TEST_RR_SRC21_BYPASS( 32, 1, 1, sub, 3, 14, 11 ); + TEST_RR_SRC21_BYPASS( 33, 2, 0, sub, 4, 15, 11 ); + + TEST_RR_ZEROSRC1( 34, sub, 15, -15 ); + TEST_RR_ZEROSRC2( 35, sub, 32, 32 ); + TEST_RR_ZEROSRC12( 36, sub, 0 ); + TEST_RR_ZERODEST( 37, sub, 16, 30 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/subw.S b/isa/rv64ui/subw.S new file mode 100644 index 0000000..b54f608 --- /dev/null +++ b/isa/rv64ui/subw.S @@ -0,0 +1,81 @@ +#***************************************************************************** +# subw.S +#----------------------------------------------------------------------------- +# +# Test subw instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_RR_OP( 2, subw, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000 ); + TEST_RR_OP( 3, subw, 0x0000000000000000, 0x0000000000000001, 0x0000000000000001 ); + TEST_RR_OP( 4, subw, 0xfffffffffffffffc, 0x0000000000000003, 0x0000000000000007 ); + + TEST_RR_OP( 5, subw, 0x0000000000008000, 0x0000000000000000, 0xffffffffffff8000 ); + TEST_RR_OP( 6, subw, 0xffffffff80000000, 0xffffffff80000000, 0x0000000000000000 ); + TEST_RR_OP( 7, subw, 0xffffffff80008000, 0xffffffff80000000, 0xffffffffffff8000 ); + + TEST_RR_OP( 8, subw, 0xffffffffffff8001, 0x0000000000000000, 0x0000000000007fff ); + TEST_RR_OP( 9, subw, 0x000000007fffffff, 0x000000007fffffff, 0x0000000000000000 ); + TEST_RR_OP( 10, subw, 0x000000007fff8000, 0x000000007fffffff, 0x0000000000007fff ); + + TEST_RR_OP( 11, subw, 0x000000007fff8001, 0xffffffff80000000, 0x0000000000007fff ); + TEST_RR_OP( 12, subw, 0xffffffff80007fff, 0x000000007fffffff, 0xffffffffffff8000 ); + + TEST_RR_OP( 13, subw, 0x0000000000000001, 0x0000000000000000, 0xffffffffffffffff ); + TEST_RR_OP( 14, subw, 0xfffffffffffffffe, 0xffffffffffffffff, 0x0000000000000001 ); + TEST_RR_OP( 15, subw, 0x0000000000000000, 0xffffffffffffffff, 0xffffffffffffffff ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_RR_SRC1_EQ_DEST( 16, subw, 2, 13, 11 ); + TEST_RR_SRC2_EQ_DEST( 17, subw, 3, 14, 11 ); + TEST_RR_SRC12_EQ_DEST( 18, subw, 0, 13 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_RR_DEST_BYPASS( 19, 0, subw, 2, 13, 11 ); + TEST_RR_DEST_BYPASS( 20, 1, subw, 3, 14, 11 ); + TEST_RR_DEST_BYPASS( 21, 2, subw, 4, 15, 11 ); + + TEST_RR_SRC12_BYPASS( 22, 0, 0, subw, 2, 13, 11 ); + TEST_RR_SRC12_BYPASS( 23, 0, 1, subw, 3, 14, 11 ); + TEST_RR_SRC12_BYPASS( 24, 0, 2, subw, 4, 15, 11 ); + TEST_RR_SRC12_BYPASS( 25, 1, 0, subw, 2, 13, 11 ); + TEST_RR_SRC12_BYPASS( 26, 1, 1, subw, 3, 14, 11 ); + TEST_RR_SRC12_BYPASS( 27, 2, 0, subw, 4, 15, 11 ); + + TEST_RR_SRC21_BYPASS( 28, 0, 0, subw, 2, 13, 11 ); + TEST_RR_SRC21_BYPASS( 29, 0, 1, subw, 3, 14, 11 ); + TEST_RR_SRC21_BYPASS( 30, 0, 2, subw, 4, 15, 11 ); + TEST_RR_SRC21_BYPASS( 31, 1, 0, subw, 2, 13, 11 ); + TEST_RR_SRC21_BYPASS( 32, 1, 1, subw, 3, 14, 11 ); + TEST_RR_SRC21_BYPASS( 33, 2, 0, subw, 4, 15, 11 ); + + TEST_RR_ZEROSRC1( 34, subw, 15, -15 ); + TEST_RR_ZEROSRC2( 35, subw, 32, 32 ); + TEST_RR_ZEROSRC12( 36, subw, 0 ); + TEST_RR_ZERODEST( 37, subw, 16, 30 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/sw.S b/isa/rv64ui/sw.S new file mode 100644 index 0000000..a6f2b50 --- /dev/null +++ b/isa/rv64ui/sw.S @@ -0,0 +1,90 @@ +#***************************************************************************** +# sw.S +#----------------------------------------------------------------------------- +# +# Test sw instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Basic tests + #------------------------------------------------------------- + + TEST_ST_OP( 2, lw, sw, 0x0000000000aa00aa, 0, tdat ); + TEST_ST_OP( 3, lw, sw, 0xffffffffaa00aa00, 4, tdat ); + TEST_ST_OP( 4, lw, sw, 0x000000000aa00aa0, 8, tdat ); + TEST_ST_OP( 5, lw, sw, 0xffffffffa00aa00a, 12, tdat ); + + # Test with negative offset + + TEST_ST_OP( 6, lw, sw, 0x0000000000aa00aa, -12, tdat8 ); + TEST_ST_OP( 7, lw, sw, 0xffffffffaa00aa00, -8, tdat8 ); + TEST_ST_OP( 8, lw, sw, 0x000000000aa00aa0, -4, tdat8 ); + TEST_ST_OP( 9, lw, sw, 0xffffffffa00aa00a, 0, tdat8 ); + + # Test with a negative base + + TEST_CASE( 10, x3, 0x12345678, \ + la x1, tdat9; \ + li x2, 0x12345678; \ + addi x4, x1, -32; \ + sw x2, 32(x4); \ + lw x3, 0(x1); \ + ) + + # Test with unaligned base + + TEST_CASE( 11, x3, 0x58213098, \ + la x1, tdat9; \ + li x2, 0x58213098; \ + addi x1, x1, -3; \ + sw x2, 7(x1); \ + la x4, tdat10; \ + lw x3, 0(x4); \ + ) + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_ST_SRC12_BYPASS( 12, 0, 0, lw, sw, 0xffffffffaabbccdd, 0, tdat ); + TEST_ST_SRC12_BYPASS( 13, 0, 1, lw, sw, 0xffffffffdaabbccd, 4, tdat ); + TEST_ST_SRC12_BYPASS( 14, 0, 2, lw, sw, 0xffffffffddaabbcc, 8, tdat ); + TEST_ST_SRC12_BYPASS( 15, 1, 0, lw, sw, 0xffffffffcddaabbc, 12, tdat ); + TEST_ST_SRC12_BYPASS( 16, 1, 1, lw, sw, 0xffffffffccddaabb, 16, tdat ); + TEST_ST_SRC12_BYPASS( 17, 2, 0, lw, sw, 0xffffffffbccddaab, 20, tdat ); + + TEST_ST_SRC21_BYPASS( 18, 0, 0, lw, sw, 0x00112233, 0, tdat ); + TEST_ST_SRC21_BYPASS( 19, 0, 1, lw, sw, 0x30011223, 4, tdat ); + TEST_ST_SRC21_BYPASS( 20, 0, 2, lw, sw, 0x33001122, 8, tdat ); + TEST_ST_SRC21_BYPASS( 21, 1, 0, lw, sw, 0x23300112, 12, tdat ); + TEST_ST_SRC21_BYPASS( 22, 1, 1, lw, sw, 0x22330011, 16, tdat ); + TEST_ST_SRC21_BYPASS( 23, 2, 0, lw, sw, 0x12233001, 20, tdat ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +tdat: +tdat1: .word 0xdeadbeef +tdat2: .word 0xdeadbeef +tdat3: .word 0xdeadbeef +tdat4: .word 0xdeadbeef +tdat5: .word 0xdeadbeef +tdat6: .word 0xdeadbeef +tdat7: .word 0xdeadbeef +tdat8: .word 0xdeadbeef +tdat9: .word 0xdeadbeef +tdat10: .word 0xdeadbeef + +RVTEST_DATA_END diff --git a/isa/rv64ui/xor.S b/isa/rv64ui/xor.S new file mode 100644 index 0000000..172a15a --- /dev/null +++ b/isa/rv64ui/xor.S @@ -0,0 +1,67 @@ +#***************************************************************************** +# xor.S +#----------------------------------------------------------------------------- +# +# Test xor instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Logical tests + #------------------------------------------------------------- + + TEST_RR_OP( 2, xor, 0xf00ff00f, 0xff00ff00, 0x0f0f0f0f ); + TEST_RR_OP( 3, xor, 0xff00ff00, 0x0ff00ff0, 0xf0f0f0f0 ); + TEST_RR_OP( 4, xor, 0x0ff00ff0, 0x00ff00ff, 0x0f0f0f0f ); + TEST_RR_OP( 5, xor, 0x00ff00ff, 0xf00ff00f, 0xf0f0f0f0 ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_RR_SRC1_EQ_DEST( 6, xor, 0xf00ff00f, 0xff00ff00, 0x0f0f0f0f ); + TEST_RR_SRC2_EQ_DEST( 7, xor, 0xf00ff00f, 0xff00ff00, 0x0f0f0f0f ); + TEST_RR_SRC12_EQ_DEST( 8, xor, 0x00000000, 0xff00ff00 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_RR_DEST_BYPASS( 9, 0, xor, 0xf00ff00f, 0xff00ff00, 0x0f0f0f0f ); + TEST_RR_DEST_BYPASS( 10, 1, xor, 0xff00ff00, 0x0ff00ff0, 0xf0f0f0f0 ); + TEST_RR_DEST_BYPASS( 11, 2, xor, 0x0ff00ff0, 0x00ff00ff, 0x0f0f0f0f ); + + TEST_RR_SRC12_BYPASS( 12, 0, 0, xor, 0xf00ff00f, 0xff00ff00, 0x0f0f0f0f ); + TEST_RR_SRC12_BYPASS( 13, 0, 1, xor, 0xff00ff00, 0x0ff00ff0, 0xf0f0f0f0 ); + TEST_RR_SRC12_BYPASS( 14, 0, 2, xor, 0x0ff00ff0, 0x00ff00ff, 0x0f0f0f0f ); + TEST_RR_SRC12_BYPASS( 15, 1, 0, xor, 0xf00ff00f, 0xff00ff00, 0x0f0f0f0f ); + TEST_RR_SRC12_BYPASS( 16, 1, 1, xor, 0xff00ff00, 0x0ff00ff0, 0xf0f0f0f0 ); + TEST_RR_SRC12_BYPASS( 17, 2, 0, xor, 0x0ff00ff0, 0x00ff00ff, 0x0f0f0f0f ); + + TEST_RR_SRC21_BYPASS( 18, 0, 0, xor, 0xf00ff00f, 0xff00ff00, 0x0f0f0f0f ); + TEST_RR_SRC21_BYPASS( 19, 0, 1, xor, 0xff00ff00, 0x0ff00ff0, 0xf0f0f0f0 ); + TEST_RR_SRC21_BYPASS( 20, 0, 2, xor, 0x0ff00ff0, 0x00ff00ff, 0x0f0f0f0f ); + TEST_RR_SRC21_BYPASS( 21, 1, 0, xor, 0xf00ff00f, 0xff00ff00, 0x0f0f0f0f ); + TEST_RR_SRC21_BYPASS( 22, 1, 1, xor, 0xff00ff00, 0x0ff00ff0, 0xf0f0f0f0 ); + TEST_RR_SRC21_BYPASS( 23, 2, 0, xor, 0x0ff00ff0, 0x00ff00ff, 0x0f0f0f0f ); + + TEST_RR_ZEROSRC1( 24, xor, 0xff00ff00, 0xff00ff00 ); + TEST_RR_ZEROSRC2( 25, xor, 0x00ff00ff, 0x00ff00ff ); + TEST_RR_ZEROSRC12( 26, xor, 0 ); + TEST_RR_ZERODEST( 27, xor, 0x11111111, 0x22222222 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64ui/xori.S b/isa/rv64ui/xori.S new file mode 100644 index 0000000..4f95ea7 --- /dev/null +++ b/isa/rv64ui/xori.S @@ -0,0 +1,53 @@ +#***************************************************************************** +# xori.S +#----------------------------------------------------------------------------- +# +# Test xori instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Logical tests + #------------------------------------------------------------- + + TEST_IMM_OP( 2, xori, 0xffffffffff00f00f, 0x0000000000ff0f00, 0xf0f ); + TEST_IMM_OP( 3, xori, 0x000000000ff00f00, 0x000000000ff00ff0, 0x0f0 ); + TEST_IMM_OP( 4, xori, 0x0000000000ff0ff0, 0x0000000000ff08ff, 0x70f ); + TEST_IMM_OP( 5, xori, 0xfffffffff00ff0ff, 0xfffffffff00ff00f, 0x0f0 ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_IMM_SRC1_EQ_DEST( 6, xori, 0xffffffffff00f00f, 0xffffffffff00f700, 0x70f ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_IMM_DEST_BYPASS( 7, 0, xori, 0x000000000ff00f00, 0x000000000ff00ff0, 0x0f0 ); + TEST_IMM_DEST_BYPASS( 8, 1, xori, 0x0000000000ff0ff0, 0x0000000000ff08ff, 0x70f ); + TEST_IMM_DEST_BYPASS( 9, 2, xori, 0xfffffffff00ff0ff, 0xfffffffff00ff00f, 0x0f0 ); + + TEST_IMM_SRC1_BYPASS( 10, 0, xori, 0x000000000ff00f00, 0x000000000ff00ff0, 0x0f0 ); + TEST_IMM_SRC1_BYPASS( 11, 1, xori, 0x0000000000ff0ff0, 0x0000000000ff0fff, 0x00f ); + TEST_IMM_SRC1_BYPASS( 12, 2, xori, 0xfffffffff00ff0ff, 0xfffffffff00ff00f, 0x0f0 ); + + TEST_IMM_ZEROSRC1( 13, xori, 0x0f0, 0x0f0 ); + TEST_IMM_ZERODEST( 14, xori, 0x00ff00ff, 0x70f ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64uv/Makefile b/isa/rv64uv/Makefile new file mode 100644 index 0000000..1c41cca --- /dev/null +++ b/isa/rv64uv/Makefile @@ -0,0 +1,135 @@ +#======================================================================= +# Makefile for riscv-tests +#----------------------------------------------------------------------- + +default: all + +#-------------------------------------------------------------------- +# Sources +#-------------------------------------------------------------------- + +rv64uv_sc_tests = \ + wakeup fence \ + vvcfgivl vvcfg vsetvl \ + vfmvv vmsv vmvv \ + utidx \ + lb lbu lh lhu lw lwu ld \ + sb sh sw sd \ + fld flw \ + fsd fsw \ + amoadd_d amoand_d amomax_d amomaxu_d amomin_d amominu_d amoor_d amoswap_d \ + amoadd_w amoand_w amomax_w amomaxu_w amomin_w amominu_w amoor_w amoswap_w \ + imul \ + movn movz \ + fcvt fma \ + fmovn fmovz \ + vvadd_d vvadd_w vvadd_fd vvadd_fw \ + vvmul_d \ + vvadd_branch \ + +rv64uv_mc_tests = \ + +rv64uv_sc_vec_tests = \ + beq bge bgeu blt bltu bne \ + +#-------------------------------------------------------------------- +# Build rules +#-------------------------------------------------------------------- + +RISCV_GCC = riscv-gcc +RISCV_GCC_OPTS = -nostdlib -nostartfiles +RISCV_OBJDUMP = riscv-objdump --disassemble-all --disassemble-zeroes --section=.text --section=.data --section=.bss +RISCV_SIM = riscv-isa-run + +#------------------------------------------------------------ +# Build assembly tests + +%.hex: % + elf2hex 16 16384 $< > $@ + +%.dump: % + $(RISCV_OBJDUMP) $< > $@ + +%.out: % + $(RISCV_SIM) $< 2> $@ + +rv64uv_p_tests_bin = $(addprefix rv64uv-p-, $(rv64uv_sc_tests)) +rv64uv_p_tests_dump = $(addsuffix .dump, $(rv64uv_p_tests_bin)) +rv64uv_p_tests_hex = $(addsuffix .hex, $(rv64uv_p_tests_bin)) +rv64uv_p_tests_out = $(addsuffix .out, $(rv64uv_p_tests_bin)) + +$(rv64uv_p_tests_bin): rv64uv-p-%: %.S + $(RISCV_GCC) $(RISCV_GCC_OPTS) -I../../env/p -I../macros/scalar -T../../env/p/link.ld $< -o $@ + +rv64uv_pm_tests_bin = $(addprefix rv64uv-pm-, $(rv64uv_mc_tests)) +rv64uv_pm_tests_dump = $(addsuffix .dump, $(rv64uv_pm_tests_bin)) +rv64uv_pm_tests_hex = $(addsuffix .hex, $(rv64uv_pm_tests_bin)) +rv64uv_pm_tests_out = $(addsuffix .out, $(rv64uv_pm_tests_bin)) + +$(rv64uv_pm_tests_bin): rv64uv-pm-%: %.S + $(RISCV_GCC) $(RISCV_GCC_OPTS) -I../../env/pm -I../macros/scalar -T../../env/pm/link.ld $< -o $@ + +rv64uv_v_tests_bin = $(addprefix rv64uv-v-, $(rv64uv_sc_tests)) +rv64uv_v_tests_dump = $(addsuffix .dump, $(rv64uv_v_tests_bin)) +rv64uv_v_tests_hex = $(addsuffix .hex, $(rv64uv_v_tests_bin)) +rv64uv_v_tests_out = $(addsuffix .out, $(rv64uv_v_tests_bin)) + +$(rv64uv_v_tests_bin): rv64uv-v-%: %.S + $(RISCV_GCC) $(RISCV_GCC_OPTS) -std=gnu99 -O2 -I../../env/v -I../macros/scalar -T../../env/v/link.ld ../../env/v/entry.S ../../env/v/vm.c $< -lc -o $@ + +rv64uv_p_vec_tests_bin = $(addprefix rv64uv-p-vec-, $(rv64uv_sc_vec_tests)) +rv64uv_p_vec_tests_dump = $(addsuffix .dump, $(rv64uv_p_vec_tests_bin)) +rv64uv_p_vec_tests_hex = $(addsuffix .hex, $(rv64uv_p_vec_tests_bin)) +rv64uv_p_vec_tests_out = $(addsuffix .out, $(rv64uv_p_vec_tests_bin)) + +$(rv64uv_p_vec_tests_bin): rv64uv-p-vec-%: %.S + $(RISCV_GCC) $(RISCV_GCC_OPTS) -I../../env/p -I../macros/vector -T../../env/p/link.ld $< -o $@ + +rv64uv_pt_vec_tests_bin = $(addprefix rv64uv-pt-vec-, $(rv64uv_sc_vec_tests)) +rv64uv_pt_vec_tests_dump = $(addsuffix .dump, $(rv64uv_pt_vec_tests_bin)) +rv64uv_pt_vec_tests_hex = $(addsuffix .hex, $(rv64uv_pt_vec_tests_bin)) +rv64uv_pt_vec_tests_out = $(addsuffix .out, $(rv64uv_pt_vec_tests_bin)) + +$(rv64uv_pt_vec_tests_bin): rv64uv-pt-vec-%: %.S + $(RISCV_GCC) $(RISCV_GCC_OPTS) -I../../env/pt -I../macros/vector -T../../env/pt/link.ld $< -o $@ + +rv64uv_v_vec_tests_bin = $(addprefix rv64uv-v-vec-, $(rv64uv_sc_vec_tests)) +rv64uv_v_vec_tests_dump = $(addsuffix .dump, $(rv64uv_v_vec_tests_bin)) +rv64uv_v_vec_tests_hex = $(addsuffix .hex, $(rv64uv_v_vec_tests_bin)) +rv64uv_v_vec_tests_out = $(addsuffix .out, $(rv64uv_v_vec_tests_bin)) + +$(rv64uv_v_vec_tests_bin): rv64uv-v-vec-%: %.S + $(RISCV_GCC) $(RISCV_GCC_OPTS) -std=gnu99 -O2 -I../../env/v -I../macros/vector -T../../env/v/link.ld ../../env/v/entry.S ../../env/v/vm.c $< -lc -o $@ + +riscv-: \ + $(rv64uv_p_tests_dump) $(rv64uv_p_tests_hex) \ + $(rv64uv_pm_tests_dump) $(rv64uv_pm_tests_hex) \ + $(rv64uv_v_tests_dump) $(rv64uv_v_tests_hex) \ + $(rv64uv_p_vec_tests_dump) $(rv64uv_p_vec_tests_hex) \ + $(rv64uv_pt_vec_tests_dump) $(rv64uv_pt_vec_tests_hex) \ + $(rv64uv_v_vec_tests_dump) $(rv64uv_v_vec_tests_hex) \ + +out = $(rv64uv_p_tests_out) $(rv64uv_pm_tests_out) + +run: $(out) + echo; perl -ne 'print " [$$1] $$ARGV \t$$2\n" if /\*{3}(.{8})\*{3}(.*)/' \ + $(out); echo; + +junk += \ + $(rv64uv_p_tests_bin) $(rv64uv_p_tests_dump) $(rv64uv_p_tests_hex) $(rv64uv_p_tests_out) \ + $(rv64uv_pm_tests_bin) $(rv64uv_pm_tests_dump) $(rv64uv_pm_tests_hex) $(rv64uv_pm_tests_out) \ + $(rv64uv_v_tests_bin) $(rv64uv_v_tests_dump) $(rv64uv_v_tests_hex) $(rv64uv_v_tests_out) \ + $(rv64uv_p_vec_tests_bin) $(rv64uv_p_vec_tests_dump) $(rv64uv_p_vec_tests_hex) $(rv64uv_p_vec_tests_out) \ + $(rv64uv_pt_vec_tests_bin) $(rv64uv_pt_vec_tests_dump) $(rv64uv_pt_vec_tests_hex) $(rv64uv_pt_vec_tests_out) \ + $(rv64uv_v_vec_tests_bin) $(rv64uv_v_vec_tests_dump) $(rv64uv_v_vec_tests_hex) $(rv64uv_v_vec_tests_out) \ + +#------------------------------------------------------------ +# Default + +all: riscv- + +#------------------------------------------------------------ +# Clean up + +clean: + rm -rf $(junk) diff --git a/isa/rv64uv/amoadd_d.S b/isa/rv64uv/amoadd_d.S new file mode 100644 index 0000000..053f791 --- /dev/null +++ b/isa/rv64uv/amoadd_d.S @@ -0,0 +1,55 @@ +#***************************************************************************** +# amoadd_d.S +#----------------------------------------------------------------------------- +# +# Test amoadd.d instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,2048 + vvcfgivl a4,a4,4,0 + + la a5,amodest + vmsv vx2,a5 + li a5,1 + vmsv vx3,a5 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a6,dest + vsd vx1,a6 + fence.v.l + + li a1,0 +loop: + ld a0,0(a6) + addi x28,a1,2 + bne a0,a1,fail + addi a6,a6,8 + addi a1,a1,1 + bne a1,a4,loop + j pass + +vtcode: + amoadd.d x1,x3,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +amodest: + .dword 0 +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/amoadd_w.S b/isa/rv64uv/amoadd_w.S new file mode 100644 index 0000000..cf006a7 --- /dev/null +++ b/isa/rv64uv/amoadd_w.S @@ -0,0 +1,55 @@ +#***************************************************************************** +# amoadd_w.S +#----------------------------------------------------------------------------- +# +# Test amoadd.w instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,2048 + vvcfgivl a4,a4,4,0 + + la a5,amodest + vmsv vx2,a5 + li a5,1 + vmsv vx3,a5 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a6,dest + vsw vx1,a6 + fence.v.l + + li a1,0 +loop: + lw a0,0(a6) + addi x28,a1,2 + bne a0,a1,fail + addi a6,a6,4 + addi a1,a1,1 + bne a1,a4,loop + j pass + +vtcode: + amoadd.w x1,x3,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +amodest: + .word 0 +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/amoand_d.S b/isa/rv64uv/amoand_d.S new file mode 100644 index 0000000..5167ce6 --- /dev/null +++ b/isa/rv64uv/amoand_d.S @@ -0,0 +1,55 @@ +#***************************************************************************** +# amoand_d.S +#----------------------------------------------------------------------------- +# +# Test amoand.d instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,2048 + vvcfgivl a4,a4,4,0 + + la a5,amodest + vmsv vx2,a5 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a6,dest + vsd vx1,a6 + fence.v.l + + li a1,0 + li a2,0 +loop: + ld a0,0(a6) + addi x28,a1,2 + bne a0,a2,fail + addi a6,a6,8 + addi a1,a1,1 + bne a1,a4,loop + j pass + +vtcode: + li x3,-1 + amoand.d x1,x3,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +amodest: + .dword 0 +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/amoand_w.S b/isa/rv64uv/amoand_w.S new file mode 100644 index 0000000..111291b --- /dev/null +++ b/isa/rv64uv/amoand_w.S @@ -0,0 +1,55 @@ +#***************************************************************************** +# amoand_w.S +#----------------------------------------------------------------------------- +# +# Test amoand.w instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,2048 + vvcfgivl a4,a4,4,0 + + la a5,amodest + vmsv vx2,a5 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a6,dest + vsw vx1,a6 + fence.v.l + + li a1,0 + li a2,0 +loop: + lw a0,0(a6) + addi x28,a1,2 + bne a0,a2,fail + addi a6,a6,4 + addi a1,a1,1 + bne a1,a4,loop + j pass + +vtcode: + li x3,-1 + amoand.w x1,x3,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +amodest: + .word 0 +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/amomax_d.S b/isa/rv64uv/amomax_d.S new file mode 100644 index 0000000..e29e6e7 --- /dev/null +++ b/isa/rv64uv/amomax_d.S @@ -0,0 +1,58 @@ +#***************************************************************************** +# amomax_d.S +#----------------------------------------------------------------------------- +# +# Test amomax.d instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,2048 + vvcfgivl a4,a4,4,0 + + la a5,amodest + vmsv vx2,a5 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a6,dest + vsd vx1,a6 + fence.v.l + + li a1,0 + li a2,0 +loop: + ld a0,0(a6) + addi x28,a1,2 + bne a0,a2,fail + addi a6,a6,8 + addi a1,a1,1 + bne a1,a4,loop + j pass + +vtcode: + utidx x3 + addi x3,x3,1 + li x1,-1 + mul x3,x3,x1 + amomax.d x1,x3,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +amodest: + .dword 0 +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/amomax_w.S b/isa/rv64uv/amomax_w.S new file mode 100644 index 0000000..2f7ebf4 --- /dev/null +++ b/isa/rv64uv/amomax_w.S @@ -0,0 +1,58 @@ +#***************************************************************************** +# amomax_w.S +#----------------------------------------------------------------------------- +# +# Test amomax.w instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,2048 + vvcfgivl a4,a4,4,0 + + la a5,amodest + vmsv vx2,a5 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a6,dest + vsw vx1,a6 + fence.v.l + + li a1,0 + li a2,0 +loop: + lw a0,0(a6) + addi x28,a1,2 + bne a0,a2,fail + addi a6,a6,4 + addi a1,a1,1 + bne a1,a4,loop + j pass + +vtcode: + utidx x3 + addi x3,x3,1 + li x1,-1 + mul x3,x3,x1 + amomax.w x1,x3,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +amodest: + .word 0 +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/amomaxu_d.S b/isa/rv64uv/amomaxu_d.S new file mode 100644 index 0000000..59a8a28 --- /dev/null +++ b/isa/rv64uv/amomaxu_d.S @@ -0,0 +1,58 @@ +#***************************************************************************** +# amomaxu_d.S +#----------------------------------------------------------------------------- +# +# Test amomaxu.d instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,2048 + vvcfgivl a4,a4,4,0 + + la a5,amodest + vmsv vx2,a5 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a6,dest + vsd vx1,a6 + fence.v.l + + li a1,0 + li a2,-1 +loop: + ld a0,0(a6) + addi x28,a1,2 + bne a0,a2,fail + addi a6,a6,8 + addi a1,a1,1 + bne a1,a4,loop + j pass + +vtcode: + utidx x3 + addi x3,x3,1 + li x1,-1 + mul x3,x3,x1 + amomaxu.d x1,x3,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +amodest: + .dword -1 +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/amomaxu_w.S b/isa/rv64uv/amomaxu_w.S new file mode 100644 index 0000000..2a97c71 --- /dev/null +++ b/isa/rv64uv/amomaxu_w.S @@ -0,0 +1,58 @@ +#***************************************************************************** +# amomaxu_w.S +#----------------------------------------------------------------------------- +# +# Test amomaxu.w instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,2048 + vvcfgivl a4,a4,4,0 + + la a5,amodest + vmsv vx2,a5 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a6,dest + vsw vx1,a6 + fence.v.l + + li a1,0 + li a2,-1 +loop: + lw a0,0(a6) + addi x28,a1,2 + bne a0,a2,fail + addi a6,a6,4 + addi a1,a1,1 + bne a1,a4,loop + j pass + +vtcode: + utidx x3 + addi x3,x3,1 + li x1,-1 + mul x3,x3,x1 + amomaxu.w x1,x3,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +amodest: + .word -1 +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/amomin_d.S b/isa/rv64uv/amomin_d.S new file mode 100644 index 0000000..01e1feb --- /dev/null +++ b/isa/rv64uv/amomin_d.S @@ -0,0 +1,62 @@ +#***************************************************************************** +# amomin_d.S +#----------------------------------------------------------------------------- +# +# Test amomin.d instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,2048 + vvcfgivl a4,a4,4,0 + + la a5,amodest + vmsv vx2,a5 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a6,dest + vsd vx1,a6 + fence.v.l + + li a1,0 + li a2,-1 +loop: + ld a0,0(a5) + addi x28,a1,2 + bne a0,a2,fail + addi a5,a5,8 + addi a1,a1,1 + addi a2,a2,-1 + bne a1,a4,loop + j pass + +vtcode: + utidx x3 + slli x3, x3, 3 + add x2, x2, x3 + utidx x3 + addi x3,x3,1 + li x1,-1 + mul x3,x3,x1 + amomin.d x1,x3,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +amodest: + .skip 16384 +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/amomin_w.S b/isa/rv64uv/amomin_w.S new file mode 100644 index 0000000..bac8400 --- /dev/null +++ b/isa/rv64uv/amomin_w.S @@ -0,0 +1,59 @@ +#***************************************************************************** +# amomin_w.S +#----------------------------------------------------------------------------- +# +# Test amomin.w instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,2048 + vvcfgivl a4,a4,4,0 + + la a5,amodest + vmsv vx2,a5 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a6,dest + vsw vx1,a6 + fence.v.l + + li a1,0 + li a2,0 +loop: + lw a0,0(a6) + addi x28,a1,2 + bne a0,a2,fail + addi a6,a6,4 + addi a1,a1,1 + addi a2,a2,-1 + bne a1,a4,loop + j pass + +vtcode: + utidx x3 + addi x3,x3,1 + li x1,-1 + mul x3,x3,x1 + amomin.w x1,x3,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +amodest: + .word 0 +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/amominu_d.S b/isa/rv64uv/amominu_d.S new file mode 100644 index 0000000..0951bab --- /dev/null +++ b/isa/rv64uv/amominu_d.S @@ -0,0 +1,58 @@ +#***************************************************************************** +# amominu_d.S +#----------------------------------------------------------------------------- +# +# Test amominu.d instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,2048 + vvcfgivl a4,a4,4,0 + + la a5,amodest + vmsv vx2,a5 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a6,dest + vsd vx1,a6 + fence.v.l + + li a1,0 + li a2,0 +loop: + ld a0,0(a6) + addi x28,a1,2 + bne a0,a2,fail + addi a6,a6,8 + addi a1,a1,1 + bne a1,a4,loop + j pass + +vtcode: + utidx x3 + addi x3,x3,1 + li x1,-1 + mul x3,x3,x1 + amominu.d x1,x3,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +amodest: + .dword 0 +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/amominu_w.S b/isa/rv64uv/amominu_w.S new file mode 100644 index 0000000..67e5f93 --- /dev/null +++ b/isa/rv64uv/amominu_w.S @@ -0,0 +1,58 @@ +#***************************************************************************** +# amominu_w.S +#----------------------------------------------------------------------------- +# +# Test amominu.w instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,2048 + vvcfgivl a4,a4,4,0 + + la a5,amodest + vmsv vx2,a5 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a6,dest + vsw vx1,a6 + fence.v.l + + li a1,0 + li a2,0 +loop: + lw a0,0(a6) + addi x28,a1,2 + bne a0,a2,fail + addi a6,a6,4 + addi a1,a1,1 + bne a1,a4,loop + j pass + +vtcode: + utidx x3 + addi x3,x3,1 + li x1,-1 + mul x3,x3,x1 + amominu.w x1,x3,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +amodest: + .word 0 +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/amoor_d.S b/isa/rv64uv/amoor_d.S new file mode 100644 index 0000000..b26f963 --- /dev/null +++ b/isa/rv64uv/amoor_d.S @@ -0,0 +1,55 @@ +#***************************************************************************** +# amoor_d.S +#----------------------------------------------------------------------------- +# +# Test amoor.d instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,2048 + vvcfgivl a4,a4,4,0 + + la a5,amodest + vmsv vx2,a5 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a6,dest + vsd vx1,a6 + fence.v.l + + li a1,0 + li a2,-1 +loop: + ld a0,0(a6) + addi x28,a1,2 + bne a0,a2,fail + addi a6,a6,8 + addi a1,a1,1 + bne a1,a4,loop + j pass + +vtcode: + li x3,7 + amoor.d x1,x3,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +amodest: + .dword -1 +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/amoor_w.S b/isa/rv64uv/amoor_w.S new file mode 100644 index 0000000..4d18c10 --- /dev/null +++ b/isa/rv64uv/amoor_w.S @@ -0,0 +1,55 @@ +#***************************************************************************** +# amoor_w.S +#----------------------------------------------------------------------------- +# +# Test amoor.w instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,2048 + vvcfgivl a4,a4,4,0 + + la a5,amodest + vmsv vx2,a5 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a6,dest + vsw vx1,a6 + fence.v.l + + li a1,0 + li a2,-1 +loop: + lw a0,0(a6) + addi x28,a1,2 + bne a0,a2,fail + addi a6,a6,4 + addi a1,a1,1 + bne a1,a4,loop + j pass + +vtcode: + li x3,7 + amoor.w x1,x3,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +amodest: + .word -1 +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/amoswap_d.S b/isa/rv64uv/amoswap_d.S new file mode 100644 index 0000000..0858277 --- /dev/null +++ b/isa/rv64uv/amoswap_d.S @@ -0,0 +1,55 @@ +#***************************************************************************** +# amoswap_d.S +#----------------------------------------------------------------------------- +# +# Test amoswap.d instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,2048 + vvcfgivl a4,a4,4,0 + + la a5,amodest + vmsv vx2,a5 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a6,dest + vsd vx1,a6 + fence.v.l + + li a1,0 +loop: + ld a0,0(a6) + addi x28,a1,2 + bne a0,a1,fail + addi a6,a6,8 + addi a1,a1,1 + bne a1,a4,loop + j pass + +vtcode: + utidx x3 + addi x3,x3,1 + amoswap.d x1,x3,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +amodest: + .dword 0 +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/amoswap_w.S b/isa/rv64uv/amoswap_w.S new file mode 100644 index 0000000..ae6f1da --- /dev/null +++ b/isa/rv64uv/amoswap_w.S @@ -0,0 +1,55 @@ +#***************************************************************************** +# amoswap_w.S +#----------------------------------------------------------------------------- +# +# Test amoswap.w instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,2048 + vvcfgivl a4,a4,4,0 + + la a5,amodest + vmsv vx2,a5 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a6,dest + vsw vx1,a6 + fence.v.l + + li a1,0 +loop: + lw a0,0(a6) + addi x28,a1,2 + bne a0,a1,fail + addi a6,a6,4 + addi a1,a1,1 + bne a1,a4,loop + j pass + +vtcode: + utidx x3 + addi x3,x3,1 + amoswap.w x1,x3,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +amodest: + .word 0 +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/beq.S b/isa/rv64uv/beq.S new file mode 100644 index 0000000..aa6f2ff --- /dev/null +++ b/isa/rv64uv/beq.S @@ -0,0 +1,94 @@ +#***************************************************************************** +# beq.S +#----------------------------------------------------------------------------- +# +# Test beq instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Branch tests + #------------------------------------------------------------- + + # Each test checks both forward and backward branches + + TEST_BR2_OP_TAKEN( 2, beq, 0, 0 ); + TEST_BR2_OP_TAKEN( 3, beq, 1, 1 ); + TEST_BR2_OP_TAKEN( 4, beq, -1, -1 ); + + TEST_BR2_OP_NOTTAKEN( 5, beq, 0, 1 ); + TEST_BR2_OP_NOTTAKEN( 6, beq, 1, 0 ); + TEST_BR2_OP_NOTTAKEN( 7, beq, -1, 1 ); + TEST_BR2_OP_NOTTAKEN( 8, beq, 1, -1 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_BR2_SRC12_BYPASS( 9, 0, 0, beq, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 10, 0, 1, beq, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 11, 0, 2, beq, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 12, 1, 0, beq, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 13, 1, 1, beq, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 14, 2, 0, beq, 0, -1 ); + + TEST_BR2_SRC12_BYPASS( 15, 0, 0, beq, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 16, 0, 1, beq, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 17, 0, 2, beq, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 18, 1, 0, beq, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 19, 1, 1, beq, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 20, 2, 0, beq, 0, -1 ); + + #------------------------------------------------------------- + # Test when uts diverge + #------------------------------------------------------------- + + TEST_BR2_DIVERGED_ODD_EVEN( 24, beq, 1, 1, \ + addi x3, x3, 1; \ + ) + TEST_BR2_DIVERGED_ODD_EVEN( 25, beq, 2, 2, \ + addi x3, x3, 1; \ + ) + TEST_BR2_DIVERGED_ODD_EVEN( 26, beq, 3, 3, \ + addi x3, x3, 1; \ + ) + + TEST_BR2_DIVERGED_ODD_EVEN( 27, beq, 1, 16, \ + addi x3, x3, 4; \ + mul x3, x3, x3; \ + ) + TEST_BR2_DIVERGED_ODD_EVEN( 28, beq, 2, 400, \ + addi x3, x3, 4; \ + mul x3, x3, x3; \ + ) + TEST_BR2_DIVERGED_ODD_EVEN( 29, beq, 3, 163216, \ + addi x3, x3, 4; \ + mul x3, x3, x3; \ + ) + + TEST_BR2_DIVERGED_FULL12( 30, beq, 1, 1, \ + addi x3, x3, 1; \ + ) + + TEST_BR2_DIVERGED_FULL12( 31, beq, 1, 16, \ + addi x3, x3, 4; \ + mul x3, x3, x3; \ + ) + + TEST_BR2_DIVERGED_MEM_FULL12( 32, beq, 1); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64uv/bge.S b/isa/rv64uv/bge.S new file mode 100644 index 0000000..06d15de --- /dev/null +++ b/isa/rv64uv/bge.S @@ -0,0 +1,97 @@ +#***************************************************************************** +# bge.S +#----------------------------------------------------------------------------- +# +# Test bge instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Branch tests + #------------------------------------------------------------- + + # Each test checks both forward and backward branches + + TEST_BR2_OP_TAKEN( 2, bge, 0, 0 ); + TEST_BR2_OP_TAKEN( 3, bge, 1, 1 ); + TEST_BR2_OP_TAKEN( 4, bge, -1, -1 ); + TEST_BR2_OP_TAKEN( 5, bge, 1, 0 ); + TEST_BR2_OP_TAKEN( 6, bge, 1, -1 ); + TEST_BR2_OP_TAKEN( 7, bge, -1, -2 ); + + TEST_BR2_OP_NOTTAKEN( 8, bge, 0, 1 ); + TEST_BR2_OP_NOTTAKEN( 9, bge, -1, 1 ); + TEST_BR2_OP_NOTTAKEN( 10, bge, -2, -1 ); + TEST_BR2_OP_NOTTAKEN( 11, bge, -2, 1 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_BR2_SRC12_BYPASS( 12, 0, 0, bge, -1, 0 ); + TEST_BR2_SRC12_BYPASS( 13, 0, 1, bge, -1, 0 ); + TEST_BR2_SRC12_BYPASS( 14, 0, 2, bge, -1, 0 ); + TEST_BR2_SRC12_BYPASS( 15, 1, 0, bge, -1, 0 ); + TEST_BR2_SRC12_BYPASS( 16, 1, 1, bge, -1, 0 ); + TEST_BR2_SRC12_BYPASS( 17, 2, 0, bge, -1, 0 ); + + TEST_BR2_SRC12_BYPASS( 18, 0, 0, bge, -1, 0 ); + TEST_BR2_SRC12_BYPASS( 19, 0, 1, bge, -1, 0 ); + TEST_BR2_SRC12_BYPASS( 20, 0, 2, bge, -1, 0 ); + TEST_BR2_SRC12_BYPASS( 21, 1, 0, bge, -1, 0 ); + TEST_BR2_SRC12_BYPASS( 22, 1, 1, bge, -1, 0 ); + TEST_BR2_SRC12_BYPASS( 23, 2, 0, bge, -1, 0 ); + + #------------------------------------------------------------- + # Test when uts diverge + #------------------------------------------------------------- + + TEST_BR2_DIVERGED_ODD_EVEN( 24, bge, 1, 1, \ + addi x3, x3, 1; \ + ) + TEST_BR2_DIVERGED_ODD_EVEN( 25, bge, 2, 2, \ + addi x3, x3, 1; \ + ) + TEST_BR2_DIVERGED_ODD_EVEN( 26, bge, 3, 3, \ + addi x3, x3, 1; \ + ) + + TEST_BR2_DIVERGED_ODD_EVEN( 27, bge, 1, 16, \ + addi x3, x3, 4; \ + mul x3, x3, x3; \ + ) + TEST_BR2_DIVERGED_ODD_EVEN( 28, bge, 2, 400, \ + addi x3, x3, 4; \ + mul x3, x3, x3; \ + ) + TEST_BR2_DIVERGED_ODD_EVEN( 29, bge, 3, 163216, \ + addi x3, x3, 4; \ + mul x3, x3, x3; \ + ) + + TEST_BR2_DIVERGED_FULL12( 30, bge, 1, 1, \ + addi x3, x3, 1; \ + ) + + TEST_BR2_DIVERGED_FULL12( 31, bge, 1, 16, \ + addi x3, x3, 4; \ + mul x3, x3, x3; \ + ) + + TEST_BR2_DIVERGED_MEM_FULL12( 32, bge, 1); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64uv/bgeu.S b/isa/rv64uv/bgeu.S new file mode 100644 index 0000000..5f54670 --- /dev/null +++ b/isa/rv64uv/bgeu.S @@ -0,0 +1,97 @@ +#***************************************************************************** +# bgeu.S +#----------------------------------------------------------------------------- +# +# Test bgeu instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Branch tests + #------------------------------------------------------------- + + # Each test checks both forward and backward branches + + TEST_BR2_OP_TAKEN( 2, bgeu, 0x00000000, 0x00000000 ); + TEST_BR2_OP_TAKEN( 3, bgeu, 0x00000001, 0x00000001 ); + TEST_BR2_OP_TAKEN( 4, bgeu, 0xffffffff, 0xffffffff ); + TEST_BR2_OP_TAKEN( 5, bgeu, 0x00000001, 0x00000000 ); + TEST_BR2_OP_TAKEN( 6, bgeu, 0xffffffff, 0xfffffffe ); + TEST_BR2_OP_TAKEN( 7, bgeu, 0xffffffff, 0x00000000 ); + + TEST_BR2_OP_NOTTAKEN( 8, bgeu, 0x00000000, 0x00000001 ); + TEST_BR2_OP_NOTTAKEN( 9, bgeu, 0xfffffffe, 0xffffffff ); + TEST_BR2_OP_NOTTAKEN( 10, bgeu, 0x00000000, 0xffffffff ); + TEST_BR2_OP_NOTTAKEN( 11, bgeu, 0x7fffffff, 0x80000000 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_BR2_SRC12_BYPASS( 12, 0, 0, bgeu, 0xefffffff, 0xf0000000 ); + TEST_BR2_SRC12_BYPASS( 13, 0, 1, bgeu, 0xefffffff, 0xf0000000 ); + TEST_BR2_SRC12_BYPASS( 14, 0, 2, bgeu, 0xefffffff, 0xf0000000 ); + TEST_BR2_SRC12_BYPASS( 15, 1, 0, bgeu, 0xefffffff, 0xf0000000 ); + TEST_BR2_SRC12_BYPASS( 16, 1, 1, bgeu, 0xefffffff, 0xf0000000 ); + TEST_BR2_SRC12_BYPASS( 17, 2, 0, bgeu, 0xefffffff, 0xf0000000 ); + + TEST_BR2_SRC12_BYPASS( 18, 0, 0, bgeu, 0xefffffff, 0xf0000000 ); + TEST_BR2_SRC12_BYPASS( 19, 0, 1, bgeu, 0xefffffff, 0xf0000000 ); + TEST_BR2_SRC12_BYPASS( 20, 0, 2, bgeu, 0xefffffff, 0xf0000000 ); + TEST_BR2_SRC12_BYPASS( 21, 1, 0, bgeu, 0xefffffff, 0xf0000000 ); + TEST_BR2_SRC12_BYPASS( 22, 1, 1, bgeu, 0xefffffff, 0xf0000000 ); + TEST_BR2_SRC12_BYPASS( 23, 2, 0, bgeu, 0xefffffff, 0xf0000000 ); + + #------------------------------------------------------------- + # Test when uts diverge + #------------------------------------------------------------- + + TEST_BR2_DIVERGED_ODD_EVEN( 24, bgeu, 1, 1, \ + addi x3, x3, 1; \ + ) + TEST_BR2_DIVERGED_ODD_EVEN( 25, bgeu, 2, 2, \ + addi x3, x3, 1; \ + ) + TEST_BR2_DIVERGED_ODD_EVEN( 26, bgeu, 3, 3, \ + addi x3, x3, 1; \ + ) + + TEST_BR2_DIVERGED_ODD_EVEN( 27, bgeu, 1, 16, \ + addi x3, x3, 4; \ + mul x3, x3, x3; \ + ) + TEST_BR2_DIVERGED_ODD_EVEN( 28, bgeu, 2, 400, \ + addi x3, x3, 4; \ + mul x3, x3, x3; \ + ) + TEST_BR2_DIVERGED_ODD_EVEN( 29, bgeu, 3, 163216, \ + addi x3, x3, 4; \ + mul x3, x3, x3; \ + ) + + TEST_BR2_DIVERGED_FULL12( 30, bgeu, 1, 1, \ + addi x3, x3, 1; \ + ) + + TEST_BR2_DIVERGED_FULL12( 31, bgeu, 1, 16, \ + addi x3, x3, 4; \ + mul x3, x3, x3; \ + ) + + TEST_BR2_DIVERGED_MEM_FULL12( 32, bgeu, 1); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64uv/blt.S b/isa/rv64uv/blt.S new file mode 100644 index 0000000..913c55f --- /dev/null +++ b/isa/rv64uv/blt.S @@ -0,0 +1,94 @@ +#***************************************************************************** +# blt.S +#----------------------------------------------------------------------------- +# +# Test blt instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Branch tests + #------------------------------------------------------------- + + # Each test checks both forward and backward branches + + TEST_BR2_OP_TAKEN( 2, blt, 0, 1 ); + TEST_BR2_OP_TAKEN( 3, blt, -1, 1 ); + TEST_BR2_OP_TAKEN( 4, blt, -2, -1 ); + + TEST_BR2_OP_NOTTAKEN( 5, blt, 1, 0 ); + TEST_BR2_OP_NOTTAKEN( 6, blt, 1, -1 ); + TEST_BR2_OP_NOTTAKEN( 7, blt, -1, -2 ); + TEST_BR2_OP_NOTTAKEN( 8, blt, 1, -2 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_BR2_SRC12_BYPASS( 9, 0, 0, blt, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 10, 0, 1, blt, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 11, 0, 2, blt, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 12, 1, 0, blt, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 13, 1, 1, blt, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 14, 2, 0, blt, 0, -1 ); + + TEST_BR2_SRC12_BYPASS( 15, 0, 0, blt, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 16, 0, 1, blt, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 17, 0, 2, blt, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 18, 1, 0, blt, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 19, 1, 1, blt, 0, -1 ); + TEST_BR2_SRC12_BYPASS( 20, 2, 0, blt, 0, -1 ); + + #------------------------------------------------------------- + # Test when uts diverge + #------------------------------------------------------------- + + TEST_BR2_DIVERGED_ODD_EVEN( 24, blt, 1, 1, \ + addi x3, x3, 1; \ + ) + TEST_BR2_DIVERGED_ODD_EVEN( 25, blt, 2, 2, \ + addi x3, x3, 1; \ + ) + TEST_BR2_DIVERGED_ODD_EVEN( 26, blt, 3, 3, \ + addi x3, x3, 1; \ + ) + + TEST_BR2_DIVERGED_ODD_EVEN( 27, blt, 1, 16, \ + addi x3, x3, 4; \ + mul x3, x3, x3; \ + ) + TEST_BR2_DIVERGED_ODD_EVEN( 28, blt, 2, 400, \ + addi x3, x3, 4; \ + mul x3, x3, x3; \ + ) + TEST_BR2_DIVERGED_ODD_EVEN( 29, blt, 3, 163216, \ + addi x3, x3, 4; \ + mul x3, x3, x3; \ + ) + + TEST_BR2_DIVERGED_FULL21( 30, blt, 0, 1, \ + addi x3, x3, 1; \ + ) + + TEST_BR2_DIVERGED_FULL21( 31, blt, 0, 16, \ + addi x3, x3, 4; \ + mul x3, x3, x3; \ + ) + + TEST_BR2_DIVERGED_MEM_FULL21( 32, blt, 0); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64uv/bltu.S b/isa/rv64uv/bltu.S new file mode 100644 index 0000000..5629791 --- /dev/null +++ b/isa/rv64uv/bltu.S @@ -0,0 +1,94 @@ +#***************************************************************************** +# bltu.S +#----------------------------------------------------------------------------- +# +# Test bltu instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Branch tests + #------------------------------------------------------------- + + # Each test checks both forward and backward branches + + TEST_BR2_OP_TAKEN( 2, bltu, 0x00000000, 0x00000001 ); + TEST_BR2_OP_TAKEN( 3, bltu, 0xfffffffe, 0xffffffff ); + TEST_BR2_OP_TAKEN( 4, bltu, 0x00000000, 0xffffffff ); + + TEST_BR2_OP_NOTTAKEN( 5, bltu, 0x00000001, 0x00000000 ); + TEST_BR2_OP_NOTTAKEN( 6, bltu, 0xffffffff, 0xfffffffe ); + TEST_BR2_OP_NOTTAKEN( 7, bltu, 0xffffffff, 0x00000000 ); + TEST_BR2_OP_NOTTAKEN( 8, bltu, 0x80000000, 0x7fffffff ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_BR2_SRC12_BYPASS( 9, 0, 0, bltu, 0xf0000000, 0xefffffff ); + TEST_BR2_SRC12_BYPASS( 10, 0, 1, bltu, 0xf0000000, 0xefffffff ); + TEST_BR2_SRC12_BYPASS( 11, 0, 2, bltu, 0xf0000000, 0xefffffff ); + TEST_BR2_SRC12_BYPASS( 12, 1, 0, bltu, 0xf0000000, 0xefffffff ); + TEST_BR2_SRC12_BYPASS( 13, 1, 1, bltu, 0xf0000000, 0xefffffff ); + TEST_BR2_SRC12_BYPASS( 14, 2, 0, bltu, 0xf0000000, 0xefffffff ); + + TEST_BR2_SRC12_BYPASS( 15, 0, 0, bltu, 0xf0000000, 0xefffffff ); + TEST_BR2_SRC12_BYPASS( 16, 0, 1, bltu, 0xf0000000, 0xefffffff ); + TEST_BR2_SRC12_BYPASS( 17, 0, 2, bltu, 0xf0000000, 0xefffffff ); + TEST_BR2_SRC12_BYPASS( 18, 1, 0, bltu, 0xf0000000, 0xefffffff ); + TEST_BR2_SRC12_BYPASS( 19, 1, 1, bltu, 0xf0000000, 0xefffffff ); + TEST_BR2_SRC12_BYPASS( 20, 2, 0, bltu, 0xf0000000, 0xefffffff ); + + #------------------------------------------------------------- + # Test when uts diverge + #------------------------------------------------------------- + + TEST_BR2_DIVERGED_ODD_EVEN( 24, bltu, 1, 1, \ + addi x3, x3, 1; \ + ) + TEST_BR2_DIVERGED_ODD_EVEN( 25, bltu, 2, 2, \ + addi x3, x3, 1; \ + ) + TEST_BR2_DIVERGED_ODD_EVEN( 26, bltu, 3, 3, \ + addi x3, x3, 1; \ + ) + + TEST_BR2_DIVERGED_ODD_EVEN( 27, bltu, 1, 16, \ + addi x3, x3, 4; \ + mul x3, x3, x3; \ + ) + TEST_BR2_DIVERGED_ODD_EVEN( 28, bltu, 2, 400, \ + addi x3, x3, 4; \ + mul x3, x3, x3; \ + ) + TEST_BR2_DIVERGED_ODD_EVEN( 29, bltu, 3, 163216, \ + addi x3, x3, 4; \ + mul x3, x3, x3; \ + ) + + TEST_BR2_DIVERGED_FULL21( 30, bltu, 0, 1, \ + addi x3, x3, 1; \ + ) + + TEST_BR2_DIVERGED_FULL21( 31, bltu, 0, 16, \ + addi x3, x3, 4; \ + mul x3, x3, x3; \ + ) + + TEST_BR2_DIVERGED_MEM_FULL21( 32, bltu, 0 ); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64uv/bne.S b/isa/rv64uv/bne.S new file mode 100644 index 0000000..a6b2347 --- /dev/null +++ b/isa/rv64uv/bne.S @@ -0,0 +1,94 @@ +#***************************************************************************** +# bne.S +#----------------------------------------------------------------------------- +# +# Test bne instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Branch tests + #------------------------------------------------------------- + + # Each test checks both forward and backward branches + + TEST_BR2_OP_TAKEN( 2, bne, 0, 1 ); + TEST_BR2_OP_TAKEN( 3, bne, 1, 0 ); + TEST_BR2_OP_TAKEN( 4, bne, -1, 1 ); + TEST_BR2_OP_TAKEN( 5, bne, 1, -1 ); + + TEST_BR2_OP_NOTTAKEN( 6, bne, 0, 0 ); + TEST_BR2_OP_NOTTAKEN( 7, bne, 1, 1 ); + TEST_BR2_OP_NOTTAKEN( 8, bne, -1, -1 ); + + #------------------------------------------------------------- + # Bypassing tests + #------------------------------------------------------------- + + TEST_BR2_SRC12_BYPASS( 9, 0, 0, bne, 0, 0 ); + TEST_BR2_SRC12_BYPASS( 10, 0, 1, bne, 0, 0 ); + TEST_BR2_SRC12_BYPASS( 11, 0, 2, bne, 0, 0 ); + TEST_BR2_SRC12_BYPASS( 12, 1, 0, bne, 0, 0 ); + TEST_BR2_SRC12_BYPASS( 13, 1, 1, bne, 0, 0 ); + TEST_BR2_SRC12_BYPASS( 14, 2, 0, bne, 0, 0 ); + + TEST_BR2_SRC12_BYPASS( 15, 0, 0, bne, 0, 0 ); + TEST_BR2_SRC12_BYPASS( 16, 0, 1, bne, 0, 0 ); + TEST_BR2_SRC12_BYPASS( 17, 0, 2, bne, 0, 0 ); + TEST_BR2_SRC12_BYPASS( 18, 1, 0, bne, 0, 0 ); + TEST_BR2_SRC12_BYPASS( 19, 1, 1, bne, 0, 0 ); + TEST_BR2_SRC12_BYPASS( 20, 2, 0, bne, 0, 0 ); + + #------------------------------------------------------------- + # Test when uts diverge + #------------------------------------------------------------- + + TEST_BR2_DIVERGED_ODD_EVEN( 24, bne, 1, 1, \ + addi x3, x3, 1; \ + ) + TEST_BR2_DIVERGED_ODD_EVEN( 25, bne, 2, 2, \ + addi x3, x3, 1; \ + ) + TEST_BR2_DIVERGED_ODD_EVEN( 26, bne, 3, 3, \ + addi x3, x3, 1; \ + ) + + TEST_BR2_DIVERGED_ODD_EVEN( 27, bne, 1, 16, \ + addi x3, x3, 4; \ + mul x3, x3, x3; \ + ) + TEST_BR2_DIVERGED_ODD_EVEN( 28, bne, 2, 400, \ + addi x3, x3, 4; \ + mul x3, x3, x3; \ + ) + TEST_BR2_DIVERGED_ODD_EVEN( 29, bne, 3, 163216, \ + addi x3, x3, 4; \ + mul x3, x3, x3; \ + ) + + TEST_BR2_DIVERGED_FULL12( 30, bne, 0, 1, \ + addi x3, x3, 1; \ + ) + + TEST_BR2_DIVERGED_FULL12( 31, bne, 0, 16, \ + addi x3, x3, 4; \ + mul x3, x3, x3; \ + ) + + TEST_BR2_DIVERGED_MEM_FULL12( 32, bne, 0); + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64uv/data_d.h b/isa/rv64uv/data_d.h new file mode 100644 index 0000000..9e351af --- /dev/null +++ b/isa/rv64uv/data_d.h @@ -0,0 +1,4096 @@ +.dword 0xd1dd560bfe643843 +.dword 0xc8ad10b2feb2c113 +.dword 0xa6ce19b8a92a9e4a +.dword 0x6fb83883fbe60922 +.dword 0xcd6d2e7ead7330da +.dword 0xb755598a5cfbe06d +.dword 0x1fed84bdc9a118eb +.dword 0x24b3f3d23d84f322 +.dword 0x1d3a988f53778458 +.dword 0x9f730b0a1f140995 +.dword 0x374b360639302b65 +.dword 0xc88b9497f9b5efd5 +.dword 0x0f172d3a9a63bd97 +.dword 0xc972275f26cd737e +.dword 0x0c78f61b7c470f8a +.dword 0x4def0e021a99b81b +.dword 0x4390f30c5a5c55b8 +.dword 0xeaf430769db34de0 +.dword 0x8e8fc37e74e9f4db +.dword 0xcc629a32e15f65e2 +.dword 0x3da9bb4a9f413e61 +.dword 0xe9df9acc0f5e994f +.dword 0x6108c0f41e90f5f0 +.dword 0x4d68eaa08a12cb08 +.dword 0xc84eae79e5090721 +.dword 0xdda11817b153d6c0 +.dword 0x43ea43ba3915460a +.dword 0xd16801093aaa5b85 +.dword 0x2994fe94a0eb82bb +.dword 0xf61250031eed5ad4 +.dword 0xe0f751364c4ac72b +.dword 0xa41a38b4ba19bbed +.dword 0x82b6eafa646fe2b1 +.dword 0x13a5f5e58e6486ad +.dword 0x18f7896d7e7e91fa +.dword 0x9e24f5c9e78fce0a +.dword 0x95daaa5911e1d92a +.dword 0x8f83bb408747dced +.dword 0xec1c6c26df3c7a01 +.dword 0x8a41db8ebdc862ba +.dword 0xbacfff7cbc9779cf +.dword 0x83f82f31eb3dfad1 +.dword 0xfcc145f5029a8625 +.dword 0x510ce08546de5450 +.dword 0xc95124e7a14b9be3 +.dword 0xf64185fd81ab3a1c +.dword 0x80c59f913c179195 +.dword 0x63d1ad007bb6424f +.dword 0xbb6594c2764d5430 +.dword 0xfcd8ad0c37625f81 +.dword 0x55250db2b9467d0c +.dword 0x48f5fc7eb263c237 +.dword 0x8630a803c867c593 +.dword 0xb17acfbaf144ad8a +.dword 0xc27f45373274a219 +.dword 0xa67a5eb493dd5d22 +.dword 0x7bd384d0529fe47c +.dword 0x01689905e11f4fab +.dword 0xcd92dad51c4cc758 +.dword 0xa7053373be73acc3 +.dword 0x58f3527f398d5897 +.dword 0x76ea566bbae082fc +.dword 0x4b2e9e1fbfcd19f0 +.dword 0xf8d97e36c686f2cf +.dword 0x1b063a61787a89d5 +.dword 0x21265b64c1aded0a +.dword 0x2f74685489b32b9d +.dword 0x46489c4b8e0bd6f9 +.dword 0x4d28452001969d33 +.dword 0xc313e0df8cf90326 +.dword 0xb36e27445eec8f63 +.dword 0x3dce9fdd33780a33 +.dword 0x35d9282a83ed0792 +.dword 0x23f70a663acddbcb +.dword 0xdfb488c67e6aadce +.dword 0x7c096383619903bf +.dword 0x40c7d6230dbe4453 +.dword 0xf1bdf56435ffdd8b +.dword 0xb924953b36ad21ea +.dword 0xe1922d720dc0f8e1 +.dword 0xca14881a5df36203 +.dword 0x10a51671ac227124 +.dword 0xe2aa78ac2953c159 +.dword 0x171cfb746137ac31 +.dword 0xfcd02cbb7fdbe20a +.dword 0x8aec2c2562b80399 +.dword 0x6637173b837c7ba4 +.dword 0x66c9a4593cd8f718 +.dword 0x322953399499feb0 +.dword 0x9e35467828344bd2 +.dword 0x2003f9037983dab7 +.dword 0x295feaa4c5a648ef +.dword 0xe248eb724dc0af80 +.dword 0xc52e7cf9faa370df +.dword 0x9bf39a432db2919c +.dword 0x5b239a556fa41c76 +.dword 0x1a24dc91239d9112 +.dword 0x24ad2069ddee64cd +.dword 0xea4f902196d947c0 +.dword 0xd5719f41843de606 +.dword 0x96fadc26cc9a8ba2 +.dword 0x7fd63232190f9123 +.dword 0x85207de84fec4c69 +.dword 0x8dc5783bc47d2c80 +.dword 0x6c160891342377aa +.dword 0x49ec2102949335df +.dword 0xf9695f0d9beb313d +.dword 0xb34950eea2c82924 +.dword 0xbd7b3d5898810087 +.dword 0x77aa89bc4dc41491 +.dword 0x2e59cbe79c5bd82d +.dword 0x078b9cc820dfe05d +.dword 0x1eba8e9468b547ca +.dword 0xb1b9daa17cdadb65 +.dword 0x7b37cf022a5adc98 +.dword 0x82888b22c8f68319 +.dword 0x6544296994275855 +.dword 0xe8d8812685ec86b1 +.dword 0xde5a4e0842d29105 +.dword 0x3d390dd88fb762c2 +.dword 0xf47e82a8f281e113 +.dword 0x2701325622dbd103 +.dword 0x9154ffa1df56d1ff +.dword 0x00c6f0e72c06b9b8 +.dword 0x4479c0ec8c6184f3 +.dword 0x3213379c6178bd76 +.dword 0x5dca6933a79335d5 +.dword 0xc24c6205ed579d4e +.dword 0xdb0e51b4f2ed17c6 +.dword 0xc5685607d07b507d +.dword 0x72c0e2c99f389e46 +.dword 0xa02764c6311e00e5 +.dword 0x7870ab738532148b +.dword 0x7f874adb52beb4e8 +.dword 0x50c52ee79a1e0c1d +.dword 0x88819d99d98db336 +.dword 0x67e66fb35f47355b +.dword 0x3d81206ea88f9da6 +.dword 0xaccd3715c7cd9ba2 +.dword 0x8902c29993381ba5 +.dword 0xaae370c7c4b22462 +.dword 0xd2b1dce4e3ac015e +.dword 0x4773d5916e630bd9 +.dword 0x572483aa9b5aab6f +.dword 0x9959377b18d62c2e +.dword 0x13d85103af1c087d +.dword 0x53b4588c0e888696 +.dword 0xe6be9aae2ff9cd78 +.dword 0xd0c9c214b646121e +.dword 0xce92bccecd471d91 +.dword 0xe410f67c75821e12 +.dword 0xbcf589be794f3597 +.dword 0x3fd392c04e9ebf38 +.dword 0x00c4d6def0f5eee5 +.dword 0xd341d5fadc428055 +.dword 0x02c3de7dfc9ed665 +.dword 0x1541ca277ab8a0e8 +.dword 0x1ff674a29b47321f +.dword 0xa61585db7469805e +.dword 0xdb0d78bb11294171 +.dword 0xb39564524ec390fc +.dword 0x404c5780c7c92c6d +.dword 0x9978d380a279a59b +.dword 0x05f8453bbe5f2ea7 +.dword 0xf5b95d08a6f5e9ca +.dword 0x011564847183c638 +.dword 0x27449d3768949e29 +.dword 0xd19c3c475be504c7 +.dword 0x1ba532f154514419 +.dword 0x271a184dec4d50f5 +.dword 0xd4b7214f425152c0 +.dword 0xc0a64a59f49984c8 +.dword 0xbedf75cf2e92fa53 +.dword 0xcb2a6b36ad092221 +.dword 0xd313c13f893c846f +.dword 0x94c85bde9dc14441 +.dword 0x276c2e7a23632691 +.dword 0x1bf9ed15f7a69997 +.dword 0xc60669a46e455c83 +.dword 0x075a73e0536aa746 +.dword 0x11b7f38be5644e36 +.dword 0x8aa5ff3e6174bf35 +.dword 0x9df5b4009d054b4c +.dword 0x3bfc811145580f03 +.dword 0x81e402cbe8b64d83 +.dword 0x349e298c1970fdd1 +.dword 0x0b84c13325cbe531 +.dword 0x521d02b009ff742d +.dword 0x8db4b0afd217672c +.dword 0x1b8a834d538edc3a +.dword 0x6d889357053a83cc +.dword 0xd7a6902112814aac +.dword 0x0d9be52bb75f46bf +.dword 0xf3e2a43cc1838123 +.dword 0x6a303ab7e4a27df9 +.dword 0x4bda7d162afc46f8 +.dword 0x81f509722ae331ed +.dword 0xd4932203319c4807 +.dword 0x0d8ce3014cf5b3b1 +.dword 0x4c0bce3b426f5c7f +.dword 0x46cdf6a058f38e2e +.dword 0xd7ecb3a7e644b4a8 +.dword 0x30497a1d437a84d2 +.dword 0x579807c2f78e9269 +.dword 0xd479cbd321d063ff +.dword 0x32f2e17eb3704d78 +.dword 0x7cb3a430fd53347d +.dword 0x81da87c223931855 +.dword 0x7f7c8515af7e6d94 +.dword 0xfb31918732476f09 +.dword 0xdd46de64278340bd +.dword 0x45aea039f0cf434c +.dword 0x481c81edd0222ad7 +.dword 0x84e7f5d6b3130e83 +.dword 0x88eb9e6bbd70ac95 +.dword 0x57ad83ec0b4f5035 +.dword 0x2f1beb5ed965cf9e +.dword 0x489e25d9c7001f40 +.dword 0xb9a2dcc04439c03a +.dword 0xcc46d982f2713f82 +.dword 0x64cd0d87d2e1f590 +.dword 0x99d1ea6f299d8b04 +.dword 0x6f9885a53a4e8ece +.dword 0xbe15edb832582600 +.dword 0xc4334f7edcfadfb8 +.dword 0x6b8ab1b030b854d9 +.dword 0x2985c16c98c65cc4 +.dword 0x52be6770ed652698 +.dword 0x40b60876842cf669 +.dword 0x62d456ab5f49623c +.dword 0xee2cc0db5681638e +.dword 0xee3955379349279c +.dword 0x60173695a3434359 +.dword 0xefeca0bd53b054f0 +.dword 0x78437787a15025ad +.dword 0xf30550cea298ac56 +.dword 0x3d3461fbf18b8a48 +.dword 0xfe154f122661e197 +.dword 0xf97d15afab0fde11 +.dword 0x0a661d32c6445e70 +.dword 0x55896f0932475d50 +.dword 0x919c02a488900c0d +.dword 0x0d17bd1bc093365b +.dword 0xd0771fd3aeb0cc8b +.dword 0xc2d5865c1a81a63b +.dword 0x1445601c461cb041 +.dword 0x98939ab354407b78 +.dword 0x4f05db9d67c21cd2 +.dword 0x299949ec9fcd27d2 +.dword 0x71bae81e4dceb789 +.dword 0x9134805d4981121f +.dword 0x032e7a111873258d +.dword 0xaee56313b867829a +.dword 0xdaf93af909122b99 +.dword 0x25615ef79a26e618 +.dword 0xdef32d7125df5d67 +.dword 0x08c1de6c31316024 +.dword 0x0f92950b9f70d2be +.dword 0x2b13429896974b4d +.dword 0xdac02d4e195094c7 +.dword 0x19f01f955c6d31af +.dword 0x4b8bb4861073fbce +.dword 0x021ab06dcb8680ba +.dword 0x528a0be02a7d95e7 +.dword 0xeaa6b7893be5de4f +.dword 0x75eb4cf4d9ff4c96 +.dword 0x0b56d96aa69e2e29 +.dword 0x61b2a2d9b3750b70 +.dword 0xc32f1d6b38a4e55e +.dword 0xd4801bbc2ef013d2 +.dword 0x8049c25eb2e04f4d +.dword 0x20eec01b898e66ee +.dword 0x4ff66e613e7ab9a2 +.dword 0x53e5519a2b26f860 +.dword 0xa35df38d4fb89249 +.dword 0x28628d0677e42f97 +.dword 0xf007be486b8c983e +.dword 0x442beb3e99c6f4c3 +.dword 0x6e5f7d8b6e55c134 +.dword 0x41855991a61dd297 +.dword 0x05fb5db0e8f111d4 +.dword 0xbc689aef8391f7ed +.dword 0x75172f9f8d95c16b +.dword 0x39dcecc2e0d37df6 +.dword 0xe41da50c2fed64ae +.dword 0x8993cb9fc8167514 +.dword 0xefe88b831e4a909b +.dword 0xad5940ad9a7f20c9 +.dword 0x3fc9843888820439 +.dword 0xe6c29d98b469c179 +.dword 0x7b1c5638cdaaa3c8 +.dword 0xdb8fe11acaafbf95 +.dword 0x50fd8d3aed235491 +.dword 0x011e855cc83ea2f3 +.dword 0x7969c71fc88748e6 +.dword 0x6dd82014171f468c +.dword 0x3a0eb6f4a91a55c2 +.dword 0x3767ce48a2c731e1 +.dword 0x0b908ace533b95fe +.dword 0xcad63b406be18a52 +.dword 0xfd5bf304f35e9591 +.dword 0x1d2587ea75dc991f +.dword 0x7e79a36823de0733 +.dword 0xedd1c3f254ea5c10 +.dword 0x8ae23cc59aa99c90 +.dword 0x19b5ef815d1d92cc +.dword 0x92dfc3356340cb82 +.dword 0xc20331724d0e11bb +.dword 0x3b25c6c5415c5ca1 +.dword 0x2cf7e8a9526c5a03 +.dword 0xb30d631b68fe23ed +.dword 0x72856af2eaea1708 +.dword 0xf666385f81d5f5d5 +.dword 0x25c9a36eca87d630 +.dword 0x6018bf0c601937b4 +.dword 0xa891ed26e9ed1f57 +.dword 0x46f2bdc5b8b0188b +.dword 0x578d9ce58b9fb66a +.dword 0xe619e98c701bb5e3 +.dword 0x479499b408e2a91d +.dword 0x43a60ad1369ebbe6 +.dword 0x75801126ed6c736d +.dword 0xa3837807050a5228 +.dword 0xa0a34411d487fdab +.dword 0xcac739c7d5dc0279 +.dword 0x3c9bd11e417e14ef +.dword 0xf88d4b5dea0a2c1c +.dword 0x5644030ac41413aa +.dword 0x32e41bf9760af296 +.dword 0x07fc6d47a8cab1ac +.dword 0x84fdf8f053dc7efa +.dword 0xef8246fd624d3fd2 +.dword 0xc051c3bf1c41689e +.dword 0xd5e4742a74b12fb6 +.dword 0x536c430313d955a8 +.dword 0xb82d98208a99c0c0 +.dword 0xd7a5347fe8196ffa +.dword 0x3331f548ca4783fd +.dword 0x173abfb46f5a26fe +.dword 0x5c2de61e8dd700f9 +.dword 0x1d2187ab567ed37f +.dword 0x72be7acee392f743 +.dword 0x34094b4249c6d646 +.dword 0xfb02124760c26f7e +.dword 0x99f975e05daa46a7 +.dword 0x821d33c78c66038e +.dword 0xb1b2cad5492ae3b5 +.dword 0xa3682f77f34987b8 +.dword 0x03434455f4af6f1f +.dword 0x1a58466129e23d81 +.dword 0x5388f1bada07557f +.dword 0xf38aa948236a7b91 +.dword 0x510e98c13c7dfafa +.dword 0xdc70ce93022bfcf2 +.dword 0x52575af6bc0d1cfe +.dword 0xf5098269e9af3667 +.dword 0xb95405e44057e2f6 +.dword 0x22655f65ecd6002d +.dword 0xb629e5a5af33efec +.dword 0x5e54d4d7bb2640e8 +.dword 0xcdf648c80659cd57 +.dword 0x4bb45e8ea16aee25 +.dword 0x6132e4a6b027a4fc +.dword 0xc0238b7944dfe489 +.dword 0x8e1a6b240f1908b2 +.dword 0x4baa8e719727bd36 +.dword 0xb623efc3f0c90d83 +.dword 0x9e9224130c9e6e95 +.dword 0x3c1ba4349205775d +.dword 0x531ff2a61037495e +.dword 0x77b2baa674ee029c +.dword 0x29b9daee9739ec2d +.dword 0x842e7b785487469c +.dword 0x60a905492a2c8ecb +.dword 0x7fa4a13ddea8bb8c +.dword 0x70877908426c945e +.dword 0x15fd3901fbda0111 +.dword 0xea04ebd46eb894bb +.dword 0xe89b903b8deccf88 +.dword 0x4088d12ad27ddc79 +.dword 0x9a6b8cb536b3919d +.dword 0xf35c18b7a418d2a9 +.dword 0x8b826c62f3584ac4 +.dword 0x629e5cc40b100785 +.dword 0x27d4b7cc809958a9 +.dword 0x75aef5c63d6f3b80 +.dword 0x57bbc80a51e8c6a7 +.dword 0x2eff9e4a4ab02aff +.dword 0xfb9dda844d0cc279 +.dword 0xb21b43769d81a0d3 +.dword 0xa5de15d1879eecda +.dword 0xd78f4b7f9b9e4f3c +.dword 0x84394766b1e08361 +.dword 0x04917ead828287f0 +.dword 0x123c0d0da75719a3 +.dword 0x791a6b6d3132cb0b +.dword 0xa83dc58526be55b0 +.dword 0x702831d2a11478f9 +.dword 0xd39a03a27372634f +.dword 0x5d2e45b3a2b83cea +.dword 0x5650dfd3af2428f7 +.dword 0x5932080fd1508b33 +.dword 0xde4c32ff64f18b26 +.dword 0xc855d16d0a32b6cd +.dword 0x6bea83b85dbc31cf +.dword 0xf663a2f2769718e2 +.dword 0x52062a7055d129f3 +.dword 0xa7c1e023d6fe88cc +.dword 0x9ef5434f58a540d9 +.dword 0x70c827b2208ea7e3 +.dword 0x26b533fb76fbb49a +.dword 0x531207201481a52c +.dword 0x1613bf63f875c086 +.dword 0x4292c827f68f67b7 +.dword 0x7021ba8898459bec +.dword 0xe75803e90366cf79 +.dword 0xa4750518442fa7ce +.dword 0x45e662a58ffd42e9 +.dword 0xb5bcdc00c6e4ef62 +.dword 0x0b6c587157e09364 +.dword 0x5b6f4dad23744b94 +.dword 0x08f6fdfcd476b9b7 +.dword 0xe2276cbffc225d0a +.dword 0x43b5d10961472c56 +.dword 0x0fcab937c4ea9ddc +.dword 0xae8350e4159dacf1 +.dword 0xf03f40562b497efe +.dword 0xcbfd5ca0650a2138 +.dword 0xe1378bfb2b15044e +.dword 0x4d136b609a6459cb +.dword 0x036630fe3e2969ad +.dword 0xe7c2f379a028f782 +.dword 0x1222c4e1e55b4d63 +.dword 0x3a8be79ca735d9b1 +.dword 0xcdacc0efe7f42717 +.dword 0xf73fb62f5e2ff936 +.dword 0xb893f19f67a6eafc +.dword 0x239474ad8a3541fd +.dword 0xd81d95094f7faa72 +.dword 0xe2973fe14adeedf1 +.dword 0xa896243573784281 +.dword 0x33db6b13d9c9a6ae +.dword 0x0f40c9820d70fe2c +.dword 0x7725290f43cd8117 +.dword 0xaa822cbb7e936cff +.dword 0xa5814f3053f29882 +.dword 0x6fc64e07d96fa140 +.dword 0xd8ffca9dd2e7e729 +.dword 0x440282d262e05e85 +.dword 0x76938f9ff4d4b595 +.dword 0x5338dc8eb840d68c +.dword 0xd43ab1ae3628bad0 +.dword 0xac46770a4a8fd339 +.dword 0x9f9010bcbe1d4cc0 +.dword 0x7a273573abb12c47 +.dword 0x51d6d1a02b4068de +.dword 0xa0fae18f788cbeb9 +.dword 0x24e20e4f2c86c9fc +.dword 0xda5f3900d9a29571 +.dword 0x52f011b218721f81 +.dword 0x6c2fe91d0fef5afb +.dword 0x5bf7a9c2539468e3 +.dword 0x3b30eb491b4d49af +.dword 0xa0e7eddff50481eb +.dword 0x696d4f66e661b9d5 +.dword 0xc9317686cb3382b7 +.dword 0xc49a0caa0f0c814c +.dword 0x7691a49f2bcf1337 +.dword 0xc2b0b67325efe884 +.dword 0x816cca3a8cfabb0f +.dword 0x08f616fcf9b4be6c +.dword 0xddf9ac2138ba92e7 +.dword 0x536e63e4ee4ad567 +.dword 0x6de85b6c10cdc88b +.dword 0x51499397d1382a0c +.dword 0x618fb6eaa4d73311 +.dword 0x05b098f3516982f6 +.dword 0x52905b77daad8b9c +.dword 0xead67445a4edfe51 +.dword 0xb920f3260cd41978 +.dword 0xc5b933020869d59d +.dword 0x4971db1c51c5acfe +.dword 0x8e9246d906b8753a +.dword 0xd32c924bae751955 +.dword 0x68ce556dfb0398a7 +.dword 0x6b1cabbc59d57fb8 +.dword 0xe107d1b0692ea69f +.dword 0xa78253883770d055 +.dword 0xe867ec19c06e083d +.dword 0xb58b1c24363cb667 +.dword 0x76964fefaf59a46c +.dword 0x9cc0d9695e1bb44a +.dword 0xb7ae7b4bceede08b +.dword 0xa7e914b93a7f8dfd +.dword 0xbb2742555fbb2777 +.dword 0x95de5120c57f0b7e +.dword 0xfe2b6134af70718c +.dword 0x0389825836498a28 +.dword 0x99fac57629216ba6 +.dword 0x5459049124b499a8 +.dword 0x719f0d45d2957358 +.dword 0x65002394142736f2 +.dword 0x29683bcec5931f19 +.dword 0xe282e00b80c557df +.dword 0x67cc14fe84877e89 +.dword 0x7c3448c5cc8948c8 +.dword 0x8b9f6ae359e69858 +.dword 0xf9c74e960f8403e9 +.dword 0x6670636b192fd9df +.dword 0x4091d9833bfe5732 +.dword 0x0acb40b08b431cf7 +.dword 0x521f7d97954e5efe +.dword 0x31fca2879918c45e +.dword 0xf9f518647add8ed9 +.dword 0x618aaaafb04939b2 +.dword 0x9459e57fbbc0f9ce +.dword 0x0607f8bfcd08071a +.dword 0xe87db3f2d2922454 +.dword 0x8395771f890796b0 +.dword 0x2a1cad36f39e7686 +.dword 0xa6a87dafe66e7f3c +.dword 0x5041a5581b77d456 +.dword 0xaf7c6b161a81dd2d +.dword 0x901438c62e4136d3 +.dword 0xc41bc198458c8157 +.dword 0x8fbb2c9a89bba2e7 +.dword 0xcfcc25cf362932d8 +.dword 0xffa50320cdd7df5e +.dword 0x63a47099304b47b4 +.dword 0x231ca77143d0287f +.dword 0xb9638c48d2879fcd +.dword 0x1af74aae60af526b +.dword 0x95101277b7f2da83 +.dword 0xf86c2435122a3459 +.dword 0xfb6bea245d26f594 +.dword 0x6e9a6b31f43a876b +.dword 0xda5cb0cdd5124eae +.dword 0x040455b82b154554 +.dword 0x3b7d39944cf9be0a +.dword 0xde48bb4823d63379 +.dword 0x1818b79b7b2e73b9 +.dword 0x326bfb8b460a36a9 +.dword 0xc6097ad8d8c5c65c +.dword 0x6910d19649e0d95c +.dword 0x5900af93cfeab3ca +.dword 0xbb476f4759a0b5aa +.dword 0x849115eee126adac +.dword 0xd81ebab61dff756a +.dword 0x115ca79e4a908a01 +.dword 0x0c73d4c7f79b0319 +.dword 0x585151a828bb28c3 +.dword 0x3304576f0efa7e40 +.dword 0x2c8d673f4249401e +.dword 0x840133ccde0559b8 +.dword 0x471c196d36b8d165 +.dword 0xa4823d62fa737e17 +.dword 0x0f63304aced9bb21 +.dword 0x975e26c4d142c388 +.dword 0xb4812607aec82b2b +.dword 0x5fd8fad8aad7c4cb +.dword 0x505e10bfaf752c98 +.dword 0x137ab63794cd7b69 +.dword 0x2ec0c61fe557a266 +.dword 0x5f49e3064a31daa5 +.dword 0x433f59fcba9ef542 +.dword 0xad2f7cd6f2aa4cfd +.dword 0x1b019310eb16b9a0 +.dword 0x37d670a514d37fb1 +.dword 0x084808699d0ba9f1 +.dword 0xa4d18a50d647f5d3 +.dword 0xc6bf1bf79c23c829 +.dword 0xf31a06636b421343 +.dword 0x56dfb168f545ea31 +.dword 0x3afc406b06db2f01 +.dword 0xa054eaa2453b4c60 +.dword 0x31cbadb4229a6d4e +.dword 0x327da7ca2a556e36 +.dword 0x836759b8d08f121b +.dword 0xc7858525346722ea +.dword 0xdde347a2d9ebcf57 +.dword 0x638c58082b0c4970 +.dword 0x3c199d3ecfbeaed9 +.dword 0x29c052f958778c2a +.dword 0x724515cfc5387057 +.dword 0x78f282f4f89077a3 +.dword 0x9111e055553e5c5e +.dword 0x9812e398437d16a2 +.dword 0xa9d42b9c8fa11bdf +.dword 0xa2736705d9baf11e +.dword 0x557d53a7b1b132eb +.dword 0x9032eb7788b88239 +.dword 0x0d6fa526917ed714 +.dword 0xb2921b7c2b90b7d6 +.dword 0x63dd0ec709cc8c8f +.dword 0x4e5220f85d5468da +.dword 0x8387a60852e48085 +.dword 0x39444cbf0cd7da39 +.dword 0x64227a11245e9c88 +.dword 0x68f35853f6f1b3de +.dword 0x1b9ada2d8843f434 +.dword 0x29c09aaf28d184c1 +.dword 0xe7dcf61036105d81 +.dword 0x9697c3d538fdc6bb +.dword 0xac25cfd4c8dfc69f +.dword 0x98b16f739be4dcea +.dword 0xc3b875ceed9acfb3 +.dword 0x151974b5654524a6 +.dword 0xdd816f286d978533 +.dword 0xb678ceeaddf6fec5 +.dword 0x8589ef72a42acfb8 +.dword 0x879566c4ee80f0ae +.dword 0xb2183229ab4ee19a +.dword 0x161469a933ba844a +.dword 0xe3f7861442468813 +.dword 0x6a13b2545830ac8c +.dword 0x3c363b2be15e80e3 +.dword 0xa17df31c88b6099d +.dword 0x256dc8c771bb1965 +.dword 0x46a76d41476e9ad5 +.dword 0x50b11253885894e9 +.dword 0x92d4081104aee65a +.dword 0x9e5329de95c407a1 +.dword 0x89f0c1140702b554 +.dword 0x721d74a2f89cf0c8 +.dword 0xdf950c115535d882 +.dword 0x4d19d23bdaff13cb +.dword 0x3a83473f088c128c +.dword 0x8c8c8da28ee7f0f8 +.dword 0x7cb2d08145274963 +.dword 0xf724bedb7b7747bd +.dword 0xa2f10605415e6e20 +.dword 0xa2aaa9de3390e183 +.dword 0x55c6b064df3c3915 +.dword 0x7b6fb157685e70f6 +.dword 0x04ca037b804bc762 +.dword 0x2877414611880ede +.dword 0xb78675127111dc50 +.dword 0x90453d2ac970f604 +.dword 0xee415adf837e0a41 +.dword 0x7b7ce9a132506e87 +.dword 0x486ed007fd03f111 +.dword 0x2f61f2582382af16 +.dword 0x9ca10cb6ad950bba +.dword 0x0b55d05307b583ca +.dword 0x1782922ffd6157e3 +.dword 0x93d023377fef0506 +.dword 0xd3fef7e9a1ce0247 +.dword 0x178d8ec0c8930202 +.dword 0x8f2cf473f8805818 +.dword 0x3d0468fd2f3ac9eb +.dword 0xbf897aabf87daf1e +.dword 0xeca0d43995c41c26 +.dword 0x036bd67bd6b5553f +.dword 0x952a71731e71b768 +.dword 0x494295d36216182d +.dword 0x677bd97cd7ed911e +.dword 0xa10a14a6294adb74 +.dword 0x32330fa3ca1aa177 +.dword 0xe09b7f58f76f3f9a +.dword 0x1de94f62c4054b8f +.dword 0x6d33e1018290d58e +.dword 0x79e98ee675f09856 +.dword 0x695e80544305af9e +.dword 0x9481103b65cc6610 +.dword 0x5eb478898ee25df8 +.dword 0xcf02af8eb88f1b88 +.dword 0x3eab188188eee9a2 +.dword 0x1456aec41e2368ab +.dword 0xe7fa43a64e3f7cce +.dword 0xee95f538ad6b02c0 +.dword 0xf6bad0ffe3a153d8 +.dword 0x579113779862b7fe +.dword 0x9a20f9d9363be22d +.dword 0xc004c81b33f063f5 +.dword 0x3af36307b4e0c1ff +.dword 0xf23a61021f7ff991 +.dword 0x0bdb43ca3752bf1e +.dword 0x3f0fc42075b4931c +.dword 0x6ab1cd8534a0f8a7 +.dword 0x393b8ee241fdfbbc +.dword 0xb3ade7c37d93fb29 +.dword 0xb46613e70ed6f8e2 +.dword 0x4c400514b09f1093 +.dword 0x50890ca553d21687 +.dword 0xe6e920ddabcc9636 +.dword 0xfe9d76cc53b161b8 +.dword 0x380870eb2bb651ac +.dword 0xa5d0c50444466371 +.dword 0x0d63a03299badb53 +.dword 0x4839adc18775fb7b +.dword 0x428b13903692e2a9 +.dword 0xb969681dddbb79d6 +.dword 0x523b1134cb4d3f70 +.dword 0xa482fd0f21b0c329 +.dword 0x39d8d98a79b58293 +.dword 0x2aa281e2aff0c946 +.dword 0xef2b4440ebc617b2 +.dword 0xf7afcb4abe126d46 +.dword 0xd292b47569e4467b +.dword 0xc2d05b0de05cc004 +.dword 0x6fdad9c500594ce9 +.dword 0xc3c712a4080298e5 +.dword 0xd0a87dcf0aace801 +.dword 0xee3c6c5b7910d302 +.dword 0x3ac54dbaeef5693e +.dword 0x53fd81c2563408a0 +.dword 0xeed1eb6db965ba11 +.dword 0x732261a140372d7b +.dword 0xd7c2df006de32818 +.dword 0xf05bd11d207fd0a4 +.dword 0x1fa8a2aa16d5be85 +.dword 0x434765ba8b1351f5 +.dword 0x7240fee13f34196f +.dword 0x0e240f26da5cb5b6 +.dword 0x26af64eef68b2213 +.dword 0x88efd5f91957a9aa +.dword 0xb0f9e38e96855cfe +.dword 0x6ebafb18274f024d +.dword 0x735250c20877966f +.dword 0x97435791db46bdf9 +.dword 0xf893470c74edf498 +.dword 0xc8634393d1304c32 +.dword 0xb4d94f7a29f7a66d +.dword 0x6702b3167c74ce3b +.dword 0x9e565859608654c1 +.dword 0x30203a2db5a784db +.dword 0x9bd2aee0bac40cdb +.dword 0x58e011f1baee3113 +.dword 0x3c9aa4f2aae1dc7a +.dword 0xe4a246bb1c82c1d9 +.dword 0xb30c7d1b43334e61 +.dword 0x3c02899e3396a6e5 +.dword 0x35c931d226f19671 +.dword 0xff7df2e14cf62be7 +.dword 0x6584408a2cac8947 +.dword 0xc2b0e1690c4a05e9 +.dword 0x2156eba6d34c51b8 +.dword 0x1513c43c509f0cf1 +.dword 0x276ae36600624475 +.dword 0x397275c725d98430 +.dword 0x0da66c040e2438c2 +.dword 0xc072df1ebb7e6baf +.dword 0x27b4f8f88b77dc21 +.dword 0x495fc7b093c70f82 +.dword 0x2f8bdf5527040f65 +.dword 0x258c21ea823c71f4 +.dword 0xbaad8ba2fb2ff685 +.dword 0x39ef8cfa6b758500 +.dword 0x3392fd669b46a4c7 +.dword 0xa0b221c0d0e469ef +.dword 0x1f0e86f4f8e89860 +.dword 0x1d0117826d613f8f +.dword 0x20ac89fb3b8f3fbd +.dword 0x9c8c038b899a76c4 +.dword 0xc60797173aed8fae +.dword 0x7062889f1abe4119 +.dword 0xfbb9dba68b52e0db +.dword 0x663b28a612698760 +.dword 0x587b2c7a9165c229 +.dword 0xc0bd009cfafd7d99 +.dword 0xe0c0785838f4d4c7 +.dword 0x0f9b68c4ebeca907 +.dword 0x0501682dc45839a2 +.dword 0x6783f072a015135c +.dword 0xd5d4a4697281703a +.dword 0x607f2258adf65c2c +.dword 0x57e7629abc456855 +.dword 0x45130776d05d0b01 +.dword 0xab9bd21849eb153f +.dword 0x91d9a151065b41ba +.dword 0x5313d0d4af32ad6c +.dword 0x0b2dcc9176f2e7aa +.dword 0x22f9504cb5d02a2f +.dword 0x6e081af5ef37b409 +.dword 0xd9534b8ad2336b90 +.dword 0x57ed5b56f0dd24d6 +.dword 0xe115304b2b6f8fb3 +.dword 0x2b90a2469c5b6f65 +.dword 0xd645744a6aef376d +.dword 0x2389370afe0f76e6 +.dword 0xd092f63879eaa7c4 +.dword 0xeb96553cbd57dd40 +.dword 0xf5663e7f682ca4b1 +.dword 0x73e9f4115cc41882 +.dword 0x99522cf732fb7769 +.dword 0xaf3738cc397e480b +.dword 0xee35c32c1d2e501f +.dword 0xce306910aab8f272 +.dword 0x8acc4d345d99aef3 +.dword 0xccd33d5af24c3b5d +.dword 0x5f1475c72449012e +.dword 0x1889e5913adc4935 +.dword 0xee4a1104ccc79a30 +.dword 0x387597feb6480145 +.dword 0x45323cfd9462faf2 +.dword 0x67aa9c99bfe05037 +.dword 0xf2630bfe0b7f1da1 +.dword 0x843d4555f00b1ba6 +.dword 0xae67c448ee0da58d +.dword 0x91f6ccd3360ac704 +.dword 0xf4d076ef3bd854cd +.dword 0xd61513a9a6199296 +.dword 0x64dfb47a59ea9757 +.dword 0xe363e5c30902b12a +.dword 0x7d071e27f51cfe3e +.dword 0xb7b8488a2f9084cc +.dword 0xdc9c342a05aa76b4 +.dword 0xc5532a253f397a74 +.dword 0x45ca2df61c3b72be +.dword 0xc1d38e0a6288a6a8 +.dword 0x507d303b5ec65ecc +.dword 0x2ff83c812e087274 +.dword 0x51dbb5d96b172012 +.dword 0xd19e88c6c98495e1 +.dword 0x3fe7a978b229afa8 +.dword 0xc2bea9a902e407d0 +.dword 0x17c66c76323985c1 +.dword 0x4776e518e7f2f346 +.dword 0x8add3f33865b3627 +.dword 0x30ef89f5f2fc1adb +.dword 0xa9d275f1eae132d9 +.dword 0x6935f4354d9fd807 +.dword 0xb8121af8eb2e4ccd +.dword 0x96b9db6fe216a2e4 +.dword 0x6a323829af6e5c0b +.dword 0x8b08ed3af1dc55be +.dword 0x1366231f29498da7 +.dword 0xd8252ca9e0b9f265 +.dword 0xbce1d51a7032cf52 +.dword 0x3715a21e453dac8b +.dword 0x3e0ec0449ef39ac2 +.dword 0xa8a3ceee4618514e +.dword 0x9b93a41be1bfc22d +.dword 0x9891260482318e54 +.dword 0xf542e4d011ac702c +.dword 0xe690c2aa178bb681 +.dword 0x1ad05d8cdd255ce8 +.dword 0x7be183f3b77efa03 +.dword 0xb7c5081329dd1321 +.dword 0x6560a01681f02c4d +.dword 0xccbbd64bd7d50f5a +.dword 0xb995713fea7e73c1 +.dword 0x435a03d70b26bac6 +.dword 0xecf62566c9cd25dd +.dword 0xfd2a86dea2dc8e02 +.dword 0x963960d5a6b24289 +.dword 0xd3036a8ba18d6dea +.dword 0xbe42fc18b8f50e88 +.dword 0xb329646bec55e8ca +.dword 0x37e19f01faf0549c +.dword 0xd559f239862ba9ae +.dword 0x7dd79fe3d6845941 +.dword 0x9c5647075e06d77a +.dword 0xc6c6674263d87f80 +.dword 0x662e22f775c5453a +.dword 0x073179afb6dc1f11 +.dword 0xb80328b036267047 +.dword 0x36502b4fe5a71a30 +.dword 0xfe09bc6946e47ffb +.dword 0x89b670c6a919b32b +.dword 0x02444495cc14ceba +.dword 0xac55121b668d9bb1 +.dword 0xd641df0d2d12c761 +.dword 0xb48bfc7fff59ec05 +.dword 0x39694c33709530e8 +.dword 0x09c7813986727446 +.dword 0xa0a776b2ffa3221e +.dword 0x8a9e8eb3c6014b19 +.dword 0x1f6fcf3e6137ca51 +.dword 0xc8ba0da5f23a80e3 +.dword 0xe5a5c94e4a2729cb +.dword 0x424db5a1bfe90d40 +.dword 0xdddb0755f6728e2c +.dword 0xa928d967dcdd28c3 +.dword 0x72b5909485061fad +.dword 0x75bacafcd11a3501 +.dword 0x2943cb35188d6924 +.dword 0x6231dc3862825b59 +.dword 0xe23625967beeedc5 +.dword 0xee2853dbdb487e98 +.dword 0x7c2dbb949a5579d3 +.dword 0x85384177569a6d29 +.dword 0x9f3947cfb4ffbb82 +.dword 0x3fcaaa09ae6ad0d9 +.dword 0x14119d276abde4e1 +.dword 0xee5a5c48a7a0677d +.dword 0xffd1d90b204bec0e +.dword 0x7925fc81fdf05b43 +.dword 0xb79705a0b0f59582 +.dword 0xc4eb741d4bff254b +.dword 0xce6f0f97f4904a37 +.dword 0xfc6adaaa76b7b363 +.dword 0xd84f23a808202168 +.dword 0x341b0d32d3e1f143 +.dword 0x95035547de9d5fbb +.dword 0x1fb1bbe166bc439a +.dword 0x248d1ba1171d6844 +.dword 0x872398be63b902cb +.dword 0x71e0e5e99fc4f6be +.dword 0x2a6615d719de7e6d +.dword 0xaabec7e2471e6174 +.dword 0x9dff5f34680b916d +.dword 0x08fb3ef47f0d5913 +.dword 0x09d9a2522f18c9cd +.dword 0x9f78d7d35cce88fd +.dword 0x57d4b09bd1c04aeb +.dword 0x691c28422caf6f75 +.dword 0x6939b1cec965ec8e +.dword 0x8ea73443238bb41f +.dword 0xdd40f388ec00e49f +.dword 0x7409667f8af598de +.dword 0x626019a04bc7821c +.dword 0x81f744233d0ed8de +.dword 0x83182a415aa7a6d4 +.dword 0xb6a6291d02e59826 +.dword 0x3e150ae7965adca5 +.dword 0x3b7edd39c832b679 +.dword 0xc11ae3fd7f8dd3da +.dword 0x7f63701f8516624f +.dword 0x4cc43aab3e7a03a7 +.dword 0x7f7133743d8661cd +.dword 0x13a2dc1d25843b39 +.dword 0x1b3a1267111b79db +.dword 0xfc005594b82e78d4 +.dword 0xe539458fa35086e3 +.dword 0x82d19b53f4ff1af9 +.dword 0xb470ed1c2c01fab7 +.dword 0xf047382ebc115f19 +.dword 0x462fef32a7346653 +.dword 0x11eff057f99c40bf +.dword 0xf9e4e8ca7bf92729 +.dword 0x218ea6737cc99059 +.dword 0x392130918a8c451d +.dword 0x452f83c27b1d65fe +.dword 0x3d8adcf058d0ae9c +.dword 0x047ad1c21d16358e +.dword 0x4547d2eab39c7eb0 +.dword 0xbdebabc611aee4de +.dword 0x8588fb0e85de262b +.dword 0x85a4a6bd8534d7fc +.dword 0x20fea9c6c48fdb82 +.dword 0xa750e39675304a53 +.dword 0xe0c7674930db95ac +.dword 0x3c2c1ad8441cffca +.dword 0x5a473c7fbb8a213c +.dword 0xe63df8d45033076b +.dword 0xb3d45622dccc6874 +.dword 0x3dc3a1086b7daa50 +.dword 0x2fa7a7b9e9c34776 +.dword 0xca4849d471cb8118 +.dword 0xe4d8fba59e7136bc +.dword 0xe30c6be200983a2f +.dword 0x859c2ef03c1d1f93 +.dword 0xfc57e586353dda07 +.dword 0x1c281c4a7236b9c9 +.dword 0x18fa48125d365048 +.dword 0xf55284ac416e7095 +.dword 0x300d8f22fb0c6545 +.dword 0x7ba136e2edab6187 +.dword 0xb97f6e96567e4e46 +.dword 0x7c5668145d968bbd +.dword 0xd6e1acc345aec0a8 +.dword 0x6b6b8ef14e4c5185 +.dword 0x76f8cf4fda392543 +.dword 0x4ef5293822cc31d7 +.dword 0x3a72346cc0235bd4 +.dword 0x4348005e90f90c49 +.dword 0x18a7c847fa0095be +.dword 0xd990c09046656fb7 +.dword 0x688adb05b73c0b07 +.dword 0xc23d45417ba0516e +.dword 0x751feae2025ec1b8 +.dword 0xd5fd4134af29f1d1 +.dword 0x087a3642d3232f51 +.dword 0x007abec19b0dbeb8 +.dword 0x3ad16780897746a6 +.dword 0xc04ae9a705eae0c1 +.dword 0x2fc5f6903f090c9f +.dword 0x562814ddaff75381 +.dword 0x4fd8998c7d665406 +.dword 0x7a344878a09d1ba5 +.dword 0xe5d9837a83786e4f +.dword 0x54832c72714ba772 +.dword 0x68e7abbc8ce55234 +.dword 0x242f38874f1e938d +.dword 0xc6eb16786d9eb512 +.dword 0x4db6803cbbc9b54f +.dword 0xcb146dadc236262a +.dword 0xcd7da0f7d930b223 +.dword 0x5714ad8a4db12f75 +.dword 0x98acf23c08444fe6 +.dword 0xad821e51cc261aad +.dword 0x63a6b58bf35e4783 +.dword 0x94e39546af43349a +.dword 0xd2759b03583e232f +.dword 0x98d32fc193789572 +.dword 0xf1cd7acf2a620d7f +.dword 0x408070dbfb6ccfc9 +.dword 0xcef25879d76e86e8 +.dword 0x29c241fe76a4d24b +.dword 0xb0af23b399a45276 +.dword 0xa1f31449aaba8650 +.dword 0x1ce8ed66156df589 +.dword 0x52c45c3ba903c748 +.dword 0x34fe1538857dc63a +.dword 0x0e5c52cc6aff95b6 +.dword 0xc4ca01863304c716 +.dword 0xcb103be1a1ce15ec +.dword 0x3a69bc0755370b4a +.dword 0xcaebbe664aa7b8cc +.dword 0x84a7096de7a8625a +.dword 0xbe6403c52e67f6ac +.dword 0xda42e73cf2a80a64 +.dword 0x66198eb0bd22eea6 +.dword 0x30914d5b6f2960fc +.dword 0xa5a67c758fc604dc +.dword 0x0cf6201346d4422a +.dword 0x0ff933633ac69b76 +.dword 0xffffd58311f6e306 +.dword 0xba653791be9cd078 +.dword 0x3f3b380a50805702 +.dword 0x1ce8b9a2d96b83a7 +.dword 0xe8717edaf6fc7252 +.dword 0xdaa60d02e4bac6b0 +.dword 0xcb1c2af5152d6405 +.dword 0x27b4dc140cb5752f +.dword 0x767856247a5a4cc0 +.dword 0x5dc8713bbb08c3e0 +.dword 0xefdb38e607a26713 +.dword 0xa1b9ff629449e65d +.dword 0x103a0445c007c5e6 +.dword 0xcac396be21475e5e +.dword 0xfbfeeb06a61a4afb +.dword 0x98ae4357d7a5d22a +.dword 0x6bdaf900640dfa01 +.dword 0xff15b01cb0f725d0 +.dword 0xbdb8067596a3368f +.dword 0x94395064e025eedf +.dword 0x72e906728aed28ce +.dword 0x574450d7537501bd +.dword 0x04139dec84fafbf6 +.dword 0x440df9e488545168 +.dword 0x860f9ade9a5ec412 +.dword 0xd1a3e3cf305e7e04 +.dword 0xc012badaa61d9ef9 +.dword 0xb0ffa3df5ccce160 +.dword 0xea594e6c08dd9b35 +.dword 0xc6e1f532c7d4ea29 +.dword 0xbd52d16da66a268d +.dword 0x436dd479a6347d54 +.dword 0xc20bea2ac306509f +.dword 0xb2e9667920141660 +.dword 0x73efb64a72c66038 +.dword 0x068bb1b3c75235c8 +.dword 0x9deaf7d03c435b7b +.dword 0x529fe9439894ea30 +.dword 0xbf0ec3a879ba8579 +.dword 0x67c6049a7b2998e0 +.dword 0x91cd00fda674d8aa +.dword 0x0426161d2ca73fee +.dword 0xe4f6449daf618f2f +.dword 0x4ddaa882eddab6a1 +.dword 0xd778ff53443760aa +.dword 0x7b65724997917f0c +.dword 0x7ee7f953639f669e +.dword 0x82f1bc6b42592020 +.dword 0x348f31ed4f99d80c +.dword 0xf6c93b6b98c6e76e +.dword 0xe7557eacc2f4e9ca +.dword 0x2de9223a634b8571 +.dword 0x14606ebb604de1c2 +.dword 0x8209bdc00d809118 +.dword 0xb9a18b9dd3a4ec81 +.dword 0x8df48516a75f2146 +.dword 0x677c8cf466585900 +.dword 0xb9cbc99bc718cb3f +.dword 0xe9c201f4719f6daf +.dword 0x5ac79f3e08a29040 +.dword 0x662b9ae656089779 +.dword 0x95c5040663d62c5d +.dword 0xf718fae632798c33 +.dword 0x2abbeb5c75798e60 +.dword 0x79ac104f23131ede +.dword 0x08402832f50aaafc +.dword 0x014f39eba514314f +.dword 0x319fbdf5b19b1d53 +.dword 0xa270d8af834390e5 +.dword 0x3e2923dc0c934f7c +.dword 0x0caacad108ffbe60 +.dword 0x6977840ade64f69d +.dword 0xb332bbaca062d0b8 +.dword 0x850fe36a1d4126ad +.dword 0xdbe0c8d8fdf21f1d +.dword 0x45ec1fe757dc7552 +.dword 0x59bbc4a263ff5340 +.dword 0x2bbb32a9377f9bd8 +.dword 0x0a1763ea3c8b189b +.dword 0x3d83bb533fe2843b +.dword 0x101d9943c93ce986 +.dword 0xa11f5fbd4198a9cb +.dword 0xc283ab6096a404c3 +.dword 0x6053d859eb153336 +.dword 0xa26fb5a2cef758c6 +.dword 0x2c249c990c42fe7c +.dword 0x28b654ed040c2900 +.dword 0x80ba75d7b2a08123 +.dword 0xe3a379fbbde3936f +.dword 0x04fc44458e1eeac1 +.dword 0xb665b659b269ac52 +.dword 0x321b6395f55e981c +.dword 0xddd1b7c85df03525 +.dword 0xe75e3c2224794825 +.dword 0xfef5c755bb81ad9a +.dword 0x137f8e8791feb606 +.dword 0xecf6f01134f7c8c6 +.dword 0xd2ecdd76a7b4c40b +.dword 0x4f028f79a7840468 +.dword 0x87deb25832fe2ff3 +.dword 0x85f815319a33daf6 +.dword 0x8caa44c3057cde78 +.dword 0xafc9e1d5f34e8654 +.dword 0x091619e36b703ad3 +.dword 0x533134f3e11d6862 +.dword 0x6c659a30d5b515fc +.dword 0xa0a61b52014b9d13 +.dword 0x0c6ab68d99016837 +.dword 0x4eaf0eace6870975 +.dword 0x901e534eecff2ff9 +.dword 0x78c56b987deacebd +.dword 0xadb7eceb55c3e054 +.dword 0x08d9704cf7f02099 +.dword 0x61050ca05c5b82d9 +.dword 0x13b949c62c2ce75a +.dword 0x9734742a6be77c77 +.dword 0x511e8dc57ac02889 +.dword 0x7cd5b1f31a60e72d +.dword 0xd3ad9580fead9a68 +.dword 0x60b5e6ac25cd6a91 +.dword 0x6ded5175b8bb3b97 +.dword 0x245bb279cfdc8289 +.dword 0xf119c68b10b9ca24 +.dword 0x43b649dffdf03cec +.dword 0x794195461aacb9c6 +.dword 0xecbf4bbe58f50be8 +.dword 0x7fdf926dabca9f4c +.dword 0x1f756cf3b348575b +.dword 0x9d05df1b27925e1b +.dword 0xa406ad462150b800 +.dword 0xf9c70e20f9a8c29a +.dword 0x060376dc8d9607d0 +.dword 0x5dbcd385c1ace8b9 +.dword 0xcf03a574076ed17c +.dword 0x2ddb3cdccc122759 +.dword 0xd64f9b15ddcbdc4d +.dword 0x98c5d26a61cd991c +.dword 0x3eaf2594c735fd2b +.dword 0xf23ce296b09fe190 +.dword 0x0ffe6445aed4fe39 +.dword 0xd7e6245d4522f5d1 +.dword 0x94f89590586611f9 +.dword 0xd0792269a0b2eb60 +.dword 0x291e7bbe77a27e66 +.dword 0xc4168cb5a0f64cf3 +.dword 0x16307a06eaa4e4d2 +.dword 0x282ed7a62d9c7a50 +.dword 0x66775d54742bea60 +.dword 0xe18eaf28d85e6078 +.dword 0x43cb972accf90485 +.dword 0x8e8bea1e77fd61bc +.dword 0x3378ef84defe60f6 +.dword 0x20d4255c4d17436a +.dword 0x9b3caa63312de8cb +.dword 0x82a0c5426d6da7f0 +.dword 0xdce515f75f9cc307 +.dword 0xaac3f647ab2f9ca2 +.dword 0xb616941618df3a30 +.dword 0x34dfc8fb9498d88b +.dword 0xf9d07b666b85c5f0 +.dword 0xc3c9497558c18bfd +.dword 0x86d7de158f803ea0 +.dword 0x67a61a29ac9db8ea +.dword 0xd81a28819ce22ad3 +.dword 0x2726c8988e03abac +.dword 0x7c54cfbf621b981f +.dword 0x71c51599cae6ac93 +.dword 0xe4e6edc163f39623 +.dword 0xb0b0a6c9ccb6ab77 +.dword 0x8d32fdc91509e712 +.dword 0x844127b751ff868f +.dword 0x31d2b1fe2c82a697 +.dword 0xcf24be6e7d153581 +.dword 0x0d345dbd7c2a93d1 +.dword 0x993a289f058a9fdc +.dword 0xe5da16b72564d533 +.dword 0xf36e38a9c7fada9f +.dword 0x103dbf3da59c37bd +.dword 0x6f0336752c0a734b +.dword 0x9bf1650c4e4ae9d7 +.dword 0x4da1bb1aa135344d +.dword 0x935aa0e1b4e334ef +.dword 0x535ea1e608ebc050 +.dword 0xd0e8841c11a608a2 +.dword 0xf6ec735ba7046df6 +.dword 0x3de82773ac2d0de6 +.dword 0x0923368b128480a7 +.dword 0xc26fe4bef7c62682 +.dword 0xd8f7e0359072f2c0 +.dword 0x313b1fb616251765 +.dword 0x4cf7e31756a2b408 +.dword 0xb02ce68f36618b85 +.dword 0x256548d5d75a7fb1 +.dword 0x5110da13f1ee1d30 +.dword 0xb575866d223b84f7 +.dword 0xb08887478e7db0ca +.dword 0x23eb45345683e5ae +.dword 0x82e849aeb4c0c248 +.dword 0xa6793a84249beb14 +.dword 0x5968b53952099c13 +.dword 0x30724e6d39c32816 +.dword 0x86965eaa9fcf933c +.dword 0x8574c1c168b64c29 +.dword 0xaa3db5cd1daa7782 +.dword 0x8cb987ab690bb531 +.dword 0xf15edccbd49e858c +.dword 0x20870bc7d0871053 +.dword 0x624e1b971368b2c9 +.dword 0x596cd5788b816428 +.dword 0x3576b648c705b44b +.dword 0x65c9fcdcb748ae8b +.dword 0x41dac6101b539266 +.dword 0xb53c84c4790e9739 +.dword 0x409ec51ae9e22670 +.dword 0xe0b2d9e0d6d77dea +.dword 0x86a332165010176d +.dword 0x603a89645456eded +.dword 0x201044587517a1da +.dword 0x7100d568d4d25ec3 +.dword 0xd11bf52421deb103 +.dword 0xd7a35e791cc4bc2f +.dword 0x0b16bc62b8985482 +.dword 0x5589c69c55a7158d +.dword 0x07a11f9dc13ea91c +.dword 0x59eb0aad60a363e3 +.dword 0x4eb745addc8ecaa7 +.dword 0xb0a62fe60a56e619 +.dword 0x48ebe2d85177b73d +.dword 0xa3c040a6e10f10f2 +.dword 0x28732e10de97c716 +.dword 0x79eaba8f4effc030 +.dword 0xe40fb142bbb0a4a4 +.dword 0x78071cf7591c36c1 +.dword 0x7e059bc004bf6b47 +.dword 0x6b88c1fddf556b8c +.dword 0xa30ca8abd1153a2a +.dword 0x938d08c18c4e2056 +.dword 0x5788848caa84feab +.dword 0xc0a15bbb40b3aac7 +.dword 0xdc84d5cb0cc9278b +.dword 0x32f9bc958285af4d +.dword 0x99c65d3a819ab366 +.dword 0xfe3ea828bc26b89a +.dword 0x656911320170684e +.dword 0x1d339d1e5674234e +.dword 0x4776a67448c53f5e +.dword 0xbd2e6531df449fd2 +.dword 0xbb7e00cf0bab7f22 +.dword 0xc04e66b901c31be5 +.dword 0x04fca0cb60a2d671 +.dword 0x293350650d8e876f +.dword 0x280800593345f4a6 +.dword 0x28c310b35db94ec4 +.dword 0x1863264e0dccc796 +.dword 0xfcacbb76ec101b39 +.dword 0xc0f074caea645187 +.dword 0xc7f8e5e58f4bfea4 +.dword 0x86a059e17a3fc4f2 +.dword 0x4c43fd55287a271a +.dword 0x7c300917221affdb +.dword 0x250a41ad7544dd82 +.dword 0x9581541ac60b40ef +.dword 0x1bb78d20362721e1 +.dword 0x8b4f39be1e23a770 +.dword 0x0d8158273dbdffa6 +.dword 0xf8e7b95d205fd2ef +.dword 0x78972bc4ff6e5ccb +.dword 0x56508f652fbdd67c +.dword 0x3e9302a251bc1430 +.dword 0xb93ecd48f8dd0af0 +.dword 0xdb3a24f8433dee99 +.dword 0xbf3bcfacca04e3d9 +.dword 0x2c2c2ea028bb9117 +.dword 0x4f217854a0eae82b +.dword 0xf3cf9aafb0f5e18f +.dword 0x919114b95aedfefc +.dword 0x3f9dee600786446d +.dword 0xf133d68f883de548 +.dword 0xf9b5fef9fd8e1216 +.dword 0xbce9679a85ef18b0 +.dword 0xb646a79288de4101 +.dword 0xd268d4b04b9392f6 +.dword 0x94880eeae2dc47b1 +.dword 0x1a13346e6daac5af +.dword 0xcb6724388fbfd205 +.dword 0x5ce11da73600c247 +.dword 0x8ace1c26267813f0 +.dword 0x4969791d673b17f6 +.dword 0xe466f43a63e254d5 +.dword 0x77ef7d31ed2c4638 +.dword 0xb507ef5462dd8fdb +.dword 0x46cbf3d7f15ea15a +.dword 0x4fdd28cd4fa7d058 +.dword 0x1cf00783f5fcc998 +.dword 0x5937ffd391b4121c +.dword 0x726ae85085543f2f +.dword 0x9e8a1986bc7835af +.dword 0xcf059b74bef98e39 +.dword 0x2e34ea17943e089e +.dword 0x59d68c41a9060935 +.dword 0xa1f86969353497eb +.dword 0x6ff8c7cd3b95d066 +.dword 0xe966813fe37da9c3 +.dword 0x168c9fbcf131b279 +.dword 0x21a19c664333ba87 +.dword 0xa039b296cecb44c0 +.dword 0x5b6791c257ea3474 +.dword 0x9bfb380bba3ebc7a +.dword 0xd264935b7a2c52e5 +.dword 0xed6f840a7a95ec26 +.dword 0x4f6d747e7d51c112 +.dword 0xe02632a236b87b35 +.dword 0x8cb6cad4b10b932c +.dword 0xa627d0ae263001e5 +.dword 0x423c22be491a271f +.dword 0x2abe8dd49875982d +.dword 0xe0c0b499061ab01a +.dword 0x9de43d01f33ad0bc +.dword 0x1a153c896933958b +.dword 0x3aa29c9f1f59a3da +.dword 0x87d59bb62911b70b +.dword 0xd042241301cc6966 +.dword 0x41dbc7a0926a2af3 +.dword 0x2339414d7985a7d8 +.dword 0x9be230972380054e +.dword 0x8515503c1f196170 +.dword 0x2341deebda0bd0c7 +.dword 0xbf23fc52088a84d7 +.dword 0xdf670442edad4300 +.dword 0x1487d3b0aced4255 +.dword 0x289d60010f59a14d +.dword 0x19cf0c94bf75df73 +.dword 0xa63f366db50086a7 +.dword 0xdd99a837e6f6d0f7 +.dword 0xd269ea82a43e2680 +.dword 0x0cea9a94e8e86a5d +.dword 0xb425e94b746fc4cb +.dword 0x53a21e388ec5b864 +.dword 0x9e93a88fbf3026df +.dword 0xaf3d1a43e419e1ff +.dword 0x3999a803e95f730e +.dword 0x2559d6e6a92855ff +.dword 0x9e2bdf4b552c301a +.dword 0x81e852c259f7f85d +.dword 0x1012bff1f3b468e9 +.dword 0xb1a87851bcd10849 +.dword 0x16c60dd766c983d0 +.dword 0x0b1accd3328d67e6 +.dword 0x38db2350e1a68ea5 +.dword 0xe33ac904f36039d5 +.dword 0x719fe7660c78585f +.dword 0xf2cf3baff4749b5a +.dword 0x2e072b4e9023bf6b +.dword 0xbdf7b96a378f05f5 +.dword 0xf6c7da343c8f38a1 +.dword 0xca69e002baa4e9ec +.dword 0xa9084561d410e7c8 +.dword 0x5ac807f594a59f3c +.dword 0xd8064d8bb8e70aea +.dword 0x7f4ccf8475a8c4b3 +.dword 0xca51ace155b99d5e +.dword 0xf43edbae5b665134 +.dword 0xf955ec5c586c8b3d +.dword 0x3a15e61aa99a9582 +.dword 0xd44a5dfa82712ead +.dword 0x8f326a5d1b698dbb +.dword 0x73702909d9b9563a +.dword 0xdb0835796661d394 +.dword 0x3192afebccf680f4 +.dword 0x5ef155c22d97b4b8 +.dword 0xfe4db4098367a7da +.dword 0x8c311b963b36cf1d +.dword 0x720ac74a72372b8d +.dword 0x1b4afc683d5f148e +.dword 0xafa46f23cd2a5c80 +.dword 0xc5b002eba8553a40 +.dword 0xeb4c528045b4dc12 +.dword 0x215712e1d50f21c3 +.dword 0xce17dc7bf5fb0668 +.dword 0x4066d4577d005577 +.dword 0xc19fd54f74b14667 +.dword 0x6c53b7e5e99f4749 +.dword 0x15ed1d81092fa588 +.dword 0x7bc73b2a8c58dc6a +.dword 0x3f6e403579bde65a +.dword 0xad28967f5d65a235 +.dword 0xcff1a5e0c233fd6b +.dword 0x5ae558926c64c508 +.dword 0x9e70341e6951206e +.dword 0xb0aeb450a3243a8b +.dword 0xbe856bb6d0c499d8 +.dword 0xc3104984da52d674 +.dword 0xdf03ddbb9d5b35e3 +.dword 0x9aca323fd0e022ca +.dword 0xc4abbc5e9a3db7ad +.dword 0x1377077b2bf118b2 +.dword 0xc78589ae2da51183 +.dword 0xbe256271658322be +.dword 0xfc36a32db3e1e44e +.dword 0x7bbba30f6f42d241 +.dword 0xb34edfb6d9e09e6d +.dword 0x4b0658b4f158886a +.dword 0xb36b9f6168bd2462 +.dword 0x0d317ebd4210d27a +.dword 0x01ee7ae8352ce7b9 +.dword 0x52f8e6f0d5005b9b +.dword 0xec3e32b84451b991 +.dword 0x1be1f9524426832e +.dword 0x8c3630858b626f7a +.dword 0xdd50b29b662b7182 +.dword 0x950138996a94ecb0 +.dword 0xb425e69fe94546d4 +.dword 0x988d4893a222960e +.dword 0xb119b56739fa633c +.dword 0xa26a49fa7332d73b +.dword 0x4fec81c26b1b5f8b +.dword 0x71514d4170c63994 +.dword 0x558bbdf1054f343c +.dword 0x90f8d36be4011fff +.dword 0x09b0d5eb17d9ffdb +.dword 0xf99885359fbef3ec +.dword 0xecc70b026d675d9c +.dword 0xf67e29607f9a718f +.dword 0xdf2150a0ea587be1 +.dword 0x92b0c3e398257066 +.dword 0xb7e91fb379879b11 +.dword 0x6cb18cc9ebaa7103 +.dword 0x6a611cd26867aa85 +.dword 0x55c54f5bdbc43b45 +.dword 0x0deb40e3ec19f233 +.dword 0xbd2c9a5c8e7f46fe +.dword 0xbe533b4114a91115 +.dword 0x2d429963b96f9c94 +.dword 0x628832c47e5aba23 +.dword 0x239478d49d6b17f3 +.dword 0xcd398595e9762221 +.dword 0xd00047fa5dad314f +.dword 0x2fe75683dd962445 +.dword 0x028ee7cdc060f73a +.dword 0x332719613f3cf42c +.dword 0x4678bf75e1261115 +.dword 0xf226e7a5a94a0d1a +.dword 0x68ce463f77e7728a +.dword 0x2336821e3d72ad52 +.dword 0x94b2300d1bf5bcd1 +.dword 0xd5db83b07aaf46e9 +.dword 0xe01d2bd5d4778b1b +.dword 0x36edb320f6ad919f +.dword 0xee6925ba338f799c +.dword 0x15700e00880ed4c2 +.dword 0xabe44b2ea832bf08 +.dword 0x31099c26092004c1 +.dword 0x25acf6d5db4b24f3 +.dword 0xa2f36d0fda62109b +.dword 0x9b645a23cec03a6d +.dword 0x48337869133e8440 +.dword 0x390f7085959443ba +.dword 0x298d08a4e0dae8c6 +.dword 0xe59c374fe6fa8c12 +.dword 0x2dc35e8df492f0d3 +.dword 0x2e575982a8c9a64f +.dword 0x40ca31ee6c980fdc +.dword 0xd070342ee4f1759a +.dword 0x58f6028426f55720 +.dword 0xa048fd9f395e3631 +.dword 0x96556803d34ddcc2 +.dword 0x08e4820ed1fedc38 +.dword 0x9d3c515a3a7a346a +.dword 0xd3aa5a1a4b866344 +.dword 0x071831577b1bb720 +.dword 0x3f46777c8d7a210d +.dword 0x1d081ba1857fe9eb +.dword 0xbadb90f3f0ec1219 +.dword 0x1cb90b28195e6e5d +.dword 0x0424fd8ac8816471 +.dword 0xbb9d9742dc5cae1e +.dword 0x799031d0651f7c08 +.dword 0xa33e4adf7031d4c4 +.dword 0xba393d9cbe9ebb49 +.dword 0x19c5653c9d802fa1 +.dword 0x0116a201f873c995 +.dword 0xf53012051916bf30 +.dword 0x6d00644dd4109fc3 +.dword 0x656ba51b8cce5a17 +.dword 0x54d8ad7dc964f272 +.dword 0x5b6fa5a3dcc02c1a +.dword 0x348cc40d95246486 +.dword 0x2fef7596a2fe8de4 +.dword 0x28c8452eff2464e1 +.dword 0xe47945e3b2c77b8e +.dword 0xcc27702cb5e1146e +.dword 0xa507a73b4c2812fa +.dword 0x04f35ab64010f547 +.dword 0x004b9f29d02c63c3 +.dword 0x2e81e01ff91599f8 +.dword 0x2767fa6d612cc78e +.dword 0x22250957a47914e1 +.dword 0x351c72d3cf9fc225 +.dword 0xf0c1cb8c7d7af456 +.dword 0x0907f5f43334002f +.dword 0x1f2e2e2e481503a6 +.dword 0x20e220cc9e9de423 +.dword 0xa04eea4282876785 +.dword 0x46b8385d55fc74b2 +.dword 0xe71204b5099b0800 +.dword 0xc7fb1b46a98a62ff +.dword 0x712d3bba796113b7 +.dword 0x99189e877393e059 +.dword 0xc6efa5e0cfd54c2d +.dword 0xc2f5136c7bb59aba +.dword 0x94c08ee01438dbaa +.dword 0x06d848de57d72cf4 +.dword 0xb384158e824a6bb2 +.dword 0x8a37642b10803244 +.dword 0xb1a053c93797ed8d +.dword 0xc6221609dabd77cc +.dword 0xd7855e73e06b7fff +.dword 0x295dc7d4d926b9f3 +.dword 0x1aef637fd081f7b8 +.dword 0x73e0b03c7173e5ad +.dword 0x4740948366a101ed +.dword 0x4f302fea5f3a5cac +.dword 0xaa08946bcb9bb34e +.dword 0x53b9d7062b6af12b +.dword 0x43e6f3e8aa46d4cc +.dword 0xbe057906286cbf46 +.dword 0xf24ff14551531ba1 +.dword 0xa8e98c0079ec3512 +.dword 0x225553027ff83899 +.dword 0x3502a7cac2870ce5 +.dword 0xe3b7216709469ed3 +.dword 0xd92d7b64eea8efee +.dword 0xf406db69b791ca11 +.dword 0xad0723f36e3d280c +.dword 0x143dd4581488acce +.dword 0x5143efb8b389d685 +.dword 0x026882880c7c0c2b +.dword 0x4136a3bbff6f2daf +.dword 0x02af565742ab89b7 +.dword 0x2b4badd61d4bc376 +.dword 0x19adedd191336774 +.dword 0x83e9b60927fad706 +.dword 0x93db69e6786add5a +.dword 0xdbbbd7654756caac +.dword 0x5fee609be2e02dc7 +.dword 0xf84dae43a9438593 +.dword 0x44900fa8af674575 +.dword 0x183c49e61752ef92 +.dword 0x4f36dbd404edad67 +.dword 0xc45cf51e070d1122 +.dword 0x95503f1cfe6eb82c +.dword 0x293f78124470a110 +.dword 0xfb45727033e8f58b +.dword 0xf87e05c8b4b62716 +.dword 0x60b7b99491376d4d +.dword 0x12c3cfbe822208ac +.dword 0xbcc17c63d4a46fdb +.dword 0x9151ef80badd3ab1 +.dword 0xe5b2545d2a4047f8 +.dword 0x9a33f44c3c7ffe51 +.dword 0xa1a7a52c43486bcb +.dword 0x2ff83d3ef652c772 +.dword 0xd09122104292b3fb +.dword 0x88568e0f4ca262a6 +.dword 0x16a920dd7128f1cf +.dword 0x0abd992a75b38ede +.dword 0xa9f7a8e37b7107f0 +.dword 0xa37f90d4509b8a20 +.dword 0x5f976e4b28e0ac93 +.dword 0x0ff75d1c6c5c328b +.dword 0x04474d9499c25aad +.dword 0xf17129e3b1b68834 +.dword 0xbd5777d6b6a10d11 +.dword 0x1e7683a3a3302aba +.dword 0x8515218e567dca18 +.dword 0xc29c316e4ba54dfc +.dword 0x98142462f20ae667 +.dword 0x43a335d99c1e63ce +.dword 0x03a92c5b2a84e45d +.dword 0x32d8be9c805756b0 +.dword 0x2e44a29ba8c1d289 +.dword 0xa2ac5ec0879b3ae9 +.dword 0x4e603a992eea79aa +.dword 0xd6e2a30b64b993de +.dword 0x0d708fded387603b +.dword 0x1c25aeba033dfdde +.dword 0xd0ea656c45f466c7 +.dword 0xd8e3d9f195570dae +.dword 0x70902b39085d7c1b +.dword 0x83c0ef614fd26e58 +.dword 0x51295bfc3fe793f8 +.dword 0x5c2e0dedb7ce3f94 +.dword 0x0201b2eda8f5b26c +.dword 0x27b506d948ea9fe1 +.dword 0x8931375a38b23656 +.dword 0x80c9c7cd0ce65106 +.dword 0xb152a293a17d7669 +.dword 0xb2dbaeef81411ecb +.dword 0xae3c922ab4ed27a3 +.dword 0x2e2f021763e3d758 +.dword 0xc55c3d3f42d41ebb +.dword 0x9a56e6ced7f9bf36 +.dword 0x87fc1fcc95c92acd +.dword 0x3448ffed6a598aba +.dword 0xc135adf0a3b2dc67 +.dword 0x35a4a0481c835b77 +.dword 0x8909428a856f0c3c +.dword 0x9eb1fbee3ed9f418 +.dword 0xa7206af8c35de368 +.dword 0x45cb99bcadec2962 +.dword 0x2f9dc4897c28fe2a +.dword 0x6048d5b0b9d3f48a +.dword 0xf298f4b5fdee461f +.dword 0xc9e2e3327074cbeb +.dword 0x15419f6ea8f8abea +.dword 0x577353706588dbe4 +.dword 0x726cecbc587cf036 +.dword 0xb685bb9a9a91f6d7 +.dword 0x87518ff324f49903 +.dword 0xc996ae529338a54a +.dword 0x31190d36b8f891c6 +.dword 0x6ea42fc1ce9a2025 +.dword 0x49fe0fdea074bd51 +.dword 0x516296482d73c877 +.dword 0x963eda20f14554e3 +.dword 0x9baed58b783bfa34 +.dword 0x9ee94c4b26655fc2 +.dword 0x5ae0fba79a7a3e70 +.dword 0x16848486d481fa0f +.dword 0x603ca484daad4b56 +.dword 0x42a8ad9c41eab355 +.dword 0xbedf4d7e42011cf7 +.dword 0xf2e161f76c6c7580 +.dword 0x50b6fc1bcd39d155 +.dword 0x48b08a618f304aed +.dword 0xbaa8861e7c2d86ac +.dword 0xaf88dd7f215d585c +.dword 0x96674c59544d17f0 +.dword 0x225f1c569acdf500 +.dword 0xc308975aac1a52fa +.dword 0x5e7d3b10aa444210 +.dword 0xbcc43102ba0ea626 +.dword 0x15a688e743d0440b +.dword 0x9193f969d47a02bc +.dword 0xa26f0a0a96c2fb52 +.dword 0xaf9d46570378d4ea +.dword 0x199cf7afe54466f9 +.dword 0x8203ca257d944348 +.dword 0x3c09445929df50ad +.dword 0x1e076a5a2715e8ac +.dword 0x994471c4d3c6148f +.dword 0xbbdcc616d821e67c +.dword 0x1a44ac4b5ad23c5c +.dword 0xa87b51eb6d9402a9 +.dword 0xab1172e16d90c517 +.dword 0x3fda147325bb153a +.dword 0x9103372c89bc698d +.dword 0xc5c79e94aabbfc4d +.dword 0x6c5bbe00292f9431 +.dword 0xb80bab2d37b925bb +.dword 0xd23784bf3bd2ce3c +.dword 0xb8a4360783ea3ef4 +.dword 0xa803b890b7295f89 +.dword 0x08ced245d5a4dced +.dword 0x24d2f3a39d61822f +.dword 0x893eac50bc4e75c0 +.dword 0x6f104eb11abdd404 +.dword 0xd3c5cdb15ac99909 +.dword 0x806df0d0a688735f +.dword 0xf8f51aae5335bb6b +.dword 0x7ea48cc132c0c8e2 +.dword 0x2cba233999817ce4 +.dword 0x4e5b839997f23b78 +.dword 0xdae53377ae444ba9 +.dword 0x58f6f09efc0855cf +.dword 0x5c35c3d3413ba98e +.dword 0x3730a31076ed1fd4 +.dword 0x5f33edd2e0c781b1 +.dword 0xfac3433d093c9862 +.dword 0xa1cde823f734ff78 +.dword 0xa3463d1556804ba9 +.dword 0x365711b101a81105 +.dword 0x4bcb3658b9b3b0b9 +.dword 0x209c270ef6baa79b +.dword 0x8e665354be69986f +.dword 0xbba083aa0926dcb9 +.dword 0xc53492b29736945b +.dword 0xab338ea8264abc5c +.dword 0x8f7f16ad74da5aed +.dword 0xb512c2d330fb312a +.dword 0x867579f3aa76dc21 +.dword 0x7db31b54cc794152 +.dword 0x27bea4837c2817b4 +.dword 0x8d1979b133364186 +.dword 0xe87bff50c6a96ac3 +.dword 0xf81c1fa5f757634b +.dword 0x4faaac1503b1d09e +.dword 0x6224ef799af8ff89 +.dword 0x25e43a6ad7146227 +.dword 0xd40be0ebfc97d5ce +.dword 0xeb0e94c24c8e793e +.dword 0xad22010afa7d616c +.dword 0x641cc16f75ade332 +.dword 0x0dfb4047fc7014e2 +.dword 0x472c4a675a0cef63 +.dword 0x2d51925fed70af96 +.dword 0x6af3ab9db762e39a +.dword 0xd0ea7ecb85e53d7e +.dword 0x5c0a7f7df8d001dd +.dword 0x97970c21b6a047af +.dword 0x7ef924289e46672d +.dword 0xe38b6614407e0b47 +.dword 0xdc7349d9fe13373d +.dword 0xc1a23f3d5a71eded +.dword 0xcfcab45d8188921e +.dword 0x717d0c2e44940f8b +.dword 0xc48a8219864b3c61 +.dword 0xa62a923ace9fa4a0 +.dword 0x5e92a6f89dd56d73 +.dword 0xcc30fdb9c4535cd4 +.dword 0x23e35b68bafe8e49 +.dword 0x974deb861d20fa75 +.dword 0x4072fa23a0e15c15 +.dword 0xc7390f8eed3b25a6 +.dword 0x0fbb049653269885 +.dword 0xe9e8bebf49e4170d +.dword 0x419dd150e882a92a +.dword 0xba0988cd707fec4f +.dword 0xbcd96ce5e9213afc +.dword 0x5e9875728cb0ddde +.dword 0x8764f8507ee48732 +.dword 0x3bbf3f5d6647db6d +.dword 0x35b41e74e2e2eace +.dword 0xfc4d4fa30b68248a +.dword 0xdcacc9b0b0edcb15 +.dword 0xa41f29dc65dfe3cb +.dword 0xa45f4e481e83f18d +.dword 0xbd6d6d111e30cf79 +.dword 0x5aa10b7463ca3901 +.dword 0xbe53b55a1f96c939 +.dword 0xd030224ace4f05d1 +.dword 0x2ac17b94849d6c07 +.dword 0xc5cb6740b3148347 +.dword 0xf340d9309fca1790 +.dword 0xe8b4dea78fc80e87 +.dword 0x4f76ee8e1e48516b +.dword 0x34dcc154348d6748 +.dword 0x4abe5730ffff15c0 +.dword 0x21e0503a819b31f9 +.dword 0xc96587309fa23e42 +.dword 0xc1833e0270c2bcd8 +.dword 0xa99ac8aa2712abb3 +.dword 0xc8b49d777a23d760 +.dword 0x61e9962f28477d65 +.dword 0x99a87d4c1387c977 +.dword 0x8510216b8527d878 +.dword 0x013dd19fd506ee55 +.dword 0x6deaee1b25d9c4f8 +.dword 0xa88d701409c8dfbf +.dword 0x168c9d4d0acf98b2 +.dword 0xe3b9c081649a43f3 +.dword 0xe561759c1ce9d817 +.dword 0x9f522e8e34014439 +.dword 0x6d7a1e9cf0dc4de1 +.dword 0x563cf38c08a15dce +.dword 0xe0599eacbd83b532 +.dword 0xc9e2545960f57f86 +.dword 0x42e0def8d52d8810 +.dword 0xd895d8c5237d5796 +.dword 0xad3dc0b2ec7dcf04 +.dword 0x5dd5d29d5093ae1f +.dword 0xa657447ee3462b9b +.dword 0xce12c4679b63f721 +.dword 0x63cd898ea3144b5d +.dword 0x646d03b8f62abf0d +.dword 0x745e257cc2d76f3e +.dword 0x26c7e8041f2bba6f +.dword 0x7599e4147cc6ccf5 +.dword 0xcb14aef62beb4cd1 +.dword 0x0b741f82cb0b1ea0 +.dword 0x8821d8bbbaa3a323 +.dword 0x597d76881215051d +.dword 0xf007e61582d53a58 +.dword 0x763bc21355a09e01 +.dword 0x21b1c4bf620f1338 +.dword 0x1177eff319520c69 +.dword 0x5e4c88467d4d3511 +.dword 0x9bee5d3b94069b07 +.dword 0x654b26beb81be7c0 +.dword 0xd9a39bf9b1ad87f3 +.dword 0xacb0d4a6ab6e6a96 +.dword 0xaf9afc1075bcf202 +.dword 0xf50290b99a653932 +.dword 0xa832ce393f9a4a25 +.dword 0xede42e9a6b4d47ea +.dword 0xe0e6f121bc9cdac7 +.dword 0x227794f6edde9de3 +.dword 0x8ded7612ba6be119 +.dword 0xa46500a11252d357 +.dword 0xf5c0d64279f49f1e +.dword 0x6c413acdc02dc89d +.dword 0xd9ed0eab2c993b44 +.dword 0xdeb70e5655b01951 +.dword 0xad19cb575494047f +.dword 0x6cde6ec65b295592 +.dword 0x886ca03a84563934 +.dword 0xb99a282f04454bfc +.dword 0xb6139b12a56e33ed +.dword 0xbe3949b50eaede12 +.dword 0x2ed2e50033897605 +.dword 0x0e504e63c1d3b1ec +.dword 0xf9c503fe810d6700 +.dword 0xf7f87ee4dd2f86bd +.dword 0x99dee84c2c85eff5 +.dword 0x95cf7122fe5511bb +.dword 0x797130b44f736632 +.dword 0xffcf9c1a69a8cf85 +.dword 0x3c2e7b4a50da4ac1 +.dword 0x7af6bc8543e9d21a +.dword 0x169d32b2595507f0 +.dword 0x128741ef678e3d1c +.dword 0xcd74ddbe254b7267 +.dword 0xed810389dd7d8a74 +.dword 0xf3055f64993ba448 +.dword 0xf1938fd09fd69b98 +.dword 0x8d9b8dcc36eee7e1 +.dword 0x52933400f9cc21ff +.dword 0xb71ae1531f3afcbc +.dword 0x6bf79b7aad2c6679 +.dword 0xc3f9eef096dd485e +.dword 0xfac68f7bcb3842a3 +.dword 0xd6d2d22314bf7348 +.dword 0xd4c21076b4a52821 +.dword 0xaeedab74f418482e +.dword 0x93f630d0e77aa9d5 +.dword 0x8b34f6b6d49d6f23 +.dword 0x48a16a2a0ecabfe4 +.dword 0x30235735587286e0 +.dword 0x99e56e4c26074bbd +.dword 0x4393b3e4cf51f8e9 +.dword 0xed0865524a1029fa +.dword 0xb95c0e7e7ef2ac3c +.dword 0x30c2f0295e030b8b +.dword 0x739c2b227d05d49a +.dword 0xa4fb32a988e51bb7 +.dword 0xe6b75f98a85ac6ca +.dword 0x758f14666e5be9eb +.dword 0x5b1cc1558c1afa01 +.dword 0xb3d1c48db5a67068 +.dword 0x6d200b34853ce829 +.dword 0xc3219f80cb28a510 +.dword 0xc8cc11ba1be5bd93 +.dword 0xe2e9c8a06722d9a5 +.dword 0x9643b35e05912e63 +.dword 0xb4ebdcb98066cbf2 +.dword 0x918e65f87aa0f31e +.dword 0x3d60eb641f7f5dd7 +.dword 0xd193ff34d39c9677 +.dword 0x33b060b261e456a9 +.dword 0xf28ed8470f2af50c +.dword 0xe6e54a1ed7c415c4 +.dword 0x440b2f5aaedddee9 +.dword 0xb34a1c267871edfb +.dword 0xe53295282a22f0b0 +.dword 0x4feea6e8b0bcd498 +.dword 0xf9406911517ce780 +.dword 0xed7d6d6bd2225760 +.dword 0xd2171e25246e2046 +.dword 0xee586642f5547259 +.dword 0xdef02db0af37eaf4 +.dword 0x594b29374d184bc0 +.dword 0xc630502a6e8c178e +.dword 0x227561b845b65f7a +.dword 0x34b22dc9febb01b8 +.dword 0xfa78a44657867247 +.dword 0xdf18c2290d07d180 +.dword 0x1c9babf668bc08c6 +.dword 0x8d00363a480248e0 +.dword 0x9c3d5fb6d01b262a +.dword 0x51a48069ca72ef09 +.dword 0x089674bbfc18b4e7 +.dword 0xda412a57216fa816 +.dword 0x2060e1dd472e48d4 +.dword 0xe0f0b037c7855c09 +.dword 0xad171d1b03d574d6 +.dword 0x0b53bcb877c06ad5 +.dword 0x45aa3fb3998479c9 +.dword 0x118c91e81fcac16a +.dword 0x783e00c129d9c490 +.dword 0xe260f156bc3c1e74 +.dword 0x253dffce26c0c570 +.dword 0x9546e77a8ce588f4 +.dword 0xeddf7c219a7dbd64 +.dword 0x5389537fb082c090 +.dword 0x8671c36d6a73319d +.dword 0x8b8db463a4ca7e0b +.dword 0xbde6290349b6e71f +.dword 0x0ed9c247ffbcb0f0 +.dword 0xd7571aab637aa84b +.dword 0x87fb84144c2ede69 +.dword 0x717645dc1020216e +.dword 0xcfd86b1c80370b11 +.dword 0x8867e5eaf1a61d8c +.dword 0x97ea5afc3ae7ce4f +.dword 0x7bede7ba44fd22f0 +.dword 0xc59269e4787b9312 +.dword 0xcdf339ea4176ba41 +.dword 0xb5d57d82ef7394f9 +.dword 0x4d34d054e568ba7a +.dword 0x3441cf4f720f7c24 +.dword 0xa9cf854125b440d8 +.dword 0xac817efd32d3c353 +.dword 0x0b7baef942d122ae +.dword 0xe4020fe4998bd2d6 +.dword 0x04a04cbe225bd6fb +.dword 0x042b98c67d798537 +.dword 0x6fc03e5e7225cde5 +.dword 0x3827b6b86a50e1fb +.dword 0x12396dc7fb39a074 +.dword 0xfed67ef1e3fc384f +.dword 0x5a56dcd96d8213f6 +.dword 0x3319b23a48629359 +.dword 0x2e87cddb6f240e2d +.dword 0x09c5b77d1c4749d8 +.dword 0x1ea805130ff17124 +.dword 0x2e64aacb49acff82 +.dword 0xaea925830476298c +.dword 0x228ed2f3778e13f0 +.dword 0xc29d8a9e6c491f0d +.dword 0x502253169ce3f065 +.dword 0xc0c7c4b205233073 +.dword 0x24ba3ce8334efbc0 +.dword 0x3521b3bee3f9c151 +.dword 0xef1eca80ee394a02 +.dword 0xa2f9ea27b058852d +.dword 0x47ca80af6b090a3a +.dword 0x1893cb6ee9d2b5ac +.dword 0x70fcf1392ac57b55 +.dword 0x045104496edd9789 +.dword 0xff30701dafefe57b +.dword 0x344358166de1c4b0 +.dword 0x736391ac6e75ca0e +.dword 0x486a37effe78af17 +.dword 0x2a46e858af7253b6 +.dword 0x67c0527fc8fbfb3e +.dword 0xfc5b2710b56345fb +.dword 0x8be0119e8c6d9c4c +.dword 0x8b1c9e6a85d3a8cf +.dword 0x8b3c470905db0b22 +.dword 0x4ac60f3fc290917b +.dword 0xbd47b865b6aaa20e +.dword 0x67ce3ed686084aba +.dword 0xc5b50871ca9e80a0 +.dword 0x845883476f03d52d +.dword 0xfa9768eec8eeedde +.dword 0x4d3a88f8a4749c4c +.dword 0x28b21fdd0ef12548 +.dword 0x40fda78540d3731f +.dword 0x68c1a669ff23fcd6 +.dword 0x25fff2de730b3e11 +.dword 0x2fd40d358724e51f +.dword 0x34a19e217b9f5747 +.dword 0x6ada6d671970590e +.dword 0xd866901a62580c67 +.dword 0x11a23fb2cf9418d2 +.dword 0xc8c0fe45620c7b0e +.dword 0x799c8365caf82457 +.dword 0x65ec067abc1b8bd5 +.dword 0x05e1a4318938020c +.dword 0x3a56d55a416e2424 +.dword 0x4e14759747bd21ba +.dword 0x0fc43cfa2f05719f +.dword 0xc6c11d01d2a154d0 +.dword 0xa3f4212ea24cbb50 +.dword 0xa75ee2dc392c2e65 +.dword 0xd0211c2b3932f0bd +.dword 0x3097fb1bf15ad9cb +.dword 0x20ef7644ce79da2b +.dword 0xbffab724b7c86b11 +.dword 0x7376b07d036246fa +.dword 0x372969f8797d37dd +.dword 0x1c88eb7b4bc2e4b6 +.dword 0xe1d38853cdc3b40a +.dword 0xe441b90b31c8bcaf +.dword 0x0ae545824d44cf32 +.dword 0x8f457b285d4a391c +.dword 0x1bbf2da260126162 +.dword 0x2dac10bda88da80e +.dword 0x08a72b59a89e89fa +.dword 0xb6dfb6995b289e5a +.dword 0x4ecfbbc9521e3879 +.dword 0xc22e0bb8d8e12958 +.dword 0xcce1b48f00bac5f9 +.dword 0x256c389d4d5773ad +.dword 0x291a1356bc3c2e5c +.dword 0x6add8139c8715ae0 +.dword 0x7f5f3649169c372b +.dword 0x61898d080fda0a17 +.dword 0xd3c98fb984e09c55 +.dword 0x086a4f3e1d33c9b9 +.dword 0xd82820c72aef5a6b +.dword 0xe4681113ad56a3d8 +.dword 0x2063df57c19d08ae +.dword 0xa55a5c9e693d046f +.dword 0xf3c485d8388ab9ec +.dword 0x7a56cf2f8cb998f5 +.dword 0x248da996421acc15 +.dword 0xaeb4f37f2a8b5b5a +.dword 0xfcad23b2abed597a +.dword 0x2efbc12b3bb970b9 +.dword 0x61220af806f06549 +.dword 0x028a5e2a0d316c65 +.dword 0x67d1d62374e94530 +.dword 0x63277e027ae382f6 +.dword 0x0d3649229b7637b3 +.dword 0xb0c7f08a767625f3 +.dword 0x8c7b38be202fed63 +.dword 0x70840b94b23c6be5 +.dword 0x04753d06386d724a +.dword 0x8d5ac6753d8eeb7f +.dword 0x8da1f3bf06405000 +.dword 0xaaef58bd393c864f +.dword 0x69e3f160d1fb37bd +.dword 0x089077f06c6a9afe +.dword 0xb117ee8e080b510c +.dword 0x8ce8c82747028b7d +.dword 0xc7a18b8af8664939 +.dword 0x062c376cb64f1351 +.dword 0x8dd211976522cc45 +.dword 0xc0401799d11fd72d +.dword 0x5d1972a52ff9bb54 +.dword 0x66dbda5483b0be7b +.dword 0x33b79d8e17dc2659 +.dword 0x6fca47c3d41cba6d +.dword 0xaae4fd5faac5d648 +.dword 0xc76e713026b646b8 +.dword 0x4f8ae8619b1a7033 +.dword 0xa072cc0eaa81ffe1 +.dword 0x0128811df86e212e +.dword 0x333a49c1444f5476 +.dword 0x872485a45a2c33a0 +.dword 0x19afbb3c6a7fffbb +.dword 0x54ba5df9b904cf04 +.dword 0x151b9d5b5e9db735 +.dword 0x3161aceebd176ab7 +.dword 0xdea6483b12ff2d0d +.dword 0x8bbe12e61624040f +.dword 0xfe175fbb878af752 +.dword 0xdd3e3fb9471079d6 +.dword 0x3171911d79f0f016 +.dword 0xe724ab40d562c5bf +.dword 0xcc0bb6ecc6bad927 +.dword 0x6098782657c6288a +.dword 0x7052e168cb1b8697 +.dword 0x21ce5738f1f6b0d7 +.dword 0x55cb0b8ee7672854 +.dword 0xefbd12b23531ddd0 +.dword 0xaa8a37c30fe36b2e +.dword 0x479039dd7f10a6b9 +.dword 0x34e86d7926170c51 +.dword 0xe374acac833154d0 +.dword 0x61492aebb28fc88f +.dword 0xd5c77fec19d01d8e +.dword 0x115a0e028c11bae9 +.dword 0xc9ede48130159c0d +.dword 0x1b1d3f59072b48fa +.dword 0x0dcf4d482ba45d33 +.dword 0x8c14137237e43ea2 +.dword 0x7fc387beeef14f03 +.dword 0x2446af2c9753237f +.dword 0x41c368d7ef5a770a +.dword 0xbb30cfdaad63dadb +.dword 0x276ca585ba32fcb8 +.dword 0xb82ff38092b62de9 +.dword 0x0a6c9e2f04913d42 +.dword 0x2c3b058936cc4cd1 +.dword 0xad11dbf4d3be4f8d +.dword 0xffbfd7d057453253 +.dword 0xb2876c6f71e602ec +.dword 0xcad5d0466b651573 +.dword 0xef939e77f3e398c2 +.dword 0x09208a7f5a33edea +.dword 0x7f4b4a554d5ddf81 +.dword 0xb52b333d7318cc1a +.dword 0xd1051a6ab6c8efd5 +.dword 0xf4a75814d2740762 +.dword 0x718ace83abcb5430 +.dword 0xff0735732f392f93 +.dword 0xc1eaa3a98097e7e9 +.dword 0xcfea3429d55b6e77 +.dword 0x0b90b1700fbf3459 +.dword 0x0a831a8ddbee6623 +.dword 0x179f3a25bfc4f231 +.dword 0xb64223dec82520cc +.dword 0x3b6669a0c3ade865 +.dword 0xacd84935cbdecb5b +.dword 0x058b85d3d2ffafe3 +.dword 0x0630ab65396890b6 +.dword 0xb81ca89815316b82 +.dword 0x26fb63b99e754704 +.dword 0xeccc183968caa00c +.dword 0x902d06d1fdc6dd38 +.dword 0x618aa7e6cb8d658f +.dword 0xd2bfe863480cc089 +.dword 0xeda8e36fa3ef748a +.dword 0x0d6bb1e21689a1fd +.dword 0x6e5aec5c9bcec28b +.dword 0x3c7d876ba221b3c4 +.dword 0x5335fdc7845c0083 +.dword 0x6de12049da54e1f2 +.dword 0xc27beae1363c723f +.dword 0x79223b4807f74611 +.dword 0x4d8c3038391e3816 +.dword 0x49b18f9f4f3e57ac +.dword 0xd27f503287c3d502 +.dword 0xea503cdd3ecf18ce +.dword 0xa2301c3e0c3f01f6 +.dword 0xc3e5fe3fcccfb440 +.dword 0xf349ae9bf3fcdb53 +.dword 0xf0c0d72b81a06897 +.dword 0x36a7a235ac73299c +.dword 0x735bd6f8b54a6433 +.dword 0xaead8ed69ee258d4 +.dword 0x760bed029e00aafb +.dword 0xcfb26bdff45763db +.dword 0x015ccd486fa2b916 +.dword 0x525294ff91f4a27f +.dword 0x0ebc8621b0872f60 +.dword 0xeebdbe1bccc473e9 +.dword 0xa12b48613111b0d9 +.dword 0x1ac3010e3c72c8bc +.dword 0xe5ffcab5f1bed7e3 +.dword 0xe23fd2927786f46c +.dword 0x80aeaf4b3266787c +.dword 0x916b36ca863d2791 +.dword 0x4cf6ffe96c782ee7 +.dword 0xf647f20445f491a2 +.dword 0xa892eee64cd8e1c2 +.dword 0x884de75bdf2b13b4 +.dword 0x8d21632d99c27752 +.dword 0x21cfdc7244eaa58e +.dword 0x53d92206da706615 +.dword 0x4d65150392b4724b +.dword 0x87343a7ff8810537 +.dword 0xdd9e5c29594393a6 +.dword 0xe786434a3a8e2fa7 +.dword 0x8d92008d71ab2b18 +.dword 0xb4287b6e65afbcb9 +.dword 0xc650aca3ae5ab552 +.dword 0x40e519ca03ad830d +.dword 0x1596dac17748895b +.dword 0xcfda165086ac1f01 +.dword 0x7354311831d7d874 +.dword 0x1f4c28c277e53050 +.dword 0xd6134a93de05ffa0 +.dword 0x05e2bfc51e290847 +.dword 0x21ad72873730b45f +.dword 0x949df2fa4acf0c8f +.dword 0x39ce1397246e4769 +.dword 0xd2296850904fdc70 +.dword 0xc238484526f3dcc6 +.dword 0x1abb3689024025f7 +.dword 0xe4015c249a5bce8c +.dword 0xbb5fc7205ff5de65 +.dword 0xc532d60807f23a0a +.dword 0xc48c626f9ee473cd +.dword 0x72373a0fd228edba +.dword 0x468ab627588590d9 +.dword 0x08864271cdaad2bc +.dword 0x9e558a14d0d3fbc3 +.dword 0xfd510aebca84d32c +.dword 0x167db88e0870e91e +.dword 0x1b7c5b0d2c75fabd +.dword 0xd2dc42d19eeb58c0 +.dword 0xefbe0037950c4523 +.dword 0xa63a2936ede4e586 +.dword 0x4f4bc92591710cce +.dword 0x29ac5f3adf4afac7 +.dword 0x479485e4ed1cdc0d +.dword 0x0521006042d8029d +.dword 0xe5d4c15fd29f2ef5 +.dword 0xb1ce08d8c1d2ef62 +.dword 0x672f949cda37d12e +.dword 0x60bc486337485715 +.dword 0x77e9a2220d84a610 +.dword 0x06952b11b2be4d93 +.dword 0xdf96b5a27ae1bbca +.dword 0xed5311ca53ba1436 +.dword 0x344cf535bd738885 +.dword 0xa49473bc62505a60 +.dword 0xc818c26da7076f92 +.dword 0x6e2fa453c9951127 +.dword 0x2aca91df4439dbdf +.dword 0x3342eee048fd0e0a +.dword 0x7a63c8c1dc87a305 +.dword 0x5fb7651a24c080ea +.dword 0xa1ee5fe810687ff7 +.dword 0x6ba8a869b6464de0 +.dword 0xdc8435e960539046 +.dword 0xe840bf420f15249f +.dword 0x84edc5c3fd66e997 +.dword 0xb3eaee9d5ff4ba90 +.dword 0xf8f084881423fd84 +.dword 0x95ef253be913107b +.dword 0x1b211f9e8f079bd0 +.dword 0xe4c2db51d368b412 +.dword 0x1dbee89c60996b34 +.dword 0x22a8bf6fd679834d +.dword 0xea9ce2abbba3b953 +.dword 0x28a0a634dd8cfb8a +.dword 0xf6c833e9cf84ceb8 +.dword 0xdba7965fb31c83bf +.dword 0xc5b295f69c976eac +.dword 0x4eb0cd907ed05256 +.dword 0xbed191a2be37eb91 +.dword 0x25cf7c6a3ca0d20d +.dword 0x5e51c9ee8db73c7a +.dword 0x1f198e43693106a9 +.dword 0x5c2cef385f308eb5 +.dword 0x61f39da52497c7a1 +.dword 0x5483d46f26259d89 +.dword 0x56aa7e7aa92bd60b +.dword 0xa3ea09d25dc16542 +.dword 0xa7f5c568780ed412 +.dword 0xaa4fa01d1d0b445d +.dword 0x2b7c01a48cd6e4dc +.dword 0xea8b9b01b6d9cde5 +.dword 0x926610e4e861f7f0 +.dword 0x2da4eb90826eaac9 +.dword 0xeadf9097957b6188 +.dword 0x8abdec9af9ffac33 +.dword 0xe111bad3714affbb +.dword 0xc64b06bb13c2ebb7 +.dword 0x3b953d0e8566a43d +.dword 0x6cc6c73190fcb504 +.dword 0xfd2efb6386840481 +.dword 0xc5a44a26389f56ac +.dword 0x4c9fe886dbb4094b +.dword 0x591b7426acf067b0 +.dword 0x4d8725eb3efa0cbb +.dword 0x33188d3b15fd0ee2 +.dword 0x190e024b8d0eb536 +.dword 0xc8529c0850daaf47 +.dword 0xfbadd94965d46d6e +.dword 0x05086bea9296203a +.dword 0x34cd47055ad6697a +.dword 0xd7dd8ab8591403c3 +.dword 0x02b12286a50c0741 +.dword 0x55abe393881456cd +.dword 0xacae8761236ce349 +.dword 0x23b8788968e91c20 +.dword 0x5e73571a262439ea +.dword 0x3052774339fa1ee9 +.dword 0x49ed5582278ee51c +.dword 0xb0576d4d8d7f8608 +.dword 0xaab85ff0883b368d +.dword 0x3f3b0889c456fc13 +.dword 0x4c930490078b2ac3 +.dword 0x2352dde2857e95e5 +.dword 0xf2a90dc1357aef6a +.dword 0xd65be9fad6275f13 +.dword 0x8c1008cbac9f4691 +.dword 0x50ac84f003e5a169 +.dword 0x844a38408e3aa5de +.dword 0x223ff2104dc42891 +.dword 0x6dac0a6423077508 +.dword 0xbe1b1809464019e0 +.dword 0xaa2ab5074c2e2de3 +.dword 0x3be0c0ec65b821ae +.dword 0xb0c879acaef41b96 +.dword 0x73dda0d80f74c92d +.dword 0xd0843e8039d04d53 +.dword 0x1315e2e0c3119328 +.dword 0xe8a39901c2deaf49 +.dword 0xaf4cbfdcbc115f6f +.dword 0x18c56523e8212c37 +.dword 0x946d10c3a8609d85 +.dword 0xa470961d30f691a5 +.dword 0x35cfd91f9c23d7ed +.dword 0x76303bdf2a41aea5 +.dword 0x103ccd53e482ed19 +.dword 0xd2d1776f594ec62f +.dword 0x5754ef82661334bc +.dword 0x1011ca3cac6429f1 +.dword 0x3a69c92ab5653436 +.dword 0xc52b6c5f924d5695 +.dword 0x8091c5fe6700b58a +.dword 0xbf961639338215df +.dword 0x6a51b51c100a7889 +.dword 0x79cc2cc73aede907 +.dword 0xefd8895926510705 +.dword 0x44c0979ef44d3b8c +.dword 0x788acac67feb97e8 +.dword 0xf6418611767d2ef3 +.dword 0x22755f771acf8837 +.dword 0xfbe580c1e1d3e096 +.dword 0x8007fc55645bad3a +.dword 0x59c30c3a08b1d640 +.dword 0xc0eaebb3e3e531a1 +.dword 0xc65cc09248db1df7 +.dword 0x8f88952fcef64a7b +.dword 0xa8eadf9b0ed14dfd +.dword 0x826ba81672e15b3a +.dword 0x2ea9b1c8cf165e2e +.dword 0x20e84560303820c6 +.dword 0x53e97bae4797657d +.dword 0x20779b7ad7ce5f5c +.dword 0xe474570d6554e68b +.dword 0x673c8b60bb3876cc +.dword 0xf9207fdd23c62db4 +.dword 0x462690c50c77528f +.dword 0x3910ff9023a5337c +.dword 0xf6ceb4f2999db6ac +.dword 0xaad1161b9475e349 +.dword 0xd741a22dc6f15e9f +.dword 0xc2af17c6c2a20784 +.dword 0x3fc17faf4091d258 +.dword 0xb62652a837844498 +.dword 0x43033d3ac447386e +.dword 0xf11e9915bdfb4b4a +.dword 0x57a24dcf928baacf +.dword 0x7cd238523d5bb9cd +.dword 0x3ec561074869eb40 +.dword 0x4b8170d56d01103a +.dword 0x1dbb54512a3e8a03 +.dword 0xa3279da11b48320d +.dword 0xaa75ff09cbb3de81 +.dword 0x4f79550802927623 +.dword 0x1efabb1f8ed01c86 +.dword 0x8b9a14d4d62a3ef9 +.dword 0x6ada35f949624bfb +.dword 0x54ceb4493d7f4baf +.dword 0x11eae528cea3a443 +.dword 0x09791680e0a80b95 +.dword 0xd07d35cbcd39c371 +.dword 0x481d808d9734f1a5 +.dword 0x7064d7488c645df0 +.dword 0xd3e5bbb9307a3def +.dword 0xa5c67617e733da4e +.dword 0x93c8f3db15623259 +.dword 0x601ab5f531d853b8 +.dword 0xbb5818e439ce0b33 +.dword 0xaf28a31a084a2dca +.dword 0xce8b1684259e56a4 +.dword 0x2b8b84e8ff6b6b21 +.dword 0xbd45bf35ce1f1394 +.dword 0x979dbb15127c360d +.dword 0xe80d8734d47dd9d0 +.dword 0xc2a56a2889adaf58 +.dword 0xb092cf2c8a79ef55 +.dword 0xa8b784ae0d1f9791 +.dword 0x5a2c35759de7add0 +.dword 0x1d457a2f7d86c89e +.dword 0xa88908661fcb0c83 +.dword 0x8271e15aa6f599f0 +.dword 0xca11273b1a343033 +.dword 0x650f9ee172ed53e8 +.dword 0xdbff8d7baee58ded +.dword 0x63218892033692c9 +.dword 0x3ac483348e441a7d +.dword 0xa67fa17de778171c +.dword 0x0265760df95cc1fe +.dword 0xda14f5804fb7f7c0 +.dword 0x9323aa212ae7bb59 +.dword 0x79d9b530b0aa3c3f +.dword 0x45a998132ce8eb36 +.dword 0x087a276f5790c5df +.dword 0x1057a3349587517d +.dword 0x7ba2dbb051d99bd4 +.dword 0xfccf3e2634da156b +.dword 0x6963bfa477ed667f +.dword 0x5580772e73062794 +.dword 0x880a96c89a8cb1af +.dword 0x31e84d11fa807791 +.dword 0xa8e5a6df5482ccad +.dword 0x6fd8fb1544a79adb +.dword 0xf922693456942ca0 +.dword 0x972abfa20d29dc74 +.dword 0xbfda7c449e7b4a45 +.dword 0x06f08b5ab65b9879 +.dword 0x872e05f6888bde93 +.dword 0x4731f222aa4a7a0a +.dword 0x3cdb7b7b6c1f16c1 +.dword 0xaacd149eb5348dea +.dword 0xf76321b3a995ff3c +.dword 0xa816f101f853da34 +.dword 0xb840b4ffa4a1d91c +.dword 0x10728ff7daed0bcd +.dword 0x830ebd2d33bc7b56 +.dword 0xed2bc6ac6be68625 +.dword 0x6ca28cb9027b8f6c +.dword 0xf64a12ab726b5dd3 +.dword 0x2057b8dfce5bfeac +.dword 0xc7bf27f2cce72319 +.dword 0xaa5080dbf40d8c90 +.dword 0x55b6e9ca49abf676 +.dword 0xf81963f3d2826fb0 +.dword 0x056ef9c7e5c8d6a6 +.dword 0xbe5e7de1941bffc1 +.dword 0x63c8ad6241e6d4b6 +.dword 0xccda9697ada367f7 +.dword 0x5745be2d243c4a68 +.dword 0x3af9ce307db0f24f +.dword 0x4c9e966da875ff11 +.dword 0xef63ceeee328f266 +.dword 0x053f6bde14187055 +.dword 0x7321002f4d4cff68 +.dword 0x66016e88a228cafe +.dword 0x5b582189b3936f3b +.dword 0x89cbbba8103f05f3 +.dword 0x477acf60c40fc5b1 +.dword 0xc4645036e46ac85f +.dword 0x2bac4b5c30421c2c +.dword 0x5fe1ad0bf61ef150 +.dword 0xb8826f4e65990c7b +.dword 0xebb2dfc24627a94f +.dword 0xdfc996026f7a3f20 +.dword 0x519f6a9be9a6d778 +.dword 0x447916f609e1a539 +.dword 0xdd6a33c799838fb2 +.dword 0xe6483a04d04b98e9 +.dword 0xaea6f004e3279bb9 +.dword 0xc06afba6ad8497fd +.dword 0x328712e4ae0031c2 +.dword 0xa88ebb3db993fffe +.dword 0xdeb9e4b0c1d308e6 +.dword 0xaa6fe748865f03bf +.dword 0x0e7543dae549300d +.dword 0x076eeb9c38349c97 +.dword 0x217b42bd2d383028 +.dword 0x5570d346c5cba328 +.dword 0x31fc60bb16009fd3 +.dword 0x37f106acc4701285 +.dword 0x6f78f5fcf558056e +.dword 0x5da5704d35e1e830 +.dword 0x26c8a661f58b5e85 +.dword 0x605d2e222ef4825a +.dword 0x0b6a8e78de1bf383 +.dword 0xf0c3416141d38fd6 +.dword 0xfb4f14057b5db94b +.dword 0x1212ca2ce901b35c +.dword 0xcb218b8c0f8f6833 +.dword 0xcaae438524e315ce +.dword 0x98a4bf9927df20e6 +.dword 0x5701f24e11538751 +.dword 0x9085ce756bfb73bb +.dword 0xf97e1d64e5732785 +.dword 0x89505e95885efc20 +.dword 0xe136ddd4e8833d40 +.dword 0x6581175872e83929 +.dword 0xbc3e40ab1a13885c +.dword 0x54327b8896c9040c +.dword 0xdd5a7824804a8e64 +.dword 0x14936681b0ad985b +.dword 0x987be6c18e5553a6 +.dword 0x0f881d1bfad406e4 +.dword 0x6d28494de950a188 +.dword 0x17e9f36ee3501d0d +.dword 0x6157bb61057ed08c +.dword 0xea8c1b780b278676 +.dword 0xb4534c40195c1be0 +.dword 0x4d62ffde8487eddc +.dword 0xe8879fe828e3e84f +.dword 0x2d6692556133258a +.dword 0x188120d47f36a97b +.dword 0x385b32a39f7153d1 +.dword 0x77653d968dc43d66 +.dword 0x884f6e57baaeb11e +.dword 0xca4a8190d931d66d +.dword 0x7692bf2d131cea07 +.dword 0x0b13b8505fef621a +.dword 0x7555510ba2953472 +.dword 0x6eeddeceb171b597 +.dword 0x3778b27dc4c43d0c +.dword 0x2a4dbee58cb7e823 +.dword 0xcf45c1551ff67170 +.dword 0x3e3410a1dad1042f +.dword 0x2659c81f21ff747a +.dword 0x1b28c8741b3eb826 +.dword 0xc70ec88fa031bc6a +.dword 0xd8707e375e8609a0 +.dword 0x55602953843f097d +.dword 0x6e79570106783304 +.dword 0x812eb5448e734a19 +.dword 0x6419c1cdf55aca22 +.dword 0x534cad28dae8eefb +.dword 0x315d1cb893415ca3 +.dword 0xb1a20782dd3bc1fb +.dword 0x24bce5b983a49ee8 +.dword 0x2d88a996b3c50467 +.dword 0x1ae0345d43310889 +.dword 0xac797403841165a7 +.dword 0x5a94572bbcea5d3a +.dword 0x42beea381dfa8915 +.dword 0x690a9d6f7165d8f3 +.dword 0x6d47c89da33086c8 +.dword 0x2b7a70e5d7f72fbb +.dword 0xfd5b87e0b688149b +.dword 0x39851ec748fe30d0 +.dword 0xfedca55a7a60d02d +.dword 0xfa36d2cc6a59704d +.dword 0x64f86c1b62fd264e +.dword 0xb8c217c01576e1b1 +.dword 0xf3ad41753f4d6009 +.dword 0xff189c933ca128d7 +.dword 0x8972bf5a0c977112 +.dword 0xa0b862f95adbac98 +.dword 0x1c323e2c7daff851 +.dword 0xd59cac2d825e86b3 +.dword 0x10dc624cb145f160 +.dword 0x4efcc6c2c108421f +.dword 0x950cbceaaf39788e +.dword 0x196e0bc0248bf16c +.dword 0xc13959f0a2b17622 +.dword 0x3882058ba0086e7b +.dword 0xe8c570de063159cc +.dword 0x7d5c6d2ec8343751 +.dword 0x0a51101c61e6ac8d +.dword 0x446c5ffd6ffeb084 +.dword 0x9d03fe3aa32f5e11 +.dword 0xd30aaf69bcc9aae9 +.dword 0x9e596b360e3825af +.dword 0x1e8862dec9bab052 +.dword 0xcfa9637d6ac767c4 +.dword 0xd7f5c0de38017fe1 +.dword 0x5eaecf308b56ca3f +.dword 0x8b17e09f90cb9351 +.dword 0x44f5c35e33da5df7 +.dword 0x4aca668d3866ff73 +.dword 0xb787eb37f3d7df6d +.dword 0x25b120be06422608 +.dword 0x96a965f6ad044c7a +.dword 0xb1c987013c70b15a +.dword 0xf45f0fa4b71c3d72 +.dword 0x05c5eaa13ac43929 +.dword 0x1b7fe00625b30653 +.dword 0x1d51ac665fc25929 +.dword 0xb22a9cd13a4a6b96 +.dword 0x1d1d5471e267879d +.dword 0xd5579aaa0b248f7c +.dword 0xb4959d7f46f0d3ba +.dword 0xfbe2ba51b52141ff +.dword 0x69f463adbe713b3a +.dword 0x0776ca0447286c05 +.dword 0xdb0e760450bed254 +.dword 0xbc7f05daadb07ffe +.dword 0x724ed2ac4c25f46a +.dword 0xe6895694f990ab34 +.dword 0x160e01c0814bd667 +.dword 0xbb239cc5bd4fd006 +.dword 0xcdd086ae9b8052e8 +.dword 0x657c1c3e12b60c5a +.dword 0xf39fd482d6a5d057 +.dword 0xc1ee5f4b005ff90b +.dword 0xbe433bc36ee661b5 +.dword 0x1594a6f57e56273a +.dword 0x354377e44f373073 +.dword 0xb20476c64443c825 +.dword 0x4de1344d3147ebcb +.dword 0x081b3a83bed4206b +.dword 0x317d1a342e0d15c9 +.dword 0xfb8faa0d4a928288 +.dword 0x27b93f7da7af6b2d +.dword 0x689d8de89bf252d7 +.dword 0x0e1290b62386296a +.dword 0x636547d4f8988ab0 +.dword 0xa53ba82203977d6c +.dword 0xfae299828a4147d1 +.dword 0x7f88a2772b8bea5f +.dword 0x3e577da146d80a80 +.dword 0x5085aeabaf4a1704 +.dword 0x85b1eb0262d51c71 +.dword 0x216798bb24a61079 +.dword 0xaf0187f5c350ba5f +.dword 0xf79ac1fa929d6c53 +.dword 0x42bcff6a8549b079 +.dword 0x85f2cecfd5d10954 +.dword 0x51da89fdb1d06425 +.dword 0xfcdaff076fc494ee +.dword 0xba119c0941685bb6 +.dword 0x45a3af8a38cfad9c +.dword 0x552be69cabee6859 +.dword 0xd6448704cca5b22f +.dword 0x3698622af6984cba +.dword 0x37620058fb7792b7 +.dword 0xe3755146523b547a +.dword 0x7052b9701439240d +.dword 0x1ab83e3abb2334e4 +.dword 0x525a879c41376000 +.dword 0xad6971f6a805620b +.dword 0x2aabce080bc35522 +.dword 0x83c9234dd428a8b1 +.dword 0x8b0021c24dd752fe +.dword 0x39c2f17be7007217 +.dword 0x13da5d6ad8e97b09 +.dword 0x6376079ba0280642 +.dword 0x61100a6f1e41912d +.dword 0x6c02b9de9e8e026a +.dword 0xd5d5e18b8089bbbb +.dword 0xb38b2d3bb0b1d3b0 +.dword 0x0bbd3939b54286f8 +.dword 0xdf8d87af656fe318 +.dword 0x42b7779b8ad8ad43 +.dword 0xccd4102cc6158bdc +.dword 0x3fd22fc5391acd76 +.dword 0x407d7f63aa9ff940 +.dword 0xf45810dfbb293a68 +.dword 0x1d6cb180ce0f26f0 +.dword 0xf5cbb865e7922782 +.dword 0x2183219732a8ec1a +.dword 0x49ddf362326e74f2 +.dword 0x83381915472a6a2b +.dword 0xe63667147237fc27 +.dword 0x564721adb19da5b5 +.dword 0xf92341bbb1cfa3c7 +.dword 0x448b7b7b82700a55 +.dword 0xb112d7024222c0af +.dword 0x743d2de433efc2ef +.dword 0x81686b585cc0db6d +.dword 0xfb2d47bc34024865 +.dword 0xe772dca3b8d765ef +.dword 0xe217772d8666baab +.dword 0x3c2514909762a29b +.dword 0x2a42af39d659a096 +.dword 0x1c09fed9965241ce +.dword 0x71ae49b9a694f320 +.dword 0x7ed441e2eaa6d9c2 +.dword 0xd3c4fbc1874cb3a7 +.dword 0x31c57b2afc5b2e97 +.dword 0x35b8ce9a2e2a541c +.dword 0x040f1fb4700984b0 +.dword 0xb9f18394af6b6d50 +.dword 0x7d584051fe6a7a90 +.dword 0xd59fb5dac768d1c8 +.dword 0x9d79366ae6137463 +.dword 0x7dfa595404bc6fdf +.dword 0x509cfe708b24bed5 +.dword 0xf213921ac8e0d7fd +.dword 0x5adfa3d365ce349e +.dword 0x4b33c68e0e969760 +.dword 0xc81a4031d750ed8b +.dword 0xfc0a27d4977ba218 +.dword 0x47df169e9406c06a +.dword 0x43f9a7bb598df619 +.dword 0x2df1972ec7d52c04 +.dword 0xf17531ee048c1695 +.dword 0xdc67f886e198b3df +.dword 0x97c66846e9ef9d50 +.dword 0xa34e82dcbb7cfeb5 +.dword 0x08c45ed1b86c4b8f +.dword 0xd771a09561380efa +.dword 0x983fe92dd19b2809 +.dword 0xa258cde5d03f7b01 +.dword 0x017e5b0f49ff094e +.dword 0x15b20785b1aed4e8 +.dword 0xead9c708af39cf0a +.dword 0xd220f9780c9ae566 +.dword 0x13ae4472724ce09b +.dword 0xd236edff24dcbd0a +.dword 0x23023022b862a764 +.dword 0x313b586833b0d325 +.dword 0x4b4d45c310396b98 +.dword 0xfb503d71138ceee9 +.dword 0x769bd0c40ce3c4cf +.dword 0x6d1966e46044bcf7 +.dword 0x5c5ed1c1be146cd5 +.dword 0xa0073b63c07392b7 +.dword 0xb430188485186829 +.dword 0x187fc5a4f25b8435 +.dword 0x67fcc6863fb8599a +.dword 0x45720a3208e1f097 +.dword 0x58e008b7bc692e93 +.dword 0x3045bdf061c3da5b +.dword 0xb7df8bb5aeeded2e +.dword 0x943ffea54d6d5d4b +.dword 0xdf6f28950bf313c5 +.dword 0xb1704166c96c54ee +.dword 0xa2574f6e08185410 +.dword 0x9eb401c5c93d7507 +.dword 0x53e63a9ef5403369 +.dword 0x98f2600b31e87e2b +.dword 0xc7f1ff6e7c6b57cf +.dword 0xbdcd64ca2c645f80 +.dword 0x75cf4d00c2eaa607 +.dword 0x2eafd9ea3615fd9f +.dword 0xc400666fe3736abc +.dword 0x7864b9c2bca77222 +.dword 0x66c8a635adce37db +.dword 0xd7a07b229f918328 +.dword 0x9a362d58771f159e +.dword 0x677d5065d0d27182 +.dword 0x8e8c79df647e1386 +.dword 0x35444639846f42e2 +.dword 0x6a538b43ab4f22b7 +.dword 0xde6691e84630d11c +.dword 0xecd6d3e84233686c +.dword 0x65951200c2aadc5e +.dword 0xd0b17e0be38d4117 +.dword 0x3e0ee2dd0a0607f2 +.dword 0xc5950b73ec417047 +.dword 0x11d336ff7f3c0daf +.dword 0x9c4f6d2a615d9103 +.dword 0x466a9e6da55d4f89 +.dword 0xd2d9befd8141c7a2 +.dword 0x8819a66539be478b +.dword 0x89b9fc30c741beba +.dword 0xf3dec891f2b0806e +.dword 0xe51e7920a32e5ea2 +.dword 0xd19973bc0cb44c89 +.dword 0x703117f70f9d4248 +.dword 0xe76c2306c7e7eb5d +.dword 0x418e36b1ae2038de +.dword 0xc8975635918ebdcb +.dword 0xe859305ba96aa45c +.dword 0x3b3baf16250d6941 +.dword 0x67bbd081d346b53d +.dword 0xb891f4cbbbbe229c +.dword 0x45167bc8890dc5a6 +.dword 0x39f4043763620336 +.dword 0x09663221f7d9835d +.dword 0xcc5feedd3d57be8f +.dword 0xa0b2e447840d1c58 +.dword 0xeb3e988862bb36fe +.dword 0x49dbc5d00f1045f3 +.dword 0xfb21036b8ea66ae1 +.dword 0x244490188dff9ae4 +.dword 0x59d0c3f1d20141d4 +.dword 0x21e33753dc8b21ea +.dword 0x3a24ab41a23bd734 +.dword 0x33f755866a92ec9b +.dword 0xbf7a9ffb1ef6b8de +.dword 0x2a4fa89d1c6b4c8d +.dword 0x8b5ef46dc3ff2a08 +.dword 0x17077ec4e3c0e3f3 +.dword 0xeb62e7e474027dde +.dword 0x8166f0a574e9d91c +.dword 0x5ffd34a481e061d3 +.dword 0x05d5a55ef4a394a9 +.dword 0x972a24f8326973a5 +.dword 0x7f94b247d7a904e6 +.dword 0xc0547b0490e47951 +.dword 0xc2cf1b5da6b3093b +.dword 0x3581c2cfb6973607 +.dword 0x8d72f9d5e1b97bd0 +.dword 0xb0a15785bfbe7630 +.dword 0xc0e9d5529d8791a6 +.dword 0x6415e06456038233 +.dword 0x1e27198a1d01cf1c +.dword 0xf210822d4301ae79 +.dword 0x3e1fd93fa6df2a60 +.dword 0x9bfa1dc29f536d10 +.dword 0x11d5810810ed6bc6 +.dword 0xcbe303a88742f3b7 +.dword 0x834aaabaeeba9d3a +.dword 0x6e54e4f9826717f7 +.dword 0xa0d6b72eeb310f0d +.dword 0xe4e6e56ab8f2d585 +.dword 0x4ae3bc4b5a015537 +.dword 0xe387cfebbd0e9784 +.dword 0x3fe71edcc5bef852 +.dword 0x9f7388ad1fcbe0f4 +.dword 0x7cf98846d19e7474 +.dword 0x3ad704227ebbe6f2 +.dword 0x0128120233478d15 +.dword 0x06d59d2e59fcd062 +.dword 0x6ffd5f62d2acd473 +.dword 0x6730413a872ad3e2 +.dword 0x89846a75b6506af0 +.dword 0x02e0bdc8f893b5ce +.dword 0x47d1c98f43700136 +.dword 0x5a58479dc18337ae +.dword 0xca6be43380b1d6de +.dword 0xdcdb306d75e8e665 +.dword 0x7d792aed9b5602b4 +.dword 0x0bb08ac89484a568 +.dword 0x23425b4f73b60117 +.dword 0x5e466476d0abf98a +.dword 0xe29191a8c8422c8e +.dword 0x430fa5502789ab73 +.dword 0x3df93f80c90e909e +.dword 0xd17d88c014e6b821 +.dword 0xec704bdd20aab9bb +.dword 0x50c7391117a125e3 +.dword 0x1312258ee6326d94 +.dword 0xefa2905d278e60a5 +.dword 0x112342e26d47e904 +.dword 0x5da16aa19b90c35d +.dword 0x9df4b9185dcf8dff +.dword 0x926c294189a3cd7e +.dword 0xc047362a8d2b5165 +.dword 0xc468caf0eb0ad9f6 +.dword 0xa0eb5e5f49eefaf2 +.dword 0x8c486d78adf53185 +.dword 0x7172a98a1e16bfa0 +.dword 0xafd39439a9f948e3 +.dword 0x7b5b134781605e05 +.dword 0xa17f26399bd54c18 +.dword 0x2c2542b4b5107cc2 +.dword 0x549dfdb118264a4a +.dword 0xcff20e854017b768 +.dword 0xde3f48de82984b74 +.dword 0x2deaa904230f5665 +.dword 0x9a1af931c9f09470 +.dword 0xfe8b0e7d0b6f26e2 +.dword 0xfb3c942505cb22fd +.dword 0xf62fd61ea6d4bb23 +.dword 0xc3484756c3585e57 +.dword 0x8c7f9fee8f3b6181 +.dword 0x988a39809487e558 +.dword 0xeb699604075a9f22 +.dword 0xea22126142522711 +.dword 0x5ec3482ee68618a6 +.dword 0xe23af4d5b631e5af +.dword 0x285efc94c48a120d +.dword 0xdcd797ab56796294 +.dword 0x7f71f21918fae362 +.dword 0x82dbcbad938106b6 +.dword 0x31b45cb61775df4f +.dword 0xfe4a81d21739fb79 +.dword 0x59032fe5279194d9 +.dword 0x2f6be9fdd4479c74 +.dword 0xe35652103aba57fd +.dword 0xeef315439a236b6f +.dword 0xf92d68ea938d420a +.dword 0xf4d3de64600e1d22 +.dword 0x7f9993f5c4c7ffb9 +.dword 0x970ef4b7d925644d +.dword 0x2584488a9e8a9da1 +.dword 0x9b755adeaf5ee1a0 +.dword 0x0ed2968bccc8c399 +.dword 0x01d70a1429fa1787 +.dword 0x783b344b9d2db234 +.dword 0x960b457a1b39a05e +.dword 0x54a206761458dd02 +.dword 0x926b9308b05efdd8 +.dword 0x854e93dc26687ced +.dword 0xd04143a83f18340b +.dword 0xb7addd9428729633 +.dword 0x9b2aa4054638b4d0 +.dword 0xaaee3e65182bba70 +.dword 0xa1ab157cce0b460d +.dword 0x3989fe6983a3d8f8 +.dword 0xdfacf4ed5d335e4f +.dword 0x4a71154605dbfb2c +.dword 0xf2a233f5d9ee6640 +.dword 0x362a9764b3faf75f +.dword 0x3ec4a54c31c9d9d1 +.dword 0x3ca94cdc010a99f9 +.dword 0x1ab6d7ffec029719 +.dword 0x43b71fc290517bd5 +.dword 0x71eced4317617a88 +.dword 0xa5f82ae9c15eed94 +.dword 0x8c535812912067ed +.dword 0xed1c856b3249feda +.dword 0x021a19fdd46dd1af +.dword 0x46526c8f87c1e3e0 +.dword 0x26148670d6c1faa8 +.dword 0x3826d5f89e5edd60 +.dword 0xfff326984515a57a +.dword 0x542dea403179091b +.dword 0xee3419c756acb579 +.dword 0xeb6783b778d2f47a +.dword 0x7cdc73d5a9558c02 +.dword 0xcad5f565a2e757c6 +.dword 0x9613e1d46be9f25a +.dword 0xc251e7f871e74119 +.dword 0x7b0e3d3033c15873 +.dword 0x7596449ed45da4f5 +.dword 0x3a2d5561f7413c85 +.dword 0xb1020d2ee6f468bf +.dword 0x906d4ed61d229cf2 +.dword 0x63b72c581a672e24 +.dword 0x6ef19578c5e90af3 +.dword 0xcaa62ccc8ea3820c +.dword 0x0be3965c02577d4c +.dword 0x573241381cb3c21f +.dword 0xdba19ff0635b38f7 +.dword 0xae22a53d60c35c4e +.dword 0xfcfff653d932cc5c +.dword 0x8e876223493c4bc0 +.dword 0xf778717da9b71268 +.dword 0xcc10eb327f27bb7a +.dword 0x3bbbfa1370d59eac +.dword 0xb00cfb887fb37855 +.dword 0x8dcc327d4cf3cebc +.dword 0x18ea91cb25544747 +.dword 0x79135b54ec30cbe1 +.dword 0xb8c320d1b0b830bd +.dword 0x5e26f38963d603ee +.dword 0xa57c21984a802214 +.dword 0x56c31bed0991380d +.dword 0xaebecd8af5dbfabb +.dword 0xb9c96fcba12d582e +.dword 0x3c2a4666113afe9a +.dword 0x7ca97f8b70b28400 +.dword 0xfcc01491ad43fff1 +.dword 0x2e2c8956fd36ab99 +.dword 0x7bd5f6186e186971 +.dword 0xef013cf871347b42 +.dword 0x45d2f6f40013d94f +.dword 0xc21fda75983784b6 +.dword 0x5d58b1ab80a5f84e +.dword 0x6c526f250eaa183b +.dword 0xfbfce093eb451263 +.dword 0xd6289f0ca4b4103c +.dword 0x9dae7aae5dd38ab9 +.dword 0x18072f34eb90bbea +.dword 0x8dfc1638d2d57531 +.dword 0xc4bf4a491f00c3ea +.dword 0xcfa5b028b36d10a5 +.dword 0xcb589179966abae1 +.dword 0x3fee006e8a934cde +.dword 0x0673ce0285a6b16e +.dword 0xd8a0954e732f8359 +.dword 0x5ab2c14508272489 +.dword 0x71a16789c01d67ea +.dword 0xe122869d41edfedb +.dword 0x71939e3c703d01e3 +.dword 0x24e76297c7c95b40 +.dword 0xcf3e6aeeaf3a3902 +.dword 0x56b9547673e04d2a +.dword 0x7c81535d0d4c0f99 +.dword 0xe90ba3dd5f640761 +.dword 0xa175dcf5a4fd7e57 +.dword 0x9d5c06cfebb984dd +.dword 0xae4439dbc850df7b +.dword 0x93b747cac1a8504f +.dword 0x61e8e343fe1eb5a1 +.dword 0xf8c7e06e8518ccd5 +.dword 0xbcc8a88a5996bfae +.dword 0x05d70a25f878ec64 +.dword 0x5f93154703baa147 +.dword 0x226a5619ee8432db +.dword 0x1249aa4edb1aa1c0 +.dword 0xf4f400237924f937 +.dword 0x8609a0c2c11ecf8a +.dword 0x9076d45cb628827e +.dword 0xa79840b265aaad59 +.dword 0xedf9f5120a96d6b6 +.dword 0x80204b744a68b27b +.dword 0x090553839e07e8cb +.dword 0x56b66d523fcb5744 +.dword 0xb18136e5cec921b7 +.dword 0x93a2b6c5d6644eee +.dword 0x94a700c799247ea8 +.dword 0xb4a0594ebe15ce25 +.dword 0xfee39ddd4d59fec0 +.dword 0xa1438b239d0b8256 +.dword 0xa011212a64c360a5 +.dword 0x8a430fd7f7e81f11 +.dword 0x93000f285d5c275b +.dword 0xdb4084d77cedcde1 +.dword 0x7d40e3e3c409b338 +.dword 0xe014804ac83b4ad0 +.dword 0x33f78836423fe2c6 +.dword 0xdea3dd284870e458 +.dword 0xeb8fbb63f6318e3d +.dword 0x887f70bf64c3ebb8 +.dword 0x8d9aefef0ab2955b +.dword 0x853e3cb7a4cdbd9e +.dword 0x632ca02afdc5439b +.dword 0x4b09d69fa9c39830 +.dword 0x2480eedf8cfe2f3e +.dword 0x148fe55d72af9310 +.dword 0xf8963c678e4dccbd +.dword 0x169a553ebab94732 +.dword 0x491c8aad1f125427 +.dword 0x17acdcdccd388ffe +.dword 0xf4201c6208d77314 +.dword 0xa2baecf3375c0383 +.dword 0xe4bf29c104a2d7ca +.dword 0xad0c44345a930221 +.dword 0x39cc2276a17918c9 +.dword 0x9e580110630aa513 +.dword 0x51df51092b57f5f8 +.dword 0xa5ca48eccea4b291 +.dword 0x0877f87e436b6429 +.dword 0x4e6cd048cfd8b2f2 +.dword 0x112d7f320217cb0e +.dword 0x80f9458bdef11b2d +.dword 0xef9b501b6d2120e0 +.dword 0x6b29ee532e2be4c6 +.dword 0x8c9dda83c063991b +.dword 0xc06b7bf41c1c7973 +.dword 0x22c9f244ffaf7712 +.dword 0xfe319742deb558c2 +.dword 0xa65614e6e7abb565 +.dword 0xc082a7db610cc672 +.dword 0xac777109946bf0bf +.dword 0x87a0cead46b598cd +.dword 0xbbfd97af7e77d442 +.dword 0x119b062247bd6fe2 +.dword 0x0817d1e1619caaa7 +.dword 0x466d557bfc82f576 +.dword 0x0d756866b10cef65 +.dword 0x3377d25f5b602210 +.dword 0x49ef62c0c3a351f2 +.dword 0xdc13417ba8dfe404 +.dword 0x9cbf2b9215e664a8 +.dword 0xd04aa48202b242d3 +.dword 0xa27056e6f0062018 +.dword 0x515b847ae6fe3e8a +.dword 0x6018b88554f9a9b7 +.dword 0x55530372f6b1f737 +.dword 0x5ccee3264132d831 +.dword 0x5acca60075a06a15 +.dword 0xdf8760ab5560c2c5 +.dword 0x325a1c1cc30a7aad +.dword 0x2d14f45867b8edb7 +.dword 0x4d6ca62095c25b6b +.dword 0x6ad00492db4f52a6 +.dword 0xc920c0a4a5fc7d8a +.dword 0xfedfd392c88d0511 +.dword 0x81e9a705547fa774 +.dword 0xe1096a4656dcf8d2 +.dword 0xec24d90194f04111 +.dword 0xe044d3b6f5fff8e3 +.dword 0xe34aaf2d287d0fb5 +.dword 0x1781f4a22054725e +.dword 0x37ddaccfcbfe83fa +.dword 0x18de2fe5c717edb4 +.dword 0xb4097164318a3ee6 +.dword 0x0048b02397fa7265 +.dword 0x14287bac31b18ecf +.dword 0x2310f448e174aac3 +.dword 0xe27a0791bcce90d6 +.dword 0x2559a1758910721a +.dword 0xdb4925cc2fb7fd3c +.dword 0xbd810ffbbf14cb92 +.dword 0x9bafc9e81f07ac83 +.dword 0x690435240b02682d +.dword 0x37abc6eac6d4561c +.dword 0x9e7554b7a9d4894f +.dword 0x0c3400e6b3687ba8 +.dword 0x4956c22b505a32a5 +.dword 0xd14d200aed16fe34 +.dword 0xc8d915dfcba2b02c +.dword 0xb9bf103eff503e99 +.dword 0x82cd4c7f97d327b9 +.dword 0xbb1118c78feeb40c +.dword 0xdcdb4a96d968b905 +.dword 0x52cef6e4800d3f6d +.dword 0x67a82e9054b077a8 +.dword 0x2c43bef025e774fd +.dword 0x414b25a29e03b8b2 +.dword 0x5607aa29a82b4a67 +.dword 0x837031a347896520 +.dword 0x3d4b04f20c35381f +.dword 0xff30a8807131fac3 +.dword 0x2e46086005df44aa +.dword 0x4b5f4191e0531a0d +.dword 0x646cb30077db332e +.dword 0x193840d73e89abd6 +.dword 0xa560755c1ae31154 +.dword 0xfd9325f311dfbfc0 +.dword 0xb4099e4aba005155 +.dword 0x603c1e97ed75f5fb +.dword 0xa32eb5037de21187 +.dword 0xa3601378ecc460be +.dword 0x117efd2a316c8741 +.dword 0x1f28fb3260fb66d4 +.dword 0x7ad7221fefdf563d +.dword 0x814186998ac53059 +.dword 0x14bb1690c8a8f0f3 +.dword 0xd433d8a8ef12c39b +.dword 0x2304b424e111b345 +.dword 0x2fa30d1f81ff86ee +.dword 0xf1eef661f0fc4a5d +.dword 0xe8524c54e80210da +.dword 0x1a98b74fb1645070 +.dword 0xefeae434b6af7877 +.dword 0x7b74eb6a0dd73e95 +.dword 0x035166336652a678 +.dword 0x3d79c5889d1cc226 +.dword 0xf7b90a220d2dcea6 +.dword 0x8f9b64341a370d01 +.dword 0xbd8874b555ef508d +.dword 0xa3af58619dc62ae3 +.dword 0xd06c8f2392d1d885 +.dword 0xd1e577f734a2e3c3 +.dword 0x80e2a1ba1c5c74c7 +.dword 0x0dfe4153ef587c47 +.dword 0x28e8722cc32808a0 +.dword 0x4579899d1ba292ac +.dword 0x4c5581d24c1d63f9 +.dword 0x8123a5f0716c546a +.dword 0xc7a00cafed7ac97e +.dword 0xfbb1350df8dc12ad +.dword 0xbd3b7a52e7e4160a +.dword 0x0ddf4ae3bee8ff39 +.dword 0x6cf3a4f5b947b7fe +.dword 0x59a23fe2ae9e344c +.dword 0x31d1797ccc460735 +.dword 0x04e268f33414c51d +.dword 0x8a27ca7de3cafb25 +.dword 0x902251d390f2327f +.dword 0x1cd34ab4beed6482 +.dword 0x495f06dc36782aef +.dword 0x795a8b609a2445fd +.dword 0xc1b825e6836b92c4 +.dword 0x0e1a2383e52492cb +.dword 0x998add1086639d56 +.dword 0x5cd6aad6998dfa19 +.dword 0xacdeea92ebbc0a51 +.dword 0xd408d56a29dd9471 +.dword 0x9b30238ac93034d0 +.dword 0x785da76e162f77e1 +.dword 0x552492bb2f106fcf +.dword 0x4d4a6c86bc43b3d8 +.dword 0x2cc485cfa0794e48 +.dword 0x95a3b0103b8bac8f +.dword 0xd4b49b2f19e4e14e +.dword 0xbb7b3bca179b150c +.dword 0xc96d069bb49ec1e6 +.dword 0xe1e692c503de54e3 +.dword 0x3f7f1d424719327a +.dword 0xdfa767f6ee64c668 +.dword 0x661496234a3abf6d +.dword 0xc8e9d8a0aec8db34 +.dword 0xf49f59ca2a4c84e9 +.dword 0xc517f6c524b96fd3 +.dword 0x726efd69ba19139a +.dword 0x9b7086f1c63ba6c5 +.dword 0xba5adb439ee0bc4e +.dword 0xdc39089be5622d24 +.dword 0xe2b9f5f102f3375a +.dword 0x42d72801b1ddf81e +.dword 0xdad49dc6fa3ad23b +.dword 0x4a3cf79b0474c719 +.dword 0x95ecefb69332b84e +.dword 0x0c9a9302f1ab7c39 +.dword 0xd6d3db3ad97b301f +.dword 0x629fe6ea71ca8385 +.dword 0x3757ddc82862944b +.dword 0x761aa77841e6f4d5 +.dword 0x8fe2f219dc4395d9 +.dword 0xb3ec7e7214aa35fd +.dword 0x426b67cb8da5fd30 +.dword 0x19628287367eda83 +.dword 0xcc597ff850751efe +.dword 0x0f6daa3d8ef06181 +.dword 0x07477f4ab00e026a +.dword 0x68e5900727532753 +.dword 0x70da06bfa0e5fdc1 +.dword 0x64a887f47d8510b7 +.dword 0x0d3801990679d3c7 +.dword 0xe333df12617136c7 +.dword 0x04eacfcd677bc1c1 +.dword 0x50205548f715c8a1 +.dword 0x80612ad85c06e72d +.dword 0x1fd9639ca005395d +.dword 0xb2272d5699b6f0c9 +.dword 0x9adac9518046ea04 +.dword 0x6323e9d7f263c268 +.dword 0xdc2bbdfd69eab8ba +.dword 0x68a4a6baf9903c3d +.dword 0xfacc9cc24f2d77c1 +.dword 0x44979588e33c8b0a +.dword 0x1b0f16c31c3f5c59 +.dword 0xebd09baf32f08caf +.dword 0xcdc55adcf3887d5d +.dword 0x62ee63adbed5f546 +.dword 0xaca6ed251f449841 +.dword 0x8ca11f31da275e0f +.dword 0x55490120acbfcef1 +.dword 0x27e588feb912849e +.dword 0x94f450b61a75fcfa +.dword 0x1ffd94b52468e02f +.dword 0x1b93a54a62f8a4dd +.dword 0x276ebbcbb5aff48e +.dword 0x1d0b1f7409886035 +.dword 0x423f3e00adbabfaf +.dword 0x5390cc6233843675 +.dword 0x88d3c3970fe01166 +.dword 0x1bbf6a55e631e27c +.dword 0x28f67e6c97f14fa8 +.dword 0x5220d86a76ca50b9 +.dword 0x120f3ba56c9986f7 +.dword 0xddec82736bcf2cfd +.dword 0xd500c0d73204ea12 +.dword 0xcbbedaf023302cbc +.dword 0x7d6a73355e2c1a60 +.dword 0x39c3dc2bc0adbb18 +.dword 0x3eea758cf4aea929 +.dword 0x5fcd17f772a71793 +.dword 0x74e7b82dddbe445f +.dword 0xd6ffb8e0495ffbbd +.dword 0x7fb1f026d1efea29 +.dword 0xf3f4532fb5298418 +.dword 0xa10de8629019d954 +.dword 0x6a4e98b2e9f0fda5 +.dword 0xbd3bc6007903a6d1 +.dword 0x0d3ccea2f5a212a7 +.dword 0xa2a25a8749b60d46 +.dword 0x7b2319b9461cbe32 +.dword 0x5753fed9f2cd9e4a +.dword 0x2832c59269eedcd9 +.dword 0xfe239648c403c9f6 +.dword 0xde51934b78c7599e +.dword 0x7a5f85bad8d7adc5 +.dword 0xcc54a8793e5f6828 +.dword 0xe0a3acf4cc4596c5 +.dword 0x85f92e2749ad30bd +.dword 0x172b000413b89ded +.dword 0x49ab81990deca5d5 +.dword 0xcc9ce404cbdfb5ea +.dword 0x879e0818a73eeec9 +.dword 0x7b0926903cf28368 +.dword 0x5dc2df2901127d6a +.dword 0xa474429d1c6dfb12 +.dword 0x5ddeb6541c263cb6 +.dword 0x67381aed9166c17b +.dword 0xf962df35cc452dc6 +.dword 0x3a18aec298e7577a +.dword 0xb5d8c0b2654f1387 +.dword 0x8c93fc424a21d0e0 +.dword 0xc42a99051ffd97a5 +.dword 0x78ae7d65f8c77395 +.dword 0x1c207e71858fc00f +.dword 0xe4ba7e06c7a8ac64 +.dword 0xc664881596ae314c +.dword 0xeafbb588c6045e14 +.dword 0x15b284f014f68d25 +.dword 0x69e851ffa23ad595 +.dword 0x8f24d3a2dc61c769 +.dword 0x11171bacd8d7f1ca +.dword 0xe80cddd48fec0e6c +.dword 0x4d51994b9c4658e3 +.dword 0xec8eecce6e794ad5 +.dword 0x66cfd2837b20d0f4 +.dword 0x18967868cfe2e062 +.dword 0x3f2e9bd01387704c +.dword 0x8fafb1c2b3f6c81c +.dword 0xf5ef4dababc9487b +.dword 0x28409f95d9a6c6ee +.dword 0xbe5864b1bb0e9bbd +.dword 0xfdac50ad4af18d54 +.dword 0x9d40d8d5ad1894f3 +.dword 0x7a960127dc004190 +.dword 0x9ea36b08cb0231e0 +.dword 0x2d4253b501a27cf0 +.dword 0xb6c05cb9112b6c9a +.dword 0x69878b5716b9d6b2 +.dword 0x9bb667bd5a925b9f +.dword 0x6b8b039adc597d8c +.dword 0xab459eaf8c017683 +.dword 0x90c01c071e0d8651 +.dword 0x37bdc7e8e0196e96 +.dword 0x8d3d3cd6cf9e1a66 +.dword 0x70f9f0a86803d6eb +.dword 0x927a5dff36fcdbfc +.dword 0x2b0bc705e8dc55a3 +.dword 0x7b7d437559100e76 +.dword 0xc639d2a648f5ddbe +.dword 0x4b7c940a5b71675a +.dword 0x117c8173883445ec +.dword 0xa85ff7400c4396c8 +.dword 0x0afef2f4266a32be +.dword 0x29253a6ed8069731 +.dword 0x745e3c628275e269 +.dword 0x8c006ce1b27ab075 +.dword 0x22ac7ae7414169d5 +.dword 0x90122c0adb5df078 +.dword 0xecad38bdc971f5cb +.dword 0x684aa4d7a0f0ead7 +.dword 0xc60725eada751d31 +.dword 0x624b563db6e9e77c +.dword 0xdd239d02c504acec +.dword 0x23ca59b0bf4d996e +.dword 0x87429c7cb2cc3f86 +.dword 0xf6d5bf72cfec6cf6 +.dword 0x5be795b1c1645829 +.dword 0x38513d6d2e47034a +.dword 0x5f8fb44706bee4bc +.dword 0x2deb3c2993680a6f +.dword 0x9ce74ebd0576e3ec +.dword 0x55e5b8cef5db1140 +.dword 0x9463ad06ac6aa962 +.dword 0x6231d9baf58c4866 +.dword 0xc44b23b7d7aa3526 +.dword 0x7a863357e2e67431 +.dword 0x6204051a76663935 +.dword 0x5e68e8abd4e66056 +.dword 0x1674c8905ed01088 +.dword 0xa3876553b5811d8c +.dword 0x9af48d417cd17921 +.dword 0xc8885da53b9c89f3 +.dword 0x9acfffb357342b08 +.dword 0x4941fb1cddde8139 +.dword 0x87ad1a5fb40f5100 +.dword 0x42863d63de0a454c +.dword 0x3935acdd7121cb5f +.dword 0x3049a38bb7cd77c1 +.dword 0x6b6d986bc697ab30 +.dword 0xc641d1054dba4a19 +.dword 0xf9b9d535d5928d3a +.dword 0x9bd95eeced8772e0 +.dword 0x4d53467a8b71666f +.dword 0x81a31369cd6dde22 +.dword 0x4e8c2a858163a897 +.dword 0x1e4dbffaf383fdfb +.dword 0xe554ce62d95ebab8 +.dword 0xecfb337de9314d20 +.dword 0x644ad9615ceb8997 +.dword 0x958845dd2f4f346e +.dword 0x85521272f26e307a +.dword 0x936ff317e4ed8b30 +.dword 0xea4138dacf0010ed +.dword 0xf3a9deebddaa8893 +.dword 0x4a908fe84b604787 +.dword 0x6fd457a182fab558 +.dword 0x595676225861bc0b +.dword 0xc53bbdfea4a4cd01 +.dword 0x1d4ac163c5cb96be +.dword 0x1a428bcfa9d34345 +.dword 0x984f206c1414543a +.dword 0x45e53ab1970eab1b +.dword 0xf565012900d97e85 +.dword 0xe8eae36adf913aaa +.dword 0x15d2ac77157e7192 +.dword 0xf8b99a955ed50bf5 +.dword 0xb13edcd5853790e2 +.dword 0x209eed00c55dec12 +.dword 0x03ef11c0e36447bd +.dword 0x25f3e9ffd2fd0428 +.dword 0x581f2ac2db654f03 +.dword 0x2d0a99ecec6879d9 +.dword 0x29467a9bb47e2714 +.dword 0x4c3cf99c77253e39 +.dword 0x3d28a2333484e970 +.dword 0x09fedd4070f5594e +.dword 0xf936c8f2a480f353 +.dword 0x801249627d441c43 +.dword 0x186526802f302018 +.dword 0x8d6a68689d1e5225 +.dword 0x09d4577dd6a0f1d3 +.dword 0x3ca8a6ba197fe883 +.dword 0x37f2cda62bf68c16 +.dword 0xcb42b5c2e3e10589 +.dword 0x7e3843799422bdbf +.dword 0xac3f8f4a82a6c50d +.dword 0xc04766aef31d7b49 +.dword 0xfc59e29f46e8ac3e +.dword 0x320ea52b19746d9e +.dword 0xbfe16a69e2011182 +.dword 0x01db012547254846 +.dword 0x3a1e11662abf7c14 +.dword 0x2be3db81ea860ab4 +.dword 0x1c2b87ae16717b2e +.dword 0xe3c9362f9b8aae8a +.dword 0x2c94bed85d344404 +.dword 0x50b073af62df985e +.dword 0x1e219814ed09ee6f +.dword 0x698f768f99719dbb +.dword 0x8b207f0effd02453 +.dword 0xc2cc674487edd4ec +.dword 0xca5114e28af1a08f +.dword 0x777b6a42ce3645ff +.dword 0xecc660008ad66580 +.dword 0x1b7e0c78e5588dfc +.dword 0x211e5d62175206e1 +.dword 0x07fbdd70d088a5af +.dword 0x1649e698055956c8 +.dword 0xa4dce5f30e7b7cc3 +.dword 0x221fa74456134615 +.dword 0x7f755e92d5f5ea26 +.dword 0x6517fedb3996c3c1 +.dword 0xa1f9f9018b582710 +.dword 0xc6215439b5bfcee4 +.dword 0xd7db0c6d08f32e15 +.dword 0xed54f1380ec8196c +.dword 0x9127a1ee0f4c3d61 +.dword 0xba80add1a2698c3c +.dword 0x97b23e3cd9993e6a +.dword 0x92375942349dd438 +.dword 0x43fb55412a64cc28 +.dword 0x203cc768e43bbf01 +.dword 0x383243e6d422151a +.dword 0x8e9086e23dcd0bf8 +.dword 0x225133bbc6e0e842 +.dword 0x9a09c0571f8abf13 +.dword 0x43fab64c522ffd69 +.dword 0x348b87eae833bd8a +.dword 0x87b6502ea524742a +.dword 0x6f6c43582976f619 +.dword 0xde5c45dd72512d4e +.dword 0x33c48617dec62c91 +.dword 0x19b553ce132da509 +.dword 0x10bc21bd753bee24 +.dword 0xef1904b410026377 +.dword 0x1799839c56b2b8b6 +.dword 0xcd2009691e913c03 +.dword 0x38ccf2a57fd56803 +.dword 0xc80f55263a7bbb64 +.dword 0x62739df1dbd08a05 +.dword 0xe977c5ed2b6c71a9 +.dword 0x4ba28f918cc16a48 +.dword 0x0a9f00926daccf23 +.dword 0x5ff895c4b55b02d8 +.dword 0x6ddaafc1d5f36efb +.dword 0x24e1a7f101850b85 +.dword 0xb94fd0f161f9b482 +.dword 0x39769a68c9d8bb2f +.dword 0x8b1cd27b38018c5f +.dword 0xbf99d8afcff13454 +.dword 0xa49af8b2b67cee4f +.dword 0x5c6ebfdae95b2d14 +.dword 0x6119e63eca1c1d47 +.dword 0xc05399e1be6c845e +.dword 0x451c3163a772c501 +.dword 0xe5f9ebca7f39a120 +.dword 0xb95d57e06907064a +.dword 0x6484dfd0fe99347b +.dword 0xcbd322fb55041412 +.dword 0xa341a179f231b35e +.dword 0xbfb9b2a4a4c417bf +.dword 0x3b70e90b339b8bfc +.dword 0xc535cfea122d2872 +.dword 0xd996751b9fe7dac2 +.dword 0x17f843e23fa54eb0 +.dword 0xbd1e67890f3f351b +.dword 0xeceb1464bb88c5ee +.dword 0x829571b5d79dd9fe +.dword 0xbe604b43a6791da9 +.dword 0x286de5b0ff5c18ba +.dword 0x3b590cdd3ee14ed6 +.dword 0xb9237501000269ec +.dword 0x0a9ca6da87d8fb4d +.dword 0x9176db6b34b1d767 +.dword 0x58d36cd0b5740700 +.dword 0xf1b7ab7bac07994f +.dword 0x2b6d081b1039b0a5 +.dword 0xd14ed4de43869493 +.dword 0x50b2ffe3b729f5bc +.dword 0xaedc07374d16a39c +.dword 0x2e6c7b322479d856 +.dword 0x0d934a1d3e5351e1 +.dword 0x40c6eecfdf8c9468 +.dword 0x23553691bcb96dc3 +.dword 0x2004004f6be2a4dd +.dword 0x821a77130991c576 +.dword 0xa89a9bfe5afd356c +.dword 0xfeb8ee19f55c8afc +.dword 0x3351c85dac887b72 +.dword 0xa2f8ee4ed3483d24 +.dword 0xee7af5e9d178aa15 +.dword 0xfb8eb6e4e0bab503 +.dword 0xf945e3cea5cbaa66 +.dword 0xa10f09e2f43b1141 +.dword 0x86ca85417395ad1c +.dword 0x2eacb00c90e26bed +.dword 0x53749225842413e4 +.dword 0xeff170aced8940d7 +.dword 0xc8d5aa578ac0c62f +.dword 0xb5107452eeb253d9 +.dword 0x148e39d977f823a2 +.dword 0xdf89dc8a109a7ea5 +.dword 0xb7fbebd522426dbe +.dword 0x831362a9e3c3ef72 +.dword 0xaa724adb1d057394 +.dword 0x792353733b290eae +.dword 0xcb2e14d2beae7763 +.dword 0xadd9a0e1e5ed2ac0 +.dword 0x6c36bbc71f390480 +.dword 0x28e3d3aef2d93c0d +.dword 0x00f4be72121ed65a +.dword 0x79f06af532a9e2df +.dword 0x37b431397450e615 +.dword 0x95b36870930c928f +.dword 0x79a016934e16e94f +.dword 0xd534586619738f19 +.dword 0x7eaff109bd075e07 +.dword 0xd4ddb6c783c54ad6 +.dword 0x38c81f40139c767c +.dword 0xb1d1fcadd847889e +.dword 0x90365e06772bebe2 +.dword 0xaab8884645846c23 +.dword 0xbd362a080267553a +.dword 0x008ea6b8ef840306 +.dword 0x90ee4e6e06efa3f6 +.dword 0xff9577096464e82b +.dword 0x88493cf690979b3d +.dword 0x2eacb6c6b66c8c09 +.dword 0x29a2fdd593e99deb +.dword 0x41bb516a2d63adf2 +.dword 0x18c578e368a022de +.dword 0xc288c4b519b5cb92 +.dword 0x8a5175fdbeb47cff +.dword 0x0b642b5d11c8743a +.dword 0x636c3b7a4479f572 +.dword 0xc698638aeadc4b95 +.dword 0xc579e2ca05cc7f3b +.dword 0x8b53b51708ac49b2 +.dword 0xd82d5d2274b06c52 +.dword 0x7c2b06da9459ec88 +.dword 0x360f8de2fba2bda1 +.dword 0xcdd7c44b853ba09d +.dword 0xda752707a2121243 +.dword 0x9f7b961acda8cd6c +.dword 0xaeea11a4b3bf3106 +.dword 0x754cd8425b493f51 +.dword 0x628e734d4c97f51f +.dword 0x8f8929aa237338b5 +.dword 0x7f02e3a6310bd468 +.dword 0x8b11c9d360ff1d0f +.dword 0x9f3552be33b517b9 +.dword 0xd0de4957b5f882b5 +.dword 0x52b25ffb0bf2d4f1 +.dword 0x2687d313c050f27e +.dword 0x4d1da70bc95a004e +.dword 0x9fbd968b3858ca8b +.dword 0x0498efaf01e57191 +.dword 0x2057d0ed77e6d1c8 +.dword 0x7217df1d92d23f90 +.dword 0xf822574297625473 +.dword 0x0785384fab0f2f59 +.dword 0x591e63792722f3d4 +.dword 0x259d41183dd2dab3 +.dword 0xa61838fe01202f69 +.dword 0xf84d3a7a3f697c9d +.dword 0xd1176be2e15160f3 +.dword 0x94b078d48a756eeb +.dword 0xacc3920b92fcac3a +.dword 0xf6b96adccca5a91f +.dword 0x0b292ea2856e7852 +.dword 0xa2339a4ba2ce81e8 +.dword 0xc8ec8162107775df +.dword 0xed86318693ecc50b +.dword 0x6b4e68d7d2feed61 +.dword 0xda6690075b31c8c8 +.dword 0xbf90810fcef0d988 +.dword 0x2883901539aac63c +.dword 0x79359bc3fcfb1e9a +.dword 0x9fe394ff9de6cfbf +.dword 0x49ed5fccf0337105 +.dword 0x7704d2f4e691c9ca +.dword 0xa5043d1996363ca9 +.dword 0x96bb62da9093bea4 +.dword 0xea17846e33a72d79 +.dword 0xe8f5ba65923d8cb1 +.dword 0x6db6c410f9e3011f +.dword 0xe6f671a9b9cd14f4 +.dword 0x67faf21753dd4296 +.dword 0x33e1f0e09113e131 +.dword 0xf686aed66c53a4e8 +.dword 0x72f6202e4139685d +.dword 0xbb918067ed20dbc3 +.dword 0xd0f30482a8698b6f +.dword 0xbf4bffd15b99dd74 +.dword 0x22aa3cbdd270db29 +.dword 0x30008534291e07ab +.dword 0x9e94ab4001ef3b06 +.dword 0x24a128cf0e5e2d0c +.dword 0x748833074d7c50ca +.dword 0x03231f25f217b5a0 +.dword 0xd664f9e8e8dc242f +.dword 0x33e448515f625ce1 +.dword 0xc50b0b744d49466f +.dword 0x199c09bc58e216d8 +.dword 0x49f1322aa91fa151 +.dword 0x48e9925a0fc7a8fb +.dword 0x97c7e965c272e744 +.dword 0x02d5e72fb98b2b1b +.dword 0x82831995a9005fcf +.dword 0xe7bf70ba8d7c7b71 +.dword 0xc8a74ed2ccde8661 +.dword 0x18c1f11163a22806 +.dword 0x8dc97d69ac7bd578 +.dword 0xee99529c38760519 +.dword 0x8fecfc6e46033f2b +.dword 0x3fac5f2c5cbf7946 +.dword 0xa4cf2fa0e0d271c5 +.dword 0x00b145b1ef0adea8 +.dword 0x0ed88f52130ee40b +.dword 0x6efb84d7dc6774fe +.dword 0xe94725557652186b +.dword 0x33808d9239f5858a +.dword 0x753d1d2c7f57f80f +.dword 0xfc8446b6c2d4fcb0 +.dword 0x3265c7e9a3cd62fc +.dword 0x66307983c15a2a82 +.dword 0xce2d7dc8199d6716 +.dword 0x5b76914cd6c63897 +.dword 0x09e852612165ba37 +.dword 0x44774f8e2183e5b6 +.dword 0xefd1e03ab171c743 +.dword 0xd95ba47a449c07c3 +.dword 0x2b0a6fdacfa27e9d +.dword 0xe84ac7ab8580cb6f +.dword 0x8e0fd76710f9be48 +.dword 0x2970ab4e40c429e5 +.dword 0x4d0c8b80fe7a0916 +.dword 0xc147cf8c2564ddbb +.dword 0xcf59c67292ecee81 +.dword 0x3b5fa7e265b05821 +.dword 0x4f33a5f847a6c5ef +.dword 0x9ea726dc7b959de7 +.dword 0x6a0374dfd597dac6 +.dword 0xe836594a408a0b64 +.dword 0xe21974c3c639b372 +.dword 0xb2a75c9d941796b8 +.dword 0xdfc363d160e6f37e +.dword 0x6b0252f62e409fe7 +.dword 0x2bafbde1e8a88d0c +.dword 0xb28b308493af8dee +.dword 0xe14c98bd91d1c721 +.dword 0xe3a56b52ee4389d4 +.dword 0x002943d20b7cf55d +.dword 0xdef46ba9e2a8c544 +.dword 0x99ce6750013d31c6 +.dword 0x5acf3da393c5372a +.dword 0x00d9a4554a4c31be +.dword 0x3f47ba8d3ae64466 +.dword 0x468b6263515ff8fd +.dword 0x16f7e9fb5f1f6233 +.dword 0x18c1e1163fad7c07 +.dword 0xca47bef5160ea4ce +.dword 0x68e8c53e4149336d +.dword 0x65bb522353167a31 +.dword 0x3b99aad8c775d762 +.dword 0x18aaec71acf2a6f5 +.dword 0xbda7f0b9fd2b9b4a +.dword 0xd3261f5cac743657 +.dword 0x3d3fd25a5064c57a +.dword 0x174b8b5ba4a6b9ae +.dword 0xe1c9970655691268 +.dword 0x0aa1cd57ab023484 +.dword 0x3e166fd8a69b1732 +.dword 0x89ac82a3ffcd0ce8 +.dword 0x9623fcea635bde46 +.dword 0xaee39ebf6a71bc84 +.dword 0x9e42104789661aa2 +.dword 0xa3be25614ef86906 +.dword 0x524b96360a6a1ef0 +.dword 0x3eeb6ddbddce4456 +.dword 0x32a2f9d13a46aa31 +.dword 0x17adfb4132b35fba +.dword 0x2a3357daa0b057d2 +.dword 0xe924b1a228c26199 +.dword 0x5193d3188ffb4e05 +.dword 0x78bf6db4d7902b2c +.dword 0x116f2bb0802be2bf +.dword 0x917b5fb8825b775c +.dword 0x75779b85a559b938 +.dword 0xe1c27d10f9038500 +.dword 0x327904a87983bd4d +.dword 0x48049a4bd5e1eec5 +.dword 0x0c70c1f56c05190b +.dword 0x891f1e982a0e9307 +.dword 0x62412a70efed93a5 +.dword 0x245e5d8179404382 +.dword 0xdff3816256a1327a +.dword 0x28169f910a355ffc +.dword 0xb71adaf71da801ce +.dword 0xa44cb92bc4418cba +.dword 0x3f586e5544f1ec73 +.dword 0x77181f14272b673a +.dword 0x653cf1e6ace2c5b6 +.dword 0xe56afb66c4ac90e4 +.dword 0x6259ae9c3a7264d9 +.dword 0xf16baff5f58aaf93 +.dword 0xc87052a672261a61 +.dword 0x483943fe356e56a2 +.dword 0x4c8956c18d0cef43 +.dword 0xd3b081b76d4a5046 +.dword 0x49d597f126537b1f +.dword 0x9e75ccb801d732d1 +.dword 0x2975e81b4910b140 +.dword 0x02fab5fde56499c3 +.dword 0x6ab87468b51824a3 +.dword 0xfce251b1c9396eb1 +.dword 0xac3adbaa07ff5db8 +.dword 0x42fc94c9997710ae +.dword 0xafa6fdbb8228a969 +.dword 0x69a1ff94c8a617df +.dword 0x6920d69a48561d9f +.dword 0x4a0e202ef70d3460 +.dword 0xa90b2a4493914b56 +.dword 0x437ef8a0594d305a +.dword 0x77e06563a7e6e742 +.dword 0xcf9f48bb0bf280f5 +.dword 0xd5846586ad07126f +.dword 0x380e4ede3f6c35e1 +.dword 0xc50c671aa424e343 +.dword 0x35245741ca74551e +.dword 0x767091eec15c451b +.dword 0xa18b35d5fad885ec +.dword 0x4a02405e6941a7e6 +.dword 0x958c8c346d2b84a1 +.dword 0x6053bfb9372e2a66 +.dword 0xad82694f22251cae +.dword 0xe96f5c66f21a4bcc +.dword 0x69e56b324ec2e2a4 +.dword 0x5a333c40510e3d33 +.dword 0xae768531c347e731 +.dword 0xb2d9396f16374faf +.dword 0xac7e62ed3dc054e3 +.dword 0xe037b7ab35bfa4aa +.dword 0xd39b0c38e223aad3 +.dword 0x1957389799196fa3 +.dword 0x9aac125b4823b076 +.dword 0x1b9baffcf1454465 +.dword 0x12be04baf3a4e022 +.dword 0x8a1eb1a6c6ccff45 +.dword 0x92b7bfb0f8a92626 +.dword 0x14f40d40d4b516f2 +.dword 0x867daff89a12fed8 +.dword 0x78d8e259408311ff +.dword 0xbeceb86840088eae +.dword 0x11dc3b2da5af7c35 +.dword 0x9e09cc0487c0d425 +.dword 0x60294ed5cbe33ed8 +.dword 0x1a736baf041a2f55 +.dword 0x582d8634edf79d15 +.dword 0x872e089b219beeed +.dword 0xc6be90dc64a951d7 +.dword 0x6865b0d7e76fd88b +.dword 0x401ef2888e0f5137 +.dword 0xf7026846c7d42500 +.dword 0x6b983d46d5f0d7d7 +.dword 0x8168cc21627b8905 +.dword 0xc197a1578b58805b +.dword 0x7fa9e7cfc8e13794 +.dword 0xc1927249824bf940 +.dword 0x1f8b9cb134bd1c82 +.dword 0xf71525b2135488c6 +.dword 0xc9e58311fe995872 +.dword 0x9eaca9c5ef307e95 +.dword 0xfa2e4eb1d976b923 +.dword 0xd9666d8d40d1306b +.dword 0x76a43cebd9e8873f +.dword 0x1a97858e8ea89c84 +.dword 0xc001925e7b00acdb +.dword 0x95bca5853ca1627b +.dword 0x4b7aa404791b86cb +.dword 0xe5d596cbde599147 +.dword 0xd4c2e45c3637ff56 +.dword 0xa283fd4a402deaf5 +.dword 0x872125bedf105f08 +.dword 0xbb134cd81d22d9cd +.dword 0x87b9f053d351c318 +.dword 0x99893e3edf5de21e +.dword 0x32c559ebe1850af2 +.dword 0x0014dbe14cb3ccd6 +.dword 0xe7ef45adebab2c17 +.dword 0x2fd9cebd2156e9aa +.dword 0x9c131cc0775b467a +.dword 0xe33be88d8200cd06 +.dword 0x902536e0dc519e6c +.dword 0x4ae627a13d33d756 +.dword 0x2e2d9454a898bd94 +.dword 0x1f6c174b5885ede9 +.dword 0x60df3a5ffc8b5c1e +.dword 0x682a948622e03d82 +.dword 0xd9a726ef5520a950 +.dword 0xa8aefe0cc3453260 +.dword 0xcb270f473f4e764b +.dword 0xd41f70b838244e7e +.dword 0x168c5c85995cbffe +.dword 0xe4f1c187e7049a40 +.dword 0x0c614fa5bc37d085 +.dword 0xd971d30a8b89200f +.dword 0xcb16f07afd10ad33 +.dword 0x598a6da01f071660 +.dword 0xe977e7bb83a963f1 +.dword 0xae7704559e21b730 +.dword 0x59f209e3e4ee959a +.dword 0x57ed1acc51bcc638 +.dword 0xa13af7cd45760dd9 +.dword 0x9e66c13e94064ab2 +.dword 0xf44fcd50772d601f +.dword 0x90542340723bff0f +.dword 0xd87a009e07a70323 +.dword 0x64052687a862dba1 +.dword 0xd2c677e8114d49ac +.dword 0x9364033a6e63a66c +.dword 0x11e244acda8a6f09 +.dword 0x65735bba515e486a +.dword 0x3285e41bf25adca0 +.dword 0x762c076022b01a08 +.dword 0x4d4bd1902322f890 +.dword 0x5e8e04bd02669e94 +.dword 0x3cc74ff458b799ba +.dword 0x0ccf0322dc1f2783 +.dword 0x9435c64a8d69316d +.dword 0xd45d63a19a6bc295 +.dword 0x66878759a22f2882 +.dword 0xf5d84bd6f03f2eb4 +.dword 0xabe8586ae20af07c +.dword 0xeb9ee32132a21607 +.dword 0x90bd5ced6bbad599 +.dword 0x7d1a0fc9adfc737a +.dword 0x42afcf467f235a72 +.dword 0xa2138a8bcfd2c402 +.dword 0x06e3806b1572c0b0 +.dword 0xa6543376139f9c76 +.dword 0x6eabd760c2e0b9cf +.dword 0x9519319fe6c088d4 +.dword 0x1e458140cbfd5442 +.dword 0x1076d9bb4377bb6d +.dword 0x8ca97ea3de5b6555 +.dword 0x2794146f5acb8ef0 +.dword 0x5bc4ba7bdcda6394 +.dword 0xc21e45f7e433f365 +.dword 0xe311a83d09d66e99 +.dword 0xc20bec89bbacfeb5 +.dword 0x76cf2c6f54e6b7b1 +.dword 0x2b87e1b9afb880de +.dword 0xac116c1376f7adf7 +.dword 0xef52661f202e9207 +.dword 0x2c4d99b99b7a0647 +.dword 0x3a78b7bd024e12ad +.dword 0xc0411a865ca34fa5 +.dword 0x58825d2664a4f1ea +.dword 0xabfbd383edfdddd3 +.dword 0xe0313ccec4fcdb25 +.dword 0x56da739e6492a6c1 +.dword 0xd0f255957ec502a8 +.dword 0xa39a489d59608250 +.dword 0xde35b72f12af0baa +.dword 0x628e776e1b2e847b +.dword 0x69ca821e3da6a3ba +.dword 0x723f7e53a7246fff +.dword 0xa2c0201d037690c2 +.dword 0xc7e99bfc4c47aaab +.dword 0xaff3798881488913 +.dword 0x6549e87d1b643376 +.dword 0x8622c394a73c48ff +.dword 0x738011609247087f +.dword 0x6899a89ee0fcf423 +.dword 0x932589c4653c3f59 +.dword 0x6519bffdb84f956e +.dword 0xec526475e7742808 +.dword 0xe17f8daf3dbfb9fc +.dword 0x6e3ad04c33faa196 +.dword 0x90b3acce085d46d2 +.dword 0xff6ac59044544b7c +.dword 0x832a5b1558540abf +.dword 0x3341b5ea19a49528 +.dword 0xddd10a6660efdd1d +.dword 0x96d473e9db9d3499 +.dword 0xaf6ad3e0a9cf78c9 +.dword 0x6c5c4e2e0d9a1e3c +.dword 0x576855f7e050b5a6 +.dword 0x6978d800dadeaad7 +.dword 0x37e105e841287fa9 +.dword 0xaa6809abc946b1b6 +.dword 0x52e1389482574d3f +.dword 0xe7ebf5349af1b425 +.dword 0x22f2ca0539379a1b +.dword 0x0997481d8abc8570 +.dword 0x5d56bbfebd92d35c +.dword 0x5418d6dd147da46f +.dword 0x3c7effb1e876c9d1 +.dword 0x3aa02e46440cf8bf +.dword 0x9d7344fa107f0d34 +.dword 0xb3e752894e06840b +.dword 0xa3b2dbcb51e15ff1 +.dword 0xb9f46bb93195a0f9 +.dword 0xabd3aeb2d818636b +.dword 0x458bb7075f1e46f9 +.dword 0x47a835f874403dbb +.dword 0x54f8ce31004e6ef8 +.dword 0x2def9d6746335b15 +.dword 0xcc3d337501943efe +.dword 0x2064192f67d15eab +.dword 0xbf09a4f291a2e900 +.dword 0x4eaf5ec5f5342538 +.dword 0x55c84906d75fd678 +.dword 0xe6eb609c39acf740 +.dword 0x1381fdedcdcfed54 +.dword 0x17abd5bce54f318f +.dword 0x34f70a9bd3550149 +.dword 0x932165e35041a6e8 +.dword 0x7deb86c92f4fa173 +.dword 0xb6410f62794cf2aa +.dword 0x976e99aa97c614b2 +.dword 0xa7fa308a1cadc5c6 +.dword 0xc1a6f7a39854e34d +.dword 0x00eb04a1993430ad +.dword 0x2592e6c474b3ae34 +.dword 0xe0b41616b659408a +.dword 0x9d6134617412904d +.dword 0x20f73affc92298ab +.dword 0xf272dd72e9c95c7b +.dword 0xc298c4751d489c54 +.dword 0x02f31a81560de753 +.dword 0x5bdb4ed28e27124c +.dword 0xe7c1bcf9c45bbe75 +.dword 0xcb25f103c64f66a3 +.dword 0x1c9ccb88902167de +.dword 0x4255160f8bc6eb88 +.dword 0x0335e41abd7de751 +.dword 0x6d96984efd3ab625 +.dword 0x058b7421c708378a +.dword 0xc28fb7e1c37feb48 +.dword 0x13968a5ae337f6d7 +.dword 0x095a0afc199d9831 +.dword 0x757bef5c9bb9c39b +.dword 0x87df48a58befdd03 +.dword 0x21758128a64c3700 +.dword 0x5e1eca8ba0395c53 +.dword 0x77c4d13d6aa34cbf +.dword 0x3f9aa73e9f4fa708 +.dword 0x25682bb7be91c328 +.dword 0x8fe31b21c2c5474c +.dword 0xf96be69283107d60 +.dword 0x8361fdc30b8bbd0d +.dword 0x69c0aa2c56c23060 +.dword 0x0e38e6c11832e38f +.dword 0xfcfb723937d1790c +.dword 0x04a1f3daf62a4657 +.dword 0x3f3145f837a1b2bc +.dword 0x5881f724fb505baa +.dword 0x6c400f3113f42eaf +.dword 0x8f322b6c80c63999 +.dword 0x0a604774a67fd62f +.dword 0x5a96611635a7d2fa +.dword 0x661a633cdea690eb +.dword 0xd9d69dbb9beed7b1 +.dword 0xff1fad72b746c14a +.dword 0xd6879a3375951077 +.dword 0xfacb0de0e0e4ec17 +.dword 0x733190f8986ee8c7 +.dword 0xdb05727bfcaa8e39 +.dword 0x0fdb7c342af76699 +.dword 0xe71a87fe220e91f8 +.dword 0xd749d9018d54b00a +.dword 0x933f701d64f64a90 +.dword 0x6c36ab0b8a7ae45d +.dword 0x47e5b91edaf9442a +.dword 0x91fe03cd591ffe52 +.dword 0xc2b018635a3b7de2 +.dword 0x886b722b60fae124 +.dword 0x10f035fc67b31c17 +.dword 0xbcda42f8f4c16c5f +.dword 0x61fad3c70935381b +.dword 0x0b6fd5c4093b78d8 +.dword 0xbab0a281da9265d4 +.dword 0x22185d96058c84cf +.dword 0x1fff2162c97b13cf +.dword 0x78534f0a19487ab8 +.dword 0x84d43e73bd5449b0 +.dword 0xf33f08bb4715a914 +.dword 0x3cb316eddee319e3 +.dword 0x2da363435a98cf36 +.dword 0x68e1da412b5a457f +.dword 0x2611783e9d098d33 +.dword 0x4f2c342f0f84ab0c +.dword 0xe08630f176b9fbf4 +.dword 0x43464ce3407d15e3 +.dword 0x569939db6cb65edb +.dword 0x708bfced67267eff +.dword 0x7ef0160dbede96e5 +.dword 0xef9b2cf439cf9c99 +.dword 0x809c0f4903c129a8 +.dword 0x6f65a7586e41b6b4 +.dword 0x356368d9dee91952 +.dword 0x386d1cef6c1231c4 +.dword 0x222e8ce6cbe2f544 +.dword 0x54f03cc94236156a +.dword 0x1d5cc75707b954d4 +.dword 0x6023c3b6751e79c2 +.dword 0x1b1f4c46de48d776 +.dword 0x264aa5d14d4f9a24 +.dword 0x055414778aa15e29 +.dword 0x7bf1fbd8b7b7a0a3 +.dword 0xe1c9cc26f724ed86 +.dword 0x76302e3427dcb034 +.dword 0x9eb3bd36a3f6aa64 +.dword 0x2c8986fab60d390b +.dword 0xfc2db3b3521ed95b +.dword 0xa7f4a13d2f276f2f +.dword 0x69d1561823905b21 +.dword 0x569b22dcbba4dc38 +.dword 0x418a239bc96b5c33 +.dword 0x1596e1671b8e915c +.dword 0x721574a21fb4b721 +.dword 0x5115ec5d567bbdcc +.dword 0x2633412082b3fe62 +.dword 0x1fee9ca2c43fb1f9 +.dword 0xe67fe0b3ac483653 +.dword 0x51de7dc7cb23938a +.dword 0x208a3fd9b0e5390e +.dword 0x527717352a00d943 +.dword 0xd23eec9d516681ed +.dword 0x82f7e55a1a936ca6 +.dword 0xee6e6098557ab03e +.dword 0xc31542deb346f20d +.dword 0x2130fd1eb956e1a5 +.dword 0xf39c687d0384a5ad +.dword 0x2e4e11338ce7c71e +.dword 0x09bca174be6280d1 +.dword 0x2b8a5b6cf86bc01f +.dword 0x2192cbc5fb652e00 +.dword 0x653a1d09f4654ac5 +.dword 0xb0ee12f584c890d7 +.dword 0xc7852b5341c950ef +.dword 0xc529c6e8697d9ecd +.dword 0x857787e68b507630 +.dword 0x52416f6edc1b2460 +.dword 0xc2efc2e78671db18 +.dword 0x39129d5e4f01aa72 +.dword 0x6ad9f6d5c6b075c4 +.dword 0x97e56c3afcd2a261 +.dword 0xa7ebd739eee7bb58 +.dword 0xe5ac4d7543429e11 +.dword 0xea6ab20ace4ba17a +.dword 0xc02a16e6c6dd2b2a +.dword 0x57e25adf81634d3c +.dword 0x377b7831f949c2eb +.dword 0x96be83450cfc4d9b +.dword 0x0cc43a21a7ecdaf0 +.dword 0x2b8ec8283d4a89d9 +.dword 0xcd5858c48cfc15fa +.dword 0x2e70004204f88a3f +.dword 0xd30115366f8e3397 +.dword 0x7d2254cb2ebd6bc1 +.dword 0x584805e8ff8ebe5a +.dword 0x95924130fbc2b724 +.dword 0xe711d98b99446ae1 +.dword 0x7f3b013537bc0df1 +.dword 0xefeee677460b1ee9 +.dword 0x2e8eb3c4a620508c +.dword 0x2948c2f69e934ba9 +.dword 0x14dc92deb8a887c2 +.dword 0x2ccd215d5dc9bd5f +.dword 0xe02f6f122d7815fe +.dword 0xe79d95f98f321284 +.dword 0x1410254fd98f70b0 +.dword 0x373ebbb6fd312b82 +.dword 0xe109df7798d9156c +.dword 0x2ab2dd0e71aea992 +.dword 0xa993720e97ed646c +.dword 0xd116dcf71dfd13b4 +.dword 0x32b3d5f0c0b989c6 +.dword 0xee27b3beea246847 +.dword 0x89209ef44f265976 +.dword 0x38ff6a8d78c8607f +.dword 0x5650425f2588de3d +.dword 0x2e446f07df41bd66 +.dword 0x42d10134af8a6433 +.dword 0x2088267961bff078 +.dword 0x6a317d471f494e68 +.dword 0x2944603df773df5e +.dword 0xb645c7d5399d1e9b +.dword 0xd3bc58329952fb81 +.dword 0x7c27f4e71ac728f9 +.dword 0x19e614ef3b61c9c0 +.dword 0x55e5ca17616a50a8 +.dword 0x29a6c9e1b1095615 +.dword 0xf0e3db172d9b599a +.dword 0x12363760a4843535 +.dword 0x3f395f09695712dd +.dword 0x16239386c12442a6 +.dword 0x11c910e76322697b +.dword 0x22dd9f6e5eb30542 +.dword 0x51f80daa11551df8 +.dword 0x784a1712b62d76d2 +.dword 0x6a2000ced5ce1be0 +.dword 0x74ea3d8889fbb880 +.dword 0x7d55fa0192e8bad2 +.dword 0xaee350ea5757b78f +.dword 0xe58ebf1559afa2d1 +.dword 0xc39f278bd9160377 +.dword 0x72d3913e5175e033 +.dword 0x9e08916b50fc0074 +.dword 0xd4b9cef86cc2fe94 +.dword 0x65d67ca08f7b7d92 +.dword 0xb2677e537ca5b668 +.dword 0x513444a043c9fa74 +.dword 0x14ee26514be58250 +.dword 0x22a28766d39e842f +.dword 0x2c5cd19467a1e411 +.dword 0x87b5224e99ec7d4b +.dword 0x2774054c0a9f9a4c +.dword 0x46122bde6a1121a5 +.dword 0x78f11c4193d44aa4 diff --git a/isa/rv64uv/data_fd.h b/isa/rv64uv/data_fd.h new file mode 100644 index 0000000..3f32ec3 --- /dev/null +++ b/isa/rv64uv/data_fd.h @@ -0,0 +1,4096 @@ +.double 3.82442188112e-88 +.double 9.43371972728e-26 +.double 3.93277941308e+246 +.double 1.07116715411e-136 +.double 2.94366617223e+71 +.double 2.74149657173e-281 +.double 4.03928077631e-189 +.double 1.39753598034e+88 +.double 9.99891841595e+213 +.double 167950.209113 +.double 3.0938897403e+212 +.double 1.27015662742e-246 +.double 1.76239017488e+214 +.double 4.64664649481e+228 +.double 2.05347187325e+18 +.double 4.97149695024e+161 +.double 2.2402530193e-190 +.double 3.23373689753e-104 +.double 1.8774019486e-257 +.double 2.09851573992e+203 +.double 1.50554446389e-204 +.double 1.09209202377e+22 +.double 5.48867635168e+193 +.double 9.46861888455e+285 +.double 1.48773103771e-86 +.double 9.84726166644e-178 +.double 4.50928483518e-88 +.double 4.88630775716e-279 +.double 7.99769919299e-200 +.double 2.19080373589e-258 +.double 2.20471662267e+187 +.double 3.01765807058e-205 +.double 4.44513880315e-170 +.double 1.42983049394e+55 +.double 1.43821524886e-229 +.double 3.51432832431e+79 +.double 2.19784528323e+145 +.double 3.59021532923e-177 +.double 8.32770856299e+175 +.double 1.16281616503e+81 +.double 1.02181921933e+25 +.double 1.66166219641e-277 +.double 1.41497712152e+172 +.double 1.35348433377e-15 +.double 2.05865658051e-215 +.double 1.27025671443e-78 +.double 2.71146324575e+233 +.double 2.0468698842e+257 +.double 2.51053594015e-289 +.double 7.18095653196e+142 +.double 6.96936821152e-81 +.double 2.81657804683e+125 +.double 2.50237117238e+99 +.double 1.1095037484e-54 +.double 3.93514652461e+183 +.double 4.82625377516e+250 +.double 5.93162974333e-271 +.double 1.24193349808e-233 +.double 1.52137894289e-306 +.double 2.9416506645e-193 +.double 9.34583286483e+127 +.double 7.81591285713e+292 +.double 2.80584530064e+206 +.double 4.36835137603e+226 +.double 63.7671241011 +.double 2.87105947072e-173 +.double 7.55272779176e+119 +.double 4.30098037209e-242 +.double 4.91076062682e+58 +.double 9.96249531025e+298 +.double 5.34159554277e+142 +.double 7.42295055377e+50 +.double 2.01120747283e+52 +.double 6.30617592833e+13 +.double 7.13286437101e+180 +.double 2.06038467147e-283 +.double 5.39454243137e-115 +.double 4.98377530203e+287 +.double 1.28016901377e+306 +.double 2.37162802895e+50 +.double 3.94982469871e-243 +.double 3.40526707404e+171 +.double 5.06662598311e+106 +.double 4.50218603502e-119 +.double 3.58275068673e-128 +.double 1.39119552744e-308 +.double 7.6610081387e+266 +.double 2.23839941306e+295 +.double 9.87333702842e+126 +.double 8.23650583981e+291 +.double 1.84449057415e-30 +.double 2.57127410232e-243 +.double 1.48957217119e-269 +.double 5.01399168207e-212 +.double 5.30203863369e-197 +.double 2.29161410838e-128 +.double 4.31722042106e+78 +.double 1.30255000892e-52 +.double 1.13011376923e+65 +.double 1.87219537932e-30 +.double 9.23583894399e+276 +.double 4.18724742551e-112 +.double 6.33852914813e-212 +.double 7.8441099576e+206 +.double 5.21858143584e-229 +.double 1.86468467613e+210 +.double 2.4163677115e-08 +.double 8.33102075649e+274 +.double 5.39125516002e+112 +.double 2.5533931483e-171 +.double 5.22459491411e+194 +.double 2.32947751823e+140 +.double 3.91787357598e-187 +.double 3.89897249042e-107 +.double 1.69972778543e-56 +.double 11116.3911888 +.double 6.30640502814e+295 +.double 1.66418134895e-268 +.double 1.07455797329e+156 +.double 1.58499205767e-114 +.double 3.84820554548e-138 +.double 4.83792208432e+237 +.double 1.4160490147e-175 +.double 1.2425196935e-61 +.double 1.12844315132e-170 +.double 4.59932352914e+306 +.double 1.01624249558e+163 +.double 5.27110565812e+98 +.double 6.24356495688e-12 +.double 1.28312485777e+131 +.double 4.33504259701e+237 +.double 1.16409126841e+259 +.double 1.47596419605e-108 +.double 5.00545394832e-137 +.double 6.23292781249e+125 +.double 9.53713612698e-157 +.double 4.86143898079e-262 +.double 5.86452695699e+81 +.double 7.90220124437e+166 +.double 5.43415504592e-104 +.double 515496.277408 +.double 3.54673599356e+177 +.double 1.63587676811e-268 +.double 1.61259427898e+28 +.double 1.09474317505e+83 +.double 4.19063247466e+49 +.double 3.84047621979e-277 +.double 5.79783447524e-158 +.double 1.61474877998e+143 +.double 4.44599341656e+96 +.double 2.62251455029e+134 +.double 1.263105125e-38 +.double 7.93325515304e-160 +.double 3.52676657744e-37 +.double 1.54548083338e+252 +.double 7.84183090124e+299 +.double 2.27711200231e+226 +.double 1.18938270382e+41 +.double 3.42990921891e+34 +.double 4.40825740177e-191 +.double 4.17117665123e+117 +.double 2.47742695482e+67 +.double 6.46925802594e-52 +.double 2.98171201207e-20 +.double 5.5623203193e+283 +.double 3.08776275447e-52 +.double 4.8603068152e-99 +.double 7.26483286554e-16 +.double 1.01885123915e+51 +.double 5.27211556052e-293 +.double 1.09136514446e+245 +.double 3.40182405712e-190 +.double 5.06842242823e+160 +.double 4.80387225296e+117 +.double 4.98906497893e+213 +.double 4.66012357267e-204 +.double 7.55927357168e-198 +.double 1.26582248889e+306 +.double 5.45184391955e-05 +.double 5.70352388489e-30 +.double 2.3246186492e+133 +.double 2.3291614041e+206 +.double 4.76672732026e+34 +.double 1.23879003102e-256 +.double 1.54610609805e+210 +.double 4.54828043959e+141 +.double 1.71232095271e-13 +.double 1.03425463514e-259 +.double 1.06442248267e+151 +.double 4.78037879998e-204 +.double 3.13602462171e-52 +.double 2.27725999163e+47 +.double 3.18096975706e-118 +.double 6.31446299277e+77 +.double 3.99818108771e+232 +.double 2.23631646047e-53 +.double 4.15674411894e+294 +.double 1.08805390198e+178 +.double 1.21929257647e+132 +.double 0.334918652198 +.double 8.99530433428e+104 +.double 1.19691819218e+35 +.double 6.74700661759e+97 +.double 2.51861771014e-110 +.double 1.95118755901e-126 +.double 4.27032600369e+163 +.double 1.3118740796e-141 +.double 7.85393751373e+236 +.double 5.08597657423e-83 +.double 3.90796931871e-212 +.double 6.52201698735e-128 +.double 1.66646352907e+75 +.double 1.66417823967e-26 +.double 1.89218126456e-97 +.double 2.43898031991e+60 +.double 1.34683072442e+47 +.double 2.8912723382e-13 +.double 2.62640159709e-194 +.double 1.12913172719e-114 +.double 6.47612774363e-298 +.double 8.50714294882e-37 +.double 3.72750550144e+96 +.double 7.30354074781e-264 +.double 6.9954430262e-128 +.double 3.33029219605e-244 +.double 8.87103491842e+150 +.double 1.59008817028e-172 +.double 5.52982520782e-185 +.double 1.07471153587e-163 +.double 5.46841797609e-111 +.double 7.19637514773e+286 +.double 1.17787701128e+129 +.double 1.07313350621e-82 +.double 5.42805197293e-167 +.double 2.15490937966e+17 +.double 5.94310293473e+176 +.double 66226296197.3 +.double 5.47281554868e-56 +.double 1.62047047676e-183 +.double 3.65807965119e-147 +.double 1.50263292547e-164 +.double 7647.73522886 +.double 4.14709350274e-209 +.double 2.67333364816e-220 +.double 1.1318542587e+196 +.double 6.85706541856e-264 +.double 5.97951124866e+297 +.double 1.68071059075e+153 +.double 1.18406181514e-142 +.double 3.00294436609e-55 +.double 6.75473977214e+80 +.double 1.80922939946e+194 +.double 1.30617504526e-169 +.double 6.29667272612e+93 +.double 3.87841981165e+141 +.double 3.27847753862e-240 +.double 1.19019129053e+112 +.double 5.51782322764e+270 +.double 5.10177713792e-140 +.double 2.90903095978e-64 +.double 7.14190254127e-125 +.double 9.28864200848e+113 +.double 1.24221691229e-244 +.double 1.66656923814e+22 +.double 4.1726954421e-154 +.double 7.69367767439e+143 +.double 5.67474047507e-251 +.double 9.28526229884e+248 +.double 7.65074463779e-199 +.double 1.77704016821e+78 +.double 5.40973661539e-179 +.double 5.09892381099e-157 +.double 3.840746571e+85 +.double 1.60885118841e-171 +.double 8.27097161759e-189 +.double 9.85439848372e-309 +.double 1.01744914641e-198 +.double 3.02976349596e+237 +.double 2.48193866364e-114 +.double 3.47556272347e-32 +.double 5.29244689703e+140 +.double 1.08367467971e+91 +.double 3.85265534176e-177 +.double 4.82892469361e-260 +.double 2.39345928653e+252 +.double 1.08314063995e+255 +.double 2.12397213848e-240 +.double 4.12974907926e-115 +.double 1.2505749745e+15 +.double 8.18821861386e-77 +.double 1.15843881328e-91 +.double 4.77941567414e-298 +.double 5.31759484137e-248 +.double 3.78547555722e-52 +.double 3.0641664538e-163 +.double 2.58193931153e-225 +.double 1.65614263999e+91 +.double 5.02132843614e-111 +.double 5.71900717534e+289 +.double 4.12324631032e-153 +.double 1.3873328788e+256 +.double 1.67186615634e-46 +.double 1.72227913899e-241 +.double 2.71103304046e-205 +.double 3.27914708387e+92 +.double 5.70888026703e-35 +.double 1.15556722891e+97 +.double 2.82087779717e-156 +.double 2.3889245399e-19 +.double 9.49620067393e-183 +.double 362192963.663 +.double 3.27482603154e+29 +.double 3.19639214826e-32 +.double 3.98388165942e-101 +.double 3.59237799593e-13 +.double 1.09504915472e-278 +.double 1.36091426429e-220 +.double 8.82237244372e-243 +.double 1.41217455759e+35 +.double 7.89082203375e+293 +.double 2.76215646876e+236 +.double 2.16869786554e-112 +.double 6.70830453254e+104 +.double 1.7880565388e-295 +.double 6.98840826323e+118 +.double 2.84216229054e-27 +.double 2.75842986099e+274 +.double 4.03744455457e-83 +.double 1.96924405838e+255 +.double 2.18227014464e+272 +.double 5.73773693828e+147 +.double 1.5604902802e+206 +.double 1.91638896429e+158 +.double 2.3248194159e-18 +.double 6.22755115913e+154 +.double 4.10191330631e+303 +.double 0.708899346193 +.double 4.59163783958e-117 +.double 3.02370381713e-239 +.double 1.45074179072e+260 +.double 1.42123861673e+76 +.double 5.85242146774e+26 +.double 4.94914830827e-96 +.double 6.05987204711e+190 +.double 4.91300123947e-35 +.double 1.89175083129e-100 +.double 4.60586486293e-92 +.double 4.07378917388e-275 +.double 1.26930233356e+259 +.double 1.67073820751e+67 +.double 1.47596075424e-14 +.double 7.71459247703e-252 +.double 4.54693085718e+57 +.double 2.06838351427e-281 +.double 7.25858810875e-237 +.double 5.10436023249e-20 +.double 8.1043382514e-100 +.double 3.41503377267e-274 +.double 3.67876838986e+50 +.double 1.17133617649e+129 +.double 4.79901859071e+175 +.double 2.08347306012e+138 +.double 4.03742070692e-296 +.double 1.3675926103e-161 +.double 7.27901038991e-245 +.double 4.91561269267e+193 +.double 5.70309217419e-67 +.double 1.28081225898e-298 +.double 9.2184402317e-276 +.double 7.99949466191e-249 +.double 1.97670616964e+166 +.double 7.60621033545e-279 +.double 1.03022289276e-19 +.double 3.05633558505e+157 +.double 2.46883051231e+280 +.double 1.99766005198e-66 +.double 1.32936007519e+89 +.double 3.4232750481e-285 +.double 2.60741587185e-74 +.double 2.33272855412e+146 +.double 2.16841518588e+221 +.double 8.61606406545e+135 +.double 4.30393333288e+14 +.double 1.68704473851e+260 +.double 6.52776500077e-144 +.double 3.44961009434e-134 +.double 8.39119824606e+55 +.double 4.27298288636e-76 +.double 4.52023977768e+184 +.double 2.42945582577e-252 +.double 7.72200301817e+117 +.double 6.8259087103e+224 +.double 4.83984923883e+68 +.double 3.82246503294e-190 +.double 5.4396777095e+103 +.double 5.17925185361e+280 +.double 4.56093975541e+228 +.double 4.47731648599e-38 +.double 3.72241008513e-125 +.double 8.34015297857e-97 +.double 1.20008728476e-238 +.double 5.36461629793e-229 +.double 2.63400575477e+157 +.double 8.61155529101e+41 +.double 8.10432055197e+54 +.double 2.73005407013e-63 +.double 7.90526013219e-206 +.double 2.83700326066e-42 +.double 4.77795755448e-237 +.double 1.0543861686e-235 +.double 5.01529152026e+141 +.double 7.78584035222e+170 +.double 7.18668968201e+71 +.double 5.70845099009e-56 +.double 4.84625082018e+33 +.double 40957803358.0 +.double 5.02324584155e-157 +.double 1.46784205357e-117 +.double 6.51276978432e+129 +.double 5.61114353182e+115 +.double 1.93865721907e+209 +.double 8.23119169825e+277 +.double 7.49588096423e+17 +.double 4.54630288251e-82 +.double 4.45474434301e+128 +.double 2.34396252506e+36 +.double 639405474.992 +.double 1.38782376727e+164 +.double 1.08417869495e+199 +.double 1.72759146444e+217 +.double 1.53393993293e-115 +.double 1.55599386353e+165 +.double 8.35063268018e-249 +.double 8.58322879385e+166 +.double 2.11498392594e+37 +.double 7.39927308799e-30 +.double 1.41850838733e+245 +.double 3.45896752586e-43 +.double 1.1482929203e-88 +.double 9.80514004796e+258 +.double 1.68665899462e-127 +.double 1.00654046452e-239 +.double 1.97770792326e-58 +.double 2.73492769433e-55 +.double 7.76219339134e-277 +.double 1.82417502004e-122 +.double 7.0201314391e-93 +.double 1.34064972437e+179 +.double 3.78822437997e-282 +.double 6.26609766117e-131 +.double 1.64980427181e+211 +.double 1.92694410821e-288 +.double 2.98101244901e+92 +.double 7.51578264741e-129 +.double 3.77586385062e-202 +.double 4.03674988354e+101 +.double 1.38470303803e-27 +.double 4.04145102672e-148 +.double 1.15920661269e+89 +.double 3.37168600123e+110 +.double 2.47160342225e-30 +.double 2.28325677836e+216 +.double 4.82865636058e+132 +.double 1.47816786023e+23 +.double 3.25791719982e+172 +.double 5.50406397936e-200 +.double 1.19223035938e-267 +.double 0.00313480520547 +.double 8.04970971722e-283 +.double 7.36681878321e-20 +.double 1.98867264325e+214 +.double 8.41269299032e+179 +.double 7.54816829984e+81 +.double 1.1638830695e-275 +.double 2.21839400784e-299 +.double 7.83216273767e+243 +.double 6.86202056459e-18 +.double 9.68037003127e-142 +.double 7.01309385412 +.double 6.97919691629e+25 +.double 3.33084539117e-158 +.double 6.82039752283e+141 +.double 3.364036876e+152 +.double 2.62916820463e+64 +.double 3.12161229276e-29 +.double 8.62766116867e+291 +.double 2.50134361186e+26 +.double 4.44414745006e+202 +.double 1.13278961536e-53 +.double 6.02567148314e-200 +.double 1.9743001317e-246 +.double 1.17268280904e+269 +.double 6.41169333908e+143 +.double 1.10436451663e-46 +.double 4.54064864748e+154 +.double 9.05119305484e-78 +.double 7.34063316574e+168 +.double 2.95033021821e+281 +.double 1.28782473164e-136 +.double 2.24893041187e+61 +.double 3.16142843632e-58 +.double 4.25664487837e-127 +.double 4.34274283492e+114 +.double 3.23012383374e+220 +.double 6.56021202998e-49 +.double 5.70345461387e-233 +.double 2.31855771125e+202 +.double 2.86989657866e+41 +.double 1.34007528875e+188 +.double 8.27092346444e-19 +.double 2.04409118534e-227 +.double 1.28145955641e-101 +.double 4.07976150809e-111 +.double 3.95765651459e-205 +.double 2.90197057111e+167 +.double 3.85051281254e+220 +.double 3.98376327789e+168 +.double 1.87232661257e-247 +.double 4.01207010794e+51 +.double 6.16382881066e-285 +.double 1.69847261386e+40 +.double 2.71095387443e-207 +.double 1.30950524316e-161 +.double 1.38161895576e+159 +.double 1.30215549158e+91 +.double 4.36871761859e+86 +.double 4.59159204509e-254 +.double 6.34004204906e+235 +.double 1.40522433644e-219 +.double 3.8443536669e+109 +.double 1.93011037993e+192 +.double 3.60983800081e+75 +.double 3.23849297399e-78 +.double 7.71700795772e-289 +.double 1.6377134608e-104 +.double 4.31012994737e-81 +.double 5.16793820808e-76 +.double 2.58421658983e-155 +.double 2.49283470142e+12 +.double 18353866273.8 +.double 5.2820215183e+219 +.double 1.73986023085e-105 +.double 1.94772666648e-76 +.double 1.03229625595e-26 +.double 2.20806459992e+99 +.double 8.11936773305e-266 +.double 2.3578892043e+118 +.double 2.89696698112e+242 +.double 1.95698002816e-240 +.double 1.82287515363e+291 +.double 8.1412490217e+191 +.double 1.90815684623e+240 +.double 4.33625203515e-182 +.double 7.96711363429e+202 +.double 7.23473386358e+124 +.double 4.72843467677e+207 +.double 1.22173121021e-59 +.double 1.13898723221e+110 +.double 1.12287787463e-176 +.double 1.64715890089e+117 +.double 3.38711154149e-292 +.double 1.5206419765e-286 +.double 1.32638296406e-249 +.double 6.33998507674e+301 +.double 1.14830082757e-151 +.double 6.68070981467e+207 +.double 9.43353443081e-83 +.double 1.68420729741e-277 +.double 7.20407627625e-230 +.double 484572.096595 +.double 2.1902289693e-235 +.double 3.25846571176e-271 +.double 8.15133758495e+114 +.double 3.81758169573e-307 +.double 1.87639541561e-209 +.double 1.4791735226e-233 +.double 1.34623557338e+205 +.double 1.00827726677e+149 +.double 6.16870096781e+168 +.double 1.58308043151e-20 +.double 7.15875374015e+165 +.double 9.89012266677e-211 +.double 2.98194485256e+54 +.double 4.68229449354e+252 +.double 8.05498563913e+181 +.double 7.55674180043e-233 +.double 5.19115473093e-96 +.double 5.03311300739e+234 +.double 1.59674015117e+167 +.double 1.51935963254e-178 +.double 6.95490537921e+38 +.double 4.71006320726e-186 +.double 2.90045957249e-261 +.double 8.34764720493e+186 +.double 4.2132384089e+56 +.double 7.85606213951e-281 +.double 1.19094858803e+60 +.double 1.85264164463e-32 +.double 4.39790377006e+62 +.double 1.32576490937e-196 +.double 2.68640130943e+119 +.double 9.44926166708e-30 +.double 1.10490976414e-32 +.double 2.90264965805e-36 +.double 1.219014029e+166 +.double 1.69319946938e-154 +.double 2.79607109844e-183 +.double 2.3388765632e+33 +.double 2.51396016405e-215 +.double 1.19998048209e+94 +.double 2.35952575057e-99 +.double 1.80582524387e+26 +.double 6.80557857402e-101 +.double 1.67145241529e-281 +.double 2.54041185983e-196 +.double 4.18769251731e+242 +.double 4.00831214251e-20 +.double 5.96936730429e-176 +.double 3.00806430441e+35 +.double 4.80052604126e-218 +.double 1.73801245699e-163 +.double 3.30307688472e-26 +.double 2.23712659233e+187 +.double 8.98926505319e-269 +.double 7.51125382149e-84 +.double 1.58853561461e+294 +.double 4.18904029122e+290 +.double 1.6350951722e-209 +.double 1.61742213703e+283 +.double 1.30967490651e+103 +.double 2.70389496685e+212 +.double 3.38296251313e-297 +.double 1.04190466116e+14 +.double 1.76457946206e+279 +.double 1.11673099517e-134 +.double 5.99322713781e+289 +.double 4.10582802831e-17 +.double 4.28560472427e-185 +.double 1.20601031915e+241 +.double 1.25865916093e+268 +.double 1.29728429579e-198 +.double 8.6277664219e+269 +.double 4.52556637056e+273 +.double 4.0953180074e+198 +.double 1.57491019656e+271 +.double 0.000177545243654 +.double 2.83509049663e-82 +.double 2.68971848288e-282 +.double 1.11988110259e-187 +.double 2.86943205908e-251 +.double 6.80772299894e+62 +.double 2.52517100196e+69 +.double 3.30100257196e-45 +.double 8.02432906552e+123 +.double 2.35463080747e-116 +.double 2.08060431056e-219 +.double 1.03927735481e+203 +.double 2.92403200471e-84 +.double 1.52632901393e-46 +.double 1.23738189658e-250 +.double 1.07223287489e-240 +.double 1.18106404726e-84 +.double 1.12364706618e-299 +.double 1.61601906047e+78 +.double 7.72710416349e-184 +.double 1.0148134907e-56 +.double 5.87713514974e+29 +.double 1.44954758699e+262 +.double 3.99804360189e+29 +.double 2.42427496666e+121 +.double 2.65933363003e+241 +.double 3.36697151731e-79 +.double 7.23216461729e-187 +.double 5.01333456811e-273 +.double 6.50203849337e-56 +.double 1.95188129308e-148 +.double 841013.521391 +.double 9.98414846299e+59 +.double 1.10441805188e+286 +.double 4.65426218575e-99 +.double 9.00449330438e+73 +.double 2.25953391618e+78 +.double 3.5477454434e+223 +.double 4.42548610886e-207 +.double 2.57888123528e-48 +.double 5.92028219956e+103 +.double 6.97982347887e+280 +.double 6.73483015328e-21 +.double 9.80889505587e-116 +.double 2.47450459693e-207 +.double 3.96723280695e+195 +.double 5.49125847056e-171 +.double 9.5152050023e-287 +.double 6.09166729707e-152 +.double 1.90719190304e+84 +.double 2.26162329445e+271 +.double 1.89147098658e+48 +.double 3.50542197089e-253 +.double 6.68678148256e-222 +.double 7.17241024219e+25 +.double 141142804807.0 +.double 2.41425608567e-139 +.double 5.19928842396e+192 +.double 2.39356864853e+216 +.double 1.72219986735e+131 +.double 3.02658461257e+246 +.double 1.32105848595e+31 +.double 9.19461675715e+128 +.double 7.70817939982e+20 +.double 5.98370108156e-242 +.double 1.06051794507e-95 +.double 3.43549852151e+262 +.double 4.22559651792e-204 +.double 3.70376726427e-94 +.double 1.71829710166e-110 +.double 1.27725654016e+197 +.double 5.67785683026e-131 +.double 8.19957806183e+196 +.double 9.05765129816e+57 +.double 1.41798474839e+166 +.double 1.6938685039e-184 +.double 3.85067828467e+36 +.double 0.202183272038 +.double 2.96478426417e-60 +.double 8.0234187877e+170 +.double 2.60097683311e+278 +.double 9.15514687594e-139 +.double 1.11225200344e-58 +.double 1.21662595012e-214 +.double 2.51275170651e+91 +.double 1.37684728559e-141 +.double 1.28060013536e+46 +.double 1.45721321435e-242 +.double 5.14768640197e+218 +.double 1.1474266115e-114 +.double 1.34347746281e+21 +.double 5.03171162235e-254 +.double 7.34517982388e+81 +.double 1.52332466595e-198 +.double 1.60493001077e-82 +.double 4.80342760427e-157 +.double 5.79119635414e+240 +.double 2.05094868919e+253 +.double 1.45801174265e-218 +.double 5.52510900359e-121 +.double 2.09499183034e+221 +.double 9.08189426458e-181 +.double 1.28308463559e-232 +.double 2.04688617027e+148 +.double 7.64732971294e+49 +.double 1.36145979011e-68 +.double 4.64573445596e-21 +.double 3.17033770487e-295 +.double 1.55747784952e+138 +.double 9.73403045021e+30 +.double 16259.2840884 +.double 1.07204099705e+24 +.double 2.7999299857e-212 +.double 2.93002719207e+22 +.double 5.76509634783e-154 +.double 1.6845802575e-93 +.double 3.83170607218e-53 +.double 5.79943193975e+189 +.double 2.96794684834e+285 +.double 1.74916232161e-13 +.double 1.13810652232e+282 +.double 3.27711660887e-218 +.double 1.66144135753e+243 +.double 7.77533761076e+288 +.double 1.86129553268e-96 +.double 1.97866716567e+109 +.double 3.00966610339e+122 +.double 8.68084018163e-172 +.double 2.44655739577e+59 +.double 3.48837206173e+271 +.double 2.92446771243e+186 +.double 1.14344221803e-257 +.double 3.79730907763e-76 +.double 8.8290273704e-271 +.double 1.75168740941e+192 +.double 6.11986425856e-259 +.double 1.62013271934e-132 +.double 1.493210426e-189 +.double 2.38123017151e-143 +.double 1.06404223477e-226 +.double 3.61746599493e-291 +.double 7.63188912307e-88 +.double 1.94239291793e-153 +.double 7.57326980074e+204 +.double 4.81749591818e-74 +.double 4.65403015608e+306 +.double 1.10135245143e+102 +.double 3.875440667e-280 +.double 2.58902436544e+113 +.double 4.64035837462e-92 +.double 2.72173625796e-70 +.double 1.28023480372e+155 +.double 1.36398338251e-146 +.double 7.96798941161e-308 +.double 2.17084838403e+156 +.double 2.0165194187e+79 +.double 4.82245457509e+156 +.double 1.66109032829e-259 +.double 1.44131128187e-295 +.double 1.47410659109e-149 +.double 4.39178721031e-142 +.double 3.86562252104e+161 +.double 7.34419574998e-15 +.double 1.4598000876e-15 +.double 8.24847181408e-50 +.double 5.89951619311e-96 +.double 8.16566279374e-05 +.double 9.02333823888e+183 +.double 2.3811526494e+191 +.double 6.53274881898e-279 +.double 4.75868325749e+233 +.double 1.99916468649e+163 +.double 8.3832662158e-291 +.double 2.37001458971e+33 +.double 7.27423764343e-259 +.double 1.71741100085e-164 +.double 2.78256124093e+180 +.double 8.33609723728e+62 +.double 7.43526895776e+198 +.double 3.46862749997e-118 +.double 8.12247729049e-184 +.double 1.07734984729e+206 +.double 2.18839919886e-45 +.double 7.68543089843e-136 +.double 2.25427570419e+38 +.double 2.34183180451e-243 +.double 1.11641617555e+290 +.double 3.66778153048e+174 +.double 5.27392075352e+89 +.double 9.4771149777e-122 +.double 2.13399576941e-33 +.double 2.55352917631e-101 +.double 8.14617736246e-293 +.double 4.31592940988e+271 +.double 1.13201579271e+143 +.double 2.93320279302e-146 +.double 2.03251938323e+51 +.double 6.62926929331e-101 +.double 3.59190403432e+30 +.double 5.18812560875e-202 +.double 6.04180279375e+112 +.double 7.11586105638e-90 +.double 2.90933139614e-97 +.double 1.51728666082e-243 +.double 9.105715848e-244 +.double 3.23644606867e-37 +.double 3.77289511618e-251 +.double 7.65272064757e+272 +.double 9.45227643396e+101 +.double 1.06641265302e+89 +.double 1.81166347652e-238 +.double 3.00947852061e-279 +.double 1.42883150707e+259 +.double 0.00490944714854 +.double 7.91569809193e+125 +.double 2.49802878995e+17 +.double 1.06519342814e+199 +.double 5.11352684396e+165 +.double 7.98536405521e-303 +.double 4.36215138933e+33 +.double 2.19643330677e+165 +.double 6.80333784664e+97 +.double 3.0520663456e+43 +.double 4.06525257681e+205 +.double 3.99658768201e-174 +.double 4.9279667004e-137 +.double 3.27000023395e+12 +.double 7.38338553175e+110 +.double 6.09551551935e-108 +.double 547291970.389 +.double 3.33034414578e+215 +.double 9.84722352853e+105 +.double 3.43365332609e-151 +.double 4.55626476957e+300 +.double 2.09938964254e-226 +.double 1.82464059592e-173 +.double 2.61612028354e-198 +.double 2.88796890152e-57 +.double 1.36952218834e-103 +.double 1.01334309856e+297 +.double 7.92041246949e-143 +.double 9.48278611929e-264 +.double 5.79379555211e-290 +.double 5.07377230292e-233 +.double 8.17030481529e+46 +.double 1.49328961233e-33 +.double 4.24446297145e-184 +.double 4.40189318055e+288 +.double 2.24711748012e+294 +.double 8.93143042848e-102 +.double 3.00885668478e-172 +.double 5.54092143224e+205 +.double 3.31218991485e+156 +.double 1.69905736986e-101 +.double 2.2924371104e+305 +.double 4.65573913365e-242 +.double 2.68332705631e-276 +.double 3.23533276694e+127 +.double 2.65339187267e-60 +.double 5.85526378741e-207 +.double 1.34695708113e+152 +.double 1.60063495955e+192 +.double 2.18250069366e-92 +.double 2.61670787079e-107 +.double 1.77410078191e+52 +.double 4.1320169156e+114 +.double 2.32683861469e-206 +.double 6.06527057546e+93 +.double 1.55911879266e-250 +.double 1.72565533279e-172 +.double 6.850815924e+296 +.double 127.598239396 +.double 3.08017257174e-11 +.double 1.82601164688e-163 +.double 2.1605436766e+194 +.double 63964113.7245 +.double 2.41983630227e+139 +.double 1.07960044865e-218 +.double 2.23172901124e+148 +.double 2.48555028806e+292 +.double 5.91827235522e-231 +.double 9366298.52332 +.double 9.60065546749e+36 +.double 1.50903076766e+183 +.double 1.98947384048e+259 +.double 6.77593484235e-151 +.double 2.4236736512e+214 +.double 1.04509016793e-22 +.double 5.73282109251e-116 +.double 1.99891402071e-201 +.double 1.67737326951e-233 +.double 4.92817017379e+39 +.double 4.69329338116e-171 +.double 2.44688151903e+145 +.double 8.29107487797e-127 +.double 9.67401518773e+127 +.double 6.09586235432e-71 +.double 1.4619048684e-248 +.double 9.33845831253e+293 +.double 3.31286914072e+167 +.double 2.22221398263e+120 +.double 3.66824465e-08 +.double 4.3493732106e-201 +.double 2.27314309431e-139 +.double 2.34736264272e+65 +.double 8.14503569347e+252 +.double 2.08908136943e-143 +.double 2.58470326203e+63 +.double 5.48410234676e+283 +.double 2.02895725408e+228 +.double 2.12895523949e+256 +.double 9.34587887895e-228 +.double 1.07102524117e-103 +.double 3.55089814369e-148 +.double 7.40798377064e+59 +.double 1.44588174036e+88 +.double 6.70553793205e+59 +.double 3.61049154107e+191 +.double 1.63538789523e-80 +.double 8.15986231424e-06 +.double 3.43786332116e-282 +.double 1.98282403928e-191 +.double 2.98244495215e+12 +.double 4.40114669805e+167 +.double 6.17903558074e-231 +.double 1.36189831056e-32 +.double 2.63209627514e+181 +.double 1.62076429246e-252 +.double 6.32810976608e+72 +.double 1.71923544854e-280 +.double 4.4373276838e-35 +.double 5.73783175785e+149 +.double 9.75979374095e+70 +.double 1.20098070992e-88 +.double 7.1437133306e-214 +.double 5.16854554215e+166 +.double 5.94951299148e+120 +.double 1.03573883366e+180 +.double 8.19734562327e-241 +.double 1.87262332645e-216 +.double 1.56992102008e-213 +.double 2.43033918783e-63 +.double 5.10331554201e+128 +.double 2.10723719227e-289 +.double 1.67770734185e+212 +.double 7.28898763885e-18 +.double 0.00797613662774 +.double 2.12739113293e+128 +.double 8.68027313655e+108 +.double 4.45234160703e+229 +.double 3.34540581284e+198 +.double 2.91678621466e-223 +.double 4.6667413073e-160 +.double 1.9277462937e+167 +.double 2.27546437083e-249 +.double 2.2869914961e-280 +.double 7.07296329874e-105 +.double 2.11837971706e+165 +.double 2.6176980466e+307 +.double 1.4728397318e+198 +.double 1.05460733061e-237 +.double 3.00054588849e-217 +.double 2.61752132163e+201 +.double 6.45339609617e+46 +.double 2.42300818865e-108 +.double 7.6940633113e-81 +.double 5.01119917023e-124 +.double 6.22116681341e+41 +.double 7.1731808649e+258 +.double 3.31288906521e+22 +.double 4.73953410552e-154 +.double 2.85002624244e+245 +.double 3.01084740848e-254 +.double 1.76504550956e+137 +.double 2.51814464609e-206 +.double 4.15478774151e+216 +.double 6.86707315402e+139 +.double 1.48114061619e-294 +.double 8.40812255194e-13 +.double 2.53150392345e-286 +.double 8.15592310998e+279 +.double 1.81958716811e+126 +.double 1.35869569079e+238 +.double 1031574821.21 +.double 8.64238540784e-11 +.double 5.14176658325e+248 +.double 1.66667161131e+229 +.double 1.08645243361e+241 +.double 1.76990174335e+208 +.double 8.60194189158e-279 +.double 6.21919492999e-54 +.double 8.90166859005e-148 +.double 8.27637127133e-90 +.double 1.14854080124e+296 +.double 5.41111087018e+207 +.double 5.75745711984e+160 +.double 3.57732833045e-171 +.double 2.32465590172e+289 +.double 8.26116227335e+207 +.double 3.76843391531e-133 +.double 8.44712352106e+288 +.double 5.89655052801e+171 +.double 7.26306214899e-86 +.double 1.16161909773e-167 +.double 3.97443089677e+31 +.double 3.45262754178e+148 +.double 3.77048141307e-279 +.double 6.79930490433e-246 +.double 2.03544604741e-239 +.double 7.42757086593e-103 +.double 3.5672112586e+295 +.double 5.53560691041e-262 +.double 2.61986783107e-78 +.double 6.60466036412e-140 +.double 7.36454674227e+14 +.double 7.08407134546e-274 +.double 2.33392292967e+155 +.double 2.97079426529e-209 +.double 883070.089243 +.double 3.20183082378e+108 +.double 3.23468035747e-117 +.double 4.44854019474e-32 +.double 3.74892593257e-51 +.double 2.4310591352e-161 +.double 1.13659551678e-225 +.double 8.69672619242e+57 +.double 4.47577541102e-234 +.double 1.08312141296e-86 +.double 5.16500189056e+204 +.double 2.08258557928e+47 +.double 7.94640981073e+205 +.double 3.26453468459e+81 +.double 1.59546751602e+208 +.double 3.77332874803e-239 +.double 1.49709984956e-50 +.double 2.03117548845e-131 +.double 9.25500950611e+25 +.double 1.18275980753e+84 +.double 1.45760885357e-67 +.double 2.79232187465e+284 +.double 2.30569018877e+20 +.double 2.56252958469e+149 +.double 9.13618341309e-21 +.double 4.09247977137e+173 +.double 2.30105443658e-28 +.double 2.550694789e+51 +.double 6.34399452967e+171 +.double 9.9937898122e+45 +.double 4.17353988939e+70 +.double 2.63532522014e+54 +.double 2.62025129989e+129 +.double 4.21986338889e+220 +.double 8.08634794288e+186 +.double 2.84657875521e-71 +.double 2.54874556325e+125 +.double 1.57342673343e-114 +.double 5.78193152457e+284 +.double 3.171476882e-198 +.double 3.03002139415e+106 +.double 3.88170756066e+134 +.double 5.52039103737e-114 +.double 3.13109313638e-269 +.double 1.29574400559e-194 +.double 3.66018222725e+113 +.double 3.18136301208e+168 +.double 1.14876879774e+107 +.double 3.81498389012e-24 +.double 4.91736463022e+274 +.double 7.59949279574e-222 +.double 3.93335182407e-112 +.double 3.61478903253e+167 +.double 4.06823083485e-110 +.double 2.96755552197e-252 +.double 3.87909391295e-268 +.double 6.502508414e+244 +.double 8.72547789867e+24 +.double 3.96904993345e-94 +.double 2.30430917539e+222 +.double 1.20025954564e-303 +.double 6.18822060205e+233 +.double 4.56332546768e+72 +.double 2.20868345485e+297 +.double 1.59874591661e-306 +.double 1.28880507812e+226 +.double 1.14421133745e+36 +.double 1.91672245887e+81 +.double 7.33459908549e+301 +.double 8.6466164739e-244 +.double 2.07369494747e-190 +.double 1.21937963467e+53 +.double 4.79980453079e-21 +.double 3.42154673736e+91 +.double 9.13746477164e+198 +.double 1.14674987407e+49 +.double 9.10974983125e+244 +.double 4.43350958945e+159 +.double 1.19402346314e-97 +.double 6.23124387348e-122 +.double 1.60938663219e-238 +.double 1.24467312574e-115 +.double 0.00358484694734 +.double 4.57123653657e+270 +.double 1.55925960824e-263 +.double 2.97507454557e-104 +.double 1.91540613339e+177 +.double 3.62904162058e-66 +.double 9.13587492877e+39 +.double 4.530380805e-64 +.double 5.23402354375e+261 +.double 8.84482440307e-212 +.double 3.10706741649e+98 +.double 4.20580255786e+216 +.double 1.36112733398e+107 +.double 1.34010678147e+251 +.double 92302323.3194 +.double 4.2015941931e-191 +.double 1.92412442302e+31 +.double 3.19832541239e-307 +.double 2.12531592105e+95 +.double 5.46355703743e-204 +.double 1.93518594915e-284 +.double 7.11762055756e-119 +.double 6.7252752675e-192 +.double 3.42931361711e+183 +.double 7.51828687045e-241 +.double 6.28431571528e-50 +.double 2.82519083527e-165 +.double 1.96647700849e+294 +.double 7.10610889511e+119 +.double 2.53904151672e-12 +.double 2.32444929974e+182 +.double 1.16204967233e-302 +.double 1.36745963603e-195 +.double 475228.03358 +.double 9.17269235193e+19 +.double 5.6950158051e-219 +.double 1.26613477488e-211 +.double 7.74292048407e-212 +.double 1.07342548997e+110 +.double 4.95903887665e-56 +.double 1.63906269812e+140 +.double 1.08436208327e+235 +.double 3.77347518953e-56 +.double 2.16355507055e-121 +.double 2.44366121721e+39 +.double 8.39817251522e+194 +.double 6.22503626447e-47 +.double 2.01020890874e-160 +.double 7.95705918567e-294 +.double 1.60090418336e+29 +.double 1.11046026521e-240 +.double 4.56101715406e-11 +.double 8.20989162323e-183 +.double 1.00821438189e+257 +.double 1.15467081451e-71 +.double 6.61070206838e+159 +.double 4.0343057229e-146 +.double 1.10811566569e+27 +.double 8.1095616936e-162 +.double 4.90629259274e+99 +.double 3.14396340183e+246 +.double 3.81024870284e-148 +.double 4.75947628275e+243 +.double 5.13866905459e-214 +.double 3.85308992152e+91 +.double 4.71098940238e-178 +.double 0.00171359638561 +.double 2.79192036579e-267 +.double 6207555852.4 +.double 2.10636297721e-299 +.double 5.732617226e-82 +.double 2.67601839977e-35 +.double 4.94959254379e+154 +.double 2.58209804425e-38 +.double 1.11711888066e-110 +.double 2.06755332791e+105 +.double 1.54995026407e+84 +.double 4.66683377475e+97 +.double 1.63696446071e+195 +.double 4.15186789807e-114 +.double 2.3653215397e+304 +.double 1.60566104647e+38 +.double 4.49174885713e+246 +.double 3.99303246918e-132 +.double 1.18905503979e+179 +.double 9.46132106324e-147 +.double 3.49410938075e+153 +.double 4.61431029268e+168 +.double 2.59440503516e-166 +.double 1.21422120988e-169 +.double 2.74657048257e+231 +.double 9.72535970041e-240 +.double 1.07496662723e+73 +.double 2.02137086434e-75 +.double 4.50525852349e+33 +.double 8.45657788926e+28 +.double 1.53701679999e-188 +.double 3.00656717557e-177 +.double 1.62986584517e-161 +.double 1.08413807171e+209 +.double 3.98898142494e+104 +.double 1.29694694515e-207 +.double 2.62696254918e-270 +.double 2.52783869698e-157 +.double 9.92003132112e-310 +.double 7.4987810894e-240 +.double 2.36315015393e-105 +.double 5.81107124784e-139 +.double 3.88574859589e-193 +.double 1.58828865535e+291 +.double 2.26971881601e+249 +.double 7.17546538087e+245 +.double 5.10568696851e-39 +.double 7.244469264e-257 +.double 1.61367268411e+128 +.double 2.48119648136e+75 +.double 1.21091508184e-168 +.double 6.89043556949e-71 +.double 7.72476591553e+302 +.double 1.02900319443e+29 +.double 1.59526369739e+154 +.double 9.09139391819e-176 +.double 1.60927861405e-185 +.double 1.94445044179e+217 +.double 7.33500595221e-68 +.double 1.3489365343e-65 +.double 1.86484002005e+28 +.double 2.478538083e-259 +.double 3.1609649012e-207 +.double 3.35531946884e+266 +.double 5.85186472798e-236 +.double 8.21669195563e-301 +.double 1.17389158503e+220 +.double 7.21685999136e-142 +.double 3.64575252027e-139 +.double 1.59203042603e+222 +.double 8.19969537389e-91 +.double 3.2643150328e-165 +.double 1.80268748474e-277 +.double 3.95265680904e+227 +.double 1.05654596284e-295 +.double 1.53207801806e+283 +.double 1.22176849128e-189 +.double 2.57338791407e-250 +.double 9.14022248172e+225 +.double 1.76433332716e-301 +.double 8.31240534637e+144 +.double 9.9275836455e+145 +.double 2.82329758619e-258 +.double 1.3718809131e+107 +.double 7.42115044414e+79 +.double 1.37665256646e-176 +.double 3.80925769993e+149 +.double 2.17759049523e-59 +.double 5.18582521339e-58 +.double 2.21126274375e+89 +.double 3.35203241816e+183 +.double 6.64421202691e-211 +.double 2.29362915363e-100 +.double 2.31323397319e-156 +.double 3.46403504145e+212 +.double 3.39178279449e-161 +.double 1.05759233436e-207 +.double 2.53857472237e-163 +.double 9.07766348994e-18 +.double 35736307.5721 +.double 2.27902885229e-171 +.double 9.82141015611e+300 +.double 1.52499586171e-276 +.double 9.00925985227e-186 +.double 3.29101222353e+292 +.double 2.89522690622e-187 +.double 5.83769910232e-21 +.double 7.74516756327e-154 +.double 1.18414252645e+267 +.double 7.07317448114e-238 +.double 4.21266691332e-188 +.double 1.74557387901e-260 +.double 5108.60888937 +.double 0.000104440819411 +.double 2.34570049406e-251 +.double 1.51992444846e+212 +.double 7.08274216657e-243 +.double 4.05158996536e+178 +.double 7.98822007968e+185 +.double 2.62894075849e-170 +.double 1.01553436203e-19 +.double 2.66839856912e+61 +.double 2.75833235204e+29 +.double 4.44242748169e+222 +.double 8.25748941546e+106 +.double 1.28493885565e+220 +.double 1.20277462746e-276 +.double 4.22669817212e+19 +.double 1.06069409902e+34 +.double 1.08782737785e+161 +.double 9.70881201761e-111 +.double 23038.3076367 +.double 1.12956808258e+300 +.double 9.22389553517e-11 +.double 7.35553388736e-37 +.double 1.95517601873e-197 +.double 9.97326760299e+107 +.double 2.60122058691e+225 +.double 2.06266440251e-291 +.double 4.63558439967e-70 +.double 8.29873312026e+248 +.double 3.40681219275e+37 +.double 4.28109601757e-271 +.double 2.73955031389e-22 +.double 2.28553743227e+49 +.double 1.07452553665e+40 +.double 3.01708385811e-14 +.double 7.0940049372e+69 +.double 3.92451870439e-303 +.double 1.38709229813e-41 +.double 7.60436176246e+225 +.double 4.29239881927e-71 +.double 4.34833402603e-05 +.double 1.44767165536e+21 +.double 7.77805654115e-175 +.double 1.03905576811e+103 +.double 1.28325602639e+287 +.double 1.24876932879e-127 +.double 1.82538059558e+172 +.double 1.7864989169e+97 +.double 2.29241469622e-104 +.double 2.21633060131e+151 +.double 9.59583861364e+171 +.double 4.27973831592e-165 +.double 1.48200184969e+273 +.double 7.15996605474e+89 +.double 6.79806895901e+215 +.double 3.307716637e+89 +.double 1.24826151369e+138 +.double 3.74418726767e-91 +.double 6.57725013208e-164 +.double 3.85442862322e-156 +.double 2.08904974897e-275 +.double 1.33178251642e-34 +.double 1.74543691319e+29 +.double 3.49983462863e-31 +.double 1.65953161262e+178 +.double 1.44202385561e+140 +.double 4.90536751305e-132 +.double 1.85090377546e-284 +.double 4.15206782952e+294 +.double 6.15824939518e-248 +.double 3.71597923582e-24 +.double 4.31932814001e-70 +.double 5.37876330192e-24 +.double 3.92079598889e-13 +.double 4.15394972429e-176 +.double 2.41776014302e-86 +.double 1.06984193841e-249 +.double 8.63864520788e-215 +.double 6.01427337779e+193 +.double 9.2532635439e+293 +.double 4748.87889398 +.double 1.00980348452e-86 +.double 7.35452894818e+269 +.double 2.4580610925e+68 +.double 0.00626599074584 +.double 1.41179705513e-12 +.double 1.39032911468e-202 +.double 3.4048448812e+73 +.double 1.68594694048e+41 +.double 3.5510158346e+99 +.double 2.2836363928e+25 +.double 5.54242196681e-129 +.double 5.14807338983e+177 +.double 4.2185480577e-108 +.double 8.54509328624e+47 +.double 1.49666585326e+131 +.double 3.24810493387e+34 +.double 3.53786522657e-42 +.double 1.28976294666e+17 +.double 3.02279978563e-83 +.double 1.46481286559e+220 +.double 1.67706730306e-249 +.double 4.94680464809e+266 +.double 9.9244240297e-252 +.double 1.08272897431e-214 +.double 1.78990183046e+280 +.double 1.04749026883e-290 +.double 1.54285512184e-240 +.double 7.65823627996e-88 +.double 1.01017063657e-162 +.double 1.00766380048e+35 +.double 0.00613717186221 +.double 2.02771897869e-111 +.double 1.46510135993e-23 +.double 5.32371575732e-196 +.double 8.14004706507e-189 +.double 1.35365998598e+296 +.double 2.25245203889e-98 +.double 7.17981519506e+109 +.double 1.64929256312e+14 +.double 5.78175617488e+105 +.double 3.53877868128e+213 +.double 2.96992536991e-204 +.double 3.55415842506e+121 +.double 6.00284248719e+54 +.double 6.11901741444e+35 +.double 1.18152285307e-22 +.double 8.82464546849e-148 +.double 3.66170582988e+62 +.double 3.31533501824e-167 +.double 5.3563527287e+266 +.double 1.39713645003e+148 +.double 3.68792103668e+238 +.double 3.68160390649e+227 +.double 4.06952147901e-102 +.double 5.51658923676e-193 +.double 5.35713938275e-258 +.double 1.05465864769e-46 +.double 4.13765697122e+158 +.double 7.17314633659e+233 +.double 5.21576852209e-10 +.double 2.80167590773e+288 +.double 6.74121709209e+70 +.double 4.20312964592e+12 +.double 2.04147099063e-85 +.double 1.17363769875e+195 +.double 2.93384850135e+306 +.double 6.91096558179e+190 +.double 2.83170730729e-15 +.double 2.70512795589e+104 +.double 2.22691714555e+37 +.double 3.29736101305e+137 +.double 2.99182872971e+57 +.double 1.24338827718e+152 +.double 5.64686248646e+130 +.double 8.93399695789e+71 +.double 8.91305574363e-36 +.double 6.745454939e+44 +.double 1.18952860076e-45 +.double 4.08412434512e+302 +.double 3.85606731432e+48 +.double 8.99664711073e+120 +.double 2.17046453589e-172 +.double 2.85596470225e-137 +.double 4.8246810054e-122 +.double 1.66156487764e+66 +.double 5.93331612862e+74 +.double 1.03070241399e-44 +.double 1.03869531901e-66 +.double 2.08756942096e-265 +.double 1.91276587131e+93 +.double 1.30493605519e-278 +.double 3.6274994033e-284 +.double 1.24629773611e-164 +.double 3.68116167214e-171 +.double 6.41926692357e+292 +.double 1.14998248288e+42 +.double 5.21528018748e-308 +.double 1.35633070072e-99 +.double 2.42101171898e-08 +.double 1514118666.27 +.double 3.21493304227e+91 +.double 5.86338908403e+133 +.double 9.11260081194e+84 +.double 1.17331121806e-23 +.double 4.37845668326e-218 +.double 4.67423766599e+178 +.double 1.69620201182e+136 +.double 2.25227765975e+201 +.double 1.22121300522e+117 +.double 1.86454880962e+303 +.double 4.4212344444e+44 +.double 2.99971378539e-166 +.double 1.95638735389e+261 +.double 3.32769933486e-289 +.double 7.94283528246e-41 +.double 674289238.873 +.double 1.52188278541e-82 +.double 9.97943006489e-87 +.double 9.36717894282e+197 +.double 2.25167514138e+282 +.double 1.03140298075e+304 +.double 8.19759748003e-137 +.double 5.57991336023e-151 +.double 4.42538570172e+77 +.double 3.10823535461e-205 +.double 9.24067391376e+268 +.double 7.63517915772e+193 +.double 1.2649414433e+166 +.double 1.89977016288e-91 +.double 1.33606112405e+167 +.double 8.3390626419e-140 +.double 2.61419690748e-101 +.double 1.71893362711e-33 +.double 4.59116212098e-131 +.double 6.92684920994e-149 +.double 5.12818805286e-34 +.double 2.70619559658e+51 +.double 8.25229363979e-32 +.double 1.86947101651e-156 +.double 3.79523248067e-26 +.double 3.720927357e+98 +.double 1.80962488168e+303 +.double 3.67015605713e+244 +.double 3.84274874426e-175 +.double 5.8364593635e-76 +.double 3.22251742838e+105 +.double 1.24753043424e+235 +.double 5.81751899793e+127 +.double 7.13705068081e+180 +.double 1.26220100346e-25 +.double 5.44485698241e+109 +.double 8.03339298976e-27 +.double 1.307802117e-223 +.double 1.76813570332e+141 +.double 4.29689834197e-168 +.double 7.98263265289e+209 +.double 2.97406612599e-39 +.double 2.21120080157e-78 +.double 6.8054391776e+114 +.double 1.02112968162e+38 +.double 1.1751013156e+249 +.double 1.12854613624e-251 +.double 2.59994191901e+30 +.double 1.28538029473e-27 +.double 2.54660541595e+67 +.double 3.57812694156e-75 +.double 9.28252311117e-15 +.double 3.13497320064e-57 +.double 4.25079447275e+295 +.double 6.1870151095e+125 +.double 4.22721224437e+80 +.double 3.69490216433e-264 +.double 6.24052132144e-145 +.double 6.82386233997e+96 +.double 5.54627875622e-127 +.double 1.26926059727e+299 +.double 2.09996648088e-111 +.double 1.66897080916e+132 +.double 4.054577991e+298 +.double 625.028748076 +.double 3.96172878296e+124 +.double 9.83519898072e-138 +.double 6.40150488476e+34 +.double 6.62550487766e+242 +.double 3.63321166126e-118 +.double 1.07374595336e+303 +.double 1.84785884108e+110 +.double 1.89954722693e+53 +.double 8.69213477977e-114 +.double 1.79991545476e+276 +.double 1.86637852092e+174 +.double 9.09066653088e-32 +.double 1.70677056175e-213 +.double 1.27450401869e-127 +.double 3.70760032328e+278 +.double 8.30650780279e+164 +.double 4.10009373011e-210 +.double 9.65536937337e-89 +.double 1.21080954297e+84 +.double 2.62784957957e-43 +.double 8.0255696267e-07 +.double 4.33730348635e+162 +.double 5.00327346472e-34 +.double 1.30745769219e+153 +.double 8.00913560434e-41 +.double 1.21515107216e-246 +.double 1.09911071185e+51 +.double 22541.5422809 +.double 1.64815769819e-266 +.double 3.65788520113e-171 +.double 5.25221558418e-19 +.double 1.42481964982e+173 +.double 44884509.9263 +.double 1.9940049553e-45 +.double 3.39040116207e-208 +.double 1.69700306664e+303 +.double 2.91818460481e+62 +.double 8.93934469281e+248 +.double 2.41711741451e-57 +.double 1.63178834698e+193 +.double 1.19682568467e-274 +.double 6.95081775412e-274 +.double 1.22096448117e-51 +.double 2.74465886892e-117 +.double 4.60740812902e+227 +.double 1.14956161164e+160 +.double 1400574326.44 +.double 5.99565409599e+41 +.double 1.03071545997e+157 +.double 2.58962573173e-47 +.double 1.4343751514e-263 +.double 6.47013399939e+197 +.double 2.79040641621e+122 +.double 1.33051332404e-272 +.double 1.60737959239e+280 +.double 1.30240646148e-177 +.double 8.78647748838e-67 +.double 1.11064171132e+101 +.double 1.39543031565e-133 +.double 3.10384184122e-282 +.double 3.14794354248e+33 +.double 8.52737653798e-67 +.double 1.84373604978e-114 +.double 8.54085198459e-96 +.double 3.81122309576e+23 +.double 1.33689439225e+98 +.double 4.70926113408e+277 +.double 4.08423980689e-200 +.double 5.22919012714e-38 +.double 1.73536167427e+236 +.double 2.52648170224e-234 +.double 1.10994305935e+185 +.double 1.29015026164e+238 +.double 1.36438122474e-27 +.double 2.18906773202e-118 +.double 5.31363778149e-42 +.double 4.00628769539e+241 +.double 8.36240482272e+297 +.double 1.24320260031e-198 +.double 7.95224057819e+195 +.double 6.19131409014e-305 +.double 1.8489934324e-63 +.double 2.55854586092e+295 +.double 0.00219322363005 +.double 3.78277487419e-305 +.double 1.5317166899e-238 +.double 4.77393924001e-157 +.double 5.79544169652e-134 +.double 2.78602057928e-59 +.double 2.59996748187e+275 +.double 8.5369407564e-284 +.double 2.65861768666e-253 +.double 1.38056075447e-33 +.double 3.69882832955e-189 +.double 7.38199780172e-230 +.double 6.00751792848e-148 +.double 7.76498841192e+78 +.double 1.85971760549e+87 +.double 4.95230467617e+268 +.double 2.64128173472e+159 +.double 1.41294585253e-221 +.double 4.02136848543e-31 +.double 3.41248333298e-109 +.double 6482734.15189 +.double 4.13602566451e-150 +.double 6.83125872262e+192 +.double 4.48757545481e-232 +.double 2.66284904758e-279 +.double 3.17783818518e+151 +.double 5.47699974211e-194 +.double 9.80571642686e+138 +.double 1.31330503044e+124 +.double 5.42246925979e-40 +.double 2.85010838048e+104 +.double 2.18693917968e+245 +.double 2.24180795977e-216 +.double 8.89296384435e-11 +.double 2.580866715e+282 +.double 1.78704510517e-247 +.double 1.87440951041e-168 +.double 3.62702908793e+199 +.double 1.1030792125e-208 +.double 2.01107500945e-125 +.double 4.71076448534e+35 +.double 1.08888220173e-66 +.double 9.53968839529e-47 +.double 3.85812858014e-198 +.double 6.17039925506e-128 +.double 1.12354181385e+58 +.double 1388.68690163 +.double 1.54730984553e-239 +.double 1.35070607524e-269 +.double 2.27702390423e+219 +.double 2.42291851911e-245 +.double 1.59219804611e+124 +.double 2.76235457672e-243 +.double 6.11176021273e+75 +.double 5.36880224404e-106 +.double 5.39688120591e+66 +.double 2.21360318977e+29 +.double 2.45572679813e-23 +.double 6.38977278716e-190 +.double 7.24302286703e-221 +.double 1.60818087312e-226 +.double 1.66160369425e+289 +.double 7.59234361262e-74 +.double 1.40857921795e-282 +.double 5.64056522271e-60 +.double 1.15635514423e+302 +.double 3.30610110618e-105 +.double 2.39540452029e-204 +.double 4.03740690179e+101 +.double 2.13765125176e-93 +.double 4.00346905994e+157 +.double 3.84453659167e-85 +.double 2.87425985225e+142 +.double 7.85687457898e-281 +.double 9.1927275571e+189 +.double 1.04628328665e-59 +.double 5.92388303218e+95 +.double 8580248611.49 +.double 5.24197320365e-238 +.double 2.95317420062e+26 +.double 2.64917884722e-86 +.double 8.12658241584e+92 +.double 1.09245309585e+202 +.double 1.70811473856e-91 +.double 1.67077748703e+96 +.double 1.6224501406e+145 +.double 4.24454323017e+100 +.double 3.89754260619e+213 +.double 1.08230493503e-117 +.double 2.06516726051e-276 +.double 1.58427025769e+300 +.double 1.95769795843e+81 +.double 1.63780377557e+35 +.double 1.72520332201e-217 +.double 7.61162561728e+110 +.double 6.49480038143e-11 +.double 2.00931310158e+52 +.double 480.247339083 +.double 3.42081450884e+122 +.double 1.28212371626e+214 +.double 2.99058862459e+189 +.double 2.4029461865e+260 +.double 1.89580210432e-41 +.double 1.89033250571e+205 +.double 4.6490105879e-93 +.double 2.14030143542e+274 +.double 1.56412726431e-143 +.double 3.74112751763e+83 +.double 5.85394754589e-207 +.double 4.95708970202e+71 +.double 1.87204505778e-173 +.double 5.21775300459e+173 +.double 1.12464504218e-50 +.double 3.53715830332e+121 +.double 4.43665972101e-23 +.double 8.1420679469e-252 +.double 1.89191599145e-151 +.double 1.23359359441e+99 +.double 5.49005647272e-10 +.double 5.20451686764e-233 +.double 1.95165010613e+273 +.double 1.53078393237e-281 +.double 5.67573121891e+253 +.double 4.0738851067e+58 +.double 1.18787753786e-237 +.double 8.97630646961e-117 +.double 7.31786146506e+196 +.double 3.80323877261e+221 +.double 2.39803322288e-247 +.double 5.38790768974e+32 +.double 2.36416860451e-255 +.double 9.10529193804e-308 +.double 8.37463501107e-296 +.double 1.77134654275e-49 +.double 2.0665982911e-129 +.double 5.62344913833e+82 +.double 1.03429541572e+110 +.double 2.31814406878e+265 +.double 1.67000208312e+72 +.double 3.55982796048e+249 +.double 1.53330507666e+42 +.double 2.62687282137e-197 +.double 2.49062691828e+179 +.double 6.25669132571e+158 +.double 3.35601638359e+36 +.double 1.50386418756e+63 +.double 5.12170291382e-294 +.double 1.49700433875e+216 +.double 6.55161508618e+85 +.double 9.98296045776e+157 +.double 9.48366472533e-153 +.double 7.26385128503e+211 +.double 7.98529852509e-57 +.double 3.73016135908e-278 +.double 3.01468499506e+244 +.double 2.23003542277e-274 +.double 2.25282802562e-280 +.double 6.88448948902e+195 +.double 9.28763210474e-282 +.double 2.57125857362e-51 +.double 9.74036457142e-52 +.double 7.42921865172e-258 +.double 8.93847701985e-13 +.double 5.40292232488e-138 +.double 4.73582978148e-299 +.double 3.43071296021e-175 +.double 1.14250282372e-195 +.double 1.14543320616e+128 +.double 1.16740866783e-168 +.double 1.06719887093e+83 +.double 6.87467085769e+164 +.double 3.44753624881e+252 +.double 1.65965284838e+113 +.double 7.58319733626e+156 +.double 9.65485710164e-166 +.double 7.29168872748e-304 +.double 1.36170761373e+44 +.double 7.41522621356e-90 +.double 6.02008161481e+216 +.double 5.73640509322e+254 +.double 1.08150369466e-256 +.double 6.8212847887e-305 +.double 7.33449881755e-203 +.double 3.45041758642e+109 +.double 1.83689575178e-241 +.double 2.48972929287e+110 +.double 4.49670254325e-144 +.double 1.99460604037e+158 +.double 6.60433563307e+69 +.double 1.92993803618e+98 +.double 6.49764922845e+136 +.double 5.78430175983e+51 +.double 1.61698871753e-184 +.double 2.74525052494e-25 +.double 8.91590116672e+281 +.double 7.78224626828e+242 +.double 1.51143095683e-194 +.double 2.64133213465e-176 +.double 3.91176924327e+205 +.double 2.21571519092e-223 +.double 6.77363199095e+27 +.double 7.09919672532e-208 +.double 3.45287011934e-24 +.double 2.29680008063e-51 +.double 6.94892261976e-248 +.double 1.28462299862e-64 +.double 7.72615530642e-17 +.double 4.81045606916e-14 +.double 1.03645845952e-271 +.double 5.07196772333e-161 +.double 2.33022559889e-250 +.double 1.43279942384e-37 +.double 5.47437088361e+204 +.double 8.15095692898e+183 +.double 1.11223839039e-156 +.double 2.91554214933e-112 +.double 4.922159795e+269 +.double 2.75809609187e-46 +.double 2.69484655517e+228 +.double 3.70001612285e+279 +.double 1.51545033695e+257 +.double 5.10432208562e-74 +.double 7.53804735835e-143 +.double 7.75832120543e-169 +.double 8.48070633139e+245 +.double 234802432.674 +.double 1.83726510349e-249 +.double 0.0001854561896 +.double 2.12969869385e+63 +.double 1.37183498069e+110 +.double 5.74187381649e+301 +.double 8.50581951749e-288 +.double 2.42804462476e+29 +.double 5.12495195692e+180 +.double 2.54655955476e+123 +.double 4.64802542009e-138 +.double 3.50752610527e-34 +.double 3.74454842223e+104 +.double 1.8410245839e+219 +.double 3.07073123196e-86 +.double 7.6373604111e+81 +.double 4.28697995879e+245 +.double 1.89794961204e+206 +.double 1.68597363308e+272 +.double 1.36936740973e+293 +.double 2.45501277608e+111 +.double 8.69010674515e+24 +.double 9.91524840843e-61 +.double 6.86556794175e-12 +.double 1.41461741849e+280 +.double 9.5897063667e+122 +.double 0.967392033688 +.double 8.15909284893e+139 +.double 7661178146.1 +.double 0.0297596417128 +.double 6.85430509345e-184 +.double 9.83826777311e-305 +.double 1.78763723938e+68 +.double 9.25866678615e-139 +.double 1.75700225329e-212 +.double 4.60762364442e+194 +.double 6.86915789646e-264 +.double 1.40340751265e-142 +.double 5.92816307809e-256 +.double 8.61761534041e+54 +.double 2.80644473538e-95 +.double 3.5820712116e+100 +.double 6.01887791408e-306 +.double 2.49745290297e-90 +.double 3.94396830871e-308 +.double 2.92521901536e+272 +.double 3.87825643396e-50 +.double 1.35282196259e-145 +.double 3.81535528053e+258 +.double 2.28856479942e+149 +.double 2.54991631331e-255 +.double 1.38739503609e-193 +.double 4.8215249102e-192 +.double 2.26422197323e-293 +.double 3.34369679386e-103 +.double 7.62656201002e+229 +.double 3.66983683677e-286 +.double 1.78169327358e-217 +.double 4.60612195234e-149 +.double 3.02836706721e+134 +.double 8.2298507275e-140 +.double 2.27791356655e-60 +.double 4.63574770972e-215 +.double 4.82378568058e+137 +.double 2.65705890663e+122 +.double 1.13597712208e+96 +.double 2.10957765126e-168 +.double 4.24205664549e-99 +.double 3.08115112694e-93 +.double 9.96752679734e+19 +.double 8.11978923827e-180 +.double 5.07221244125e+105 +.double 2.97413194578e-30 +.double 1.20447378442e+293 +.double 1.33618026863e-247 +.double 1.06556907913e-279 +.double 1.99171732622e-136 +.double 3.89915763521e+304 +.double 1.19654813231e-84 +.double 3.51849544639e-196 +.double 1.8780926204e-159 +.double 1.4288853234e+38 +.double 1.87471548528e+218 +.double 2.80388732989e+88 +.double 1.02372269699e+44 +.double 7.449960322e-261 +.double 6.70541852557e-199 +.double 9.07230587921e+132 +.double 4.68226874817e-185 +.double 7.74906918298e+117 +.double 4.90268899189e+173 +.double 7.92125065985e+236 +.double 8.44108370458e+30 +.double 1.02415666216e+305 +.double 3.69589852158e-52 +.double 3.76138133775e-202 +.double 1.15695056347e+194 +.double 6.56445118985e-216 +.double 3.19171059725e+119 +.double 8.90157532616e+266 +.double 2.05260150746e-280 +.double 6.31366696861e-139 +.double 9.95481874105e+305 +.double 5.70345421357e+41 +.double 1.21198536331e+174 +.double 3.23235026811e+154 +.double 1.22453453087e-107 +.double 6.7600977983e+105 +.double 5.43533330671e+287 +.double 2.38876547578e-92 +.double 1.62758433322e+170 +.double 3.98988249289e-65 +.double 7.56431577058e+34 +.double 1.57503939753e-171 +.double 1.36743876115e+56 +.double 4.62223342476e+233 +.double 8.78853557619e+278 +.double 7.59699726379e-171 +.double 3.67094111616e+114 +.double 4.87906504197e-179 +.double 5.30919894588e-230 +.double 7.31320647926e-230 +.double 4.55704127829e+250 +.double 1.28208647662e-181 +.double 1.57061904376e-228 +.double 6.16598904011e+300 +.double 2.73721030546e+292 +.double 2.68686753697e+104 +.double 3.64571868545e+235 +.double 2.536604893e-128 +.double 9.05562731397e-247 +.double 1.61255235398e-269 +.double 4.28135714761e+228 +.double 3.17843379575e-157 +.double 7.04561960756e+238 +.double 1.92915085344e-63 +.double 2.32042530707e-190 +.double 5.09909197052e+47 +.double 9.32172992514e+67 +.double 6.81388668351e+163 +.double 2.46463077464e+89 +.double 6.62267242098e+221 +.double 8.41955593073e-166 +.double 9.37682514309e-38 +.double 1.87819877047e-205 +.double 5.16502472795e-75 +.double 2.37853244497e+70 +.double 5.55912569518e+216 +.double 1.92867207202e-86 +.double 3.76180965397e-184 +.double 7.3233747468e+119 +.double 9.3164436078e-33 +.double 1.22484135224e-158 +.double 1.01639843591e+129 +.double 8.50365106977e+171 +.double 4.24148940829e+18 +.double 9.66574185203e-56 +.double 6.04939930943e-66 +.double 6.4251429095e+262 +.double 5.36650547654e+13 +.double 1.72811364339e-186 +.double 9.75436753175e-18 +.double 2.15685196513e+138 +.double 9.09988904355e+132 +.double 3.43532790836e-127 +.double 6.55407056864e-209 +.double 5.43873445917e+212 +.double 8.36218058808e-283 +.double 3.87774325643e-244 +.double 1.80664615148e+155 +.double 1.26876110253e-69 +.double 4.47930480468e-138 +.double 5.71165352816e+296 +.double 3.36694975039e-49 +.double 4.13335641272e+158 +.double 4.05810096873e-115 +.double 4.19607686267e-82 +.double 1.28061185067e+283 +.double 5.43995263473e+175 +.double 4.66608180478e-116 +.double 5.77162819468e-173 +.double 1.11119531495e+283 +.double 9.78539464249e-269 +.double 1.44566190827e+37 +.double 1.03783367389e+30 +.double 1.33086843448e+146 +.double 2.0525271461e-05 +.double 5.2404758194e-284 +.double 1.88025162003e+205 +.double 7.32105542374e+47 +.double 2.45430889092e-280 +.double 1.09514691129e+210 +.double 408.82416027 +.double 1.259979626e-36 +.double 9.60370371618e-281 +.double 1.31696131373e+36 +.double 3.84242071509e+260 +.double 7.39600317514e+296 +.double 5.07390043334e+286 +.double 7.93624475039e+172 +.double 2.70408857785e+210 +.double 1.80105897037e-37 +.double 1.95939267677e+35 +.double 1.25548260704e-209 +.double 5.31036633437e-195 +.double 8.62736255917e+278 +.double 1.60097490928e-183 +.double 4.15051754478e-104 +.double 3.09400529766e-192 +.double 3.20031128358e-276 +.double 1.23032360862e+30 +.double 2.75079888069e-216 +.double 7.50112639783e+22 +.double 4.34073907616e-46 +.double 1.44387880065e+294 +.double 1.23345366903e+113 +.double 2.76508677506e+95 +.double 1.05915828553e-20 +.double 1.03276354603e-97 +.double 2.08116185653e+247 +.double 5.03673933657e-192 +.double 3.39132674943e-188 +.double 3.94662728099e-25 +.double 8.42464851589e-51 +.double 7.22561917183e-158 +.double 5.11798940407e-285 +.double 1.51253323016e-195 +.double 1.94914506974e-69 +.double 2.66862491361e-153 +.double 1.30777792655e-167 +.double 1.62086857102e-104 +.double 4.4183698076e+246 +.double 8.47059040033e+18 +.double 3.09655865142e+275 +.double 2.81115624301e+69 +.double 3.64885102064e-121 +.double 2.78270561795e+211 +.double 1.72758500292e+192 +.double 3.60491968685e+229 +.double 0.0123602852853 +.double 3.34486526036e-119 +.double 1.58680573138e-178 +.double 3.79727915992e-18 +.double 1.82750999666e+232 +.double 3.02721141065e-249 +.double 1.00112075902e-157 +.double 4.71382117767e-251 +.double 9.16605423336e+94 +.double 1.82403634402e+149 +.double 1.50926932945e+57 +.double 2.95024846492e-134 +.double 1.58624974208e+307 +.double 1.0958503677e-258 +.double 7.25287989274e+292 +.double 9.10331644817e-11 +.double 1.18636290919e+53 +.double 7.17285410378e-260 +.double 2.51752270271e-132 +.double 9.36405686767e-298 +.double 9.06891124199e+164 +.double 5.35467013409e-275 +.double 7.07492204048e-125 +.double 1.62943814131e-21 +.double 8.87242728908e+195 +.double 7.007183795e-88 +.double 1.0012170659e-188 +.double 3.686800172e+137 +.double 2.57416688395e+230 +.double 2.88217432575e+68 +.double 2.30183824371e+157 +.double 1.28919442265e-149 +.double 5.55863568294e+38 +.double 3.09766358039e+59 +.double 5.22857159571e+97 +.double 1.8365691383e+194 +.double 6.14276962506e+50 +.double 1.53061752154e-227 +.double 9.83622442306e-166 +.double 2.40597538631e-262 +.double 1.08308788299e+49 +.double 7.31669232623e+19 +.double 3.58477452757e+200 +.double 5.53409033445e+91 +.double 1.00617748975e-171 +.double 3.83738656059e+14 +.double 1.08161485975e-129 +.double 8.42751496838e-251 +.double 9.82223205661e-238 +.double 1.43716947877e+192 +.double 4.18851195525e-92 +.double 4.99733319738e+297 +.double 2.47229395327e+14 +.double 2.12736381477e-125 +.double 5.45033459992e-21 +.double 2.94772806928e-19 +.double 4.09485457609e+125 +.double 1.22019087452e-233 +.double 1.58092836604e+276 +.double 8.31728269791e-63 +.double 5.8900897612e+219 +.double 9.64170910323e+232 +.double 7.22683705283e+19 +.double 2.49899833645e+276 +.double 1.03947503387e+176 +.double 6.15212538425e-264 +.double 1.16550626498e+223 +.double 5.74940762629e-178 +.double 5.46063730936e-153 +.double 1.45432878966e+265 +.double 4.06077943144e+65 +.double 1.48385629733e+191 +.double 3.5429401039e-122 +.double 5.83443849729e-43 +.double 1.40165293996e-275 +.double 5.01251331285e+20 +.double 2.77782263736e+127 +.double 60.2761876159 +.double 6.02772249129e-173 +.double 36778.4755653 +.double 3.06321942732e-249 +.double 5.58101603734e-236 +.double 3.72193330629e-96 +.double 1.70859412868e-133 +.double 1.49011889876e-67 +.double 7.97047841474e+176 +.double 2.86657530335e-202 +.double 1.1735466151e+93 +.double 1.4858315275e+302 +.double 4.97716218618e-34 +.double 2.11090558589e-256 +.double 5.2212324546e+234 +.double 8.35465082964e-35 +.double 5.27316883722e+86 +.double 1.75473423207e+52 +.double 5.24990156849e-98 +.double 1.22843174585e-58 +.double 1.67774604332e-286 +.double 2.40207164856e-240 +.double 1.39396938181e+163 +.double 2.99278564558e-288 +.double 1.62294953318e+17 +.double 2.05601706292e+267 +.double 3.94053885161e-87 +.double 8.1096881035e-14 +.double 4.66907836727e-291 +.double 3.98554313197e-240 +.double 1.98027631811e-300 +.double 5.36285906626e+270 +.double 5.09205042757e+199 +.double 3.7675837484e+35 +.double 4.05744474124e-171 +.double 1.96965331838e+174 +.double 4.53925196914e-50 +.double 2.64524692746e+168 +.double 8.91650893727e-204 +.double 2.97628817817e-07 +.double 2.45129189866e-30 +.double 1.301934756e+17 +.double 3.58367653593e-163 +.double 1.27890409452e-249 +.double 1.04296514045e-185 +.double 1.62090391391e-80 +.double 2.21418638687e-290 +.double 3.30893087259e-18 +.double 2.60034210421e+145 +.double 3.33072001556e+272 +.double 1.72783894233e-121 +.double 7.44853651486e+306 +.double 7.72916727835e+287 +.double 1.0448726894e+120 +.double 4.85568861558e-202 +.double 5.99710826739e+141 +.double 6.1246399958e-131 +.double 2.08679755671e-48 +.double 1.08074654764e-101 +.double 1.64189524736e-113 +.double 8.38937810659e-243 +.double 9.86962452579e+117 +.double 3.80669221292e+169 +.double 1.19399371854e-211 +.double 5.34001869323e-214 +.double 4.75840279561e-159 +.double 2.33644284717e-200 +.double 1.16379224184e-217 +.double 9.5792212298e-217 +.double 5.47509974518e-207 +.double 7.48321810936e+100 +.double 6.04807702671e-295 +.double 7.39596311115e-30 +.double 2.31494955662e+229 +.double 1.15323847484e+77 +.double 1.37558506711e+279 +.double 2.10734836139e-186 +.double 4.05469207869e+193 +.double 7.50683281474e-235 +.double 2.19159545546e+256 +.double 5.33675084255e-72 +.double 1.50801806909e+195 +.double 2.60669772112e+16 +.double 5.32451511474e-307 +.double 7.73304881561e-128 +.double 1.21509716485e+44 +.double 2.32334825868e-57 +.double 1.44815511886e-282 +.double 7.34131682337e+178 +.double 4.07429750909e-69 +.double 3.67908880228e+164 +.double 2.98770643428e+97 +.double 1.4329425053e+264 +.double 5.84955256089e+38 +.double 6.30393206708e-75 +.double 6.96750746559e-245 +.double 1.59764603769e+174 +.double 5.3876593793e-160 +.double 8.27200723785e+42 +.double 7.4062338879e+295 +.double 5.46460016791e+23 +.double 2.18621352378e-291 +.double 3.15053747268e+79 +.double 8.74715921019e-244 +.double 3.97545791649e+146 +.double 1.26183820558e+265 +.double 4.87747265347e-125 +.double 3.98734557608e+195 +.double 0.0494063043969 +.double 1.83007796788e-240 +.double 4.87533800406e+23 +.double 2.00718908874e-276 +.double 5.19964449177e-149 +.double 1.02508718064e+296 +.double 3.88006395234e+107 +.double 1.87707468193e-54 +.double 4.95773816382e-86 +.double 4.28585899901e-56 +.double 3.86053608889e-62 +.double 4.23138816603e+92 +.double 7.8900237055e-100 +.double 2.74342575447e+225 +.double 9.47093756244e+228 +.double 2.19423460188e-44 +.double 1.74482980137e-234 +.double 4.72388890536e-23 +.double 1.11112457834e+105 +.double 18080.8285683 +.double 3.94772332736e+94 +.double 2.51416582458e+113 +.double 2.91911598294e+113 +.double 2.64528933727e-285 +.double 4.94940169084e+144 +.double 1.47375885783e-151 +.double 5.06837845555e-68 +.double 9.23240648895e+126 +.double 9.56257262727e-213 +.double 7.3783920177e+130 +.double 3.38131302199e-128 +.double 5.30873773584e+140 +.double 4.81169496755e+90 +.double 9.87236399053e+306 +.double 5.03522579818e-29 +.double 1.56841961225e+50 +.double 1.10494219537e-190 +.double 9.06813533706e+260 +.double 7.22987057493e+71 +.double 1.21895355829e+305 +.double 3.51617274436e-78 +.double 3.18894874006e-271 +.double 8.55934840644e+158 +.double 1.04678785926e-76 +.double 5.05593861994e+137 +.double 6.79939748405e-58 +.double 6.26410665551e-88 +.double 6.22330742304e+279 +.double 8.39816672092e+55 +.double 3.00439430131e-16 +.double 2.38862651304e+276 +.double 2.55787457959e-23 +.double 2.00827602552e-92 +.double 2.62102777586e-275 +.double 4.10557004573e+269 +.double 1.42850683212e-28 +.double 0.00188312234992 +.double 2.68269431074e+26 +.double 2.10962240476e-51 +.double 1.09013797963e-126 +.double 130997177.404 +.double 3.43395625571e-245 +.double 2.23784595177e+294 +.double 3.92171159183e-248 +.double 8.8823550348e-69 +.double 25527372288.6 +.double 2.42669318716e-70 +.double 3.41923137769e-74 +.double 4.81491440229e-306 +.double 0.000100421946861 +.double 2.68090756858e+88 +.double 2.41517924639e-23 +.double 7.07344603378e-293 +.double 4.13073165386e-259 +.double 4.49281278571e-166 +.double 9356663492.07 +.double 3.45544141553e-81 +.double 1.30415790167e+141 +.double 6.77629224235e-127 +.double 1.90026420788e+83 +.double 1.96994465428e-185 +.double 1.19214637266e+190 +.double 9.4325999919e+193 +.double 9.34299410197e-119 +.double 1.14159515535e-267 +.double 9.9949238476e-32 +.double 5.07373276908e+192 +.double 1.9889123399e+215 +.double 1.35147853561e-216 +.double 7.37254507227e-249 +.double 1.20483023166e-213 +.double 1.12067431887e+72 +.double 7.56796989297e+33 +.double 4.97807865374e+36 +.double 1.39196402957e+193 +.double 2.74885962831e-239 +.double 2.93743347231e+300 +.double 1.78934105134e+173 +.double 1.51835092675e-58 +.double 6.71110099404e-57 +.double 1.98509711942e+230 +.double 1.26152816226e-57 +.double 2.23556978274e-299 +.double 4.00736785576e-88 +.double 5.26491489651e+220 +.double 6.62622152415e-12 +.double 7.16781583715e-171 +.double 4.41253099925e+291 +.double 7.58980748327e+142 +.double 3.64826997417e+40 +.double 3.45181740173e+80 +.double 3.64568474059e+13 +.double 5595.8080679 +.double 4.21298760696e-236 +.double 1.03221345536e+269 +.double 3.58627009519e+93 +.double 2.16881395828e+69 +.double 3.66806361144e-185 +.double 2.95702189867e-44 +.double 1.30479804751e-176 +.double 5.1348050033e+20 +.double 8.12496679453e-280 +.double 2.75189736381e-297 +.double 6.63525060131e+297 +.double 6.23886897938e-247 +.double 9.39921565519e-15 +.double 6.79663848155e+256 +.double 5.06362836839e+149 +.double 2.84121167032e-244 +.double 1.58059740895e-198 +.double 2.36847497427e+27 +.double 7.27127728044e-129 +.double 7.9880872965e+201 +.double 8.71982832837e+28 +.double 1.47946851269e-141 +.double 6.99305685471e+264 +.double 1.04197968535e-76 +.double 1.0804415239e+141 +.double 4.62226571237e-302 +.double 5.61813960478e-212 +.double 1.60442154808e-274 +.double 1.76094163124e+74 +.double 3.36765994618e-197 +.double 6.57828941502e-226 +.double 7.79054145966e+179 +.double 3.94743574562e-27 +.double 6.1032140388e+64 +.double 4.07688976103e+211 +.double 4.0504927363e+223 +.double 8.98178487071e-131 +.double 9.15154131958e-186 +.double 1.38997138344e+166 +.double 9.74858737448e-175 +.double 1.19160637173e+187 +.double 1.19249001579e-94 +.double 1.24234350327e-51 +.double 1.15542528948e-131 +.double 6.43821025521e-220 +.double 4.13362363202e-216 +.double 2.81557939235e+189 +.double 1.19154708742e+120 +.double 8.33057094139e+192 +.double 2.63836777904e-106 +.double 2.4906248541e-92 +.double 2.53519839854e-127 +.double 3.26309211659e+246 +.double 1.53568582864e+152 +.double 1.57240731946e+175 +.double 2.13250912315e-42 +.double 8.46725145119e+272 +.double 1.5636530984e-169 +.double 9.59982450974e-248 +.double 6.31403479774e+292 +.double 7.98888609298e-89 +.double 8.95099036913e-172 +.double 8.9932822097e-145 +.double 4.58673153367e+262 +.double 4.78325661359e-263 +.double 2.66858121069e-201 +.double 1.97366503885e-194 +.double 1.9510446129e+157 +.double 2.28611332375e+102 +.double 9.80169101046e+281 +.double 1.28151486089e-93 +.double 4.98191469298e-229 +.double 6.96199210703e+43 +.double 4.32773691924e-60 +.double 7.02043539629e-140 +.double 1.15169573954e+295 +.double 1.14607158838e+219 +.double 422473.901947 +.double 3.25337631782e+150 +.double 148.426999214 +.double 9.19263648759e-21 +.double 8.85625572388e-71 +.double 9.16497939566e-265 +.double 1.34002940195e-72 +.double 4.64376693877e-207 +.double 479742.092783 +.double 1.69708497299e-124 +.double 4.55001882396e-234 +.double 3.79235898996e+284 +.double 0.369271132689 +.double 9.64197513435e-256 +.double 6.00103043326e+305 +.double 6.16620122365e-122 +.double 5.5098215579e-43 +.double 1.04968122983e+159 +.double 3.25651065194e+149 +.double 4.40243474499e+55 +.double 5.4541141328e+148 +.double 9.68072276443e-148 +.double 1.89292789911e+75 +.double 2.27908861169e+77 +.double 1.00294983444e+97 +.double 8.5127218762e+112 +.double 2.24193078313e+292 +.double 1.66474249271e-19 +.double 2.52122883937e+273 +.double 4.03006791419e+241 +.double 7.43375276536e+110 +.double 2.01380782784e-286 +.double 7.61078507377e-253 +.double 1.27898765586e+219 +.double 4.20044538849e+74 +.double 1.07530228978e-103 +.double 2.16776910531e-47 +.double 7.40380294319e+166 +.double 7.2687908525e+99 +.double 1.67730073468e+113 +.double 3292.83839862 +.double 2.27452414721e+133 +.double 3.56441352761e+275 +.double 3.00053645107e-157 +.double 5.68490268819e+236 +.double 1.32770038199e+306 +.double 3.74721949205e+109 +.double 7.55132726282e-308 +.double 1.16842866328e-305 +.double 5.64749291105e+194 +.double 1.94591187995e+305 +.double 12931155.2846 +.double 4.90986848744e-43 +.double 1.54447658379e-175 +.double 1.66853011314e-247 +.double 5.3654531423e-239 +.double 2.93161676608e-117 +.double 8.84083877669e+152 +.double 1.82137744264e+245 +.double 1.24467622258e+295 +.double 1.16676120726e+144 +.double 2.98701959088e-283 +.double 2.22206008105e+69 +.double 3.00921461209e-53 +.double 9.46388725213e-12 +.double 3.00797800102e-19 +.double 7.02799957735e+76 +.double 2.05548602719e-243 +.double 4.41933717132e+20 +.double 1.90124188386e+191 +.double 1.99800636696e+283 +.double 2.96661469838e-201 +.double 5.59094691398e-99 +.double 2.95499228249e-77 +.double 3.46457739807e+305 +.double 6.95543652221e-175 +.double 4.97486338725e-177 +.double 1687.41346693 +.double 6.94727632417e+297 +.double 7.10619144735e-37 +.double 5.31288010712e-298 +.double 2.13473137013e-255 +.double 2.54558749267e+147 +.double 2.17790284289e+220 +.double 1.55824182244e+293 +.double 3.4305003115e-135 +.double 3.55800280762e-26 +.double 3.75490575116e-147 +.double 1.1149438773e-80 +.double 1503042.05769 +.double 1963.39486251 +.double 1.48895380958e-138 +.double 3.74996385603e+24 +.double 1.19360655881e-265 +.double 5.40463040129e-273 +.double 4.19380768275e-257 +.double 9.57729846248e-125 +.double 1.29440156759e-118 +.double 1.66973901837e-187 +.double 2.77619567505e+99 +.double 1.04433873179e+186 +.double 2.67315846078e-90 +.double 1.57993068555e+234 +.double 6.96005170911e-159 +.double 6.29163005162e-12 +.double 1.26817185741e-64 +.double 1.93720149887e+121 +.double 4.01040036582e-22 +.double 5.05335568579e-261 +.double 3.96891739347e-267 +.double 1.16833989064e-203 +.double 3.32680160472e+102 +.double 8.59324952888e-102 +.double 3.10573481883e-181 +.double 8.42469123975e-276 +.double 1.69523047901e-50 +.double 7.83798731788e-81 +.double 2.34113831585e-243 +.double 3.71598789254e+290 +.double 1.78213745251e+132 +.double 8.93828819619e+198 +.double 5.43018446446e+77 +.double 5.5429721997e-278 +.double 8027356.63087 +.double 0.0115798623551 +.double 2.7850022336e+63 +.double 7.68997093395e-222 +.double 5.29407358027e-87 +.double 1.68135184217e-276 +.double 3.03771587762e+215 +.double 2.895590083e+193 +.double 9.76853373038e+195 +.double 4.48573289204e+75 +.double 6.41226427023e-240 +.double 3.33118622912e-263 +.double 2.16320819761e+86 +.double 6.58681624323e+161 +.double 1.70814394323e-283 +.double 7.85777508839e-87 +.double 3.53834196022e-131 +.double 1.72107182669e-298 +.double 4.91849641805e-98 +.double 3.99521244706e-120 +.double 0.000112800198042 +.double 0.000303085074447 +.double 3.22864856305e+48 +.double 53582366425.1 +.double 9.13207822955e+210 +.double 6.70252608023e+85 +.double 5.94127341032e-54 +.double 2.62691146725e-152 +.double 1.8671091063e-148 +.double 1.93779296201e-13 +.double 1.62526801732e+53 +.double 1.54485444205e+217 +.double 4.05667168428e-88 +.double 2.58917532453e-185 +.double 2.3345316342e-298 +.double 5.65859674689e-281 +.double 3.22425722618e-198 +.double 9.5884252185e+182 +.double 4.19566423116e+33 +.double 1.96267505242e+67 +.double 8.52312193371e-203 +.double 1.58320423353e+100 +.double 6.1908869641e-154 +.double 5.92237086041e-264 +.double 1.05839390879e+289 +.double 3.36697043193e+224 +.double 4.36930771047e+161 +.double 2.69098156381e-67 +.double 9.60227983247e-268 +.double 2.04471830151e+105 +.double 1.97512038691e-245 +.double 9.95386800579e-138 +.double 2.00278558998e+158 +.double 1.01803953964e+30 +.double 6.08475136883e+218 +.double 1.9077537569e-94 +.double 3.99032984575e+282 +.double 1.21735654466e+89 +.double 1.5207315305e-259 +.double 1.31295891122e-40 +.double 1.59406083612e-82 +.double 8.32020545441e+114 +.double 1.03346479284e-293 +.double 1.37807188294e-08 +.double 3.67299539767e-288 +.double 6.26496994931e-189 +.double 7.09456626062e+296 +.double 1.16106747777e-253 +.double 4.18853791233e+120 +.double 6.81193222865e-48 +.double 1.36847206017e-303 +.double 1.06758950426e-282 +.double 1.04696234142e+242 +.double 6.39380843123e+113 +.double 3.89874931572e+270 +.double 1.04592605161e-218 +.double 5.47008108133e-42 +.double 3.7113378566e+59 +.double 5.13792721359e+142 +.double 1.02193456466e-205 +.double 2.30930961038e+107 +.double 1.35559610596e-204 +.double 6.97561293971e-62 +.double 4.56685793592e+211 +.double 2.65030140524e+173 +.double 1.06382507298e+294 +.double 4.86793308288e-140 +.double 1.46353358664e-229 +.double 7.35873750294e+272 +.double 3.72374882765e-26 +.double 1.38354547238e-181 +.double 8.38486838284e-144 +.double 1.05314224379e-154 +.double 9.38703788154e-259 +.double 7.81280240699e+138 +.double 1.99738135568e+68 +.double 1.42329867236e+57 +.double 5.95789848072e-242 +.double 2.56566111239e-237 +.double 1.57160947878e+140 +.double 4.07307097769e-283 +.double 21642527.4141 +.double 1.01751229145e-14 +.double 3.39512118568e+149 +.double 5.52924904109e-184 +.double 1.95389094883e-287 +.double 3.09824449099e-188 +.double 7.50668392625e+35 +.double 2.52865892402e+38 +.double 6.90957227711e+61 +.double 6.38462586577e+68 +.double 9.60347898511e+108 +.double 3.59799945045e-144 +.double 6.92910606559e+271 +.double 2.0043049833e-138 +.double 5.3210940732e+165 +.double 6.24875137643e-254 +.double 2.24099065598e+193 +.double 5.70090648423e-214 +.double 3.82804364453e+264 +.double 1.21003419766e+38 +.double 5.52338342359e-05 +.double 4.06827619449e-261 +.double 1.45277329105e-06 +.double 1.15276460981e+16 +.double 2.42700448955e+257 +.double 8.42114456081e+101 +.double 1.83656600134e-186 +.double 5.92904967016e-48 +.double 9.09454606242e-152 +.double 2.46798977264e+230 +.double 1.42475969615e-280 +.double 1.80365356222e+32 +.double 2.58535073824e-238 +.double 9.86698794692e+296 +.double 1.99773579903e+95 +.double 8.53433009616e-176 +.double 1.32518393196e-197 +.double 2.23898301407e-45 +.double 5.65718176509e-290 +.double 7.98551445574e+286 +.double 2.68812443617e-100 +.double 2.10912478751e+153 +.double 2.84590564958e+296 +.double 2.41931380555e+23 +.double 1.46974720155e+106 +.double 2.33282510885e+214 +.double 1.96695323307e-156 +.double 6.51004040533e+252 +.double 4.61837130779e-149 +.double 5.66449136463e-168 +.double 1.40349757884e+190 +.double 5.78565045106e-299 +.double 3.70673515916e-129 +.double 2.45688779217e+173 +.double 1.80261272477e+25 +.double 9.30075880996e+259 +.double 9.05149041332e+92 +.double 2.10578663274e-190 +.double 2.38071317786e+17 +.double 9.3650534133e+129 +.double 6.07052689013e+41 +.double 4.24256831382e+298 +.double 2.31246263955e+247 +.double 8.7167959914e+291 +.double 8.82772394551e-157 +.double 2.2202492229e-203 +.double 6.41755153487e-290 +.double 3.66277849147e+117 +.double 1.38202668179e-280 +.double 9.67615462297e+190 +.double 1.00545032353e-264 +.double 1.31828966304e+215 +.double 5.89201666939e+16 +.double 6.5551666035e+28 +.double 2.96745358208e-98 +.double 1.9300468964e+121 +.double 2.78240444484e+304 +.double 1.74516294062e-150 +.double 1.78140782826e+109 +.double 6008386.40427 +.double 1.2066869521e-98 +.double 7.36268165806e-203 +.double 1.16673566722e+73 +.double 8.58908990561e-190 +.double 3.55126913919e+227 +.double 1.52667239096e+243 +.double 1.07655716314e+165 +.double 6.88851744376e-140 +.double 1.91508826529e+30 +.double 3.5729555342e-276 +.double 2.85683046422e-260 +.double 2.54389354859e+54 +.double 3.57037126714e-258 +.double 2.04779191187e+75 +.double 3.51985304031e-48 +.double 1.08350532565e-215 +.double 1.21875121579e-229 +.double 1.4643779826e+70 +.double 129705.275988 +.double 4.81184138203e-24 +.double 3.90563456563e+43 +.double 6.89948356466e-274 +.double 1.95650220364e+178 +.double 6.57207178896e-214 +.double 1.36333975438e+115 +.double 0.000447647764742 +.double 5.02044103177e-200 +.double 1.19831027566e+191 +.double 1.52962367483e-239 +.double 1.32583451691e-80 +.double 6.94426488635e-30 +.double 2.50532720291e-104 +.double 3.25200653798e+197 +.double 1.41087441054e-176 +.double 2.42007438198e-248 +.double 1.15573143336e+204 +.double 7.83869491025e-161 +.double 8.0175520155e+167 +.double 6.96303328718e-243 +.double 3.80166767992e-250 +.double 2.78645076624e-160 +.double 2.33818168109e-81 +.double 2.02116206736e+226 +.double 7.93887620039e+67 +.double 3.3622233789e+81 +.double 8.64976838854e+196 +.double 1.60916589005e+270 +.double 4.78334290513e+170 +.double 1.0207100266e-11 +.double 1.86196380635e-122 +.double 7.85808423398e+302 +.double 1.31640066281e-127 +.double 2.62993568429e-158 +.double 2.06101185892e-254 +.double 1.04704150627e-138 +.double 1.04199682046e+189 +.double 6.91311359168e+246 +.double 4.15450757708e+188 +.double 4.4383939758e-233 +.double 4.61578372179e-277 +.double 2.18691566895e+256 +.double 2.03036001931e+287 +.double 2.34730029105e-14 +.double 2.63379579956e+20 +.double 8.0738632492e-184 +.double 5.51851426075e-49 +.double 2.43119559186e+278 +.double 2.64402426044e-100 +.double 4.02129456735e+37 +.double 8.92484788953e+55 +.double 3.62018959529e-51 +.double 4.98320098985e-125 +.double 1.00303484012e+129 +.double 5.92124941539e-219 +.double 5.36923068533e+75 +.double 984648037473.0 +.double 2.34806983613e+47 +.double 2.89778684707e+155 +.double 1.7638862464e+305 +.double 1.41000282884e+152 +.double 7.21155210117e+221 +.double 6.13114889602e-22 +.double 5.41081515228e-184 +.double 4.28190492911e+233 +.double 1.10586883321e-270 +.double 7.21052579312e+81 +.double 6.85897231023e-271 +.double 148.931649565 +.double 1.74832243525e+133 +.double 1.89935650747e+180 +.double 1.20265640401e-149 +.double 4.15092650521e-308 +.double 3.15040850554e-242 +.double 2.71569835821e-194 +.double 2.65615012366e+31 +.double 1.53981393384e+246 +.double 1.1162774277e-279 +.double 2.00213977605e+69 +.double 6.39056008823e+155 +.double 9.26831829471e-255 +.double 4.24736646282e-127 +.double 5.00578055763e+70 +.double 3.3435975747e-15 +.double 3.2347199954e+246 +.double 7.17030945256e-144 +.double 4.03846334448e-49 +.double 4.9638815134e+67 +.double 1.40443324797e+85 +.double 1.76256680248e+238 +.double 4.46572851704e-41 +.double 2.57032062413e-243 +.double 2.98023191546e+216 +.double 1.22763961528e-131 +.double 3.86318459645e+137 +.double 1.7426302095e+247 +.double 6.56362123365e-07 +.double 1.08295741083e-182 +.double 6.85838790689e-136 +.double 1.7437857339e-100 +.double 3.57973646517e-289 +.double 1.54882717079e+70 +.double 1.49672396079e+17 +.double 3.49027421647e-102 +.double 2.20366869437e-263 +.double 1.14732754953e+33 +.double 4.82909487708e+162 +.double 1.69365992606e+33 +.double 1.88394338689e+288 +.double 5.85803815674e-151 +.double 2.62474653138e-76 +.double 6.11872846975e+88 +.double 5.772103201e-291 +.double 9.22160477576e-302 +.double 4.11388303944e-178 +.double 6.96052889015e+249 +.double 1.06985994615e+212 +.double 5.37684706915e+14 +.double 4.83812495893e-69 +.double 4.00077260329e+198 +.double 6.17427847353e-304 +.double 2.12545031713e+273 +.double 1.40922237568e+80 +.double 2.66809905481e-130 +.double 279850.701075 +.double 5.37249321506e-205 +.double 1.6048176928e+37 +.double 7.73169261084e+271 +.double 7.31227885274e-137 +.double 3.64613321354e+116 +.double 3.1607971665e+209 +.double 1.96921521106e-277 +.double 3.65074846804e+177 +.double 3.86215283697e-146 +.double 4.15058052556e+154 +.double 1.7706274152e+292 +.double 2.18753394486e-290 +.double 9.25244692939e+238 +.double 1.10156634649e-210 +.double 4.58164499932e-112 +.double 2.38359720672e+145 +.double 2.88013858129e+277 +.double 2.72752580105e-146 +.double 5.79633798426e+137 +.double 1.72668964129e-169 +.double 1.97001641643e+233 +.double 1.96650876198e+94 +.double 1.31115867405e+228 +.double 6.02486717887e+252 +.double 4.98444076266e-27 +.double 2.55209920508e-50 +.double 2.24176759088e-139 +.double 9.08720852049e-112 +.double 1.45914226443e+168 +.double 2.46282926864e+23 +.double 1.48169648855e+215 +.double 1.08405581555e-252 +.double 5.22664081312e+213 +.double 5.5565839891e-178 +.double 6.58341868052e-34 +.double 3.82124619453e-43 +.double 2.32079365681e+122 +.double 2.4939898437e-52 +.double 2.91155680211e+272 +.double 2.17703032222e+50 +.double 2.5467902048e-51 +.double 5.61519696645e-214 +.double 5.18062775223e+72 +.double 3.93416088167e-51 +.double 3.84142407435e-123 +.double 7.23639548575e-167 +.double 1.45066950231e-25 +.double 5.71532386061e-133 +.double 3.34240291011e-19 +.double 2.43948039314e-172 +.double 2.73979977556e+301 +.double 4.21959481478e-132 +.double 7.87243060418e+300 +.double 4.60477788781e-82 +.double 1.75621738796e-146 +.double 3.34521239996e-285 +.double 1.20947051329e-106 +.double 6.40817072455e+159 +.double 3.11374667266e-119 +.double 1.2175153294e+258 +.double 1.29482890767e-53 +.double 16426.1520459 +.double 9.7365323519e-164 +.double 1.77314093931e+273 +.double 2.24576292282e+122 +.double 1.31505233515e+269 +.double 2.55736781426e-25 +.double 2.24748156388e-205 +.double 1.29836958397e-112 +.double 6.98303378247e+235 +.double 6.65301892528e-207 +.double 3.13134956581e+247 +.double 5.71297860002e-285 +.double 4.12266303967e-156 +.double 1.75677187033e-250 +.double 1.59790592196e-260 +.double 2.8638468516e-136 +.double 2.04947258641e+298 +.double 4.53077258415e-230 +.double 1.24028480016e-180 +.double 6.00711580615e-127 +.double 4.58706138926e-188 +.double 1.61343142488e-177 +.double 6.82346345815e+186 +.double 1.77284783329e+229 +.double 5.92651719091e-96 +.double 1.06113093826e+129 +.double 4.92334175134e-124 +.double 1.21603695408e-281 +.double 7.20919353751e-32 +.double 3.27661972015e-254 +.double 1.51731467064e-123 +.double 7.24634874969e+49 +.double 1.59711947362e-12 +.double 1.12179634244e-270 +.double 7.56495068207e-274 +.double 1.18610157262e+257 +.double 7.83645051695e+82 +.double 6.75422723187e-276 +.double 2.38766058208e-234 +.double 1.05162276922e+272 +.double 7.82907545828e-194 +.double 4.33790284424e+296 +.double 1.02283042691e-119 +.double 9.44682203536e+238 +.double 1.17148623157e-291 +.double 2.33187819256e-203 +.double 2.78998298672e-91 +.double 2.99862746517e-174 +.double 1.22118625688e+147 +.double 8.16753700028e+245 +.double 2.16747271341e+76 +.double 40357229757.8 +.double 4.95121454665e-269 +.double 2.95282229164e-84 +.double 8.62765799478e+179 +.double 2.18435872878e+238 +.double 3.40313642758e-218 +.double 4.60202145184e+226 +.double 8.85032950722e+102 +.double 2.5669126274e+38 +.double 5.81218232948e+87 +.double 1.75368209512e+76 +.double 1.07733232815e+136 +.double 1.13379364349e-139 +.double 1.08842508496e+172 +.double 2.34169399547e+138 +.double 1.20810163721e+259 +.double 1.79500707314e+208 +.double 1.03606942844e+31 +.double 2.52603321934e-21 +.double 1.17574697387e-09 +.double 9.88185912207e-261 +.double 6.70892271944e-163 +.double 7.40611828986e+175 +.double 4.38642348435e-285 +.double 6.31913267017e-81 +.double 5.59204498535e+58 +.double 3.53810870663e+24 +.double 8.88706237044e-142 +.double 1.14923310768e-267 +.double 1.41028539098e+209 +.double 5.88861257755e+154 +.double 1.76036559353e+257 +.double 4.40323724786e+35 +.double 3.69568383156e-297 +.double 2.08275947296e-49 +.double 1.36835734746e+82 +.double 4.63260169755e-118 +.double 3.45791213361e-232 +.double 2.80145849326e-278 +.double 5.13250147148e+41 +.double 4.82424509175e+306 +.double 4.19620484248e+61 +.double 9.29476284476e+293 +.double 2.23159211403e-219 +.double 1.97589229684e-209 +.double 5.83911190306e+124 +.double 6.21274031588e-223 +.double 8.20980602683e-216 +.double 1.00407090794e+154 +.double 1.1023266799e+135 +.double 2.07688551157e+234 +.double 5.44209676492e+170 +.double 3.40746251995e+60 +.double 1.39462225291e-98 +.double 3.75578944646e+100 +.double 9.59453820202e+136 +.double 2.68238621012e-183 +.double 1.03459468254e-57 +.double 3.0302791483e-175 +.double 4.43121628625e-157 +.double 1.99594408041e+83 +.double 8.80620529834e+238 +.double 7.78563022002e-263 +.double 2.29742827829e+291 +.double 6.43659128808e+119 +.double 2.595064552e-15 +.double 1.65851750096e+97 +.double 8.89215800638e+57 +.double 1.93256417374e-296 +.double 4.2144132991e+196 +.double 2.24044288495e-277 +.double 4.59002983953e-132 +.double 6.83913750503e+140 +.double 2.09950410732e+247 +.double 3.34886922987e-274 +.double 1.0301593413e+40 +.double 1.95167588781e+44 +.double 4.81966612437e+270 +.double 2.30449495008e+45 +.double 4.44670849404e+189 +.double 4.9914942985e-117 +.double 5.8164074147e-37 +.double 2.30277231907e+245 +.double 1.25174682999e-171 +.double 3.13751266773e+27 +.double 9.33820258267e+148 +.double 1.26290824798e+150 +.double 2.23634152416e+288 +.double 3.67149738047e+50 +.double 1.24857330954e+117 +.double 1.7214579633e-74 +.double 3.04960291323e-130 +.double 1.08792477675e-139 +.double 1.07737483975e+155 +.double 8.95856462077e+291 +.double 4.0110132488e-44 +.double 1.53092162114e+81 +.double 2.23421335157e-190 +.double 3.07156721165e+85 +.double 3.47404515583e-62 +.double 3.46704247075e-281 +.double 1.11767644045e+117 +.double 3.6218016113e+156 +.double 1.69862307947e+167 +.double 1.02662181132e-166 +.double 2.10403194681e-35 +.double 2.69811605864e-219 +.double 3.32913565692e+153 +.double 7.33981906313e-60 +.double 2.26437392681e+75 +.double 1.40075695095e-116 +.double 3.88985925653e+56 +.double 2.56205756982e-126 +.double 3.9916840707e+93 +.double 61805790127.6 +.double 1.17456445414e-254 +.double 2.67519340407e+276 +.double 9.98070884048e+288 +.double 8875280572.46 +.double 7.65441038397e+41 +.double 6.44955101863e-201 +.double 1.22906288055e-123 +.double 2.1435370374e+15 +.double 6.01686983056e-109 +.double 7.14407446828e-36 +.double 3.22586333083e+207 +.double 2.07941254614e-64 +.double 1.40235392726e-89 +.double 1.49295663233e-275 +.double 2.68169866289e-105 +.double 2.91746907877e+231 +.double 5.02406845639e+53 +.double 4.81250528114e-120 +.double 1.63864775355e+297 +.double 7.42275113963e-259 +.double 1.71197889483e-13 +.double 5.62177613619e+253 +.double 2.03563952066e-19 +.double 2.52611330068e+271 +.double 9.75843792022e-293 +.double 8.34123203277e+132 +.double 1.02187435439e-224 +.double 6.34496079195e-291 +.double 2.60988998197e-281 +.double 3.35897967846e+49 +.double 2.63319388722e-79 +.double 9.35972926373e-240 +.double 6.61614511633e+53 +.double 6.35583226994e-103 +.double 5.23010267753e+118 +.double 77218074.5524 +.double 0.249030379369 +.double 1.09909056501e+233 +.double 1.01415617914e+14 +.double 4.5455838254e+89 +.double 2.52643481944e-270 +.double 2.04800579443e+16 +.double 9.56365592853e-109 +.double 1.61332806914e+120 +.double 1.36830521915e+292 +.double 5.987665494e-236 +.double 2.10447600066e+282 +.double 1.66563366808e+252 +.double 4.36982694623e-66 +.double 1.24872874372e-110 +.double 6.7025539363e-18 +.double 4.60751410796e-16 +.double 6.07083205092e-148 +.double 4.32282867559e-222 +.double 4.25654840334e+279 +.double 2.63823308942e-67 +.double 1.78835922854e-85 +.double 4.88206629388e+87 +.double 4.99845448543e-109 +.double 2.09250660097e-162 +.double 1.16969105619e-201 +.double 2.45754803976e-23 +.double 7.04334453451e+283 +.double 5.47309534244e-33 +.double 4.34325697513e+196 +.double 1.7842190401e-69 +.double 4.9158885607e-24 +.double 8.42973736811e+160 +.double 1.24115290725e-308 +.double 1.98197647124e+144 +.double 28644571724.1 +.double 7.73985922839e-34 +.double 2.41938230353e-201 +.double 0.000193194806642 +.double 2.77062506275e-308 +.double 1.7255184336e-178 +.double 2.64596085584e+108 +.double 5.23993833976e-142 +.double 3.52803178171e+193 +.double 6.52133173934e-23 +.double 1.79587246664e-140 +.double 1.13946669617e-36 +.double 3.22052125342e-140 +.double 2.27391669744e-112 +.double 3.35535119039e-126 +.double 3.48601368206e-14 +.double 2.45014949967e+168 +.double 9.49319319567e-264 +.double 1.28240991023e-30 +.double 3.85172290261e-26 +.double 1.36432859364e+281 +.double 5.89811674302e+299 +.double 1.79771805032e+70 +.double 1.61609194304e+45 +.double 1.14112441268e-175 +.double 1.03179255894e+239 +.double 1.81986969724e-93 +.double 3.07392735844e-146 +.double 1.56414095055e-285 +.double 2.10945457818e+51 +.double 3.69235125133e+119 +.double 7.70445634966e-95 +.double 1.08416111226e+256 +.double 1.42406673703e-113 +.double 1.246158705e-271 +.double 1.53282549443e-214 +.double 5.48750809929e-111 +.double 4.67249923196e-186 +.double 2.65128891328e-192 +.double 7.44887368037e+28 +.double 8.04417356125e+263 +.double 4.93403166417e-227 +.double 4.84739415032e+129 +.double 1.01807439036e+295 +.double 8.49103961966e+288 +.double 7.81324748062e+65 +.double 1.36111473929e+125 +.double 5.53801811225e+150 +.double 555668.456627 +.double 9.18916916353e+295 +.double 3.50059782726e+173 +.double 1.3946009856e+101 +.double 1.16735956252e-153 +.double 1.46579778648e-133 +.double 9.50309396177e-49 +.double 3.7685198187e-238 +.double 4.54816957554e-208 +.double 9.82515944951e-27 +.double 5.93140942689e-68 +.double 2.09437583897e-309 +.double 2.62041332969e-42 +.double 6.27967519712e+161 +.double 1.65445338732e+204 +.double 1.38918401154e-133 +.double 2.63001467433e-42 +.double 3.19427448832e+21 +.double 2.66393518427e+47 +.double 2.15305046773e-255 +.double 4.42842766901e+205 +.double 6.56258339198e-246 +.double 1.65987511486e-251 +.double 9.33349004816e-282 +.double 3.17537430355e-222 +.double 3.83400406784e-124 +.double 1.54587798905e-200 +.double 7.56510346033e-118 +.double 82794.5601889 +.double 9.6336725098e-250 +.double 2.01671960952e-179 +.double 4.14200388828e-274 +.double 1.94614302488e-54 +.double 1.05205317438e-273 +.double 4.18201053721e+217 +.double 1.25372806846e-54 +.double 2.69550970082e+164 +.double 5.53179736541e+17 +.double 5.59759721097e+93 +.double 2.32105116263e-288 +.double 7.07430944233e+103 +.double 2.00107073761e+213 +.double 7.33433689767e-219 +.double 3.19784639821e-26 +.double 6.1294950124e-273 +.double 3.25281059304e-59 +.double 1.18508626138e+255 +.double 4.87631721837e-220 +.double 8.11453098117e+107 +.double 8.78728024765e-247 +.double 8.09959276727e+142 +.double 3.54132111459e-82 +.double 8.51493554879e-147 +.double 1.79903341293e+179 +.double 9.06007188478e+304 +.double 2.99695776296e+305 +.double 4.25940068032e-247 +.double 1028743399.4 +.double 5.65011692643e+69 +.double 3.65675046894e-221 +.double 3.08123182495e-165 +.double 2.62076147516e+25 +.double 7.77362277253e+199 +.double 7.11416141262e-41 +.double 1.94133088971e-302 +.double 2.83227189058e-263 +.double 5.77123253597e+130 +.double 2.87095743692e+143 +.double 1.28429640876e-146 +.double 1.92199112394e+140 +.double 7.52934118632e-154 +.double 2.90973261984e-168 +.double 1.45304830831e-210 +.double 5.25949206471e-149 +.double 1.17934675899e-223 +.double 7.05174245115e+116 +.double 1.71917972334e-145 +.double 6.34202727818e-205 +.double 9.73503254404e-184 +.double 8.06828148773e-190 +.double 3.58196518856e+64 +.double 7.57186959502e-194 +.double 3.74168638806e+263 +.double 1.06210494008e-94 +.double 1.13314372936e+156 +.double 1.01068052747e+117 +.double 1.50900978205e-55 +.double 1.60777351227e-88 +.double 8.94794697933e-270 +.double 1.31374628903e-104 +.double 1.77505529883e-73 +.double 2.2718187333e-69 +.double 7.86448889038e-07 +.double 2.64131994403e+134 +.double 1.72629893139e-73 +.double 2.28257364756e-155 +.double 305.433955893 +.double 1.91819920456e+71 +.double 9.42933075641e-101 +.double 3.1176364663e+18 +.double 1.5561222469e+217 +.double 9.59832382296e+95 +.double 4.18662654686e-58 +.double 3.81009395897e-154 +.double 1.8126648899e+289 +.double 5.80376855536e-157 +.double 1.55904655344e-225 +.double 1.85525876652e+225 +.double 2.4441380051e-278 +.double 3.01191650986e+295 +.double 3.1911405724e+55 +.double 3.34071011277e+242 +.double 2.08669378857e+229 +.double 5.06146985346e+250 +.double 8.52236498476e+199 +.double 2.54908098397e+206 +.double 8.75982878677e+170 +.double 1.05354906706e+23 +.double 1.44182811126e-136 +.double 7.44043395366e+295 +.double 2.95978040609e+75 +.double 5.79774709004e+226 +.double 8.62025147944e+282 +.double 2.27816483968e-176 +.double 2.39100384917e-238 +.double 7.24269347671e+211 +.double 4.27650560662e-258 +.double 1.30655197545e+26 +.double 2.94535239019e-208 +.double 9.97280808329e+35 +.double 4.03955870592e+186 +.double 1.29846290731e-153 +.double 4.68248417776e-81 +.double 1.12177539196e-296 +.double 2.87750952608e-95 +.double 2.6734507184e-263 +.double 9.90749191419e-299 +.double 2.71429645502e-276 +.double 1.69743232697e-84 +.double 1.96946157291e-210 +.double 1.12708355394e-231 +.double 6.80887458054e-108 +.double 6.0389141789e-220 +.double 2.3328844431e-25 +.double 1.71104689076e-255 +.double 5.20028959992e+146 +.double 1.28458160627e+29 +.double 1.11837581508e+239 +.double 1.35259189259e+83 +.double 8.71589552609e-196 +.double 8.79591509054e-296 +.double 2.57203553154e-158 +.double 4.98717223243e+188 +.double 2.67670575465e-53 +.double 2.25083430287e-144 +.double 3.50744328965e+12 +.double 4.43261162456e-76 +.double 4.74737778896e-192 +.double 2.9262456301e+292 +.double 2.97216650777e+141 +.double 1.68254554102e-182 +.double 1.44374318766e+296 +.double 2.85646242914e+138 +.double 2.57349840326e+149 +.double 8.98231702631e-187 +.double 1.24415872137e-200 +.double 7.02060733222e-42 +.double 2.54547663751e-252 +.double 1.63505163943e+72 +.double 6.44976383632e-254 +.double 1.23279088298e-71 +.double 1.46842229031e+196 +.double 6.79714355849e-284 +.double 3.15847135994e-19 +.double 2.04668074192e-200 +.double 7.03666884473e-265 +.double 2.4274776978e+188 +.double 1.02389336826e-28 +.double 2.84231652884e-255 +.double 7.82485222977e+188 +.double 2.36629980052e+297 +.double 2.63262457387e-222 +.double 1.20407659146e+57 +.double 7.7592739036e+20 +.double 3.76915262699e-132 +.double 1.12048359982e-260 +.double 3.43689525771e-164 +.double 8.31332600908e+216 +.double 4.08466038376e-200 +.double 7.67175358915e+80 +.double 1.04289462237e+210 +.double 6.52673805583e+255 +.double 3.88049919233e-114 +.double 1.13484907745e-85 +.double 4.21143278605e-270 +.double 8.22808854342e-66 +.double 2.38171255418e+36 +.double 1.09893849515e+20 +.double 1.82609703126e-277 +.double 1.30976769176e+75 +.double 3.00156879215e+200 +.double 2.38396933415e+81 +.double 2.26058389744e-295 +.double 1.75982907939e+95 +.double 7.22537205327e+85 +.double 4.40904412781e-152 +.double 2.57915429111e-138 +.double 87737046.8935 +.double 3.28532731019e+13 +.double 4.44396075658e+183 +.double 1.8134377153e+13 +.double 5.01379017351e-302 +.double 1.74963300735e+289 +.double 2.38160563532e+49 +.double 1.94763906138e-209 +.double 3.33592496647e-06 +.double 2.47059946801e+34 +.double 1.25840356066e+51 +.double 1.04106450877e-200 +.double 2.15839742809e+259 +.double 1.35698891617e+275 +.double 1.86403964492e-23 +.double 2.77740226011e+26 +.double 6.88577033001e+25 +.double 9.81140600098e+293 +.double 2.0458079904e-103 +.double 4.35519367171e+215 +.double 1.97025955539e-212 +.double 3.97860258255e-68 +.double 1.35832219646e-52 +.double 1.1281589989e+256 +.double 7.45334069766e+187 +.double 8.20846056441e-106 +.double 3.84327405763e+37 +.double 2.38113937484e-203 +.double 1.37129471569e-303 +.double 2.26325289281e+296 +.double 1.09636448814e+169 +.double 5.5284111175e-264 +.double 2.26020060567e+105 +.double 9.03851487607e+235 +.double 2.23986209461e+169 +.double 1.74813939096e+33 +.double 3.49989204694e+173 +.double 7.83297521098e+205 +.double 5.39273756721e-18 +.double 2.67963234396e-244 +.double 1.120432298e+45 +.double 3.68160655693e-262 +.double 3.20187348827e+289 +.double 3.08812579871e+97 +.double 7.73914378989e-35 +.double 1.97777479026e+25 +.double 1.58288881273e-194 +.double 1.04928318087e+78 +.double 9.49236662833e+204 +.double 8.47486843825e-41 +.double 3.1652785645e+41 +.double 3.43024623886e+250 +.double 4.68141929709e-119 +.double 1.23177538362e-53 +.double 2.2555254038e-241 +.double 1.28579082782e-46 +.double 2.04942690529e+158 +.double 2.51393393988e-08 +.double 4.12567655236e+81 +.double 9.06984821524e+201 +.double 8.60281145083e-196 +.double 1.3138196704e+216 +.double 4.40605347379e-127 +.double 4.7098933621e-70 +.double 1.49879643956e+265 +.double 2.8753704458e-136 +.double 1.1349613208e+179 +.double 9.26717272115e-133 +.double 2.70178275215e-179 +.double 2.77657443201e+34 +.double 2.85942561001e-128 +.double 7.04103773747e+44 +.double 5.40015898832e+292 +.double 3.67397469448e-242 +.double 2.20219161566e-180 +.double 2.40223314607e-84 +.double 1.52301550715e-223 +.double 1.05732837297e+282 +.double 1.13035974401e-288 +.double 2.232666461e+185 +.double 1.68177707154e+271 +.double 1.85255217075e+148 +.double 2.36770664854e-158 +.double 6.68891065508e-91 +.double 5.57425852468e+201 +.double 6.37946613431e-52 +.double 2.03674401546e-149 +.double 3.95837683718e+65 +.double 9.60833923197e-241 +.double 8.35487948381e+31 +.double 2.17326972495e-249 +.double 7.38388880146e-157 +.double 7.81275605423e+72 +.double 5.07851144352e-67 +.double 4.83584571045e-219 +.double 2.94336178246e-231 +.double 1.52563526424e+144 +.double 1.69808558097e+137 +.double 7.88283292017e+223 +.double 1.43542277405e-173 +.double 2.8104042102e-139 +.double 8.98872221659e-100 +.double 1.13306164541e-188 +.double 3.20204337873e-75 +.double 2.93386917319e-207 +.double 1.18112769214e+201 +.double 3.19992230951e-07 +.double 1.18783392553e-223 +.double 5.94603189689e+31 +.double 8.34911477602e-136 +.double 1.454448564e+168 +.double 1.80978580959e-31 +.double 3.02377897004e+26 +.double 5.17413419919e-59 +.double 1.10435598816e-163 +.double 61670249298.5 +.double 1.61895543969e-182 +.double 2.34844094725e+47 +.double 7.99682839515e+71 +.double 8.87152879068e-116 +.double 2.37923285101e+134 +.double 4.66246118343e-45 +.double 3.38442508819e+26 +.double 1.23573339803e-195 +.double 2.6589288937e-95 +.double 2.07423866018e+195 +.double 1.59235925023e+184 +.double 3.66737070244e-113 +.double 3.91047958947e+61 +.double 5.38346719355e-146 +.double 1.9482492505e-236 +.double 6.84592233477e+12 +.double 4.71699892672e-201 +.double 2.33140014739e+273 +.double 2.18841629531e+260 +.double 6.72880853996e+238 +.double 1.78470958234e+282 +.double 3.79266677579e+229 +.double 9.48410402267e+22 +.double 3.48067673569e+65 +.double 3.32056402284e+73 +.double 3.66615184843e-06 +.double 5.15596603612e+237 +.double 1.58417010343e-136 +.double 7.41936379114e+122 +.double 4.52412655987e-163 +.double 3.14138334245e-272 +.double 3.90934318246e-194 +.double 1.3809929877e+68 +.double 9.45987610528e+57 +.double 2.38837858954e-124 +.double 1.77063136418e-201 +.double 3.34319314412e+132 +.double 5.21840379305e+258 +.double 3.25571166898e+206 +.double 8.29083855037e-245 +.double 1.4119331753e+244 +.double 3.74338091526e-178 +.double 5.04068943255e+45 +.double 3.05479938993e-162 +.double 3.61785438552e-168 +.double 3.03846959521e+80 +.double 2.89432734446e+72 +.double 1.17898808068e+290 +.double 1.05768595767e+169 +.double 1.74985574973e-102 +.double 6.51820510595e+82 +.double 2.55083722159e-121 +.double 0.00399745534471 +.double 2.38328597096e-274 +.double 9.22227291561e-303 +.double 5.80576725593e+265 +.double 4.15679163852e-225 +.double 7.69670944858e+172 +.double 4.17450240182e-64 +.double 3.13077564644e+173 +.double 2.42654059444e-257 +.double 9.93949235139e-309 +.double 5.08832434901e-273 +.double 1.00824397781e+68 +.double 8.41520193181e-198 +.double 1.32929900517e+16 +.double 5.70916449001e+198 +.double 5.43192293805e+272 +.double 1.18174005431e-306 +.double 7.303373267e-158 +.double 3.12130130024e+229 +.double 8.87981650835e-20 +.double 4.38292039525e-06 +.double 1.42172413952e-236 +.double 1.51560111608e+54 +.double 1.1329561083e-91 +.double 1.62598216442e-296 +.double 7.04353290069e-286 +.double 3.98759042458e+158 +.double 2.71893117684e+221 +.double 2.14818286048e+226 +.double 2.4522493358e+111 +.double 4.00896502014e+176 +.double 3.71404747782e+77 +.double 7.30258917409e+220 +.double 1.34472570224e-153 +.double 9.95258935314e-69 +.double 7.18318373032e+43 +.double 6.60892838826e+191 +.double 1.6314248944e+139 +.double 1.00745750041e-94 +.double 5.17015360898e-14 +.double 4.29668450922e+39 +.double 3.0654719451e+139 +.double 1.46837815389e-280 +.double 2.86899815096e-251 +.double 7.29560025973e-104 +.double 6.9215030438e+144 +.double 1.63722959618e-06 +.double 1.77913118251e+24 +.double 0.00540902493285 +.double 3.38044446195e+20 +.double 1.34036821792e-150 +.double 1.25750474129e+92 +.double 1.89310380971e-07 +.double 1.6166732635e+266 +.double 2.39401226712e-256 +.double 1.23150010547e+42 +.double 4.6018424097e-33 +.double 5.57321072982e+301 +.double 1.1002431684e-134 +.double 3.04678586874e+226 +.double 2.06667581226e-134 +.double 5.27095326012e+161 +.double 2.46617389571e+54 +.double 1.09558036756e+300 +.double 6.73581416956e+69 +.double 4.29783894834e+117 +.double 1.726899134e-234 +.double 4.60981214801e-82 +.double 6.07551809122e-208 +.double 1.80142542245e-35 +.double 2.21568455581e+89 +.double 3.61679335793e-108 +.double 8.97119759069e-69 +.double 8.45251548455e-60 +.double 1.20745787809e-303 +.double 0.000887374350439 +.double 2.99312112028e-49 +.double 1.82068391124e-243 +.double 7.50364003891e+133 +.double 7.5384983934e-185 +.double 1.99431517547e+47 +.double 4.97895394585e+113 +.double 6.16944266869e-235 +.double 4.19017317366e+265 +.double 2.8092291195e+49 +.double 4.00458122175e+204 +.double 7.60911747703e+66 +.double 5.15725765741e-170 +.double 2.36296897201e-06 +.double 1.54586641212e-158 +.double 1.0622008784e-48 +.double 6.60730319746e+264 +.double 6.11059689539e+246 +.double 1.35121078183e+286 +.double 6.88940122529e+16 +.double 1.02531594651e-36 +.double 6.69632412031e+37 +.double 1.36006269615e+178 +.double 1.47823205252e-20 +.double 2.78562061641e+170 +.double 5.93609714679e+154 +.double 3.02190263274e+167 +.double 9.14752362015e-14 +.double 1.98762709724e-249 +.double 1.65682748968e+167 +.double 3.49355996029e-217 +.double 1.99378113121e-304 +.double 6.30004368601e+127 +.double 1.38080273082e-71 +.double 9.11621016728e-82 +.double 9.47067460218e+101 +.double 3.36572181045e+143 +.double 2.68069855558e-195 +.double 8.81810042317e+286 +.double 1.50637484616e+122 +.double 3.77280457696e+282 +.double 6.11064345682e+230 +.double 8.40396154158e+37 +.double 1.31543758767e-191 +.double 9.22013506519e+285 +.double 3.98076787126e-208 +.double 2.39684578731e+60 +.double 2.82292851066e+199 +.double 5.0296573603e+224 +.double 1.62990704192e-15 +.double 6.32289964757e-06 +.double 9.9937607178e-206 +.double 4.02103354201e-232 +.double 4.1360794206e+61 +.double 5.51239458295e+278 +.double 6.12433440477e-202 +.double 7.95678289581e-98 +.double 9.7469186149e+73 +.double 5.33630596127e-306 +.double 3.94440524109e+179 +.double 5.92582620924e-245 +.double 2.19176958563e+234 +.double 4.75149419227e-24 +.double 7.33372339501e+140 +.double 6.7517046629e+41 +.double 2.59583824479e-105 +.double 4.64434134667e+274 +.double 1.26486492518e-236 +.double 5.51409894846e+121 +.double 7.36021731207e-257 +.double 2.16115950532e-120 +.double 2.33392331757e+280 +.double 3.17376202769e-240 +.double 3.71037929807e-249 +.double 4.7887290203e-160 +.double 2.00435020596e+267 +.double 7.02451011305e+31 +.double 9.34131940588e-89 +.double 1.10696123992e-203 +.double 4.02537568063e+110 +.double 9.73684922901e+306 +.double 8.89580356116e-79 +.double 1.1137540185e-76 +.double 5.24006314911e+203 +.double 7.69669800967e-124 +.double 1.16516448983e+216 +.double 6.03861434598e+47 +.double 4.76337339882e-113 +.double 1.8156299587e-96 +.double 1.68055834554e-208 +.double 1.86883816019e+70 +.double 3.47423428111e+168 +.double 4.93388177719e+162 +.double 2.68537475314e-42 +.double 2.86724569884e-242 +.double 1.12215091302e+305 +.double 3.69621624409e+76 +.double 2.09025174009e-270 +.double 2.15823912292e+306 +.double 1.69917829292e+14 +.double 1.32219362716e-119 +.double 2.17287658692e-226 +.double 3.68978905125e-159 +.double 3.08071179305e+183 +.double 1.90831461409e-243 +.double 5.58972389564e+43 +.double 2.10159056933e-61 +.double 3.78091039426e+213 +.double 1.40764357518e+167 +.double 1.28860469549e-169 +.double 2.93457092276e-172 +.double 3.1093682806e-139 +.double 1.30805648379e+153 +.double 2.30519248557e-271 +.double 1.59896397711e+180 +.double 2.03361408113e-123 +.double 1.11972340006e+106 +.double 1.26788737722e-226 +.double 4.46962922222e+213 +.double 9.25420830084e-302 +.double 1.05585110699e-36 +.double 1.74731120989e+232 +.double 4.32348920525e-85 +.double 5.34999030557e-302 +.double 3.23561886091e+176 +.double 1.57697800668e+97 +.double 2.99007460504e-229 +.double 1.19164372472e-217 +.double 3.79432125977e+282 +.double 2.5844852362e-83 +.double 2.08517652138e+273 +.double 2.75051056226e-64 +.double 5.94783887098e+27 +.double 1.09963707252e-179 +.double 1.19362688006e-277 +.double 1.79172691039e+131 +.double 3.50549022808e+56 +.double 1.17595401026e-154 +.double 2.18614032064e+279 +.double 3.01845081878e-119 +.double 5.78885544815e+84 +.double 237.420777067 +.double 4.8565092996e-166 +.double 5.97520356191e+49 +.double 2.11682322908e-309 +.double 2.61927936465e+68 +.double 1.04653618082e+84 +.double 3.22278596756e+25 +.double 2.54067205536e+87 +.double 2.58039119795e-41 +.double 1.18368717145e+151 +.double 2.0107168996e-306 +.double 5.31665402002e-254 +.double 5.6303758361e-173 +.double 1.30849555216e+225 +.double 3.80992432982e+272 +.double 2.03306627461e+96 +.double 8.32227588492e+169 +.double 4.45687383181e-39 +.double 2.08600579619e+306 +.double 1.82070025388e-82 +.double 2.35766116979e+197 +.double 2.68682926925e-106 +.double 9.5118083435e-92 +.double 5.09743013363e-49 +.double 1.95338058631e-110 +.double 4.0945573847e-81 +.double 7.78351450134e+135 +.double 2.74095928454e-151 +.double 1.87190164664e+156 +.double 3.1190418403e+301 +.double 5.35472965938e-05 +.double 8.19353558296e+17 +.double 5.2855324586e+275 +.double 1.25969454268e+112 +.double 1.61601278522e-80 +.double 6.03905386063e-10 +.double 1.54909932585e-10 +.double 1.7685389657e+42 +.double 1.49780315844e+247 +.double 7.93066724593e+237 +.double 1.25760999911e-243 +.double 1.45275281245e-143 +.double 1.97972650689e-289 +.double 7.9262585526e-194 +.double 6.08750886295e+66 +.double 2.43210064709e-238 +.double 2.84307798615e-51 +.double 8.78206746156e+101 +.double 1.04434350771e-207 +.double 2.00067719818e-232 +.double 5.02473195764e+103 +.double 1.69103584589e-224 +.double 2.45408575115e-191 +.double 3.95360804598e+134 +.double 8.5570424582e+219 +.double 2.24191992427e-265 +.double 6.40368082546e-263 +.double 1.33206254788e-76 +.double 4.4590026381e+218 +.double 1.46785390215e-71 +.double 4.90442381182e-309 +.double 3.62113318633e-90 +.double 6.77889897186e+304 +.double 1.62093033819e-207 +.double 1.65588329127e-144 +.double 1.48397134115e-65 +.double 1.30831508822e+250 +.double 9202.03458539 +.double 8.5905618144e+284 +.double 1.06924754801e+100 +.double 2.67463710519e+217 +.double 7.38612419212e+220 +.double 1.40124766111e-120 +.double 4.32046010532e-300 +.double 3.75732561596e-76 +.double 5.6612605953e+250 +.double 3.2224407992e+247 +.double 1.24736968014e+241 +.double 6.62379164472e+64 +.double 1.76880856307e-270 +.double 1.00878347209e+281 +.double 6.09865311034e+46 +.double 8.79240475032e+221 +.double 6.85602923778e-305 +.double 6.14955589306e-169 +.double 1.20508006935e+244 +.double 9.8936449391e+290 +.double 3.71267665705e-300 +.double 2.50513965105e-234 +.double 2.37246354032e-135 +.double 1.95275371253e-254 +.double 3.11033791516e-20 +.double 4.37099637416e-30 +.double 1.62668850562e-139 +.double 4.70466629198e+29 +.double 4.76099763981e+215 +.double 4.63459837695e-175 +.double 4.65855705114e+141 +.double 5633564.93921 +.double 1.44099583929e-228 +.double 5.27929214936e+300 +.double 5.07956473233e-138 +.double 4.2902453988e-107 +.double 3.14679008933e-211 +.double 1.5249895585e+255 +.double 6.5799484769e-254 +.double 7.92185817228e-189 +.double 1.11446751617e-274 +.double 6.77103684394e+211 +.double 1.27672197107e-16 +.double 6.66850326904e+296 +.double 2.05203030614e+224 +.double 8.97720740477e+160 +.double 6.40996122749e+278 +.double 7.96198261269e-304 +.double 2.994316528e-205 +.double 4.59305385841e-187 +.double 3.46686003049e+291 +.double 1.40523841797e-182 +.double 1.70419254857e+307 +.double 1.15240627585e-289 +.double 1.20637802299e+207 +.double 4.77475522012e+70 +.double 1.53489474508e-75 +.double 3.9635527741e+27 +.double 9.6402017348e-20 +.double 6.72733632568e+188 +.double 8.19970680632e+243 +.double 0.000755182491179 +.double 2.05483786671e+225 +.double 3.69060983203e-99 +.double 6.18950940457e+210 +.double 1.34595359404e-218 +.double 2.55278334764e+76 +.double 2.22446925427e-224 +.double 1.09261325345e-293 +.double 1.2421509308e+120 +.double 1.21592065943e-244 +.double 5.77789152067e+156 +.double 1.67440689167e+97 +.double 1.2068016432e-172 +.double 1.73268387883e-166 +.double 7.14730314357e+101 +.double 1.81268720236e-147 +.double 1.14810754801e+175 +.double 1.18037342355e-63 +.double 5.60141335274e-148 +.double 2.55133778439e-228 +.double 1.57126279311e+296 +.double 5.56475374828e-104 +.double 6.88572757448e+256 +.double 1.00785565167e-49 +.double 1.23231561695e-76 +.double 1.57733418343e-281 +.double 1.27066579186e-218 +.double 3.3170950094e+67 +.double 1.06003035005e-07 +.double 6.55176481965e+127 +.double 2.34515418602e+282 +.double 4.74362510453e+269 +.double 2.82519262694e-248 +.double 3.53599597186e+214 +.double 1.52123024845e+110 +.double 5.69905547227e-241 +.double 1.68672510804e+22 +.double 2.06385090812e-44 +.double 8.70734250024e-55 +.double 4.22587111144e+21 +.double 1.171088455e-125 +.double 7.43751910723e-22 +.double 4.44374800888e+128 +.double 5.54173436715e+23 +.double 1.47333684048e+151 +.double 2.29083949182e-156 +.double 1.44088952151e+137 +.double 1.37484704519e-224 +.double 1.25164020881e-278 +.double 6.06499216202e+59 +.double 1.90576819438e-225 +.double 1.82115257007e-304 +.double 2.15074394424e+44 +.double 6.01755896571e+144 +.double 3.45479913727e+223 +.double 1.65276755105e-62 +.double 2.43477300209e-58 +.double 1.64209156695e-90 +.double 5.17275498611e+90 +.double 1.09054883364e+23 +.double 3.1696747859e+58 +.double 2.40561682636e+71 +.double 1.05906374726e+179 +.double 1.04991788492e-169 +.double 2.20126871259e-92 +.double 7.07295681432e+223 +.double 1.4412942561e+119 +.double 9.48508470611e+225 +.double 4.03227569336e-48 +.double 5.21328126846e+244 +.double 1.6459633681e+25 +.double 9.80484786068e-60 +.double 2.17193885853e+174 +.double 3.50153921992e-146 +.double 4.60755897099e-195 +.double 3.25919281092e+49 +.double 2.20658466286e+153 +.double 4.41254095705e+262 diff --git a/isa/rv64uv/data_fw.h b/isa/rv64uv/data_fw.h new file mode 100644 index 0000000..cfeba20 --- /dev/null +++ b/isa/rv64uv/data_fw.h @@ -0,0 +1,4097 @@ +.align 2 +.float 5527.22204077 +.float 1.5241163985e-09 +.float 1.0716292843e+17 +.float 2.71967022688e+19 +.float 2.70880649082e-35 +.float 7.55333096332e+18 +.float 3.12220172139e+12 +.float 1.23235770812e-13 +.float 2.62464913883e-20 +.float 2.27315574488e+36 +.float 5.50155785572e+15 +.float 2.8931179311e+26 +.float 3.58727932926e-30 +.float 8.62588318435e-16 +.float 89.890060027 +.float 5.77023439439e-22 +.float 3.1346969609e-30 +.float 1.62074219366e-12 +.float 3640.24925559 +.float 2.46457601634e+12 +.float 2.79904152104e+37 +.float 9.45205745358e+36 +.float 22714379223.7 +.float 45.3769711516 +.float 6.97578276342e+26 +.float 4.26465551752e-19 +.float 3.6217416877e-33 +.float 1.87062574459e+27 +.float 4.72693222903e-05 +.float 7.21152636444e+16 +.float 441159995.531 +.float 1.25560888101 +.float 843728291.119 +.float 2.97430616122e-08 +.float 2.55959542749e+22 +.float 1.15959490048e-16 +.float 0.00188623666077 +.float 680349331686.0 +.float 2.43327941612e+25 +.float 2.14887703004e+33 +.float 8.8016440385e+19 +.float 7.88111163478e+35 +.float 2971740710.24 +.float 4608392.82192 +.float 9.26133303809e+33 +.float 9.57598079163e+33 +.float 7.47732181835e-27 +.float 4.47233692893e-36 +.float 1.46752850916e+27 +.float 0.00214975695539 +.float 2.37376961117e-16 +.float 3.37183428271e-34 +.float 1.00434329014e+37 +.float 2.50701700801e-19 +.float 2.85303019697e+36 +.float 7.52686841379e-34 +.float 2.30836194346e-26 +.float 1.09109930974e-05 +.float 1.2154286759e+26 +.float 24861737.545 +.float 3.14396603222e+17 +.float 1.53765232394e-37 +.float 8.64143798694e+26 +.float 4.85760513161e+23 +.float 2.65586912013e+26 +.float 1.91788716498e-26 +.float 3.08982989491e+27 +.float 8.45181041468e+18 +.float 3.29867256334e-07 +.float 3.65946513921e+25 +.float 4.06042626257e+36 +.float 6.39790524258e-07 +.float 1.27551440832e+12 +.float 5.27664840533e-18 +.float 8.71688237466e-26 +.float 2.87735786139e-36 +.float 4.01492377749e-12 +.float 2.13263735887e-36 +.float 3.33792701763e-06 +.float 474.365522199 +.float 4.05451735366e-39 +.float 1.66896783134e-21 +.float 5.59995439296e-39 +.float 1.77041181832e+29 +.float 1.17878004277e-17 +.float 4738020.17453 +.float 1.00973508538e+31 +.float 8.30845904986e+18 +.float 1854.17328755 +.float 4.47283148982e+16 +.float 6.66688944094e+22 +.float 1.37466622846e+14 +.float 3.20451549718e-40 +.float 2.84038612799e+25 +.float 2.55468551132e-14 +.float 16.1804603647 +.float 3.00403627872e-26 +.float 2.26724427291e-24 +.float 9.7158096952e-26 +.float 2.15219500401e-35 +.float 4.19833497699e+30 +.float 4.22369139142e-21 +.float 8.8550049184e-31 +.float 1.861461022e+26 +.float 1.74340359695e-11 +.float 4.47815553339e-12 +.float 0.000448433118451 +.float 9.24179272924e+21 +.float 1.04691809103e-38 +.float 24238.1575714 +.float 14.7729278655 +.float 7.49069904264e-18 +.float 3.46016023883e+20 +.float 3.06908659958e-18 +.float 1.18256850501e-17 +.float 5.63083577805e-09 +.float 7.71811119112e+37 +.float 66.777464655 +.float 3.3275018926e-11 +.float 0.80535354419 +.float 2.92784098666e+31 +.float 568690660861.0 +.float 1.31428177328e+29 +.float 1.7957944968e+14 +.float 3276352260.62 +.float 3.58330713184e-39 +.float 26755099.2973 +.float 6.38700634146e-10 +.float 1.5485639327e+29 +.float 5.81974365655e+27 +.float 7.20494408047e-11 +.float 1.6606577107e-11 +.float 5.74886264927e+35 +.float 0.000103758843124 +.float 1.01964083248e+37 +.float 4.5197437495e-34 +.float 3.67261241067e-11 +.float 6.23478245436e-23 +.float 1.78760858123e-28 +.float 3459.68856191 +.float 3.25874119081e+27 +.float 4.45389952284e-13 +.float 5.99495179287e-16 +.float 1.29172747854e+37 +.float 2.91479886755e+13 +.float 0.000942585577388 +.float 5.63379066844 +.float 1.66850623196e+18 +.float 2.31976548076e+30 +.float 2.14113686583e+17 +.float 2.88052362606e+34 +.float 0.125390725406 +.float 9.03263771651e+21 +.float 4.96131962131e-28 +.float 8.66162706837e+33 +.float 1.40729409068e+17 +.float 2.9319816753e-19 +.float 3.05376234161e-26 +.float 2.99429899062e-06 +.float 4.20266135798e+36 +.float 4.40695096599e-31 +.float 3.31926058038e-19 +.float 5.18922369706e+23 +.float 7.31880638171e+28 +.float 1.26960781139e+28 +.float 1.53710843838e-18 +.float 6.30907585306e+35 +.float 1.32581104374e-11 +.float 0.000712141923735 +.float 1.03643462828e+32 +.float 1.54666620156e-05 +.float 6.52690911907e-12 +.float 3.00791861833e-32 +.float 6.05415750197e+16 +.float 0.000197562746507 +.float 1.47319725376e-37 +.float 1.11340699154e-23 +.float 190935.341381 +.float 4.45814028559e-13 +.float 121675.872677 +.float 2.26631875521e-20 +.float 2.46628097502e-39 +.float 2.31564950143e+32 +.float 0.0103619577863 +.float 1.99233413262e+23 +.float 1.50188528027e-06 +.float 39410.9103477 +.float 88609.2084737 +.float 6.51606779736e+12 +.float 6.53176630902e+33 +.float 2.25273986258e+17 +.float 3.44895027227e-34 +.float 1.13634335874e+18 +.float 5.62816319733e-16 +.float 6.37657446155e-36 +.float 83.1487553364 +.float 0.794722714976 +.float 2.96933035806e+32 +.float 2.79605307124e-19 +.float 980633709.754 +.float 853649316.209 +.float 5.61598165592e+22 +.float 0.0141342926386 +.float 176078461.18 +.float 2.16398440757e+30 +.float 0.00233413881346 +.float 3.23918454155e+31 +.float 7.84090187116e+18 +.float 1.48042434606e-14 +.float 2.26721753267e-22 +.float 1.83168300185e-20 +.float 5.11942250495e-30 +.float 9.25597884305e+35 +.float 0.00418972796407 +.float 9.71184620276e+26 +.float 3.05901095219e-05 +.float 2.31013051388e+32 +.float 1.94104856914e+14 +.float 1.19058626291e-17 +.float 5.04804593418e-07 +.float 9.51837003984e-21 +.float 4.32398072875e-12 +.float 3.45993247662e-11 +.float 4.50736753939e-31 +.float 20.6165525432 +.float 8.84365937771e-32 +.float 5.55134019219e-38 +.float 1.16444842261e+27 +.float 7.8149633753e+34 +.float 1.07234792096e+20 +.float 1.13012770157e-07 +.float 1.80038759925e+25 +.float 1.82014466581e-17 +.float 1.47415590213e+25 +.float 11927809719.7 +.float 6.23880266507e-26 +.float 338386342059.0 +.float 3.32308189028e-34 +.float 2.03467355322e-33 +.float 142559.530451 +.float 7.48313578426e+30 +.float 2.28885691615e-29 +.float 1.07112777745e-28 +.float 9.15464918626e+15 +.float 8016332322.65 +.float 4.71809172558 +.float 2.07821112848e-20 +.float 1.24447017974e-20 +.float 0.00039508039504 +.float 6.4786023692e-16 +.float 470719803266.0 +.float 1.35375831348e+15 +.float 5884626.33759 +.float 1.13798224445e-07 +.float 0.131585749098 +.float 5.28515909743e-23 +.float 1.94393866349e-30 +.float 101.926945352 +.float 5.48886739768e+13 +.float 65702019.7045 +.float 1.59002671215e-38 +.float 5.37447000206e-23 +.float 5.65809755075e+14 +.float 5.92064023757e-21 +.float 6.60930542749e-21 +.float 3.26948978848e+32 +.float 1.44742351342e-28 +.float 2.92772166921e-23 +.float 1.35203604221e-08 +.float 1.88356227821e+36 +.float 1.93873395113e-29 +.float 0.326164748021 +.float 1.66617105975e-06 +.float 22926.2770574 +.float 8.55687141466e-27 +.float 3.93396750369e+13 +.float 1.04434892442e-30 +.float 1.2034528591e+31 +.float 1.09272272984e+15 +.float 1.35774717372e-17 +.float 1.19111221089e+13 +.float 2.08028250689e-26 +.float 0.182952058739 +.float 1.27199138822e-31 +.float 0.110401887091 +.float 5.24908337102e+14 +.float 680146454.876 +.float 1.90478938739e-16 +.float 2018579257.58 +.float 1.14672311885e-17 +.float 0.0198249572197 +.float 5.57582971496e-22 +.float 730311432445.0 +.float 145305.349456 +.float 2.22258912666e+19 +.float 9.90612192492e-34 +.float 1.86726828836e+37 +.float 255.41293663 +.float 1.91433797915e-25 +.float 5.38833020967e+21 +.float 8.76284910026e+28 +.float 5.89126630592e-24 +.float 7.90366198241e-13 +.float 7626599.70323 +.float 8.01972476416e-14 +.float 4.11654658248e+31 +.float 6.78220122324e-37 +.float 1.46739473097e-10 +.float 1.14354681281e+28 +.float 1.54510066855e+27 +.float 4.49620825412e-14 +.float 4.20160398692e+15 +.float 4.1581611661e+20 +.float 4.94542935383e-28 +.float 1.25549393962e-14 +.float 2.58597737329e+13 +.float 2.79931895467e-39 +.float 2.43292711703e+14 +.float 9.34308374803e-28 +.float 19207682479.8 +.float 3.79929648435e-14 +.float 1.26362195512e+29 +.float 21.3759098894 +.float 2068732374.46 +.float 6.61776725302e+25 +.float 2.18681832791e+34 +.float 166282759.512 +.float 4.87739680792e-12 +.float 3.03153256515e-36 +.float 3.38106788644e-25 +.float 1.92743777167e-33 +.float 9.450419226e+36 +.float 20355041708.1 +.float 7.31260227708e-22 +.float 1.55943339029e-12 +.float 1.93620384253e-21 +.float 4.78717495152e+29 +.float 5.95364358384e-09 +.float 2.04987110956e-34 +.float 1.46018977474e+33 +.float 8.5525851806e+17 +.float 1.41387443255e+23 +.float 1.20721480928e-32 +.float 1.93238070547e-38 +.float 1.03484771896e-12 +.float 2.57596476653e-24 +.float 4.57801058892e+25 +.float 9.19135143387e-39 +.float 4.48547675737e-11 +.float 190.53754184 +.float 147230351.243 +.float 8.60648391412e-21 +.float 8.71491857671e-38 +.float 3.50474110265e-34 +.float 1.48527801577e+18 +.float 1.67845675426e-37 +.float 7.20909364775e+28 +.float 6.13761716122e+35 +.float 7.61813404371e-17 +.float 9.79319248953e-10 +.float 710727.923398 +.float 1.23430426898e-13 +.float 3.49105696515e+28 +.float 3.65727667793e-06 +.float 8.6667278471 +.float 8.81264903051e-32 +.float 23412.4667505 +.float 3.43786943449e-30 +.float 8.81824795785e+35 +.float 2.01787749434e+32 +.float 1937335607.68 +.float 463.943736202 +.float 2.61963460277e+22 +.float 4.23178062854e-19 +.float 26916.1647846 +.float 5.92936402258e-22 +.float 3.14917147603e+19 +.float 1.69557008839e+24 +.float 5.49961697313e+20 +.float 204.65333394 +.float 923392148450.0 +.float 0.00013861343938 +.float 6.84501860482e+17 +.float 8.56094988427e-10 +.float 2.16580214105e+12 +.float 67855.0603069 +.float 7.00057790003e+12 +.float 668371.916976 +.float 1.53926147248e-19 +.float 1.89793243173e+23 +.float 3.6577043027e-12 +.float 1.04414976734e+16 +.float 2.96011983895e-38 +.float 7.60803004472e-31 +.float 4.34748087601e+12 +.float 4.20869436398e+27 +.float 4.24143704052e+15 +.float 3.46738738452e-25 +.float 2.36788411807e+29 +.float 1199206600.22 +.float 1.62191269809e+16 +.float 9.02352150061e-06 +.float 1.17517336507e-27 +.float 588103670214.0 +.float 3011686.87707 +.float 1849.27119665 +.float 2.24204210025e-35 +.float 3.28019813187e+23 +.float 2.34602290125e-08 +.float 49.1881552534 +.float 1.79585893935e+32 +.float 2.1342597697e-22 +.float 5.51131716734e-26 +.float 2.42231563125e+15 +.float 1.47840500953e+25 +.float 7.60563767594e-19 +.float 8.2494907713e-38 +.float 0.00172593952892 +.float 2.21584098546e+22 +.float 1.30295523538e-07 +.float 0.00147434774277 +.float 9.02898631696e+26 +.float 4.82563631584e+33 +.float 1.9729464341e-10 +.float 5.59591940146e-39 +.float 3.82861450513e+14 +.float 472539.043037 +.float 29.1489220883 +.float 7.87660097986e-39 +.float 28602870113.9 +.float 8.16363763053e-34 +.float 0.0226975344484 +.float 1.00139341564e-12 +.float 7.21735519087e+15 +.float 8.70049840564e-15 +.float 3.24706600826e+24 +.float 0.671888566037 +.float 1.72612944311e-10 +.float 523319.203283 +.float 0.0108116960063 +.float 2.92272608618e-12 +.float 9975047952.78 +.float 2.13751237406e-13 +.float 3.36809071135e+15 +.float 11508124416.6 +.float 6.24888262431e-23 +.float 1.26108475709e-27 +.float 7.23570688677e+16 +.float 4.88559937141e-29 +.float 3.5970822481e+22 +.float 1.91755090676e-22 +.float 4.54886076426e-27 +.float 0.00203237029294 +.float 3.49385190688e+36 +.float 0.313362001877 +.float 1.89086959938e-34 +.float 1.40019967873e+38 +.float 279927.581282 +.float 1.62692610735e+22 +.float 0.416963848097 +.float 1.48657396174e-27 +.float 1.85093859917e-33 +.float 3.20703984035e+31 +.float 7.35777488626e-33 +.float 381952100812.0 +.float 7515659686.49 +.float 2.84603129251e-37 +.float 8.58527569869e-19 +.float 2.10838079704e+33 +.float 1.06619955813e+15 +.float 1.55229896946e+25 +.float 1.21482240672e-20 +.float 1.937441552e+18 +.float 1.45061696224e-29 +.float 92.7368586085 +.float 4417.49637509 +.float 1.4569785967e-31 +.float 3.21286166791e-15 +.float 6.05098880625e-33 +.float 9.20447277453e+26 +.float 5.10395086681e-34 +.float 1.5003744696e-15 +.float 3.63186618133e-10 +.float 4.31160448567e+12 +.float 2.97784521222e+25 +.float 1.5225167053e+29 +.float 6.10962433523e-35 +.float 6.35836885409e+13 +.float 1.69720469529e+13 +.float 6.69092952273e-06 +.float 1.00760944861 +.float 1.0313320205e-27 +.float 2.27291045241e+28 +.float 0.0934107227832 +.float 4.0501531847e+13 +.float 2.07651099732e+33 +.float 1.28486720657e+17 +.float 68833820.9137 +.float 2.58378686207e-30 +.float 2.23059097861e+17 +.float 8.78279500936e-12 +.float 96942592854.8 +.float 9.28717918272e+32 +.float 1.2972341287e+26 +.float 2.9422082146e-17 +.float 4.89425998711e+36 +.float 1325927871.16 +.float 806601.837582 +.float 1.37924842915e-16 +.float 23375301731.0 +.float 1.19925771871e-05 +.float 1.96608624784e-34 +.float 1.6824334243e+26 +.float 2.2850827803e+12 +.float 4.63884333241e+32 +.float 2.64955866073e+35 +.float 4.29120890895e-15 +.float 232.664738336 +.float 0.000447391425909 +.float 2.21609144395e-06 +.float 1.22824635886e-12 +.float 6.61169997056e-14 +.float 4.34542974648e-16 +.float 7.69699862965e-18 +.float 1.92711098027e-10 +.float 2.57313067022e+33 +.float 4.21393053145e-18 +.float 4.68986916637e-27 +.float 34176801639.9 +.float 1.64873276065e+31 +.float 212362.450547 +.float 7.98143821967e+17 +.float 4.75710793276e+17 +.float 1.26153242402e+19 +.float 3.41963478215e-38 +.float 1.27674396929e+17 +.float 7.68559854201e+12 +.float 7.41555173839e+34 +.float 8.51830056391e+25 +.float 1.35803748299e+17 +.float 3.56242876105e+16 +.float 2.2792249419e+37 +.float 5267499.99454 +.float 2.99768669924e+36 +.float 5.66141915048e-28 +.float 0.000337993660844 +.float 1.29777051231e+32 +.float 5.96276447978e+26 +.float 8.69192358872e-19 +.float 8.47134708931e+18 +.float 6.9953500778e-39 +.float 5.71046570026e+33 +.float 2.08799279672e-22 +.float 7.22165684561 +.float 1.9645124421e+20 +.float 1.45893562988e+24 +.float 5.00869925951e+26 +.float 1.38413771762e+36 +.float 1.69282409806e-20 +.float 4.52593709886e+22 +.float 9.16382619812e-11 +.float 2.10971555482e+27 +.float 3.68858671849e+29 +.float 4.96394512849e-36 +.float 6.7446318248e+23 +.float 0.0225683780161 +.float 3.72470926716e+31 +.float 1.94529836243e+29 +.float 1.68837156679e-37 +.float 7.60650273975e+24 +.float 4.27523319531e+16 +.float 9.58355079206e+29 +.float 2.41042664595e-36 +.float 1.10721492401e-16 +.float 1.31468355439e+12 +.float 5.19967578931e-07 +.float 4.47727303211e-29 +.float 7.02084222665e+26 +.float 1.02990095703e+24 +.float 3.3305067677e-31 +.float 5.37352702337e+16 +.float 1.18169130516e+15 +.float 3.54326503119e-19 +.float 2.34315820759e-25 +.float 1.89175550474e-25 +.float 1.22982885412e+22 +.float 1.70126802307e+24 +.float 0.0604886363009 +.float 8.40538559483e-36 +.float 1.93114054488e-19 +.float 2.55295741294e+33 +.float 4.04416311825e-30 +.float 1.15506772841e+29 +.float 3.43146625745e-22 +.float 8.38648193439e+18 +.float 9.07721315992e+18 +.float 1.0679674043e+38 +.float 2.38730903335e-13 +.float 2.18471208753e+26 +.float 9.9789330339e+13 +.float 224112449.882 +.float 5.98479442753e-33 +.float 1196.36270748 +.float 12.443986959 +.float 3.1146441576e-14 +.float 4.16091867846e+29 +.float 1958651954.91 +.float 1.61558502768e+22 +.float 4.1278784197e+27 +.float 9.57237370698e+30 +.float 7.83691415641 +.float 4.97657731662e+28 +.float 7.48210845517 +.float 1.34911796127e-18 +.float 5.14643588462e-31 +.float 1.36106840733e-30 +.float 3.44596544772e-37 +.float 3.04477886121e-14 +.float 1.8495730207e-09 +.float 6.59623907457e-22 +.float 7.30084639827e+12 +.float 3.32260315061e+28 +.float 3.16089239384e-37 +.float 4.57994989353e-21 +.float 6.44925162778e+31 +.float 1.58389974917e+38 +.float 6.49747056656e-41 +.float 1.23322284035e-23 +.float 1.20655393499e+29 +.float 3.01035574259e+18 +.float 1.64098183575e+21 +.float 1.88539013748e-11 +.float 9.14590489285e-26 +.float 3.97600757785e+37 +.float 1.17649087646e+24 +.float 1.48699788726e+25 +.float 14503683.3044 +.float 5.42908024021e-06 +.float 1.68119891908e-17 +.float 1.87854264623e+37 +.float 4.09676710618e-07 +.float 2.38553998792e-18 +.float 2.76422281565e+22 +.float 1481.78004363 +.float 1.32584853957e+32 +.float 4460633.40107 +.float 4.55783698011e-33 +.float 9.86466349549e-28 +.float 2.2087407199e+37 +.float 4.15159479737e+26 +.float 658.247273018 +.float 1.91589448794e+36 +.float 0.16452617378 +.float 1.10769585378e-32 +.float 1.6528626915e-07 +.float 2.25216040289e-12 +.float 1.27134874151e-18 +.float 9.81333561913e-09 +.float 1.44583161159e-29 +.float 3.17521139875e-29 +.float 3.2797633625e+19 +.float 2.03801651999e+37 +.float 14.9674808328 +.float 2.12309148996e-21 +.float 3.77016332692e+37 +.float 2.26969005444e-10 +.float 313808957.24 +.float 1.63569085646e-24 +.float 4.18853410153e+26 +.float 4027.63040269 +.float 1.15895595239e-09 +.float 1580603817.87 +.float 1.51533812952e+26 +.float 1.16370778046e-08 +.float 6.89538711346 +.float 954439542974.0 +.float 8.77326017099e+20 +.float 8.44476221769e+25 +.float 2.06813423835e-06 +.float 1.40568364661e+17 +.float 1.30372595769e-18 +.float 3.73154629713e-23 +.float 1.45439357961e-23 +.float 1.20957424588e-12 +.float 1.43465293104e-12 +.float 3.12844234648e+29 +.float 1.51032129582e+22 +.float 1.88848913305e+18 +.float 3.53583006771e-09 +.float 3.63850153993e+12 +.float 6.23180162187e-12 +.float 3.66002176272e-24 +.float 1123933116.72 +.float 1.25413337658e+31 +.float 40574541867.0 +.float 1.04150095436e-28 +.float 7.96623095865e-22 +.float 1.46209986601e-16 +.float 3.08759806493e-26 +.float 7.21520159703e+24 +.float 1.06806665996e+35 +.float 4.31882703899e-38 +.float 6.03763455548e-08 +.float 4.52601276155e-29 +.float 1.80549844479e-18 +.float 3.5441887836e+25 +.float 474.195411458 +.float 5.76136381451e-40 +.float 3.8963432362e+31 +.float 1.86048679496e-07 +.float 3.17718474107e+23 +.float 0.000188422175068 +.float 276555582276.0 +.float 7.04931012232e+20 +.float 56856959017.7 +.float 0.0551651734885 +.float 2.38615243395e-06 +.float 8.16512490456e-29 +.float 2.5837866723e-39 +.float 8.53196557328e+34 +.float 39.399443785 +.float 2.75360632144e-31 +.float 1.294939587e-05 +.float 9.34093064124e-32 +.float 4.00628236946e+26 +.float 1.08874923601e-06 +.float 658323739039.0 +.float 2.29279004662e-32 +.float 0.0148083712018 +.float 3.0045285991e-21 +.float 4.36281223655e+28 +.float 1.18983766607 +.float 3.61962382714e+24 +.float 1.38012234506e-17 +.float 1.51723197366e+36 +.float 3343377546.46 +.float 1.89010086833e-26 +.float 6.74606706946e-39 +.float 229890842.782 +.float 1.87941390825e+24 +.float 2.22537953875e+27 +.float 2.85054289511e-13 +.float 4.49964330725e+29 +.float 0.00745608504955 +.float 1.5632378588e+30 +.float 4.69482645039e-37 +.float 1.58275567991e-09 +.float 1.17049036919e-07 +.float 6.15072788455e-37 +.float 2.77040762399 +.float 3.71411439983e-15 +.float 5.4232045718e+29 +.float 8.19199022891e-16 +.float 2.68093756631e-28 +.float 6.0242046833e-27 +.float 4.77248397793e-22 +.float 1.25055990575e-26 +.float 1.09130613322e-35 +.float 4.82814068566e-37 +.float 1.79163831218e+23 +.float 3.8209351195e+36 +.float 6485.41691054 +.float 103232670.599 +.float 3.7882250526e+28 +.float 1.51496808153e-33 +.float 17844827086.7 +.float 371181216.589 +.float 8.47000905683e+27 +.float 1.4939728423e-31 +.float 7407002221.82 +.float 9.30837843573e+18 +.float 8.67394661637e-26 +.float 2.95130145767e+19 +.float 3.5110883607e+31 +.float 1.1349960042e+38 +.float 1.57842988509e-21 +.float 52959.1720882 +.float 43777781.8671 +.float 3.33624408696e+30 +.float 4.99786604548e-09 +.float 5526320.78025 +.float 4.79129372115e+17 +.float 1.89260330859e+34 +.float 9.60896663604e+25 +.float 8.71714264341e+18 +.float 0.00654763687255 +.float 0.00872606950071 +.float 5.27132152724e+32 +.float 1.21221721126e-23 +.float 1.48704700189e+27 +.float 8.14222743903e-29 +.float 1.18753526042e+30 +.float 809633593229.0 +.float 4.75437475893e+34 +.float 7.16339356609e-37 +.float 7.04864555507e-14 +.float 1.23374304031e-10 +.float 1.24618594811e+21 +.float 0.0116460567223 +.float 6.27518280832e+33 +.float 2.83896453675e-11 +.float 252274.049987 +.float 3.10005399216e-29 +.float 2.81376412749e+26 +.float 523647.472963 +.float 667376897.76 +.float 5.56755361719 +.float 1.73241495393e-09 +.float 1.39569120647e+29 +.float 1.00181877587e-35 +.float 7.4921832853e-05 +.float 9.94345678137e+30 +.float 4.15619980552e-19 +.float 26840464.0127 +.float 4.36762379991e+27 +.float 9.53555924137e+36 +.float 2028365961.78 +.float 3.478919523e+34 +.float 3.76633220358e-27 +.float 118331.031021 +.float 3.4334435128e+21 +.float 5.13543379614e-06 +.float 67978.669077 +.float 0.0089975072701 +.float 8.72950397744e-24 +.float 2.46449189822e-23 +.float 6.86935760282e-33 +.float 8.3100747936e-24 +.float 3798837454.04 +.float 3.10066316993e+27 +.float 4.86405539956e+29 +.float 2.99018504121e+21 +.float 455.507526595 +.float 9.72164127401e+18 +.float 5.46517487307e+27 +.float 2.14814447145e-19 +.float 1.98371522494e+29 +.float 1.91158175774e+26 +.float 2.38564899224e-05 +.float 1.76299755414e-25 +.float 4.9721557525e+30 +.float 1.51737396556e+12 +.float 2.83416756723e+21 +.float 7.62116086948e-26 +.float 7.40593872085e+34 +.float 1.18980392553e-13 +.float 31346692223.6 +.float 1.09092750149e-05 +.float 3.25906015735e-17 +.float 1.9651052571e+30 +.float 2.87872887419e+29 +.float 4.40371185036e-28 +.float 2.13623001821e+21 +.float 8.01071816014e+23 +.float 3.74571254403e+18 +.float 9.11533254668e+36 +.float 4.3837154549e-08 +.float 3.67013595577e+19 +.float 1.1148893598e-10 +.float 1.00791803586e+30 +.float 1.41689090627e+14 +.float 1.63339723493e-38 +.float 0.0465172157905 +.float 3.99860094961e+14 +.float 1.79445596872e+22 +.float 362557.414849 +.float 5.10226375624e+33 +.float 1.39621321139e-31 +.float 2.24360177315e+13 +.float 1.91422263169e+33 +.float 4.66169210228e-17 +.float 3.70130581336e+12 +.float 3.55882666716e+35 +.float 8.84137209166e-22 +.float 6.39894171791e-05 +.float 1.49243046298e+22 +.float 2.37731869206e-21 +.float 4.76670566628e-22 +.float 2.59021097124e-17 +.float 672429156644.0 +.float 439822.042134 +.float 769541982702.0 +.float 4.90838933966e-28 +.float 2585738489.29 +.float 1.67283204985e+32 +.float 3.28209448675e-37 +.float 7.50403380905e+20 +.float 0.046504829898 +.float 2.30486015843e-32 +.float 6.2071460283e-07 +.float 3.57050851488e+15 +.float 1.23451045215e-35 +.float 2.59919216201e-14 +.float 3.85255785543e-26 +.float 1.09092692856e-24 +.float 3.84966451572e-28 +.float 0.831811524462 +.float 26.7118587159 +.float 1.4264102e+20 +.float 1.18910734124e-08 +.float 3.59130436364e-33 +.float 5.09908286373e+31 +.float 843.057848808 +.float 2.78296727535e+34 +.float 7.56024076381e-26 +.float 3.38294901211e-26 +.float 6.241890209e-15 +.float 3.57348216988e+13 +.float 387851120.658 +.float 2.29045476121e+17 +.float 3.48587150147e+35 +.float 4.1643167253e-29 +.float 1.37791605427e-17 +.float 1.92538273029e+19 +.float 3.69249557752e-29 +.float 5.35981547513e-38 +.float 3.96754875435e-18 +.float 1.13820505872e+17 +.float 3.7295476272e+24 +.float 8.58310266067e+27 +.float 19.7880075267 +.float 498.326810472 +.float 3.50174749727e-28 +.float 1.22191488274e-33 +.float 1.09508835648e-13 +.float 6.10527466029e-28 +.float 498.525356055 +.float 2.92182634812e-15 +.float 2.36363511563e+16 +.float 2.12816814067e-17 +.float 0.000426364804882 +.float 8.83960219632e-07 +.float 12092.5211083 +.float 2.35140455927e+27 +.float 3.27194698411e-11 +.float 2.76675693119e-33 +.float 0.632100927355 +.float 3.3129566492e-37 +.float 1.15833770373e-17 +.float 2.96598127729e-08 +.float 5.42441970581e+15 +.float 3.24943280678e-34 +.float 3.51159390031e-27 +.float 9.84807782725e-34 +.float 0.00051253617309 +.float 6.66726371387e-32 +.float 3.17552541417e+32 +.float 1.91130760146e-13 +.float 1.55359024782e+27 +.float 2.42841696952e-11 +.float 9.37784594409e+37 +.float 2.54798163062e+26 +.float 6.48133347037e-24 +.float 0.000115987570247 +.float 4.80948143724e+13 +.float 6.9708411299e-35 +.float 4.25284491661e-10 +.float 1.25330442316e+24 +.float 3.00954906598e+29 +.float 1.04173753194e-31 +.float 6.18750617735e-30 +.float 2.34233884893e-30 +.float 600992.091829 +.float 8.43629842451e+12 +.float 1.81502400445e-27 +.float 2.97998946483e-27 +.float 1.52168170479e-24 +.float 230.504965821 +.float 4.65209576445e-16 +.float 2.51373284638e-09 +.float 1.18489568042e+32 +.float 15.81173036 +.float 2.75683291939e-08 +.float 1.41880013028e+16 +.float 3.05213986393e+16 +.float 1.4275836076e-08 +.float 8.82564196429e-27 +.float 1.12003709678e+24 +.float 4.22287469539e+14 +.float 2.37572855028e-16 +.float 2.16660335844e-20 +.float 1.85391617079e-16 +.float 1.82089196788e-37 +.float 6.91756789636e-38 +.float 0.000261314154993 +.float 7.05614075493e+21 +.float 6.79437847806e-17 +.float 2.14491100285e-19 +.float 2.10527947532e+22 +.float 1.58353068517e-15 +.float 4.82640688489e-08 +.float 1.67422019741e-13 +.float 7.75317675669e+30 +.float 4.76900601565e-33 +.float 1.67247581183e-15 +.float 1.12523647056e+36 +.float 5.41180851492e+19 +.float 5.87687643105e-13 +.float 3.37314959614e-18 +.float 5.53130293033e+26 +.float 3.19665455816e+22 +.float 1.00777998759e+26 +.float 9.50617989107e-12 +.float 6.69795501554e+28 +.float 6.58734677317e-12 +.float 1.00830709713e+21 +.float 3.00060985757e+28 +.float 1.59729344753e-06 +.float 1.47741010764e+24 +.float 7.11441926436e-10 +.float 3.13081047703e-10 +.float 1.48035272263e-36 +.float 2.90097014722e-38 +.float 7437027983.0 +.float 398260006.804 +.float 1.29644310781e+17 +.float 8.01293810316e-25 +.float 1.00708737688e+23 +.float 9.02719345874e-24 +.float 9.36859304761e-39 +.float 9.29445459893e-07 +.float 1.36876428582e-09 +.float 5.36524776132e-33 +.float 2.05672200633e+30 +.float 3.62293306556e+19 +.float 1.89740337116e+27 +.float 4.72586930531e+35 +.float 2215299.94123 +.float 5.65634826124e-09 +.float 139459.079924 +.float 1.46271552948e-08 +.float 1.11795553299e-39 +.float 2.02867180276e+20 +.float 1.18673349309e-19 +.float 8.1406979513e-19 +.float 5.60725355359e-22 +.float 1.92012780146e+24 +.float 8.76262468362e-25 +.float 3.81861724139e-08 +.float 4.83916321101e-26 +.float 1002107548.92 +.float 0.0145542507829 +.float 4.17418902754e-07 +.float 0.0410071625465 +.float 165.985177528 +.float 5.56414291938e-21 +.float 8.52600342891e-33 +.float 2.327108835e-07 +.float 40929.1054466 +.float 0.15679471254 +.float 4.44269720043e-22 +.float 6.54315261199e-34 +.float 2.04444898211e-22 +.float 7.90345289758e+31 +.float 2.81525599787e-10 +.float 4.77604384714e-05 +.float 1.43859733961e-31 +.float 6.30819352987e+16 +.float 0.0738659037919 +.float 1.04660318441e-20 +.float 3.6670113965e+33 +.float 1.53489141003e+36 +.float 2.46066370884e-13 +.float 9.97169373765e+28 +.float 4.16474541729e-22 +.float 5.22525019318e-14 +.float 19016629.3386 +.float 0.361345101383 +.float 3.49223708499e+29 +.float 1.65033264288e+22 +.float 1.55478720793e-12 +.float 1.11658532026 +.float 1.18599288035e-15 +.float 7.23617795489e+15 +.float 2.54718614449e-21 +.float 741292820929.0 +.float 1.24731529377e-29 +.float 1.42197454396e+24 +.float 4.66261019804e-27 +.float 1.30115777564e+19 +.float 4.9212819082e+26 +.float 2.53668521308e+20 +.float 5.29496993328e-21 +.float 3.57249951133e+29 +.float 5.43978043406e+12 +.float 1.22592541756e+17 +.float 6.59634099255e+13 +.float 9.22007545743e-27 +.float 1.29313137099e+12 +.float 1.26513787699e+19 +.float 8.296539634e-06 +.float 2.2755127623e+19 +.float 4.73376035137e-19 +.float 8.0211620982e-07 +.float 2.87423708812e-33 +.float 7.46583947439e-20 +.float 4.91557574285e-29 +.float 5.03026299121e+24 +.float 2.42531008295e-05 +.float 1.70577981213e-23 +.float 4.08845896223e+21 +.float 4.40281110632e+31 +.float 7.63256552073e+12 +.float 4.25585445273e+13 +.float 8.8418715143e-17 +.float 3.85573640258e-19 +.float 1.44685576869e-30 +.float 1488483833.35 +.float 0.00461256265272 +.float 1.90910169422e-27 +.float 1.90499524201e+25 +.float 5.70604918827e-11 +.float 4.5219938092e+27 +.float 1.6853662187e-25 +.float 8.42618399574e-18 +.float 1.77138187801e+31 +.float 3155.04594932 +.float 4.336121842e-13 +.float 4.88472137592e+20 +.float 1.32617145911e-11 +.float 1.39815794714e-25 +.float 56692151688.9 +.float 6.81847046434e-12 +.float 1214.37551263 +.float 0.188944427253 +.float 2.50951853681e-38 +.float 4.48465137747e-33 +.float 1.50792970641e+24 +.float 3.92178172128e+16 +.float 16.8409513187 +.float 1.65773992287e+20 +.float 6.61424014797e-14 +.float 3.40249606127e-32 +.float 1.13047234581e-07 +.float 4.43685896747e-21 +.float 8.95769020608e-10 +.float 3.90946100871e+30 +.float 1.16243749162e+34 +.float 1.4539575721e-15 +.float 4.47293222593e-39 +.float 2.21221621272e-05 +.float 2.99826957567e-18 +.float 6.56767810212e+26 +.float 7.25521717735e+21 +.float 1.57890348235e-24 +.float 2.50815954586e-27 +.float 0.0208693829554 +.float 3.70916041566e+30 +.float 5567835.63723 +.float 1.63003122146e+32 +.float 1.34991363699e-30 +.float 0.00443421436041 +.float 6.59479382739e-29 +.float 0.00546255111033 +.float 1.14863957109e-24 +.float 7.69205002163e-19 +.float 1.15011179442e+30 +.float 8.31865663115e-13 +.float 3.08935738192e-34 +.float 1.79136230957e+15 +.float 1.08431996343e-07 +.float 0.0621596429624 +.float 7.58249255193e-29 +.float 1.88864870123e+35 +.float 56671117.1755 +.float 2.44417825956e+16 +.float 1.49247000008e+26 +.float 74.1741152816 +.float 3.18429880767e+13 +.float 2.93628338101e+35 +.float 191555713.301 +.float 2.76043053698e+26 +.float 509958360770.0 +.float 3.22496576746e-32 +.float 9.06615060277e-08 +.float 1.69386669887e-21 +.float 491.659999751 +.float 2.13520350267e+18 +.float 0.00087965601577 +.float 2.29966834843e+18 +.float 242374.679248 +.float 3.74922535293e-37 +.float 9.83050465389e+18 +.float 441.830874136 +.float 2.95106800726e-37 +.float 1.00116027876e-37 +.float 4.21429191984e-07 +.float 1.90990314673e-23 +.float 1941.20719505 +.float 1.55177600816e-18 +.float 5.52041870888e-25 +.float 4.40065461134e+22 +.float 8.35194002213e+31 +.float 4898525461.87 +.float 1.40486058618e-15 +.float 1.01496969096e+26 +.float 2.73809616006 +.float 4.31553910248e-39 +.float 3.01902352839 +.float 4.53149776122e-28 +.float 2.03218781275e+30 +.float 4.17634101904e+22 +.float 3.14658517963e-12 +.float 1.0754626397e-05 +.float 2.5957418743e+18 +.float 7.22188433846e+32 +.float 1.61356424384e-28 +.float 9.76852475232e-16 +.float 11558.8955877 +.float 86421886.6822 +.float 1.67480676117e-28 +.float 3.29026145117e-39 +.float 0.000217374169742 +.float 2.05266171903e-38 +.float 2.38637625697e-22 +.float 3.27111535283e-10 +.float 1.05643666195e-14 +.float 0.00687483276508 +.float 1.96374641277 +.float 12693.3428446 +.float 2.70958042616e+25 +.float 1.06536656769e+35 +.float 2.42913810864e+27 +.float 3.21007150533e+22 +.float 6.73854594298e+19 +.float 5.77666904841e-21 +.float 2.75614026772e-25 +.float 3.16139404228e+18 +.float 6.23721228157e-17 +.float 5.25380600767e-38 +.float 912.271870769 +.float 2.84953679531e-32 +.float 1.59416465764e+17 +.float 0.000171441318377 +.float 1.33975081055e-20 +.float 5.33377859794e+23 +.float 2.80782886073e-06 +.float 4.28869280388e-14 +.float 570068644.553 +.float 1.32017994439e+23 +.float 25047652.7742 +.float 7.90522055094e+29 +.float 0.0847839630097 +.float 1.17579301982e-31 +.float 6.73503462146e-11 +.float 1.37127219301e-17 +.float 7.62914842529e+29 +.float 1.62313560968e+32 +.float 0.925414350146 +.float 4.61732210997e-20 +.float 5.90444277916e-17 +.float 7.0281930359e-19 +.float 1.2992299864e-11 +.float 2.98272017577e+31 +.float 9.06729221499e+30 +.float 3.11521676784e-06 +.float 1340829786.08 +.float 4.35938785994e+31 +.float 1.48952877683e-06 +.float 4.54363431212e+31 +.float 7.76692121855e-26 +.float 1.05471154003e+30 +.float 1.58613370516e-34 +.float 9.9738540205e+34 +.float 581632.730155 +.float 1.20438055019e+12 +.float 8.06452564223e+26 +.float 1.96548466142e+14 +.float 74.034242539 +.float 2.79606705085e+35 +.float 3.07172703308e-22 +.float 0.113929286711 +.float 3.73985353678e+25 +.float 2661786147.41 +.float 0.00597549926832 +.float 5.56738070899e-19 +.float 1.31143717484e+26 +.float 1.16330888194e-33 +.float 1.54742231046e+33 +.float 6.56199863092e-24 +.float 4.02238459207e-11 +.float 3.08761179902e-06 +.float 6.82745852946e-06 +.float 1.41649704074e+36 +.float 1.4304656333e-18 +.float 3.83665802624e+13 +.float 2.76097393191e+24 +.float 3.11907415201e-07 +.float 2.12225822417e+20 +.float 4.19806781942e+29 +.float 2.91644765749e-08 +.float 1.5941053025e-21 +.float 1.25715364147e-36 +.float 7.51035037698e-07 +.float 8.0758881345e+19 +.float 3.27543959618e-32 +.float 1.13284234336e+22 +.float 216.191267363 +.float 1.13206898239e-31 +.float 4.42183047216e-33 +.float 1.3199053508e+14 +.float 2.41854267469e-18 +.float 1.85692433451e+25 +.float 5.61392117837e-25 +.float 3.71357751503e-37 +.float 8.18564302052e-22 +.float 2.41192377775e+17 +.float 1.47071573756e+34 +.float 1.54889331822e+35 +.float 2.08252571679e-36 +.float 4.2436808995e-29 +.float 6.18749797889e-38 +.float 3.5207527479e-14 +.float 9.70629791384e-16 +.float 1.76150339134e-32 +.float 9.6144635985e-35 +.float 25759627129.2 +.float 1.75808308408e+18 +.float 9.09566318649e-30 +.float 9.66628195983e+20 +.float 11945.8093501 +.float 0.000242493672738 +.float 2.79582116436e-08 +.float 4.54960119121e-27 +.float 3.37952588336 +.float 262823229792.0 +.float 6045671892.91 +.float 1.76449898364e-11 +.float 1.95989760008e-05 +.float 9.5537544923e+13 +.float 3.20988015728e-39 +.float 2.07628267269e-10 +.float 6940599.97102 +.float 2.1896451451e+27 +.float 3.53604427373e-25 +.float 680.860446961 +.float 204121.598715 +.float 3.22641879528e-20 +.float 1.59724582973e-17 +.float 5.1786930493e+21 +.float 3.91827331063e+12 +.float 2.20247573682e+20 +.float 1.86422598941e-29 +.float 1.52453287798e-18 +.float 1.07068607713e+25 +.float 4.40194107997e-38 +.float 8757.20406605 +.float 2.36990403787e-37 +.float 1.82555768242e-13 +.float 3.72741473254e-18 +.float 1.22528089534e+17 +.float 1.78918484431e-39 +.float 6.05059799705e-09 +.float 1.88132195524e+17 +.float 1.52685097322e-16 +.float 1.28355777293e-14 +.float 3.22532237029e-14 +.float 3.75371087987e+16 +.float 2.01831533081e-11 +.float 1.56222312714e+31 +.float 1.14010903371e+26 +.float 1.08910871796e-27 +.float 1.76046434823e+14 +.float 3.52426998421e+37 +.float 6.18739290445e-07 +.float 1.0102595411e+37 +.float 9.37345915993e-18 +.float 0.00570834254394 +.float 2.50072236168e-26 +.float 144191.663265 +.float 2.20307134216e-18 +.float 1.57874630136e-24 +.float 1.56212183328e+17 +.float 79862.0677328 +.float 7240695.8625 +.float 2.52602781715e-18 +.float 1.61452530081e+19 +.float 15.6958935214 +.float 6.57974039766e-21 +.float 5.71198621709e+14 +.float 604.732281711 +.float 3.82695295923e-12 +.float 3.0514770143e-17 +.float 8.40844166527e-05 +.float 7.15204224965e-06 +.float 6.46023729779e+35 +.float 2.06563067712e-35 +.float 1.58757833133e+33 +.float 0.0561977507707 +.float 3.92302461078e+18 +.float 1.22217125143e-28 +.float 2.94200457279e+26 +.float 2.17456025417e-30 +.float 16.0206026664 +.float 9.43161862607e-21 +.float 22900.4140526 +.float 0.00020815017648 +.float 0.00192056339327 +.float 5.59712778794e+25 +.float 1.03463794663e-30 +.float 1.73410851304e-29 +.float 0.0501219314442 +.float 1.34208197292e-39 +.float 207874246.373 +.float 1.02949202233e-15 +.float 9.96812292667e-20 +.float 3.13754334387e-29 +.float 831537.087434 +.float 1.70296462802e+25 +.float 4.9072256492e-18 +.float 6.75082750914e-14 +.float 9.08826991919e+24 +.float 7.77334924674e-17 +.float 9.06492358005e-25 +.float 8.89900125574 +.float 1.26347798259e-22 +.float 3.27061956471e+26 +.float 4.24322347345e+36 +.float 1889775.99967 +.float 3.00039006687e+26 +.float 2.73037088344e-10 +.float 1.00451230352e-19 +.float 2.24541046056e+33 +.float 2.77209840035e-31 +.float 7875983.68471 +.float 9.18106509613e+18 +.float 2.54067829744e-31 +.float 6.82567816948e+28 +.float 3516.3808991 +.float 8.32357384679e+24 +.float 1547388.47739 +.float 6.50022406604e-26 +.float 9.07214805492e-16 +.float 74532375.2401 +.float 5.93366033929e+18 +.float 3.91198595696e-10 +.float 9.10364999438e-38 +.float 9.40540215005e-14 +.float 9.41818977298e-19 +.float 4.74911951617e+34 +.float 1.73816807703e+37 +.float 3359408.95485 +.float 8.61090437417e+28 +.float 1.80405080094e-36 +.float 1.9906778698e+12 +.float 3.61558669157e-23 +.float 1.35045375173e-23 +.float 7.7692168599e-05 +.float 2.67399531744e+15 +.float 5.4659474938e-29 +.float 8.03249386884e-08 +.float 3.66155753893e+12 +.float 1.11466257297e-05 +.float 3.33412700288e+33 +.float 1.97724062663e+17 +.float 0.015022254617 +.float 4.5362718633e-39 +.float 1.38153541778e+27 +.float 3.99941435157e-35 +.float 4.26700525901e-16 +.float 1846.14146801 +.float 5.7668313724e+25 +.float 5251858.20316 +.float 1.17347403407e-23 +.float 12.1194810269 +.float 4.07669129027e-37 +.float 9.30025740668e-34 +.float 3.06147321316e-30 +.float 1.48472086463e-15 +.float 1.39532133372e-06 +.float 1.48575739169e-25 +.float 1.63392136367e+35 +.float 0.00118876898155 +.float 3.3876748893e-35 +.float 0.00110087952189 +.float 7.43099880453e-06 +.float 5.57904869575e-08 +.float 7.42494158454e-38 +.float 7.31620657556e-29 +.float 0.0421471557759 +.float 779.707951532 +.float 2.68842149646e-26 +.float 1.157027548e-21 +.float 1.24817166521e-06 +.float 0.0635469921928 +.float 30194.5741209 +.float 1.43725852967e+27 +.float 1.8299082484e-29 +.float 4.00640693639e-14 +.float 4.32228376144e-28 +.float 1.9459664459e+23 +.float 3.93682091144e+27 +.float 1.35613558652e-19 +.float 0.000230448221845 +.float 4.47691004705e-10 +.float 3.37184713834e-10 +.float 487567.938693 +.float 2.96667002959e+22 +.float 3.030888077e+27 +.float 1.02414967755e-29 +.float 6.76576774718e+21 +.float 8.498106791e-17 +.float 3.16802945803e-18 +.float 1.10463722875e+33 +.float 3.06455497766e+22 +.float 6.76401168659e+25 +.float 249439932.707 +.float 1.39780234981e+27 +.float 8.53562674876e+37 +.float 3.16389953237 +.float 13.0408425026 +.float 6.92391519273e-22 +.float 5.64770675428e-14 +.float 9.39051884094e+15 +.float 3.17573402694e-38 +.float 1.62280638194e+28 +.float 1.92811352128e-19 +.float 3.31097324103e+16 +.float 2.78320095809e-27 +.float 1.22442709163e-25 +.float 3.20173473275e-07 +.float 7.2161282149e-29 +.float 232.506488591 +.float 2.74410530346e-11 +.float 0.000110851262418 +.float 8.40083536766e-07 +.float 1.52313500691e+15 +.float 8.32574178911e-24 +.float 7.34766095343e-10 +.float 2.13846277268e-32 +.float 8.12631805569e+18 +.float 3.74881937976e-07 +.float 4013904.46371 +.float 839494838690.0 +.float 25472159630.8 +.float 6.1731861288e+29 +.float 1.53402519921e+38 +.float 1.88467060933e-20 +.float 1.58949368306e-35 +.float 7.1569969006e+23 +.float 8.2596244137e+26 +.float 3.06918988083e+15 +.float 2.71278704436e-15 +.float 6.81494068104e-15 +.float 10560.1302474 +.float 3011.79345862 +.float 3521.66969619 +.float 18037.376464 +.float 5.95663203003e+19 +.float 1.89592107932e-30 +.float 3.08128873113e+20 +.float 5.56062137644e-12 +.float 4.95888972522e-18 +.float 2.69433026357e+17 +.float 2.84241741028e+33 +.float 2.41849878317e-26 +.float 264224594484.0 +.float 4.04317884034e+34 +.float 4.1193513718e-29 +.float 0.00100277853879 +.float 3.18017437528e-08 +.float 13081.9909755 +.float 4.49170623632e-23 +.float 1.84012209662e-07 +.float 6.7469061112e-06 +.float 3984.86097306 +.float 0.113001526649 +.float 1.41760512203e-05 +.float 3.85284330686e+28 +.float 5.15593511166e-05 +.float 4.44051169413e-14 +.float 3.4170859117e+27 +.float 1.74053437956e+28 +.float 9.28296396188e+21 +.float 2.2835814237e+24 +.float 4.67942638207e+32 +.float 3.18992095268e+32 +.float 1.92745554887e+28 +.float 2.23096010033e+20 +.float 0.0668692319931 +.float 0.00711235005025 +.float 51388.861572 +.float 1.2998863367e-39 +.float 208720.423197 +.float 7.36620752455e+20 +.float 9.01554240059e-26 +.float 5.25911677278e+15 +.float 5.65046325489e-07 +.float 2.1882070393e-27 +.float 4.13129358319e+20 +.float 2.0345655817e+28 +.float 3.70209036045e+34 +.float 0.00338459867264 +.float 1.11191648589e+29 +.float 4.15109769909e-30 +.float 2.57543870124e-14 +.float 1.33773258894e-23 +.float 2.06086298439e+33 +.float 2.48439910929e+14 +.float 1.8246373785e-38 +.float 4.78960723774e+12 +.float 3.00256857913e-32 +.float 0.0074111535823 +.float 2.95281311341e-25 +.float 3.52499651337 +.float 4.85915458008e+22 +.float 1.5379061497e+22 +.float 1.9021442093 +.float 6.49962405494e-09 +.float 587644966.759 +.float 0.48213786304 +.float 321.982167109 +.float 57219934752.6 +.float 3.19653485346e-14 +.float 2.62824189354e+26 +.float 3.87761987716e+18 +.float 4.61510917538e-05 +.float 1.72184615209 +.float 3.7049019335e+13 +.float 0.914108781925 +.float 1.30320726064e-20 +.float 1.05384688568e+25 +.float 5.78986026832e+20 +.float 1.95795308903e+29 +.float 2.15074723733e-13 +.float 2.42369630186e+21 +.float 2.30422224807e+21 +.float 13.7509055849 +.float 8.85055427124e+17 +.float 4.53761129158e+19 +.float 1.54106108989e-05 +.float 6.89202176233e-40 +.float 2.79717608451e+21 +.float 1.69905724309e-28 +.float 4.23324820118e-28 +.float 1296.44451816 +.float 2.56142546002e-09 +.float 2.45207085063e-17 +.float 1.09719309564e-09 +.float 6.01882436463e-16 +.float 12786395549.9 +.float 1.06739251197e-06 +.float 6.40460868261e+32 +.float 1.08459974388e-07 +.float 2.73127620973e-07 +.float 1.57433459116e-24 +.float 2.94900468323e-35 +.float 2.75707094031e+32 +.float 1.18327934201e+17 +.float 2.47066925823e+36 +.float 2.07397977053e+18 +.float 8.71174031839e+13 +.float 145268556.731 +.float 1.3233690149e-23 +.float 1.29996394152e-06 +.float 1.05440446383e+35 +.float 1.581950074e-38 +.float 1.26978290735e+31 +.float 1.80804434107e-31 +.float 2.49479935808e-08 +.float 1.06302530639e+34 +.float 1.81274222933e-19 +.float 2.50519652121e-20 +.float 1.50231912519e-06 +.float 0.146758547861 +.float 4456612.36729 +.float 4.17702161012e-11 +.float 1.2238962256e-23 +.float 1.99493514487e+30 +.float 6.13119648021e-18 +.float 1.36190003229e+23 +.float 108960.549928 +.float 1.10047568837e-26 +.float 1.05785036934e+12 +.float 0.0490615973095 +.float 68811.2146185 +.float 6.45035475078e+19 +.float 2.79285960489e-13 +.float 1.19761340564e-18 +.float 4.45339260968e-10 +.float 7.02346145013e+14 +.float 4.16119127466e-26 +.float 2.82600196579e-05 +.float 2.53527131345e-15 +.float 3.35463320226e+24 +.float 1.0130141719e-31 +.float 3.87599977596e-37 +.float 1.23080083006e-06 +.float 7.12496165433e-08 +.float 1.06344667937e-27 +.float 5.99174890638e-07 +.float 2.10469617406e+23 +.float 3.04004089068e-11 +.float 25353373691.4 +.float 8.4331524224e+17 +.float 4843.33112009 +.float 1.18035686381e+23 +.float 3.08631813494e+21 +.float 0.000269804125261 +.float 1.05126038892e+18 +.float 1.57188416491e-27 +.float 7.4219225389e-36 +.float 1.21855347388e+18 +.float 1.35306886412e+16 +.float 1.38261029522e-30 +.float 9.58692962651e+13 +.float 1.66519584381e-09 +.float 2.63262654056e+35 +.float 0.00013098332012 +.float 1.41295166109e+18 +.float 49831.9597667 +.float 3.58420506897e-19 +.float 3.33863037402e-10 +.float 6.14006967283e-18 +.float 1.36396464291e-09 +.float 8.51406468996e-39 +.float 3.83755640297e-16 +.float 1.62105946743e+34 +.float 28603586756.2 +.float 92286767697.2 +.float 1.48728487323e+20 +.float 3084072965.0 +.float 2.90353587112e-28 +.float 2.41037671208e+14 +.float 6.37624539996e+27 +.float 5.75969159264e+32 +.float 3.25853940659e+23 +.float 2.08452662895e-32 +.float 0.000815923193232 +.float 4.59534801519e-07 +.float 8.33782539139e-08 +.float 9.91133130647e+22 +.float 2.5055253267e-30 +.float 1.44369842066e+35 +.float 3.64799712436e-37 +.float 0.731311863016 +.float 3.56033858736e+22 +.float 2.11411791584e+34 +.float 4.28633234177e-32 +.float 2.82972612117e-24 +.float 5.26790039519e-27 +.float 1.61850152205e-08 +.float 6.74166304979e-31 +.float 9.98622366719e+25 +.float 1.29873160027e-32 +.float 103807.012277 +.float 4.78857383969e-28 +.float 4.3356027161e+36 +.float 2.35785218766e+28 +.float 3.24379526331e-34 +.float 3.57720652362e-06 +.float 1.9726528894e-28 +.float 2.87392305275e-11 +.float 9.77832327564e+28 +.float 6.47698087641e-30 +.float 0.166046053029 +.float 66.699175322 +.float 0.00037721331261 +.float 8484857188.56 +.float 2.57774096661e+15 +.float 70427521958.8 +.float 3.43991562216e+18 +.float 3.58910731091e-19 +.float 1.1065092179e+26 +.float 6.52495503884e-15 +.float 2.96952327144e-31 +.float 4.9002835884e-09 +.float 1.10458010883e-32 +.float 3.29908126556e-12 +.float 5.24561610795e+30 +.float 1.09674554469e-38 +.float 2.55884531074e+14 +.float 0.00246282919589 +.float 3.32659056753e-24 +.float 1.18104560676e+19 +.float 4.9900249063e+14 +.float 5.21339999535e-05 +.float 2.04604434689e-30 +.float 9.92937226402e-28 +.float 1.68034968703e-05 +.float 879289.624705 +.float 6.74111367094e-39 +.float 3009962.68616 +.float 5.00971747465e+16 +.float 4.9654331923e+26 +.float 7.57099775266e+24 +.float 1.2789662253e+20 +.float 0.00539832983749 +.float 4.17339345109e+29 +.float 9.85113643927e+13 +.float 1.30330788782e-38 +.float 3.01891733525e-28 +.float 1.92171525865e-39 +.float 2.41786539868e-14 +.float 1.86629934925e-29 +.float 4.5031655043e+29 +.float 1.84899338757e+34 +.float 0.0459058314977 +.float 2.7363951522e-10 +.float 2.09886563071e+20 +.float 3.83948710417e-20 +.float 1.67532504473e+36 +.float 2.87095551741e+21 +.float 6.48242159927e+27 +.float 1990344621.03 +.float 94353.8419946 +.float 4.32201677317e+12 +.float 5.53948929527e+15 +.float 5.75287963131e+36 +.float 3.33359794237e-36 +.float 1.69272733865e-14 +.float 0.000789188178467 +.float 1.89040274864e-22 +.float 542.190227315 +.float 8.93236436104e+24 +.float 886.58588734 +.float 0.00174050980247 +.float 2.12260706512e-17 +.float 8.17151772786e-38 +.float 579623.274275 +.float 7.1167640661e+35 +.float 0.64744543459 +.float 0.000482474364829 +.float 2.40902358091e-11 +.float 3.5695242094 +.float 2.02147922237e+15 +.float 1.81559217669e-34 +.float 2.35245744076e-26 +.float 0.0347234326054 +.float 6.78604839117e-26 +.float 1.1063700195e+35 +.float 1976049679.19 +.float 4.10636144109e-38 +.float 7.56796316155 +.float 3.43596708709 +.float 2.38845903682e+18 +.float 3.01120717143e-25 +.float 1.15440771396e-27 +.float 5.72292336451e-18 +.float 5.15495055225e+28 +.float 9.45541538144e-19 +.float 1.68963824288e+14 +.float 50043101.0391 +.float 4.14216942257e-22 +.float 1.14411876492e+21 +.float 1033053.29406 +.float 57.1354062837 +.float 1.15248258843e-35 +.float 8.78576202085e-21 +.float 3.78929153644e+33 +.float 5.01237970629e+24 +.float 4.20776048836e+16 +.float 3.69919716101e+28 +.float 1.0773055106e+14 +.float 15304.5121058 +.float 5.01775760513e-39 +.float 1.17718550401e-39 +.float 1.28827322502e-08 +.float 3.17712315337e-23 +.float 1.20069237909e-12 +.float 8.21447388333e+35 +.float 2.30284520411e-21 +.float 4.34654795939e+21 +.float 2.81948021322e+29 +.float 0.0160634138498 +.float 5.85777750182e-23 +.float 1.37291129463e-32 +.float 5.5090338633e-05 +.float 1.91383833283e-38 +.float 1.99837728743e+27 +.float 1.12030193891e-26 +.float 4.85251805942e-39 +.float 5.8340676859e-10 +.float 4.5547283768e-31 +.float 4.57071310371e+24 +.float 2.24709354593e-06 +.float 2.51327869872e-23 +.float 2.82934501204e+19 +.float 2.72632666876e+16 +.float 3.03942926561e-10 +.float 1.39578986257e-36 +.float 30609997.4796 +.float 2.35645406877e-39 +.float 3181.5717651 +.float 1.76403620151e-25 +.float 237154894516.0 +.float 2.39908676409e-18 +.float 2.54531652014e-05 +.float 4.98399638216e+12 +.float 1017245.89018 +.float 6.3272021897e-38 +.float 1603.08363559 +.float 2078497232.12 +.float 4.00630196877e-21 +.float 1.08441078261e-38 +.float 2.21841495798e+23 +.float 7.24913059348e-14 +.float 2.69215821912e-19 +.float 2.84738607571e-10 +.float 2.2662045011e+32 +.float 7.06242772051e-08 +.float 1.0461125116e+17 +.float 1.00683551182e-28 +.float 1.90110056688e-22 +.float 8546948.88391 +.float 1.41095260322e-13 +.float 8.07515667404e+32 +.float 0.0218051350925 +.float 1483.61345371 +.float 1.02118692903e-39 +.float 1.02775409857e-17 +.float 1.69804123474e-31 +.float 4290.31191265 +.float 1.89406107903e-20 +.float 1.17766851993e-08 +.float 3.65526873305e+33 +.float 1.60101244011e-18 +.float 1.06982247624e-16 +.float 4.52809702182e-07 +.float 3.68778068951e-31 +.float 0.108636541129 +.float 3.50022159429e+34 +.float 553556976373.0 +.float 1.92914860576e+32 +.float 2.65408504737e+36 +.float 3.74409699137e-32 +.float 5.18736361436e+25 +.float 4.43150093355e+26 +.float 72765.2011948 +.float 4.38842233175e+16 +.float 6.01236721333e+23 +.float 2.66778519944e-20 +.float 3.8225476518e+33 +.float 5.07113646054e-10 +.float 0.00214783477638 +.float 3.34740038978e+31 +.float 1.14788655769e-20 +.float 1.1088230856e-12 +.float 0.000750789187885 +.float 2.98684328547e+28 +.float 3.94960246559e-14 +.float 0.102180550395 +.float 289832663367.0 +.float 1.15702531105e+25 +.float 5.345319694e-16 +.float 4.78983058278e+26 +.float 2.16972572473e+19 +.float 2107994045.45 +.float 8166208787.19 +.float 1.12706612436e+22 +.float 4.5145905828e+36 +.float 3.64570296157e+36 +.float 3.61730305062e-37 +.float 1.10060554016e+15 +.float 0.000362589967099 +.float 2.44262091897e+30 +.float 1.76659721857e-34 +.float 8.6764190507e-38 +.float 1.53953497796e-34 +.float 9.77906536791e+33 +.float 1.23528155707e-39 +.float 25.4317548052 +.float 247233.278041 +.float 9.46841524334e-13 +.float 2.94207325405e-05 +.float 2.87493652229e+29 +.float 1.97852825704e+14 +.float 4.13010827091e-24 +.float 5.95229780278e-06 +.float 4.74725479624e+14 +.float 1.41531255613e+36 +.float 3.85329484069e+22 +.float 12959064839.8 +.float 6.65620064075e-34 +.float 6.77121914948e+30 +.float 1.23866117159e+30 +.float 1.04155314073e-23 +.float 4.68261874476e-07 +.float 1.9405247718e-22 +.float 6.07237277097e+21 +.float 1.52763640622e-38 +.float 2.45207841611e-19 +.float 7.29802885029e-09 +.float 1.15794001529e-36 +.float 9.29716206692e-07 +.float 5.97999199178e+23 +.float 3.60532019352e+29 +.float 5.88625686594e-06 +.float 4.70091533795e+35 +.float 1.17914414583e-28 +.float 6.94651149222e-32 +.float 1.01982816619e+28 +.float 1.62149800384e-38 +.float 5.48861963152e+17 +.float 1.76447407063e+29 +.float 1.50562532292e-36 +.float 3.30826899442e+23 +.float 1.05488561934e+33 +.float 5.52257912852e-13 +.float 0.00310612359185 +.float 1.67216425548e-06 +.float 7.90675955541e-07 +.float 2.46893512016e-34 +.float 8.12208440821e+22 +.float 0.000535537501654 +.float 2.39883188636e+27 +.float 9.3813083272e+34 +.float 3.11030243266e-29 +.float 1.80042639315e-12 +.float 6.55354554868e-22 +.float 1.25321010663e-09 +.float 4.39364935842e-26 +.float 8.47800731488e-12 +.float 2.79761464117e-08 +.float 1.32167782983e+32 +.float 4.1314847026e+20 +.float 0.0447675428763 +.float 1.68618335593e+21 +.float 2.0831569672e-32 +.float 1.67170836125e-37 +.float 9.75090704152e-25 +.float 1.6254586386e+19 +.float 4.30602046963e-14 +.float 8.14302713365e+17 +.float 2.06870838098e-15 +.float 2.90309318623e+17 +.float 38435715.5356 +.float 1882.02876272 +.float 1.30546344271e+23 +.float 2117301055.04 +.float 6.93038581862e-16 +.float 9.94381745738e+32 +.float 14722006.571 +.float 2.69004941036e+13 +.float 1.05696760486e-25 +.float 427443.35756 +.float 0.118695533072 +.float 5.3393607299e-37 +.float 2.3507346615e-05 +.float 13.7694214241 +.float 8.39417025957e-10 +.float 9.6379705536e+33 +.float 2.22778484872e+14 +.float 2.39684438835e-09 +.float 3.36117510538e-16 +.float 1.47771450142e-38 +.float 3.45258341823e+34 +.float 7.89289507473e+29 +.float 5366.75737422 +.float 7.16737456918e-32 +.float 29354917374.1 +.float 4.12413539603e-38 +.float 3.02513185574e+32 +.float 1.61169626382e-39 +.float 0.000862108202491 +.float 0.290494308851 +.float 9.03161224401e+27 +.float 9.65696092723e-14 +.float 9.17468328823e-23 +.float 4.22504242798e-26 +.float 1.28159826715e+12 +.float 1.43819532301e+20 +.float 2.96118608136e+19 +.float 1.03837906654e+20 +.float 4.46063746675e-09 +.float 1.87244779942e-23 +.float 1.21730052843e-15 +.float 1.9663716722e-38 +.float 7.03576846458e+22 +.float 1.68551707581e-12 +.float 1.72144741575e+27 +.float 4.06971321354e+16 +.float 706049916593.0 +.float 2.64065495918e+13 +.float 2.82612051373e-10 +.float 2.91897438175e-20 +.float 1.35881642069e-30 +.float 7.08138825621e+16 +.float 2.33902656047e-17 +.float 2.5039620237e+23 +.float 8.27941795063e+30 +.float 0.0107717614902 +.float 1.77462676715 +.float 19534503372.1 +.float 2.49189270712e-31 +.float 3.61180019732e-37 +.float 1.46756842899e-10 +.float 10787.2169046 +.float 2.81857412095e-33 +.float 1.57957621671e-09 +.float 4.22327731336e+20 +.float 0.101039561657 +.float 0.0501916640504 +.float 3.09105443547e+37 +.float 1.46847126225e+25 +.float 3.0284302603e-14 +.float 2.22581215657e-13 +.float 8.88156628445e+35 +.float 9.53353560419e-32 +.float 7.33070331657e-30 +.float 7.33350924741e-34 +.float 1.38392548266e-12 +.float 1.93197709817e+18 +.float 1.76154124346e-30 +.float 60341.3716133 +.float 1.94699138608e+33 +.float 1.12160029949e+35 +.float 4.44763953015e+14 +.float 1.40544094808e-11 +.float 1.58006337752e-14 +.float 6.45011362119e-21 +.float 8.85189093419e+27 +.float 2.19535160186e+24 +.float 1.44734141008e-06 +.float 6.69307828516e+35 +.float 11.1291669715 +.float 3.75869686941e-27 +.float 7.55739218742e+31 +.float 1.38897224919e-35 +.float 6.76005325431e-17 +.float 6.81752860598e+34 +.float 4.65707758871e-36 +.float 9.67226852703e-28 +.float 139044.338913 +.float 3.40702137672e-19 +.float 1.66991041391e-29 +.float 1.89694896709e-22 +.float 0.00432139233836 +.float 3.40212099209e-15 +.float 4.39199669339e-17 +.float 0.0310861366878 +.float 5.29167618478e+31 +.float 1.88437708291e+15 +.float 1.68844091086e+13 +.float 8.61186359509e+30 +.float 0.00136568974995 +.float 1.2587419549e+20 +.float 2.20812248949e-08 +.float 6.04107504127e-05 +.float 3.87770535792e-07 +.float 1.85429490691e+36 +.float 9.57141338283e-24 +.float 8415745.2136 +.float 1.93259765388e+15 +.float 4.72693208846e-15 +.float 4.28331698595e+24 +.float 107434030043.0 +.float 1.27352005952e+30 +.float 5.52578002682e+35 +.float 9.96671833499e+36 +.float 6.82196902576e-29 +.float 4180169134.56 +.float 6.45440568901e+21 +.float 2.07075115849e-29 +.float 2.61538080241e-10 +.float 6.87626074344e-35 +.float 3.20887840427e+32 +.float 7.65639561563e+36 +.float 1.35734228461e-11 +.float 2.83121374038e-33 +.float 0.105921640704 +.float 3.54862559425e-25 +.float 4.55646754381e+23 +.float 1.09134236846e+32 +.float 2.4971069742e+32 +.float 1.20391706128e+15 +.float 6.64384934995e-22 +.float 0.0815985333922 +.float 0.393038278337 +.float 1.29059406192e-20 +.float 3.96724720072e-19 +.float 1.88982151547e-06 +.float 0.157616393113 +.float 2.8108600175e+35 +.float 1.96865752126e+15 +.float 0.00333890924743 +.float 1482.24825386 +.float 1.25762875683e-17 +.float 41354019261.8 +.float 0.00855088882703 +.float 6.18668699214e+22 +.float 0.124839090177 +.float 6.41868790429e-22 +.float 591106.046128 +.float 1.89497267755e-34 +.float 1.55671536481e+25 +.float 16581135562.6 +.float 8.87631542733e+17 +.float 5.1496620693e-34 +.float 2.71832496621e+17 +.float 6.72790765508e-34 +.float 2290368114.61 +.float 5.44467312708e+19 +.float 9.45816628548e+20 +.float 7.95064584389e-39 +.float 1.35435838038e-34 +.float 1.08689492149e+29 +.float 99981766.6894 +.float 6.32883270029e+16 +.float 2.23738258031e-26 +.float 1.38698159073e+22 +.float 1.56687741881e-13 +.float 1591.62298948 +.float 1.94791583758e+23 +.float 34089434645.9 +.float 2.40491697404e+35 +.float 1.60705357057e+31 +.float 8.61884386939e-30 +.float 4.30886896012e+27 +.float 1.72284774555e+16 +.float 2.95460336894e-05 +.float 2.5680369664e+33 +.float 1.68540621979e-22 +.float 8.99646051899e+20 +.float 6.1306546046e-39 +.float 254.601038665 +.float 3.00203926023e+20 +.float 1.62144697159e-28 +.float 4.99643372509e-28 +.float 3.15481674005e-27 +.float 3.55732112743e-28 +.float 0.00564138936693 +.float 2.40241852499e-35 +.float 1.16296803065e+24 +.float 3.86315351771e+28 +.float 1.00141273745e-29 +.float 9.82559830157e+18 +.float 243911.037967 +.float 1.91458270595e-07 +.float 1.44770265082e-06 +.float 2.14035245134e-26 +.float 1.53308674371e+14 +.float 0.0114423362523 +.float 5856.79224423 +.float 1.48711963212e+32 +.float 3.49334325474e-13 +.float 6.97202461379e+28 +.float 0.000434223860939 +.float 7.57907505e+25 +.float 2.25750322386e+26 +.float 2.7886581425e-17 +.float 1.20439210002e-21 +.float 3.26561451142e-29 +.float 0.000276372098139 +.float 0.78952194186 +.float 3.71098129303e-31 +.float 8.63396164112e+16 +.float 98968641.093 +.float 6.45437840133e+25 +.float 1.46769773486e-16 +.float 1.33107736194e+19 +.float 501.587786312 +.float 1.86635429362e-39 +.float 2.72413504531e+25 +.float 0.00661617641205 +.float 1.21762061361e-39 +.float 6.11274269924e+22 +.float 6.39612294144e-19 +.float 4.32685099732e+30 +.float 3434819.29667 +.float 9.67819320819e-20 +.float 6.55691726005e+35 +.float 4.59551128322e+26 +.float 2.88807516603e+37 +.float 4.43481961662e+24 +.float 3.84487773605e-28 +.float 1.91239288265e+35 +.float 1.70138100586e-37 +.float 6.04246953067e-31 +.float 0.180615208972 +.float 1.65473097098e-34 +.float 4.40436968728e+27 +.float 1.22866859059e+30 +.float 2.20617858578e-27 +.float 3.55001106325e-06 +.float 978152475391.0 +.float 1.08774613122e+30 +.float 0.000299766214055 +.float 891.863527223 +.float 1.67446728299e+34 +.float 1.13852234724e-35 +.float 0.00146516570249 +.float 6.79830836588e+31 +.float 1.03772551843e+29 +.float 887155456.912 +.float 6.47269338441e+18 +.float 8.71462360777e+31 +.float 8.50448139188e+30 +.float 5.88367815338e-28 +.float 1.33005198227e-13 +.float 1.36547923072e+17 +.float 3.89469597009e-25 +.float 121728110638.0 +.float 1.22476429696e-07 +.float 10366495310.3 +.float 3.72326215089e+25 +.float 1.16248372466e-07 +.float 9.89351988734e-22 +.float 2.95257599771e+18 +.float 3.29938299498e-33 +.float 231671.251896 +.float 5.63506243102e+24 +.float 3.44897737873e-38 +.float 17.3992530749 +.float 2.73963862391e-33 +.float 2.39679385653e-06 +.float 3.62671625349e-15 +.float 177251.515269 +.float 2.05387722309e+36 +.float 9.66971590681e+13 +.float 5.51045449761e-18 +.float 7.73934480664e-20 +.float 1.29124978441e-12 +.float 4.45075461137 +.float 5.07659890278e-22 +.float 6.4734801802e-39 +.float 5.63344842927e+35 +.float 7.69082319045 +.float 273523383133.0 +.float 9.29207928067e-34 +.float 0.70910156099 +.float 3.03334443794e-21 +.float 3.87429533761e+12 +.float 2.44330169751e+31 +.float 0.000363029820882 +.float 243.456687807 +.float 1.39976095334e-07 +.float 1.35692736045e+29 +.float 4.47304908934e-22 +.float 81901.1167568 +.float 3.58299486505e-09 +.float 3.203252658e-06 +.float 3.26210311677e-11 +.float 4.72349322111e+28 +.float 31739983.9077 +.float 73855262495.3 +.float 616486817.369 +.float 3.42161799439e-40 +.float 7.7171072878e-26 +.float 1.906660642e+35 +.float 2.42402177945e-32 +.float 9.18907906415e-18 +.float 9.1757949436e-15 +.float 5.46475761235e-18 +.float 1.98400457294 +.float 1.37753280494e+29 +.float 1.26240611032e-20 +.float 7.26377035662e+14 +.float 9766592.47623 +.float 0.0312595030806 +.float 5.14918756232e-20 +.float 271746.118699 +.float 5.47464571353e+21 +.float 8.55527421289e+28 +.float 2.71305318748e-37 +.float 219.961802116 +.float 0.00341499359619 +.float 1.71656873101e+15 +.float 1.08478813932e-09 +.float 1.01750328173e-32 +.float 4.24558502907e-35 +.float 822769689.729 +.float 0.000281728146904 +.float 0.00730898968586 +.float 7.31094950691e+14 +.float 0.00824051878122 +.float 2.26348788381e-28 +.float 4.10124485317e-17 +.float 52.7775211409 +.float 2.08711879524e-29 +.float 1.64335408009e-36 +.float 1.14316059575e-38 +.float 741.276277952 +.float 9.7722385239e-09 +.float 56446.9358477 +.float 1.6611281106e-16 +.float 6.35306976645e-19 +.float 6.33228884771e-31 +.float 5.21897620386e-39 +.float 7.13412678469e+35 +.float 1.70725804344 +.float 8.23337732843e-22 +.float 1.42107461838e-32 +.float 1.36661037325e-23 +.float 3.73652136545e-31 +.float 1.27948318914e+22 +.float 2.36351291702e-13 +.float 2.04525060326e-25 +.float 7.51575916616e+22 +.float 1.11571314521e-24 +.float 5.25835952693e+33 +.float 8.70460039631e+29 +.float 7.19477277316e+18 +.float 1.23046013311e-16 +.float 8.50443775522e+33 +.float 6.12179832796e+15 +.float 1.44705553438e-19 +.float 1850820.18783 +.float 4.33311614379e-38 +.float 1.00857403343e+21 +.float 1.0963185166e-31 +.float 0.028514816324 +.float 3.17856667823e+37 +.float 2.83861455854e-15 +.float 256041.790304 +.float 4.14593340961e-29 +.float 1.06373163287e+26 +.float 4.52830419507e-38 +.float 7.40555337493e-29 +.float 203065826863.0 +.float 9.34000499954e+26 +.float 2.83748644133e-10 +.float 1.03130189027e+14 +.float 5.06679553796e+14 +.float 5.61883436462e-19 +.float 8.7319078111e+15 +.float 1.26864648708e-18 +.float 3.18486312229e-27 +.float 6.00405217059e-25 +.float 5.66870397271e+24 +.float 2.2828560401e-26 +.float 3.27715370427e-08 +.float 0.0479775537599 +.float 4.23171414827e-26 +.float 7.16925277797e-34 +.float 1.60377548546e+27 +.float 6.53263246504e+28 +.float 4.07428696825e-05 +.float 0.169484881419 +.float 2.58485753622e-11 +.float 2.76495808508e-10 +.float 211.149054017 +.float 3.29252567273e-16 +.float 1.15643123161e-38 +.float 3.21580286533e-32 +.float 6.34864832017e+34 +.float 4.79537994177e-09 +.float 255042.201569 +.float 4.61820133485e+23 +.float 6.46507077005e-05 +.float 1.49579143937e+35 +.float 9.28225018582e-39 +.float 5.55657047815e-30 +.float 1.44684042777e+35 +.float 1.04314473226e-30 +.float 1230075.52106 +.float 363.460899018 +.float 2.13553724116e-24 +.float 5.24363294288e+14 +.float 2.08713241308e-13 +.float 4.3216510575e-07 +.float 2.28471763114e+36 +.float 1.4341896581e-12 +.float 8945563.60707 +.float 1.54458579527e-29 +.float 4.31586801488e-07 +.float 1.1350762424e-39 +.float 8.09554980399e-09 +.float 2.03734456152e+18 +.float 2.09521677465e+16 +.float 20714488062.7 +.float 4310624516.72 +.float 6.65314994302e-21 +.float 8.68953665847e+30 +.float 2.78208137245e+27 +.float 2.78430406376e-11 +.float 208.663686178 +.float 2.60343197409e+24 +.float 7.81862954849e-20 +.float 1.69221023437e+14 +.float 3.02417850481e-27 +.float 7.40911824709e-26 +.float 484246186.116 +.float 1.18755946806e-34 +.float 9.01721411657e-34 +.float 3.92221096802e+29 +.float 2.04774669905e+15 +.float 3.58035319614 +.float 6.13085883036e-07 +.float 2.38681549433e+13 +.float 2.74993944405e-33 +.float 8.5491758333e-13 +.float 1.99102008318e+19 +.float 9.07005158345e+36 +.float 3.35712750914e+20 +.float 4.36689580347e+12 +.float 5.50250428324e+35 +.float 100821049.776 +.float 6.40816945727e+25 +.float 2.09107366514e-19 +.float 7.32912341125e+31 +.float 4.58223217256e-26 +.float 4.39607110372e+31 +.float 3.06432111456e+26 +.float 2.11727463832e-33 +.float 0.000103353408809 +.float 9.19446221253e+24 +.float 3.5245958535e-12 +.float 3.5297727102e-32 +.float 8.20671993469e-25 +.float 2.05127594136e-15 +.float 8.61167619591e-33 +.float 660622158468.0 +.float 3.325650938e+24 +.float 1.98496959254e-22 +.float 5.52195410556e-36 +.float 3.99738170335e+29 +.float 117.573436947 +.float 4.40572451888e-10 +.float 1.97490391061e-13 +.float 6.71121073942e-25 +.float 8.43554492397e-26 +.float 1.73791186206e+19 +.float 2.16121458016e-23 +.float 8.40148960329e-15 +.float 619548.124101 +.float 5.03740381643e-23 +.float 3.75997255476e+23 +.float 0.000144470987642 +.float 9.36209913875e-18 +.float 7946077399.27 +.float 3.91164865967e-35 +.float 3.77073617847e-07 +.float 344.345252021 +.float 31.2282159962 +.float 7.56250713565e-07 +.float 687.367555424 +.float 1.65324539767e-34 +.float 1.16358834886e-06 +.float 3.30135501773e+28 +.float 5.29402728776e-15 +.float 5.18457596213e-33 +.float 7.64400294148e-30 +.float 5.00019407375e-05 +.float 5.08610190729e-37 +.float 1.04866771905e-13 +.float 1.73916401043e-29 +.float 1.94865641674e+23 +.float 5.05482546824e-11 +.float 0.107809916636 +.float 1.96035727375e+17 +.float 3.24407994437e+16 +.float 1.3112012194e-31 +.float 1.58903205975e+25 +.float 1.44035481574e-33 +.float 6.02582004127e+30 +.float 9.6831042089e-35 +.float 4439450141.31 +.float 463413238995.0 +.float 7.72480650174e-06 +.float 1.27681225489e+27 +.float 1.53700725651e-31 +.float 9.99225786582e+18 +.float 1.00443293557e+25 +.float 2.35488162877e-39 +.float 49002328442.8 +.float 55066070.5956 +.float 1.42861063513e-36 +.float 4.08156231228e-30 +.float 137095.924238 +.float 0.000317703695696 +.float 6.78999430794e+21 +.float 2.50926830098e-17 +.float 140937.048755 +.float 1.70842114801e+15 +.float 3.65066460886e-14 +.float 7.22782252739e-25 +.float 5.22913940143e+33 +.float 1.35999899645e+34 +.float 5.68451670914e-21 +.float 1859810679.29 +.float 2.65194127318e-39 +.float 4.46018479121e-35 +.float 253666.519132 +.float 24761609.881 +.float 6.13877583922e+26 +.float 1.36215087696e+28 +.float 1.26106417264e-29 +.float 2.28259880253e+17 +.float 2.04936803925e-13 +.float 1.20670642259e-08 +.float 1.19814377831e-27 +.float 288.599500597 +.float 7.21192782798e+17 +.float 2.82420258633e-33 +.float 13541.7625394 +.float 2.51031554064e-37 +.float 1.32220551965e-23 +.float 1.83407676872e+25 +.float 6.05508012872e+33 +.float 5.55322637915e-05 +.float 1.13619771709e+35 +.float 4.24236914022e+22 +.float 8.35795951062e+35 +.float 1.4167079778e+17 +.float 1.29073592511e+20 +.float 2.56615556561e-11 +.float 3.38076732002e-12 +.float 1.82916576969e+24 +.float 3.25722394617e-29 +.float 3.81322653013e-22 +.float 56738946.4603 +.float 1.04871803127e+17 +.float 2.01196957335e+34 +.float 2.06538195853e+27 +.float 104.342367706 +.float 1.26157204603e-37 +.float 1.21497170204e+21 +.float 25425310209.4 +.float 2.68815603232e-10 +.float 4.50264903348e+24 +.float 3.87692520082e-06 +.float 1.58915998634e+16 +.float 1.59971087814e-29 +.float 3.25733935901 +.float 1.37463749906e-27 +.float 2.81861822736e+15 +.float 1.40119098495e-09 +.float 1.33046202946e+32 +.float 1.91194138276e-39 +.float 2.2724129883e+26 +.float 2.88813472877e+23 +.float 2.5089552943e-20 +.float 1614.7204333 +.float 2.17280116186e-21 +.float 9.51750532522e-29 +.float 2.7368138911e-36 +.float 5.13328260194e+33 +.float 1.8406647088e+27 +.float 1.6084106299e+35 +.float 1.80734027026 +.float 3.84003107529e+32 +.float 1.8074657616e-18 +.float 8.50690043437e+32 +.float 0.000168390902288 +.float 3.09704355055e-12 +.float 0.016770048532 +.float 5.22915421244e+14 +.float 2.66892702424e-30 +.float 0.000219300666511 +.float 0.000100234213244 +.float 3.55317393517e+15 +.float 1.11531480998e-24 +.float 1.28817440655e+14 +.float 7.37441791002e+23 +.float 1.17251641441e-36 +.float 8.13338280361e+21 +.float 3.18048626126e-15 +.float 1.9048534441e-14 +.float 2.52756934499e+23 +.float 5.46274357123e-28 +.float 3.21973457343e-19 +.float 10406.7998549 +.float 1.78742001955e-22 +.float 7.58188670969e+23 +.float 1.76963924608e+36 +.float 205.712308959 +.float 1.40185960725e-33 +.float 4.22488095493e+12 +.float 2.21548401911e+12 +.float 1.05460643108e+18 +.float 231548674.803 +.float 40120479.4311 +.float 3.46825718302e-18 +.float 1.87995718714e+18 +.float 92075435978.9 +.float 8.44680234025e+33 +.float 57.6012098173 +.float 1024887.23908 +.float 2.60191998002e+22 +.float 1.23784211176e-30 +.float 8.8493444436 +.float 6.61457127042e-10 +.float 8.9719686536e-26 +.float 8.59634662238e+15 +.float 4.17216235733e-16 +.float 7.06096049517e+34 +.float 133813.765096 +.float 8.25335774981e-09 +.float 1.91414234193 +.float 17.6388253962 +.float 116210864567.0 +.float 2.79442035881e-36 +.float 9.73567030703e-38 +.float 1.10920259942e+30 +.float 3.20248213757e+36 +.float 2.42140481715e-26 +.float 7.32053914186e+13 +.float 9995424496.3 +.float 1.38103575726e+14 +.float 1.08545499951e+29 +.float 0.000111806242024 +.float 9.16819109754e+26 +.float 3.21599484349e-31 +.float 1.05348712658e-12 +.float 1.75891666033e+32 +.float 3.26064301647e-10 +.float 2.50745608033e-31 +.float 0.000377704474678 +.float 9.88074841202e-35 +.float 3.49344361758e+24 +.float 1.02763658408e+28 +.float 12.1591386054 +.float 3.16061663156e-39 +.float 3.2832293771e-16 +.float 1.85500135633e-30 +.float 5.74018291027e+28 +.float 5.78115568561e+27 +.float 6.58053337799e+13 +.float 22277.7503189 +.float 2.21090513072e+27 +.float 1.26249347662e+24 +.float 9.23234430778e-10 +.float 14119024210.8 +.float 270.317179416 +.float 1.22895369215e+28 +.float 3.3993452535e-26 +.float 7.3871910105e-10 +.float 4.09670741682e-26 +.float 1.13057037359e-29 +.float 6.04254742978e-38 +.float 9.00041678838e+33 +.float 0.59965247736 +.float 4.24019710213e-30 +.float 2.87057524513e-23 +.float 3.25826251405e+33 +.float 8.80667563775e+27 +.float 1.66390857041e+14 +.float 4.81114846066e-33 +.float 4.94768296509e+17 +.float 0.000135028898157 +.float 1.03530873341e-36 +.float 1.14623425983e+33 +.float 3.12112549112 +.float 3.00323865193e-26 +.float 18255.2878252 +.float 0.0593410466492 +.float 117.156193011 +.float 3.39494653698e+22 +.float 2.51984229116e-09 +.float 6.52207124532e+35 +.float 1.35778018403e-08 +.float 117963.014209 +.float 6.6731092031e+36 +.float 4.03053339055e-08 +.float 2.21606688412e+22 +.float 6.93517161359e-38 +.float 2.61733787268e-12 +.float 5.11028021491e+19 +.float 7.08265912678e-38 +.float 1.67779437771e-16 +.float 4.62721094494e-12 +.float 3.57650905308e+21 +.float 3.40842144255e+12 +.float 4.5917632124e+26 +.float 1.15754853187e+25 +.float 2.75938979428e+32 +.float 8.33905783773e-07 +.float 3.00674870356e+37 +.float 4.94727567331e+14 +.float 8.69839392589e-10 +.float 1.67604279051e+31 +.float 3.05040900972e+25 +.float 58.1018904183 +.float 1.23458981608e-28 +.float 1.42995336999e-07 +.float 1766.1475236 +.float 21336628.9882 +.float 1.31879495396e-31 +.float 67.7981836984 +.float 7.72989915866e-13 +.float 1.35195152002e-24 +.float 2.61360354398e+27 +.float 1.69249116207e+17 +.float 19424.9526744 +.float 9.3534339742e-23 +.float 1.54061786399e+29 +.float 7.18058216897e-35 +.float 0.0913297393313 +.float 8.19711258878e-33 +.float 6.48802640802e+18 +.float 1.86062797721e-38 +.float 8.33298457599e+19 +.float 1.75073846426e-34 +.float 1.13651554798e-17 +.float 8.90523751751e-32 +.float 8307400899.84 +.float 2.2861272524e-12 +.float 1.685210446e+34 +.float 1.05749501232e-38 +.float 8.96185269284e+35 +.float 4.44343321585e-37 +.float 3.64025507611e-35 +.float 3.89474953251e-19 +.float 1.97881121504e-10 +.float 6.78425620662e+27 +.float 0.00711535105667 +.float 5.3267193128e-26 +.float 5.41094058825e-05 +.float 3.37942497842e-35 +.float 3.37052158681e+20 +.float 4.76151835745e-36 +.float 8.99940390654e+30 +.float 5.83874259957e-30 +.float 4.38537140641e+31 +.float 0.108547126163 +.float 3.53418639467e-37 +.float 608.293008995 +.float 18155.9607242 +.float 6.87869923664e-19 +.float 5.97235792458e-36 +.float 2.84578524087e+20 +.float 4.6195497489e+23 +.float 7.03406010211e-26 +.float 2.12768437596e-09 +.float 1.32249994471e-09 +.float 1.50630064352e+17 +.float 4.1745301142e-32 +.float 5.57068006459e+24 +.float 1.91640473608e-33 +.float 3.78264642304e+20 +.float 9.52308349e+26 +.float 1.18978262762e+33 +.float 4.90130191289e-24 +.float 1.81430991479e-31 +.float 8.40542949433e-18 +.float 9.42019193196e-07 +.float 1.04095819777e-09 +.float 2.06405315602e-15 +.float 7.84575221179e+14 +.float 2.27343496262e-11 +.float 0.000159207337871 +.float 4.79436562493e-34 +.float 1.00093723611e-09 +.float 2.08466160688e-15 +.float 2.27203917276e+14 +.float 2.49021062264e+36 +.float 1.04129691056e+36 +.float 1.04677191623e+32 +.float 5.29134686442e+18 +.float 2.93179664699e+34 +.float 0.122672486171 +.float 6.92930442513e+28 +.float 1.19397540135e-39 +.float 4.40992214697e-38 +.float 8.4173892236e+17 +.float 0.00337936529337 +.float 91798520.3061 +.float 2.8155372076e-19 +.float 0.000110381110679 +.float 5.01377339244e+31 +.float 9.48386424401e-34 +.float 2.79556105256e+19 +.float 1.47846718651e-30 +.float 2.82062531239e-22 +.float 1.85219729508e-31 +.float 0.912936845709 +.float 2.24584388608e-36 +.float 1.48693553686e+38 +.float 1.81621025064e+31 +.float 5.7834334723e-36 +.float 3.08149090927e-30 +.float 28279.7524203 +.float 1.46455219372 +.float 14772.4152086 +.float 2.50789184278e+29 +.float 1.03367176907e+14 +.float 0.0280072813512 +.float 1.77759881987e+24 +.float 2.05403549985e-25 +.float 4.99699685416e-08 +.float 4.19967549974e-15 +.float 58304277305.1 +.float 3.11483139708e+28 +.float 1.28144680274e-31 +.float 22650.6091152 +.float 15317832391.3 +.float 3.10575736645e-31 +.float 0.00730474355099 +.float 1.62444270018e-15 +.float 3.45506604308e+22 +.float 526359277384.0 +.float 8.37529216386e-32 +.float 1.7980690862e+28 +.float 2.88780676191e+28 +.float 1.94683118444 +.float 1.81322250935e+30 +.float 1.05922866891e+37 +.float 1.82059609087e-13 +.float 1.05659116097e+24 +.float 3.47430661759e+27 +.float 2.41736680947e+34 +.float 1665253.36836 +.float 177618117508.0 +.float 806.146694079 +.float 1.44845345623e-27 +.float 1.09097075154e+19 +.float 1.32751970322e-24 +.float 4.53735950589e+12 +.float 1.04560516114e+21 +.float 5.82022704364e-30 +.float 1.37068560474e+23 +.float 1.00770259255e-12 +.float 6.9461321183e+19 +.float 3528571630.73 +.float 1.40493499412e-31 +.float 7593158029.7 +.float 1483991208.43 +.float 5.04430076294e-08 +.float 16100.3131038 +.float 1.02640154429e+32 +.float 3.83298690602e-17 +.float 1.00279645784e+21 +.float 1.06391878395e+24 +.float 1.36619496637e+32 +.float 7.31872950261e-20 +.float 4.60133281984e+36 +.float 1.33763455202e-27 +.float 6.57330176996e-06 +.float 8.27495226478e-10 +.float 5.34084060299e+22 +.float 7.99685031536e-39 +.float 7.61365423871e+18 +.float 1.05215966653e-10 +.float 1.88516237157e-27 +.float 0.048397436854 +.float 22509.9585825 +.float 2.02275669501e-27 +.float 2.810765043e+31 +.float 7.27646676245e-16 +.float 1.38191531593e-39 +.float 7.72179087152e+18 +.float 3.25306739602e+14 +.float 1.84576423346e-36 +.float 2.28130155815e-34 +.float 2.16375751046e+19 +.float 3.76069682187e+21 +.float 1.10956041867e+36 +.float 1.53535170004e-27 +.float 0.00259691238115 +.float 4.99862276802e-21 +.float 6.50447083097e+16 +.float 5.62061299608e-27 +.float 253018496438.0 +.float 6.08544973664e-11 +.float 2.85713648783e-17 +.float 6.67319667167e-34 +.float 6.82944840652e+24 +.float 1.14521657308e+31 +.float 3.31090324444e+35 +.float 2.24322456975e-26 +.float 7.15365008176e+21 +.float 2.40273699914e-20 +.float 1.01720567209e-05 +.float 1.22090832921e-36 +.float 5.06413348976e+14 +.float 1.02735391908e-24 +.float 5.40205739867e+14 +.float 997.897553952 +.float 7.96655043545e+34 +.float 2127.25890954 +.float 6.91499632349e+14 +.float 171484468.573 +.float 1.0217083598e-36 +.float 1.3423530667e+27 +.float 1.02352092689e+24 +.float 3.66338810438 +.float 4.1717294212e+25 +.float 7.17909071418e-30 +.float 1.77417787992e-08 +.float 5.19254272836e-33 +.float 3.62970134875e-39 +.float 9.30406526683e-16 +.float 8.28819495231e-08 +.float 1.38588772224e-22 +.float 6.80231960818e-14 +.float 1.27707064732e-33 +.float 1.6585547417e+22 +.float 104761160.979 +.float 3.79600146316e-36 +.float 11.7556038003 +.float 2.02971171334e+26 +.float 1.53813663796e-15 +.float 6740179.66658 +.float 2.37005532179e+19 +.float 9.79218565782e-20 +.float 267720531.311 +.float 1.90459242752e+25 +.float 1.40045800954e+19 +.float 1.88238564021e-11 +.float 1.20694651009e+16 +.float 2.68219187365e-36 +.float 4.48729048728e-21 +.float 1.66041365082e-13 +.float 2.26950276628e+34 +.float 20541434.8825 +.float 7.04695552005e+22 +.float 1.37134515226e-11 +.float 0.00326299897637 +.float 8.28686127131e+32 +.float 3.62927548306e+36 +.float 3.32373078546e-16 +.float 68406.2001995 +.float 3.12025044581e-36 +.float 1.40252103834e-06 +.float 5.92287382981e-32 +.float 3.73105388195e-18 +.float 3.92242877162e+33 +.float 7.39565578323e-13 +.float 5.79700870128e+26 +.float 4.38899215227e-22 +.float 3.23646000658e-19 +.float 1.28194733722e+35 +.float 1.12550210023e-29 +.float 3.22177311426e-05 +.float 207221.407616 +.float 3.31282165588e-09 +.float 1.0571030423e-38 +.float 2.78217278266e+24 +.float 0.120936466706 +.float 3.5370160738e-16 +.float 1.21581538413e+23 +.float 2.22526636459e-29 +.float 5.30822259225e+23 +.float 0.000228360615171 +.float 0.000222127630413 +.float 8.21752975302e+26 +.float 6.66521306832e+30 +.float 1.45263035385e+35 +.float 4.68388484621e+25 +.float 95388165.2138 +.float 17146738.1901 +.float 6.23940112259e-36 +.float 100.946549744 +.float 8.29554878083e+24 +.float 8.95840767079e-13 +.float 4.05580991582e-26 +.float 8.39236056102e+30 +.float 6.68973256263e-21 +.float 1.45341275903e-34 +.float 957777927.444 +.float 9.60769976595e-37 +.float 8.0071867945e+18 +.float 7.10290538275e+22 +.float 0.00748176340213 +.float 1.24141421749e-37 +.float 1.35029824253e+33 +.float 1.99023781936e+19 +.float 2.17111867222e+22 +.float 1.65395797517e-31 +.float 3.88106547665e+25 +.float 5.20047572784e+32 +.float 1.12471773169e-34 +.float 3.80941267441e+15 +.float 1.9592850124e+17 +.float 65445.0836872 +.float 1.46281473186e+29 +.float 5.99801645206e+33 +.float 7.00049232407e+29 +.float 5.20229105547e-15 +.float 152227.342854 +.float 0.184659045009 +.float 1.28406737598e-27 +.float 3.35917047139e-21 +.float 7.32715743281e-07 +.float 6.54990885745e-12 +.float 7.18717772707e-21 +.float 2.66157976977e-25 +.float 5.46893220453e-10 +.float 7.42473209427e-24 +.float 3.35390669294e-24 +.float 9918094551.85 +.float 4.66326670372e+33 +.float 1.56646312309e-39 +.float 2.55667493284e-16 +.float 7232040.32235 +.float 3.93385819935e-13 +.float 6959047601.49 +.float 1.33911441835e-05 +.float 2.24670078042e-13 +.float 30657240.8469 +.float 4.65981285531e-08 +.float 1.4940204674e+32 +.float 4.43305108842e-35 +.float 0.000237609469432 +.float 0.000175176963172 +.float 405785.205587 +.float 2.45021907341e-33 +.float 866.115917365 +.float 368.155444784 +.float 1.27028827952e+24 +.float 5.41246128134e-16 +.float 30570153.8797 +.float 1.08367362369 +.float 6.45374168279e+22 +.float 3.00884021881e+23 +.float 1.05922018793e-09 +.float 1.05408996372e-22 +.float 7.19455394605e+20 +.float 0.000753294978087 +.float 2.09225762498e-23 +.float 1.71580392031e+25 +.float 1.26724628558e+17 +.float 2.38783557461e-19 +.float 1.29920212853e-12 +.float 2.71233112958e-39 +.float 2.6773925591e-11 +.float 2.85431480218e-24 +.float 9.41984154492e+25 +.float 5.83356904047e+12 +.float 515951020.901 +.float 1.50348276788e-32 +.float 1.09614615672e-26 +.float 2.58709070609e-23 +.float 2.0326056803e-13 +.float 5.82726227273e-13 +.float 0.00952590504865 +.float 9.17094670332e-38 +.float 1.53575405682e+17 +.float 772530992.31 +.float 7.36075639379e-10 +.float 1.55645165939e+16 +.float 8.13066198279e-21 +.float 9.10767809916e-24 +.float 3.37885125701e-08 +.float 5.26431539155e+34 +.float 2.68629107266e-23 +.float 9.14443135079e-35 +.float 6.31830494013e-12 +.float 2.16927462839e-05 +.float 7.18915078652e+24 +.float 1984.56514621 +.float 5.25076024467e-25 +.float 13729302.4954 +.float 0.00191911223378 +.float 2.50665628592e+13 +.float 2.32621812414e-37 +.float 25.0709039449 +.float 1.95702847393e+30 +.float 63.6246239345 +.float 436618.101346 +.float 1.55505062485e-07 +.float 3.01889101168e-22 +.float 4.15505883867e+34 +.float 9.38369501519e-35 +.float 5.1110201824e-18 +.float 1.62236349519e+29 +.float 9.60943903696e+18 +.float 196093615.176 +.float 8.75996032056e-40 +.float 1.5807546292e-21 +.float 3.67918255587e-22 +.float 1.00442403023e-10 +.float 7.27298672458e-25 +.float 3.9959425297e-29 +.float 4.37257869651e-11 +.float 2603723.20418 +.float 2.76750533073e-31 +.float 6.50847030027e-39 +.float 118.562349264 +.float 1.99365186077e-22 +.float 2.80742580926e-13 +.float 4.43260361621e-10 +.float 2.27110012978e+20 +.float 2745516.1776 +.float 1.78995530082e+18 +.float 1.64677315417e-26 +.float 7.57806950175e-14 +.float 1.02424158601e-08 +.float 1.79332076964e-10 +.float 3.91072027025e-13 +.float 6.16417828799e-06 +.float 3.42099981676e+36 +.float 2.11505445781e+37 +.float 1.07039768903e-12 +.float 1.01426824542e-06 +.float 2.87861297778e-08 +.float 2.08633329867e+29 +.float 7.18196299313e+37 +.float 7.87135641438e-09 +.float 479.090538257 +.float 4.00221693772e-19 +.float 1.01328606376e+29 +.float 3.05934349641e+16 +.float 1.61233049101e-27 +.float 1.41718513677e+12 +.float 2.8784001295e-18 +.float 5.59108411806e+21 +.float 2.5327212851e-19 +.float 1.44132248779e+25 +.float 2.2755089737e+19 +.float 0.394657335864 +.float 6.86534127473e-11 +.float 3.22715271327e-12 +.float 3523720192.05 +.float 2.06441438086e-08 +.float 5.60157253903e-11 +.float 9.47827397904e-14 +.float 7.95653156479e-31 +.float 2.92519769593e-30 +.float 1.60084121105e-27 +.float 8.59369147658e-08 +.float 3.27199485782e-29 +.float 9126883.09135 +.float 3.24670969177e+13 +.float 67255559087.8 +.float 1.17914295513e-13 +.float 2.77597085166e-30 +.float 1.14626891228e-27 +.float 4.90359791753e-26 +.float 4.80775989017e+29 +.float 9.50568119252e-18 +.float 1.03544770626e-09 +.float 4.95991475354e-26 +.float 8.07362987308e+35 +.float 7.08686362018e-34 +.float 3.33620811239e+15 +.float 1.76623473891e-15 +.float 4.20869389665e-21 +.float 1.26477330712e-09 +.float 2.73807407505e-11 +.float 2.15197365606e-28 +.float 1.92491031213e-05 +.float 4.07747518261e+32 +.float 7.34558570682e+31 +.float 2.84480620035e+31 +.float 1.31865924673e+33 +.float 6.76930297369e-13 +.float 1.30416472227e-19 +.float 5.06711117953e-21 +.float 4.71427881394e+23 +.float 1.50547176893e+22 +.float 8.09890980156e-07 +.float 0.1075813305 +.float 2.2090948203e-32 +.float 0.000205166481923 +.float 2.91500149991e-22 +.float 2.1333178021e-39 +.float 3.03469048706e-26 +.float 2.19060208459e+33 +.float 1.17937419962e+19 +.float 1714209.1014 +.float 1.84804728457e+28 +.float 1.14948809862e+31 +.float 3.33100615783e-28 +.float 2.07868890698e-21 +.float 83.0941279782 +.float 4.3902556416e+21 +.float 3401.86515344 +.float 2.25400938974e+26 +.float 2.05545151072e+14 +.float 2.27024157993e-38 +.float 1.23095629065e+15 +.float 14.4927662628 +.float 1.4730994638e-29 +.float 1.63882433114e-30 +.float 115.366308756 +.float 19.692313537 +.float 2470470991.01 +.float 8.36186207618e-35 +.float 2370773111.5 +.float 130345304734.0 +.float 12397624028.3 +.float 1.61282122917e-09 +.float 9.49309393823e-22 +.float 1.164119072e-20 +.float 1.36050273595e-12 +.float 912640678.016 +.float 5.91021602014e-22 +.float 0.000913912003493 +.float 6.44100681723e+20 +.float 4.14797862783e+12 +.float 0.0249426570187 +.float 6.40366533977e-28 +.float 1.97992091647e-10 +.float 1.2827720384e-25 +.float 3.41683139068 +.float 2.84744133241e+13 +.float 1.53193772002e-28 +.float 1.90505656618e+14 +.float 1.56911779887e+32 +.float 8.76922715527e-23 +.float 1.08096494935e-32 +.float 1.70486318485e+24 +.float 2.36253400057e+36 +.float 3.42202725274e+13 +.float 0.000217766863811 +.float 4.84623228368 +.float 2.98773868872e+13 +.float 3.6431733673e-35 +.float 19698905438.1 +.float 1.73162894375e+34 +.float 6.82919721896e-36 +.float 2.35988520969e-06 +.float 5.96817576739e-31 +.float 2.11095914362e+36 +.float 9.05819869259e-09 +.float 694348.704063 +.float 5.05352390764e-20 +.float 9.66262044129e-26 +.float 5.47249863078e+32 +.float 221191.958107 +.float 8.20048158164e+27 +.float 3.04967231323e+21 +.float 6.12315966284e+30 +.float 4.48506352918e+22 +.float 1.52061850592e-20 +.float 4.15957873546e-16 +.float 1.80384075479e+18 +.float 2.21024353741e-12 +.float 1.5664211618e+31 +.float 3.18488064818e-31 +.float 1.2575879951e+17 +.float 1.78320964823e-35 +.float 0.00010841455531 +.float 1.0764191391e-31 +.float 5.84432681465e-34 +.float 9.13877224194e-07 +.float 6.39735702026e-36 +.float 3.68537669157e-35 +.float 2.12526061924e-27 +.float 1.24068827672e-11 +.float 3658739.35099 +.float 2.31010607559e-33 +.float 1.60967098482e+28 +.float 3.01065632523e-25 +.float 4.99675300389e+36 +.float 3.56958554883e-06 +.float 1383712.08284 +.float 1.62586179091e-37 +.float 2.9727251775e-20 +.float 71885.8115432 +.float 2.28472411234e+13 +.float 4.43968278993e+29 +.float 3.67088606684e+19 +.float 1.75569549035e-12 +.float 4.18677859775e+14 +.float 2.25060506244e+14 +.float 5.46436521106e-12 +.float 3.63275248951e+14 +.float 20.6163076725 +.float 956.813052785 +.float 7.29813198437e+25 +.float 1.38574118558e+19 +.float 2.60101873979e-12 +.float 2.46917586146e+33 +.float 2.71478351088e-05 +.float 4.30263632308e-31 +.float 2.5967230568e-15 +.float 8.46353523606e+28 +.float 1.77407486807e-25 +.float 1.2660933555e-38 +.float 3.69392134362e+13 +.float 2.74477671914e-07 +.float 2.94803197844e-16 +.float 6.36122767073e+32 +.float 1.9507600612e-15 +.float 2.1153918821e+37 +.float 2323.76063248 +.float 6.50668817247e-25 +.float 9.04272641801e-33 +.float 5.94804619785e+19 +.float 7.67413933499e-12 +.float 0.168854609475 +.float 1.32748864149e-34 +.float 0.0959349327548 +.float 9.19895339056e-35 +.float 410305.445151 +.float 2.14869439425e-19 +.float 4.69368190862e-11 +.float 5.458043531 +.float 2.59849676631e+27 +.float 7.64161521507 +.float 0.00731810573884 +.float 1.28371268859e-26 +.float 2204256408.14 +.float 2.83231755531e-39 +.float 1.12522339901e+12 +.float 6.86616769129e+31 +.float 0.00710792244283 +.float 129.707387408 +.float 2.2901515837e-38 +.float 3.9547598384e-28 +.float 2.14194309519e+25 +.float 3.98617310503e+37 +.float 6.46810916869e+36 +.float 3.34009769374 +.float 1.24572003946e-19 +.float 219886563939.0 +.float 0.0348518699985 +.float 2.44633575752e-29 +.float 1.49150282606e-27 +.float 3.89730498011e+12 +.float 4.30706293979e+34 +.float 362811.541437 +.float 4.52910358633e+24 +.float 4.85239512215e+30 +.float 1.42283991759e-08 +.float 7.52717493759e+31 +.float 6447.02054556 +.float 1.71057194966e-12 +.float 1.06477366437e+13 +.float 4.10319346746e-32 +.float 1.49860716846e-37 +.float 0.000424285612528 +.float 8.90298863992e+34 +.float 4.08176197619e-13 +.float 3.93745122656e-28 +.float 2.82543448982e-12 +.float 4.11567739833e+37 +.float 3.54173958992e+37 +.float 1.20008519861e+33 +.float 1.5795252355e+34 +.float 1.62628690571e+31 +.float 8.55123505101e+35 +.float 2.8942801753e-21 +.float 9.65972961613e+25 +.float 1.0142482545e+17 +.float 5.43078885269e-30 +.float 15475185341.5 +.float 1.4906970952e+19 +.float 4.43566900391e+33 +.float 105.960323115 +.float 8.81519395393e+14 +.float 3.69390363814e+23 +.float 9.68858214583e-30 +.float 3.38145483656e-26 +.float 9.06449244795e+33 +.float 7.45160242541e-39 +.float 2.14805057306e-38 +.float 5.33914195753e-36 +.float 0.113378517545 +.float 6.88316929817e-12 +.float 1.92093732001e-20 +.float 1.70621964705e-25 +.float 4.25153828228e+31 +.float 5.14876198086e-36 +.float 59.3505857182 +.float 1.62199147023e-19 +.float 7.87985038159e-16 +.float 1.90566122014e-06 +.float 4.98405280609e-24 +.float 3.93187384503e+23 +.float 38.100472892 +.float 1.58324326212e-23 +.float 2.9453477614e-28 +.float 3.95930279448e-19 +.float 1.24397021196e+23 +.float 2.29410702731e+21 +.float 5.83848291897e+14 +.float 1878159.77149 +.float 2.65346059399e+15 +.float 9.12486450431e-36 +.float 511121.467861 +.float 3.18632670409e+33 +.float 6.28688399202e+34 +.float 4.29825102152e-10 +.float 3.16424846916e-15 +.float 6.3144809923e-21 +.float 1.94269223949e+31 +.float 1.66993263115e-37 +.float 4.32829247789e-33 +.float 4.90638401535e-25 +.float 1.85285390503e+29 +.float 135.819064228 +.float 5.15934950111e-31 +.float 6.33894017746e+35 +.float 6.60960541039e-13 +.float 6.07758045279e+21 +.float 0.000561630042956 +.float 3.40849617358e-38 +.float 3.74395769877e+35 +.float 0.00106836700439 +.float 5.81785884432e+17 +.float 5.90479579266e-26 +.float 1005036172.15 +.float 5.41551870368e-14 +.float 1.70970513588e+26 +.float 4.42099824145e+13 +.float 1.08752489369e+29 +.float 4.83314247634e-11 +.float 1.9139407997e+25 +.float 0.11229924648 +.float 8.48406229333e+30 +.float 1.13472834912e-11 +.float 0.991450575946 +.float 1.1953710188e-13 +.float 1.32840801275e-39 +.float 110977725019.0 +.float 1.68779003589e+34 +.float 3.95375305067e-39 +.float 2.79609994512e-05 +.float 1.57460731924e+19 +.float 8.96536749208e-35 +.float 23130.5131809 +.float 9.24089002433e-35 +.float 2.21927000088e+27 +.float 0.000491710120234 +.float 802.947693262 +.float 7.25195285576e+19 +.float 9.78551273642e-19 +.float 1.40315628034e+14 +.float 2.20721001713e+14 +.float 2.16678900727e-14 +.float 6.44680589139e-06 +.float 5.87585154924e-10 +.float 1.63918092835e+13 +.float 1.20260555564e-06 +.float 4.1570092354e+24 +.float 1.86765807959e-09 +.float 3.03715807889e-27 +.float 1199.14605947 +.float 41.1141217924 +.float 1.7613992606e+34 +.float 1.12488628946e-19 +.float 8.68711196352e-32 +.float 3085131.51856 +.float 1.78449618093e-32 +.float 1.71716278746e+14 +.float 3.51348719507e+28 +.float 5.25218262608e-18 +.float 7.47559497588e-29 +.float 2.22269943199e-19 +.float 55179.2181188 +.float 9.14816674595e+27 +.float 1.29377621124e-30 +.float 1.33410989932e-14 +.float 9545032.20021 +.float 1.52687992985e-38 +.float 1.05823458689e-26 +.float 55.5675415639 +.float 0.00211216219299 +.float 2.18745011371e-39 +.float 1.12318525858e-13 +.float 3.49796541597e+27 +.float 1.07572452509e+30 +.float 2.92858905703e+25 +.float 1.02769558195e-08 +.float 801075.117928 +.float 6.22714260851e-08 +.float 1.9071515037e+25 +.float 8.2726352195 +.float 3.78770913817e-31 +.float 56885956092.9 +.float 28980.8503558 +.float 30160.1126078 +.float 6.02221235428e-18 +.float 14077.4034748 +.float 8251194.56802 +.float 1.50250403781e+30 +.float 7.84314157346e-06 +.float 9.40795252227e+13 +.float 3099.98305653 +.float 58844834964.3 +.float 2.13547454855e-32 +.float 1.53974145685e+17 +.float 1.20204358607e-38 +.float 3.58964146543e+15 +.float 1.87456826285e-37 +.float 5.1550915439e-20 +.float 2.48084102921e+29 +.float 7.5032949693e+16 +.float 8.560938086e-35 +.float 3.75276135223e+22 +.float 3.20875032811e+22 +.float 3.65617473571e-11 +.float 1.05801412441e-37 +.float 1.19022329283e+22 +.float 1.09120817064e+12 +.float 7.1248540232e+20 +.float 1.78488101761e-06 +.float 3.50473380753e+20 +.float 1.44823279655e-13 +.float 9.5370798267e+30 +.float 0.00345524292836 +.float 1.99863261178e+36 +.float 7.28309553481e-21 +.float 2.98401614297e-24 +.float 447.595601891 +.float 2.2073236588e-19 +.float 2.28761172878e+12 +.float 2.41858282536e+32 +.float 1.03099366534e+16 +.float 5.61749593922e-21 +.float 3810141.40075 +.float 6.77969481915e+18 +.float 25867.4225341 +.float 1.27539835274e-21 +.float 9.31947577917e-34 +.float 2.8334583842e-32 +.float 4.50091377004e+24 +.float 2.70268707471e+21 +.float 2.44005208265e-35 +.float 1.40093380731e-07 +.float 2.94650062392e-30 +.float 4.57143099832e-38 +.float 3.2698681321e+21 +.float 686741706349.0 +.float 3.03926703139e+26 +.float 1.93724598621e-19 +.float 4756749191.48 +.float 1.91566416912e+24 +.float 6.31930761737e-37 +.float 4.32626733883e-11 +.float 5.87912872223e-10 +.float 599906355.575 +.float 1.48926165337e-30 +.float 8.97242163411e+36 +.float 4.0109600205e+24 +.float 2.33685934522e-27 +.float 2.13808881116e+26 +.float 1.0334224456e-17 +.float 4.61688218378e+25 +.float 1100457600.76 +.float 45215.2635726 +.float 1.06665781918e-13 +.float 1.9716408684e+37 +.float 3.18352066153e+16 +.float 0.000204990802066 +.float 4.30964793254e+27 +.float 0.0619470076778 +.float 2.45856975738e+32 +.float 1.37037879315e-06 +.float 1.30156964803e+36 +.float 6.3127493596e-15 +.float 15016794214.5 +.float 797126656399.0 +.float 1.69836804068e-08 +.float 61.7846008239 +.float 8.48556472295e+33 +.float 8.84453163889e+25 +.float 1.35448646048e+20 +.float 8.2016792378e+24 +.float 1.55132791983e-23 +.float 1.39887434467e+24 +.float 1.01484380697e-18 +.float 8.9284801652e-29 +.float 4.32453423201e-19 +.float 7.35767823425e-23 +.float 5.5385887991e-14 +.float 2.632363714e-05 +.float 1.35616860603e+34 +.float 1.51628091002e+36 +.float 3.07071154523e+19 +.float 146974.435739 +.float 59606698001.2 +.float 4.77837535978e-31 +.float 2.34813973935e+24 +.float 49039.3585434 +.float 2.8807536367e+29 +.float 0.000324972549141 +.float 1.2608614048e-07 +.float 8.77147041785e-16 +.float 0.00717151205553 +.float 1968.94858723 +.float 2.20386415761e-13 +.float 1.36666510858e-06 +.float 6.98618236031e-31 +.float 6.56658626371e+23 +.float 8.93725310961e+26 +.float 4.16594527576e-35 +.float 16.5879654121 +.float 2.69114325078e+22 +.float 260908946020.0 +.float 6.15872028023e+32 +.float 1.4065474596e-27 +.float 5.40775552807e-23 +.float 1.37898748804e-12 +.float 4.76800828921e-14 +.float 2.50576933483e-20 +.float 0.00372994691028 +.float 9.17525642648e-10 +.float 1.0195294721e-13 +.float 8.44664247639e+35 +.float 2.63892405992e-27 +.float 1213788224.22 +.float 192951.230461 +.float 67.4392503413 +.float 1.85237154474e+31 +.float 0.258596191768 +.float 1.06345104815e+18 +.float 7.78117371973e+31 +.float 1.61084516622e-22 +.float 1709.61644928 +.float 4.30676269021e-19 +.float 62503450.044 +.float 3.52700867505e+28 +.float 6.95971551038e+12 +.float 2.48768957443e-37 +.float 4.12741563352e-37 +.float 8.99352977479e-18 +.float 61627.1150731 +.float 2.84102164007e+22 +.float 3.81079301998e-11 +.float 1.44583447838e+30 +.float 1.46576148394e-20 +.float 1.13805806482e-34 +.float 6.41274154845e-21 +.float 6.93438901829e+31 +.float 1.13148605596e+20 +.float 1.0605059073e-05 +.float 6.16477777296e-15 +.float 7.4981771468e-28 +.float 4.17324348242e-23 +.float 9.87943742423e+36 +.float 64.9611049223 +.float 7.0922421853e+34 +.float 7.20630995304e-07 +.float 1.43209484971e-17 +.float 50645364.1668 +.float 9.9366381617e-11 +.float 2.11879739952e-07 +.float 2.01558983633e-11 +.float 0.484856630165 +.float 9.45437524048e-23 +.float 1.40774841738e+13 +.float 5.98886691944e-38 +.float 50298.3796442 +.float 0.879184382069 +.float 2.34689332982e+13 +.float 0.000100651778815 +.float 2.57693710326e-31 +.float 4.14560001935e-26 +.float 1.0524313033e-34 +.float 2.00230618392e+19 +.float 11.4712995152 +.float 6.32303337758e+30 +.float 7.0619561148e-31 +.float 1.82531582579e-28 +.float 6.65307456919 +.float 1.16875436014e+37 +.float 9.0437174396e-34 +.float 2.48982600296e+15 +.float 4.41912635268e+18 +.float 2.00429521978e-36 +.float 2.37912082362e-34 +.float 14231828177.1 +.float 13427606109.5 +.float 6.66350074869e-29 +.float 3.64149145196e-18 +.float 0.0844356142551 +.float 1.21394553741e+12 +.float 2.77122390499e-19 +.float 3.84253640556e+23 +.float 1.48540821828e+29 +.float 5.76413753477e+30 +.float 5.43634419031e-21 +.float 2.7204281257e-33 +.float 4.97404137473e+19 +.float 1.24005832149e-21 +.float 1.52405361282e-27 +.float 3.32855513737e+35 +.float 9832150915.14 +.float 2.04723281508e-21 +.float 1.59593244031e-12 +.float 1.64164435212e+33 +.float 8.66712369017e-31 +.float 6.4910611169e+36 +.float 2738.49911372 +.float 6.63629441326e-06 +.float 3.23734905547e-28 +.float 1.83481736606e-11 +.float 3.45158651347e+25 +.float 0.684209560025 +.float 5.81567764341e+23 +.float 3.88438922397e-38 +.float 8.01987117473e-37 +.float 6.2540754258e-37 +.float 721749023.289 +.float 2.07724852354e+36 +.float 1.66408116282e-28 +.float 3.4697127327e-21 +.float 9.50584364982e-07 +.float 2.62500054758e+22 +.float 1.17545743716e-06 +.float 7.9012169219e+18 +.float 4.59903502028e+24 +.float 5.51241783371e-27 +.float 6.90452220556e+25 +.float 2.70039028089e-34 +.float 2.90731345219e-39 +.float 11622.8148909 +.float 4.62645081624e-05 +.float 1.49097794136e+34 +.float 179085837245.0 +.float 2.44118720937e+33 +.float 48.0324640703 +.float 1.0563060424e+13 +.float 5.79496964255e-06 +.float 2.98006702538e-21 +.float 13.7235136169 +.float 4.17680102386e-25 +.float 4.36673188599e+35 +.float 4.31310073524e+32 +.float 3.97112600454e-29 +.float 0.00727318999173 +.float 259.808605303 +.float 1.15178352828e-07 +.float 0.263936015693 +.float 1.3864851151e+30 +.float 3.95517367026e-21 +.float 3.25636704372e-15 +.float 1.07479950167e+30 +.float 1.00202381585e-28 +.float 2.12377587317e+15 +.float 3.71504867092e+19 +.float 2.93858322579e-15 +.float 2.52001696015e+21 +.float 3.85138160841e+30 +.float 1.36488741143e-08 +.float 0.112545606648 +.float 2.49668516578e+30 +.float 8.63351552941e+35 +.float 2.28346215148e-31 +.float 34031.7116182 +.float 1.47723577891e-15 +.float 1.76965666756e-34 +.float 0.00167549189826 +.float 8.53215952524e-39 +.float 2.19595590889e+21 +.float 6.3135537561e-26 +.float 2.21109737363e-24 +.float 9.3354699357e-38 +.float 2.61364234516e+15 +.float 2.3931092972e-12 +.float 2.32944850224e+36 +.float 1.55121523282e-21 +.float 2.94280308339e-35 +.float 1.35685498853e+28 +.float 5.70127962702e-37 +.float 2.81057416519e+25 +.float 1.73705565023e+33 +.float 8.62366046809e-38 +.float 1.34645083726e+12 +.float 12309478529.8 +.float 509.79476809 +.float 2.33409105433e+20 +.float 1.21498330892e+29 +.float 4.68090355891e+36 +.float 5.65279341778e+12 +.float 12614.8112657 +.float 1.13051378628e-30 +.float 1.21588344884e+27 +.float 0.0036216480105 +.float 2.53362504145e-36 +.float 1.52850599153e-37 +.float 1.93771683686e-33 +.float 28.2566354864 +.float 1.7606252389e-31 +.float 9.02096942962e-39 +.float 1.88397622137e-22 +.float 2.71282906586e-14 +.float 3.03055081964e+28 +.float 1.81262129851e+12 +.float 2.84201279199e+20 +.float 3.54259110511e-28 +.float 629.118599829 +.float 3.6412739926e-22 +.float 3.52409221683e-34 +.float 23.2597718275 +.float 6.03245363541e-37 +.float 3.83390563514e+30 +.float 1.22363776108e-24 +.float 4752.03283105 +.float 4.72170431067e+17 +.float 6.52754535086e+33 +.float 2.82314808817e-22 +.float 1.16235441901e+32 +.float 2.3247288326e+20 +.float 6.1233390784e-38 +.float 1.0594512293e+30 +.float 2.36532629696e-32 +.float 0.00014993702546 +.float 2.54956840766e+26 +.float 6.24454266847e-32 +.float 1.19768985674e+24 +.float 2.30053674549e-11 +.float 2.75215880949e-22 +.float 1.02215392046e-35 +.float 4.05419704309e+27 +.float 2.03190811392e-14 +.float 208897.828562 +.float 1.04480068868e+20 +.float 1.14805655348e-26 +.float 23101.804735 +.float 2.36352865933e+25 +.float 1.97720762588e-25 +.float 1.41318439561e+13 +.float 3060635998.74 +.float 4.52665932579e-36 +.float 541206603463.0 +.float 1.65632877358e-28 +.float 2.44691849202e-36 +.float 2.54551844903e-07 +.float 5.85377541209e-12 +.float 2.7195311764e+15 +.float 6.86736177021e-36 +.float 1.18357743017e+32 +.float 1.59950924395e-12 +.float 9.10443313569e-32 +.float 1.38628645376e+18 +.float 0.000110866227768 +.float 1.84392219867e-16 +.float 4.08702608535e-38 +.float 1.97071837604e-36 +.float 1.83483300692e+12 +.float 5.85910678078e-09 +.float 7.94787146419e-14 +.float 5.49421056576e-35 +.float 1.97123587477e-10 +.float 4.88294672651e-09 +.float 9.40915907911e-34 +.float 1.3695342938 +.float 3367090968.11 +.float 1.03979677e+32 +.float 1.16299185888e+19 +.float 1.39867429866e-36 +.float 1.75893096376e+25 +.float 6161723380.82 +.float 5.90069651615e+20 +.float 8.95392209911e+15 +.float 9.76120967577e-19 +.float 7.17249639411e-13 +.float 0.000294003524547 +.float 3619098594.13 +.float 3.01030870309e+26 +.float 30719.8924578 +.float 3.86012086984e-25 +.float 5146913.25166 +.float 1.16405411757e+27 +.float 7.27660247085e-08 +.float 2.15791034601e+15 +.float 3.09429370369e+32 +.float 3.49548705808e+25 +.float 5.13407277651e+31 +.float 4.23684214444e+14 +.float 1.06871156524e-36 +.float 2.90906049467e-33 +.float 2.23740363979e-37 +.float 7.07466625153e+31 +.float 5.88797917437e-32 +.float 1.99986313033e-13 +.float 2.4951012256e+35 +.float 1.24136832766e-09 +.float 6.70687778843e+36 +.float 2.31474889837e-31 +.float 4.8186831663e+14 +.float 1085133869.57 +.float 3.49058619376e-25 +.float 1.57250378368e-35 +.float 1.79664980272e-06 +.float 2.73428041076e-20 +.float 7.0918269534e+29 +.float 5.21259445087e+28 +.float 4.61176243838e+31 +.float 3.08878245863e+36 +.float 2.61444161236e+20 +.float 1.39941242287 +.float 5.17673340502e-39 +.float 2.17318687696e-07 +.float 7.6233500532e+29 +.float 5.75457618486e-13 +.float 2659.67544681 +.float 1.78273307772e-37 +.float 5.40732119593e-34 +.float 3.92200987146 +.float 0.000902667419885 +.float 16773208.6051 +.float 7.1892883635e-19 +.float 1.23522972611e-31 +.float 1.87949196879e-24 +.float 3.41935464023e+33 +.float 1.52437122416e-05 +.float 9.76870416637e-29 +.float 5.04577311767e-07 +.float 3.70125960406e-38 +.float 9.36704595821e-08 +.float 2.15504500783e-10 +.float 2.92864979156e-33 +.float 143135271.728 +.float 22045.5651034 +.float 5.6528086716e-19 +.float 1.02608100127e+37 +.float 1.18016117758e+32 +.float 14637386.6572 +.float 6.80064114213e+21 +.float 2.09815656415e+37 +.float 9.00659180734e-20 +.float 2.71244232734e-16 +.float 3408090881.39 +.float 98212105.8353 +.float 3.65190594718e-19 +.float 8.48997035405e+17 +.float 1.47027940563e-23 +.float 80.654781505 +.float 3.09539444085e-25 +.float 3.78372295214e-36 +.float 1.91339916892e-31 +.float 2.96285738613e+36 +.float 4.25020026571e-11 +.float 8.74255629578e-20 +.float 4.42762896863 +.float 7.41162549613e-31 +.float 1.05884148896e+22 +.float 5.00907424838e+14 +.float 5.92387138731e-31 +.float 80725347299.0 +.float 1.67769049164e-21 +.float 8.61458970878e-30 +.float 1.03077213891e+29 +.float 2.7405141671e-11 +.float 3.67025222969e+18 +.float 15664921921.8 +.float 9.90529910334e-08 +.float 31971.6392338 +.float 0.000174534938639 +.float 3.91536182865e-29 +.float 2.26902259877e+27 +.float 1.11877208048e+37 +.float 1.96177383698e-38 +.float 7.37183431373e+28 +.float 2.57735142123e+28 +.float 1.95297556502e+34 +.float 2.74241085483e-05 +.float 5337956.36612 +.float 1444645965.69 +.float 9.75354635138e+13 +.float 14765465508.4 +.float 1.25335235996e+16 +.float 2.75148730343e+22 +.float 2.26232943175e-21 +.float 3.19201634071e-33 +.float 8.57325560934e+24 +.float 2.55077132568e-10 +.float 9.27781367973e+37 +.float 1.93211590871e+17 +.float 18721.2281316 +.float 571920682.429 +.float 2056.40414516 +.float 26418378.4599 +.float 11668148.3537 +.float 3.1752439144e+17 +.float 243.444861489 +.float 115007.441759 +.float 0.000191691859198 +.float 3.95040829013e-12 +.float 1.0338827013e-15 +.float 5.60839365902e-28 +.float 3.03808361459e-25 +.float 1.04745523019e-16 +.float 1.41891093458e+13 +.float 3.7694443405e+20 +.float 3.04721841867e+23 +.float 3.06549887867e+15 +.float 1.89231406017e+22 +.float 2.8952217686e-26 +.float 4.6758732584e+29 +.float 1.17720851944e-35 +.float 5.62018171318e-21 +.float 450103965.87 +.float 3.30159705208e-18 +.float 5.86758069788e-27 +.float 1.75885671861e-32 +.float 3.14166731856e+27 +.float 3.14684519349e+31 +.float 1.35074405473e-05 +.float 792504.237982 +.float 1.82700696803e-29 +.float 731966432.792 +.float 3.33234996972e+15 +.float 1.29300254404e+13 +.float 3.99869953105 +.float 3175628240.22 +.float 3.72274617474e-32 +.float 2.3149318327e-29 +.float 8.84855178184e-10 +.float 10270836745.0 +.float 9.25799924052e-32 +.float 4.33905672481e-17 +.float 7.52410452303e-18 +.float 49322806.8377 +.float 5.84004265739e-17 +.float 1.15019385978e-32 +.float 2.75060252979e-23 +.float 194.331047854 +.float 1.19538876665e+23 +.float 6.01373518831e-20 +.float 4.86220142923e-12 +.float 481.441807223 +.float 504854.609105 +.float 4.07700344459e-25 +.float 1.18534564408e-19 +.float 9.67703876395e+30 +.float 5.58315934792e-40 +.float 1.30316089972e-39 +.float 7.54893242767e+32 diff --git a/isa/rv64uv/data_w.h b/isa/rv64uv/data_w.h new file mode 100644 index 0000000..32d5865 --- /dev/null +++ b/isa/rv64uv/data_w.h @@ -0,0 +1,16385 @@ +.align 2 +.word 0x3ceb3ff3 +.word 0x8b529b44 +.word 0x5eb561bd +.word 0x9a9a80ef +.word 0xa02f34b3 +.word 0x10c67fd3 +.word 0x035efa3d +.word 0xd6645faf +.word 0x42650651 +.word 0x3bfd1d26 +.word 0xfee29477 +.word 0x78633071 +.word 0xd6225672 +.word 0x79f248ad +.word 0xa399f83c +.word 0x268ecc47 +.word 0xa2863a65 +.word 0xde38379e +.word 0x85ef342d +.word 0xbdc2ae81 +.word 0xabe19f59 +.word 0x10645d45 +.word 0xc21b609f +.word 0x97524d61 +.word 0x4d1fe099 +.word 0x07f062da +.word 0xdd933169 +.word 0x79061593 +.word 0xb804d83e +.word 0xe0f9e02d +.word 0xb6d13099 +.word 0xebcd1f4e +.word 0x651c5257 +.word 0xcd085b73 +.word 0x71d2af7f +.word 0xef829c85 +.word 0xe0fd67cc +.word 0x18f2c401 +.word 0x22cedaef +.word 0x378c74c8 +.word 0xf729b4d6 +.word 0x6fa84dd9 +.word 0xa06c05bb +.word 0x4d100d8d +.word 0x81daad1b +.word 0x62c82192 +.word 0x59d54511 +.word 0x95c76aad +.word 0x95918688 +.word 0xe779c46b +.word 0xae96619d +.word 0xedcf6101 +.word 0xdb3d1149 +.word 0xfdb17f54 +.word 0xabd89536 +.word 0x29c0e596 +.word 0xdc52bdcb +.word 0xf6f22f52 +.word 0xe79a27f3 +.word 0x91b10783 +.word 0xb6bcb655 +.word 0x360c4974 +.word 0xd4e441e0 +.word 0x92d30429 +.word 0x48f2f8e4 +.word 0x103ef3cf +.word 0xda9bf995 +.word 0xfd63ed50 +.word 0x16a91f2b +.word 0xccf3d0a2 +.word 0x691406bd +.word 0x26988f40 +.word 0x4b3c74ed +.word 0xc4cf8b8e +.word 0xdf6da8e4 +.word 0x0b500a33 +.word 0x9d5200f8 +.word 0x0b81342c +.word 0xb7ebb713 +.word 0x54b96931 +.word 0xe183029e +.word 0xfb0af1e9 +.word 0x81633ac8 +.word 0xff9e4842 +.word 0x4f468960 +.word 0x13b45a23 +.word 0x998a0e31 +.word 0x08085f7e +.word 0x3287d05f +.word 0x686e80a9 +.word 0x9c4792c9 +.word 0x27fca836 +.word 0x0add12ff +.word 0xde26c44b +.word 0x5057326b +.word 0xf56ab445 +.word 0xe58b7c7c +.word 0x60b6cbac +.word 0x75dd67dc +.word 0x852380cc +.word 0xa4d5e41c +.word 0x987c88b6 +.word 0x8f2bbba3 +.word 0x9ec0961f +.word 0xf0cc8dfa +.word 0x81cc8269 +.word 0x6e6291d4 +.word 0xb8665177 +.word 0x3cd5b01e +.word 0x4d14074e +.word 0xfa50ecc9 +.word 0x8568992a +.word 0x8c65f06b +.word 0x02eee0b9 +.word 0x6a4b39a0 +.word 0x947899aa +.word 0x05222fac +.word 0x9da4ef13 +.word 0xa1d69564 +.word 0x0f616fb4 +.word 0xa0996d4b +.word 0x775c302b +.word 0xade562be +.word 0x5a427c33 +.word 0xb4fab109 +.word 0xbcefd0b0 +.word 0x05adc012 +.word 0x0f81f61e +.word 0xad0faac1 +.word 0xf69b31cc +.word 0x40498cb4 +.word 0x74d0df2a +.word 0x97b95813 +.word 0x51ed2f05 +.word 0x5d2c2926 +.word 0x500b2f38 +.word 0x5e80dffb +.word 0x987aa6a9 +.word 0x4ce74659 +.word 0x608d9483 +.word 0xc5b3b5da +.word 0x06e44edf +.word 0x91bae476 +.word 0xbc344f44 +.word 0x4f5d4110 +.word 0x38f83d75 +.word 0xcdc656e9 +.word 0x3d1b208a +.word 0x2ff91355 +.word 0x6f6b8435 +.word 0xb2b47ae3 +.word 0x1a124c13 +.word 0x526c5cde +.word 0x5570e115 +.word 0xd562ce08 +.word 0x703cff1a +.word 0xdb045abf +.word 0x2b563622 +.word 0x5632a458 +.word 0xa675a107 +.word 0xe288b173 +.word 0x737b6ec9 +.word 0x399b6cb9 +.word 0x1ef491a1 +.word 0x8795ad1f +.word 0x30d884aa +.word 0xce88f3fb +.word 0xd6a66353 +.word 0x2eff833b +.word 0x4751d08b +.word 0xcea663fb +.word 0xa4560003 +.word 0xce66e9f4 +.word 0x58647433 +.word 0x21334ead +.word 0x4abcc4f0 +.word 0xcb3a88fb +.word 0x456bb10f +.word 0x58aaac94 +.word 0x6aba54e9 +.word 0x6b761fd2 +.word 0x68d67101 +.word 0xebad40ce +.word 0x27ef79c6 +.word 0x013183ef +.word 0xf17a003b +.word 0xe1464134 +.word 0xfca65f91 +.word 0x6f31b692 +.word 0xf33dc320 +.word 0xed6897d7 +.word 0x38daf041 +.word 0xbeda988f +.word 0xd631e278 +.word 0xa9b98778 +.word 0x84de2a5f +.word 0x49fea551 +.word 0x5750477c +.word 0x3a3b3bdb +.word 0x116ce13b +.word 0x96b3953f +.word 0x49799084 +.word 0xcf68bc28 +.word 0x0b8a2761 +.word 0xe752f01a +.word 0xb196b0d1 +.word 0xec81bf87 +.word 0xe5856cfd +.word 0xe651170e +.word 0x93b337e2 +.word 0x035d700f +.word 0xbecbde04 +.word 0x2bfc7ff0 +.word 0x4cc576e7 +.word 0xa9b38f21 +.word 0x86640cb1 +.word 0x69eb8ca2 +.word 0xf065163e +.word 0x9cb6c624 +.word 0x5762e344 +.word 0x40a230ff +.word 0xdc960f12 +.word 0x7a299d7a +.word 0xc8467562 +.word 0x5a124b07 +.word 0x328475a4 +.word 0x88ddf91c +.word 0xd11a8404 +.word 0x2bda7707 +.word 0xcaab02c9 +.word 0xebf8e3dd +.word 0xce595c64 +.word 0xd2d0d09e +.word 0x01ebd44f +.word 0xa0ec66f2 +.word 0xdcd0604d +.word 0x0cc85578 +.word 0x457a46a8 +.word 0x44c20f34 +.word 0x86faea91 +.word 0x6c48ae02 +.word 0x790ff9aa +.word 0xc6c88cfb +.word 0x0076881b +.word 0x0e0992f8 +.word 0x207a1cc1 +.word 0x1fe78141 +.word 0x1183c18f +.word 0xf9857322 +.word 0xdabd2a57 +.word 0x160c7c30 +.word 0x808aefd0 +.word 0x50de9385 +.word 0x50884d42 +.word 0x59ee1ccc +.word 0xa59c216d +.word 0x962c470a +.word 0x5c5fa7c8 +.word 0x30eabfff +.word 0x542aaf0e +.word 0x1fae68c4 +.word 0x8e36f2c0 +.word 0xb74e9517 +.word 0x61574819 +.word 0x14746832 +.word 0x2db5db01 +.word 0x5f8eec2f +.word 0x9abc3e55 +.word 0xc859e792 +.word 0x615906b4 +.word 0xcd18e1a2 +.word 0x9f781c9c +.word 0x6e7ceb02 +.word 0x5f56ed34 +.word 0x7f03ca98 +.word 0xb3effcaa +.word 0x6ba6cc7e +.word 0xb1b20f0e +.word 0x75f99ac1 +.word 0x3ebdc767 +.word 0x892ca389 +.word 0xb1f69af3 +.word 0x125321d9 +.word 0x6cc57ee7 +.word 0x6d04d644 +.word 0xe13201a1 +.word 0xefbd6b8b +.word 0x5fcde91f +.word 0xe5d9c5d2 +.word 0xca79879c +.word 0x431e35e4 +.word 0x76d216f6 +.word 0x1f867fde +.word 0xd02f4c38 +.word 0xa98bcfbb +.word 0xe328f191 +.word 0xcadf460c +.word 0xaae550c4 +.word 0xbbd6118a +.word 0x905813d1 +.word 0x1a66f0ba +.word 0x96775bd7 +.word 0x014135cf +.word 0x24bd9e87 +.word 0xc638c9cd +.word 0x0b581670 +.word 0x17802192 +.word 0x196bb2b5 +.word 0xe166586c +.word 0x2ddd02ba +.word 0x060344aa +.word 0xd76ee01c +.word 0x1f0c6f00 +.word 0xd80caa44 +.word 0xac6cc650 +.word 0xd6100537 +.word 0xf3d13a6a +.word 0x943e5a2a +.word 0xcc7ab323 +.word 0x0948f15f +.word 0xc4758a92 +.word 0x82e63e71 +.word 0xb7149708 +.word 0x1b538e11 +.word 0xbfbc2a43 +.word 0xef3f7a52 +.word 0x0fa6d691 +.word 0x5301d7bc +.word 0x9060d1c6 +.word 0xd3fbb243 +.word 0x3dfbf940 +.word 0x2e059114 +.word 0x3ffdc6ee +.word 0x9db0edf7 +.word 0xc0e836de +.word 0x64cb7c68 +.word 0x5e129a33 +.word 0x658a2d3e +.word 0x59ac3e72 +.word 0x6b104fdf +.word 0x15508f2c +.word 0x80144a68 +.word 0xf91a3a5e +.word 0x69af511b +.word 0xbf56323f +.word 0x291e6cad +.word 0xb0dac432 +.word 0xc190d1d3 +.word 0xac81d07e +.word 0x84602576 +.word 0x7bd521e5 +.word 0xa498916d +.word 0xe5bc175d +.word 0x263a5205 +.word 0x188a5430 +.word 0xbf8712d0 +.word 0xeaa73d77 +.word 0x846ac01e +.word 0x716bf4b3 +.word 0xb80a871c +.word 0x2fa4f904 +.word 0x44718838 +.word 0x32fd7324 +.word 0x95eb0431 +.word 0x5099d8fe +.word 0x3b785a1b +.word 0xb0ee0db1 +.word 0xf413b279 +.word 0x4bbdb815 +.word 0xb490b8fc +.word 0x69c78513 +.word 0xda881dd3 +.word 0x95ab8300 +.word 0x44657bdc +.word 0x37b4f40a +.word 0x05eb8108 +.word 0x7abfd4da +.word 0x61fbe926 +.word 0x2c186d92 +.word 0x5c47c908 +.word 0x52715acf +.word 0xc63244fc +.word 0x24c3a22d +.word 0xfdc07557 +.word 0x7ac666b6 +.word 0x99581b27 +.word 0x77d25193 +.word 0xd5a91d5d +.word 0xd2555e55 +.word 0x8e9f7f81 +.word 0x7b366ea0 +.word 0xb88062e3 +.word 0xdb4d585f +.word 0x66779739 +.word 0xbbcc73bc +.word 0xf5d38682 +.word 0x77a7365d +.word 0x3ac72a1c +.word 0x3c1a7554 +.word 0xb7ba6c99 +.word 0xace3ca82 +.word 0xf56e5387 +.word 0xda97fa88 +.word 0x3df9ba7c +.word 0x308b24d9 +.word 0x42351e64 +.word 0x2feb67b4 +.word 0xb46977d6 +.word 0xdbcceb42 +.word 0xe656abde +.word 0x41483325 +.word 0xdd771fc2 +.word 0x503c14a6 +.word 0x6c5d1483 +.word 0xba9dacda +.word 0x15ff3543 +.word 0x17b76868 +.word 0xd57c615e +.word 0x4ab10161 +.word 0x5b4e240e +.word 0x948e8b38 +.word 0xacee0ceb +.word 0x01c32140 +.word 0x55b5946a +.word 0x6fac33ac +.word 0x7c63fa22 +.word 0x35c8de74 +.word 0x95c97798 +.word 0xf490fc50 +.word 0x64135544 +.word 0x8b5af32a +.word 0x1e825d3c +.word 0x4656c0c2 +.word 0xaa59d20e +.word 0x1cceb36e +.word 0xe31ed1b1 +.word 0xe8a4a068 +.word 0x18cecf10 +.word 0xf0f83877 +.word 0x5fcd1af6 +.word 0xc5bd448c +.word 0xc1dff10f +.word 0x4ba81e35 +.word 0xad06f176 +.word 0xa771ae1e +.word 0xce599eda +.word 0x43fdd203 +.word 0xc112935e +.word 0xf6197c0b +.word 0xac3e4332 +.word 0x894242b1 +.word 0x1d00f855 +.word 0x7e6ef790 +.word 0x5a270302 +.word 0xb7d4f68a +.word 0xadb50c97 +.word 0x90ff0738 +.word 0x2e963a34 +.word 0xa54a7c38 +.word 0xa181a485 +.word 0x2dd9c98c +.word 0xe3d1bf7e +.word 0xa7c66a0f +.word 0x1f858063 +.word 0xee8d5572 +.word 0x2431c21d +.word 0x54df24f4 +.word 0xb8713475 +.word 0x98f15b0e +.word 0x8e0f7cea +.word 0xa5c1b206 +.word 0x752c146f +.word 0x4ffc3f19 +.word 0x2d2751f6 +.word 0x118f8683 +.word 0xb740fdc6 +.word 0xc125a152 +.word 0x8b0ae752 +.word 0xbd58f66d +.word 0x5bf5fee3 +.word 0x440e7ce8 +.word 0x62252bc2 +.word 0xdf5ecb25 +.word 0x0ac7c66f +.word 0x8134cac9 +.word 0x3f484196 +.word 0xc4d6b891 +.word 0x5aa6e95c +.word 0x55367c5e +.word 0x6741372e +.word 0x8a9f9efa +.word 0xc58ecfc2 +.word 0x5a56a490 +.word 0xd8cd5e60 +.word 0x1cb49c04 +.word 0x453eab73 +.word 0x198293d5 +.word 0x1cd8e8d2 +.word 0xc76b6f1d +.word 0xba2fa224 +.word 0x2f521016 +.word 0x306d69f2 +.word 0x6aa9ec95 +.word 0xbe4a0d6d +.word 0xd0d4df60 +.word 0xbfaad4a4 +.word 0x9787d394 +.word 0x257f223b +.word 0x65fed0b9 +.word 0x31924a11 +.word 0x8710df85 +.word 0x91809426 +.word 0x33bb4cfb +.word 0x4009de8c +.word 0xc81b100a +.word 0x07b3cfba +.word 0xcd9ba96f +.word 0xe425b0cd +.word 0xf306d19b +.word 0x6215e04a +.word 0x8d779cfd +.word 0x9543340a +.word 0xa2365b10 +.word 0xfa1b24b1 +.word 0xafc6fe17 +.word 0x4ca5b59c +.word 0xdc29aad6 +.word 0x7bec2761 +.word 0x99f2fd46 +.word 0xba11d175 +.word 0x009b8283 +.word 0xc53ca2d8 +.word 0xa974bd88 +.word 0x7deb5be6 +.word 0x860d4034 +.word 0x75e58526 +.word 0x31850c99 +.word 0x879073c7 +.word 0x097ce99a +.word 0x801d4c1e +.word 0xa55d86be +.word 0x71b88c84 +.word 0x90e5ac89 +.word 0xf5827535 +.word 0xe45d69a5 +.word 0x22b5e18f +.word 0xcad921a3 +.word 0x9f8f23de +.word 0x0cf49460 +.word 0x5c227914 +.word 0x3bc10190 +.word 0x13ed14b0 +.word 0x89f40aa1 +.word 0xee08da2b +.word 0x52b7d46a +.word 0xded9cb0b +.word 0xb1d53816 +.word 0x226532e2 +.word 0xdbb8f91b +.word 0x99e36379 +.word 0xed4e4882 +.word 0xb748a363 +.word 0xbd5e4460 +.word 0x57f5b3c0 +.word 0xce8299c7 +.word 0xee8682a2 +.word 0xdc88a467 +.word 0x6fe0da16 +.word 0xc1c0e247 +.word 0x7c29134a +.word 0x1bef6db9 +.word 0x0aee7d4d +.word 0x13f406fb +.word 0x33470ab6 +.word 0x292ba5cc +.word 0x7f4491cf +.word 0xb303e1a2 +.word 0x899562bb +.word 0x6c0f7a47 +.word 0xa634bdd0 +.word 0x4dfd8961 +.word 0x76e3442f +.word 0xc1d13956 +.word 0x66c5f0ce +.word 0x2e3b15ae +.word 0xe63fd162 +.word 0xb83dbc68 +.word 0x5def4e5b +.word 0x5ef8194e +.word 0x87823f0c +.word 0x98b2882d +.word 0x394e093f +.word 0x00b0fbb9 +.word 0x3580b348 +.word 0xc87e806c +.word 0x24baeb7b +.word 0x75c1c1d1 +.word 0x31ff2685 +.word 0x3593dc40 +.word 0x2bb72f12 +.word 0x675bfaf0 +.word 0x2b141fb4 +.word 0x07091a24 +.word 0x1c2d8153 +.word 0x2b11500e +.word 0x7d82ac06 +.word 0x0f49a97a +.word 0x05bde28c +.word 0x72b1a2ea +.word 0x6861d7e1 +.word 0xb414db97 +.word 0x0d15f1c7 +.word 0x673ee161 +.word 0x65882810 +.word 0x06d365fd +.word 0xf72cc17d +.word 0x380a8487 +.word 0x1822228c +.word 0x797e77c6 +.word 0x2a2da7aa +.word 0x9f58fd64 +.word 0x58aafd3d +.word 0x1fbae5f3 +.word 0x0d48be19 +.word 0xba48fdaa +.word 0x466c38df +.word 0xc9afd61e +.word 0x7724b5d9 +.word 0xeed3c53f +.word 0x4cf0b94f +.word 0x3ffe3732 +.word 0x440c6581 +.word 0xd08e2a6b +.word 0xa10cf520 +.word 0x5840d30a +.word 0x17fdc381 +.word 0xaeb1ad4e +.word 0xf821e7e3 +.word 0x979e33b4 +.word 0x00ef9dc3 +.word 0x07c1da35 +.word 0x172d43c0 +.word 0x2b9b0170 +.word 0x095f02af +.word 0x0dcf4026 +.word 0xa780f970 +.word 0xe67a1dcb +.word 0x3360529c +.word 0xf94e0cf9 +.word 0x7a14ab6b +.word 0xcdb7fd10 +.word 0xead920ec +.word 0xf0a9ba56 +.word 0x08c21aec +.word 0x4e0253d8 +.word 0x9b5fed94 +.word 0xf25068ed +.word 0x1678b71e +.word 0x4b1e75c6 +.word 0xd9936a2e +.word 0x1d5b40f0 +.word 0x63ce1691 +.word 0x558cf431 +.word 0xae179c39 +.word 0xedb3728d +.word 0x2cb49dfa +.word 0xbd632b7c +.word 0xbbe4384d +.word 0xd5eda29e +.word 0x8da776cc +.word 0xec6ab2e6 +.word 0x5ce220fa +.word 0x6a2b460e +.word 0x3aba462e +.word 0xc78b0777 +.word 0x7b09958b +.word 0x44fb2a1a +.word 0x2b744970 +.word 0xb87b2558 +.word 0x9b0f759d +.word 0xb5eba597 +.word 0x63054b9e +.word 0x7cb37f81 +.word 0x27654c25 +.word 0xb5f04178 +.word 0x05e04a3a +.word 0x77889823 +.word 0xc229dfb6 +.word 0xad659015 +.word 0x18dab8aa +.word 0x3cb73c13 +.word 0xd7f9c55a +.word 0xa4730122 +.word 0xe0e79714 +.word 0xdf4c4d22 +.word 0x732cee2f +.word 0xe59adddc +.word 0xbb9c9155 +.word 0x556e1f80 +.word 0x5ebe6b60 +.word 0x127250a6 +.word 0x663ab079 +.word 0xf4a82ade +.word 0x1ae10e4a +.word 0x91a3120a +.word 0x1c319aae +.word 0x14b525ba +.word 0xa62df827 +.word 0x3d9da996 +.word 0x0c7f77df +.word 0x271594fe +.word 0xa501ac25 +.word 0x95e71580 +.word 0x02fbffa3 +.word 0x3adc57a9 +.word 0xf79d9d47 +.word 0x385744fb +.word 0x8ffcc051 +.word 0x6b6c5170 +.word 0xc7f953bd +.word 0x9ab6e3ca +.word 0xc9e4639d +.word 0x89042bf9 +.word 0x302b3faf +.word 0x2d77d5f4 +.word 0x1441bce1 +.word 0xd354d89a +.word 0x1ccee7d3 +.word 0x0624815b +.word 0xf766fd24 +.word 0x33027e7e +.word 0xe4ae3f89 +.word 0x15f52d63 +.word 0x77199f0d +.word 0x390650fa +.word 0xd45844b6 +.word 0x9d8c41e4 +.word 0xa44d5cb0 +.word 0xc2eb3636 +.word 0xdf27bf77 +.word 0x5896a40d +.word 0x9a653215 +.word 0x72129d99 +.word 0x1c66db09 +.word 0xd5db63bf +.word 0x982a590e +.word 0xd096d66c +.word 0x34bb9903 +.word 0x8a07d5c0 +.word 0x76d41d6a +.word 0xba5ec775 +.word 0x13c5e70b +.word 0x589d3d26 +.word 0x7c0ae5d8 +.word 0x124f98fd +.word 0x8d7de896 +.word 0xbc3dca6c +.word 0x6c400159 +.word 0xa5fe3502 +.word 0x9b1a4031 +.word 0x36d3a688 +.word 0x59bd63bb +.word 0xfee91282 +.word 0x55cfe2c7 +.word 0x6e4ada6e +.word 0x158d4be8 +.word 0x37c76caa +.word 0x2a4ffd58 +.word 0xee51a907 +.word 0xb9f2ebe7 +.word 0xdfedbbdc +.word 0xfc902b98 +.word 0x9cb56acf +.word 0xee6ca957 +.word 0x8924b95b +.word 0x6b3289cc +.word 0xf2b3ac87 +.word 0xe7310b74 +.word 0xf319410e +.word 0x7bf3ec1d +.word 0xc6015e40 +.word 0x682fed4f +.word 0xff4f2cf3 +.word 0xeb9919a2 +.word 0x4ac3603e +.word 0xef276da1 +.word 0x2f40fd3c +.word 0x188ac281 +.word 0xb8ec8185 +.word 0x4b571310 +.word 0x84fb1e62 +.word 0xa3a5f84f +.word 0x0a624466 +.word 0xbec47227 +.word 0x46a6d790 +.word 0x6eb167c1 +.word 0x58440f6f +.word 0xbdf98c67 +.word 0xbf2dbe79 +.word 0x498cb244 +.word 0x1a75e8ce +.word 0x4ca11c9d +.word 0x693c92ae +.word 0x13dad126 +.word 0x2738df4f +.word 0xc3424c3a +.word 0xb34efc69 +.word 0xf9f590ec +.word 0xfaca65ba +.word 0xe04af5b5 +.word 0x5f6173fe +.word 0x294df38d +.word 0x4fdb4b7e +.word 0x76913e0f +.word 0x86a408a0 +.word 0x8ac55b67 +.word 0x5c163c3e +.word 0xda4a26aa +.word 0x490201a1 +.word 0x7691864c +.word 0xe306104c +.word 0xcea098db +.word 0x4c2250f8 +.word 0x3e1b3f3e +.word 0xce81efb1 +.word 0x02932a80 +.word 0x21a8a5d4 +.word 0x87e6a6c5 +.word 0x892c9001 +.word 0x2a6d3dfe +.word 0x0cddd320 +.word 0x34355d5f +.word 0xc51e8b7a +.word 0x773b3e0b +.word 0xfab2b9ff +.word 0xc918deec +.word 0xfaaf30f2 +.word 0x08fddcef +.word 0x2f5ebc87 +.word 0x03604988 +.word 0x6eaef61d +.word 0x5698cbbb +.word 0x0d1f8cd3 +.word 0x8bc7aefa +.word 0x18046eae +.word 0x4fc60368 +.word 0x3f4aa555 +.word 0xcd583210 +.word 0x6b106037 +.word 0x42a69fab +.word 0x0b441380 +.word 0x6df7d881 +.word 0xa0a2cd80 +.word 0xacdba3c5 +.word 0xe99d0639 +.word 0xcefe2152 +.word 0x3f53de1e +.word 0x22baf837 +.word 0xc2209e7b +.word 0xca1d23ad +.word 0x8242b1f8 +.word 0xd4bc34ab +.word 0x8d468c24 +.word 0x47936e20 +.word 0x2b3268e1 +.word 0x045d2c4f +.word 0xa4a1c282 +.word 0xe5a01c3b +.word 0xe7fa2f8f +.word 0x77ad3951 +.word 0xaa5d54b8 +.word 0xedb9ff1c +.word 0xd062ec40 +.word 0x9a471fb1 +.word 0x6a17ecec +.word 0x84b67cf4 +.word 0x2bb8f3a9 +.word 0x2ed5c542 +.word 0xaf0cbf25 +.word 0xfdfb209b +.word 0x8c0c8d23 +.word 0x687c3b39 +.word 0x5a16336e +.word 0x7473c849 +.word 0xcd8de1e8 +.word 0x73d817e9 +.word 0xf5923891 +.word 0x27c20fd2 +.word 0x509dba04 +.word 0x85a1b041 +.word 0x6970bc8f +.word 0xd9df9328 +.word 0xd3dda7af +.word 0xee6b5f73 +.word 0x9cca6a09 +.word 0x07d524aa +.word 0x93130073 +.word 0x8cbc49c4 +.word 0x7cd28404 +.word 0x47a43779 +.word 0xb59af6f8 +.word 0xe9602e29 +.word 0x1a3aa72e +.word 0xab2f6b63 +.word 0x5f0dad81 +.word 0x83c97910 +.word 0xe54ca8b8 +.word 0xf5d790bb +.word 0xa4bff70e +.word 0x31f139ca +.word 0xebb396cb +.word 0x2e5e8055 +.word 0x622028fe +.word 0xd403624d +.word 0x50f23bc1 +.word 0x4558e367 +.word 0xf32d8b22 +.word 0xf19d204b +.word 0x5140c2d3 +.word 0x647d2d12 +.word 0x482db7e1 +.word 0x21aaf0cd +.word 0x400ead0d +.word 0xfaec7d7d +.word 0x144a7cef +.word 0x3ad1077e +.word 0x3332d957 +.word 0x145c35d6 +.word 0x86b84d64 +.word 0xbe367ef4 +.word 0xd699c424 +.word 0xa190dffb +.word 0xd15bebbc +.word 0x015fa85e +.word 0x483df85f +.word 0xf60f4157 +.word 0x11c2d90d +.word 0x4482ef9f +.word 0x7b9b958f +.word 0x4492ae09 +.word 0x8bcf1652 +.word 0x0c112d65 +.word 0x3c66d04f +.word 0xf52314e6 +.word 0x24eb6384 +.word 0xe7ce5377 +.word 0x2d8b9e76 +.word 0xfe2939af +.word 0xacb26b8d +.word 0xa59d43c0 +.word 0x24680b6c +.word 0x0df8b865 +.word 0xc26c7014 +.word 0x2d184cea +.word 0x308984f4 +.word 0xd29c0425 +.word 0xdff41f65 +.word 0x0c7e2650 +.word 0xf5f4bb65 +.word 0x88e33187 +.word 0x61e400f9 +.word 0x1b68524d +.word 0x63ce3386 +.word 0xfccdef61 +.word 0x47e06423 +.word 0x219dc063 +.word 0x252f4ac9 +.word 0x207cff6c +.word 0x5a381b9e +.word 0xea3b15d4 +.word 0x13b3e3bd +.word 0x31257320 +.word 0xf076802c +.word 0xff34c405 +.word 0xfadc46b0 +.word 0x3ef66402 +.word 0x5ab817d1 +.word 0xf36a17fd +.word 0x7c2df383 +.word 0xb412ca5b +.word 0x503294af +.word 0x0576b177 +.word 0x586a3831 +.word 0xbf88761c +.word 0xc82d018e +.word 0x91a16b4d +.word 0x76cd2bf1 +.word 0x89c2f86a +.word 0x7139bca5 +.word 0x88d0caef +.word 0xd53def8d +.word 0x33512498 +.word 0x9824c14a +.word 0xeecb72b8 +.word 0xd92d11b8 +.word 0x2df0e569 +.word 0xf6a4af3c +.word 0xd70d081f +.word 0x2afcb1aa +.word 0x4411779b +.word 0x33cdb504 +.word 0x0d959b33 +.word 0xfa769782 +.word 0x68c75894 +.word 0xdf6816a6 +.word 0x1d545fd2 +.word 0x039076c5 +.word 0xdea9d244 +.word 0xcb441c8d +.word 0xfdd6e493 +.word 0xaf7b186c +.word 0x86759dd6 +.word 0xc41afcc9 +.word 0x17aff6ce +.word 0x8a566dd3 +.word 0x70f1e48a +.word 0x25766813 +.word 0x99b2d927 +.word 0x52bae74e +.word 0x81a2a1f2 +.word 0x5f9e5414 +.word 0x5170d993 +.word 0x5bc2b656 +.word 0x99dd8bf9 +.word 0xfb0208d8 +.word 0xefa7996b +.word 0xdcb83a76 +.word 0xd5d15f8b +.word 0x496b51df +.word 0xfa0a35aa +.word 0x450e9c86 +.word 0x1f88abb3 +.word 0x8034e087 +.word 0xbb7276a0 +.word 0x574ca617 +.word 0xa530e888 +.word 0x484ade6e +.word 0xf788e089 +.word 0x73f173c4 +.word 0x7a5510eb +.word 0x880bd799 +.word 0xdff980c6 +.word 0xfc8d4b54 +.word 0x874a6cd1 +.word 0x7109c5a0 +.word 0x9e282a42 +.word 0x11bc3fcd +.word 0x6cec3992 +.word 0xd8f46634 +.word 0xc7044b4a +.word 0x0f31be07 +.word 0xdabf556d +.word 0x624f6f07 +.word 0xfb34aa83 +.word 0x5dda85f0 +.word 0x36f35241 +.word 0x8c77e6f0 +.word 0xe243df64 +.word 0x6e5c30b7 +.word 0xde12b0cd +.word 0xb61bf392 +.word 0x5c8c9140 +.word 0x4cf4688c +.word 0x815d724c +.word 0x6625afee +.word 0x5f5eef3d +.word 0xa6d71ad6 +.word 0xe0086f84 +.word 0x959c4570 +.word 0x256d3aea +.word 0x384c3000 +.word 0x5ef4b482 +.word 0x9d5bbaa0 +.word 0x23b776dc +.word 0x14e06ec6 +.word 0x5215c12e +.word 0x48715846 +.word 0x078cb020 +.word 0x89ee7398 +.word 0xebdb554a +.word 0x88cbe58e +.word 0xbcc71fcc +.word 0xd412c857 +.word 0xd6734d3a +.word 0xe9bd71c7 +.word 0x70ff746b +.word 0xaeb40d13 +.word 0x1ee802f0 +.word 0xe14647be +.word 0x60d437a7 +.word 0x79b0b364 +.word 0xe3ea9d4a +.word 0x4968e471 +.word 0x309e0343 +.word 0xd2d6c7c6 +.word 0x994e2d7c +.word 0x15b7ecad +.word 0x072e44b9 +.word 0x59ece52c +.word 0x01ea7f0f +.word 0xd51a2800 +.word 0x2f04522f +.word 0x46302204 +.word 0x6386b8c6 +.word 0x82ffba54 +.word 0x6eae6993 +.word 0xa0efd1bf +.word 0xa8eb722a +.word 0x6fab6949 +.word 0x18d78294 +.word 0xfaa71418 +.word 0xb0f3709c +.word 0x15631382 +.word 0x7112369c +.word 0xc0ea1df8 +.word 0xfde5272b +.word 0x10e5d95b +.word 0x026e14ea +.word 0x7add555d +.word 0x6c0eee14 +.word 0xe4f7f143 +.word 0xd394a2d5 +.word 0x54e21054 +.word 0x6b33fbbc +.word 0x953615c7 +.word 0xe2589e2b +.word 0x33b1f594 +.word 0x6451af1f +.word 0x16a52f21 +.word 0xa42ae271 +.word 0x06cc865c +.word 0xef5f2591 +.word 0x8612e768 +.word 0x92eb533b +.word 0x15d51d65 +.word 0x3b73c2fa +.word 0x7801db1a +.word 0xdb7c4abe +.word 0x89ff43cd +.word 0x48dcca6b +.word 0xfb69466f +.word 0xa954bcdf +.word 0x8743f507 +.word 0x33ce8e12 +.word 0x4c6e538b +.word 0xe65ca913 +.word 0x22056f72 +.word 0x8815bc0c +.word 0x9eb5f691 +.word 0x5ad80fca +.word 0xc4c9e47c +.word 0xe8f2edd3 +.word 0xdb87c3d7 +.word 0xbced5931 +.word 0x341dd68e +.word 0x0f5409f7 +.word 0x6ecdd57b +.word 0x4fe522f4 +.word 0x31a4062f +.word 0xdf127c7c +.word 0x37506b86 +.word 0xd2a0e8a4 +.word 0xf009422f +.word 0x1ea6a8dd +.word 0xe9e03690 +.word 0x65ab7d9b +.word 0x36426e0a +.word 0x2fbc7d38 +.word 0x09a7802a +.word 0x7fae8bc8 +.word 0x6263313c +.word 0xd9f83936 +.word 0xd5404778 +.word 0x0e970fa7 +.word 0x66bc9bac +.word 0x63a21dc7 +.word 0x2d794fe9 +.word 0x402e372b +.word 0x436b0281 +.word 0xb1b22adf +.word 0x5717d077 +.word 0x1c74a5e6 +.word 0x386d2ee9 +.word 0x713272e5 +.word 0x90993925 +.word 0x3ed8872f +.word 0xb31a4f07 +.word 0x3725a43a +.word 0xabba064c +.word 0x9bfee6c8 +.word 0x2cfea596 +.word 0xc0452631 +.word 0x64ec8653 +.word 0x8a1ef8ce +.word 0x99078066 +.word 0xa0cd658a +.word 0x713d3c2c +.word 0x0e5501a2 +.word 0xc964f9f1 +.word 0xdc10e08f +.word 0x7d7b60c1 +.word 0x9438df86 +.word 0x44ba9c90 +.word 0xe60f84ae +.word 0xaf87d490 +.word 0x38cd75ac +.word 0xd1453190 +.word 0xfc7262d0 +.word 0x5890886d +.word 0xfedae054 +.word 0x7bae4718 +.word 0x2dc0bb63 +.word 0xb785722e +.word 0x56c0519b +.word 0xbb7a3425 +.word 0x955cb6ca +.word 0x1b8f0c0b +.word 0x873003e5 +.word 0xd9d07c6a +.word 0x7a510154 +.word 0x8a10f445 +.word 0xdcf6a81e +.word 0x7257ed8c +.word 0x7e20e3a1 +.word 0x9533088b +.word 0xd2e84a55 +.word 0x33ff8af4 +.word 0x17f36bb6 +.word 0xc2dd843f +.word 0x8d763813 +.word 0x4d80e492 +.word 0xe46434d6 +.word 0xe275488a +.word 0x8a9dfd4a +.word 0xfd09f36e +.word 0xd601b0be +.word 0xbf802e15 +.word 0x4a9175bd +.word 0x02c5180d +.word 0xadb84a92 +.word 0xbc309639 +.word 0x59c54ded +.word 0x7a9015ac +.word 0x91323086 +.word 0x3ff50a49 +.word 0xb29724c6 +.word 0x90009f9b +.word 0x62b1f8f7 +.word 0x1c0f018a +.word 0x8dcf7ac5 +.word 0x51d650dd +.word 0xb991b1b0 +.word 0x2c2b4f91 +.word 0x64f700af +.word 0x323b37fd +.word 0x68849d12 +.word 0x938d826c +.word 0x1b5e23b7 +.word 0x0e078a33 +.word 0x7b75ea96 +.word 0x33986e45 +.word 0x814e0cd5 +.word 0x2acbfb63 +.word 0x19cd6511 +.word 0x899aa004 +.word 0xec56008d +.word 0xde58a012 +.word 0x83f9848a +.word 0x65b614c9 +.word 0x10ea77ef +.word 0x46bf50f6 +.word 0x50724ee7 +.word 0xf108cb89 +.word 0x1e010306 +.word 0xf2ae0dc4 +.word 0x7a0b238c +.word 0x6f1daac5 +.word 0x43242a4c +.word 0xf6692c96 +.word 0x2fa326c8 +.word 0x924390f9 +.word 0x82c0e57e +.word 0x33131ed5 +.word 0x3913c388 +.word 0xfc4497e9 +.word 0xca71ba2b +.word 0xbbc3046b +.word 0xe72435a4 +.word 0x193ae4bb +.word 0xb41b80c5 +.word 0xc021f0e3 +.word 0x39b1d17f +.word 0x7501ab2b +.word 0xf9736e64 +.word 0x53a7165a +.word 0xc32947e5 +.word 0x2a4fbc41 +.word 0xaacc4f70 +.word 0x44fa5200 +.word 0x8240aa64 +.word 0x5f54391d +.word 0xdecd930e +.word 0xbeaee34e +.word 0x811011d2 +.word 0xafeed633 +.word 0x6d7b51bf +.word 0xcde5432e +.word 0x41e8d889 +.word 0x8b4d55a9 +.word 0x95eca0bd +.word 0x63590145 +.word 0x0bed6581 +.word 0x2b825b6d +.word 0xa3f5db40 +.word 0x361afb79 +.word 0xc215dca4 +.word 0x81413ed7 +.word 0xf4008307 +.word 0xd90b62f7 +.word 0xba34f875 +.word 0x5f5ca108 +.word 0x0b23abf4 +.word 0x8e803a32 +.word 0xbee4505f +.word 0xebcb03ac +.word 0x33e26c23 +.word 0x289079c7 +.word 0xfb0075bf +.word 0xbd4d0783 +.word 0x7c0f3f4e +.word 0xbd0d2d69 +.word 0x26412023 +.word 0x8b468ccb +.word 0xab2bb43a +.word 0x9a919077 +.word 0x2941fa48 +.word 0x23046862 +.word 0x9ff4d803 +.word 0xe264ce36 +.word 0x235b98c3 +.word 0x01d15056 +.word 0x1532f5d4 +.word 0xc903bd31 +.word 0x640a2cf7 +.word 0x74ae1c32 +.word 0xfe786356 +.word 0x9c74070e +.word 0x4368e3a5 +.word 0xb3724e7b +.word 0x0081b2c2 +.word 0x48128b56 +.word 0xb2d971ad +.word 0x2bbb85a0 +.word 0x085d686a +.word 0x84ab55b7 +.word 0x53eba03b +.word 0xf8a09a4c +.word 0x1a034381 +.word 0xcd5b6aa7 +.word 0x637353e0 +.word 0xce2fda71 +.word 0x71f21d1e +.word 0xaadbd0f7 +.word 0x539d73f4 +.word 0x397e6fce +.word 0x73d21c08 +.word 0xccda4a20 +.word 0x5865fb07 +.word 0x3adadd05 +.word 0x6a76208c +.word 0x188c61cc +.word 0x50d3a4ff +.word 0x92a5a244 +.word 0x8ba73d55 +.word 0x98f280c8 +.word 0x4a3e9183 +.word 0x0658f10d +.word 0x06c87f72 +.word 0x56c8bf07 +.word 0x324b41ee +.word 0x91a800b0 +.word 0x43ee8d74 +.word 0xc30d2280 +.word 0x99f3836c +.word 0xa98e927d +.word 0xbc4b7a47 +.word 0x858859b3 +.word 0x6d33ce74 +.word 0x4ef4de19 +.word 0x101bf885 +.word 0xcb5fafcf +.word 0x8006c851 +.word 0x19878a29 +.word 0xed37631e +.word 0x94fe1b7e +.word 0x9fa17945 +.word 0x704b7551 +.word 0x20498749 +.word 0xffe158f1 +.word 0x2b0d9de7 +.word 0x5dc24f31 +.word 0xffd46c0a +.word 0x1f422782 +.word 0x7fdecf22 +.word 0x7acadc9a +.word 0x3f654e37 +.word 0xecb3af99 +.word 0x6a0854c1 +.word 0x02f76c00 +.word 0x793a9654 +.word 0x01349261 +.word 0xb5601510 +.word 0xde7926b0 +.word 0xe7da5b61 +.word 0x0c45506b +.word 0xacdb8cea +.word 0x4e02897a +.word 0x78fedbd0 +.word 0x4cea01f9 +.word 0x4e154bb9 +.word 0x21fb2f8a +.word 0xa02fa6f2 +.word 0x16ac600d +.word 0xf6d53015 +.word 0x0b381743 +.word 0xf6cd9ab6 +.word 0x3109b9e7 +.word 0x155e41c5 +.word 0xbeab9e6d +.word 0x87e80f38 +.word 0xc4d872d7 +.word 0x822a46a4 +.word 0xa16b2385 +.word 0x152a8efe +.word 0xac81842a +.word 0x832fe51b +.word 0xf6546531 +.word 0x0195dd6f +.word 0x117c3e4b +.word 0xad1ef0f0 +.word 0xed18f943 +.word 0x6bf54855 +.word 0xb600002b +.word 0x8f7f3ad9 +.word 0x6412090e +.word 0x7725840b +.word 0x9a04af9e +.word 0x0764ecaa +.word 0x4e3d060f +.word 0xbcf1b9d5 +.word 0x42145799 +.word 0x79204b58 +.word 0x41b8a066 +.word 0x5b8c7f03 +.word 0xa68a07a9 +.word 0xbe62fb30 +.word 0xf4f27aee +.word 0x7a101ef8 +.word 0x33e82d57 +.word 0x5640aab3 +.word 0x0ef97215 +.word 0x3d53b460 +.word 0x95a4a442 +.word 0x9c70c44d +.word 0x3dd1870c +.word 0x2e7cea0a +.word 0x191a0935 +.word 0x2dbb7f3d +.word 0x805c722e +.word 0x415331ce +.word 0xe23a61ae +.word 0x9099f1b3 +.word 0x57153c4c +.word 0x6e5afcba +.word 0x0a3d08eb +.word 0xbb9e867a +.word 0xc0474aad +.word 0x5d171ddd +.word 0xb9b9b60d +.word 0x45c13851 +.word 0x38312604 +.word 0x3a6d9f5c +.word 0x3259dbb8 +.word 0x9b19bde1 +.word 0xa46155ed +.word 0xba4d037b +.word 0x1a907953 +.word 0xc42a04ad +.word 0x7a70208f +.word 0x60e40550 +.word 0x80c98a12 +.word 0x6ec9c4b4 +.word 0x3338f2cf +.word 0x651fdfc2 +.word 0xa564eb72 +.word 0xb718dae5 +.word 0xea3e8701 +.word 0x31c327f2 +.word 0xe4187b16 +.word 0xcce3a15f +.word 0xb68518a3 +.word 0xfac0a45b +.word 0x234c2bcc +.word 0xc6cefe51 +.word 0xe63f50a4 +.word 0x1f3dc543 +.word 0x983c3f47 +.word 0xf26ef3fe +.word 0x4b034391 +.word 0xdaf2e964 +.word 0xe8046eae +.word 0x6f62c360 +.word 0x252b6825 +.word 0x372e1636 +.word 0xd46f9f94 +.word 0x6c12ca50 +.word 0x50cfef54 +.word 0x71629bb0 +.word 0xed9dba41 +.word 0x4104e3b1 +.word 0x04ae9372 +.word 0xf2fed8cb +.word 0x51216471 +.word 0x62af1607 +.word 0xf9d29c84 +.word 0x482aa346 +.word 0x15f30406 +.word 0xe341762d +.word 0x3e6e3d7b +.word 0x38b9a93c +.word 0xf00a6b4b +.word 0x3ab69097 +.word 0xe6b064e3 +.word 0x5546d7f2 +.word 0x4da16399 +.word 0x374077ba +.word 0x8ad47f27 +.word 0x8f64bc17 +.word 0x65f9c0a0 +.word 0x81e6d0b5 +.word 0x4c503d5a +.word 0xd670ef08 +.word 0xef121745 +.word 0xc0c990a9 +.word 0xd1dcae93 +.word 0x121bb0d9 +.word 0x4016cecb +.word 0x3425f1c9 +.word 0x27a2bb4b +.word 0xf7eb8667 +.word 0xe7bf5e67 +.word 0xea065574 +.word 0x8ece1639 +.word 0x1dd3444e +.word 0x6d522de8 +.word 0x0e64c751 +.word 0xe796a96d +.word 0x43f83d32 +.word 0x49c3a97a +.word 0xf21de7d1 +.word 0x33546f8e +.word 0xec2efb67 +.word 0x4fa756cb +.word 0xaa320983 +.word 0x1b50f18d +.word 0xe5fba0d9 +.word 0x660c83f7 +.word 0x58551db9 +.word 0xa784d5b9 +.word 0x97e88cc8 +.word 0x403ff338 +.word 0x1fca42b3 +.word 0x93522f24 +.word 0x0650eea5 +.word 0xdf17f1ab +.word 0x58002a13 +.word 0x2b6a3ca7 +.word 0x53f0a101 +.word 0x1d229459 +.word 0x510f8753 +.word 0x8b104c42 +.word 0x682b41bc +.word 0x558f2552 +.word 0x4a713c60 +.word 0x7c8b8f0e +.word 0xc75877b7 +.word 0x700ebae0 +.word 0xc4958a26 +.word 0x7b903460 +.word 0x1ece6f39 +.word 0x2b949d8b +.word 0xd8ff0f1c +.word 0x7ab2cf69 +.word 0x61e70ffb +.word 0x84018a26 +.word 0xd8a2134f +.word 0x60158baf +.word 0x5c913616 +.word 0x5db025b7 +.word 0x02c41edd +.word 0x8b7a6e6b +.word 0x7aaa58b2 +.word 0x7eebebf1 +.word 0x739b9b20 +.word 0x78f39702 +.word 0xb728c26a +.word 0x2fa6dd67 +.word 0xfb3c17d1 +.word 0x1d5a9c75 +.word 0xddc83e26 +.word 0x2cd08ef7 +.word 0xcb927b3f +.word 0x42b16aaa +.word 0x140707eb +.word 0x8a69e760 +.word 0xd6c75587 +.word 0xd871cf8b +.word 0xe081afe1 +.word 0xface23f4 +.word 0x0d9bb17f +.word 0x610895a5 +.word 0x1b5ed9d4 +.word 0xc152b470 +.word 0x7395946b +.word 0xbe7b8970 +.word 0xcbb4a761 +.word 0xffbd74ef +.word 0xad4634ee +.word 0xe00da8b5 +.word 0x8c699dd8 +.word 0x14a76da3 +.word 0xe41eb0b9 +.word 0x174fe935 +.word 0x15f4dc26 +.word 0xd4904fa4 +.word 0x47d2da62 +.word 0xa9931cab +.word 0x07539579 +.word 0x35f69e61 +.word 0xb736e90e +.word 0x09a3d283 +.word 0x82b7d6dc +.word 0xefffb3f8 +.word 0x36dd858a +.word 0xb46c972e +.word 0xbe6cccc0 +.word 0x9eb6d5ca +.word 0xc42dcd2b +.word 0xb2bc08df +.word 0x03a7663b +.word 0x311b1a76 +.word 0x89523ef5 +.word 0xf848c221 +.word 0x378a95b8 +.word 0x963c4b2e +.word 0x20da1036 +.word 0xd8ca006c +.word 0x71f4f271 +.word 0x859fb60d +.word 0xab5a0bcf +.word 0x22f36033 +.word 0xba9302bd +.word 0xccc5e32a +.word 0xdc0c92f4 +.word 0x480b7b22 +.word 0x3bfc6af8 +.word 0x2a3a9731 +.word 0xe63dc26b +.word 0x7022d41a +.word 0x63cbace8 +.word 0x853ceb3d +.word 0xb2d26411 +.word 0x516e0469 +.word 0x561830eb +.word 0xc426ca38 +.word 0xc6d4e006 +.word 0x4bc3ef8c +.word 0x12db3dc5 +.word 0xed95efed +.word 0xbacde24a +.word 0x981ee04f +.word 0x679725ff +.word 0xf57544b1 +.word 0x6e3db03a +.word 0x376f787d +.word 0x19b06f54 +.word 0x59de2720 +.word 0x99cbaf18 +.word 0x5d52114e +.word 0xf2756882 +.word 0xa65a4b55 +.word 0x754bc3b1 +.word 0xa9094abb +.word 0x9a0c6468 +.word 0x9e1ab6bd +.word 0x7ec67d91 +.word 0x85e512d8 +.word 0x7dc25019 +.word 0xd4d380b8 +.word 0x311ebadb +.word 0xc9142c80 +.word 0x4c5e14c3 +.word 0xd9494896 +.word 0x12a2cefa +.word 0x7c289439 +.word 0x7163b5cd +.word 0xb628daa5 +.word 0x33d0e15b +.word 0x432f8d57 +.word 0x22090cfe +.word 0x8fbb363d +.word 0x93989088 +.word 0x0021ffff +.word 0x2d8949be +.word 0x331b1e94 +.word 0xf50c2528 +.word 0x747bd6d6 +.word 0x90c767a4 +.word 0x4a261a0c +.word 0xa8e1b686 +.word 0xd01f3b11 +.word 0xabd40ce3 +.word 0x005f3eaa +.word 0x70833fea +.word 0x7d23f4f3 +.word 0x0b67cd1d +.word 0xca3a4575 +.word 0x51a01d39 +.word 0x4b19d926 +.word 0xa0107acf +.word 0x95b56752 +.word 0x7f1666ea +.word 0xdbfb1460 +.word 0x84d43f4f +.word 0x57da4308 +.word 0x107bc4a6 +.word 0x8d89adc1 +.word 0x5d0d0abc +.word 0x895e2702 +.word 0x58f09ada +.word 0x01c31325 +.word 0x09ad21ef +.word 0x286bb04a +.word 0x180cd825 +.word 0xd9f5998c +.word 0x94abbcba +.word 0x3d0f05ef +.word 0xb5ef2770 +.word 0xa26c7111 +.word 0x0fe05460 +.word 0xc052d012 +.word 0x3a95b3b5 +.word 0xff51a82b +.word 0x24523052 +.word 0x492ccc72 +.word 0x3fc6810b +.word 0xdcb89519 +.word 0xd18f306b +.word 0x94535c6c +.word 0x2623f0ce +.word 0x6dbc9f15 +.word 0xb3b609ed +.word 0x0ed3150e +.word 0xebc277ed +.word 0xd7630fa1 +.word 0xee840215 +.word 0xb2d6eb99 +.word 0x9e1d9be3 +.word 0xf99d591e +.word 0x4454330d +.word 0x4e3881eb +.word 0x1f88a7c0 +.word 0x2e2de15f +.word 0xcc685aba +.word 0x18610f2d +.word 0xbe7f2fe2 +.word 0x6571bc76 +.word 0xe0ab694e +.word 0xc2774728 +.word 0xafd3f8a3 +.word 0xd85274ce +.word 0x0ae361fe +.word 0x43f35f1e +.word 0x5e5c0ae6 +.word 0x6de88d1d +.word 0xab9ac3cb +.word 0xe112c9ee +.word 0xbd738f01 +.word 0xedbf2308 +.word 0xb22b2893 +.word 0x5b42695f +.word 0x82016107 +.word 0xbf9fd05f +.word 0xd09d704d +.word 0x5eb1d356 +.word 0x5af8ef89 +.word 0x9d5002c5 +.word 0x3a7717eb +.word 0xe20a3e98 +.word 0x0004d747 +.word 0xa61156a5 +.word 0x7c521348 +.word 0x31ebe6a4 +.word 0x91f7e15c +.word 0x7962145f +.word 0xf64d24b9 +.word 0xe276ebf1 +.word 0x9629da3a +.word 0xdf139b2f +.word 0xe237d27d +.word 0x2a48d4d8 +.word 0xd3cf616d +.word 0xd5564f89 +.word 0xfda7b32d +.word 0xc2779b73 +.word 0x645d4103 +.word 0x34d5864c +.word 0xa720c264 +.word 0x35f13cdc +.word 0xc1ddabb5 +.word 0x930825ac +.word 0xd365ef3a +.word 0x5b435328 +.word 0x4d911e1b +.word 0xe7886677 +.word 0xa999f455 +.word 0x60d3fe75 +.word 0x8f86c6f9 +.word 0x6f7f0d85 +.word 0xa498118b +.word 0x844bbd02 +.word 0x491b3fdf +.word 0xfacb7f0b +.word 0xe2a1af14 +.word 0xc238783a +.word 0x47394a57 +.word 0x31b9d706 +.word 0xbb272216 +.word 0xd285540d +.word 0xa7195efa +.word 0x36a7dc15 +.word 0xb86af4e7 +.word 0x85f1c807 +.word 0x5f93d47c +.word 0x96c583e9 +.word 0x72e2b108 +.word 0xa616a4bd +.word 0xc06b3b04 +.word 0xfb9527b8 +.word 0x1c74ac10 +.word 0x9232ba1f +.word 0xf205bbc1 +.word 0xa831f5dc +.word 0x946412cd +.word 0xda5ca7fb +.word 0x0805421e +.word 0xcaed361b +.word 0x9f8afc52 +.word 0x9590cd9e +.word 0x4f89290a +.word 0x9e85f06c +.word 0x20183497 +.word 0x8686f264 +.word 0x41fccadd +.word 0xee803746 +.word 0xcdfee3a0 +.word 0x790c0659 +.word 0xc146a3d6 +.word 0x62826068 +.word 0x860b0468 +.word 0x2957f875 +.word 0xdb9e0c53 +.word 0xc39910d9 +.word 0xc28f87b0 +.word 0x1550dc86 +.word 0xd1c6c10c +.word 0x0314b71f +.word 0x90acf376 +.word 0x7ce0ecdc +.word 0x0f2a58f1 +.word 0x6bf6cace +.word 0xe319f884 +.word 0x9fd00c4d +.word 0x5081f66d +.word 0xd079520a +.word 0x5afc7eb4 +.word 0xe5a60193 +.word 0x669f51bb +.word 0x13ddbfee +.word 0xf8c2d107 +.word 0x12315095 +.word 0x40c8ed2e +.word 0xc5639cf8 +.word 0x1d7c1268 +.word 0x8b4c8022 +.word 0xdbeb0da8 +.word 0x97079f51 +.word 0x591ec8a9 +.word 0xc20d6315 +.word 0xd35a0628 +.word 0x94519b96 +.word 0xa07d545d +.word 0x528640fb +.word 0x684f45c1 +.word 0xfdeab9e3 +.word 0xf8ca20b3 +.word 0x006fb304 +.word 0x323ebb14 +.word 0x39ab8535 +.word 0xcafac3c4 +.word 0x335afc8b +.word 0x2b5bde31 +.word 0xc410ffc3 +.word 0x2b3b5ecc +.word 0xfa355751 +.word 0x74936e61 +.word 0xe60979a4 +.word 0xd1d9006b +.word 0x3508cf6c +.word 0xc91fb39d +.word 0x6a38cd99 +.word 0x38df55e3 +.word 0x0bca0142 +.word 0xb4050ce2 +.word 0x8fa09f77 +.word 0x4d9c9955 +.word 0xd5329bdb +.word 0x32713526 +.word 0x71dad1e6 +.word 0x1656e776 +.word 0x59b3a1a2 +.word 0xe27aaf50 +.word 0x8004f135 +.word 0x27503624 +.word 0x3c8ea1a7 +.word 0xa4f3e2f0 +.word 0x471967cd +.word 0xe31d9f16 +.word 0x0f81403c +.word 0xde704268 +.word 0x9f37842a +.word 0xd27de596 +.word 0x5aadf4dc +.word 0x11b2a214 +.word 0x2c12b6a5 +.word 0xa076e5f4 +.word 0x06a201ce +.word 0x1c351318 +.word 0xc84403a8 +.word 0xe0c65b44 +.word 0xdb2a85e6 +.word 0xd661cde5 +.word 0x8e16f01f +.word 0xe0118d6a +.word 0xb294e327 +.word 0x8eb18c59 +.word 0x6cf9fa1e +.word 0x063bb869 +.word 0x16f1d7ee +.word 0x3fe9f450 +.word 0x75fde408 +.word 0x1efc762d +.word 0xf870961c +.word 0x93953e74 +.word 0xbd8a59d4 +.word 0xe48888c6 +.word 0x39ea9615 +.word 0xe2dabffd +.word 0xf5429211 +.word 0x4478a163 +.word 0x201f320f +.word 0xcccecafc +.word 0xe3c7c27d +.word 0xcc6a9de0 +.word 0x68875021 +.word 0x9a26442c +.word 0x1d2706da +.word 0x3c083011 +.word 0x6b3b113c +.word 0xbea68606 +.word 0x16bab462 +.word 0xeda43010 +.word 0x07a25159 +.word 0xf83c7006 +.word 0x3ca904ca +.word 0xd1a0a854 +.word 0xd16b8e1d +.word 0xf454e20b +.word 0x785e793d +.word 0xb2e43f8f +.word 0x4ac2f2a2 +.word 0xd5362e9d +.word 0x1bddf2d9 +.word 0xe23ceaec +.word 0x97a23b32 +.word 0x0fd95040 +.word 0xf0fa4d8c +.word 0x50e5e361 +.word 0x117190e5 +.word 0x425088e4 +.word 0x06fdb81b +.word 0x4803b2b6 +.word 0xb5be2814 +.word 0xfd0f9370 +.word 0xa1a0dd40 +.word 0xdaa01c5e +.word 0xd281954e +.word 0xb6f7c05d +.word 0x6266b9e1 +.word 0x40750d4b +.word 0x27f1b91b +.word 0x8c061feb +.word 0x344441d4 +.word 0xbd6ba162 +.word 0x520b8179 +.word 0x944a90ca +.word 0x8be46818 +.word 0xa0bf992c +.word 0x27c28b8c +.word 0x419a21c2 +.word 0xb04b8ab3 +.word 0x3690c7ef +.word 0xabe6e150 +.word 0xf70d1583 +.word 0x639e0caa +.word 0xf62f3d23 +.word 0x9d40dcfc +.word 0xf1c3e838 +.word 0x86b72652 +.word 0xc0b73fea +.word 0xaebb7e28 +.word 0x31fac927 +.word 0x84958f77 +.word 0x94b693cd +.word 0x76b12f1e +.word 0xa8f38f34 +.word 0xe8bb53aa +.word 0xcb82ed17 +.word 0xcfef0d9f +.word 0x24b918c5 +.word 0xb4018af6 +.word 0xa09c4475 +.word 0xf036f132 +.word 0x00a716e7 +.word 0x2c240c90 +.word 0xf9c34c4f +.word 0x5f599497 +.word 0xb4a43f4d +.word 0x977d8d1a +.word 0x65e27d58 +.word 0x70499510 +.word 0x8fe9476a +.word 0xfc366aad +.word 0x888b82cc +.word 0xca4c0c1f +.word 0x4daf92a2 +.word 0xb634209b +.word 0x9ac9cb94 +.word 0xbe51e40a +.word 0xe127f624 +.word 0x146ebd1d +.word 0xf791754d +.word 0x9c3507ee +.word 0x4281f6d6 +.word 0x76e007c9 +.word 0x18cb2380 +.word 0x3b2ae56e +.word 0xd678b773 +.word 0xb60d1f94 +.word 0xddc62930 +.word 0x2990bc3b +.word 0x1bb17d32 +.word 0x611ddcd7 +.word 0x7ee9d707 +.word 0xb5f87dae +.word 0x4c5e7c80 +.word 0xbcbe4a1c +.word 0x958f6420 +.word 0x49e579d6 +.word 0xc9aa290a +.word 0x12dcbee4 +.word 0x979abefd +.word 0x30137917 +.word 0x0ae800a1 +.word 0x7a74f32d +.word 0x85142aec +.word 0x9ccf28ba +.word 0x600fba9b +.word 0xedf3ff8e +.word 0xc8bdf641 +.word 0x2769d938 +.word 0x013802cc +.word 0xf5e8f1bc +.word 0x693c816e +.word 0x1addbaa7 +.word 0x2d7e603a +.word 0xb33e31d6 +.word 0x2d363ad4 +.word 0x5f81dfa3 +.word 0xad461972 +.word 0x5a30203d +.word 0xa74d827d +.word 0xf2c7ce1e +.word 0xcafe0c58 +.word 0xa0d2d78b +.word 0xa028fa41 +.word 0x4f4036cb +.word 0xa3f1fc02 +.word 0xa62c2c1b +.word 0x964753c9 +.word 0x7d9fe9ab +.word 0xc0631880 +.word 0x3457eecc +.word 0xb6a3e997 +.word 0xfa7e571d +.word 0x09309f3c +.word 0x4089011e +.word 0xfc5a9421 +.word 0x151c0808 +.word 0xd15af78b +.word 0x94ba200f +.word 0x11cdf50f +.word 0xa130b4ad +.word 0x01f4e1ec +.word 0xd96c9b61 +.word 0x4d67df6e +.word 0xec882e5f +.word 0xe5cb49d2 +.word 0x22f60bf5 +.word 0x672948e8 +.word 0x270a2b4e +.word 0xc1ffb7f0 +.word 0x18697682 +.word 0x12dffa7b +.word 0x1db906e8 +.word 0xdbd72a61 +.word 0x3f403856 +.word 0x52b14f6a +.word 0x72397c39 +.word 0x8d440882 +.word 0x69c6bac7 +.word 0xf2766ec3 +.word 0x57330d03 +.word 0x79d73655 +.word 0xdcb56d57 +.word 0x3e5c1e2c +.word 0x2c89cb5a +.word 0xd6160a3b +.word 0x50e1f7e5 +.word 0xe455a21f +.word 0xd275d3ac +.word 0x5f77b1b2 +.word 0x5537b7bd +.word 0x19f325fd +.word 0xdf9bebe6 +.word 0x714910e3 +.word 0x5798c6bb +.word 0x2d32f7cb +.word 0x39d58aa3 +.word 0xdfb67e1f +.word 0x2171936f +.word 0x8df92fea +.word 0x9fecdf8f +.word 0x85389349 +.word 0x809af163 +.word 0x65c1c6c2 +.word 0x310e5e03 +.word 0xd22dbe63 +.word 0xe597077c +.word 0x905e6908 +.word 0x406d518a +.word 0xe98a3295 +.word 0x33a52245 +.word 0x2bc2861f +.word 0xa038ab78 +.word 0xd4d99fba +.word 0x928098b1 +.word 0x1c14f416 +.word 0xfa9cb87c +.word 0x27fb6a26 +.word 0x57f8f014 +.word 0xfd0004cb +.word 0xcacae73e +.word 0xc178c608 +.word 0x1364d975 +.word 0xda0e23c6 +.word 0x666bb137 +.word 0x02be0aa7 +.word 0xca02b209 +.word 0xee27e26a +.word 0x0c2e95cb +.word 0x74440d60 +.word 0xe6c8754c +.word 0x551cb971 +.word 0x4d8dc44b +.word 0xc7685d53 +.word 0x70f35812 +.word 0xff8239fd +.word 0xdb225ae4 +.word 0xdbcad48b +.word 0xb4fcbad7 +.word 0x31dfef36 +.word 0xafe02e89 +.word 0x941de5fe +.word 0x7b987407 +.word 0x91046c2e +.word 0x4e25e877 +.word 0x32a44f36 +.word 0xe9852e3f +.word 0x5deb7a1a +.word 0x1b16662f +.word 0xf9f725e4 +.word 0x82c32790 +.word 0xad03ac06 +.word 0x56d54875 +.word 0x261f0fa1 +.word 0x551a94c2 +.word 0xd55e2af4 +.word 0x461e18c0 +.word 0xe9882a88 +.word 0x4dedc5cc +.word 0xe5a024a9 +.word 0x2dd293d3 +.word 0x71946416 +.word 0x20fc627f +.word 0x260438ca +.word 0x85c44320 +.word 0x5d730233 +.word 0x899a60f1 +.word 0x376766f6 +.word 0x4f7a60dc +.word 0x52644bed +.word 0xe5f711d7 +.word 0x14b50a39 +.word 0x6a8ffde7 +.word 0xdabb9d40 +.word 0x9276f6c4 +.word 0x4175d1d2 +.word 0xff4a0e59 +.word 0x1bbe7afb +.word 0x230fb770 +.word 0x045a12af +.word 0x706c5e88 +.word 0xdbd59f6b +.word 0x484794c6 +.word 0x4919f00d +.word 0xcc52b6d8 +.word 0x13d9467c +.word 0x04716383 +.word 0xa9d9e46e +.word 0x169266b9 +.word 0x8700095e +.word 0x250e2677 +.word 0x9a0ad345 +.word 0xd9ef5611 +.word 0x73fa78c8 +.word 0x45f7fcaa +.word 0x9f92f88e +.word 0xb33dd95f +.word 0x0e91f42c +.word 0x3d681100 +.word 0x606d0d5a +.word 0x817ce012 +.word 0x460ad4c9 +.word 0xa8808b5f +.word 0x41651a65 +.word 0xe7a04b1b +.word 0x5a0b09a0 +.word 0x38b8cdd7 +.word 0x1414f7a5 +.word 0x2066fb39 +.word 0x372e5993 +.word 0xe1f78b03 +.word 0x6aa60b20 +.word 0x716a4a2d +.word 0xf5af6bb7 +.word 0xf7737051 +.word 0xc404f4ef +.word 0x3d7d7503 +.word 0x53cd8ff8 +.word 0x814e75b4 +.word 0x4213c450 +.word 0x58dadc81 +.word 0x366a0fd2 +.word 0x3dbda7f2 +.word 0xbfdd451a +.word 0x9a765873 +.word 0x720f2733 +.word 0x78bf58f5 +.word 0x9d0963d5 +.word 0xaf45e718 +.word 0x05d9e6b7 +.word 0xd7e67310 +.word 0x767050d6 +.word 0x578bd345 +.word 0xf562c4eb +.word 0xc1b33023 +.word 0x59b69cda +.word 0x064603a8 +.word 0x6fece031 +.word 0x70931bca +.word 0x5ff32473 +.word 0x19070d81 +.word 0x93a5a612 +.word 0x41351184 +.word 0xc30a5ffe +.word 0x874e5fc3 +.word 0x4af42f4e +.word 0xd378ed6a +.word 0x72993090 +.word 0x159b2730 +.word 0x47a5fce9 +.word 0x0d7c488b +.word 0x6dfa80c9 +.word 0xe8a32c28 +.word 0xf0bb2f60 +.word 0xa6e97c4b +.word 0x27817f5c +.word 0x3d5a022f +.word 0x3408cc32 +.word 0x5f6d9d22 +.word 0xa3606ce1 +.word 0x05b092d1 +.word 0x7d4cc873 +.word 0x6cf4b389 +.word 0xa949a553 +.word 0xd39579f7 +.word 0x65984c36 +.word 0x9a4e656c +.word 0x459ed28c +.word 0x74518177 +.word 0xa2912533 +.word 0x0d630ada +.word 0x83925b6e +.word 0x8090dac3 +.word 0x2efcf0d2 +.word 0x3faee5a5 +.word 0xd2fc85ea +.word 0x596df8e2 +.word 0x31464920 +.word 0x48dc92b0 +.word 0x856d09f9 +.word 0x6617b828 +.word 0x59df52fe +.word 0x52957bb6 +.word 0x37728f00 +.word 0x812a6b41 +.word 0x9993142f +.word 0x16ce440a +.word 0x97312875 +.word 0x4ec1bfda +.word 0xfa852eee +.word 0xf021b2e4 +.word 0x219919d2 +.word 0xb23dd604 +.word 0x586049ba +.word 0x1c798865 +.word 0xe029ce25 +.word 0xe8879bd4 +.word 0xc9667538 +.word 0xa2f9de93 +.word 0xfa5fa927 +.word 0x8e3fdf06 +.word 0xad08d5af +.word 0xa7176d9b +.word 0xdbf5765f +.word 0xdb22f370 +.word 0x4de4581d +.word 0x353534f5 +.word 0x8bbe360a +.word 0x96f7028a +.word 0x5a6b1734 +.word 0xdc55b059 +.word 0xd944994c +.word 0xafd2e0f3 +.word 0x8909bdb5 +.word 0xb2006218 +.word 0x31f85fec +.word 0xcec3a20c +.word 0x2092c349 +.word 0xe74b57dd +.word 0xa023b29d +.word 0x46fcaef7 +.word 0x30c373ed +.word 0x9989de2c +.word 0x76c2099c +.word 0xb257b9af +.word 0x190bd0e2 +.word 0xe0137761 +.word 0x6dd28a35 +.word 0x7096c10e +.word 0xbd107d1b +.word 0x9b372b11 +.word 0x71e6b16b +.word 0x4af13fdd +.word 0x774382ab +.word 0x08031ad7 +.word 0x41835d25 +.word 0xd3672a5d +.word 0x1ec1cde1 +.word 0x160307e1 +.word 0xd9203f89 +.word 0x5fb01cce +.word 0x87a6d68f +.word 0x96654f7d +.word 0xb7c67678 +.word 0x519467a0 +.word 0xc521ebdb +.word 0x0026db3b +.word 0xd8f25fe7 +.word 0x4f54dbf2 +.word 0xa0147e0f +.word 0x4dbcd17d +.word 0xbfd48ed2 +.word 0x60540fc7 +.word 0x9a331afa +.word 0x521c11ed +.word 0xd51d8a4c +.word 0xc6e5923a +.word 0x338010b4 +.word 0xc1a0c3d0 +.word 0xf1432af6 +.word 0x3cb658fb +.word 0x30c3d970 +.word 0xee5abf9a +.word 0xf682b1c7 +.word 0x2138da60 +.word 0xc689fd02 +.word 0xee178ad7 +.word 0x436facd7 +.word 0xc7d8daaf +.word 0x4c1d1f55 +.word 0xc9888d25 +.word 0x822779ba +.word 0x78f2c45d +.word 0x1fed56ed +.word 0xa7083d4c +.word 0xb34f33af +.word 0x4a6607c7 +.word 0x0b836a8f +.word 0x172def3c +.word 0x426c1662 +.word 0xff230968 +.word 0xbe6b790c +.word 0xe55fd121 +.word 0xbfecb84e +.word 0x22344e5a +.word 0x62cbd57e +.word 0xf33003f6 +.word 0xda011497 +.word 0xfdcce902 +.word 0xd1e48344 +.word 0xb5fed310 +.word 0xc364a2ef +.word 0xea3cf2d5 +.word 0x6de15ccb +.word 0x088b5a93 +.word 0x4ffda684 +.word 0x03665c13 +.word 0x45ce1b74 +.word 0x9703ebec +.word 0x4674371e +.word 0x3f82f536 +.word 0x183eae92 +.word 0x5bb320fc +.word 0x84193317 +.word 0x97482b1c +.word 0xf167e4dd +.word 0x1206692f +.word 0x4151e4f1 +.word 0x13ae766c +.word 0xee1e77b2 +.word 0xa1c63a2e +.word 0xa8129d23 +.word 0xd04c811f +.word 0x00a39449 +.word 0xe74334ab +.word 0x5515ddbc +.word 0xa0ee93aa +.word 0x6766ef13 +.word 0xbee56305 +.word 0x4d495e4c +.word 0x4711f4d3 +.word 0x3fef8d3b +.word 0xb987fe31 +.word 0x74bc0824 +.word 0x27c30770 +.word 0x5af7521a +.word 0x9166dce8 +.word 0x5f58487a +.word 0x97ae0743 +.word 0xd7ce8432 +.word 0xa3e1fdcc +.word 0xcd227187 +.word 0x4da914b7 +.word 0xde992499 +.word 0xf0d53a86 +.word 0x87a0bc45 +.word 0x05e4fd1e +.word 0x15ff9758 +.word 0xc1df1bb1 +.word 0xde0e84d8 +.word 0xb970e1f2 +.word 0x82051a2d +.word 0x8a4bcfb3 +.word 0x1d9c6c3e +.word 0x9932c942 +.word 0xfffd72b7 +.word 0x349f4e71 +.word 0x9c453950 +.word 0xd9c47fce +.word 0xa66bf413 +.word 0x59c2474c +.word 0x3cdc24d7 +.word 0xbb91291c +.word 0xed7157dd +.word 0xe0b3b8d3 +.word 0x66946b82 +.word 0xbea785bf +.word 0xcfb7416d +.word 0x6018ef66 +.word 0xc16cafa7 +.word 0x62ca766f +.word 0x3353e018 +.word 0x001b02eb +.word 0xb97cae2c +.word 0xc0a65e3b +.word 0x0af326f8 +.word 0x0fe0ba6a +.word 0x51977243 +.word 0x35546270 +.word 0xbb524def +.word 0x30a090e8 +.word 0x95be7e8a +.word 0x8d06fdcc +.word 0x594be78d +.word 0xdad0575f +.word 0x6ff82f55 +.word 0x8312465d +.word 0xaa8a2533 +.word 0x678a96bf +.word 0x2f9920ec +.word 0xf3f0d989 +.word 0xc0739db8 +.word 0x8ba5028d +.word 0x7efc89f6 +.word 0x9e0378bd +.word 0x4b8a6160 +.word 0x12a17aee +.word 0x8b870132 +.word 0xe662fa24 +.word 0x194e9323 +.word 0xfb2913bb +.word 0x5fa7f730 +.word 0xff951789 +.word 0xc4fc93d3 +.word 0x45ae8a1a +.word 0x368020b2 +.word 0xe36752c3 +.word 0xfac3eab0 +.word 0xce19779a +.word 0x959783d0 +.word 0x8b1804d8 +.word 0xc8433d1f +.word 0xd296bd10 +.word 0xd596aed4 +.word 0x49d73237 +.word 0xd3bfcf50 +.word 0xf41b70bc +.word 0x93109da1 +.word 0x0263d45c +.word 0x303d6e67 +.word 0xa6aa709e +.word 0x6cd0aaac +.word 0xeaf163b4 +.word 0xa445d3ee +.word 0xb30fc1b3 +.word 0x26c6036a +.word 0x865881e9 +.word 0xb5dc1aec +.word 0xeaab5da7 +.word 0xe6dbb806 +.word 0x438f7180 +.word 0x80739ead +.word 0xfa985b7a +.word 0x170f597a +.word 0x121b1f93 +.word 0x2e7eaeac +.word 0xbb41953a +.word 0x5338c1c7 +.word 0xb5257eda +.word 0xd3c901ad +.word 0xcef18b62 +.word 0x0a360608 +.word 0xb03f0c76 +.word 0xcc582ee8 +.word 0xb3e505d6 +.word 0xdd3081d4 +.word 0xd15377a2 +.word 0x9d1e740b +.word 0xddb0c0d3 +.word 0x8b6732fd +.word 0x1bb1a8a2 +.word 0x48faab33 +.word 0xeebe2ad8 +.word 0x561d8be7 +.word 0x78b0df3f +.word 0xdf83159d +.word 0xaf7619e4 +.word 0xca6c7b9d +.word 0x7860c149 +.word 0x82014fb8 +.word 0x13bccefb +.word 0x3316af41 +.word 0x288696e7 +.word 0x8986d233 +.word 0x86ba5ead +.word 0x127d085f +.word 0xa2842395 +.word 0x1a01d8a1 +.word 0x62c15e0e +.word 0x06c75da8 +.word 0x799a6707 +.word 0x2512f354 +.word 0xf0c116ff +.word 0x5cab49f5 +.word 0xd4464ebb +.word 0x71376cf5 +.word 0x53bf0e4e +.word 0xd70656b8 +.word 0x4652c9fa +.word 0x83d8207c +.word 0xa3aa79ac +.word 0xfe7879ad +.word 0xb4276ced +.word 0x0d26cb6c +.word 0x74b798f2 +.word 0xf3c2d184 +.word 0xdacd4352 +.word 0x5e70dcde +.word 0x20dfde80 +.word 0x44ece45a +.word 0xc1ce1a87 +.word 0x2e306742 +.word 0xe44fb83d +.word 0x43fe96ff +.word 0xb07cae25 +.word 0xb19a8f90 +.word 0x3e0555bf +.word 0x84cbde73 +.word 0xa0dd0854 +.word 0x44e7d6e4 +.word 0x8833ec95 +.word 0xa0a4b6a6 +.word 0xf518439b +.word 0x48b4d213 +.word 0x2c7ec35a +.word 0x81cfc4a1 +.word 0x98c49bca +.word 0x7cb5b81c +.word 0xe9b096b2 +.word 0x33a5980c +.word 0x82247941 +.word 0x78adaff8 +.word 0x32b81fa8 +.word 0x746822e2 +.word 0x73d8f120 +.word 0x6018b329 +.word 0xc5f3a82b +.word 0xfc8364f0 +.word 0xf81a3a51 +.word 0x37d71457 +.word 0x5f398384 +.word 0xf30d4388 +.word 0x154151b7 +.word 0x16ecf710 +.word 0x10980f26 +.word 0xf5bfe81d +.word 0x8166f9b3 +.word 0x6edfe7bd +.word 0x193077e6 +.word 0xe25658c8 +.word 0xfe328514 +.word 0xb01419a6 +.word 0xe98987fc +.word 0x9165bf05 +.word 0x4f9f3522 +.word 0x2dea9589 +.word 0x4dc53f9f +.word 0x26631fee +.word 0x5e51457e +.word 0x0c20b41f +.word 0x0a6d1506 +.word 0xe5b98f77 +.word 0xd91df13e +.word 0xd094b054 +.word 0x5a155132 +.word 0x7357ad2b +.word 0x8affb65b +.word 0xc98dbb74 +.word 0x4db6750c +.word 0x83288d01 +.word 0x8c9afc36 +.word 0xd74cdaa1 +.word 0x596d76d5 +.word 0x00d62b6c +.word 0x6767233a +.word 0xe2434f63 +.word 0x2cc44845 +.word 0xa0571705 +.word 0x21e66fab +.word 0x4566aae2 +.word 0x9fed55be +.word 0x1a45e5e5 +.word 0x744081e7 +.word 0x963763c0 +.word 0x635ab843 +.word 0xc18df15b +.word 0xd8a84962 +.word 0x4777ce06 +.word 0xc2c2eb80 +.word 0xc17493ee +.word 0x988efbb7 +.word 0x975db8aa +.word 0x91581cb3 +.word 0xbd61af82 +.word 0xb0d6b288 +.word 0x456189d5 +.word 0xa6667797 +.word 0xb601ea4f +.word 0x765a8759 +.word 0xe5630066 +.word 0x50827a1b +.word 0x8d2973c6 +.word 0x918e7766 +.word 0x9a7587ed +.word 0x2f1c31cd +.word 0xab1074b7 +.word 0x1dbb7310 +.word 0x8886ac91 +.word 0x737ac8aa +.word 0xb2006485 +.word 0xdb966b98 +.word 0xfc027028 +.word 0x3acb593e +.word 0xe8f6b71e +.word 0x78dc0f1e +.word 0x811cb3e6 +.word 0x0a7237b2 +.word 0xdc079f86 +.word 0x3a7d67ad +.word 0x470910ca +.word 0x4e2112e9 +.word 0x3be7bd21 +.word 0x49facc06 +.word 0x49c4f7d6 +.word 0x886b743a +.word 0x5c223870 +.word 0xc1a6d9d1 +.word 0xeec9e99d +.word 0xee8e75ae +.word 0x600f1011 +.word 0xaeca086a +.word 0xbb87a8a8 +.word 0xb98696af +.word 0x66326c75 +.word 0x3145de8b +.word 0xc203a877 +.word 0xa80088e5 +.word 0x59f28101 +.word 0xaaa1132a +.word 0x11329048 +.word 0xc8a040be +.word 0xe5fec46f +.word 0xf86bf07d +.word 0x1d378943 +.word 0xb0f39160 +.word 0xc81e4807 +.word 0x2429dd74 +.word 0x9c2cbfab +.word 0x3082de5b +.word 0x37dc44b7 +.word 0x07302514 +.word 0x47f3ac4a +.word 0xd978d4da +.word 0x962afd07 +.word 0xcc0c8881 +.word 0xf871978d +.word 0x26c81541 +.word 0xd8e88a3b +.word 0xe55c4e3b +.word 0xa62da10a +.word 0x5573c8eb +.word 0x2cf220d8 +.word 0x7069ff5e +.word 0x5f588690 +.word 0x42afdc96 +.word 0xaca207e7 +.word 0xa2993a86 +.word 0x42253f44 +.word 0x2c30055e +.word 0x7fc1246b +.word 0xb5fd9b32 +.word 0xaa5c2bd5 +.word 0xa41237ec +.word 0xe59e2e76 +.word 0xc1fa37ce +.word 0x71330395 +.word 0xbee93e0c +.word 0xaa2e61ec +.word 0x5752aadd +.word 0x2ad31a21 +.word 0x609f72ef +.word 0xb7d1063c +.word 0xc031875d +.word 0x4dd4340c +.word 0x8aa3c9d6 +.word 0x1328f945 +.word 0x9916de5e +.word 0x72f16118 +.word 0xc490f637 +.word 0xdc679912 +.word 0x0d75315f +.word 0xf7133f83 +.word 0x2bee9c58 +.word 0xf6c1bf40 +.word 0xfc3dc80a +.word 0x38cea024 +.word 0x4aaa13b8 +.word 0x252f9be9 +.word 0xe90d4846 +.word 0xc1b3a613 +.word 0xf75a356a +.word 0xce90e634 +.word 0x5c183d39 +.word 0xc627d89f +.word 0x5b32ea42 +.word 0x545b4a45 +.word 0x6d096d3a +.word 0xb33fc81b +.word 0x50fdb177 +.word 0x8f683d7b +.word 0x914b5c89 +.word 0xcb62ad21 +.word 0x785a5a3f +.word 0x6ba5b7da +.word 0x8e33f7d3 +.word 0x75f90349 +.word 0xbb44275c +.word 0x1b7cf05c +.word 0x2d81371e +.word 0x09d5a3f7 +.word 0x69bcdf7f +.word 0xd93f5006 +.word 0x99870110 +.word 0xa2e3ec5c +.word 0xef7e4d0d +.word 0xd24a19b8 +.word 0x4b03e164 +.word 0x38def104 +.word 0x899e4ef7 +.word 0x3aad98ff +.word 0x98a42aeb +.word 0x1449b6f4 +.word 0x640d684d +.word 0xb8d0df3f +.word 0x4141a61c +.word 0x26337f98 +.word 0xbf9e3451 +.word 0x318cdc21 +.word 0xe6c0c854 +.word 0x9cf269e9 +.word 0xe38dd4b0 +.word 0x88453664 +.word 0x7d2d2d52 +.word 0x4203da99 +.word 0x0eded97b +.word 0xf413d012 +.word 0x380d44a4 +.word 0x14c227bd +.word 0xeeb8858e +.word 0x8976ad41 +.word 0x94c51bdb +.word 0xeb432cd7 +.word 0xbb6903ea +.word 0x425a5c55 +.word 0x487d5fa4 +.word 0xa807200a +.word 0xae342721 +.word 0x39aa46a4 +.word 0x3fed3ad0 +.word 0x824ddb8e +.word 0x0f3980b1 +.word 0xcdfb363d +.word 0xa85ad740 +.word 0x26a4a7cb +.word 0x94627716 +.word 0x9799234f +.word 0x16c68997 +.word 0x6e07d016 +.word 0xcabb7da3 +.word 0x74799774 +.word 0xba1cfae8 +.word 0x3bc7df08 +.word 0xff8cde97 +.word 0xab15d5e7 +.word 0x8eee85c3 +.word 0x02d597a5 +.word 0x5b176d02 +.word 0x008828aa +.word 0x7063ff83 +.word 0x2d532644 +.word 0x3e92c4fe +.word 0x4e45cbdc +.word 0x24fee3ac +.word 0x488f77b2 +.word 0x80f87ec6 +.word 0x2262b132 +.word 0x8f776706 +.word 0xf2fa3e77 +.word 0xb8a12142 +.word 0xf4433bdb +.word 0x1bd5fd4d +.word 0xa92d2e37 +.word 0x3dad2431 +.word 0xef52a343 +.word 0x7eef38a5 +.word 0xb8db8788 +.word 0xc6af1c4f +.word 0x21ef9038 +.word 0x19baabd1 +.word 0xcf866540 +.word 0xd1aa1a8a +.word 0x6f1de621 +.word 0x064c97d2 +.word 0x0633c761 +.word 0xcd102a96 +.word 0xb1f6da68 +.word 0x5fa57041 +.word 0xad7b83e8 +.word 0xced30f5d +.word 0x01d44713 +.word 0xbedc9ac4 +.word 0xfa61a9e0 +.word 0xde82f0f0 +.word 0xe25379d9 +.word 0x70a1eedd +.word 0x9b458fd3 +.word 0x1d35537b +.word 0xcae3bd48 +.word 0xa8f03ad6 +.word 0x67b9f1f5 +.word 0x0caf6679 +.word 0x2ddd7f56 +.word 0x66d6c054 +.word 0xebbcb3e3 +.word 0x78b65ed0 +.word 0xdda41002 +.word 0x2fed9a57 +.word 0x40d5ca28 +.word 0x3c88fc55 +.word 0x4998377f +.word 0xcb8fc1ef +.word 0x5e5d9673 +.word 0x51edd759 +.word 0xae64b7b6 +.word 0x72565652 +.word 0xe0f8ac78 +.word 0xb21d5372 +.word 0xd50a3641 +.word 0x6d66432f +.word 0x65100af3 +.word 0x73c44a70 +.word 0xfcd69254 +.word 0xf1ad665f +.word 0x91397d5b +.word 0x7e55aa8a +.word 0x127edf95 +.word 0xdb9fecac +.word 0x9c28d3e4 +.word 0x697a1886 +.word 0x2ae7a75e +.word 0x788365fe +.word 0xb56c9199 +.word 0x44c9c272 +.word 0x43ef88ee +.word 0x82e6c2ac +.word 0x7ef697ee +.word 0x01ca5a40 +.word 0x10140f46 +.word 0x5fc91532 +.word 0xb58ecd94 +.word 0x61bd6705 +.word 0x040dd6b1 +.word 0x3e548245 +.word 0x31f817b4 +.word 0xc3a69584 +.word 0x3a525e19 +.word 0xfb214d3c +.word 0x49dea993 +.word 0x2e1df8bb +.word 0x04db3d7b +.word 0x7dcfef16 +.word 0x8406c5fc +.word 0xc7f43a08 +.word 0xab309064 +.word 0x8afca95d +.word 0x0d93b97c +.word 0xed5cb8b1 +.word 0x3f761b33 +.word 0x3c0ac425 +.word 0x2c6f6c34 +.word 0x967e9b7b +.word 0xa7a7bfe0 +.word 0x50d873f0 +.word 0x41cd18ba +.word 0x02ce9a7e +.word 0x980480f7 +.word 0xb63301c3 +.word 0x1ea746e9 +.word 0x3db16c2d +.word 0xc06a0c10 +.word 0xb5c78caa +.word 0x23018468 +.word 0xfce99c11 +.word 0xb77624cf +.word 0xb72dfede +.word 0x522b8ecc +.word 0xf76d8b55 +.word 0x71197a44 +.word 0xa30746e7 +.word 0xfb8b986e +.word 0xd5b321e1 +.word 0x2d026522 +.word 0x214a0f8f +.word 0x3598b815 +.word 0x1e97ff70 +.word 0xe2a0d504 +.word 0x8afb3c0e +.word 0x79ef62a3 +.word 0x5e6e5f37 +.word 0x7f270ce1 +.word 0x6fe42ee2 +.word 0xb9afaf86 +.word 0x6a66f961 +.word 0xddee4066 +.word 0xd8916aae +.word 0xde3e1e2c +.word 0xbff66f56 +.word 0x2c219bc2 +.word 0x6be8f04d +.word 0xd72b4d23 +.word 0x5b3bb953 +.word 0x928832ab +.word 0x3619ae31 +.word 0xd31e14ab +.word 0x55665090 +.word 0x5c97096e +.word 0xd13eb9db +.word 0x16cec817 +.word 0x01bbdca5 +.word 0x6cb9a025 +.word 0x71e2ed4e +.word 0x1cdc1555 +.word 0x64735f25 +.word 0xc4ebde8c +.word 0xe2240572 +.word 0xec10731c +.word 0xcb7e5edc +.word 0x12f4762e +.word 0x5d97af9d +.word 0x72b71769 +.word 0x073329e9 +.word 0xc7d74551 +.word 0x473fb75c +.word 0xc7abd0b8 +.word 0xacf5af49 +.word 0x444ddd4e +.word 0x5795fe43 +.word 0x732eceff +.word 0x31ea5c8e +.word 0x02f4fe43 +.word 0x6bf1454b +.word 0x3a5ccaf0 +.word 0x412aec00 +.word 0xc977fc49 +.word 0xbe13afc7 +.word 0x6930a29c +.word 0x0658840a +.word 0xc375abcf +.word 0x435fdaba +.word 0x19b52e54 +.word 0xc0a66852 +.word 0xe7cadea7 +.word 0x4185b8dc +.word 0x8b85a429 +.word 0xe33b1001 +.word 0x850cb344 +.word 0x59512756 +.word 0x27f5bc2b +.word 0x07133e49 +.word 0xe44bbe16 +.word 0xcfccc446 +.word 0x2e81953f +.word 0xa53edaa0 +.word 0x313a7321 +.word 0xbf45adf3 +.word 0x605ecaf6 +.word 0xb23766c2 +.word 0x88cf9c55 +.word 0x1513172a +.word 0x91baa214 +.word 0xa778f3c4 +.word 0x0bda539b +.word 0x09633cea +.word 0x45157fd6 +.word 0xb8ccfbf5 +.word 0xfa2086f0 +.word 0x7264e043 +.word 0xdbe5a167 +.word 0xb5e1cc55 +.word 0x45e3124f +.word 0x7226c106 +.word 0xd85e3a8a +.word 0x7b89ba16 +.word 0x8195501d +.word 0xb8c9a687 +.word 0x25edbe2c +.word 0x75beccf5 +.word 0x8525d883 +.word 0x914de97b +.word 0xb14c073b +.word 0x45652bfa +.word 0x794f30bc +.word 0x75eb31af +.word 0x1a73a6a4 +.word 0xc96dc8dc +.word 0xf593dd38 +.word 0x8f4e1a52 +.word 0x6923abcf +.word 0x5e90dcfe +.word 0x740ad2b3 +.word 0x5ec9f9eb +.word 0x45862413 +.word 0xf2cd23c8 +.word 0x5dc69c66 +.word 0x3688e126 +.word 0xa8afe84f +.word 0x015ce4b6 +.word 0x5a72f59f +.word 0x8f8fa330 +.word 0xd1bb2626 +.word 0x4d90d37f +.word 0x0d58be87 +.word 0xf7b85be2 +.word 0x02f493a2 +.word 0x6b1aceab +.word 0x82ecbab9 +.word 0xfcc45797 +.word 0x5b32f413 +.word 0x3de729e9 +.word 0x48f8042e +.word 0x600d85d8 +.word 0x2534a9ba +.word 0xe64bd126 +.word 0x8369aa59 +.word 0xbbf5ac13 +.word 0x46cb701a +.word 0xaa9e44e1 +.word 0xe99819f5 +.word 0x3b040bce +.word 0xf4b26954 +.word 0x48eedba1 +.word 0xb7bc6376 +.word 0xf11ea9ef +.word 0x76bac0ea +.word 0xee6a9a22 +.word 0x653e4392 +.word 0x6fe0d4d2 +.word 0xeca7ba97 +.word 0x9a2e1446 +.word 0x0d9b0e8e +.word 0x2656fa2f +.word 0x88f3a910 +.word 0x56f75b55 +.word 0x0ec04146 +.word 0xd07f2152 +.word 0x537c1e04 +.word 0xe76b60f9 +.word 0x5dc43819 +.word 0x2ef9e0f8 +.word 0x6c631e1d +.word 0xd39550e8 +.word 0xe792ddc1 +.word 0x900abd93 +.word 0x406f7706 +.word 0x8718d8e8 +.word 0x432a526d +.word 0x5c78fa24 +.word 0x01df78c7 +.word 0x04b56dd7 +.word 0xeebc48ad +.word 0xc46af1ba +.word 0x3e683605 +.word 0x9d961c18 +.word 0x0a74c290 +.word 0xd4177a27 +.word 0x9ce23ebe +.word 0xb861db45 +.word 0x6e0226a8 +.word 0x6f44193a +.word 0xd0dbdcf2 +.word 0x516f20df +.word 0x13d56be0 +.word 0x1d7e8de7 +.word 0xead2dbd8 +.word 0x471c8cc8 +.word 0x104f5419 +.word 0x90c55a50 +.word 0x2127a4a2 +.word 0x6d3338b1 +.word 0xc60438e7 +.word 0x3bc917ab +.word 0x6bfcc042 +.word 0xee99e280 +.word 0xde82f423 +.word 0xde5a3568 +.word 0x0961f9a2 +.word 0xf9076830 +.word 0x8f746f75 +.word 0x2667ff3a +.word 0xfc5b75c9 +.word 0x1f79e3ad +.word 0xfc225bf0 +.word 0x07e7ec8b +.word 0x14037ad1 +.word 0x790e2363 +.word 0x9bd31031 +.word 0x95d9291a +.word 0xd136545a +.word 0x1bb65f4a +.word 0xb9bd9180 +.word 0x5222e9fa +.word 0xf45e6236 +.word 0xa035c324 +.word 0xb0a74b4b +.word 0x21e07786 +.word 0xea01dddb +.word 0x4a1de2e9 +.word 0x3564b156 +.word 0x6ba79f0a +.word 0xc82d03cb +.word 0x529d0570 +.word 0x7890e2f9 +.word 0x9ab7f156 +.word 0x3f4075de +.word 0x1e5a2565 +.word 0x680ab036 +.word 0xb67675a3 +.word 0xad9ec8fe +.word 0x364ccfec +.word 0xa854fe35 +.word 0xd6137fa1 +.word 0xb415a179 +.word 0x2ed940a6 +.word 0x0ad7d687 +.word 0xfc56013c +.word 0xb5a450f9 +.word 0x45fc7a36 +.word 0xbdd12304 +.word 0x948bc384 +.word 0xa14bdc06 +.word 0x5be391ad +.word 0xab0f3d64 +.word 0x61e40cae +.word 0x6260715d +.word 0x530b35f5 +.word 0xbc91c3ff +.word 0xdc38f07e +.word 0x4aa0ce3f +.word 0x1320b12e +.word 0x40909ddd +.word 0xc188b755 +.word 0x5b25f5ba +.word 0x02b53778 +.word 0xd7f2e385 +.word 0x6f2ead79 +.word 0x1145d1de +.word 0xbf49ce54 +.word 0x81fcff43 +.word 0xd9000056 +.word 0xd5b7d996 +.word 0xd2da8fe4 +.word 0xe1d30a09 +.word 0x62530c0b +.word 0xcf1539dd +.word 0x7ebd73e0 +.word 0xa6e1103c +.word 0x37957b9a +.word 0xa012191b +.word 0x12e25101 +.word 0xdc4f3181 +.word 0x2daa0261 +.word 0x91c37e55 +.word 0xd796638a +.word 0xd3c532e5 +.word 0xdb013de3 +.word 0x6ce76b32 +.word 0x11feca1a +.word 0xfc38fd7c +.word 0x4e272630 +.word 0xdd540f97 +.word 0x68ebc852 +.word 0x70eb9e90 +.word 0x8ab3af6a +.word 0x8ba1ed01 +.word 0xc7a4502f +.word 0x965c1c2a +.word 0x2adcc180 +.word 0x883d6ba1 +.word 0x182196e9 +.word 0xda976c6e +.word 0x2d0a7725 +.word 0x5d48f05b +.word 0x972089f9 +.word 0x57850449 +.word 0xe4febbb8 +.word 0xcae98245 +.word 0x552bd711 +.word 0x6dd1eccb +.word 0xbcf2a0c4 +.word 0x82c41b50 +.word 0xa2e3db05 +.word 0x5626d595 +.word 0x91bbd95f +.word 0x979c3e9f +.word 0xe650bf01 +.word 0x59f5b9cf +.word 0xcceaa860 +.word 0x36caf015 +.word 0x4a5ca96d +.word 0x3b6e6f8e +.word 0xedc7f466 +.word 0x186bbcdb +.word 0x49a05830 +.word 0x77ed4104 +.word 0xb5d04777 +.word 0xa95589fe +.word 0x1f203e19 +.word 0x63f7ac80 +.word 0xb857df42 +.word 0x24a036cd +.word 0x1f39c9ee +.word 0xd2e7c043 +.word 0x0015e1db +.word 0x145e0c2a +.word 0x300bb582 +.word 0xd5c92d8a +.word 0x5932cd8c +.word 0x6defad6d +.word 0x8a731543 +.word 0xe42409c4 +.word 0x0a5f555b +.word 0x31810e5f +.word 0x66e7a557 +.word 0xa45f50a9 +.word 0x220caaf5 +.word 0x6f609329 +.word 0x919f8b85 +.word 0x10a0a387 +.word 0x54ed92c6 +.word 0x0f92cb20 +.word 0xe9278c27 +.word 0x02d9777b +.word 0x28cad2c8 +.word 0x9d0394ad +.word 0x3ae3ccca +.word 0x931d0b5a +.word 0x575d663b +.word 0xfd90275e +.word 0x9186dcc4 +.word 0x5a6109e9 +.word 0x2e32ba61 +.word 0x7b210e4d +.word 0xc5fa26db +.word 0xb74a4d8c +.word 0xb49135b0 +.word 0x8428e722 +.word 0xef44708a +.word 0x66503d6a +.word 0x8c06a6c3 +.word 0xf4947c1d +.word 0xca3b9fe4 +.word 0x7946d2da +.word 0xcb9de016 +.word 0xc563c082 +.word 0x4b2bd4c1 +.word 0x6661795d +.word 0xc1da07aa +.word 0x5fb96af2 +.word 0x59c20bc9 +.word 0x897600ee +.word 0x137feaef +.word 0x42efdd54 +.word 0xfc9e3a29 +.word 0x3fad1e9a +.word 0xce855e59 +.word 0x017c9c78 +.word 0x4eb1e4f9 +.word 0x83f968f2 +.word 0x501f6db5 +.word 0xf18760d2 +.word 0xf53e93a5 +.word 0x4c30d426 +.word 0x2325faf4 +.word 0xeb9bda0c +.word 0xcb7699f1 +.word 0x84d97f13 +.word 0x0f04f7e8 +.word 0x027fcc7c +.word 0xb04e1bd7 +.word 0xaf632c1d +.word 0x774effb9 +.word 0x554db98c +.word 0x469b4996 +.word 0x5f018e8d +.word 0x6b122f93 +.word 0x9cbc9a3b +.word 0x6a0c22ce +.word 0x56878c2d +.word 0x39942ac3 +.word 0xa920831c +.word 0xefcc3f4d +.word 0x2f21aa31 +.word 0xc5a3efce +.word 0xa56f50f1 +.word 0x3b50b5ba +.word 0x22b36911 +.word 0xd61143e7 +.word 0x260384ef +.word 0x1e6695fa +.word 0x1722250f +.word 0xd07b8a38 +.word 0x60f16c32 +.word 0x004bb410 +.word 0x47e07775 +.word 0x84d91907 +.word 0x798e0c75 +.word 0x25b6ad3f +.word 0xd9395c5e +.word 0xb237932e +.word 0x46095cbd +.word 0x518ffee5 +.word 0x413d0c24 +.word 0x057f8b78 +.word 0x9c1d263e +.word 0x4627a968 +.word 0xa9308204 +.word 0xd6835348 +.word 0x5209d51b +.word 0x492df53d +.word 0x5d8be599 +.word 0x79c8d728 +.word 0x0c01d8c6 +.word 0x63c17ee9 +.word 0x50135cbf +.word 0x1c6ece44 +.word 0xd5792893 +.word 0xb23963d0 +.word 0x7cf898db +.word 0x12c69f1f +.word 0xba3c5f3a +.word 0x6128c08c +.word 0xe1b5def0 +.word 0xa59de8d4 +.word 0x3d6241e4 +.word 0xc084d6a7 +.word 0x97776572 +.word 0x5ab9c207 +.word 0xcb99ff8c +.word 0x546d629b +.word 0x24c2fad5 +.word 0x0b1e8709 +.word 0x9cff4bb8 +.word 0x46069f26 +.word 0x286a08dc +.word 0x0c3994a0 +.word 0xc5fe23da +.word 0x4776761b +.word 0xdbe2526b +.word 0xe4ab3e8b +.word 0xd171343a +.word 0x3967f927 +.word 0xf17366d9 +.word 0x9f7c0743 +.word 0xd8b9255d +.word 0xe871a415 +.word 0x51712b2a +.word 0x600d042e +.word 0xe5969ffc +.word 0x4a502a04 +.word 0x19678cab +.word 0x09bf2f9c +.word 0x8e61ac01 +.word 0x4e97913c +.word 0xf248bbea +.word 0x02add50e +.word 0x65d5be09 +.word 0xb63faaac +.word 0x9b7bbe32 +.word 0xd54d5487 +.word 0xa665df77 +.word 0xdf5aa6cd +.word 0xf7c91075 +.word 0xdcb747a8 +.word 0x9a4826d8 +.word 0x66111287 +.word 0x87cc2434 +.word 0x38594952 +.word 0x4133f336 +.word 0x84fc5e54 +.word 0x70307cca +.word 0x63547778 +.word 0x15cf2da7 +.word 0xfb236953 +.word 0x55048260 +.word 0x7adf421b +.word 0x5943e274 +.word 0x8e38966b +.word 0xc7bc4b88 +.word 0xf0285588 +.word 0x9a6e75c9 +.word 0xf0077ea2 +.word 0x5dda71e2 +.word 0x79173dde +.word 0x5684a5a6 +.word 0xf72bd16c +.word 0x20ee9dc3 +.word 0x39986372 +.word 0xc492a08f +.word 0x3d0421aa +.word 0x10c34f8c +.word 0x5e57ce9e +.word 0x76db69d6 +.word 0x7468b356 +.word 0x3b9fa1d1 +.word 0x590808a1 +.word 0x49909d32 +.word 0x2ce1b972 +.word 0x81c55a63 +.word 0x3a594c4b +.word 0x31252587 +.word 0xede38152 +.word 0xe2f1c500 +.word 0x613ae4e6 +.word 0x878dfd58 +.word 0x18e61639 +.word 0x04e4e873 +.word 0x8360bee8 +.word 0xf1ee8427 +.word 0x141938b7 +.word 0x7472747b +.word 0xcb169961 +.word 0x02b312e4 +.word 0x9629d8d9 +.word 0x430beb4a +.word 0xc1122a05 +.word 0xd2acf11a +.word 0xe203072d +.word 0xc7e14fec +.word 0x16564dca +.word 0xa8403458 +.word 0x8f3c5178 +.word 0x4d19e5a6 +.word 0x33714f86 +.word 0x78eea672 +.word 0x6c1f7e3a +.word 0x682ad397 +.word 0xf3fff62d +.word 0x3b0290fc +.word 0xdb170762 +.word 0x252999b6 +.word 0xb09f06da +.word 0x71739481 +.word 0x64e19345 +.word 0x7a3c234b +.word 0x22149363 +.word 0x385c1d74 +.word 0x696f18c4 +.word 0x3130d3ca +.word 0xd8640642 +.word 0xb0dcd7f4 +.word 0xa11908eb +.word 0xb1f180d6 +.word 0x299fc547 +.word 0x02a9edb7 +.word 0x145d5328 +.word 0xe23c7c93 +.word 0x7cd1839a +.word 0xf937e65b +.word 0x52f280fc +.word 0x629963b4 +.word 0xa619a76f +.word 0xd8d3b971 +.word 0x6d76de9e +.word 0x7bb926aa +.word 0x5b0936bb +.word 0x3cfa0366 +.word 0xe7f7c29c +.word 0xe7a5eb63 +.word 0x6fbb32b2 +.word 0x239bdd94 +.word 0xdedb9b8f +.word 0x76dc0689 +.word 0xbf4345be +.word 0x6ab79958 +.word 0x149a0349 +.word 0xbef69f69 +.word 0x1b1ac226 +.word 0xeff2fdc9 +.word 0x2b57472f +.word 0x5796ce8a +.word 0x00e61c31 +.word 0x383b2195 +.word 0xa6649005 +.word 0x17830c0c +.word 0x1d1b8dc4 +.word 0x0f835f8b +.word 0x03785988 +.word 0x83d3f5d5 +.word 0x39ba7973 +.word 0xc0b197dd +.word 0xadb5687b +.word 0x8145e7a0 +.word 0xed9cb022 +.word 0xf8517d1c +.word 0x4eb93f29 +.word 0xc655d1d2 +.word 0xb1a1ab1a +.word 0x2fe0ce06 +.word 0xc8d4d00d +.word 0x090bf84f +.word 0xac564274 +.word 0xe7d54914 +.word 0xa6b2750b +.word 0xb2886840 +.word 0xa8b20868 +.word 0x6928113a +.word 0x1c568392 +.word 0x60bd4302 +.word 0x4fb2cdc8 +.word 0xcff74767 +.word 0xe12b7898 +.word 0xf82547be +.word 0x5536d793 +.word 0xe4d5077d +.word 0xe733f76b +.word 0x053be504 +.word 0x8c14ea98 +.word 0x186cb10b +.word 0x146b88cf +.word 0x7164457b +.word 0xb49ac515 +.word 0x2ddae01c +.word 0x524abe7f +.word 0x7bd4b1a9 +.word 0x8b6659a4 +.word 0x1f99bb3f +.word 0x2c5f6ffb +.word 0x03783f83 +.word 0x5251fcaa +.word 0xfce2191c +.word 0x2fa646ea +.word 0xc14c3d6d +.word 0xa5fa264e +.word 0xdc2b3aa8 +.word 0xcdbd453e +.word 0x0fd5d91f +.word 0x546948ef +.word 0xd5658db9 +.word 0xa559e945 +.word 0xdae64535 +.word 0x083e2abe +.word 0xd6c136fc +.word 0x655b5de5 +.word 0xc9ab6761 +.word 0x9540edee +.word 0x5b11a20d +.word 0x86902519 +.word 0x0689891e +.word 0xef7ebfbe +.word 0xdfba5232 +.word 0xa6156553 +.word 0xa59f96c8 +.word 0xbc74feba +.word 0x707d03af +.word 0x3e339742 +.word 0xa6210dfe +.word 0xfbde7703 +.word 0xde41c3e1 +.word 0xcc4a6787 +.word 0x2a2731ca +.word 0x4fbbbd87 +.word 0x47d22cd4 +.word 0x907841ec +.word 0xe6993bdf +.word 0x9eeb412c +.word 0x958b771d +.word 0x6d5901fb +.word 0x2d072012 +.word 0x43d81dd6 +.word 0xfb77845f +.word 0xe86f0b5f +.word 0xa6ed9556 +.word 0xafca3eff +.word 0x39cdead7 +.word 0x05e94b4d +.word 0x064ae082 +.word 0x0490af55 +.word 0x34012709 +.word 0xfb2ad688 +.word 0x93c3d0d4 +.word 0x3862ff8b +.word 0x1767152f +.word 0x046b5f81 +.word 0x036339ca +.word 0x22acd157 +.word 0x56159e5c +.word 0x27e5043d +.word 0x3a85c2f1 +.word 0xa00a0aec +.word 0x20de40c4 +.word 0x22c93516 +.word 0xc5ad3993 +.word 0x47d50ec8 +.word 0xa10b4131 +.word 0x48f1c8f7 +.word 0xb262c0d7 +.word 0x028c3aa6 +.word 0x45372ce6 +.word 0xdd4034eb +.word 0x4aea4860 +.word 0xa2f51957 +.word 0x3609e539 +.word 0x1b59d924 +.word 0x6ca7eb16 +.word 0x7531bd2e +.word 0x08fb011f +.word 0x8733df20 +.word 0x6c5714a7 +.word 0x5bee0581 +.word 0xc2280705 +.word 0xe3665e0a +.word 0x685820b9 +.word 0x4dfa6c8a +.word 0xc5465e7f +.word 0xc22d4ffc +.word 0x83190fc8 +.word 0x9d2512b2 +.word 0x576d6bf0 +.word 0xb98aa6b4 +.word 0x94080450 +.word 0xdbe22537 +.word 0x4cd8c0e2 +.word 0x11126344 +.word 0xdd9ab6ba +.word 0x95fba04a +.word 0xcd3b1b75 +.word 0xbf1647ba +.word 0xc57b0627 +.word 0x5c5312f9 +.word 0xdd5defbc +.word 0x9df4a5e2 +.word 0x6840f1a7 +.word 0x2af69aa4 +.word 0x186e1e89 +.word 0x3af64fb7 +.word 0x51f7cf29 +.word 0x54ae8e47 +.word 0x9edca61b +.word 0xf5bce8c7 +.word 0x9042d6f7 +.word 0xaa1b0cba +.word 0x02a95b12 +.word 0xb22fcce1 +.word 0x88c955f4 +.word 0xc712fb5f +.word 0x5979d0f1 +.word 0xa4d9a2d8 +.word 0x82f7f06c +.word 0xc807ee63 +.word 0x6f24a800 +.word 0xd3311e47 +.word 0xde742f84 +.word 0x877ffde2 +.word 0x8069f428 +.word 0xb4b25857 +.word 0x84e8cd26 +.word 0xf858806e +.word 0xef21af81 +.word 0x7f63a45b +.word 0xb00b4457 +.word 0x1b145fda +.word 0xe780524b +.word 0x9e6f62f1 +.word 0x06a1bb04 +.word 0x029ea69b +.word 0xd870cced +.word 0xc8182716 +.word 0x9e070902 +.word 0x67998a67 +.word 0x3e42dc3a +.word 0x7bd1e464 +.word 0xe83e4c70 +.word 0xa15aee0f +.word 0x0b4bc18f +.word 0x34e82639 +.word 0x15b6c99e +.word 0xdd81574d +.word 0xd8c8a565 +.word 0xed05deb6 +.word 0x6e313abe +.word 0x50e7e72d +.word 0x0faa963b +.word 0x4146441d +.word 0x58123987 +.word 0x6398cca1 +.word 0x56d814c1 +.word 0xba64fc66 +.word 0xdbc4feaf +.word 0x610fc415 +.word 0xd13a98ad +.word 0x4acb70c9 +.word 0x4423e90a +.word 0xcbf706b4 +.word 0x16dc31fc +.word 0x134719db +.word 0xfe1aac8e +.word 0x789c6474 +.word 0x68d40ba3 +.word 0xc59d71fc +.word 0xe3fe15d1 +.word 0x5ee9e6ac +.word 0xce55aa7c +.word 0x2106aeba +.word 0xe3786f3b +.word 0x69efe64d +.word 0x62b0e327 +.word 0x03dffc0c +.word 0x118f801a +.word 0x640c45dd +.word 0x1d6b708e +.word 0xa91d26f9 +.word 0xff231fab +.word 0x49fc0ac6 +.word 0xc0da0402 +.word 0x95a33290 +.word 0x9e5ebf82 +.word 0xc6f2dfed +.word 0x7c0e0429 +.word 0xd428e5a1 +.word 0x28b78fef +.word 0xae9531a7 +.word 0x876b592f +.word 0x32a6c209 +.word 0x3a9521fc +.word 0xf2a8a306 +.word 0xa2f2a9bb +.word 0x7f36684c +.word 0x803f4f73 +.word 0xd9517f73 +.word 0xa2150832 +.word 0x38cab3e9 +.word 0xf0377295 +.word 0xd967652c +.word 0xc7e9f32d +.word 0xb5a412b9 +.word 0xac3f0f60 +.word 0x52d77232 +.word 0xfa30a3a5 +.word 0xb660be8d +.word 0x29f288e0 +.word 0xcf55200f +.word 0x6d57ebda +.word 0x0f955e18 +.word 0xe1e9b71e +.word 0x39bd96d0 +.word 0x6bca51bd +.word 0x1836a917 +.word 0x85aa9f03 +.word 0x89ca1471 +.word 0xd2648b31 +.word 0xf41c040b +.word 0xe2b3fb49 +.word 0xab4cf3e4 +.word 0x66af1cb9 +.word 0xf04cdc57 +.word 0x3a7a2385 +.word 0x50ea709d +.word 0x90932fe2 +.word 0x5e2b2c0b +.word 0x915159b4 +.word 0x1de8726a +.word 0x3ebc1a38 +.word 0x0547f9df +.word 0x6e13aa36 +.word 0x3d759a34 +.word 0xd0beefa7 +.word 0x4172cfb3 +.word 0x311245e2 +.word 0xb78859de +.word 0x31adbf21 +.word 0xd6bbd565 +.word 0x87a7fc0a +.word 0x24c687c3 +.word 0xb3754932 +.word 0xff4c2c8c +.word 0x4ec044b6 +.word 0x8e1e84e8 +.word 0x8bd5f505 +.word 0xf34c82ae +.word 0xfccdbc8c +.word 0x0fb8cade +.word 0x61c39a5b +.word 0xceb7d8fe +.word 0x6b2c9fdb +.word 0x82701bbc +.word 0x90f7736b +.word 0x0319a0e5 +.word 0x09bd6fee +.word 0xe5a783a5 +.word 0x655c597e +.word 0x71afe307 +.word 0x8f040588 +.word 0xc06034b2 +.word 0xe45b815e +.word 0x1563d770 +.word 0xa1ba1363 +.word 0x00ee1290 +.word 0x8ba4dfa9 +.word 0xd0e0dc52 +.word 0x7a70228d +.word 0x5e642fd1 +.word 0xdb14d9e8 +.word 0xb1611576 +.word 0xea345106 +.word 0x8a9ceb9c +.word 0x4f0e4a72 +.word 0xb1668a6a +.word 0x7cdc1945 +.word 0x004a261d +.word 0x21257f95 +.word 0xf57f762f +.word 0xa53c063a +.word 0x086a8b87 +.word 0xc0905652 +.word 0xc1bf00a2 +.word 0x0c175306 +.word 0xfd462501 +.word 0x2c82943b +.word 0x81cf0354 +.word 0xb63558f7 +.word 0x7d070a75 +.word 0x591d604c +.word 0x7a46bfff +.word 0xa17d609e +.word 0xf3d3aec4 +.word 0xe17b7d20 +.word 0xfd3ee6d6 +.word 0xce118fbe +.word 0x7a2e471e +.word 0x5ad88aad +.word 0xe8f7326c +.word 0xebf1b3ae +.word 0x4d239e83 +.word 0xc927b1b1 +.word 0x5931be0e +.word 0x0e267fe2 +.word 0x78f3f12d +.word 0xe61deae7 +.word 0x88b00452 +.word 0xd0877f2c +.word 0xd771ac8d +.word 0xcc1c8d10 +.word 0x4c58245f +.word 0xe9295b55 +.word 0x15bcae8a +.word 0x81484595 +.word 0x155c2e1b +.word 0x620df81c +.word 0xe2dc0a7f +.word 0xd01a7767 +.word 0xfe1d00c6 +.word 0x8f86916e +.word 0x852de18f +.word 0x2a4380ea +.word 0x7c2e7b07 +.word 0xe8265db6 +.word 0x570ba3fb +.word 0xdaad0786 +.word 0x4dc6e580 +.word 0xcd39bfb1 +.word 0x30e08859 +.word 0xf6aa5b4b +.word 0x1e0840c8 +.word 0x149df113 +.word 0x92b93451 +.word 0xc6f6e1e6 +.word 0xb5fc1e7e +.word 0x67d36cae +.word 0xb6cf9c5d +.word 0x34342564 +.word 0x53e632d3 +.word 0x49e87ab0 +.word 0x39eb0fc1 +.word 0x0aeb2ebc +.word 0x36a97a28 +.word 0x8aae87d5 +.word 0x9b893c68 +.word 0x55b3d7b1 +.word 0x9c69e9ac +.word 0x54b0c7e3 +.word 0xcf176dc8 +.word 0x037031e6 +.word 0xc5a9d7dc +.word 0xe64d64af +.word 0x94549549 +.word 0xa326100d +.word 0xfb6913dd +.word 0x250551e1 +.word 0x185149a3 +.word 0x81df8c8d +.word 0xb93004ff +.word 0x892fc0dd +.word 0x7c24f2d9 +.word 0x6eafbfc3 +.word 0x75d20ebc +.word 0xe06c4159 +.word 0x11ae6057 +.word 0xa7ea38a8 +.word 0x17a4650b +.word 0xd7d90ca1 +.word 0x431cac10 +.word 0xcc89d5cc +.word 0x51cb17e4 +.word 0xa246a444 +.word 0x82539653 +.word 0xf4b84378 +.word 0x78f45b70 +.word 0x831548cb +.word 0x80758ff9 +.word 0x40135d37 +.word 0xf0eaf7d2 +.word 0x57a708b4 +.word 0x26a3f6fd +.word 0x35481f92 +.word 0xb8168e09 +.word 0xe726ddaa +.word 0x97ad8004 +.word 0xf4cd7d12 +.word 0x3964a084 +.word 0xe2c8c43c +.word 0xc4a6689c +.word 0x36c0e04c +.word 0x17a2473b +.word 0x6c50425c +.word 0x6b25ccb5 +.word 0x7d60b3f5 +.word 0xb8a5d63e +.word 0x3a86fe30 +.word 0x41368f32 +.word 0x55139527 +.word 0x29495350 +.word 0x70ea58b7 +.word 0x996b9af2 +.word 0x45bb1ab6 +.word 0x22e7c9f9 +.word 0xbadf4a39 +.word 0x163c2649 +.word 0xdbb5c228 +.word 0x9d5ca087 +.word 0x3a100227 +.word 0x025a90a7 +.word 0xd8370f7a +.word 0x05adbd22 +.word 0xc106b69e +.word 0x88a8817b +.word 0xb0bc253a +.word 0x336b01f9 +.word 0xbb10ca0d +.word 0x4164edf4 +.word 0x9711770c +.word 0xf6ffe8c9 +.word 0x989f13db +.word 0x28f21bfe +.word 0x3e09d5fb +.word 0x687098b7 +.word 0xd472183d +.word 0xcc3c9bfd +.word 0x643a1c5d +.word 0x963fe1f5 +.word 0x5aad2695 +.word 0x7d977b8c +.word 0x51066cba +.word 0xf1fae5fe +.word 0x5f6ad219 +.word 0x51244626 +.word 0x9f57cfba +.word 0x384502a3 +.word 0x1cb47da5 +.word 0x71e9ff03 +.word 0xd3a567b0 +.word 0x5df68da5 +.word 0x486453a1 +.word 0x4a455775 +.word 0x9a6ff465 +.word 0x44f17652 +.word 0x88801d16 +.word 0x82e3c30b +.word 0x0a119192 +.word 0x52750df3 +.word 0xd22c6897 +.word 0x35f27839 +.word 0xc0021f4b +.word 0x136004cb +.word 0x7d117389 +.word 0x6c2abc9d +.word 0xa67db18c +.word 0x0128dd5e +.word 0x1f4dd3d0 +.word 0x675cf0f4 +.word 0xeb096082 +.word 0x8082fa11 +.word 0xdc763a15 +.word 0x8819c63b +.word 0xfc8684bc +.word 0x13e9d045 +.word 0xde76c763 +.word 0x418c2f89 +.word 0x3810b7fd +.word 0x86c5a5f9 +.word 0x6b099286 +.word 0xfec26c1c +.word 0xef876030 +.word 0xb9576241 +.word 0x3f09bdf1 +.word 0x3bb588db +.word 0x70d83599 +.word 0x523125be +.word 0x3822067c +.word 0x34a3646e +.word 0x438cd7e1 +.word 0x4c67906d +.word 0x1c396bd6 +.word 0x4f2ccbbb +.word 0xf3a3cd59 +.word 0xd64c94e1 +.word 0x9e0b9b1e +.word 0xf4fb5120 +.word 0xf052f852 +.word 0x17ae1e1e +.word 0x0c0f451f +.word 0x55551d0f +.word 0x8847f60f +.word 0xff621a90 +.word 0x06e5f21d +.word 0xb32a1aeb +.word 0xcae76703 +.word 0x43331dfa +.word 0xc45fd724 +.word 0xde1f7959 +.word 0x17d84aa8 +.word 0xa8708b44 +.word 0x790e485b +.word 0xc56caf02 +.word 0x263bc12b +.word 0xa9ac4417 +.word 0x02fcc14c +.word 0x087603e9 +.word 0x6e8bd7ef +.word 0x58c59bd6 +.word 0x6ea121f9 +.word 0x35c65ec9 +.word 0xfec4d9d1 +.word 0x6a2212de +.word 0x7f673a2b +.word 0x5ba797b6 +.word 0xe181a72f +.word 0x2a610012 +.word 0xee6673c6 +.word 0x31094a03 +.word 0xe0249a18 +.word 0x6d618f06 +.word 0x996dbdbd +.word 0x3c5c825e +.word 0xd166b24b +.word 0x389ec115 +.word 0xc939b832 +.word 0xa8a41823 +.word 0xe5f6287d +.word 0xfd275cba +.word 0xcd3ad94d +.word 0x2c3fb810 +.word 0xd0e29236 +.word 0x1a16dcee +.word 0xcf890d80 +.word 0xec1853af +.word 0x2330d97a +.word 0x0a450b7c +.word 0xcf7a40fc +.word 0x59acef94 +.word 0xadce121d +.word 0xd1a56e04 +.word 0xf1101702 +.word 0x84bd74a6 +.word 0xd7a157a5 +.word 0xe940b3dc +.word 0xc5696726 +.word 0x5eaffbfa +.word 0xea979ed2 +.word 0x6bba35e4 +.word 0xe6bb4b31 +.word 0x6221a4cb +.word 0x7c470b73 +.word 0x0912ac58 +.word 0x1b0f1dd8 +.word 0xeda4e604 +.word 0x74af9a5f +.word 0xbae03a24 +.word 0x795cc464 +.word 0xb9cb1fd1 +.word 0x86015686 +.word 0x24c1ca8d +.word 0x50c3d9ec +.word 0xa28318f2 +.word 0x2821d20c +.word 0xf1430dd3 +.word 0x0f87640a +.word 0x9066f474 +.word 0xdef89d9d +.word 0xbb3f65a6 +.word 0x253b79fb +.word 0x1b151b75 +.word 0xb4f09cab +.word 0x68c1d37a +.word 0x190cd744 +.word 0x20238230 +.word 0xaa5e1d31 +.word 0x06775ea8 +.word 0x49f9f995 +.word 0xf0f1da2a +.word 0x4081f78a +.word 0xd9d7c5f4 +.word 0x06a720bf +.word 0x334e0987 +.word 0x0cb3b26c +.word 0xbb1653d2 +.word 0x913750d2 +.word 0xc48d4f31 +.word 0xd0870c69 +.word 0xb8ecf903 +.word 0x1b97ddbe +.word 0x7545d191 +.word 0x0887f283 +.word 0xcc17e0b7 +.word 0x60357eb5 +.word 0x769cdc55 +.word 0xe459ced9 +.word 0xfdb80264 +.word 0x9abf91ee +.word 0x630f2602 +.word 0xdf73dbf7 +.word 0xd8286c34 +.word 0x36f44ec6 +.word 0x743dbc68 +.word 0xf2b0e46c +.word 0xfbf64418 +.word 0xea06fe2b +.word 0x7c988acc +.word 0x29cea76a +.word 0xe4208595 +.word 0x348b1644 +.word 0x9a3b9ba1 +.word 0x638a4ee1 +.word 0xd8e34a9d +.word 0x5dea5371 +.word 0x609a60dc +.word 0xd9247316 +.word 0xb9e5f7a2 +.word 0xff95bb91 +.word 0x1e928666 +.word 0x219f85d9 +.word 0xad3cea97 +.word 0x7f41a6ff +.word 0xe4c14979 +.word 0x76c6ec1c +.word 0x0c25e589 +.word 0x79d60c4b +.word 0x3fa1d629 +.word 0xccc5b6ac +.word 0xcefb56ec +.word 0xdd261ebc +.word 0x1be3eca8 +.word 0x9036cfa2 +.word 0x32cba197 +.word 0xfa60976c +.word 0x26453dbb +.word 0xa699e78b +.word 0xb7ad2349 +.word 0x3371373c +.word 0x954a722f +.word 0x1f19b888 +.word 0x0d99e59d +.word 0x48964a88 +.word 0x13fd81f9 +.word 0x709b8224 +.word 0xadc1fa90 +.word 0xecccf3f2 +.word 0x42e20b34 +.word 0x79df3876 +.word 0xb07f92fa +.word 0x50bb56ae +.word 0x4f42f81d +.word 0x5ebf032e +.word 0xd588192c +.word 0x5c9b4fbe +.word 0xc4bb6d76 +.word 0x2590d76e +.word 0x4ef8345e +.word 0x4a75b61f +.word 0x3a72af74 +.word 0x285c1407 +.word 0x65400db7 +.word 0xd068b264 +.word 0xa8edba95 +.word 0xfe18ff5f +.word 0x50d99b6e +.word 0x4de8a222 +.word 0x3dec2504 +.word 0x7e304285 +.word 0x1fac73a3 +.word 0xcdc345f1 +.word 0x6c5e150f +.word 0x0ab31ee7 +.word 0x8176798a +.word 0x6de7df70 +.word 0x318ad6c3 +.word 0x4d8b48ca +.word 0xab7c7b88 +.word 0xff97304c +.word 0x9a9c290d +.word 0x41d4457d +.word 0x084c0ab8 +.word 0x53266d9f +.word 0x3d7b9e87 +.word 0x6c4c4a4b +.word 0x731f88eb +.word 0x47b4294d +.word 0x29ffc6c1 +.word 0xee1a0272 +.word 0xf2bd5eea +.word 0xb97247db +.word 0xeda8c215 +.word 0x91642ace +.word 0xbdbd52c8 +.word 0x70f078f7 +.word 0xa9a1e9ab +.word 0xd8f9c924 +.word 0xb4e501a5 +.word 0xcbfe1d11 +.word 0x9cc77396 +.word 0x583ff0f5 +.word 0xcd738d39 +.word 0xe58b2369 +.word 0x3c00f2b1 +.word 0x2a75231f +.word 0x01ea858a +.word 0x3e9c36b4 +.word 0x2e3f165d +.word 0x3395dffa +.word 0x2a7f6cbf +.word 0x511f1aa1 +.word 0x2b3f7f30 +.word 0xf5f43d33 +.word 0x11faa5fe +.word 0x0353f3dc +.word 0xebed06c6 +.word 0x61e24386 +.word 0xbf8a1cfa +.word 0x51b0ea0f +.word 0x037ccab0 +.word 0x09b4ab5b +.word 0xec308655 +.word 0x0cb3e12e +.word 0x71d32b8f +.word 0x4334e68b +.word 0xa4eb609c +.word 0x607327af +.word 0xcee4b565 +.word 0x36d37119 +.word 0x89e7d7e1 +.word 0xfad90a9d +.word 0x88231d80 +.word 0xf40c2abf +.word 0x0c8eb3e5 +.word 0xe15d733e +.word 0x63ff0158 +.word 0xff389c66 +.word 0xb3581c23 +.word 0x4182a621 +.word 0xc4deab74 +.word 0x2ade3762 +.word 0x87177c96 +.word 0xbd8f9912 +.word 0x2ac4bbc9 +.word 0x0ece17dd +.word 0xd731ba90 +.word 0x304cf1c8 +.word 0xc2a16b02 +.word 0x789e9ba8 +.word 0x31b93654 +.word 0xdc2b4c03 +.word 0x5f4737dc +.word 0x433528ee +.word 0xe5f331ef +.word 0xfd2480fe +.word 0x54c8c603 +.word 0xf982c37b +.word 0x1bdb8ddb +.word 0xcafa31f6 +.word 0x95c1a62a +.word 0x3e7a10ad +.word 0x65ba6fb8 +.word 0x51be4c41 +.word 0xac90ce66 +.word 0x6c15f933 +.word 0x6da26083 +.word 0xaab820e5 +.word 0x590a8b85 +.word 0x153116e1 +.word 0x7e4a1e3e +.word 0xdda52eb2 +.word 0x3d3808fc +.word 0x450f37cd +.word 0xe9e12641 +.word 0x29a01547 +.word 0xf5a66493 +.word 0x4d9f24d9 +.word 0x35773ab8 +.word 0xb9223dd8 +.word 0xe3f77525 +.word 0x777e5fb3 +.word 0x453ef957 +.word 0x20eeb9b5 +.word 0x01e23a7a +.word 0xb45438f7 +.word 0xbd9451ad +.word 0x509b2ba4 +.word 0x793d6578 +.word 0xc3cee357 +.word 0xb27313dc +.word 0xae4addb0 +.word 0xeafdf38b +.word 0x3e3c37c0 +.word 0xf91bd2fa +.word 0xa0670a89 +.word 0x51afcd41 +.word 0xae6e4b64 +.word 0x4e16f5c1 +.word 0x694338e8 +.word 0xd2ae3ad7 +.word 0xce82c4e5 +.word 0x99011648 +.word 0xce862030 +.word 0xdd9f5c31 +.word 0x63a85e24 +.word 0x13552532 +.word 0xf0bf85f6 +.word 0x0f543394 +.word 0x71e16833 +.word 0x1a111a51 +.word 0x89b9deb2 +.word 0xc7b9df85 +.word 0x08fb07a8 +.word 0x7f189e52 +.word 0x6731ecf9 +.word 0xab5e8112 +.word 0xe60cc960 +.word 0xac43b426 +.word 0x0f692463 +.word 0x5a5b464b +.word 0x76f00596 +.word 0x2988b9af +.word 0xdbe9fe88 +.word 0x5c1de442 +.word 0x5c04cbde +.word 0x369d3d12 +.word 0x897a11bb +.word 0xce99b6ec +.word 0x1c7c10cf +.word 0x7fd1559d +.word 0x4c076760 +.word 0x0ffa6692 +.word 0x65d1d03e +.word 0xa308570d +.word 0x9d3b2f86 +.word 0xfed7e307 +.word 0xb3e64a8d +.word 0xee0d4fbe +.word 0xba293589 +.word 0xaf4bbb5b +.word 0xe6187b86 +.word 0xdd6ec63f +.word 0xc13f5257 +.word 0x53b2b3f7 +.word 0x483e892b +.word 0xdd8a9b0e +.word 0x067e6246 +.word 0x63c9da83 +.word 0xd673da27 +.word 0x4b137866 +.word 0x7f74e1f0 +.word 0x58f7a57b +.word 0xa3d01941 +.word 0xd4466f32 +.word 0x0f4449ec +.word 0x68df99e8 +.word 0xdb1c6c97 +.word 0x69b01dc4 +.word 0xfa13e963 +.word 0x4572da50 +.word 0x8125b9ab +.word 0x2c533090 +.word 0xde408469 +.word 0x7ad8a598 +.word 0xd323d43e +.word 0xb032ac02 +.word 0x4358ebb2 +.word 0xda675e26 +.word 0x115029d9 +.word 0xecf178f1 +.word 0xc8cb4ba3 +.word 0x3ec928cf +.word 0x93458ee9 +.word 0x595272f6 +.word 0x77e2f511 +.word 0xf2b1f586 +.word 0x74141a07 +.word 0x94c793b2 +.word 0x0b81ea6d +.word 0x0e929694 +.word 0x79f78f69 +.word 0x6bd99681 +.word 0xef1645a7 +.word 0x92082bbb +.word 0xe37dfa0d +.word 0x93034548 +.word 0xee709b59 +.word 0x51daa8fe +.word 0x06abb4b6 +.word 0xc077acc4 +.word 0xa7b6f268 +.word 0x322dbfba +.word 0x37533609 +.word 0x78bc6364 +.word 0xe632dde3 +.word 0xab5d0f21 +.word 0x6e93ba65 +.word 0x92864652 +.word 0x5915e930 +.word 0x64ea09c7 +.word 0x2edc3547 +.word 0xb20dbc77 +.word 0x06255c15 +.word 0x8641b0a4 +.word 0x169f8abb +.word 0x24724c58 +.word 0xc2684825 +.word 0xdceeede5 +.word 0x8279bdf8 +.word 0xf669c901 +.word 0xb57dac45 +.word 0x89fcd84f +.word 0x9b46a3c6 +.word 0x022fb138 +.word 0x18cc8240 +.word 0xbfbcc889 +.word 0x5fdf0a8e +.word 0xf7345f8e +.word 0x41e358ea +.word 0x48661bbc +.word 0x36364acc +.word 0xee49e628 +.word 0x8bd07648 +.word 0x41a752b5 +.word 0x1095b369 +.word 0x9531e56c +.word 0x03f6eee9 +.word 0xdcb7a457 +.word 0x2891dd72 +.word 0xc3212e2e +.word 0xdcd8299d +.word 0x4a0f415b +.word 0x95c0e915 +.word 0xaff6821e +.word 0x74ca3d64 +.word 0x6981708b +.word 0xe2451153 +.word 0x41a20a4e +.word 0x90e23a40 +.word 0x01d6d94e +.word 0x91b440a7 +.word 0xf8716248 +.word 0x654869c6 +.word 0xbc3b2aab +.word 0x53a172ca +.word 0x6094df90 +.word 0x64b02fca +.word 0xe159e7a5 +.word 0x53773081 +.word 0x0b8afb39 +.word 0x8bec6fd2 +.word 0x9532c78b +.word 0x9b1953cd +.word 0x77f90dff +.word 0x4bf8eedc +.word 0xb74b1138 +.word 0x3fc2a8b8 +.word 0x42e2d614 +.word 0x2da1a6b3 +.word 0x0ef5a223 +.word 0x34eb7e87 +.word 0xacd530b9 +.word 0x658d3bfc +.word 0x7514ef01 +.word 0x3b22369e +.word 0x42022601 +.word 0xafbcb3da +.word 0xf04d0aca +.word 0x23e58a6d +.word 0xb09f2452 +.word 0xf5d649b3 +.word 0x8b889249 +.word 0xe4f51d40 +.word 0x2e50d916 +.word 0xc8dae978 +.word 0x1c18c372 +.word 0x375880e5 +.word 0x18b32868 +.word 0x00d90d1f +.word 0xc224859f +.word 0x597a41d7 +.word 0x5cf1a666 +.word 0xbb97f856 +.word 0x4096d07f +.word 0xdbc43761 +.word 0x2f5c675c +.word 0xf9c909d1 +.word 0xdf408d77 +.word 0x80031eb6 +.word 0xef98a9c8 +.word 0xd854d29d +.word 0xf39b8ee2 +.word 0x4ba83f91 +.word 0x6a1148cc +.word 0x4d652d35 +.word 0x71d878d6 +.word 0x8e2462da +.word 0xdbd600ad +.word 0x540fa84e +.word 0x8e42c366 +.word 0x46c09367 +.word 0x71f3d5fc +.word 0x0d1bfdf7 +.word 0x8ab25da5 +.word 0x9db7e35f +.word 0x9775bfa5 +.word 0xde5805bf +.word 0x852ef1db +.word 0x46a64700 +.word 0xf3332016 +.word 0x670f9cc9 +.word 0x31c448a1 +.word 0x8233af06 +.word 0xb38fa2ec +.word 0x444da588 +.word 0x3baa7cd7 +.word 0x1595fee5 +.word 0x8e7bc1ec +.word 0x6014e4a6 +.word 0xcbc4ad3e +.word 0x28e8d637 +.word 0x9c826de7 +.word 0x2668ad90 +.word 0x32b5c2da +.word 0x1d017552 +.word 0xa52d9ac2 +.word 0xbb3c4123 +.word 0x6f627b2a +.word 0xd347783a +.word 0xcd3db664 +.word 0xdd9d9a61 +.word 0xa4e2c5bd +.word 0x72bf5dbd +.word 0x6a7eb42d +.word 0xcbd0b2df +.word 0x4b72bdaf +.word 0x3e5f7e64 +.word 0xff7b37da +.word 0xef64a821 +.word 0xa7762d30 +.word 0xd512a2cc +.word 0x0dbfdb16 +.word 0xc5edb0bf +.word 0x97cc4c36 +.word 0x4b9c2174 +.word 0x473ea2ea +.word 0xad65b060 +.word 0xe9d615f1 +.word 0xbef2b34e +.word 0x0b2fcf70 +.word 0x95aca4d9 +.word 0x560cd3c4 +.word 0x3a0c80bf +.word 0x0e3abf7e +.word 0x9437f7d3 +.word 0x44cdc01f +.word 0x55f4b088 +.word 0x80146bb0 +.word 0xe5a5dccc +.word 0x469c6e65 +.word 0x93585587 +.word 0xa5867c09 +.word 0xc0dd99e9 +.word 0xd91b90bd +.word 0x3a219e23 +.word 0xdd2867e5 +.word 0x133b89a0 +.word 0x757ce8e2 +.word 0xbc4613c6 +.word 0xe63c167d +.word 0x58e98746 +.word 0xadb69681 +.word 0xb2f55c5f +.word 0x0c2162a6 +.word 0xc016ae02 +.word 0xd63e481f +.word 0x23c36264 +.word 0x51f4fff5 +.word 0x6eebdaed +.word 0xf008f27e +.word 0xf50d0bd6 +.word 0x2ee720f9 +.word 0x6535749b +.word 0x1f6e9e6e +.word 0x0d993272 +.word 0x36cc03c2 +.word 0xef859ca1 +.word 0xe7bc8dfb +.word 0x3320ccf4 +.word 0x9f8d282b +.word 0xa32586c6 +.word 0x7291d139 +.word 0xd8c14cd7 +.word 0x170c1005 +.word 0x45c334f1 +.word 0x1d776b79 +.word 0xe902699d +.word 0xcc5d298a +.word 0x736481ea +.word 0x16b1eb4d +.word 0xda5d1d72 +.word 0xc7bf8f64 +.word 0xde777e20 +.word 0xf138d040 +.word 0xaa133ff0 +.word 0x7dae7a8e +.word 0xcd38099a +.word 0x2351b1de +.word 0xd6a150b9 +.word 0x4e9dcf76 +.word 0x707393e0 +.word 0xdf775068 +.word 0x01ad2896 +.word 0x566b6b46 +.word 0xd0598613 +.word 0x66e6d40a +.word 0xe7422d6c +.word 0xb7755176 +.word 0x3a62b130 +.word 0x7e272665 +.word 0x5ad23043 +.word 0xa9672e40 +.word 0xb66a5ad7 +.word 0x80871131 +.word 0x1351d490 +.word 0xdc6c5262 +.word 0x2dd2e5d7 +.word 0xa2116bdf +.word 0xd2f22abc +.word 0x754bea6f +.word 0x0cd55ee0 +.word 0x8c9b9c09 +.word 0x1948f612 +.word 0x2c00e7c1 +.word 0x3526c26f +.word 0x2bf063af +.word 0x93d01dc9 +.word 0xc00134f0 +.word 0x7103127d +.word 0xf3e05f1d +.word 0x129c63cc +.word 0x54644cf3 +.word 0x529c204d +.word 0x89ac1a11 +.word 0xab5afbf6 +.word 0x46af7dfb +.word 0x6cf76b08 +.word 0x61b269ca +.word 0x57236053 +.word 0x0e72b69f +.word 0xbf69b94e +.word 0x07276a3e +.word 0x6c10ce6e +.word 0x39cd9552 +.word 0x6b253031 +.word 0xb4444b40 +.word 0xcc3ccc18 +.word 0xde71bd49 +.word 0xa00ab7b0 +.word 0x48ad3d48 +.word 0x0285a58f +.word 0x2620e371 +.word 0xe27c36cb +.word 0x617be605 +.word 0x61038c08 +.word 0x5a62daa0 +.word 0x55ff4f45 +.word 0x315e2bdd +.word 0x47dfacff +.word 0x787ebb38 +.word 0x74c96c39 +.word 0x0f668ceb +.word 0x1c9a0a70 +.word 0x06a768db +.word 0x77ec797c +.word 0xa581cb0e +.word 0xe17c66b1 +.word 0x66505dc7 +.word 0x9b1468b6 +.word 0xc920f0c6 +.word 0x8913f777 +.word 0x8a25ab24 +.word 0x2615b699 +.word 0xae89502f +.word 0xba234214 +.word 0x4d888de5 +.word 0xa94f0851 +.word 0x3579864c +.word 0x1bc30746 +.word 0x54a97b22 +.word 0x8c07a772 +.word 0x6358890b +.word 0x403d38e3 +.word 0xf6d06dc6 +.word 0xb328d3ef +.word 0x47df309f +.word 0x122b7fb7 +.word 0xb71a3590 +.word 0xec16678e +.word 0xb8329e29 +.word 0xaf77221f +.word 0xf7af0a21 +.word 0xb1f19f3a +.word 0x1f872bc5 +.word 0x78b0d549 +.word 0x6534dc39 +.word 0x93fd8b5d +.word 0x285871c0 +.word 0xa09ac71b +.word 0xb4827d52 +.word 0x45b69757 +.word 0x9fca284d +.word 0x582194b3 +.word 0xac6da850 +.word 0x77cb4e9e +.word 0xf5cb288f +.word 0x772aa1f7 +.word 0x0ae2fea2 +.word 0x11858526 +.word 0xb0a03ca7 +.word 0x17f5000f +.word 0xc39e7709 +.word 0x7eb5e3e8 +.word 0x586ee2d9 +.word 0x6893b8db +.word 0xd7fc418e +.word 0x8a1fbc71 +.word 0x6ac422d8 +.word 0x7898ca39 +.word 0x9435242e +.word 0x747d5002 +.word 0xb5b79655 +.word 0x6891e3e0 +.word 0x48c2e861 +.word 0x1eb92e19 +.word 0x74588b9b +.word 0x2e8b86e4 +.word 0x320f953c +.word 0x2c6ec6ad +.word 0x5b4a5e4f +.word 0xe8efc064 +.word 0x82f6baaf +.word 0x46df9b08 +.word 0x79524a22 +.word 0x755adb38 +.word 0x0d5644f1 +.word 0xcef6a995 +.word 0x81e88114 +.word 0xfda99862 +.word 0xa219883f +.word 0x3e72380c +.word 0xfb8b7750 +.word 0x1c7a3527 +.word 0x2a78a288 +.word 0x24fdd14f +.word 0x27cef36b +.word 0x223d2864 +.word 0xe695e439 +.word 0x24b83256 +.word 0x7cd1f75d +.word 0x24daebb7 +.word 0x4fca8841 +.word 0x17427d40 +.word 0x5e5d8a89 +.word 0x4835f7da +.word 0xb9e36731 +.word 0xfd855af5 +.word 0x30ceeb40 +.word 0x773c2b11 +.word 0x9e0a554b +.word 0xfc9e477f +.word 0x10b73187 +.word 0xa7cfe009 +.word 0x67578bb6 +.word 0x8084b9f7 +.word 0xb36bb530 +.word 0xb1d53db4 +.word 0x62e39b62 +.word 0xd06b7ebc +.word 0x94a01fa1 +.word 0x3b33fad4 +.word 0x31b8ec46 +.word 0x32f060b4 +.word 0xcfda5c05 +.word 0xdcdf7ab2 +.word 0x297c4f5d +.word 0x974e2973 +.word 0x1321df54 +.word 0x0ffdb555 +.word 0xae426d3a +.word 0x8e6fcffa +.word 0x6df4d121 +.word 0x6f660cbd +.word 0x743d0dd5 +.word 0x608776df +.word 0x48e17015 +.word 0xef4e942c +.word 0x11eab062 +.word 0x9716bbc5 +.word 0x2d4bec51 +.word 0x5d3ff847 +.word 0x0af00915 +.word 0x24bce304 +.word 0x9c5f9bf2 +.word 0x0829fcdf +.word 0x6a6d1c7a +.word 0x9ca357f5 +.word 0x92300676 +.word 0x1a3a855f +.word 0x6bef22cb +.word 0x538fe695 +.word 0xcda54f08 +.word 0xdd84e287 +.word 0x97ac18e3 +.word 0xc8d3e192 +.word 0x69fb4c83 +.word 0xfa5e36f2 +.word 0xb77fd772 +.word 0xe4005c85 +.word 0x2a030336 +.word 0xb1d165ea +.word 0xab5510c2 +.word 0xb1ef8237 +.word 0xe4d089aa +.word 0x3a58341f +.word 0x1e8c84fa +.word 0x8f9a2635 +.word 0x38c3bbde +.word 0xf7f7e20f +.word 0xe981300a +.word 0x7b197b29 +.word 0xceae0649 +.word 0x9d3b42c6 +.word 0xe9d79655 +.word 0x8d115257 +.word 0x34536b22 +.word 0xfdf1d00a +.word 0x441e6e8a +.word 0x1d047721 +.word 0xc773dac0 +.word 0xa6f74de3 +.word 0xdd60eca0 +.word 0x3893e9d4 +.word 0xec581389 +.word 0xd46ceb49 +.word 0xa4763863 +.word 0x0407b50c +.word 0xc3cc7ccf +.word 0x5f5ed7db +.word 0x22f8e56e +.word 0x53cbdc95 +.word 0xf28ee7b7 +.word 0x50bcc0bf +.word 0x76b9f0ad +.word 0xe6d52050 +.word 0xb626ec83 +.word 0x5f344ef1 +.word 0x555c4d1b +.word 0x8c4b17e6 +.word 0x8996e123 +.word 0xb996d8c5 +.word 0xa5080bf0 +.word 0x2eb609f5 +.word 0xdfb5d95d +.word 0xcd103592 +.word 0x803a0e35 +.word 0x253186da +.word 0x73f02bf6 +.word 0xdcd902c0 +.word 0x45690da0 +.word 0x51f4a22b +.word 0xb11b887f +.word 0xbda28f9e +.word 0xd4e6cdad +.word 0x65372f51 +.word 0xbb950104 +.word 0x3acef72e +.word 0x0cb4a28d +.word 0xb08ebfa8 +.word 0x3c88b063 +.word 0xe0979b02 +.word 0x533e3fcb +.word 0x5722874f +.word 0xd881cce2 +.word 0x071b42df +.word 0xf8527a18 +.word 0x542a003c +.word 0x0a4905f1 +.word 0x55f4e065 +.word 0x1fd94915 +.word 0x407ec6a7 +.word 0x80693d02 +.word 0x8f98bbe1 +.word 0x307a5cd5 +.word 0xff7a4fc5 +.word 0x251d7344 +.word 0x1b457f21 +.word 0x449ef381 +.word 0x000454dd +.word 0xe0abbaa4 +.word 0x27d4a0f4 +.word 0x041d624d +.word 0x9ece8c42 +.word 0x57020149 +.word 0x1e8fee8c +.word 0x7809ea5c +.word 0x2f01d386 +.word 0x13fd17b7 +.word 0x81ec7ae3 +.word 0x3d22fdb3 +.word 0x5874fffb +.word 0x7e6946e4 +.word 0xfe35b50e +.word 0x9b93fb47 +.word 0x91891d3e +.word 0x4d5bca9d +.word 0x75fe13a0 +.word 0x44028408 +.word 0xd8c3df10 +.word 0xee13119f +.word 0xd61b9e79 +.word 0x6942adc2 +.word 0xb80f4350 +.word 0x4b9fd998 +.word 0xcac9e86f +.word 0xf36cfc4e +.word 0x2c3e7a1d +.word 0x15b7d0b7 +.word 0xfe54cfa3 +.word 0x926ee37e +.word 0xc9080411 +.word 0xd8eea06a +.word 0xcdcf7133 +.word 0x1a6f1511 +.word 0x4020def8 +.word 0x5ea62dae +.word 0xdf46ca76 +.word 0xbb3817aa +.word 0x37c1b051 +.word 0x23a66206 +.word 0xcbf5d766 +.word 0xe0076287 +.word 0x05c6587f +.word 0x545e6e27 +.word 0x1c92ce24 +.word 0x6e1e2ade +.word 0x044eb79b +.word 0x631a6490 +.word 0x2b754eb9 +.word 0x0e52f22f +.word 0xf84ba892 +.word 0x26c6a12b +.word 0xed5f1222 +.word 0xb9d1355d +.word 0x58cd606d +.word 0x6070691a +.word 0x5f71c795 +.word 0x46721126 +.word 0x930b2770 +.word 0x2234fcb0 +.word 0x97051b60 +.word 0x7e02bd48 +.word 0x302d69ef +.word 0xf4ea7a2d +.word 0x49b536a5 +.word 0xa0ba319a +.word 0xb8458c44 +.word 0xbce9aa58 +.word 0x9458173a +.word 0x759d17f0 +.word 0x6cc8bdfa +.word 0xbd0c85ac +.word 0x100243c3 +.word 0x903e17e3 +.word 0xd6c72e7d +.word 0x73ecb685 +.word 0x7ba4f00a +.word 0xb0cad2e4 +.word 0xc89494f7 +.word 0x53676717 +.word 0x9a029682 +.word 0xd0a8588a +.word 0x9db5ed31 +.word 0x35b05ca9 +.word 0xfef83728 +.word 0x57d98375 +.word 0xa63ce2b2 +.word 0x0da3dae6 +.word 0xae530779 +.word 0x8df9e526 +.word 0xe83a7c1b +.word 0x3b162257 +.word 0x05859ad9 +.word 0x5475799c +.word 0x6ded20ad +.word 0xaf2faf59 +.word 0x4f2ea3f6 +.word 0xc5516ada +.word 0xda10714d +.word 0x084fd2f0 +.word 0xfc6a4d59 +.word 0x10a6ab5b +.word 0x428b75d0 +.word 0x150f683e +.word 0xcce1c6ba +.word 0xf3dd2476 +.word 0x44a83093 +.word 0x9179b83a +.word 0xf6f9128f +.word 0xc522613e +.word 0x424a5eee +.word 0x76236b07 +.word 0xeab1c273 +.word 0xdf4d1ad2 +.word 0x7bce7078 +.word 0x949f858d +.word 0x1226c48b +.word 0x654cd500 +.word 0xce65a6fc +.word 0x0a17fcb8 +.word 0x329cd0b5 +.word 0x90a3ecf4 +.word 0x04c12532 +.word 0x2df83d4b +.word 0xc0d2e32b +.word 0x2faa9955 +.word 0x7f028bf1 +.word 0xefd37515 +.word 0x86b834f0 +.word 0xb033d832 +.word 0x10ce00c9 +.word 0x86fe7827 +.word 0x87e903ec +.word 0x7b989787 +.word 0x7ac343db +.word 0x110425ec +.word 0x9d8f7f84 +.word 0x59535dda +.word 0xb40cb165 +.word 0x41549928 +.word 0xe96b5dd7 +.word 0x766d90b3 +.word 0xd5266d7c +.word 0x8593a104 +.word 0x4851c73f +.word 0x6f79bc39 +.word 0x47d54bcb +.word 0x87be85b8 +.word 0x5cdac5e2 +.word 0x446bcb48 +.word 0xff8ba638 +.word 0xf8047cc1 +.word 0x82b86547 +.word 0x90a7b23e +.word 0xd2324c6d +.word 0xa1d8d2d6 +.word 0x6a393723 +.word 0x80d44165 +.word 0xcd1286dc +.word 0x10997025 +.word 0x693bb1d6 +.word 0x1542ea1b +.word 0x9055202b +.word 0x06ce35dd +.word 0x70806c6a +.word 0x21e33ef1 +.word 0x57213df1 +.word 0xf988cd3d +.word 0x3bdefc02 +.word 0x5f6a7cbd +.word 0xcda6a2b1 +.word 0x34eb97db +.word 0x3a02395d +.word 0x6b74e740 +.word 0x9d1b50ec +.word 0x34c28626 +.word 0x418de14f +.word 0x0ff1358c +.word 0x44bcd264 +.word 0x63ede48e +.word 0x98052ee6 +.word 0x4b92ede1 +.word 0x86c14ac0 +.word 0xc8e97b80 +.word 0x47c7c1fd +.word 0xb7cf04c2 +.word 0xc2301784 +.word 0xecc854f4 +.word 0xbd7398bb +.word 0xa3349568 +.word 0xa339931d +.word 0x6191fe16 +.word 0xe4e5007d +.word 0x3085cbda +.word 0x5c850f38 +.word 0x20393a21 +.word 0x827c9d91 +.word 0xe716f5d7 +.word 0xa49abd17 +.word 0x0421cf35 +.word 0xe1a54942 +.word 0x0e40b4c5 +.word 0x31cd424e +.word 0x7aaaf2cb +.word 0x05ae957b +.word 0xcaec583e +.word 0xafabe6b8 +.word 0xf6d79ff8 +.word 0xa58456f0 +.word 0x6de5dcc8 +.word 0x3b045a8f +.word 0x51505572 +.word 0xa0d2936a +.word 0xd52d1b57 +.word 0x2fd9764c +.word 0x86b2dccf +.word 0xa659282e +.word 0x3b2e8e39 +.word 0xb57d66e3 +.word 0x47ccd732 +.word 0x58c98b58 +.word 0x34a14709 +.word 0xf35cfdf1 +.word 0x0a444318 +.word 0x4ebb0345 +.word 0x9cd05690 +.word 0x81afbe02 +.word 0x392218c4 +.word 0x817eb0c3 +.word 0x78c92e39 +.word 0x8bd4417f +.word 0x71b76c0c +.word 0x2a7bf8f9 +.word 0xb2aa4c78 +.word 0x5441002e +.word 0xce5b5126 +.word 0x55c8ddf6 +.word 0xddf0eb80 +.word 0x3f5a5d62 +.word 0xa5a205c1 +.word 0xf8b84e63 +.word 0x4cc5031c +.word 0xce1a8e9c +.word 0x8d180fe9 +.word 0x00ea90da +.word 0x9727a840 +.word 0x60385965 +.word 0x11d0ebc3 +.word 0xcdb8f2ec +.word 0xb268cf61 +.word 0xefe82635 +.word 0x21be16eb +.word 0x5cd2fa6b +.word 0x932a7333 +.word 0x585b79df +.word 0x201e70be +.word 0x5ea63bc3 +.word 0x6eae1b88 +.word 0x7e2f2f9a +.word 0x7102806b +.word 0x6b980b6d +.word 0x80149d57 +.word 0xaf3744be +.word 0x3fa100cd +.word 0x7b108a58 +.word 0xd7ec2a2d +.word 0xc76e4370 +.word 0xc8f18c32 +.word 0xed53c199 +.word 0x7cc474ab +.word 0xd6680900 +.word 0xca638ad3 +.word 0x5b1703ab +.word 0xc3e8eab7 +.word 0x7c229e59 +.word 0x90bfc1fb +.word 0x28f51b36 +.word 0xbc8d83ae +.word 0x550e8523 +.word 0x6e141b92 +.word 0x8689f3b6 +.word 0xc2c67028 +.word 0xfa0b8ab2 +.word 0xde387530 +.word 0xaa9c2580 +.word 0x4abcac10 +.word 0x8ae1e7d7 +.word 0x9feb693f +.word 0x5a40760f +.word 0xe877a9cd +.word 0x4fa53049 +.word 0x869b13bc +.word 0xf930e18c +.word 0x365b927c +.word 0x6c3af20b +.word 0xeb7e0e12 +.word 0xef4caa02 +.word 0x71bed28e +.word 0xb2fc1922 +.word 0x92142c89 +.word 0x163a8ca8 +.word 0xea2d076f +.word 0xe01caf46 +.word 0xea708124 +.word 0x36d1e364 +.word 0x8bc0df5d +.word 0xd1e3ba3f +.word 0xdbcf9264 +.word 0xdb4e0dbf +.word 0x0d81f7ae +.word 0xaeb0cfbf +.word 0x582cfadf +.word 0x23f68ac6 +.word 0x816d4e57 +.word 0x1466e071 +.word 0x4db1bbd9 +.word 0x6ebb543d +.word 0x6666d972 +.word 0x52ade238 +.word 0x7c2e8729 +.word 0x81fc12a6 +.word 0x26a49bb0 +.word 0x3b61a6a0 +.word 0x55357af3 +.word 0x053cbbf8 +.word 0x85e6396f +.word 0xe70ad007 +.word 0x3f13365c +.word 0xe2185469 +.word 0x5e716694 +.word 0x733d8740 +.word 0xc7f211a6 +.word 0x70f2ff0c +.word 0x7f689ea9 +.word 0xeb4fb1db +.word 0x11d92ef1 +.word 0x70c7d3d4 +.word 0x4d34b38c +.word 0x7f0842df +.word 0x8ce4498a +.word 0xb08d07e6 +.word 0x4b5dde0b +.word 0xed7dd81f +.word 0xf3c23755 +.word 0xc715a48c +.word 0x9b50af48 +.word 0xcbbbc382 +.word 0x0de9a848 +.word 0x9ed43411 +.word 0x72da4cbc +.word 0x53546bfe +.word 0xaea83e2d +.word 0x5fbe3ab5 +.word 0xe51c75ab +.word 0x1b13bd09 +.word 0x4379eee6 +.word 0x79145ccc +.word 0x23772a86 +.word 0x1df253ee +.word 0xad380710 +.word 0x432fd9be +.word 0x220d4e9e +.word 0xb3d081f6 +.word 0xdba36f1e +.word 0x9cbebbef +.word 0x9f9ded41 +.word 0x484edad1 +.word 0xe91c28a1 +.word 0xc8db2baf +.word 0xce6d63dd +.word 0x89f573cc +.word 0x3ad3d09e +.word 0x78dd00e3 +.word 0x6282eba3 +.word 0x9f8f4383 +.word 0x241d7453 +.word 0x337f6b8d +.word 0x8d59e9fa +.word 0x23695e2a +.word 0x29637cd5 +.word 0x8adf817c +.word 0x72211a4c +.word 0xd27fc6c7 +.word 0xfb71e0f7 +.word 0x8e57ee36 +.word 0xa4d4c963 +.word 0x6c9e5d32 +.word 0x9b27e5d8 +.word 0x6024cad4 +.word 0xdeecffc3 +.word 0x827e084c +.word 0x3e329282 +.word 0x6b2109b7 +.word 0xd847561b +.word 0x08089f09 +.word 0xfe3c16e0 +.word 0xbfea0527 +.word 0x80e4f017 +.word 0x47bf67c2 +.word 0x402ce98c +.word 0x5865fba5 +.word 0xb9dd0a69 +.word 0xa16b9d4e +.word 0x7fbf960f +.word 0x61674c56 +.word 0x6b9bae95 +.word 0x249d2aa2 +.word 0x60671e80 +.word 0xb0a37498 +.word 0x047be3d5 +.word 0xf1c41a63 +.word 0x048a8b99 +.word 0x726976d9 +.word 0x4b0dc08f +.word 0x893cbfaa +.word 0x430b2d18 +.word 0x9a77c39d +.word 0x0ad4c48d +.word 0xe5dd59e4 +.word 0xebbb4a1e +.word 0xdf00760d +.word 0xb287b5df +.word 0x230dd960 +.word 0x9ffc58b3 +.word 0x93c1feea +.word 0xcc3f9e87 +.word 0x76241b96 +.word 0xc943a95a +.word 0x4ef682ef +.word 0x07eca511 +.word 0x27c97958 +.word 0xfe24937c +.word 0x53a0b3a8 +.word 0x22b2a9fb +.word 0x2a4ebd52 +.word 0xf40bec98 +.word 0xcefed4fe +.word 0x6fb0d941 +.word 0x0d708515 +.word 0xcd15e722 +.word 0x00ce4770 +.word 0xbff4f20c +.word 0x6c9a3612 +.word 0x5be84275 +.word 0x04140af2 +.word 0xa93cddcc +.word 0xdfdf584f +.word 0x732ea7a3 +.word 0xe04eb957 +.word 0x2f67ac43 +.word 0x5345d5c6 +.word 0x6dcb28c7 +.word 0x2f93fa10 +.word 0xfd4cbcea +.word 0x83ed0240 +.word 0x00277522 +.word 0xa2f2262d +.word 0x2605b9bd +.word 0x5a5e9b9c +.word 0xd1192448 +.word 0x56ddcbdc +.word 0x4451f8e3 +.word 0xdc719f60 +.word 0x4355a7c0 +.word 0xf302064d +.word 0x0892f219 +.word 0x1157251a +.word 0xfe6b7d66 +.word 0x9dc6bf64 +.word 0x8df8aca5 +.word 0xcb1a224a +.word 0x4be4320b +.word 0xde870471 +.word 0x47c0492c +.word 0xdcf8ddba +.word 0x7f3f05ad +.word 0xe61268b0 +.word 0xf649dae0 +.word 0xccbf8bf3 +.word 0x24d820e0 +.word 0x75b66634 +.word 0xe9830e06 +.word 0x71698724 +.word 0x358c19ab +.word 0x7773ef7a +.word 0x21fab22b +.word 0x13a27011 +.word 0x96c78f69 +.word 0x02803776 +.word 0x67bb614b +.word 0x5103ae18 +.word 0xcc2072d2 +.word 0x5c781451 +.word 0x70b97c32 +.word 0xa30f5881 +.word 0x2b024cd1 +.word 0x7a5f8a7d +.word 0x31cb99e8 +.word 0x668cde7c +.word 0xcec9ec2b +.word 0xf17a0b6f +.word 0xf3b661b9 +.word 0xcc8e9a58 +.word 0x0aa0a227 +.word 0x6d1cc14e +.word 0x5dad485f +.word 0x606c8d57 +.word 0x76a1def9 +.word 0xada9acdc +.word 0x015c222d +.word 0x976c5286 +.word 0x0e51231e +.word 0xbfad55a7 +.word 0xef07d1f9 +.word 0xaadfd6f6 +.word 0xc64c1a74 +.word 0xfb022918 +.word 0xea34418a +.word 0x49e3a318 +.word 0x9c8ac764 +.word 0x7b2dee15 +.word 0x84ec39c7 +.word 0x6ca9571a +.word 0x0458ff7a +.word 0x54da03d4 +.word 0x074f9bbc +.word 0xe2d58570 +.word 0xc9e41e29 +.word 0x0e96ebb8 +.word 0xa4127401 +.word 0xe14991ba +.word 0xa15369df +.word 0xa8744264 +.word 0x7bbf3968 +.word 0x6372adff +.word 0x5598184c +.word 0x167773b5 +.word 0x4e554263 +.word 0x35c9eed8 +.word 0x6d9d97c2 +.word 0x5f8d057e +.word 0x4ec738c1 +.word 0xfe04ce8e +.word 0x3aa45ee9 +.word 0x6396d483 +.word 0xd276a897 +.word 0x5d5eb71c +.word 0x0c96e5aa +.word 0x90018d04 +.word 0x57bdfec0 +.word 0xcbd8b124 +.word 0x54e255c3 +.word 0x54f919d8 +.word 0x82f4cbe7 +.word 0xa0885cec +.word 0x20bf3303 +.word 0x10591393 +.word 0xc3906d97 +.word 0x4009a8f3 +.word 0xef7eafac +.word 0xcf89ba35 +.word 0x884e7508 +.word 0x1438d8da +.word 0x42305d9c +.word 0x04ca0269 +.word 0x956415c6 +.word 0x8f910ec4 +.word 0xb9d9b22d +.word 0x5c0c0679 +.word 0xe7afb92e +.word 0xdffbee43 +.word 0xb03d85f4 +.word 0x81125397 +.word 0xed702c7a +.word 0x8149e447 +.word 0x00c97f4e +.word 0xe3eac6d9 +.word 0x16c2b14e +.word 0x5d96a7e6 +.word 0x5e1aeca2 +.word 0xdb4a6e21 +.word 0x99da0a49 +.word 0x8c283baf +.word 0xfd2d805a +.word 0xe32d5005 +.word 0xa4de7c3f +.word 0x6e9c41ca +.word 0x3a9e1e9f +.word 0xe1ab2f10 +.word 0xb4603b21 +.word 0xe8da74f1 +.word 0x6894c994 +.word 0xf488fd0e +.word 0x13533a7f +.word 0x49e3fccf +.word 0xf1bb99a9 +.word 0xc5d8ca61 +.word 0x2d82c115 +.word 0x5a415a91 +.word 0x38867bec +.word 0xa1af7eaf +.word 0xb101b9bc +.word 0x9a76afe2 +.word 0x6620598f +.word 0x10428ac7 +.word 0x54ed731b +.word 0xed42fef0 +.word 0xbc7747c9 +.word 0x9882fd5d +.word 0x96370941 +.word 0x652c0781 +.word 0x0508f18e +.word 0x347b6501 +.word 0x4fb73b9d +.word 0x039bdc72 +.word 0x5a7c6ce8 +.word 0x51678b1e +.word 0x68de215b +.word 0x6a0e8f69 +.word 0xc7933141 +.word 0x8614e2c7 +.word 0xe5b4ebb5 +.word 0x9091e16a +.word 0x52c158ad +.word 0x72e9d641 +.word 0xaec03bde +.word 0x2682fabe +.word 0xb5562fd8 +.word 0xf6d33f7e +.word 0xba8ced85 +.word 0xb0243ada +.word 0xd563ae19 +.word 0x031e9f66 +.word 0x8f0eb487 +.word 0x6292d3b7 +.word 0x2e82a6f2 +.word 0x63f282c5 +.word 0x0b5e262f +.word 0xb1a3095c +.word 0x192d364d +.word 0x60357b47 +.word 0x181777fe +.word 0xfe8e111b +.word 0x3bfc5551 +.word 0x8be2df74 +.word 0x05243625 +.word 0x4a7d4b58 +.word 0x6948ac1c +.word 0x04f324e4 +.word 0xe1b162d5 +.word 0xa54ca05e +.word 0x08eb689c +.word 0x72ac0d4b +.word 0x1f54c3de +.word 0x6c462a36 +.word 0xc5a1f09f +.word 0x34ae2e32 +.word 0xd4aa79b1 +.word 0x7c8cbf6a +.word 0x9fd528a1 +.word 0xfa3d0867 +.word 0x2c5a9d1d +.word 0xba8ba80f +.word 0xea92a588 +.word 0x7fa2d232 +.word 0x3af5cbe5 +.word 0xc6a6fa03 +.word 0x750ae974 +.word 0x08ee1f1b +.word 0xe76875d1 +.word 0x246fc0a2 +.word 0xbe74a014 +.word 0x2c9c80cd +.word 0x7430d41a +.word 0x8553e761 +.word 0x459b9b67 +.word 0x91a909be +.word 0xfd3c7a21 +.word 0x516eeee0 +.word 0x9c9eee79 +.word 0xf0b0b23e +.word 0x25a2be42 +.word 0xe1bea611 +.word 0xebc5facb +.word 0xa0df7288 +.word 0x0b8415b3 +.word 0x448211ce +.word 0x3a4558e0 +.word 0x8360d49b +.word 0x343ec05e +.word 0xef51622d +.word 0xf83011f0 +.word 0x145920c7 +.word 0xd1c0f20a +.word 0x6cb8306b +.word 0x84b86aef +.word 0x734a9ece +.word 0x5bf282a7 +.word 0x816227a4 +.word 0x96032066 +.word 0x50953cf4 +.word 0x3a9399e4 +.word 0x5ed60af1 +.word 0x2fcc2099 +.word 0xa1445ba2 +.word 0x8cf9ab5d +.word 0xbc735c11 +.word 0xa3e41f2d +.word 0x9f84f526 +.word 0x3aa57ee0 +.word 0x6adf61d4 +.word 0x1a903f0e +.word 0xcc09e038 +.word 0xeacac40a +.word 0xa9c2dcc7 +.word 0x816be42d +.word 0x50dff78a +.word 0x8ae29729 +.word 0xc564dd04 +.word 0x7f7eb181 +.word 0x96510993 +.word 0x1422f3c0 +.word 0x380327e0 +.word 0x8d4fab0c +.word 0xe0261cb0 +.word 0x48164119 +.word 0x819b30c4 +.word 0x53bfc46c +.word 0x1d1685cc +.word 0x4a8e65d7 +.word 0xaec53865 +.word 0x5f029cca +.word 0x733000ba +.word 0x866a7219 +.word 0x99ac3426 +.word 0x9dfb1ff3 +.word 0xb0949152 +.word 0xe3bcd9aa +.word 0xa4e37b70 +.word 0x90bdf937 +.word 0xe815aeea +.word 0x71a71d81 +.word 0x88173ad3 +.word 0x14e0e7d8 +.word 0xa22561b3 +.word 0x95b51f37 +.word 0xeddccf53 +.word 0x11fe014b +.word 0x3dadbf8c +.word 0xc24b4278 +.word 0xc9169eb9 +.word 0xac0e2efc +.word 0x3c45f3a7 +.word 0xec4f4b61 +.word 0x8e400044 +.word 0xd7c1d458 +.word 0xd38b5dc9 +.word 0xa9ea408c +.word 0x8218e6d5 +.word 0xa8d71aef +.word 0x1f9eeb72 +.word 0xc006ef8a +.word 0xee494e28 +.word 0x9c75c8d3 +.word 0xa55ecea3 +.word 0xbe528f5f +.word 0xaa528723 +.word 0x23b136c8 +.word 0xd645f51c +.word 0xca84c36e +.word 0x3ce86caf +.word 0x8deacdfd +.word 0x1b0b2c51 +.word 0x3f248aff +.word 0x5f08a2d9 +.word 0x7e30ff1c +.word 0xc82f6bf7 +.word 0xf161b870 +.word 0xc1bd818b +.word 0x5146080c +.word 0x52d36a1c +.word 0x1831dc99 +.word 0x8c4809bf +.word 0x618d6618 +.word 0x903e5800 +.word 0x6b5078d4 +.word 0xa930bd81 +.word 0xc2443f9f +.word 0x6b348ff4 +.word 0x7e8b9e05 +.word 0xacf91bff +.word 0x327b272c +.word 0xa148154b +.word 0x1bbe0011 +.word 0x4e2da5c3 +.word 0x714b4e67 +.word 0x7eaa3af2 +.word 0x63665fbe +.word 0xdef5abd0 +.word 0x45b4dfe9 +.word 0xce7f3c58 +.word 0xb9fb1433 +.word 0x353156f7 +.word 0x483734d0 +.word 0xb76f3d0d +.word 0x91c214e2 +.word 0x9b15002e +.word 0xdc6a1755 +.word 0x27db6118 +.word 0x2e499bea +.word 0xfd7ecddf +.word 0x4f2bd4e0 +.word 0x9cf5480d +.word 0x48416686 +.word 0x2035b963 +.word 0xd07cf5ef +.word 0xc1318c77 +.word 0x4ab68185 +.word 0x180d55b1 +.word 0xc4c392dd +.word 0x46a1d1a6 +.word 0xc342b862 +.word 0x3f25173a +.word 0xfd5c00cc +.word 0x2336ad46 +.word 0x55889da4 +.word 0x39138f32 +.word 0x9fb25bab +.word 0xc89f72c9 +.word 0x201eb110 +.word 0x8b26df23 +.word 0xee68a529 +.word 0x65199bd7 +.word 0xb8dde8d2 +.word 0xb6c8940b +.word 0x4b9be54d +.word 0xe3d41e86 +.word 0xcd20e807 +.word 0x770a9180 +.word 0x3544a9ab +.word 0x1dc317d2 +.word 0xdc326192 +.word 0x91e16233 +.word 0x850acd17 +.word 0x6a812535 +.word 0x02687050 +.word 0x2e4e54c9 +.word 0x107b8dd3 +.word 0xe435f6a1 +.word 0xefcf4f5e +.word 0x6a6c1f89 +.word 0x9f9406ac +.word 0x97c8aff0 +.word 0xf93bda3b +.word 0xfa90233a +.word 0x2209ef2b +.word 0xef99fa0b +.word 0x9d952c13 +.word 0x5bdf034c +.word 0xc9e8488e +.word 0x09c82cb0 +.word 0xcfd5ed42 +.word 0xe024c92f +.word 0x15e80edd +.word 0x44632809 +.word 0xfbb3fa2b +.word 0xf1760573 +.word 0x9e29ad75 +.word 0xf52ef712 +.word 0x1541a163 +.word 0x697efb21 +.word 0xd9e4ede4 +.word 0x0caa1761 +.word 0x547f8888 +.word 0x25873402 +.word 0x96fead7e +.word 0xfcc8734d +.word 0x7e13db12 +.word 0xd4024d10 +.word 0x10c59df5 +.word 0x6bc91166 +.word 0xf74e5832 +.word 0xf6b08d3d +.word 0x3f66fecc +.word 0x29517ee1 +.word 0x44a97053 +.word 0xef2ae134 +.word 0x1eabd454 +.word 0x42ced739 +.word 0x5070018f +.word 0x72c56c0d +.word 0xc87a0ddf +.word 0x841e244f +.word 0xcb513628 +.word 0x7a36c7b1 +.word 0xd33ffaf8 +.word 0x5a5eef12 +.word 0x9a65d4b1 +.word 0x5fb2efa2 +.word 0x69a9d7fe +.word 0x2df9bc19 +.word 0xdbcd8381 +.word 0x59545e4d +.word 0xf0c8bda1 +.word 0xa7667012 +.word 0x1b2d499b +.word 0xe4adfa33 +.word 0xd8b1fac8 +.word 0x989bfdb7 +.word 0x4470b195 +.word 0xd9643e3c +.word 0x498647b8 +.word 0xe876073c +.word 0xe041bfb8 +.word 0x133252a3 +.word 0x577f0fae +.word 0xfb785556 +.word 0xcd2a0699 +.word 0x3bcde3bc +.word 0x6b944293 +.word 0xe61f9688 +.word 0x03ba25d9 +.word 0x2654d9a5 +.word 0xb58556d3 +.word 0x633ad7bd +.word 0xa5945e0d +.word 0x6a4fe974 +.word 0x7ff99467 +.word 0xa9994176 +.word 0xbc1c848a +.word 0x1d2b5cd8 +.word 0x95c415dd +.word 0xf9f5df48 +.word 0xf5567657 +.word 0x160f47fa +.word 0x86475c7b +.word 0x3391a53e +.word 0xfd9270ea +.word 0x43e31ab9 +.word 0xe7ac6d7a +.word 0x67095749 +.word 0xeba4bd57 +.word 0x15797151 +.word 0x86f64eb0 +.word 0x98f079a1 +.word 0x69cd886b +.word 0x4ad3eb96 +.word 0xd2f2389e +.word 0x17e739bf +.word 0xd60d288e +.word 0xe2aa330a +.word 0xd2db92f6 +.word 0xa4237cbc +.word 0x68f0a2e0 +.word 0x788e479e +.word 0x3eabef0e +.word 0x43a552bc +.word 0x860d84c1 +.word 0x0da41a35 +.word 0x0026e039 +.word 0xab335155 +.word 0xf6aca060 +.word 0xb52001c9 +.word 0x15492805 +.word 0x1ccb423d +.word 0x0fce24cc +.word 0x97c774b9 +.word 0xc04f16ef +.word 0x75423eea +.word 0x0cdd7e75 +.word 0xf0e1bb8b +.word 0xc7c4a5f6 +.word 0x2cd07209 +.word 0xdc911241 +.word 0xec74ef3d +.word 0x4c82706f +.word 0x8f29cf93 +.word 0x01850278 +.word 0x59896384 +.word 0x338d7790 +.word 0xf00d884e +.word 0xbb2a582b +.word 0x40112fca +.word 0xbdd0a171 +.word 0x1f9e69c2 +.word 0x1068b1d9 +.word 0x69bfeb97 +.word 0xd34125b4 +.word 0xecf08dce +.word 0x4cea4c42 +.word 0x48afb867 +.word 0x70f0fe9b +.word 0x640c7725 +.word 0xb1825b3e +.word 0x7916da60 +.word 0x3e6d915e +.word 0x4704dede +.word 0x8eaa5a23 +.word 0x1349effd +.word 0x2cbee38d +.word 0x3096aec8 +.word 0x326daf3e +.word 0x0aa1f303 +.word 0x86d604ec +.word 0xa0d3af8b +.word 0x4b24865e +.word 0xf0508d0c +.word 0x4d824bd5 +.word 0x7f403d64 +.word 0xa4cc48c6 +.word 0xa3482666 +.word 0xef11b335 +.word 0x0bdcdd7b +.word 0x15250dd0 +.word 0x117cb967 +.word 0x1a80d8d1 +.word 0x5f23590d +.word 0x8bb6ae83 +.word 0xc4c1c6a2 +.word 0xdbc59aac +.word 0x97cfd726 +.word 0x8880523a +.word 0x72a667aa +.word 0x36da1e31 +.word 0x373d0383 +.word 0x5b2ea4c4 +.word 0x1e5e3f25 +.word 0xa012e6b9 +.word 0x3f27ccdf +.word 0xf7283574 +.word 0x54d3b35c +.word 0xc214adb6 +.word 0x43470234 +.word 0x3a463a1e +.word 0x7015dceb +.word 0x89324472 +.word 0xf7f48f44 +.word 0x2b970a49 +.word 0x06d49231 +.word 0x156e5111 +.word 0xdb4bbd73 +.word 0x11a1f875 +.word 0xf04b7932 +.word 0x2ea53e0a +.word 0xe966c084 +.word 0x58bea819 +.word 0xe8755def +.word 0x74a5fefb +.word 0x5e58b45f +.word 0x02a859dd +.word 0x66291b07 +.word 0x743e09ab +.word 0xee92d6dd +.word 0x8470a498 +.word 0xd8a5604a +.word 0x72e8b909 +.word 0xa061b5de +.word 0x9b54e38d +.word 0x1f74ad26 +.word 0x96b41350 +.word 0xb653d464 +.word 0x6a9ac0ab +.word 0x2ed6d0e0 +.word 0x2a20a7dc +.word 0x6b752183 +.word 0xf479b740 +.word 0x7682f7b8 +.word 0x3d4cd38b +.word 0x7c07f450 +.word 0xbe57265d +.word 0xd9c8ad1b +.word 0x1f9c03de +.word 0x76f912d0 +.word 0x0d4e3b24 +.word 0x4f5916f9 +.word 0x75892e85 +.word 0x2f3bc8d1 +.word 0x2134d2bc +.word 0xcb78961e +.word 0x36d80ab5 +.word 0xc1f423d0 +.word 0x23a9753d +.word 0x2a3fbd62 +.word 0x316961eb +.word 0xcf9840e0 +.word 0x16cc23dd +.word 0x36d8c06d +.word 0x9c719cab +.word 0x716a6bbc +.word 0xe1cc4fbd +.word 0x4a8588af +.word 0x0bf4c522 +.word 0xb4ee5e78 +.word 0x68053df0 +.word 0x86b4eeeb +.word 0x30ab072a +.word 0xef5bc771 +.word 0xc7a4e48f +.word 0x3f5284b8 +.word 0x5cf319a7 +.word 0x1fb7b7c3 +.word 0xf95cee11 +.word 0x22400487 +.word 0x67a212ad +.word 0x357d9f05 +.word 0x7b65cf89 +.word 0x9b43f687 +.word 0x41823d95 +.word 0x951b37e4 +.word 0xab42c541 +.word 0x3b880eb2 +.word 0xfaf78854 +.word 0x62503c1b +.word 0x90f81ee6 +.word 0xf4d13c88 +.word 0x4ed2cf04 +.word 0x0081012f +.word 0x3ee5a218 +.word 0x19436696 +.word 0x164a697e +.word 0xe8650de0 +.word 0xa4950e55 +.word 0x2be6bc8f +.word 0x62bb3988 +.word 0x5f56fc03 +.word 0x1d98ce88 +.word 0x43796c81 +.word 0x04bdc0ff +.word 0xed209acd +.word 0x73f2a4ce +.word 0x86bd87af +.word 0xd4ffd5e2 +.word 0x9036e1f0 +.word 0x78bb1a1e +.word 0xb8bef034 +.word 0x873f7d2c +.word 0x5447d871 +.word 0xc3074b38 +.word 0x175a5547 +.word 0x947f5169 +.word 0x2964d01b +.word 0x829b4dfc +.word 0x2e077db7 +.word 0x8634b89a +.word 0x594ae79f +.word 0xafb0da11 +.word 0x51cdf186 +.word 0x1ac4e292 +.word 0x9a6c3cfd +.word 0x68b26553 +.word 0xba7a5d22 +.word 0xa3159e96 +.word 0x040cad97 +.word 0x96cb7d03 +.word 0x04df011f +.word 0xe8894931 +.word 0x92918b7f +.word 0x94265d6d +.word 0x5c93f0b0 +.word 0x0cdb6ae8 +.word 0x4e48d9a3 +.word 0x4bc230b3 +.word 0x2c8ec2a5 +.word 0xf9cf9040 +.word 0x42004c0c +.word 0x823a5b1b +.word 0x3cac1567 +.word 0xd8049161 +.word 0x1a8f6882 +.word 0xf9242073 +.word 0x2a6406da +.word 0x420a69f4 +.word 0x713d62e5 +.word 0x4ffe10f9 +.word 0x161b9a90 +.word 0xcab459ae +.word 0x0d9b66b4 +.word 0x496f4a75 +.word 0x03603f2b +.word 0x0cf0462a +.word 0x602b63ee +.word 0x8fc15bf3 +.word 0x00a192ec +.word 0x7248e8e6 +.word 0x5936a4fa +.word 0xf9e55fe0 +.word 0xf956da5e +.word 0x981bd0e1 +.word 0xb6002686 +.word 0x0a58b03c +.word 0x8a85bfa0 +.word 0xe5faac64 +.word 0xde71a968 +.word 0xb6648a85 +.word 0xc3d47f7e +.word 0xf10e8ead +.word 0x97bfc90c +.word 0x2c9bfdae +.word 0xae78a34a +.word 0x3de48acb +.word 0xe3c23c2a +.word 0x3547756d +.word 0xdca26995 +.word 0xa73d86dd +.word 0xa7032c4c +.word 0x36be27b7 +.word 0x77d19f36 +.word 0x85b50d1a +.word 0xfd351ec7 +.word 0xb2cf0a46 +.word 0xbf05a842 +.word 0xfdaa00cc +.word 0x6eadfc97 +.word 0xa0da085f +.word 0x8dc39394 +.word 0x6e808b1a +.word 0x517f4b3d +.word 0x5a2d0649 +.word 0x1603cf73 +.word 0xf147f8ff +.word 0x403a40aa +.word 0xd852efa4 +.word 0x5970d7d5 +.word 0x53b016a9 +.word 0x0a5f4692 +.word 0x7eb554de +.word 0x35b7f4d3 +.word 0x5ecd8282 +.word 0xc4e15c6c +.word 0xf0242619 +.word 0x0f7f3d8d +.word 0xb6f6c530 +.word 0xe4713e80 +.word 0xda101668 +.word 0xd0d25096 +.word 0xc6c0859b +.word 0x7f10a058 +.word 0x0c72a054 +.word 0x3306dbbf +.word 0xcc5f9c16 +.word 0x6419448b +.word 0x7991d249 +.word 0xb1f3aad1 +.word 0x679ef1b5 +.word 0x4391fe5f +.word 0x497843d8 +.word 0xec684bda +.word 0x74d70a2a +.word 0xbeff989c +.word 0xaee7af6d +.word 0x58ddc702 +.word 0x67288065 +.word 0x8085b92e +.word 0x84b2109d +.word 0x982315b3 +.word 0x35f5b05d +.word 0x7106f23b +.word 0xbeb723ee +.word 0x46ad687d +.word 0x6eca604a +.word 0xc4fd011b +.word 0xa74b6ff5 +.word 0x948a1843 +.word 0x18bb6e4e +.word 0xacf6785e +.word 0xbed93905 +.word 0x1de8c5e7 +.word 0x2dc43f90 +.word 0xe50b4b87 +.word 0x75ad95d8 +.word 0xcc786a1f +.word 0x105c23f3 +.word 0xe5328686 +.word 0x97b0ecc2 +.word 0x39d0f8b6 +.word 0xb11a9c90 +.word 0x85c2c5b7 +.word 0x3b660da4 +.word 0xfde10354 +.word 0x07fd7d92 +.word 0x5390d710 +.word 0xd83bc6e9 +.word 0xe1efd28f +.word 0x2e098e95 +.word 0xf4d3089f +.word 0x18e2cf40 +.word 0x5a9c5f74 +.word 0xcb55ad08 +.word 0x24dceede +.word 0x58dd28ff +.word 0x676ac983 +.word 0x81aa9d79 +.word 0x60694252 +.word 0x40dede2e +.word 0x74ccfbf0 +.word 0x7345812b +.word 0xa5b3d3dc +.word 0x1d2f3ac6 +.word 0x0991a6f2 +.word 0xc59aa322 +.word 0xa1805b8a +.word 0xb54b02b3 +.word 0xa4a7317d +.word 0x0f64eefb +.word 0x23ade89e +.word 0xeb283422 +.word 0x848a570d +.word 0x5a7550ad +.word 0xc08992e4 +.word 0x39172df6 +.word 0xf7bcdc27 +.word 0xb281a1b4 +.word 0x3c09c0d1 +.word 0xc12f264a +.word 0x8299c5c0 +.word 0x4706b49a +.word 0x2388831d +.word 0x29b8571b +.word 0x85042ea6 +.word 0x6e0ec5f8 +.word 0xea8935fd +.word 0x569e1b0b +.word 0x93ea3bfb +.word 0xda9e9772 +.word 0xc4d796dc +.word 0xa7aa7e04 +.word 0xe1b8a96f +.word 0xa6b85eba +.word 0xd48c4675 +.word 0xac8b6c81 +.word 0x355fc67b +.word 0x9ba89bf1 +.word 0xbe5b2c5b +.word 0xb0a5b4ff +.word 0x6d7ba104 +.word 0x069826d9 +.word 0x9544ad87 +.word 0xd0435322 +.word 0xe28fbf7b +.word 0x9a2f6ead +.word 0x7d2a5eb7 +.word 0x384ef7b9 +.word 0x319f2e06 +.word 0xd06c6854 +.word 0x06f9939c +.word 0x6ff9298b +.word 0x49b55d88 +.word 0x66e5b22c +.word 0xfecc41a0 +.word 0x1115eee3 +.word 0xbc26fa37 +.word 0xb9feaba1 +.word 0x0e754c7c +.word 0x33233ae7 +.word 0x48a5bf82 +.word 0x2c5c232a +.word 0x62fbeca0 +.word 0xce675d88 +.word 0xfb65c553 +.word 0x908d4224 +.word 0x731abb79 +.word 0x97f2bb05 +.word 0x4f25b5c9 +.word 0x8e08c663 +.word 0x4de3bd88 +.word 0x7f288966 +.word 0x6faa5bb2 +.word 0x8e1be534 +.word 0x91701f62 +.word 0x9b746dc7 +.word 0x690b59fd +.word 0x5ab4d3ab +.word 0x65006057 +.word 0x8666e1c8 +.word 0x0cbb6445 +.word 0xa4028e75 +.word 0xa5fb07bf +.word 0x36c2e0b6 +.word 0xe6dfae48 +.word 0xab1cd2b6 +.word 0xd7b6a195 +.word 0x6da02457 +.word 0xf48a4211 +.word 0x41198936 +.word 0x887cf450 +.word 0x88cc8f91 +.word 0x4d97816b +.word 0x7a1562d4 +.word 0xf34474b6 +.word 0x04e462f3 +.word 0xbd7cc332 +.word 0x27e1e540 +.word 0x89e3a7a6 +.word 0xb34bf6af +.word 0x8437abc0 +.word 0xd4504849 +.word 0xcc50d939 +.word 0x065137c5 +.word 0x3d059b67 +.word 0xbbc2deee +.word 0xb4949941 +.word 0x82df5f60 +.word 0x0c3d3a43 +.word 0x2e3c6a0c +.word 0x5199bbf0 +.word 0x84450da4 +.word 0xba29a179 +.word 0x402afaac +.word 0xa5431db3 +.word 0xa4931e31 +.word 0x5f33637e +.word 0xdac3770f +.word 0x3a5d4f79 +.word 0xc5fdc38c +.word 0x3c45a67d +.word 0xc333f694 +.word 0x732eace5 +.word 0x53bb713b +.word 0xd5616c31 +.word 0x60340ca5 +.word 0xc88d5099 +.word 0x7eed6fee +.word 0x108989f8 +.word 0x4d69aa29 +.word 0x38ae3000 +.word 0x221d193b +.word 0x043657e9 +.word 0x957333ec +.word 0x7fde6766 +.word 0xb0597b39 +.word 0x5ce63119 +.word 0x0792082a +.word 0xdbbff454 +.word 0xbf7f0b6e +.word 0xd6b8a916 +.word 0x6e35ac51 +.word 0x41e769af +.word 0xeeb95efd +.word 0x1493dca1 +.word 0x8c4daa13 +.word 0x1e214eb7 +.word 0x4d476223 +.word 0xef4b5b46 +.word 0xe1d14cdb +.word 0x81961d24 +.word 0x1491122e +.word 0x835be438 +.word 0xe7c50206 +.word 0xdb77d919 +.word 0x0fe9f761 +.word 0x427f1424 +.word 0x7cf9c7b1 +.word 0x0e06f3d5 +.word 0x609289ae +.word 0x90ed8c45 +.word 0x437ac5cd +.word 0xc2d6578c +.word 0xf357761d +.word 0x44165002 +.word 0x83c0ac3b +.word 0xb74df65c +.word 0x2a13db4c +.word 0x857cf0df +.word 0x922ad2b4 +.word 0xd5e582a4 +.word 0x94c334bb +.word 0xe2206331 +.word 0xb784244a +.word 0x230f0c91 +.word 0xc2233833 +.word 0x7e649b01 +.word 0x8ebd736c +.word 0x7c2086fd +.word 0x948d40c9 +.word 0x6a46138f +.word 0x6c9d19c5 +.word 0xdcf1c764 +.word 0x33fb543b +.word 0x5deea359 +.word 0x5e65288f +.word 0x00d23169 +.word 0x1779bd9c +.word 0x7737a6a9 +.word 0xfd5f172d +.word 0x90230989 +.word 0x3f2f1089 +.word 0x0a44f8ac +.word 0x48652f65 +.word 0xf2f1d041 +.word 0x4daa7619 +.word 0xd832f345 +.word 0x9b279241 +.word 0x187a6ed4 +.word 0xe8f31b0a +.word 0x71d44a0d +.word 0x0913ba07 +.word 0xe3269438 +.word 0x9e28fe68 +.word 0x175318ef +.word 0x67692ede +.word 0x6d346cf9 +.word 0x37a7ea8a +.word 0x9f262511 +.word 0xdaaed3b4 +.word 0xa91aa701 +.word 0x31cecb1b +.word 0xfa34b305 +.word 0x9e337a57 +.word 0x281da0b6 +.word 0xd9283c46 +.word 0xf0505719 +.word 0xd4706898 +.word 0xfbc2f0eb +.word 0x88677a7c +.word 0x0ebf50a7 +.word 0xe8eb4ac6 +.word 0xad110f77 +.word 0xfe8c5b9c +.word 0xfdb9bd58 +.word 0xaa971af9 +.word 0x1aa2350c +.word 0xe484fb1f +.word 0x15b7eae4 +.word 0x6a12d89a +.word 0x6ca0044c +.word 0x2a14ab41 +.word 0x528470cb +.word 0xb8ef0a88 +.word 0x266eaf56 +.word 0xad295b02 +.word 0x32fc91b8 +.word 0x248049e1 +.word 0xed834770 +.word 0x3f1bb8fa +.word 0x0164d12c +.word 0x9e4e8683 +.word 0x847bb887 +.word 0x90321242 +.word 0xf682b8a8 +.word 0x4a550b1f +.word 0x8f94bbbb +.word 0xd00b339a +.word 0x351df2a6 +.word 0x9d2c9c8b +.word 0x4e32c5b7 +.word 0xf299076b +.word 0x0b529b97 +.word 0x3183aa1a +.word 0xbc547f6c +.word 0x16d4e8cd +.word 0xa841268e +.word 0x57e4bea8 +.word 0xa63d4c55 +.word 0xa43afbaf +.word 0xb3b1ce03 +.word 0xeecdbd17 +.word 0x2b5a0769 +.word 0x0ea88c53 +.word 0x4ee970eb +.word 0x0c2b6bb3 +.word 0x5faa88a0 +.word 0xfa73d103 +.word 0x381573e7 +.word 0x603e827c +.word 0x09654a2f +.word 0xb7602278 +.word 0x6b00c5b7 +.word 0x8717ba71 +.word 0xef31bd03 +.word 0x46524220 +.word 0xa060bbcf +.word 0x3ea09180 +.word 0xeeb48fbe +.word 0xfcc7e8ec +.word 0x5df0d64f +.word 0xef710879 +.word 0x2c99954f +.word 0x0a91d92e +.word 0x65522b11 +.word 0x500bc7f6 +.word 0x334bc974 +.word 0x50523153 +.word 0x387307f3 +.word 0x5783e5c0 +.word 0xb54ae8a7 +.word 0x3a783e29 +.word 0x93c4ddec +.word 0xd8c11839 +.word 0x82193a0f +.word 0x190ba377 +.word 0x3f47385e +.word 0x1ff9ee6c +.word 0x49040df1 +.word 0xb8d859dd +.word 0xb20755cb +.word 0x7401a1bb +.word 0x0bf55a64 +.word 0x92c94776 +.word 0xf2c0aeff +.word 0x72cf4742 +.word 0x8c986f6b +.word 0x8cf79499 +.word 0x761fe88c +.word 0xf26bf1c4 +.word 0x11d337e8 +.word 0x6c844337 +.word 0xefaa6319 +.word 0x19c35ee2 +.word 0xed0d2817 +.word 0x8ec3ed60 +.word 0x72b98e27 +.word 0xeac1560c +.word 0xf7db8794 +.word 0x248927c6 +.word 0x3ae01f03 +.word 0x0fa38ae4 +.word 0x575f2547 +.word 0x8b013239 +.word 0x590f1f64 +.word 0xa671923f +.word 0x06c851f7 +.word 0x082b7367 +.word 0x71ed1a0c +.word 0x4fc08b87 +.word 0x6a550536 +.word 0xa33cc1b0 +.word 0x913d06f6 +.word 0x0bd84cb4 +.word 0x13b9d0b8 +.word 0x05b29add +.word 0xc0675c66 +.word 0xf0e05794 +.word 0xd650d71b +.word 0x730f4a74 +.word 0xc51078d1 +.word 0x94046532 +.word 0x1350fd6a +.word 0x140b9cf7 +.word 0xc23412d7 +.word 0x848268af +.word 0xa5577892 +.word 0x623f9a45 +.word 0x4697f379 +.word 0x37e5c378 +.word 0x80b3022b +.word 0x7754d6c7 +.word 0x8b986b73 +.word 0x79316b08 +.word 0xbd62b19b +.word 0x15c207a1 +.word 0xe5443e02 +.word 0x320dc64b +.word 0x6953dc9a +.word 0x445c61da +.word 0x029df369 +.word 0x108eb693 +.word 0x0045cf57 +.word 0x800e637f +.word 0x227f421b +.word 0xa45e8708 +.word 0x91da4d59 +.word 0xe0f0036d +.word 0x3d5e602b +.word 0x495444d2 +.word 0xb4292238 +.word 0xca5cef39 +.word 0xd4e4273d +.word 0xeab4585a +.word 0xd9a4a9b9 +.word 0x02a7e31a +.word 0x80a8ac5d +.word 0xab08f0e2 +.word 0xea08efb7 +.word 0x774e837f +.word 0x4ac4b81c +.word 0x137b9364 +.word 0x333497a6 +.word 0x1ae5c2dc +.word 0x7471ecf1 +.word 0x23c65cf3 +.word 0xd679413e +.word 0x256b0bb7 +.word 0x9c4abe85 +.word 0x4d3bd3fb +.word 0x4b533667 +.word 0x308c79fb +.word 0x6c8a2657 +.word 0xc8efa8ff +.word 0x88e71274 +.word 0x7cb96dde +.word 0x37f11989 +.word 0x511497e1 +.word 0xd775ab9f +.word 0x1363eff1 +.word 0xa609b8f3 +.word 0xcb82bae6 +.word 0x89d83c10 +.word 0x56178aa5 +.word 0x3b0693db +.word 0xb0459ffd +.word 0xa6543bc6 +.word 0x2a25726c +.word 0x545f404b +.word 0xd04bcc33 +.word 0x0d1cd0ae +.word 0xe3ea3454 +.word 0x9cf3562a +.word 0x34323b5c +.word 0xee2d52ad +.word 0x56c6d00b +.word 0xa3c7f907 +.word 0x782db7b5 +.word 0x22e94908 +.word 0x58860aa5 +.word 0x261bc99e +.word 0xb6e6dfac +.word 0xf106dc79 +.word 0x0f13edb9 +.word 0x33646360 +.word 0x70b71028 +.word 0x92427f7d +.word 0x6b77782a +.word 0xac1ed0c6 +.word 0xfd9bf013 +.word 0x2043685b +.word 0x2994000c +.word 0x7b6be82c +.word 0xa4fef6aa +.word 0xc19d3bb8 +.word 0x7fe6a492 +.word 0xe2100e3e +.word 0xfd14b90f +.word 0xe4d68b15 +.word 0x5fee15fa +.word 0xfc611a34 +.word 0x93524443 +.word 0xcb05764a +.word 0xd10052b4 +.word 0x04b7b07d +.word 0xff8a286f +.word 0xcd5ed522 +.word 0xa836f9fc +.word 0xb29749d0 +.word 0x5d8debee +.word 0x8e1ac0e4 +.word 0x5e0e7a1d +.word 0x4b8aa46a +.word 0x6a04d1fa +.word 0x6681ffb2 +.word 0xcfc38269 +.word 0x6ffebcf4 +.word 0x246db0a8 +.word 0xc314b19f +.word 0xb54fa0bf +.word 0xea07bcd7 +.word 0xa9d6feec +.word 0x00822bac +.word 0x1f57ae73 +.word 0xf16cbffd +.word 0xaa4a708e +.word 0x6d5c27db +.word 0xe2acbdfd +.word 0x1571b960 +.word 0xd30f8017 +.word 0x36952097 +.word 0x06b20e7e +.word 0xd68f45c1 +.word 0xd9f8d24a +.word 0x01ff6279 +.word 0xae40229e +.word 0xf3b3e7c7 +.word 0xe02da9b9 +.word 0x90a68d83 +.word 0xd6d6ebdb +.word 0xce87228f +.word 0x85afc2e7 +.word 0xe7fe9a44 +.word 0x2d87129b +.word 0x32b8f4bc +.word 0x623bda32 +.word 0xde4ef48c +.word 0x1aa1c45c +.word 0x4f0717e9 +.word 0x7e5cb5e7 +.word 0xfa83acb9 +.word 0x83ede592 +.word 0xfaf43c9c +.word 0x18a8592b +.word 0x5e756a6b +.word 0x2277f1c8 +.word 0x2c2b7529 +.word 0xdfe92440 +.word 0x571ad048 +.word 0x73234c37 +.word 0x7ca40ca9 +.word 0x06b6d642 +.word 0xfac3aff0 +.word 0x9d7e0639 +.word 0xef06a4cc +.word 0x220566d8 +.word 0x9de5f0fc +.word 0xc89ebfc5 +.word 0xbc964163 +.word 0x6867424e +.word 0xcf9da334 +.word 0xe802eec4 +.word 0xafad4aab +.word 0xc06a96a1 +.word 0x30473cbd +.word 0x99205499 +.word 0xab99fe8c +.word 0x33f75db3 +.word 0xb5c6feed +.word 0x1eb38e81 +.word 0xc102ae79 +.word 0x63b825fb +.word 0x03aa1a7c +.word 0x5216a787 +.word 0xc555b8c8 +.word 0x62f865f2 +.word 0x833b663c +.word 0x753fcaa0 +.word 0x0fe7c6f2 +.word 0x796f4a73 +.word 0x725efb97 +.word 0xbd3c6bb6 +.word 0x3dc4be70 +.word 0x06549ad0 +.word 0xd2d28ab6 +.word 0xb7ed75cf +.word 0x05411ee3 +.word 0x30ae2e3f +.word 0xce3bafbb +.word 0x52c4e10f +.word 0x4e9444de +.word 0x98fa18ef +.word 0xe38bf1ac +.word 0xaacd1b8d +.word 0x0743c4e8 +.word 0x6752e12a +.word 0xfb72962d +.word 0xa3bad325 +.word 0x987910a4 +.word 0xad25d61a +.word 0xbb4cd1a2 +.word 0x096f3b0e +.word 0xdbe58243 +.word 0x2f7d48a3 +.word 0x7564e60c +.word 0x3c83e37a +.word 0x05fcff7a +.word 0x28ddc056 +.word 0x7a99ebb5 +.word 0xb8a9dac7 +.word 0x657e2f0a +.word 0x6bfbd917 +.word 0xd82aa7ae +.word 0x9cf29ef2 +.word 0xa9fd3437 +.word 0x99b57f5d +.word 0x44acba20 +.word 0xf268978a +.word 0x4d1e38ab +.word 0x35aa3964 +.word 0xe80810cf +.word 0x730e10ab +.word 0xbf8d8497 +.word 0x7fac2c4b +.word 0x392fd77a +.word 0x622268f9 +.word 0x5a0988aa +.word 0x6f3ad9a2 +.word 0x67c52592 +.word 0x0260fe6d +.word 0x32b0120c +.word 0xb214c27c +.word 0x7e7309ca +.word 0x3ebfdee9 +.word 0xc4dace7f +.word 0x3b6bbe37 +.word 0xe34f9e71 +.word 0xfbac9258 +.word 0x8f888e9f +.word 0x6bf3c141 +.word 0xe451711d +.word 0xa3fd2c03 +.word 0x0fca6086 +.word 0x8bfbd0ae +.word 0xd91a9174 +.word 0xc0cf6378 +.word 0xc9e07e95 +.word 0x45751b2c +.word 0xe53a0b5f +.word 0xc22c7a53 +.word 0x5cfda5fa +.word 0xcbb11916 +.word 0x6b7a1f5a +.word 0x37bab3b3 +.word 0x9c125336 +.word 0xcecfc562 +.word 0xc45e3590 +.word 0xccd7148e +.word 0xf7fde30e +.word 0xc69e9581 +.word 0xf2bf5d07 +.word 0x6df65308 +.word 0x4d6a7dca +.word 0x5665e3d5 +.word 0x5bb5a759 +.word 0x613b096b +.word 0x79b13904 +.word 0x1534c3ce +.word 0x8efa146a +.word 0x970c78d4 +.word 0x586f22b3 +.word 0x42257ac3 +.word 0xfc30f2e2 +.word 0xcada5f7e +.word 0xcdf48e52 +.word 0xb481950f +.word 0x132736c3 +.word 0x4b9a298c +.word 0xb92541c2 +.word 0xc8a22b57 +.word 0x2bdfdf09 +.word 0x99106b26 +.word 0xbf3aa679 +.word 0xd52cd19c +.word 0x1cb4fc70 +.word 0xc594e177 +.word 0x92c240a6 +.word 0xf5229ff2 +.word 0x0c28902d +.word 0xbae7a4e3 +.word 0xf26c252f +.word 0xd202e1c4 +.word 0x3c749a7c +.word 0x6e19fcb4 +.word 0xf67173ea +.word 0x92bd06fb +.word 0x7506d5a9 +.word 0x6494d441 +.word 0x7d04433f +.word 0x14956971 +.word 0x5eb52e22 +.word 0xe4401ffe +.word 0xdcc9cbaa +.word 0x2e79efd8 +.word 0xae245dbd +.word 0xe7102460 +.word 0x327707f9 +.word 0x546c725d +.word 0x8eecb812 +.word 0x47071a7b +.word 0xac290fad +.word 0xc601aefe +.word 0x60c04ae1 +.word 0xd99e22c4 +.word 0xfe593108 +.word 0x343dc7f6 +.word 0xada264d3 +.word 0x1d1580a7 +.word 0xb4795cb6 +.word 0x0d1b8c52 +.word 0x5ecd95db +.word 0xbff4d42c +.word 0xa73f7193 +.word 0x66618392 +.word 0x29251415 +.word 0xcec51cf4 +.word 0x91c268fd +.word 0x36903ec1 +.word 0xda8f2d15 +.word 0xbb126380 +.word 0xacb4cdaf +.word 0x6d903be9 +.word 0xbd559ed4 +.word 0x20a65f9a +.word 0x3a616b69 +.word 0xab9e42c6 +.word 0x6f78cea3 +.word 0x4b7424d1 +.word 0x0268430c +.word 0x33700c8b +.word 0xc3c2f15b +.word 0x0c5abc79 +.word 0x9e639382 +.word 0x646503a0 +.word 0x65d7a161 +.word 0x5b91f8de +.word 0xf1027786 +.word 0xf731497f +.word 0x7b8980f4 +.word 0xcec1c75a +.word 0x83c67904 +.word 0xd32dc62d +.word 0xf69b868e +.word 0x52d75651 +.word 0x9673d26f +.word 0x4a42aa6d +.word 0xb8d25c5a +.word 0x3f7a6f5b +.word 0xd82b29a5 +.word 0xf013fac0 +.word 0x2871d094 +.word 0xab1a95f4 +.word 0x0ba1b163 +.word 0x06177728 +.word 0x161e60b0 +.word 0x7bafe49d +.word 0xd92bd44e +.word 0x1588923b +.word 0xe6a46434 +.word 0x7011abb8 +.word 0x34612b02 +.word 0xa89477ad +.word 0xccfaf167 +.word 0x76d2c23e +.word 0x75794b1a +.word 0xdaa8d179 +.word 0xe708b3d7 +.word 0x2287bc39 +.word 0x9e7e01cc +.word 0xf4a8436d +.word 0xe44b90fb +.word 0x21d7ce4e +.word 0xf6fc89b0 +.word 0xa9659abf +.word 0xe9556466 +.word 0x61f61b54 +.word 0xfee18817 +.word 0xc278ac78 +.word 0x39b3422d +.word 0x88864b2c +.word 0x09fc3b26 +.word 0xb7de9b63 +.word 0x94f4be1a +.word 0x48ef35e0 +.word 0x909807f9 +.word 0xe655905b +.word 0x3bbcd005 +.word 0x7209c0a1 +.word 0x4e743cde +.word 0xd3ade2b8 +.word 0x30ed78d1 +.word 0xf9c38c57 +.word 0xa77c2f9b +.word 0xff36e523 +.word 0x43c01aaf +.word 0x5bca49e3 +.word 0x3ec2df3c +.word 0xbf3797d2 +.word 0x155c19d2 +.word 0x177cbe6c +.word 0xd7dbf888 +.word 0xce8efc3f +.word 0xdf42a4de +.word 0xa163c785 +.word 0x3f8e8ca2 +.word 0x41cc455e +.word 0xcfeb9e15 +.word 0x2f91e76c +.word 0x37a0916c +.word 0xcf382771 +.word 0xdaa8946c +.word 0x3dcf49a7 +.word 0x362627d0 +.word 0xf87e1b8b +.word 0x3b6dbe5c +.word 0xaa992d31 +.word 0xefd51e32 +.word 0x14f4ce17 +.word 0x2a4ad632 +.word 0x8de1ce20 +.word 0x33d3635b +.word 0xfdb7ae68 +.word 0x7f5254d7 +.word 0xeca66d25 +.word 0xb2a092bc +.word 0x4508ffbb +.word 0x3c7324e0 +.word 0x86badf74 +.word 0x746ab27a +.word 0xeff448c5 +.word 0x43704b0d +.word 0x4f3f633d +.word 0x5365643e +.word 0xc18b7696 +.word 0xb260d830 +.word 0x975c1457 +.word 0x2eaf288d +.word 0x9fffda67 +.word 0x8ebf2fe6 +.word 0xce126d89 +.word 0x596167b4 +.word 0x4ff57679 +.word 0xd5c0090b +.word 0x0246907d +.word 0xebe03b1f +.word 0xc566ff98 +.word 0xc774ce72 +.word 0x72127843 +.word 0x479c2494 +.word 0x4f900758 +.word 0x9a36d660 +.word 0x25e9d459 +.word 0xee92804c +.word 0xe06a1a57 +.word 0x5efb29a3 +.word 0xcf8b354c +.word 0xdb9def96 +.word 0xe10b1c03 +.word 0xf474a1be +.word 0x00de9d99 +.word 0xd528b3d7 +.word 0xd896c805 +.word 0xf11efda2 +.word 0xb122b99f +.word 0x2f81faf7 +.word 0xa0a6b304 +.word 0x96cf4f5a +.word 0x3c99343c +.word 0x2b672ec1 +.word 0xcfa43172 +.word 0xab3b7699 +.word 0x2872f037 +.word 0x69af0f36 +.word 0x5607fffc +.word 0xfd4dea0b +.word 0xa7ec8ca6 +.word 0x44f0ecf3 +.word 0x468f5aa0 +.word 0xe5ef27ff +.word 0x90cec730 +.word 0x8fdd17ac +.word 0x89c9a15e +.word 0x31dc1e04 +.word 0x062effb7 +.word 0x854cb67d +.word 0x3821fe4f +.word 0xe39df37f +.word 0x7ad2440e +.word 0x5becb2a2 +.word 0xec967795 +.word 0xa824201b +.word 0xcd9423f4 +.word 0xc33537f8 +.word 0xb2348d39 +.word 0xce2922bc +.word 0x5d2b3911 +.word 0x88507eca +.word 0x48e362fa +.word 0xd7bfe78b +.word 0x68e476d8 +.word 0x6418edda +.word 0xad20da6a +.word 0x0c937ff4 +.word 0x05cb1e82 +.word 0xe066be60 +.word 0x2aea7cc0 +.word 0x994afb52 +.word 0x65f6b5d6 +.word 0x76494f88 +.word 0x3d33e4d0 +.word 0xa3494c2b +.word 0x0a37a549 +.word 0x3d0c82ec +.word 0xceb44359 +.word 0xb7c274b4 +.word 0x8f8d5442 +.word 0x426499dc +.word 0x01da605e +.word 0x20c6c3c7 +.word 0xf2801afd +.word 0xf83067d0 +.word 0x5c95638d +.word 0xab1ad5a0 +.word 0x6f38ff7c +.word 0xd454fd78 +.word 0x6cd2d685 +.word 0xdd985d34 +.word 0x080ae905 +.word 0xc8bfb478 +.word 0x6265f66f +.word 0xfa2bde80 +.word 0x35351324 +.word 0x2143ab92 +.word 0x998e2f82 +.word 0x7a849713 +.word 0x2e395500 +.word 0x26cbe049 +.word 0x65ae6fd1 +.word 0xc78dc98b +.word 0x90c40fc4 +.word 0xadc4d6d9 +.word 0x3043fe5f +.word 0x9a3f6b7a +.word 0x034d6b6c +.word 0x00e1b131 +.word 0x0c3db18d +.word 0x1cd1330e +.word 0xdfca840a +.word 0xeed279b6 +.word 0x8aad2dd3 +.word 0x4f9c0f36 +.word 0x62c727d3 +.word 0xc5ebebc4 +.word 0x9c0e575a +.word 0x7847aaba +.word 0xa56b43c7 +.word 0x86b43d27 +.word 0xf24f740a +.word 0x2e3ec461 +.word 0xc12dc8ad +.word 0x0ff42ea4 +.word 0xeacd5e8a +.word 0xd2918577 +.word 0xeceef544 +.word 0x2d580699 +.word 0xb5d03040 +.word 0x4f41a419 +.word 0x737c219f +.word 0xb09b5e48 +.word 0x663bb298 +.word 0xf82f064c +.word 0x166f186a +.word 0x5f5a9f7e +.word 0x24e223e7 +.word 0xeb489a22 +.word 0x9a92ad3a +.word 0xa3fba284 +.word 0x796ad44e +.word 0x5242cd75 +.word 0x024dd81c +.word 0x6875af7e +.word 0x5eb55388 +.word 0x704da150 +.word 0xa9914198 +.word 0x3cde3698 +.word 0x34869f92 +.word 0x1fcbaf84 +.word 0xc95959b8 +.word 0xfdc65961 +.word 0x2e16cbab +.word 0x40798b08 +.word 0x2e91d2d0 +.word 0x6437430f +.word 0x8a07ac4b +.word 0xe843ed29 +.word 0x304fe2c7 +.word 0x4837a60e +.word 0xe6eb7c9f +.word 0x20356451 +.word 0xeae6cc61 +.word 0xf4e1d41c +.word 0xcb764e9a +.word 0x31095ae4 +.word 0x8b230b94 +.word 0xc7fabc03 +.word 0x80efdcb9 +.word 0x411c5e29 +.word 0xa1071406 +.word 0xbe4eca73 +.word 0xaa7866ce +.word 0x2f5a4eab +.word 0x11de4a73 +.word 0x4f54489c +.word 0xb60d356f +.word 0x7ec13edd +.word 0xfc9d8f97 +.word 0x4591d7e3 +.word 0xd45f28fa +.word 0x0cc72864 +.word 0x38de5cdf +.word 0x0f09ea97 +.word 0xb513da40 +.word 0xf31e68bb +.word 0x5aacefa5 +.word 0x49b70a7d +.word 0x1ccf2b7c +.word 0x38acebd4 +.word 0x589a130b +.word 0x22e0a321 +.word 0x94512e54 +.word 0x694e36c3 +.word 0x118ed370 +.word 0xb5227514 +.word 0x6d96fae1 +.word 0x654d8f15 +.word 0xde93ef90 +.word 0x4e489cb4 +.word 0xcee822d2 +.word 0x243af505 +.word 0xf2a66d0e +.word 0x18e74141 +.word 0xdedb643d +.word 0xfd840a3e +.word 0x58f05a76 +.word 0x921ed397 +.word 0xa486caba +.word 0xd806e5eb +.word 0x481ac0c2 +.word 0xb3563ca5 +.word 0x6cf80d1b +.word 0x04ac8c42 +.word 0xae182490 +.word 0xe91e7f61 +.word 0x734c2941 +.word 0x67c961b0 +.word 0x8b885a2b +.word 0xf915b324 +.word 0xa2daf1c3 +.word 0xcf82055a +.word 0xc5bb06af +.word 0x05076bf4 +.word 0xa6072df6 +.word 0xfb0a749f +.word 0xa3e4ae89 +.word 0x36a71c8a +.word 0x9205ae5a +.word 0xf9920797 +.word 0x68f74329 +.word 0x46530230 +.word 0xf39c8733 +.word 0xbaa8f42e +.word 0x5b241506 +.word 0x683b710e +.word 0x0f61137b +.word 0x1abfe174 +.word 0xd51f92db +.word 0xc53d72b5 +.word 0xaea6575c +.word 0xfb12dd1f +.word 0x5755c18a +.word 0xf3f177d4 +.word 0xb6b2db1b +.word 0x04161a59 +.word 0x7b82790b +.word 0xc1137279 +.word 0x876fd323 +.word 0x4b0b795c +.word 0xf6da36b9 +.word 0x73d023e9 +.word 0x5a6ed6ed +.word 0x8cebb59f +.word 0x4ebddc4c +.word 0x57bdb0ae +.word 0xad8b163a +.word 0x04fb789c +.word 0x2466ca6f +.word 0x2e577248 +.word 0x4ffac1de +.word 0x7598440c +.word 0x1b1307d6 +.word 0xe497a599 +.word 0x15ed2bc1 +.word 0x1641b439 +.word 0xb9591661 +.word 0x5b3b4a64 +.word 0x404a49c4 +.word 0x93054909 +.word 0x02e8cceb +.word 0x3b7313ec +.word 0x7ccdf4e7 +.word 0xf9237b29 +.word 0x6a44ce2c +.word 0xbca0b715 +.word 0xa2908323 +.word 0x11859d7d +.word 0x9a897837 +.word 0xcd0c828e +.word 0xeb33dc20 +.word 0x9464cdbc +.word 0x872dcc07 +.word 0xa1edf2d3 +.word 0xdc6d5eb8 +.word 0xd482a0f3 +.word 0xe234c4d9 +.word 0xfa1fee21 +.word 0x647bd6c4 +.word 0xec68bfb6 +.word 0xa20ff13e +.word 0xeef31e06 +.word 0xaf2014a0 +.word 0xa8ab8e4e +.word 0xbeb49c25 +.word 0x79e20b8c +.word 0xb601232a +.word 0xf03d8713 +.word 0x2d11501c +.word 0x9b98e108 +.word 0x9c344086 +.word 0xa7d4983d +.word 0xcd761d4e +.word 0x5e2e023f +.word 0x100d2070 +.word 0x4e8edf06 +.word 0xee34f81e +.word 0xc293a5c1 +.word 0xf4d6c972 +.word 0x95d85c9a +.word 0xedc94ac4 +.word 0x605f51a5 +.word 0x90642aa8 +.word 0xc0a0e601 +.word 0x5cab0808 +.word 0x294ead6d +.word 0x26345c9b +.word 0x8bef6eca +.word 0x48c915c4 +.word 0x646ca01d +.word 0xe1bd5382 +.word 0xcc3ec474 +.word 0x101ab5e4 +.word 0x8fc57430 +.word 0x81df8050 +.word 0x3fafdeb4 +.word 0x353938a8 +.word 0x254b05a9 +.word 0xc5d675a5 +.word 0xe9d9c030 +.word 0x6d5a8e81 +.word 0xdc834719 +.word 0x5366e159 +.word 0x10e48278 +.word 0xd8220677 +.word 0x647df002 +.word 0x5b1692ba +.word 0x67c60b50 +.word 0xfa84aa6b +.word 0x2b4ab6cd +.word 0x1828c1ba +.word 0x89df838c +.word 0xc9c00507 +.word 0x0422706b +.word 0x802efb97 +.word 0xf4ec2c1e +.word 0x7c0a68a4 +.word 0x2d418fb5 +.word 0x53c9dfa0 +.word 0xc8b2698b +.word 0x67cc1969 +.word 0x862a1779 +.word 0x42d67c6a +.word 0xe5c1cf5a +.word 0x8d3cc8b3 +.word 0xbcff3104 +.word 0x46ce1009 +.word 0x92a809eb +.word 0x03ec0739 +.word 0x93bb64a2 +.word 0x7cee4575 +.word 0x43709a36 +.word 0x2bb4df56 +.word 0xa7708509 +.word 0xafc9f7f5 +.word 0xdf988216 +.word 0xb71069bf +.word 0xf6b2b6be +.word 0x61382495 +.word 0x01b05688 +.word 0x850efd94 +.word 0x5599b795 +.word 0x99e06ae5 +.word 0x8552a00b +.word 0xf8dc53f9 +.word 0xfec2d077 +.word 0xbc9ea255 +.word 0x57057078 +.word 0x5413c867 +.word 0x3ba347e5 +.word 0x2afea1f1 +.word 0x7e69b359 +.word 0xaee054e3 +.word 0x75232e91 +.word 0x7e10f96f +.word 0x56fcdea6 +.word 0x5b0636aa +.word 0xeb6994c2 +.word 0x6098c57a +.word 0x055a1551 +.word 0x9b281f3e +.word 0x90af8083 +.word 0x11c8fb3b +.word 0x84692c13 +.word 0xcbacee38 +.word 0x43d9b53c +.word 0x56ac4bb9 +.word 0xa65a81bd +.word 0x9afafff2 +.word 0xe636ee4c +.word 0x45383ba0 +.word 0x6d36908c +.word 0x2c5c2d39 +.word 0xff04d6a8 +.word 0x5f79e07b +.word 0xcc7865f0 +.word 0x8cb9755c +.word 0x185eb509 +.word 0xe6e8800a +.word 0x3b257c2b +.word 0x05f34d32 +.word 0xf04869d3 +.word 0x45e5f8eb +.word 0x0cfd89d6 +.word 0x20e1ee1e +.word 0xabf3673e +.word 0xb4edd551 +.word 0x78ecd6bb +.word 0x76e9b98f +.word 0x461eb32a +.word 0xe7dd7033 +.word 0x164ec8e7 +.word 0x17494e9b +.word 0xd7eed4f1 +.word 0xdf4f6f04 +.word 0xbc53b1cb +.word 0xfee6c6fa +.word 0xe8a8ad30 +.word 0x5709bfe3 +.word 0x2315629a +.word 0x99c365cc +.word 0x0dd72c44 +.word 0x759bbf4d +.word 0x1246d668 +.word 0xcd1532c0 +.word 0x089e062a +.word 0xcf703b6e +.word 0xec2e79d0 +.word 0x1fa4828f +.word 0x7b94202b +.word 0x1384f28b +.word 0x3f6a8b16 +.word 0x1558106c +.word 0x6d370489 +.word 0x26e824db +.word 0x7eadb11e +.word 0xca3cb0c7 +.word 0x8deb37e6 +.word 0xfb9b60ee +.word 0xcfeb4a3c +.word 0xe9bce54b +.word 0x4f66e058 +.word 0xbba5e828 +.word 0xd7e67c69 +.word 0xffa32377 +.word 0xe14e36fa +.word 0x60f217b2 +.word 0xf8fced87 +.word 0x82cccaa7 +.word 0xda46b55a +.word 0x0eec65d6 +.word 0x9753c440 +.word 0xb4061e29 +.word 0xeff8c0c5 +.word 0xb836f7db +.word 0x57ef493b +.word 0x766216b1 +.word 0x9febb48e +.word 0x219a405a +.word 0x5402edc7 +.word 0xff76e8e9 +.word 0x3bccbe45 +.word 0xba5c91ab +.word 0x0e37db9c +.word 0x3bdc58e2 +.word 0x15ccf669 +.word 0x692ce8f0 +.word 0x2f7511a9 +.word 0x0136da95 +.word 0xf1039056 +.word 0x5cf70b51 +.word 0x36368a86 +.word 0x242dec9e +.word 0x25b66fdb +.word 0x53f80a9a +.word 0x776b8915 +.word 0x16be222e +.word 0x9e3b1258 +.word 0x220b8bd1 +.word 0xb28bf27c +.word 0x39f55059 +.word 0x984eef43 +.word 0xb1d74f32 +.word 0x31648e62 +.word 0xe0b439e7 +.word 0xa4a249df +.word 0x5223d56a +.word 0x64b77cf6 +.word 0x6f8bc6a2 +.word 0xfdf7f339 +.word 0xc851a693 +.word 0x0ae00b92 +.word 0xd6f37309 +.word 0x89b19de6 +.word 0xd0a23c9e +.word 0x26cd5c82 +.word 0x528a5078 +.word 0xf5de04fb +.word 0xdde672bd +.word 0x9cad0876 +.word 0x81f876ee +.word 0x3f99ea28 +.word 0x5ee5605d +.word 0x81df1e0b +.word 0x70af483f +.word 0x7df3c6df +.word 0xad49454c +.word 0xeb149578 +.word 0xb14524d8 +.word 0xcdf74437 +.word 0x21ab964b +.word 0x8a9a3246 +.word 0x5cb14be1 +.word 0x1fc3d9c3 +.word 0x4a354f3b +.word 0xde9911d2 +.word 0xffd5af5f +.word 0x71601d8e +.word 0x16cc561c +.word 0x8b91c59a +.word 0x275d2d0d +.word 0x6df41e9e +.word 0x1bb0d4e8 +.word 0x98ea6bd7 +.word 0x49e65b3c +.word 0x4cb282b1 +.word 0x36eb949e +.word 0x402c4c52 +.word 0xc1d11a89 +.word 0xdbfd3c1b +.word 0x37acda43 +.word 0x1d397090 +.word 0x90382df4 +.word 0x4dc7af2a +.word 0x206f870a +.word 0xbf5206ec +.word 0x9f0e8325 +.word 0x602c679e +.word 0xea74b2cd +.word 0x85222bfc +.word 0x9c54fda5 +.word 0x8ac6f852 +.word 0xc9f956c4 +.word 0xf42126ea +.word 0x2c510f53 +.word 0x88763860 +.word 0xb173a6a0 +.word 0xd5b65d8f +.word 0xd06e7f47 +.word 0x0ccc5993 +.word 0x257b025f +.word 0xcf33c157 +.word 0x4f748fe1 +.word 0xe7efd717 +.word 0x851cf58f +.word 0x877da1e2 +.word 0x59817163 +.word 0x08f567b6 +.word 0x6c1cc975 +.word 0xa058d81d +.word 0x2e916ac3 +.word 0x401b2f5b +.word 0x9056828c +.word 0x95837e2d +.word 0x9e0ea42a +.word 0x23adaee9 +.word 0xca83b9a7 +.word 0x70d2b218 +.word 0xfb629cd8 +.word 0x274e93b2 +.word 0x0cf3749e +.word 0xd3ad08de +.word 0xed6bdcc9 +.word 0x41f32aa9 +.word 0x6e157f58 +.word 0xa100435c +.word 0x9ccf552b +.word 0xa86c95ee +.word 0xfd21cb99 +.word 0xfd26847c +.word 0x028d0138 +.word 0x173f9471 +.word 0x87c431cd +.word 0x56c92af0 +.word 0x2cfc298e +.word 0x8777cf42 +.word 0x5ae9b201 +.word 0xfaa82b0f +.word 0xfcb4cfb2 +.word 0xea972915 +.word 0x64c7bbd5 +.word 0xd9c900a3 +.word 0x7df0ac85 +.word 0x07e86789 +.word 0xb6fa7082 +.word 0xca6c96a5 +.word 0x30c71de3 +.word 0xa697a4ab +.word 0xc5ca9b3f +.word 0x3a9b7237 +.word 0x5c2f11b0 +.word 0xd60b6ad7 +.word 0xef72bb02 +.word 0x2e4058de +.word 0x7f1e580b +.word 0x5463cf6c +.word 0xd881fb66 +.word 0xd946c4e9 +.word 0x4568b215 +.word 0x8669c1d5 +.word 0x6350a66e +.word 0x58ccc78a +.word 0xc8bd1e33 +.word 0x1c187011 +.word 0x37f4ff37 +.word 0xb50bae22 +.word 0x8154f02a +.word 0x7499ae8a +.word 0x3bf604b8 +.word 0x5850551c +.word 0x8167919c +.word 0xe4aa285d +.word 0xdfdcdec3 +.word 0xbf2b22bd +.word 0x8af70739 +.word 0xab959759 +.word 0x9823ffbf +.word 0xf0255fd5 +.word 0xca085ef9 +.word 0xd5b31458 +.word 0xc4026fa1 +.word 0x900d0c32 +.word 0x6ef2bac7 +.word 0x72f5a051 +.word 0xe933c0a0 +.word 0xdb1abb2f +.word 0x2b0009f9 +.word 0xec40c3ee +.word 0x1ee8afd7 +.word 0x68ea2376 +.word 0x0c859f69 +.word 0x0621e462 +.word 0x73605408 +.word 0xd22859ec +.word 0x350d8535 +.word 0x27acf516 +.word 0xcb19d768 +.word 0xc9d24f4f +.word 0xf2904d1d +.word 0xd439ed9c +.word 0x44752d43 +.word 0x3de47c54 +.word 0x4ed7eaf2 +.word 0xc1077d56 +.word 0xe54265c2 +.word 0x63bfa56d +.word 0xfdfcc201 +.word 0xcd59bd06 +.word 0x53639924 +.word 0xbea048a5 +.word 0x5effe100 +.word 0xe2f4e444 +.word 0xa7a2fb2c +.word 0xa7df7f26 +.word 0x9358d974 +.word 0x60b3c144 +.word 0x9f3c09e8 +.word 0xe4022330 +.word 0x339b7324 +.word 0xb81cc2a0 +.word 0xb0407810 +.word 0x88c07505 +.word 0x604f03b4 +.word 0x631391a7 +.word 0x4a5d2e70 +.word 0xed8051bc +.word 0x2242601c +.word 0x244b903d +.word 0xaf0a177c +.word 0xd14d196c +.word 0x0ea71b3c +.word 0x4ecc17d4 +.word 0xe2279d9d +.word 0xf234d330 +.word 0xabfcf7e3 +.word 0x7a3860cb +.word 0x78e6bfde +.word 0xd34ed2e0 +.word 0xf937ae97 +.word 0x88b19743 +.word 0xaf2d6491 +.word 0xd0237fc8 +.word 0xd3466803 +.word 0x73107653 +.word 0x0c4ba434 +.word 0xf7017bc6 +.word 0x6e2077a2 +.word 0xaf3d7ff5 +.word 0xa04845be +.word 0x1b6a0f17 +.word 0x0a050efc +.word 0x7bd92809 +.word 0xecb379d5 +.word 0x91bf62c3 +.word 0xd46e750b +.word 0x54dfe065 +.word 0x8e65d101 +.word 0xcc662613 +.word 0x4b9b6410 +.word 0x64df2e53 +.word 0xec0bd5d1 +.word 0x3b73553e +.word 0x2755473f +.word 0x6dc71250 +.word 0x51d05745 +.word 0xb11e6e8f +.word 0x675c7011 +.word 0xa6d44d0d +.word 0x33978c67 +.word 0xc2963410 +.word 0xea1a3e3c +.word 0x4870acfa +.word 0x808d2e74 +.word 0xf1c95557 +.word 0x0f166563 +.word 0x21589a27 +.word 0x4bceefd1 +.word 0x6e101492 +.word 0x6afad03c +.word 0x02d0a4c3 +.word 0x4bbac1a1 +.word 0x06b840b0 +.word 0x62a05eeb +.word 0x512ea951 +.word 0x6a09de06 +.word 0x997390ef +.word 0x01c8e6bf +.word 0xbc06678e +.word 0x9b95d4de +.word 0x109dbd28 +.word 0x7cde8fd3 +.word 0xf3b57346 +.word 0xf365bac8 +.word 0xe7922a99 +.word 0x30bf4635 +.word 0xd2ba4377 +.word 0x8b064702 +.word 0xb79dcc60 +.word 0xa9778fac +.word 0xc6f970e9 +.word 0x76cfe0a9 +.word 0x2b45ecf3 +.word 0xd19e89e7 +.word 0x1117f52b +.word 0x4bfd7763 +.word 0xd5b8a894 +.word 0x51923e6c +.word 0x778cc19b +.word 0xf33bf013 +.word 0xd58ce579 +.word 0x9ebf9832 +.word 0xbaafcbb6 +.word 0x508f1713 +.word 0xa1554221 +.word 0xd9e2dcdc +.word 0x28abe43f +.word 0x61a8e156 +.word 0x8456d716 +.word 0x31e8803b +.word 0xedbe70f8 +.word 0xd94117d5 +.word 0x0b073299 +.word 0x72eea74e +.word 0x806ae367 +.word 0x048ee4ae +.word 0xd1b10d10 +.word 0x68fd38c0 +.word 0x39a55a6a +.word 0x4f296d03 +.word 0x26a949a2 +.word 0x9a95279e +.word 0xfbcfc069 +.word 0x747f0c91 +.word 0x0ebb7dc1 +.word 0xd98f3fce +.word 0xcd81f002 +.word 0x71c824d5 +.word 0xaf1617bf +.word 0x365cea9a +.word 0xce1d9dbd +.word 0xfd4d63f2 +.word 0x2e1be62e +.word 0x674c00c9 +.word 0x53d38ce6 +.word 0x1fa62300 +.word 0x19f23c4d +.word 0x5af3bb33 +.word 0x0258902a +.word 0x927a9be5 +.word 0x31f501c7 +.word 0x8416473c +.word 0xee1f8213 +.word 0xc9c67561 +.word 0x3376b102 +.word 0x100c49e5 +.word 0xa2f11fb6 +.word 0x02a73388 +.word 0x772bb34b +.word 0x1b72c34c +.word 0x988f9a18 +.word 0x77b80718 +.word 0x8363e00e +.word 0xb80f625c +.word 0x5a6b601d +.word 0x5af16a6a +.word 0x567fa509 +.word 0x1a1bc84c +.word 0x2ff028b6 +.word 0x3dbabb64 +.word 0x6bd76e53 +.word 0x05e80216 +.word 0xdcfb849c +.word 0xcec27601 +.word 0xf93481d7 +.word 0xdabdb302 +.word 0x05137464 +.word 0xb54467e8 +.word 0xda7d3d46 +.word 0xe4d1bba4 +.word 0xc716bd65 +.word 0xeaf3ac2e +.word 0x9a1631ec +.word 0x5771ba94 +.word 0x6a36f849 +.word 0xa9075c00 +.word 0x9b560a46 +.word 0xb4eed944 +.word 0x112aaca3 +.word 0x58d8c07c +.word 0xc9407df3 +.word 0xaa2c8e8a +.word 0x6aa35012 +.word 0x8136749b +.word 0x30c990d7 +.word 0xb335824f +.word 0xc6328379 +.word 0x41bd3389 +.word 0x4ef87969 +.word 0x69870a30 +.word 0xc2c7d136 +.word 0x06137622 +.word 0xf047ea89 +.word 0xfb9485da +.word 0xced97728 +.word 0xa193b167 +.word 0x64dd5bb0 +.word 0xd8f18b41 +.word 0x03b663db +.word 0x1c5f6640 +.word 0xa2324471 +.word 0x4036a4a3 +.word 0x3c9c4946 +.word 0x15ad4baa +.word 0xc6482538 +.word 0xda5a40aa +.word 0x8e03b644 +.word 0x0a82c597 +.word 0xbbcacdd5 +.word 0xba9ab453 +.word 0x59eecb08 +.word 0x2bb4f55d +.word 0x55d13736 +.word 0x45bf248d +.word 0x291e95dc +.word 0xf3db95af +.word 0xc2188176 +.word 0x7d966c51 +.word 0x541b7914 +.word 0x1dc342e9 +.word 0x90921eef +.word 0x5994d596 +.word 0xbf1d689f +.word 0x24fa389f +.word 0x700d107a +.word 0x87b22576 +.word 0x99270ab8 +.word 0x4fdeea25 +.word 0x4ee10569 +.word 0xcc5acacc +.word 0xaf45de7d +.word 0x8dcf5e46 +.word 0x88a753e0 +.word 0x3fa66305 +.word 0xfaa6f2df +.word 0x1548e563 +.word 0x8033693a +.word 0x0bcf0fa2 +.word 0x08f182e7 +.word 0xc5b29ad9 +.word 0x9056d5c7 +.word 0x5dbe7e42 +.word 0xd0f521d0 +.word 0x06cc8a44 +.word 0x59885ed4 +.word 0xf8266d4e +.word 0xcff196e3 +.word 0x8157f025 +.word 0xbf1c025b +.word 0xee77360b +.word 0x627f24ea +.word 0x172c12d5 +.word 0xd3f93d13 +.word 0x872fed44 +.word 0xe0789af0 +.word 0xa902e316 +.word 0x41a44824 +.word 0x0608f3a2 +.word 0x94b1adf0 +.word 0x744632be +.word 0x5966ed1a +.word 0xb171a29f +.word 0x61ef1723 +.word 0xd02af581 +.word 0x1004f64c +.word 0x053d4729 +.word 0x5e9d2cc2 +.word 0x2b662f4d +.word 0xe6f36575 +.word 0xa39aba7a +.word 0xf69f690c +.word 0x4b07deac +.word 0xd93a3834 +.word 0xfa7e32d7 +.word 0xdd92dc19 +.word 0xc3d2cd6b +.word 0x214c8a34 +.word 0xe61e40c3 +.word 0x1804d4be +.word 0x5a8cad44 +.word 0x2e15dc68 +.word 0x1f7f1ab3 +.word 0xf75eb520 +.word 0x9e538d98 +.word 0xe422e1e6 +.word 0x5f8a7b04 +.word 0x621a7eab +.word 0xd4348549 +.word 0xf81276a5 +.word 0xc47223f1 +.word 0xe042574e +.word 0xd92a59d3 +.word 0xc35a3ff3 +.word 0xe91e126b +.word 0xc451e726 +.word 0x018c699e +.word 0x2fd2c315 +.word 0x563f2ea4 +.word 0x3d153fc0 +.word 0xf68d2307 +.word 0xde437b5a +.word 0x8a8d3f85 +.word 0x3d27ee5b +.word 0x1ad32866 +.word 0x0ce624cf +.word 0x301f4a14 +.word 0x42216fed +.word 0xdafd3d89 +.word 0x4ef6efff +.word 0x7d9798dc +.word 0x99b8f645 +.word 0xf9ca3325 +.word 0xb499be1b +.word 0x45727491 +.word 0x77e779fc +.word 0x55360f8f +.word 0x398ac714 +.word 0xc2a98dba +.word 0x9132f784 +.word 0x59cfcb58 +.word 0xa422c81e +.word 0x1f19d74a +.word 0x982b4fbb +.word 0xd0b4b3df +.word 0xed09a57f +.word 0x88f08f1a +.word 0x3e8bc723 +.word 0xbf1b0564 +.word 0xfde58df0 +.word 0x5506925d +.word 0x52df62a1 +.word 0x2ceaa1c7 +.word 0x55ff1ef7 +.word 0xc3ed9642 +.word 0x8fc9bc91 +.word 0x310eddd2 +.word 0x3673de0a +.word 0x2c21cd5b +.word 0xa28964fb +.word 0x1e22c98f +.word 0x3a77e932 +.word 0x63bbabce +.word 0xcb00e32c +.word 0xe41209c3 +.word 0x69bfb87f +.word 0xce88c128 +.word 0x33545407 +.word 0x3eb40eed +.word 0x6029ee08 +.word 0x99a4b099 +.word 0xb034f0fb +.word 0xbc40a0b3 +.word 0x3a87a611 +.word 0x1b34f265 +.word 0x2fd5bbe4 +.word 0x25f3c0a4 +.word 0x96a611db +.word 0xee62789e +.word 0xd79b82f5 +.word 0xc4e8c7b4 +.word 0x8dbf616c +.word 0x415d2820 +.word 0xec9ebd04 +.word 0xa47b4030 +.word 0xfedacea4 +.word 0x95e577eb +.word 0x2dad42c6 +.word 0x2f8d6b4a +.word 0xdf9dbf2b +.word 0x2735600f +.word 0x72c6f1fe +.word 0x724c4504 +.word 0x5b4f274a +.word 0xf71a6fc9 +.word 0xe6558eb8 +.word 0x1eb783b1 +.word 0xf910679c +.word 0x8e85f0bc +.word 0x245405e1 +.word 0xdb4e939a +.word 0x5fbd7c3e +.word 0x750995da +.word 0x3fb90150 +.word 0x82e1c709 +.word 0x47a09894 +.word 0xf8fc1b3b +.word 0x1d435546 +.word 0x5fd356f3 +.word 0x6ddbc383 +.word 0xd388d001 +.word 0x7f8c5947 +.word 0xb49c0eb8 +.word 0x3708e4b5 +.word 0xc06e098e +.word 0x904e89f7 +.word 0xe0d9c90e +.word 0xe4d7f14e +.word 0x6326485e +.word 0x9595f429 +.word 0xb390c47a +.word 0xec672394 +.word 0x27e93b41 +.word 0x84c00525 +.word 0xd30e8890 +.word 0x263f5f5a +.word 0xfd99bd31 +.word 0x9a09c151 +.word 0xa6d2201d +.word 0x083c623b +.word 0x736056fe +.word 0x8007f89c +.word 0x38ae7fff +.word 0xfec529a9 +.word 0x9052770f +.word 0x641ab710 +.word 0xd24c29ba +.word 0xeb1fa8c6 +.word 0x47b9d678 +.word 0x0767c200 +.word 0x4e12055e +.word 0x3fec7514 +.word 0x6bbcefcc +.word 0xfffaf4d0 +.word 0x13d8ec0b +.word 0x68c351b4 +.word 0x12499dcd +.word 0x59e71af2 +.word 0xd6176c51 +.word 0x8e9dd6fd +.word 0xde101a4f +.word 0x49886db4 +.word 0xa7d0a206 +.word 0x20c189ae +.word 0x830805f8 +.word 0x19ccd207 +.word 0xb561edb6 +.word 0x7b8dfd4a +.word 0x90a36d42 +.word 0xa4499331 +.word 0x8341682d +.word 0x15f92e1e +.word 0x6f175e45 +.word 0xe0e47f40 +.word 0xa7ef746b +.word 0x96de9742 +.word 0xe4de6be6 +.word 0xa5a8e055 +.word 0x40404b6c +.word 0xaacb2b19 +.word 0xd411a7c7 +.word 0x39c3555a +.word 0x3d6a0e2b +.word 0x364dea30 +.word 0xf621363f +.word 0x4a374d75 +.word 0xc45e7c52 +.word 0x1009bb30 +.word 0x09200c58 +.word 0xba6dc6cb +.word 0x320cfe75 +.word 0x77b978c7 +.word 0xa1a26a5b +.word 0x460da0d8 +.word 0x9cc872aa +.word 0x19a35e90 +.word 0x1c6d654e +.word 0x0de2fba3 +.word 0xab6a0f4f +.word 0xb5bf514c +.word 0x79f0a40f +.word 0x60dd138f +.word 0xf7e1cbf9 +.word 0x4f5ad4df +.word 0xd66755a2 +.word 0xf78f5f66 +.word 0xc74bc08e +.word 0xe602f8e1 +.word 0x6c090a40 +.word 0xa4a8bf0c +.word 0xe9c4b49e +.word 0x2439b4f4 +.word 0x8c70185d +.word 0xb276fda2 +.word 0xca321c83 +.word 0x92d71026 +.word 0xf701f8fb +.word 0xd18a348f +.word 0xfeec94a5 +.word 0xeaca7cf9 +.word 0x8912d393 +.word 0xfbe794be +.word 0x9b1415f2 +.word 0x1c8b0547 +.word 0xa00b05bb +.word 0x9bf3b4c0 +.word 0x4493dfb3 +.word 0xc6fbb718 +.word 0xb312423f +.word 0xf08444c6 +.word 0x773c1772 +.word 0x85871de4 +.word 0x986d5192 +.word 0xc2c9ec27 +.word 0xb6e4e1f6 +.word 0x12ddc87c +.word 0xc5b00309 +.word 0x25bca43a +.word 0x4bc902fe +.word 0x1ba0c067 +.word 0xbfa7396c +.word 0x05d15326 +.word 0xf0a9f068 +.word 0x53b06ac6 +.word 0x31dda412 +.word 0xa60d40dd +.word 0xf4ce52c5 +.word 0xb7d0559f +.word 0x6617da04 +.word 0x59c6c267 +.word 0xa695cb2b +.word 0x41c1ad05 +.word 0x451205d6 +.word 0xa9a96cd1 +.word 0x1c8831f7 +.word 0xa06405e3 +.word 0xc5a7c2fc +.word 0xe06597c4 +.word 0x65d34fdf +.word 0xa43e16f5 +.word 0x6edc5cab +.word 0x9db9a850 +.word 0x640a003c +.word 0x69bf3b52 +.word 0xcc87254c +.word 0x45efca3d +.word 0xf48302ca +.word 0x82181fd8 +.word 0x3abd5206 +.word 0x538e0e30 +.word 0x2d370196 +.word 0xbaea16d0 +.word 0x59ed446d +.word 0x12603a99 +.word 0x66eefe3d +.word 0xcf705549 +.word 0x6497a328 +.word 0x01584290 +.word 0x67edbab6 +.word 0x86dd2141 +.word 0xb4dbe95f +.word 0x39e1f7e2 +.word 0x418d5f43 +.word 0x7ce1d5da +.word 0xae1afe13 +.word 0xfdadf3f1 +.word 0x80b54951 +.word 0x22d9360c +.word 0x74bee5d7 +.word 0x106d2fed +.word 0x8570d7b9 +.word 0xaeac12a5 +.word 0x2ed23b32 +.word 0x524b621f +.word 0x9913a470 +.word 0x1676199f +.word 0x593e8077 +.word 0x697d613b +.word 0xc92019da +.word 0xa70e493d +.word 0x0333a5b7 +.word 0x67dcc09c +.word 0x8fd6e48f +.word 0x763d44eb +.word 0x50f8e0a0 +.word 0x6e47f8ce +.word 0xf8fde914 +.word 0x82dab300 +.word 0xdea1381e +.word 0x5383be23 +.word 0x724cd7fc +.word 0xc0076b4d +.word 0x6da145a1 +.word 0xf14f3718 +.word 0x5f197048 +.word 0xd47f4e2e +.word 0xead909ee +.word 0x13af1d69 +.word 0x5216cc28 +.word 0x3b63ea88 +.word 0x83b7dee5 +.word 0xf576b44f +.word 0xa1724f0d +.word 0x8728a86d +.word 0x40d1859a +.word 0x577ff804 +.word 0x018b4f19 +.word 0xdc38e3f4 +.word 0x08af18a0 +.word 0xb21b527c +.word 0x188adb55 +.word 0x89556846 +.word 0xd3ef3150 +.word 0x8f14598a +.word 0xea43ef1e +.word 0x2c81bd14 +.word 0xf23707b8 +.word 0xfcbf07f0 +.word 0xfadf8d0b +.word 0x535571f8 +.word 0x7fcc2d61 +.word 0xfa39a07d +.word 0xa54673e9 +.word 0xae6412dd +.word 0x09e3f11c +.word 0x416a1d5a +.word 0x35de9f2b +.word 0x3f584eb0 +.word 0xa4b0336f +.word 0x3760f5dc +.word 0xb4ba2920 +.word 0xffe72c71 +.word 0x7db49000 +.word 0x14724eaf +.word 0xb1cc68a0 +.word 0xf7c78b15 +.word 0x4b31f48d +.word 0xf666e188 +.word 0xecbea048 +.word 0x8040efff +.word 0x517cd16e +.word 0x89ba9a0e +.word 0xa402f6e2 +.word 0x3eab110a +.word 0xef31bce4 +.word 0xa72faf9e +.word 0xa2a91c75 +.word 0xffabf204 +.word 0x3bc2f608 +.word 0x7338ad88 +.word 0x63aa8002 +.word 0xbdd52466 +.word 0xff9262e1 +.word 0x11320e9f +.word 0x1931928a +.word 0x3988951e +.word 0x9323a8ba +.word 0xcdcf1aa7 +.word 0xf3e5b17e +.word 0x9f6ce5b9 +.word 0x63ba4d6e +.word 0xa24a7f53 +.word 0x64dfaa1a +.word 0x0840f2d1 +.word 0x2d8baaa1 +.word 0x738b4288 +.word 0x9df4cf55 +.word 0xb4c083b2 +.word 0xbed209c2 +.word 0x0daa7aa5 +.word 0x39c806b2 +.word 0x271ee086 +.word 0x74aa9d45 +.word 0xcc6ab371 +.word 0xb25602f8 +.word 0x881ffc08 +.word 0x13dfa536 +.word 0x67d40281 +.word 0xaaa2524e +.word 0x29f55142 +.word 0x716aeaac +.word 0x6b1c6da2 +.word 0x47bff229 +.word 0x6c40d442 +.word 0x88242a5c +.word 0xe7f21833 +.word 0xd666fb38 +.word 0x7ff39ea8 +.word 0xeaf5a3cd +.word 0x9d4a3b58 +.word 0xaeed901c +.word 0x9c686c30 +.word 0xeea8f2f8 +.word 0x87201642 +.word 0x61e6f014 +.word 0xc723ab9c +.word 0x7e8100a9 +.word 0x5956f15d +.word 0xd83d47e0 +.word 0xacf4718f +.word 0x0f82c15c +.word 0x8800dc8f +.word 0x954cfc4b +.word 0x61691245 +.word 0xfd626337 +.word 0x0e498812 +.word 0x72b871c9 +.word 0xd4971ddc +.word 0x7478b8c3 +.word 0x713b028c +.word 0xe1e5878f +.word 0xac92e7f8 +.word 0xafaf94c9 +.word 0xc70ffd1d +.word 0x2f7ab28b +.word 0xaa7649c5 +.word 0x08cd52b5 +.word 0x2c7f664c +.word 0xc0e95f45 +.word 0xd318c6ef +.word 0xede4f593 +.word 0x30ef22bc +.word 0x80a76ff0 +.word 0x1baf7278 +.word 0x1483d922 +.word 0xa424f2c8 +.word 0x0388f18d +.word 0x060c5d2c +.word 0xbd0be199 +.word 0x504af0c0 +.word 0x72b6a274 +.word 0x58957db8 +.word 0x46712d32 +.word 0x820844f8 +.word 0xeceec60e +.word 0xcaeef3b2 +.word 0x11f65295 +.word 0x58808b02 +.word 0x58087e91 +.word 0xb19fb632 +.word 0xed459f68 +.word 0xfe02957c +.word 0x0c6da8b8 +.word 0x3a93099f +.word 0xf0ceda4c +.word 0xc90c6b2c +.word 0xd8ccffb6 +.word 0x4dd667c0 +.word 0x0887fb54 +.word 0xa913c789 +.word 0x01bda9f8 +.word 0x381b6dd9 +.word 0x3d89f038 +.word 0x2f3f7b92 +.word 0x51efb291 +.word 0xb86bb897 +.word 0x599d68b8 +.word 0xccb28e1b +.word 0x6f767681 +.word 0x5ea9c25d +.word 0x703426fe +.word 0x95cd466d +.word 0xe9ac58bf +.word 0x39200bbf +.word 0x402a0ea6 +.word 0xc0abe5c4 +.word 0xff1cb7d4 +.word 0xf0d933f2 +.word 0x1d3cba3c +.word 0x7f501735 +.word 0x0bbc60d7 +.word 0x52d96518 +.word 0x37a83393 +.word 0x406a1468 +.word 0x16edace7 +.word 0x3953d3aa +.word 0xfd83dc99 +.word 0xad78e42c +.word 0xb12220ae +.word 0x40129273 +.word 0x541fe7f3 +.word 0xd97f1283 +.word 0xebe1ac07 +.word 0x7b435a30 +.word 0x1862e47c +.word 0x7f62b5be +.word 0xac0f964a +.word 0xc087aae1 +.word 0xcee6cd53 +.word 0xfa3aa133 +.word 0x1e2a7a84 +.word 0xed1813f0 +.word 0x78719a7f +.word 0x9346f5e0 +.word 0x8e3859c5 +.word 0x98e89c3d +.word 0x70059903 +.word 0xd2decaf2 +.word 0x5b594325 +.word 0x3d9e1030 +.word 0x3ff028bb +.word 0x4f0dd52a +.word 0x56f40b70 +.word 0xfc48c40d +.word 0x7830d314 +.word 0x51ae5a58 +.word 0x6dbdaa07 +.word 0x98eea88e +.word 0x59fe7b17 +.word 0x59e35490 +.word 0xaca32d0d +.word 0xafd57628 +.word 0xb3b5ff47 +.word 0xbf919b2b +.word 0x64918171 +.word 0x3bd766c8 +.word 0x943286a2 +.word 0x1c1b997b +.word 0xb3b59e2b +.word 0xdf7d1b75 +.word 0xbb580a1e +.word 0x1ab97ebc +.word 0xb5f85503 +.word 0x5a05f486 +.word 0x16a97e83 +.word 0xf3d0ade0 +.word 0x68700465 +.word 0x1403da76 +.word 0x6e6f16eb +.word 0xa1aae5d7 +.word 0xf3ba72a5 +.word 0x16fa2b06 +.word 0xd131c05d +.word 0x2321d156 +.word 0x20d9ca78 +.word 0x1c0dfc17 +.word 0xb04a4ce8 +.word 0xc1dcfeb5 +.word 0xc38f699f +.word 0x346dc355 +.word 0xa4a22ff2 +.word 0x7ca962a3 +.word 0x61651917 +.word 0x77860270 +.word 0xe8dbf83f +.word 0x355fd74c +.word 0x3d8e61fe +.word 0x2150ad43 +.word 0x9baa052d +.word 0x07b57111 +.word 0x8a49e2c9 +.word 0xb0039b77 +.word 0x734b08e4 +.word 0x0d6b9738 +.word 0x5e9616e4 +.word 0xb6b55365 +.word 0xaaa7c377 +.word 0xbedafc08 +.word 0x62c14a0e +.word 0xf81ee429 +.word 0x005e54d0 +.word 0x950a1df0 +.word 0x5080666b +.word 0x1a999faa +.word 0x83f995c6 +.word 0xa3293431 +.word 0x31aac88d +.word 0xddf6e6f3 +.word 0x9616ecc5 +.word 0x43402344 +.word 0x567f0c11 +.word 0x9f9db7d8 +.word 0xc76717b9 +.word 0x083ddf3c +.word 0x425db659 +.word 0x6f84bb6c +.word 0xe417cf30 +.word 0x8cb90c4e +.word 0x6c35d574 +.word 0x8be77f71 +.word 0x637ff5eb +.word 0x3d93bad2 +.word 0x32e149f8 +.word 0x20100ba5 +.word 0xfa731a5d +.word 0x39991177 +.word 0x8ccf610b +.word 0x9b028279 +.word 0x28abad96 +.word 0x31aa1b7b +.word 0x165caee7 +.word 0x87fcb236 +.word 0x26697943 +.word 0xb5759461 +.word 0xeefe6bed +.word 0x05509e63 +.word 0xe245d5ce +.word 0xbba04221 +.word 0x2849899b +.word 0x96202ea9 +.word 0x5ceec268 +.word 0x49952ebd +.word 0x5869919b +.word 0xf4a0bb6d +.word 0x658cd412 +.word 0x72bf1be1 +.word 0x22e84672 +.word 0xe11d156f +.word 0x5163d65b +.word 0x44b34ea4 +.word 0x42e6f3c1 +.word 0xd996b420 +.word 0x23bd49ee +.word 0x6223ad86 +.word 0x9e870bff +.word 0x4959c1f3 +.word 0xa817814d +.word 0xf2f7b758 +.word 0x2669e2c9 +.word 0xdfc670c8 +.word 0x86d0402f +.word 0xe2e9fcc6 +.word 0x2c241533 +.word 0x177652fc +.word 0xe7fc1069 +.word 0x364a6799 +.word 0xe30b63bc +.word 0x3245871e +.word 0xdda7291b +.word 0xd8fb6f90 +.word 0x2d80716b +.word 0xe551a560 +.word 0x8bf12468 +.word 0xcc16d660 +.word 0x386a23a0 +.word 0x963f5fe6 +.word 0x7a763811 +.word 0x2ff32ad2 +.word 0x54a95f97 +.word 0xfe9c0757 +.word 0x43279b30 +.word 0xf3a61ea2 +.word 0x69dad268 +.word 0x532df0cc +.word 0xa9177106 +.word 0xa829d366 +.word 0x69f10f8c +.word 0x4ec04425 +.word 0xaba9c80d +.word 0x24c5cfc5 +.word 0x458a8e5f +.word 0xeebd5d92 +.word 0x5122b4d6 +.word 0x88352725 +.word 0xf414967f +.word 0x3ac139ee +.word 0x0e7ba4ea +.word 0xa21a7b06 +.word 0xa80f28ac +.word 0xc51a6937 +.word 0xfba9e540 +.word 0x928a4469 +.word 0xb06602ad +.word 0xba404cef +.word 0x08ced7e4 +.word 0xf369bec4 +.word 0x22b91028 +.word 0x39ec1a2d +.word 0x25344579 +.word 0xd344fd72 +.word 0xf1904eb9 +.word 0x901bbd62 +.word 0x11eb97fa +.word 0x153bb2fe +.word 0x243b9ff0 +.word 0x3dd4144e +.word 0x32448fc9 +.word 0xf20281c9 +.word 0x809dea7e +.word 0x23ba882f +.word 0xfe6c8e91 +.word 0x59082b28 +.word 0x14e2f6f4 +.word 0x0c390f04 +.word 0x5b8cc73b +.word 0xa094e7b7 +.word 0xc6a41b2c +.word 0x8dc37f55 +.word 0xf5953155 +.word 0xb302bf4e +.word 0xe848b3f9 +.word 0x780fc709 +.word 0x59557a31 +.word 0x306eedf4 +.word 0xc0156c54 +.word 0x1c3ebbe7 +.word 0x633bf3b6 +.word 0x667e74a8 +.word 0x52ea43af +.word 0x9c954077 +.word 0x63164ed0 +.word 0x1b027a1a +.word 0x5b107e54 +.word 0x14c869fc +.word 0x8c6f9437 +.word 0x19cedcd6 +.word 0x43549dcb +.word 0x742ab5ff +.word 0x105d81b8 +.word 0x2e892482 +.word 0x658fc778 +.word 0x54744d22 +.word 0x8e1ec76c +.word 0x771f5322 +.word 0xa3a6bd9e +.word 0x2e3ecd83 +.word 0x90523695 +.word 0x155556e2 +.word 0xedf16a62 +.word 0x2c668618 +.word 0x22e39867 +.word 0xf6630d78 +.word 0x7e3e44dc +.word 0x13a9aeb8 +.word 0x2aba7231 +.word 0x26d9c1c0 +.word 0x8f67d0bb +.word 0x3f15a7c1 +.word 0x8f6d4e77 +.word 0xeaf8d59e +.word 0xd4c72b70 +.word 0x4da54871 +.word 0x98fb91c2 +.word 0xb0fd29eb +.word 0xe64bb22d +.word 0xbba59877 +.word 0xffcfa273 +.word 0xec82caf5 +.word 0xa906b9c2 +.word 0x6e3229a1 +.word 0xd5c6796f +.word 0xd48f3867 +.word 0x606be6a3 +.word 0xbe3ecbe8 +.word 0xe4ec5062 +.word 0x9443514b +.word 0x5c82a7ee +.word 0x1f70e3a2 +.word 0xb051e564 +.word 0x46dfb9c3 +.word 0x374bd19f +.word 0x1839d728 +.word 0xd6754d86 +.word 0xd0652ce3 +.word 0x3450026f +.word 0x43a222c2 +.word 0x5a416469 +.word 0x903dcb92 +.word 0x13af3703 +.word 0x265dd553 +.word 0xba19bb90 +.word 0xee0d2db6 +.word 0x08aa866c +.word 0x7cd52f6a +.word 0xa4f1f796 +.word 0x59ef770f +.word 0xd3f8145b +.word 0x0afd81a3 +.word 0xad6bed7a +.word 0x4737ef3b +.word 0xab41801d +.word 0xa85da2c0 +.word 0xfefb1e6d +.word 0xb921d2df +.word 0x51d4f539 +.word 0x1fb4f670 +.word 0xc8b8c562 +.word 0xd9dfacf1 +.word 0x88396e9d +.word 0x5d008c07 +.word 0x914c198e +.word 0x4d9bcb7f +.word 0xe7495121 +.word 0xc09bff7e +.word 0x380ed3a6 +.word 0x0a089ec5 +.word 0x317e7756 +.word 0x812ceea7 +.word 0xa2435090 +.word 0xc4c65fa2 +.word 0x9ff00add +.word 0x7b6bfd06 +.word 0x5176ea6a +.word 0xc594d1d9 +.word 0xc6bfe1a1 +.word 0x100e905b +.word 0xf742610c +.word 0x6bc49a9d +.word 0x41015744 +.word 0x36267ec1 +.word 0xafd789d0 +.word 0x9dd55301 +.word 0xeabcc88c +.word 0x2e95df81 +.word 0x76ddf00a +.word 0xc6761511 +.word 0x4c82aa04 +.word 0xa5d40a35 +.word 0xfc001237 +.word 0x2afab08e +.word 0xb9375cb6 +.word 0xea6d8c59 +.word 0x90160651 +.word 0xb6ad0c08 +.word 0x438c0c69 +.word 0xd47346b6 +.word 0x4dec3c8a +.word 0x02d5a074 +.word 0xef01e8a3 +.word 0xbb2e2e4f +.word 0xfd0dc670 +.word 0x294c690f +.word 0x86e0ad40 +.word 0xf1e2ba24 +.word 0x6c524684 +.word 0xa7dca937 +.word 0xbabdb25c +.word 0xe978e776 +.word 0xfa3b297a +.word 0x18a1e544 +.word 0x460eadb6 +.word 0xa71f3f06 +.word 0xb7813680 +.word 0xaf8fab09 +.word 0xe3be5479 +.word 0xbc5e7f72 +.word 0xb4f3c4b4 +.word 0x5c421120 +.word 0x5afb7d02 +.word 0xa0b9bc70 +.word 0x67f652cf +.word 0xae4d97b5 +.word 0x23a9aac5 +.word 0x7fa868ed +.word 0x4900d5d0 +.word 0xbf0c2c68 +.word 0xbc69f589 +.word 0x05a25125 +.word 0xa5b0a228 +.word 0xcb93bb8c +.word 0xffdf6088 +.word 0x74cc1cbc +.word 0xb282bf18 +.word 0x443b2a3c +.word 0x240a6044 +.word 0x38668033 +.word 0xea832b44 +.word 0xccca493a +.word 0x38bc5a61 +.word 0x7cf428ec +.word 0x4b2653dc +.word 0x32892e79 +.word 0x9ff21eff +.word 0x8a87ce13 +.word 0xde963570 +.word 0x02ba83ea +.word 0x03b7f256 +.word 0x9af9fd80 +.word 0xa1866aae +.word 0x586e90f0 +.word 0xbf579179 +.word 0xddc9fb12 +.word 0xfa6a4dd7 +.word 0x0ca10db7 +.word 0x19d04527 +.word 0x25d4a6e1 +.word 0x37c353ce +.word 0x927bcfca +.word 0xfad65be8 +.word 0xf150bdfc +.word 0xf1aa7eb0 +.word 0x118b1e3c +.word 0x161064ae +.word 0x8869b655 +.word 0xe28a59ec +.word 0xdce2276c +.word 0xe129dd3e +.word 0xbbde4378 +.word 0x7eac43c1 +.word 0xf2444855 +.word 0x9f5a9d7e +.word 0x9af68f53 +.word 0x99bebbe7 +.word 0x6b66aaa4 +.word 0x1742442e +.word 0xf971a485 +.word 0xa3a07cf0 +.word 0x41bac230 +.word 0x7b8dc09d +.word 0x0e983a2c +.word 0x6b3fa7f8 +.word 0xf4f56dac +.word 0x23199da5 +.word 0x6a393c1c +.word 0x31944763 +.word 0xb8ed8f5e +.word 0x178d5dd9 +.word 0x88cfaf1e +.word 0xae5caf1a +.word 0x519f1040 +.word 0xbc328b30 +.word 0xe1d87090 +.word 0x19c6a060 +.word 0xa8ef3eec +.word 0xb7ffaab3 +.word 0xd384ed6c +.word 0xd27abe10 +.word 0xe0bcf3d1 +.word 0x37988b2b +.word 0xcd400b0d +.word 0x676fb0cb +.word 0x51f17190 +.word 0xaa0f6e47 +.word 0x3f8fd6b3 +.word 0xcb99e8d1 +.word 0x9e6d25e4 +.word 0xd1e17044 +.word 0x053a3236 +.word 0xf3946d21 +.word 0xbfd84c58 +.word 0x07a415b6 +.word 0x727fed0e +.word 0x5b980b28 +.word 0x35923606 +.word 0x2685a690 +.word 0xfaa26e35 +.word 0x9077da04 +.word 0x00b865c4 +.word 0x018f394b +.word 0xbe0d50dc +.word 0xd3c8b727 +.word 0x75b2687f +.word 0xbf7467f8 +.word 0x3f5ec93f +.word 0x3425ba16 +.word 0xfeabac79 +.word 0x6025d5cf +.word 0xe7629b6b +.word 0xc585959e +.word 0xe69a5105 +.word 0x7da0ebde +.word 0x6ac932c1 +.word 0x0d1c217b +.word 0x4ab2ec55 +.word 0xc4d68404 +.word 0x672d158e +.word 0x83c1094d +.word 0x68864c8e +.word 0x4f78f323 +.word 0xf939ebf6 +.word 0xf0ec4de2 +.word 0x0f056e8b +.word 0xfa4538cd +.word 0xa17345b9 +.word 0x9334ac7e +.word 0x6d19e4e3 +.word 0x66f97a6d +.word 0x6c8977e2 +.word 0x775efc9e +.word 0x70bb6f85 +.word 0xb946f847 +.word 0xcf0b269e +.word 0xeba160f2 +.word 0x4dde9f53 +.word 0x201a3af2 +.word 0xb2e2fd3c +.word 0xa945439c +.word 0x2eda283c +.word 0x8758cdc7 +.word 0xd927e3e7 +.word 0x39319168 +.word 0x0305e27c +.word 0xbc9af578 +.word 0x8d365e35 +.word 0xf78911d3 +.word 0x91f6e0bf +.word 0x34b27514 +.word 0xf27f5788 +.word 0xf973f150 +.word 0xfb8a94f3 +.word 0x94b2bcf5 +.word 0xd14be360 +.word 0x2907bbc0 +.word 0x37c13b1e +.word 0x853f81fe +.word 0x3043aa22 +.word 0xcd09f659 +.word 0x76663255 +.word 0x7839211b +.word 0xed1a30e4 +.word 0x6f7ea285 +.word 0x6769a6bb +.word 0xa5f643a9 +.word 0x64be13c6 +.word 0xce24229e +.word 0x1cdae533 +.word 0x90034102 +.word 0x285ce3a5 +.word 0xb759bfbb +.word 0x02839bca +.word 0x5b35edc0 +.word 0x9cde0515 +.word 0x847fa188 +.word 0x2e515f59 +.word 0xe4cab04b +.word 0xf7fefa05 +.word 0x07abf7f9 +.word 0x8ee0ef54 +.word 0x5a8093c6 +.word 0xee50c358 +.word 0x5cc795b7 +.word 0xf0d2fdfa +.word 0xb39d62a1 +.word 0x274d2b09 +.word 0xf5f79b6b +.word 0x295f20d3 +.word 0xa3139b13 +.word 0xe2758139 +.word 0xfe32f0f3 +.word 0x149cb4b8 +.word 0x610ac748 +.word 0x8858bc0e +.word 0x34a636da +.word 0xfbd62784 +.word 0xfa72bbac +.word 0x0288d9b9 +.word 0x67a5c82c +.word 0x8219296e +.word 0xba5d81b7 +.word 0x2759bdb2 +.word 0xdd24d8fc +.word 0x7bfdd9a1 +.word 0x72f9d38b +.word 0xcc98bb1d +.word 0x3bd9e7a7 +.word 0x8394f8a6 +.word 0x24b9d6b9 +.word 0xe3122099 +.word 0x2c9b8643 +.word 0x2c50f65e +.word 0xbcdde6a0 +.word 0x611fbbe5 +.word 0xfc278868 +.word 0x2cca7969 +.word 0xaa91fa37 +.word 0x6db61a5e +.word 0x2351bd2e +.word 0x7b8b08c1 +.word 0x0c233f79 +.word 0xfb137c8e +.word 0x9296557b +.word 0x26b9a942 +.word 0x725eea5c +.word 0xac71e534 +.word 0xbb7c5a82 +.word 0x22c7c652 +.word 0x776787db +.word 0xf38f8e80 +.word 0xd23d4a87 +.word 0x5b990b0f +.word 0x1e462cbc +.word 0x3fe13719 +.word 0xc1071cca +.word 0x19aa3800 +.word 0x35115d1c +.word 0x01a5fb48 +.word 0x62b74cdd +.word 0xf0471d9f +.word 0x91395735 +.word 0x3bd480e9 +.word 0x059f0df9 +.word 0xfb29198c +.word 0x69ca354d +.word 0x872af005 +.word 0x3ee17b1c +.word 0x9f6471d4 +.word 0xeee694e6 +.word 0x896770a9 +.word 0x5f185a95 +.word 0xec83ac8e +.word 0x10ec2b4a +.word 0x7a92a8da +.word 0xe582f4bb +.word 0x68cb674c +.word 0x564d4684 +.word 0xdd673830 +.word 0xa5f9edb0 +.word 0xb83aefa8 +.word 0x710de67b +.word 0x4281cc6b +.word 0x93aa143a +.word 0xe7f57412 +.word 0x6279cd46 +.word 0x67292c3e +.word 0xe35218b8 +.word 0x3e899a0b +.word 0x2a9cc1fe +.word 0x6efea3cb +.word 0xe9ad443c +.word 0x838fbbfd +.word 0x4b82ae9d +.word 0x4bd500b2 +.word 0x762f67a4 +.word 0xec539451 +.word 0x2ac3ad0b +.word 0x9f9818b4 +.word 0xfa7cff32 +.word 0xdf5cd0d9 +.word 0x8ad53199 +.word 0xfe428dc9 +.word 0x551b5bbc +.word 0x1305115a +.word 0x5592d28e +.word 0x5900443b +.word 0xebec8400 +.word 0x388acf01 +.word 0x1d284117 +.word 0x5634c013 +.word 0x74f1c7d9 +.word 0xeb58983a +.word 0x48d8d631 +.word 0x5337480b +.word 0x3f81a5fd +.word 0x33f75ac4 +.word 0x054142ed +.word 0xa7748eca +.word 0x4a57afe0 +.word 0x58a0036f +.word 0xaf1cad77 +.word 0x28c60944 +.word 0x2671f47b +.word 0x1483f43a +.word 0xe7266955 +.word 0xa165bca6 +.word 0x6ec6c2e8 +.word 0x04c3c036 +.word 0x8f24e20d +.word 0x18d26594 +.word 0xd6822ef0 +.word 0xfa56fdd7 +.word 0x6157a1b3 +.word 0x57f0821e +.word 0x2ad9e365 +.word 0xe595bbc0 +.word 0x294625e7 +.word 0x70fc32f9 +.word 0x1e214983 +.word 0x4451af2e +.word 0xefa8e1c4 +.word 0x77d4981b +.word 0x1ce8998a +.word 0x2d5f3d90 +.word 0x118eb32e +.word 0x85a6462d +.word 0xb3811662 +.word 0x3b6dfb0b +.word 0x148b6bd4 +.word 0x3980e94c +.word 0xfc357011 +.word 0xcde5fa3c +.word 0x829741a4 +.word 0x1b307a13 +.word 0x3fc14cbe +.word 0x006cf17b +.word 0x55fd0f4e +.word 0x103167cf +.word 0x9d80f329 +.word 0xb7b04e59 +.word 0x42eaa9ee +.word 0x5a63cdcd +.word 0x36760582 +.word 0x4df1e830 +.word 0xf1948a09 +.word 0x1ad8ac79 +.word 0x1b8f0a22 +.word 0xee78dc25 +.word 0xcdb8d974 +.word 0xd4ada503 +.word 0x0f7b28ad +.word 0x810dd897 +.word 0x2418494a +.word 0x91fa4564 +.word 0xf3e15be9 +.word 0x80b686b9 +.word 0xf7387894 +.word 0x6b02e8fa +.word 0x943c20c6 +.word 0x3b0c69b8 +.word 0x22057940 +.word 0x00092681 +.word 0x08161d13 +.word 0x49f5d22b +.word 0xef1c2b41 +.word 0xa400acc6 +.word 0x9ae0ea7c +.word 0x1d33af75 +.word 0x2f199ebb +.word 0xbe68f716 +.word 0xd1f70474 +.word 0x070a8a20 +.word 0xf607b339 +.word 0x9ac92cdb +.word 0x4667c7da +.word 0xfb8f2d1e +.word 0x9ea6fe17 +.word 0xb43e26ef +.word 0x9cdae366 +.word 0x4b9c0a51 +.word 0xded71faf +.word 0xc3a177b8 +.word 0x2174e590 +.word 0x6f795b90 +.word 0x9b1f8e96 +.word 0xc31682ac +.word 0xe189d60b +.word 0xee137cb3 +.word 0x4e403435 +.word 0x180801a7 +.word 0x58c4ea9f +.word 0x222d7e4f +.word 0xebf87963 +.word 0x42dd7018 +.word 0x63cdf4d4 +.word 0x5d7fd061 +.word 0x430f5669 +.word 0x666bccfc +.word 0x1ea8e95f +.word 0x09f33037 +.word 0xf765659d +.word 0xf3a2c1da +.word 0x3ae1ecfe +.word 0x5ac87240 +.word 0x89ca6eba +.word 0x4584a5cd +.word 0xa12c83db +.word 0x1584c7b0 +.word 0xeef9c0d7 +.word 0xdd7ff210 +.word 0x51e497e8 +.word 0x3e14d533 +.word 0xefc53bea +.word 0xf6d745d6 +.word 0x22a52335 +.word 0x1cf5eb47 +.word 0x6081c58e +.word 0x9582a42a +.word 0xbe68f01d +.word 0xa0feab27 +.word 0xab73eb78 +.word 0xcd6dc310 +.word 0xda44be54 +.word 0x0d11d953 +.word 0x7dad1d1c +.word 0x0525a62d +.word 0x70ae0919 +.word 0xcacf775a +.word 0x02fc0fcc +.word 0x1ad73177 +.word 0x4f4d2670 +.word 0x0bf31365 +.word 0x61ed893b +.word 0x465dd604 +.word 0x34c5f08f +.word 0x04d8a297 +.word 0x514e02da +.word 0x3edd3e8e +.word 0x7877fbdc +.word 0x23973271 +.word 0xf8b14632 +.word 0xcb203907 +.word 0x5a5229dd +.word 0x9771a295 +.word 0x25a94827 +.word 0xe121ba55 +.word 0xd801f7bb +.word 0xdabad410 +.word 0x27b79e9b +.word 0x61d5deca +.word 0x43a40a7e +.word 0x7fb3e09a +.word 0x61749cc0 +.word 0xebcb1308 +.word 0x683332fb +.word 0xce297a97 +.word 0xcb7beab1 +.word 0x7cea8948 +.word 0x10a7edc1 +.word 0x93ab7f04 +.word 0x04e36b58 +.word 0xfa6365a6 +.word 0x008e5234 +.word 0x09652d3f +.word 0x42b81142 +.word 0xaad745e6 +.word 0xd38740c2 +.word 0x00921762 +.word 0x65cb5bc0 +.word 0x951809dd +.word 0x4c57dc66 +.word 0xfb8315e1 +.word 0x5c3b11c9 +.word 0x542c2184 +.word 0xdf3b1dc1 +.word 0xebb7f862 +.word 0xd680cbec +.word 0x397ccc42 +.word 0xdf330f44 +.word 0x59b621ad +.word 0x39739b9e +.word 0x5fa2380d +.word 0xcfd64d05 +.word 0xb12c243a +.word 0xc75af12e +.word 0x8148bc9e +.word 0x76e58333 +.word 0xd24503ca +.word 0x168c99a8 +.word 0x47c90340 +.word 0xbbe91806 +.word 0xdcc501b5 +.word 0xa654ef83 +.word 0x9ac6b0ea +.word 0x2bb341f7 +.word 0x8c0988a3 +.word 0xeb5d1840 +.word 0x2ec34060 +.word 0xb13126ed +.word 0xed3daff8 +.word 0x96765f9a +.word 0x508c3276 +.word 0xc02a0426 +.word 0x00a125a4 +.word 0xe292e927 +.word 0xa829dac1 +.word 0x0694735f +.word 0x8315bcc3 +.word 0x41dd9eda +.word 0x9a5f78dc +.word 0x157ff804 +.word 0x1f45bed0 +.word 0xe50b9bd2 +.word 0x22976661 +.word 0x5d556fac +.word 0x31bd0eb3 +.word 0xa43c71b0 +.word 0x7e447dde +.word 0x9e0f8b84 +.word 0xd437080e +.word 0x318ce4fd +.word 0x958a32fe +.word 0xd40487ab +.word 0x5924a570 +.word 0x5ef0bc37 +.word 0x3c7ff739 +.word 0x561bd4e3 +.word 0x988e5199 +.word 0xea92579a +.word 0xed7908a6 +.word 0x38fb200a +.word 0xdd1209c1 +.word 0xb89fda31 +.word 0x526e3308 +.word 0x9e980fb7 +.word 0x408ff2b9 +.word 0xd9f27a5d +.word 0xed9926ed +.word 0xb1ef7e71 +.word 0x93cb840c +.word 0x96b3e40a +.word 0x3d33382f +.word 0x3570f8fe +.word 0x7eadaa90 +.word 0x310241de +.word 0xb74e9c45 +.word 0x9eb05e11 +.word 0x57b82346 +.word 0xb7852639 +.word 0x3642fe7f +.word 0xc832caf6 +.word 0x172a7ab0 +.word 0x1db81815 +.word 0x8414f2fd +.word 0x2ac3949a +.word 0xf09134c6 +.word 0x5e3145f1 +.word 0xfe87ae9d +.word 0x04c2a10a +.word 0xa945703d +.word 0x0724824f +.word 0x9f208187 +.word 0xae1231fc +.word 0xb8c86530 +.word 0xc2fd6f59 +.word 0x779a8b68 +.word 0x87522e80 +.word 0x60feb5ec +.word 0x03bde6cc +.word 0x4b187bf8 +.word 0x250e98b7 +.word 0x02aa6a11 +.word 0x595dd869 +.word 0x45c34f34 +.word 0xce120daf +.word 0xa169cb01 +.word 0x91f21be7 +.word 0x44e4c6c3 +.word 0xfbf5fd28 +.word 0x12dbb2f7 +.word 0x3fe1dfab +.word 0xca4a9b5f +.word 0x4dd4428f +.word 0xf216f3db +.word 0x0c1e6160 +.word 0xcf5cd230 +.word 0xc6f4533b +.word 0xfb25308c +.word 0xb337f3d9 +.word 0x38aebc2d +.word 0x84a7bd18 +.word 0x491f6eaa +.word 0xf92bbeff +.word 0xb0c1e98c +.word 0x7d25c134 +.word 0xcb4ca2fa +.word 0xf448c929 +.word 0xb333d557 +.word 0xb962fabe +.word 0x2489cd24 +.word 0x78838ab4 +.word 0x4f59c3d2 +.word 0x5860f611 +.word 0xbeff158d +.word 0xc9bd6fd8 +.word 0xc21389ba +.word 0xb8403488 +.word 0xbad57f6d +.word 0x2868e263 +.word 0x12693388 +.word 0xfbee1116 +.word 0x81d3fb5f +.word 0x68714971 +.word 0xfac2824f +.word 0xa3a88045 +.word 0x2e49401e +.word 0xc0003cb4 +.word 0x0ed8b767 +.word 0x7eccc6e6 +.word 0x53f140c2 +.word 0xc386c471 +.word 0xf8c4b181 +.word 0x83ae2577 +.word 0xc83ff939 +.word 0x8ca6524c +.word 0x09bb3f58 +.word 0x5bce48be +.word 0xbacbc5bc +.word 0x2d60a9a9 +.word 0x00b1ca67 +.word 0x88965cd0 +.word 0x68f1b43f +.word 0x952d06f8 +.word 0xe0bae41f +.word 0xcb515ff1 +.word 0x1a6931e0 +.word 0x617adf75 +.word 0x9bc30d2c +.word 0x672d0012 +.word 0xf7aca595 +.word 0x5b509a61 +.word 0xcea690eb +.word 0x968a154b +.word 0xa39c6fc8 +.word 0xd770b7eb +.word 0x62934329 +.word 0xf1ab74f7 +.word 0x3c5fcc6c +.word 0x7862023d +.word 0x37141d41 +.word 0xfa95c665 +.word 0xb212c9b4 +.word 0xbdf6270b +.word 0xa5d12ecd +.word 0xa84b4f49 +.word 0x84ed0f4e +.word 0x9af22dea +.word 0x29fd232c +.word 0x9482aec9 +.word 0xb766f924 +.word 0x87aa013f +.word 0xde241221 +.word 0xce032ae7 +.word 0x5e0e4f37 +.word 0x41589bd9 +.word 0x9c4d125f +.word 0xe867c8a4 +.word 0x8e39181b +.word 0x2be32893 +.word 0xdceeddb6 +.word 0xa71ffce6 +.word 0x18c765fa +.word 0x121a9341 +.word 0x976e324d +.word 0xc21996da +.word 0xedad95da +.word 0xf1da9196 +.word 0xdab68946 +.word 0xe3502602 +.word 0x95756b78 +.word 0xe36df6b3 +.word 0xb1bb8a49 +.word 0x7cc063a7 +.word 0x147a29de +.word 0x74b0462d +.word 0xf794b5e7 +.word 0xc7597091 +.word 0x953dfc34 +.word 0xab7222b8 +.word 0xd1febb13 +.word 0x44e9d8be +.word 0xad043117 +.word 0x5087c1e9 +.word 0x91dd6624 +.word 0x07501496 +.word 0xa63e4eaf +.word 0xdb710845 +.word 0x9cdf8d7e +.word 0xa049c529 +.word 0xb09c5d52 +.word 0x66a80f20 +.word 0x02cc47b8 +.word 0x52972b53 +.word 0xab2ca150 +.word 0x664b4c4e +.word 0x55bd11e0 +.word 0xcf949d60 +.word 0x45d641ec +.word 0xdeb162a3 +.word 0xfe9274f8 +.word 0x1e30578c +.word 0x7572c10e +.word 0x6cd9c7bc +.word 0x3f225344 +.word 0xbf0c4171 +.word 0x59d003ff +.word 0x58afa239 +.word 0x588da923 +.word 0x8d7b57a0 +.word 0x8423dbaa +.word 0x424e5f51 +.word 0x71e9b133 +.word 0xc63ddab2 +.word 0xcb53879d +.word 0x516f19a8 +.word 0x75b3b727 +.word 0x9379ef3f +.word 0xf26b979f +.word 0xede8744f +.word 0xacaa31db +.word 0x46da93fd +.word 0x4cdca58c +.word 0x1e7a08a1 +.word 0x005eccb3 +.word 0xa507b5be +.word 0x6d54e672 +.word 0x3823828e +.word 0x0a24631a +.word 0x2790169a +.word 0x952a6525 +.word 0xa4094b63 +.word 0x59177c2d +.word 0xd78022a4 +.word 0x843b828f +.word 0x158bc527 +.word 0x024e70f1 +.word 0xf9c9d58f +.word 0xe77910ec +.word 0x75d7c5f1 +.word 0x0b3d0895 +.word 0xac923f26 +.word 0xc4b1188f +.word 0x3a6aaf8a +.word 0x3e15f808 +.word 0xcb77dac0 +.word 0x3c049690 +.word 0xca509cf6 +.word 0x48ef3fec +.word 0x3bd7ddff +.word 0xa5140689 +.word 0x0a4d09a4 +.word 0xbb61d201 +.word 0xec8ed259 +.word 0x19b0a60a +.word 0x68f8bd7c +.word 0x02573be3 +.word 0xd12e7861 +.word 0xbe591b91 +.word 0xecf20be4 +.word 0xdcf549a7 +.word 0x0319d381 +.word 0xb133e9ba +.word 0xd5b047eb +.word 0x91d1a183 +.word 0x368606f2 +.word 0x374b7732 +.word 0xab95afee +.word 0x2bca849a +.word 0x0b25b319 +.word 0xe326956a +.word 0x6a347484 +.word 0xa650d1bc +.word 0x1db40547 +.word 0x773e425d +.word 0x5ed4dfa2 +.word 0xebe5e1d2 +.word 0x2601a97b +.word 0xddc3ad61 +.word 0x27a12381 +.word 0xc81276f0 +.word 0x6a0727a7 +.word 0x1772407a +.word 0xc5e889fa +.word 0x4b792e6a +.word 0xf1fcad94 +.word 0xd2372e59 +.word 0xb78216b4 +.word 0xd32f871a +.word 0x8a8f1e2e +.word 0x07d97ad6 +.word 0x11762476 +.word 0x108651d1 +.word 0x420701d1 +.word 0xd2df70b3 +.word 0xb39c8988 +.word 0x7203f36e +.word 0x63eb5155 +.word 0xba9e63da +.word 0x5cb1601e +.word 0xde28570e +.word 0x9f1239c9 +.word 0x343f4f24 +.word 0xce25f2b5 +.word 0x1bbecf49 +.word 0xa43c0b09 +.word 0x94228278 +.word 0x1ee9c670 +.word 0x7e669a14 +.word 0xc6f3849a +.word 0x92244bc6 +.word 0x1aff79e8 +.word 0x46456eea +.word 0x54325d99 +.word 0xca2fa1e2 +.word 0x000c55ab +.word 0xddad16eb +.word 0xdb8f8d90 +.word 0xc0cddbf2 +.word 0xde7cc5a4 +.word 0x08565944 +.word 0x836d634b +.word 0xe03fdec4 +.word 0xe34d1090 +.word 0xe1849957 +.word 0x85d8c261 +.word 0x354c9769 +.word 0x20f196eb +.word 0x8083fbd0 +.word 0x56834be5 +.word 0xf2d99655 +.word 0xc6460e25 +.word 0x48c78d3e +.word 0xa4e7bee4 +.word 0x660b41df +.word 0x0d68f141 +.word 0x30578904 +.word 0xea1b4b36 +.word 0x8daab282 +.word 0xadd3ce96 +.word 0x477f097c +.word 0xa1fb52d1 +.word 0x170e0661 +.word 0x5dc31e1e +.word 0x0deb4397 +.word 0xe7df0f51 +.word 0xe9e61dda +.word 0x80442bc1 +.word 0x8a151bcf +.word 0xda9e970a +.word 0xa0518bec +.word 0x50ba6f2a +.word 0xff0b52a3 +.word 0x17a7f9e9 +.word 0x9718a7f1 +.word 0x656d454e +.word 0x79b0c798 +.word 0x99efb6cb +.word 0x7275d467 +.word 0x42305c45 +.word 0x88c98cf2 +.word 0xeca6b17e +.word 0xaeda0fda +.word 0xc594a58b +.word 0xf44866ee +.word 0xbe698b38 +.word 0xcb46eaa9 +.word 0xcf71cfdf +.word 0xfe2b2efb +.word 0x9f98531d +.word 0x0e9053b9 +.word 0x6fa1044b +.word 0x27ec854f +.word 0x9ea7341e +.word 0xd2f49886 +.word 0xcb10212c +.word 0x17c34c97 +.word 0x09c247d3 +.word 0xd92e63fd +.word 0xe1c4dd16 +.word 0x46a30d7d +.word 0xa85f8d3f +.word 0xfc11057d +.word 0xd30c231d +.word 0x0207b446 +.word 0x7bd34195 +.word 0xfce1e8a7 +.word 0x6ea220d4 +.word 0x65e984bc +.word 0xc9de3a6d +.word 0x6d5b7fb6 +.word 0x73a1469a +.word 0x9a1de875 +.word 0xca89f0b6 +.word 0x62573e18 +.word 0xa6346c87 +.word 0x3c618273 +.word 0x4861da60 +.word 0x0df83fc7 +.word 0x7c22fafd +.word 0x3afdc4ae +.word 0x8afb7f32 +.word 0xd631fc05 +.word 0xc8ae8e74 +.word 0x232c3087 +.word 0xa2c516ee +.word 0x566a7700 +.word 0x8a0ab8cb +.word 0x6bc56105 +.word 0x61a71a13 +.word 0x04ef9fc9 +.word 0xa8524c36 +.word 0xa4b45ca7 +.word 0x743c7f77 +.word 0xcaa06db8 +.word 0xc1dc4c9f +.word 0xef0568b0 +.word 0x213f4467 +.word 0x0da85492 +.word 0x5f2a36fb +.word 0xaf17b63e +.word 0xb6f10e93 +.word 0xb74904cb +.word 0x6f008b27 +.word 0x5ede7eee +.word 0x8b190f3e +.word 0xe4388355 +.word 0xc2e3908c +.word 0x275ce094 +.word 0x074166ca +.word 0x3693833e +.word 0x6e501adc +.word 0xbc6c930c +.word 0x69106ec3 +.word 0xe78d3a57 +.word 0xcd7020b9 +.word 0x8a5431e5 +.word 0x5399b6a4 +.word 0x49b2feed +.word 0x902d919d +.word 0xd321124b +.word 0x65d6114a +.word 0xd240ef60 +.word 0x30445117 +.word 0xbe55ae4d +.word 0x997766cd +.word 0x2b29c46d +.word 0xc4b0f5ff +.word 0x41af83c6 +.word 0x01a548a0 +.word 0x4bff0e10 +.word 0xdb852189 +.word 0x47eabb1a +.word 0x54b43d5c +.word 0x75d86465 +.word 0xcbabf3fc +.word 0x5e3ec766 +.word 0xdd7f1224 +.word 0x65145936 +.word 0x664157e7 +.word 0x73cdddc2 +.word 0xc26aa462 +.word 0x3e96f8cf +.word 0x4d9e124f +.word 0xa09d8804 +.word 0xc090b063 +.word 0xe5687f5d +.word 0x6186d282 +.word 0x9802b221 +.word 0xf017e968 +.word 0x0bf2ff3c +.word 0xcb08ee89 +.word 0x754af664 +.word 0xc685682f +.word 0x00747ea3 +.word 0x1b68ac17 +.word 0x2ebf1d4c +.word 0x5863122d +.word 0x9e53ebab +.word 0xa5a4ba62 +.word 0x6eca590f +.word 0xb362280a +.word 0xa5b7ea74 +.word 0x79774bfb +.word 0xe04df78a +.word 0xcc7132b6 +.word 0x6d2cd1e3 +.word 0x991c15c2 +.word 0xd5b645d1 +.word 0x79534a24 +.word 0x54ff0490 +.word 0x0648de49 +.word 0x40ec7c06 +.word 0x41abb8ec +.word 0x42e0076e +.word 0x003e49ff +.word 0x218443ea +.word 0xf6940036 +.word 0x3bb0d11c +.word 0x7fa144dc +.word 0x00f73ba2 +.word 0xe16d2157 +.word 0xe2eb6e03 +.word 0x71381e6f +.word 0x0bf48a55 +.word 0x2202c087 +.word 0xc05bc509 +.word 0x2ed3d774 +.word 0x3e1288ac +.word 0xb4fc0c39 +.word 0xe7a25c73 +.word 0xff2cf512 +.word 0x84d21e33 +.word 0xf0ba7f0f +.word 0x83df1766 +.word 0x7f2f1269 +.word 0xad7db4b5 +.word 0xba8c0226 +.word 0x5ca0ea8f +.word 0x883899fb +.word 0xd88a010d +.word 0x85f001ac +.word 0x48900501 +.word 0xd12ea752 +.word 0x9cda41ee +.word 0x3497e1aa +.word 0x859b5aff +.word 0x2209f891 +.word 0x7ac89187 +.word 0xa27107ee +.word 0x0ed174e1 +.word 0x8edad381 +.word 0x0bb50eeb +.word 0xc67d7601 +.word 0x12ce6dc1 +.word 0x2f297ff5 +.word 0x01150cb3 +.word 0x995dabe0 +.word 0x70983821 +.word 0x589397de +.word 0xedf6f5b0 +.word 0x03d294b1 +.word 0xb08aee18 +.word 0xbc4c8167 +.word 0xb9c7db66 +.word 0x81c05520 +.word 0xe1f4e0b1 +.word 0x1a526f3c +.word 0x7aa8bab8 +.word 0xb7da3b10 +.word 0xf7ad48d0 +.word 0x241bbd99 +.word 0xd85eef78 +.word 0xdd296f5f +.word 0x285f922f +.word 0xab5ce80b +.word 0x5fb7456a +.word 0xe69c65fb +.word 0x7495fc53 +.word 0xa402ce52 +.word 0x2585a17f +.word 0x3b9d35fb +.word 0x4cdb90a6 +.word 0xeaf116c8 +.word 0xc7abc4ed +.word 0xbab08c37 +.word 0x6392dc23 +.word 0xb87da639 +.word 0x7482afa6 +.word 0xd0283d14 +.word 0xd174cb26 +.word 0xdf7a0846 +.word 0x85bf39ed +.word 0x045bb240 +.word 0xf9576f04 +.word 0x69272f04 +.word 0x2bfd7dc7 +.word 0xe475dca6 +.word 0xceeb89e2 +.word 0xfb3a096e +.word 0xec1e958b +.word 0x10701822 +.word 0xc865fea4 +.word 0x36ebdf65 +.word 0xa07cca70 +.word 0xb7252146 +.word 0x9ee9b03e +.word 0x3539364a +.word 0x837f6dac +.word 0xffe0f1c3 +.word 0xb5515ddf +.word 0xfe615957 +.word 0x0631f1c1 +.word 0x0dae5a55 +.word 0xc6f42bd3 +.word 0x4477089e +.word 0x40a36e16 +.word 0xb8e2f196 +.word 0x77fca52a +.word 0x48b96fc6 +.word 0x0765f5f7 +.word 0x21babeef +.word 0x2b1f64cb +.word 0x6c5f429a +.word 0x8932e7ce +.word 0x015517c5 +.word 0x12905170 +.word 0x93c90ac4 +.word 0x3e61ef0f +.word 0x160a170f +.word 0x0bc14454 +.word 0x725fb40d +.word 0x065512c9 +.word 0x67a026e7 +.word 0x20937709 +.word 0x9f31bf07 +.word 0xe3036886 +.word 0x640daf6d +.word 0x4b88b04a +.word 0x7390208b +.word 0x2b8b18e6 +.word 0x55ff96c7 +.word 0x8eef9074 +.word 0x8acb2c0c +.word 0x1c097fba +.word 0x18f94196 +.word 0xbdf9facb +.word 0xd25f28a6 +.word 0x650ccf8f +.word 0x04e3c930 +.word 0x4a92e304 +.word 0x9454dd37 +.word 0x754b51e8 +.word 0x2fbf735a +.word 0x15a9b253 +.word 0x7d08b63a +.word 0xb2695720 +.word 0x1721ad36 +.word 0x32c3d61a +.word 0xf54fb7db +.word 0xd8a4b24b +.word 0xbbcf23b8 +.word 0x7c7d6352 +.word 0x7d9a57a3 +.word 0x2e761a66 +.word 0xaf62a4d4 +.word 0x32844a4a +.word 0x4a338588 +.word 0x8238924a +.word 0x358949b0 +.word 0x8671e070 +.word 0x6f2e34f3 +.word 0xe59b5566 +.word 0x3b6d4bfb +.word 0x27868cd2 +.word 0x00c7b1e2 +.word 0x9359312f +.word 0x7df93db4 +.word 0x015d1de5 +.word 0x6a3c4467 +.word 0xa0c982df +.word 0x9241e721 +.word 0x1613c1c4 +.word 0xc7791f57 +.word 0xa0112332 +.word 0x43616c35 +.word 0x55a3260d +.word 0x67c15ce0 +.word 0x1d392574 +.word 0x4e4d5e38 +.word 0x9ff2ba37 +.word 0x0f27b306 +.word 0xd14b1ef5 +.word 0x52a0820d +.word 0xb35b5c91 +.word 0x0898b48e +.word 0xc844e5b8 +.word 0x89e06c4e +.word 0xcc41a866 +.word 0xd4567a72 +.word 0xae03c227 +.word 0x7bf6556b +.word 0x296ef2cd +.word 0xbe72bdd8 +.word 0x9ce9fed3 +.word 0x984ee61a +.word 0x2bf6b404 +.word 0x60845ad3 +.word 0xb362b68d +.word 0x20734b1b +.word 0xeff56cd7 +.word 0x7f031f52 +.word 0x1725a325 +.word 0x2f3de16a +.word 0xfde10f30 +.word 0x30f3e61b +.word 0xc054f30c +.word 0x6ac303da +.word 0xcf2bacd3 +.word 0x41a9c128 +.word 0xe12c3968 +.word 0x1a75e34c +.word 0x30cc4ad3 +.word 0x1f0beafe +.word 0xc3f4c6af +.word 0x1df4c330 +.word 0xe29e49be +.word 0xedb81ee4 +.word 0x5dedbecd +.word 0x91168efa +.word 0xd9c6042c +.word 0xdd47d1f3 +.word 0x2daca8b8 +.word 0xdbfb9a12 +.word 0xaf8f3c68 +.word 0x5d644808 +.word 0x724d72ca +.word 0xbf1f3d69 +.word 0x9bf96d4a +.word 0x33674c8a +.word 0xf0f8c47e +.word 0xd5daa191 +.word 0x97840cd6 +.word 0xdcb72b92 +.word 0x4c7c7c8b +.word 0xc44a9b35 +.word 0x6481d96d +.word 0xfbb1f0b3 +.word 0x203f61e4 +.word 0x823472a9 +.word 0xb371398d +.word 0x14cf75fc +.word 0x7ba06d3b +.word 0x4a4e73af +.word 0x8cd7ce67 +.word 0xaba94090 +.word 0x3ca26e7f +.word 0x53c69a42 +.word 0x5ce840ac +.word 0x9b049822 +.word 0xa5b3335f +.word 0x5442038a +.word 0x41472e9e +.word 0x4bfdbeaa +.word 0x9c27c16d +.word 0x895a6ea1 +.word 0x75ecaf5c +.word 0x46e991bd +.word 0xc8e48abb +.word 0x8972771d +.word 0x27fbf3dc +.word 0x7b946827 +.word 0xf5aa0f46 +.word 0xc7c4e2cf +.word 0x02031290 +.word 0xbc864bd1 +.word 0x2178e7a5 +.word 0x5b81e728 +.word 0x00a3ca70 +.word 0x66939414 +.word 0x272c5e68 +.word 0x96583f1b +.word 0xa6e10dde +.word 0x27410224 +.word 0x48082290 +.word 0xfe76a2c2 +.word 0x0c2e03f5 +.word 0xa3bebc10 +.word 0xb188615c +.word 0x93c0f909 +.word 0x71322a28 +.word 0xb8d30aad +.word 0x83a738f8 +.word 0x43e8aa59 +.word 0xe30541b6 +.word 0x4ec2a9a2 +.word 0xaa8c2f7d +.word 0xacb6092b +.word 0xec02a0d8 +.word 0x8665ee45 +.word 0x8d93d28c +.word 0x6f39c18d +.word 0xfd672dff +.word 0x7606a0da +.word 0xedda5371 +.word 0x4961bc9a +.word 0x2f790a5c +.word 0x3048f83f +.word 0x03cc5ef9 +.word 0x3eadfc5f +.word 0xa59a3581 +.word 0x4a7d0a6d +.word 0x5a29e7d0 +.word 0x88c4aca6 +.word 0x66b32f89 +.word 0x1bc4dfe2 +.word 0x01d40337 +.word 0x8d6b4163 +.word 0xc43d986e +.word 0x45eaa549 +.word 0x8a4602aa +.word 0x3b172bf8 +.word 0x7363becb +.word 0x9ebda511 +.word 0x5b899448 +.word 0xde1045ec +.word 0xf70d3f40 +.word 0x16c4ba89 +.word 0xae6da812 +.word 0x491bd276 +.word 0xe6607d1c +.word 0xede7b29d +.word 0xc86c5398 +.word 0x6e15dcd8 +.word 0xee7c0995 +.word 0x11579451 +.word 0x24124ac3 +.word 0x2c32ce26 +.word 0x8d3a45a6 +.word 0x56db2a6d +.word 0x71bfb43f +.word 0x9f487cc8 +.word 0xef0a624d +.word 0xe738815c +.word 0x62dd5d9a +.word 0xd44e6218 +.word 0xafaaf55d +.word 0xc17d505b +.word 0x224abc65 +.word 0xa00d553a +.word 0x45ebeb76 +.word 0x110c3a63 +.word 0xc0966249 +.word 0x3414a8fa +.word 0x09d4b31b +.word 0xfa12b547 +.word 0x7f94e3d6 +.word 0x77f2eef4 +.word 0xa90357c7 +.word 0x07a7f495 +.word 0x246306dc +.word 0x308d18cf +.word 0x77109951 +.word 0x0eab801e +.word 0x1fdb08e0 +.word 0x003c1a45 +.word 0xb47706e9 +.word 0x3d46af5d +.word 0x00a7fd70 +.word 0x25489086 +.word 0xbdf000f8 +.word 0x9dc40812 +.word 0x52ffd7f7 +.word 0x06c7c985 +.word 0xbfbeea44 +.word 0xced73157 +.word 0x55299895 +.word 0xe52df8ff +.word 0xcb6cb779 +.word 0x03820428 +.word 0x84596062 +.word 0xcd4441a7 +.word 0x3cdd4500 +.word 0xa8998773 +.word 0xf5fa9e08 +.word 0xd24d2aca +.word 0x739d67d9 +.word 0x224bfeb2 +.word 0x57f0e3bb +.word 0xe155b63e +.word 0x50ae6db0 +.word 0x98f9644b +.word 0xdad30f5e +.word 0x7bc69e6c +.word 0xabfba967 +.word 0x46e551f0 +.word 0x05fd705b +.word 0xfce49a47 +.word 0xf5666fdf +.word 0x859cd6f2 +.word 0x50b0d563 +.word 0xa37822c8 +.word 0xec2a05e3 +.word 0x73318d65 +.word 0x414f4bc7 +.word 0xa34fc426 +.word 0x442888a2 +.word 0x57cd45bc +.word 0xe499ee30 +.word 0x24ec45bb +.word 0xe069394b +.word 0x3d3530b0 +.word 0xac7df8bb +.word 0x45158958 +.word 0x649810ca +.word 0xaec4ae4e +.word 0x21dd49d7 +.word 0x82147ef1 +.word 0x0cc195b7 +.word 0xb372f1a8 +.word 0x437a77a2 +.word 0x9710e548 +.word 0x7079fbcd +.word 0x919561d6 +.word 0xfc9930f0 +.word 0x00528493 +.word 0xbfac9bc6 +.word 0xdf47cba5 +.word 0xcb6a4867 +.word 0x33b82b07 +.word 0x0d0e1371 +.word 0x017a7761 +.word 0x58e85482 +.word 0x7a176af8 +.word 0xb468ab40 +.word 0xdadca372 +.word 0x7b8c1620 +.word 0x5bfd85a9 +.word 0xa5a6996a +.word 0xa6b4f6b2 +.word 0x933d44e9 +.word 0x0f57ed70 +.word 0x7a06fe30 +.word 0xa1b0beeb +.word 0x11369716 +.word 0xfa387c83 +.word 0x5283ed77 +.word 0x8343df18 +.word 0x6aef60b4 +.word 0xcb3948bd +.word 0x8d6a7d05 +.word 0x2784899c +.word 0x08d33e4c +.word 0x969b578e +.word 0x6406615b +.word 0xaa82d05a +.word 0xea82c335 +.word 0x6ea6d7f9 +.word 0xff6e1876 +.word 0xa8a18c3b +.word 0x8347f689 +.word 0x8a8b5426 +.word 0xcfc79f9d +.word 0xd4a858fe +.word 0x4b591181 +.word 0x392fa4a4 +.word 0x46f78025 +.word 0x6268ddda +.word 0x5579b7cb +.word 0xdd67f677 +.word 0xed058eff +.word 0xb1e66fda +.word 0xdbd71f2d +.word 0x7f22aec4 +.word 0x01a44f67 +.word 0x8fc6eecf +.word 0x1a1d335a +.word 0x30ee82c6 +.word 0xf0cb2620 +.word 0xe2c1259d +.word 0x502b25ea +.word 0x6c70dc97 +.word 0x3320c51f +.word 0x2ecb6ffb +.word 0xd6b56a04 +.word 0xdfce75fd +.word 0xfe2d9764 +.word 0x779d8c2b +.word 0xa1ff3ed7 +.word 0x05522221 +.word 0x5e123a05 +.word 0xa987d9a5 +.word 0x45e76c17 +.word 0x40735d8b +.word 0x0ebe8903 +.word 0x87a8830e +.word 0x73c03904 +.word 0x95552427 +.word 0x50f6e1af +.word 0x8fc1aa2a +.word 0x9e9f06fe +.word 0xac2c4a0f +.word 0xc3351cd7 +.word 0x7ca2cc16 +.word 0x8400aaa5 +.word 0x1494855f +.word 0xb96b87ed +.word 0x753f93bf +.word 0xd2659071 +.word 0xb6aaaa8c +.word 0x8f55cdf1 +.word 0x02ac6fb1 +.word 0x86c663f2 +.word 0xfd6db375 +.word 0xf0a637e5 +.word 0x47f5a89b +.word 0xdd1f35b8 +.word 0xf031afe6 +.word 0xca5d1f45 +.word 0xd5082951 +.word 0x3a53abdb +.word 0x6cdd6dde +.word 0x0ad141c9 +.word 0x992da931 +.word 0x7793d984 +.word 0x3563583f +.word 0xb02b2a82 +.word 0x0ab9090c +.word 0xda4fb804 +.word 0x6db872bc +.word 0x3370f3f4 +.word 0x3aa5d5ac +.word 0x1e2364de +.word 0x4d88dc88 +.word 0x984c0585 +.word 0x24e5b3d5 +.word 0xf31b7026 +.word 0xdfb263b2 +.word 0xd51dfde7 +.word 0x03041f40 +.word 0x8378df51 +.word 0x0dceee11 +.word 0x77ce3228 +.word 0x7a7ea0c2 +.word 0x4d27fee5 +.word 0xe0393451 +.word 0x283b9fa0 +.word 0xb97b4ed7 +.word 0xca2a42fb +.word 0xc34ed0b8 +.word 0xf6628dc2 +.word 0x5bbe9fdc +.word 0x884dc4b7 +.word 0x332d3279 +.word 0xa9ee0379 +.word 0x134c1794 +.word 0x7310866c +.word 0xf006b7a7 +.word 0x8be52dc5 +.word 0x26062604 +.word 0x7ec6474e +.word 0x3ab7be2f +.word 0x6860d70d +.word 0xa10f8deb +.word 0xb4113785 +.word 0xdc8d824d +.word 0x51c2ceab +.word 0x961f5a17 +.word 0xdc8df109 +.word 0xfabc8507 +.word 0x9a65752e +.word 0x9a3f8fb3 +.word 0x2d924590 +.word 0xed90dcb4 +.word 0xe16e02f9 +.word 0x949d7dd5 +.word 0x95dc4652 +.word 0x4b6ea796 +.word 0xf000df17 +.word 0x9da832f2 +.word 0x3d4b556e +.word 0xb0427c99 +.word 0xe9920ba5 +.word 0xfcd1440d +.word 0x516f3f8f +.word 0x1c8257ab +.word 0xf2521dbc +.word 0x4cec7e9b +.word 0x35670a88 +.word 0xff725db8 +.word 0xf4d54d9a +.word 0x76c2eda0 +.word 0xb8443fbb +.word 0x0f00a1b2 +.word 0x4a647442 +.word 0x51c7c2be +.word 0x9d5a3b2b +.word 0x11d17a3e +.word 0xfaa5229b +.word 0xc112ca9d +.word 0x70aa52ff +.word 0x9a0ebfa4 +.word 0x1bc94f55 +.word 0x6f2faafc +.word 0xc14e0c10 +.word 0x8dfd4d57 +.word 0x897ae85f +.word 0x4e503af4 +.word 0xe478bda4 +.word 0xac043390 +.word 0x86b9aa03 +.word 0xc6906c12 +.word 0x3730694b +.word 0x19c1d743 +.word 0xbe59fbda +.word 0xdd992db0 +.word 0xc37e3f9b +.word 0xadfe1b2a +.word 0x90898059 +.word 0x6a4a64f1 +.word 0x2057d379 +.word 0xd264dddb +.word 0x9ecc98fc +.word 0x71c8aab3 +.word 0x8f3c11e0 +.word 0xb47542d0 +.word 0x8c3e5b35 +.word 0x4cde7867 +.word 0x5ce1881e +.word 0x950c2485 +.word 0xb018e72f +.word 0xcab73433 +.word 0xb275174d +.word 0xd225f295 +.word 0xd76e104a +.word 0x28e1063e +.word 0xa3ab981d +.word 0x0ef59342 +.word 0x7cf03c21 +.word 0x127f9188 +.word 0x726e1328 +.word 0x344d7310 +.word 0x100bccd1 +.word 0x9d6cfd6e +.word 0x432e933a +.word 0xe161a0b2 +.word 0x13e98c52 +.word 0xf92bf7ac +.word 0x3142aba8 +.word 0xabc2aa91 +.word 0x38b32455 +.word 0xaa474b05 +.word 0x7cf81d4d +.word 0x554077aa +.word 0x9d16aa8d +.word 0x9e031f7d +.word 0xd327d6a2 +.word 0x50120755 +.word 0x26822431 +.word 0xb1e68917 +.word 0x0c8925a2 +.word 0x404526ab +.word 0x77c1bd08 +.word 0x9798f4ae +.word 0x1226137e +.word 0xb0cc4228 +.word 0xf650c75a +.word 0xc63711c7 +.word 0x12319c8f +.word 0xf11b1bcf +.word 0xa62c4c89 +.word 0x8872c5c7 +.word 0x779bdbb4 +.word 0x1b19bb3a +.word 0xb0a3bb9f +.word 0x61bef60d +.word 0x68b671ae +.word 0xa113b491 +.word 0xece3e754 +.word 0x864cc604 +.word 0x0d8b0445 +.word 0x8f42c95b +.word 0xb945ba69 +.word 0xacda6eb5 +.word 0x44f5e09c +.word 0xa8122b6b +.word 0x2566d191 +.word 0x6fa3258f +.word 0x9cc19891 +.word 0x8ab96e9a +.word 0x1f737fd5 +.word 0xd1f71e35 +.word 0xc3469c8b +.word 0xda766194 +.word 0x11d1ed38 +.word 0xf7bca5ad +.word 0x51360ccf +.word 0x42c6cd83 +.word 0xac6bda10 +.word 0xa8bfdbfd +.word 0xab135bbc +.word 0x715e3c4e +.word 0xdc514f70 +.word 0x365b5077 +.word 0x982effda +.word 0xaffb856e +.word 0x78085c6c +.word 0x0b7082eb +.word 0xd6731614 +.word 0x9b4b4b5a +.word 0x4460c218 +.word 0xa7e3c30e +.word 0x00990fcf +.word 0xffc83f86 +.word 0x2da98235 +.word 0xfeaf2f32 +.word 0x9434270b +.word 0xdfaa94d6 +.word 0x7d13f48a +.word 0x9fafcbee +.word 0x3e9fa197 +.word 0x6afee9c5 +.word 0xfdaddcd8 +.word 0xf29af2f4 +.word 0xa4183924 +.word 0xd7372998 +.word 0x1c3fb7e3 +.word 0x48c68bcb +.word 0xad9cc940 +.word 0x91122eb8 +.word 0xc2a12f6c +.word 0xc06f2473 +.word 0xe6e4c944 +.word 0xf62191de +.word 0xabbde670 +.word 0x1e16c833 +.word 0x9463f75e +.word 0xbed70a8c +.word 0x054ff0c4 +.word 0xf9b76c17 +.word 0x7db3b1d4 +.word 0x31913ceb +.word 0x7f0738c7 +.word 0xbabc453f +.word 0xf30340bc +.word 0x5d26b666 +.word 0xb8247d9b +.word 0xf7a0eaef +.word 0xe527c4df +.word 0x41ec1c98 +.word 0x413d55ad +.word 0x53cae635 +.word 0xc2a97502 +.word 0xc7467c37 +.word 0x3e493a61 +.word 0x5ac04a97 +.word 0xf0f21b0f +.word 0xa7ea05bf +.word 0x4254afa2 +.word 0xc68586e6 +.word 0x5b3223f6 +.word 0xf98cfaf8 +.word 0xd1b10f29 +.word 0xd7ad701e +.word 0xd9f95910 +.word 0x1949ec8b +.word 0x0b9b8ab7 +.word 0x09e8f917 +.word 0xe8015c57 +.word 0x2eac5119 +.word 0x5fd078fe +.word 0xd2a1b9db +.word 0x2964f407 +.word 0x9a7cda08 +.word 0xfd7bb78a +.word 0x89dc945d +.word 0xd2590bcc +.word 0x9838340e +.word 0xfac549ab +.word 0xef774d3b +.word 0xef79358f +.word 0xfb7db504 +.word 0x00d93d6c +.word 0x617363e5 +.word 0xf7f2b715 +.word 0xfb9bacc8 +.word 0x83d40598 +.word 0x63039d8e +.word 0x07bdde3e +.word 0x9978e008 +.word 0xca78bc7c +.word 0xcbcb86ef +.word 0x4d326ff0 +.word 0x524cbe28 +.word 0x26226ab4 +.word 0xf68422a7 +.word 0x0d037250 +.word 0x3cf62b8a +.word 0xaf3af556 +.word 0xfb10f552 +.word 0x2057e66b +.word 0xf642dbaa +.word 0x9a756451 +.word 0x793ccf3d +.word 0x557745a7 +.word 0x43ec02fe +.word 0xd13b65c9 +.word 0x9c70f04a +.word 0xfed57db0 +.word 0xfc338319 +.word 0xf3d65a26 +.word 0x8f378f1f +.word 0x9acde669 +.word 0x031447a0 +.word 0xb255af38 +.word 0xdedf6da3 +.word 0xe684fc5a +.word 0xb641d8de +.word 0x01298a8e +.word 0x0e29a7c5 +.word 0xaf610e79 +.word 0xd1757445 +.word 0x250882db +.word 0xfb8fdae7 +.word 0xec5b9582 +.word 0xc004cb00 +.word 0xef9033cb +.word 0xa20a130c +.word 0x44fc60ef +.word 0x0d9ee9cd +.word 0x506cba3a +.word 0x0a81ce25 +.word 0x3a0aaa8f +.word 0x7c0ec1ea +.word 0xfceed457 +.word 0x46bb330d +.word 0x06096d21 +.word 0xdbd57ceb +.word 0x21852d44 +.word 0x0c861456 +.word 0x91cb7f84 +.word 0x56c8b05c +.word 0x99fd48e7 +.word 0x2e1d0687 +.word 0xb6ceea17 +.word 0x6cc87731 +.word 0xd6df66ec +.word 0x21dce12c +.word 0xde3fb42b +.word 0xe1aa41a8 +.word 0x7ae0ecaa +.word 0x93203319 +.word 0x35be9f4c +.word 0x59fcec7c +.word 0x6b5490e3 +.word 0x2f17a4e9 +.word 0xdad5ca39 +.word 0xb7853ad6 +.word 0xa1447804 +.word 0xb8f983f7 +.word 0x0d8895bd +.word 0x2d30b09a +.word 0x4cddce02 +.word 0x6e07422c +.word 0x9d7a4a55 +.word 0x79dbafc2 +.word 0xa4da3591 +.word 0x77c54896 +.word 0x06a91bb5 +.word 0x0888b9e8 +.word 0xe1c54827 +.word 0x6fa95733 +.word 0xa647bf30 +.word 0x409c8739 +.word 0x9356be95 +.word 0x6613e1b4 +.word 0xe5b62073 +.word 0x804cf225 +.word 0x0e11adf8 +.word 0x9696e44a +.word 0x3bf85bc9 +.word 0x0a1edaaa +.word 0x61dd4d37 +.word 0xd2d11cf9 +.word 0x64325420 +.word 0xd303cc16 +.word 0x0d9d95dc +.word 0xdec0f36c +.word 0xded3475d +.word 0xc2f23ce3 +.word 0xf13602a5 +.word 0x7e726bf5 +.word 0x2cdea984 +.word 0x4b1043ca +.word 0x2605b54d +.word 0x4027cb11 +.word 0xc2d0b78b +.word 0x589ce3e6 +.word 0xbae6caac +.word 0xf953db0f +.word 0x8af3354d +.word 0x51496b83 +.word 0x4665455b +.word 0xdd01c90f +.word 0xdd6fa38a +.word 0x7db44b30 +.word 0x4456e304 +.word 0x52fd8451 +.word 0x21c00a21 +.word 0x56f19956 +.word 0xb43fd9c4 +.word 0x13c8a9b4 +.word 0x23267075 +.word 0x0514599b +.word 0x2991b0a2 +.word 0xd31f5b1d +.word 0xa5eb8547 +.word 0x33167266 +.word 0x74dbccab +.word 0xdf838eb4 +.word 0x598c5cb4 +.word 0xb87d34fa +.word 0xb7521d90 +.word 0x2da1b565 +.word 0xb41b4905 +.word 0x2cf3f011 +.word 0x0b2311e6 +.word 0xd5380866 +.word 0x93ba2e74 +.word 0xa0b54be3 +.word 0xc3475210 +.word 0xe575ede0 +.word 0x1c44954f +.word 0xd4aa2726 +.word 0xa50dfa2d +.word 0xe0b3a7fb +.word 0xe6dab92b +.word 0x303585c2 +.word 0x8743b0f8 +.word 0xafa6ff3f +.word 0xab4d3c9d +.word 0xbe48546b +.word 0x3c64fc28 +.word 0xbeeba59b +.word 0xbc319332 +.word 0xfd4ee500 +.word 0x97587290 +.word 0x5e594d60 +.word 0x5fb37909 +.word 0x089d2010 +.word 0x349b7bf4 +.word 0xaf161a09 +.word 0x56f46324 +.word 0x2516f042 +.word 0x67413abb +.word 0xcfbbc9b1 +.word 0xe9f19a93 +.word 0x890efcb9 +.word 0xbf5edd99 +.word 0xb43757eb +.word 0xda41298b +.word 0x5c9b8fc0 +.word 0x17080931 +.word 0x11f8eb54 +.word 0x3e766a22 +.word 0xf9ae4fd8 +.word 0x413a7a5f +.word 0xf150d7ce +.word 0xfc4182b6 +.word 0x43884fc9 +.word 0x044233b4 +.word 0x14d90238 +.word 0x3e34278d +.word 0x3b0b6e51 +.word 0x89d0375b +.word 0x87e35038 +.word 0x7844eef1 +.word 0x42bd6e79 +.word 0x23538123 +.word 0x00b03435 +.word 0xfaea022f +.word 0x16ed63b5 +.word 0x0f69a2b7 +.word 0x2cf56dd8 +.word 0x327e66ca +.word 0x5a559fee +.word 0x030f5ad4 +.word 0x29f1f309 +.word 0xa15bbf22 +.word 0xca3e421c +.word 0xbbecd570 +.word 0xac95b925 +.word 0xca76ea51 +.word 0x87b879ae +.word 0x6637a82d +.word 0xc2d6bfc8 +.word 0xc6789b3a +.word 0xb49ae62d +.word 0xecf7e1a4 +.word 0x3539926a +.word 0x75b644f9 +.word 0xb10550b4 +.word 0xcb568871 +.word 0x177fe768 +.word 0xd4013437 +.word 0x6a3ee5d7 +.word 0x761ac201 +.word 0xc8ecd594 +.word 0x9c34e5cf +.word 0x056b34b8 +.word 0x1500c252 +.word 0x89228edb +.word 0xd9cdde04 +.word 0x65dab62b +.word 0xfbd66a12 +.word 0x4c40d4c4 +.word 0xe2169de1 +.word 0x37bcb839 +.word 0x02932582 +.word 0xf9759111 +.word 0xb45dacdc +.word 0x9a4b0ac5 +.word 0xc9d150b3 +.word 0x51554151 +.word 0x2492e399 +.word 0xf84176f5 +.word 0x0c2b3612 +.word 0x7bceb10b +.word 0xca03b775 +.word 0xdd78de71 +.word 0xab58211d +.word 0xde770b74 +.word 0x84f4ada6 +.word 0xd5ece582 +.word 0x09c14214 +.word 0x28eaf34c +.word 0xbeb26f4f +.word 0xbb1e5d3d +.word 0x1596d31b +.word 0x956376f0 +.word 0xa5dcf9b8 +.word 0x2fa4e17e +.word 0x39e5e02c +.word 0x68f9c72c +.word 0xe97467dd +.word 0x5faaa5d2 +.word 0x403a7cd0 +.word 0x3e9be8f3 +.word 0xe37119e1 +.word 0x543ca6cc +.word 0x0a84953a +.word 0x5ed867ac +.word 0xa2985b86 +.word 0xb244b5f8 +.word 0x066af3a6 +.word 0x42f0681a +.word 0x0f8478df +.word 0xdfe92d30 +.word 0x7097209a +.word 0x07e07181 +.word 0x0e602cc1 +.word 0x70a7c08a +.word 0x5cb24166 +.word 0xe0e80c82 +.word 0xf4acd9ff +.word 0xa3b32d13 +.word 0x4e19f9b1 +.word 0xf6e28094 +.word 0xf15e1f77 +.word 0x8af7fcd1 +.word 0x510371c9 +.word 0xea8db6d8 +.word 0xdd49de2e +.word 0x23949876 +.word 0x33864b3c +.word 0xbc3877fd +.word 0x69b5e87e +.word 0x7d796629 +.word 0x713c6dfd +.word 0x8d5f829b +.word 0x9dc17915 +.word 0x9f2c735f +.word 0xffac35d9 +.word 0x83403236 +.word 0xb7437331 +.word 0xda1f4cd9 +.word 0x052f76ec +.word 0xdb4874a3 +.word 0x44b58ed7 +.word 0x5185a1b2 +.word 0x84c30475 +.word 0x850cb2b9 +.word 0x6269018a +.word 0x2c5a6da1 +.word 0x65fc1174 +.word 0xf3432e99 +.word 0x2c12931d +.word 0x5edd2259 +.word 0x4aac386f +.word 0xfe377cbb +.word 0xb3a04e26 +.word 0x8cf87166 +.word 0x920fc339 +.word 0xad69ff03 +.word 0xd9a154aa +.word 0xeb2b65d4 +.word 0x64ab9b2c +.word 0x5e1a4114 +.word 0xe5ad31f6 +.word 0x7d116fb2 +.word 0x4bf34bab +.word 0x7f5f4c88 +.word 0x32e229c7 +.word 0xe46c24cd +.word 0x720c2811 +.word 0xc28904d9 +.word 0xbecdbd3c +.word 0x23735a0c +.word 0xad98e3cf +.word 0x951e8c92 +.word 0xf12db6f1 +.word 0x040ec0a9 +.word 0x6c13b51e +.word 0x988ae7d7 +.word 0x86f50e26 +.word 0x09406f6b +.word 0x0c05c6df +.word 0x58392d94 +.word 0x960ae38a +.word 0xb2bf877f +.word 0xc0432062 +.word 0x467962f9 +.word 0xe450d54e +.word 0x83daa4e2 +.word 0x92dab761 +.word 0x3c198436 +.word 0xae18133e +.word 0x1f53be6d +.word 0x9d93bea5 +.word 0x5a5f2ead +.word 0x1642bb96 +.word 0x566baba0 +.word 0x2738fae3 +.word 0xa45df790 +.word 0x850d9402 +.word 0x59a61403 +.word 0x9d66e523 +.word 0x3d323b01 +.word 0xaca227a1 +.word 0x93cd0dff +.word 0xe09387ce +.word 0x537ed05b +.word 0xe73f0dc4 +.word 0x4dd27f92 +.word 0xeb963125 +.word 0x9aa9a1a3 +.word 0x0f888a15 +.word 0x51e53f55 +.word 0xd60b8203 +.word 0x2fdf1144 +.word 0x15e91aad +.word 0x34aeb92a +.word 0xdd0b2d7b +.word 0xba499c56 +.word 0x71576351 +.word 0xbb6a2ee8 +.word 0x2f3af091 +.word 0x7575abb2 +.word 0x5f3f3940 +.word 0x66068276 +.word 0xf30eadc4 +.word 0x2fd1700b +.word 0x0be5ecec +.word 0x6d1b3761 +.word 0x3b56f543 +.word 0x08559648 +.word 0x16116589 +.word 0xd22490c4 +.word 0x960cca6a +.word 0xca9aae0f +.word 0xf1c17f49 +.word 0xad7ecaf7 +.word 0x44f8ac01 +.word 0x19e47e18 +.word 0x1742e262 +.word 0xac65e80f +.word 0x5006de79 +.word 0x5dd3561c +.word 0xdaf60179 +.word 0xc32bcaae +.word 0xaea55a74 +.word 0xb686371f +.word 0x9970f91c +.word 0xb2bd5058 +.word 0xd179ad75 +.word 0x56af6cf1 +.word 0x7c47ecb6 +.word 0xc2f7401d +.word 0xabeb221b +.word 0xf4a28ee0 +.word 0x9fc8a794 +.word 0x7135b0be +.word 0x883a578b +.word 0x2023783b +.word 0xebf1d20b +.word 0x33ec519b +.word 0x95c9cfb8 +.word 0x5f6ba299 +.word 0x28fd63e0 +.word 0x37403189 +.word 0x7ff56258 +.word 0x7027e1f4 +.word 0x11f5d835 +.word 0x33328569 +.word 0x592508c6 +.word 0x1a34579e +.word 0x7c7f0411 +.word 0x0d65a179 +.word 0x3c1f29b9 +.word 0xe705ffc3 +.word 0x9c4c3a17 +.word 0xf6eddf61 +.word 0x880892c9 +.word 0xa3a00b3a +.word 0xe846daf6 +.word 0x4a939b6a +.word 0x6e5bf036 +.word 0x4c29c689 +.word 0xcd1f9636 +.word 0x493717f1 +.word 0xfb0f153b +.word 0x9ecec4ba +.word 0x2c83a890 +.word 0xe9ef0719 +.word 0x77352d0b +.word 0x20bcc5a3 +.word 0xc1c064b5 +.word 0x7f257abb +.word 0xe0fa930a +.word 0x08eefedd +.word 0x7185a4c2 +.word 0x1f7f62fc +.word 0x6048151e +.word 0x214019f2 +.word 0x2aef1ff5 +.word 0x5861c731 +.word 0xc111f2bf +.word 0xf4beabb5 +.word 0x5fd4f533 +.word 0x2db9ac5d +.word 0x08ca4ce7 +.word 0x2e6405e5 +.word 0xbb81eac2 +.word 0x232814f4 +.word 0x977f926d +.word 0x4b341769 +.word 0xe722aded +.word 0x71eb488c +.word 0x53bf7c46 +.word 0x4402e851 +.word 0x0fbca066 +.word 0x62060546 +.word 0x62fac5b1 +.word 0x2922c6e2 +.word 0x847c5930 +.word 0x3776fcd4 +.word 0xb5e81f20 +.word 0xa3f2cdbd +.word 0xb818b5de +.word 0x39441bc5 +.word 0x7bca6a52 +.word 0x613635f9 +.word 0xf83677c3 +.word 0x2784a100 +.word 0xbe4cc4fe +.word 0x4327ea80 +.word 0x401060a6 +.word 0xd8454c7f +.word 0x0ad8f21f +.word 0xbd076b71 +.word 0xd4a3699c +.word 0x4218331e +.word 0x6ddb453d +.word 0x8e611da4 +.word 0x8e636e30 +.word 0x6971170f +.word 0x31a34b4d +.word 0x531afd5e +.word 0xa53ef4b3 +.word 0x7359addb +.word 0xd20fca35 +.word 0x7c5189b5 +.word 0x40a39e11 +.word 0x32753cef +.word 0x495741c2 +.word 0x6e194825 +.word 0x39386906 +.word 0x1b0d8b10 +.word 0x6efb7824 +.word 0x330beb08 +.word 0x51023b3f +.word 0xdbe709a8 +.word 0xe2420ec6 +.word 0x8b97532e +.word 0x30635ab2 +.word 0x1d9606a3 +.word 0x9a0bc27d +.word 0xe5d894f1 +.word 0x1d349e00 +.word 0x826b5dad +.word 0x8962e5d0 +.word 0xfe9d021f +.word 0x3507f366 +.word 0x568e6846 +.word 0x70324f34 +.word 0xcd2f05b0 +.word 0x58707433 +.word 0x80c432a1 +.word 0x2515f205 +.word 0xf9fca246 +.word 0x40675937 +.word 0x074f6f6a +.word 0xbd814deb +.word 0x2f8299e2 +.word 0x52dc7d29 +.word 0xd7f5d8f7 +.word 0xbbca370e +.word 0xbc1b38ba +.word 0x7be83269 +.word 0x2dace685 +.word 0xf45453b1 +.word 0xc0b2cf47 +.word 0x469c1a71 +.word 0x199df09a +.word 0xb75800d8 +.word 0x6b55d0a5 +.word 0x1e482f89 +.word 0x8b65576f +.word 0xe37fe11e +.word 0x71c32041 +.word 0x1dde7ff1 +.word 0xd861f7ef +.word 0x1b191dc3 +.word 0xb3254c28 +.word 0x3dd2ecd3 +.word 0xd0f71013 +.word 0x31871b84 +.word 0x7ee25013 +.word 0x6c51530c +.word 0xcf36659b +.word 0x04f8eb18 +.word 0x0b310d12 +.word 0xd925d442 +.word 0x2f074773 +.word 0x042e6671 +.word 0x4f0eb134 +.word 0x44225e61 +.word 0x5e4e6186 +.word 0x2f621396 +.word 0xc35425aa +.word 0x622955fb +.word 0x577e22b6 +.word 0xcb08fb32 +.word 0xa57df7dc +.word 0x6cc22d99 +.word 0xad4a2d17 +.word 0x05f1ec34 +.word 0xd57e8326 +.word 0xbb162cce +.word 0x50612838 +.word 0x7626385a +.word 0x8bce7f8c +.word 0xdca4ad98 +.word 0xb2f47c98 +.word 0x3384105b +.word 0x34bb083c +.word 0x2933a658 +.word 0x7ff875a7 +.word 0x3d8f1cfe +.word 0xd486520f +.word 0x9d825a4b +.word 0x4f1cfa57 +.word 0xc4d38cb1 +.word 0x517604b1 +.word 0xdc2fa3b4 +.word 0xc5c3d2ca +.word 0xacf1759f +.word 0x0db45eba +.word 0x82a137fd +.word 0x43be657d +.word 0xbead6f29 +.word 0x4f532c9f +.word 0xc811a59f +.word 0x96eb8535 +.word 0xd49022b7 +.word 0xd3dee97b +.word 0x695ba9f7 +.word 0xa53d8c0d +.word 0x876bf691 +.word 0xc0b312e6 +.word 0x8dbe131e +.word 0x0c8b7e9d +.word 0xd47f3ff7 +.word 0xe72b9b5b +.word 0x513b859e +.word 0x82275464 +.word 0x613840f3 +.word 0x4f892884 +.word 0xab032365 +.word 0xcee646fa +.word 0xe589388b +.word 0x29d441fe +.word 0x4a65b469 +.word 0xd4620432 +.word 0x583bf5cf +.word 0x23a76009 +.word 0x3cbf498e +.word 0x0cfe24af +.word 0x35524449 +.word 0xd46ce249 +.word 0x35e47524 +.word 0x9e335c5a +.word 0xbdefaa46 +.word 0xead4ea53 +.word 0xbd53ebdd +.word 0xab8bf3a5 +.word 0xd3f13cc6 +.word 0xd6932c7b +.word 0xf9e88ff1 +.word 0x0389fbfe +.word 0x29719647 +.word 0xaa68d2d1 +.word 0xe13e0495 +.word 0xa0d995df +.word 0x22f30f13 +.word 0xafd968da +.word 0x20eda7bf +.word 0xd1d731f8 +.word 0xc70c1639 +.word 0x31e1e263 +.word 0x089e7b63 +.word 0xdb40deb0 +.word 0x49b273bb +.word 0xdd4229b0 +.word 0x49e3ace2 +.word 0xb8a3a96c +.word 0x87b8937d +.word 0x2fb8682f +.word 0xfe3062ef +.word 0xfb95c193 +.word 0xd3394030 +.word 0xe575485a +.word 0xc22c40f1 +.word 0x5894835f +.word 0xbc679cec +.word 0x4da7528f +.word 0xaa094153 +.word 0xa34f2fb8 +.word 0x7478ed49 +.word 0xe53ac1d6 +.word 0xe0f0d4c2 +.word 0x3a30ecd2 +.word 0xb9066a9a +.word 0x7bd55171 +.word 0x1f6288df +.word 0xf4d81456 +.word 0xd540d318 +.word 0x93957ae8 +.word 0x7d663aa4 +.word 0x85226de6 +.word 0x163075ae +.word 0xf797d0af +.word 0x76264692 +.word 0xf32a8387 +.word 0xd7b1a827 +.word 0x315850d4 +.word 0xefbfafde +.word 0xedb34dea +.word 0x23236c4d +.word 0x34f6f886 +.word 0xd178a334 +.word 0x4cd5fe3c +.word 0x8d29c027 +.word 0x683e7278 +.word 0x0b80eea1 +.word 0x00560ab7 +.word 0xe27d4d63 +.word 0x57a176e3 +.word 0xef0a91b4 +.word 0xc2642408 +.word 0xfd303c42 +.word 0x5497f074 +.word 0x96b6ad20 +.word 0xaa87cb68 +.word 0xbe5fd468 +.word 0xbeedc797 +.word 0x00fcfefb +.word 0x1b2ed96d +.word 0x2a1e1808 +.word 0xc693a4db +.word 0x3fb78a79 +.word 0xb0f33ab7 +.word 0xe7a865aa +.word 0xa5a8d764 +.word 0x92993cab +.word 0x6374aa45 +.word 0x29411126 +.word 0xfae2aab6 +.word 0xcfa1ec5b +.word 0x85ca98b7 +.word 0x986673c2 +.word 0x0ee5502a +.word 0x26c645fe +.word 0x5c6e88cc +.word 0x262fe5f7 +.word 0x778e3ff7 +.word 0x523cb2ce +.word 0x58c9c836 +.word 0x8c9a0264 +.word 0x0ad475b0 +.word 0x5ec94250 +.word 0xcac843ce +.word 0x1b436e05 +.word 0xbc7b977b +.word 0x7b084cdf +.word 0x4187338e +.word 0x1068dc7a +.word 0xf3a0f5a5 +.word 0xf343d590 +.word 0xecf66b0f +.word 0x02cd020d +.word 0x9aa8bc3f +.word 0x354979c8 +.word 0xcd1ab375 +.word 0x39038897 +.word 0x477f03e4 +.word 0xc8fa9a37 +.word 0xb6884a1f +.word 0x91454013 +.word 0x8e2cbb3d +.word 0xce60dc58 +.word 0x5eb52a21 +.word 0x75718b5c +.word 0x6d1afd99 +.word 0x68670f05 +.word 0x9834ddf2 +.word 0x2c6cadda +.word 0x2a23c16b +.word 0x927634ec +.word 0x90394ddb +.word 0x6daf4408 +.word 0xec0309e4 +.word 0xeb774393 +.word 0x107f5301 +.word 0x7714e68e +.word 0x9befb884 +.word 0xadce000a +.word 0xc68ebc9c +.word 0xc66431cd +.word 0x636c6767 +.word 0x01528192 +.word 0xdf6fa47d +.word 0x36193e76 +.word 0x1850b37c +.word 0x7027afb1 +.word 0x648f7d15 +.word 0x16bbc3c6 +.word 0xfe896587 +.word 0x434b27fd +.word 0x1a3e5d29 +.word 0x4741a4a9 +.word 0x352fee91 +.word 0x9b63dd26 +.word 0x190e9b76 +.word 0xaa77b2a3 +.word 0x71291caa +.word 0x2132bba1 +.word 0xe1eb1ba5 +.word 0x2561af6f +.word 0x3a5f0b3e +.word 0xf4b6dceb +.word 0x8b08359d +.word 0x487a2e49 +.word 0x6a30533f +.word 0xa6517ba6 +.word 0xdca5f80f +.word 0x62b0f880 +.word 0x64734381 +.word 0xc0ea9804 +.word 0xbda664ff +.word 0xbe1e89c4 +.word 0xf7e73dca +.word 0x837e3df3 +.word 0x251a7276 +.word 0x85781942 +.word 0x121b0db8 +.word 0x3738732c +.word 0x042835e4 +.word 0x31d103f0 +.word 0x16c53ae5 +.word 0xc79130f6 +.word 0x03f8b291 +.word 0x2678995f +.word 0xfc0f0b44 +.word 0x23ec7814 +.word 0xf67b1fb9 +.word 0x53b3e7f8 +.word 0x9b74d8a2 +.word 0x33ea1ef9 +.word 0xffae0387 +.word 0x5a7f37a4 +.word 0x400bacd3 +.word 0xf8dd8285 +.word 0xb6bc0cc5 +.word 0x1b463115 +.word 0x038c3b75 +.word 0x8a290cbe +.word 0x89304e8c +.word 0x5fdbdf3f +.word 0x14e0b7be +.word 0x92d4395a +.word 0x883519e0 +.word 0x7c14e478 +.word 0x459823fc +.word 0x7a5d32a0 +.word 0xb836009b +.word 0x8d4cad72 +.word 0x88bc5217 +.word 0xcb5f3f02 +.word 0xb8335d9f +.word 0x646c0077 +.word 0x494868d1 +.word 0x17ec7d7d +.word 0x4091f851 +.word 0x4fa20e3c +.word 0x115777f9 +.word 0x92cd35b8 +.word 0xeda5aeb6 +.word 0x1f3bfeaa +.word 0x94032bb5 +.word 0xdd85a6a0 +.word 0xa0af4f36 +.word 0x6d6c8d28 +.word 0x321f7094 +.word 0xc3634782 +.word 0x74381776 +.word 0xc44dfeaf +.word 0x16bbde82 +.word 0xc1d3dab9 +.word 0xcf48e168 +.word 0x447873ed +.word 0x62efa6b0 +.word 0xb63f0f8d +.word 0x140699ac +.word 0x479e5ff7 +.word 0xc0fe2f26 +.word 0x16479274 +.word 0x16cc5341 +.word 0x99983ab3 +.word 0xb1ae1b65 +.word 0x35e16f55 +.word 0xbb4109ac +.word 0x9e5cf15e +.word 0xb031393c +.word 0xad734227 +.word 0x3a609d73 +.word 0x8b436ec3 +.word 0x5ec2f433 +.word 0xd7fae758 +.word 0xadd35c0c +.word 0xfab24dd5 +.word 0x0ab6f751 +.word 0xc7b683b1 +.word 0x03f8c2f1 +.word 0x9c168cab +.word 0x0e848f96 +.word 0xe4bc374b +.word 0x2f60808e +.word 0xe3f80e2d +.word 0xdff2cd21 +.word 0x1e9e5751 +.word 0x1a1b2381 +.word 0x6be6c9be +.word 0x51b8346f +.word 0xb6d41efb +.word 0xb5dbc9bd +.word 0xad9ddfcc +.word 0x8f7c7aa9 +.word 0x261dffce +.word 0x63b3b0ce +.word 0xde00d742 +.word 0xdc5172e3 +.word 0x433401b2 +.word 0x63c3f2a8 +.word 0xe8d2c416 +.word 0x26d6cec9 +.word 0x9cc999d2 +.word 0x7326be2c +.word 0xf6c006da +.word 0xeae85c22 +.word 0x569c6c62 +.word 0x352f140b +.word 0xb175c37e +.word 0x35c0d512 +.word 0x3cf9b9e9 +.word 0xf6140ef5 +.word 0x701af4d1 +.word 0xbd7e757d +.word 0x43a4b41b +.word 0x747ea3bd +.word 0xcc75de9a +.word 0xc0793aa9 +.word 0x4d0f2f61 +.word 0xb5b21d7c +.word 0x85ae6932 +.word 0x3548f429 +.word 0xcfe53fcf +.word 0x1a46079e +.word 0x41e2b286 +.word 0xcb9d85aa +.word 0x653261ad +.word 0xf5eb8e31 +.word 0x4938bee5 +.word 0x4f1063c7 +.word 0xfc203993 +.word 0xd9f312a9 +.word 0xef545715 +.word 0x0abf89f1 +.word 0xfb5ce47b +.word 0xdf8050e7 +.word 0x191eb609 +.word 0xe83e2ea1 +.word 0x89788358 +.word 0xceaae8d9 +.word 0x80036f74 +.word 0x54070c5e +.word 0x573fbc03 +.word 0xf644e9d1 +.word 0x9079eede +.word 0x4d6f227c +.word 0x6955c67a +.word 0xb82ebfcf +.word 0x78319763 +.word 0xd2087068 +.word 0x9453d190 +.word 0x00bd48d4 +.word 0xab35630a +.word 0x58674a3e +.word 0xcf06d774 +.word 0x90f36568 +.word 0x94669381 +.word 0x0eeef9f5 +.word 0x17354cc0 +.word 0xecf1bfbd +.word 0xb914a030 +.word 0xf4f7b7b8 +.word 0xbcdf0b78 +.word 0xb0a492b4 +.word 0xf76c44c0 +.word 0x6fcab717 +.word 0xc93406e5 +.word 0x6410206d +.word 0x1fad820e +.word 0xae5d238e +.word 0xc4ec2e4b +.word 0x613ad781 +.word 0xf1009375 +.word 0x31fa9bae +.word 0x63c6f3aa +.word 0x8b6c466d +.word 0x7e4a6002 +.word 0x9e5073a7 +.word 0xeb9e9d10 +.word 0xb1e06bdd +.word 0xb7551992 +.word 0x89f3a6dd +.word 0xeb48dc51 +.word 0x7996db2f +.word 0x45d94ddd +.word 0x10e29f02 +.word 0x77159645 +.word 0x3131145f +.word 0x1d5d9024 +.word 0x8d4c952f +.word 0xeae91886 +.word 0x8f35e8bd +.word 0x982befca +.word 0x3d769cdb +.word 0x026ec441 +.word 0x1f3dcbc7 +.word 0x1319c5c9 +.word 0xd3c318b2 +.word 0x4a4b1fdd +.word 0xaf104bfd +.word 0x29325ae7 +.word 0xb7ed6cc8 +.word 0x59e8ca76 +.word 0xb47eb1e2 +.word 0xacbbf714 +.word 0xf826052c +.word 0x0656a2e2 +.word 0xdcd702b1 +.word 0x170db748 +.word 0xf5045e58 +.word 0x76199362 +.word 0x90c121d6 +.word 0xa12131fa +.word 0xef4e37b0 +.word 0x72ea7782 +.word 0xacbde4c4 +.word 0x49145fd7 +.word 0x97fc21eb +.word 0x86f91ca7 +.word 0xbf5187e8 +.word 0x9102b978 +.word 0x299bd78f +.word 0x2ebf1c19 +.word 0x9eb2ab36 +.word 0x8361655c +.word 0x39dc356f +.word 0x267cf45b +.word 0xa4adc562 +.word 0x72e4a398 +.word 0xe7dcb176 +.word 0x18004d9f +.word 0xe9606997 +.word 0xe01657df +.word 0x9b9f9cf5 +.word 0xdcdbdc85 +.word 0xfdc4d9be +.word 0x2793d0de +.word 0xee05d226 +.word 0x366be3be +.word 0xcf905cc0 +.word 0x8acbb969 +.word 0x5cd6e9e3 +.word 0x0763d24b +.word 0x4049f69f +.word 0x70c82d6d +.word 0xe6fd4c5e +.word 0xec4831d1 +.word 0xdbb48ba8 +.word 0x7579c108 +.word 0xca2d9464 +.word 0xb11c22f2 +.word 0xe4041ed2 +.word 0xebe1d7e9 +.word 0x66086911 +.word 0x2449d1ac +.word 0x5f428324 +.word 0x3f67d2dc +.word 0xaffdb641 +.word 0x9401931c +.word 0xeb35a6c1 +.word 0x09319ec9 +.word 0x62be68ff +.word 0x8e495f50 +.word 0x72588ae1 +.word 0x1b168f38 +.word 0xa9d85390 +.word 0x4fb73a11 +.word 0x32c37427 +.word 0x0c61d9e6 +.word 0x78e72c98 +.word 0x0fa5981c +.word 0x7fcd24d4 +.word 0x13b21970 +.word 0x200c1304 +.word 0x64681f3f +.word 0x27ff37c7 +.word 0x84852278 +.word 0xf380311d +.word 0x8d5c00fc +.word 0x362e11a4 +.word 0x6ab05553 +.word 0x74290953 +.word 0xdc3a6c09 +.word 0x223c0482 +.word 0x34223fd6 +.word 0xba1cf34e +.word 0xb94ea5dd +.word 0xf65ebfe7 +.word 0x4a2c3d76 +.word 0x8b98ddd1 +.word 0x4c2016ce +.word 0x219eb6bd +.word 0x9c042dab +.word 0x848d1096 +.word 0x9d75bf45 +.word 0x149f11c3 +.word 0x5c1237d8 +.word 0x09c70ceb +.word 0xbfbe37e7 +.word 0xfb5e6379 +.word 0x26aa7514 +.word 0x08becd61 +.word 0xb2bea4bb +.word 0xc67277a9 +.word 0x6a5491de +.word 0xe6d6d86d +.word 0x82d42a70 +.word 0x43e8913c +.word 0x0044c7f9 +.word 0x09e5db3c +.word 0x81f6ba20 +.word 0xa26c88c3 +.word 0x504fe14f +.word 0x7327d2e7 +.word 0x7a06b8d5 +.word 0xf8d8aaf4 +.word 0x945ba931 +.word 0xcb1dfa7b +.word 0x872bf0aa +.word 0xfa3f63d5 +.word 0x431eae0d +.word 0xd21aa175 +.word 0xc12a8d92 +.word 0x7fc0a8d4 +.word 0x86bb3f14 +.word 0x40c38fcd +.word 0xb3867083 +.word 0xd0120904 +.word 0xa620cee4 +.word 0x5980f8a9 +.word 0x28be7cd5 +.word 0x277c64d5 +.word 0x27fce9f0 +.word 0x9b77c9bc +.word 0x0244d41d +.word 0xb4b5b48c +.word 0xfe0acdbd +.word 0x87e5fcdb +.word 0xb51ed632 +.word 0x563a0caa +.word 0x17f09f2b +.word 0x20ba9ee2 +.word 0x4d6df394 +.word 0xb8279ac2 +.word 0xc5bdfac2 +.word 0x9473da46 +.word 0xdaa1cd8b +.word 0x8f23967e +.word 0xbba925d7 +.word 0x5d64dc61 +.word 0x20d21d24 +.word 0x4c65bc2b +.word 0xe5113149 +.word 0x57b47752 +.word 0x7e92d6ad +.word 0x83d393d7 +.word 0x81fb5b24 +.word 0x699b01a5 +.word 0xaecbaddf +.word 0x6a246040 +.word 0x69bcacd4 +.word 0xbe596287 +.word 0x89c1acb0 +.word 0x5097e2b4 +.word 0x3759fcb4 +.word 0x1c1ce084 +.word 0x4713d853 +.word 0x44d9bc43 +.word 0xd5f579f7 +.word 0x99ce06ea +.word 0xe5a50792 +.word 0x5a2b0ff3 +.word 0xa9391bb1 +.word 0xd1b48a6b +.word 0x3392ced9 +.word 0x4391cb0b +.word 0xb395afa0 +.word 0xfbd114f7 +.word 0x8e063178 +.word 0x7f503ac4 +.word 0x7ba29777 +.word 0x8ca83c20 +.word 0xb7c8be8a +.word 0xbe1f968a +.word 0x5a478bda +.word 0x8ca5f546 +.word 0x6ddb0ed5 +.word 0x44580c3a +.word 0xe5bf3820 +.word 0x50df621c +.word 0xbfb20459 +.word 0xd685a8e9 +.word 0x9129bc2a +.word 0x7d2ca9d2 +.word 0x9c9b08a5 +.word 0x243d6f62 +.word 0x81eb9d13 +.word 0x93f42c42 +.word 0x82deb734 +.word 0xcaa7008c +.word 0x6172cc8b +.word 0xa26d703d +.word 0x78ff3578 +.word 0xb488d81b +.word 0xf11ef0ef +.word 0x4c4a115c +.word 0x70fe99c0 +.word 0x11832e29 +.word 0xb855ebb0 +.word 0x1351ab65 +.word 0x9a565429 +.word 0x79e6bbd9 +.word 0xe2a7e7af +.word 0x7cc3296a +.word 0x303ff53c +.word 0xbe6e22f0 +.word 0x9ae5cb3b +.word 0x2e4f2c7c +.word 0x10cec9da +.word 0x4abe896e +.word 0xee36329b +.word 0xda1c4e5c +.word 0x3f95b006 +.word 0x7777d698 +.word 0xd1eaf7a1 +.word 0x09bced4b +.word 0xbbe2a911 +.word 0xdb925c34 +.word 0x3c1e9c6c +.word 0x32341017 +.word 0x853fef5d +.word 0x45240363 +.word 0x82e8fc97 +.word 0x5d20cba7 +.word 0x102eec9d +.word 0x3aa7e485 +.word 0xd9ff8dc9 +.word 0xdbbef5f2 +.word 0x102e1311 +.word 0x2f251dba +.word 0xbdf53d5e +.word 0x8ad6b56e +.word 0x44c350b2 +.word 0x30eda3b7 +.word 0xc366eefa +.word 0xecf081f2 +.word 0x5f70edde +.word 0xb8a0f41a +.word 0x0fba7dbe +.word 0xe0d5e7c9 +.word 0x6384924b +.word 0x8b6809ae +.word 0x8515b7ab +.word 0xdf10fb37 +.word 0xdf2e7633 +.word 0x23ae2285 +.word 0x5ca658dc +.word 0x89f5cb12 +.word 0x9ce7d1c6 +.word 0x8fd8a5aa +.word 0xc82cedd6 +.word 0x55f7fe72 +.word 0x3cd7093d +.word 0xcc7b69cc +.word 0x2e97693b +.word 0xf4d62d87 +.word 0x78f77212 +.word 0xc6587849 +.word 0xdc2eaa91 +.word 0xf939a7e1 +.word 0x8eb2a6fb +.word 0xb321cb47 +.word 0x94130db2 +.word 0x603df0dc +.word 0x2013d798 +.word 0x1a642e96 +.word 0x104274b4 +.word 0xe202add2 +.word 0x4cc452de +.word 0x54516707 +.word 0x3ba86e80 +.word 0xea1deb7f +.word 0x3aa425e0 +.word 0x90a354c9 +.word 0xce7df2eb +.word 0xf84d87b1 +.word 0x64948b4e +.word 0x10b271ce +.word 0xc4c56496 +.word 0xeef5a927 +.word 0x10aea74d +.word 0x62d61720 +.word 0x151c36bf +.word 0x9e5cf9f6 +.word 0x6479310f +.word 0x8515dbd0 +.word 0xb5f81f40 +.word 0xa5c8f9fa +.word 0x68e43fb2 +.word 0x71d98735 +.word 0x15be3152 +.word 0x96d2e32a +.word 0xfbbf77ee +.word 0xcf520e25 +.word 0x780ac7f2 +.word 0xaf2ea3f7 +.word 0x161edfe4 +.word 0x35144dec +.word 0x71726124 +.word 0xddb1470c +.word 0x307c34d4 +.word 0x53afdfed +.word 0xbd8d7fda +.word 0xa5b54d92 +.word 0x0ea7cfd1 +.word 0xe148d011 +.word 0xe0afca95 +.word 0x597eec70 +.word 0x2e61ffe6 +.word 0x2f1e0c2c +.word 0x474981fd +.word 0x49b7a7dc +.word 0x028b74c6 +.word 0x4f0f9887 +.word 0x4f713c96 +.word 0xa30d9a0a +.word 0xb1a84629 +.word 0x1ca4aa41 +.word 0x15cdfa35 +.word 0x238a60ac +.word 0x87edf536 +.word 0x86b3bfd8 +.word 0x2e91ce1e +.word 0x35d24292 +.word 0xb3b014d9 +.word 0x52754c79 +.word 0x7bd2a39b +.word 0xee869717 +.word 0x8db2383f +.word 0x5816fbb0 +.word 0xb5a6ac7e +.word 0x15847dad +.word 0x7005e188 +.word 0x2c1826d2 +.word 0xfc0db3c0 +.word 0x602fa3e3 +.word 0x25cdf966 +.word 0x998d07aa +.word 0xc0dbec75 +.word 0xb3a29f92 +.word 0x813212d6 +.word 0x1fc7d400 +.word 0xaa01d5e2 +.word 0x09af9251 +.word 0xcd63448f +.word 0xbabefecf +.word 0xabfe7ac9 +.word 0xf9acb1c1 +.word 0x6727bb2b +.word 0xb67bcf23 +.word 0x4b594e49 +.word 0xaf686280 +.word 0xca641c65 +.word 0x09bd52d0 +.word 0x62280c9e +.word 0x7615037f +.word 0xb38235c1 +.word 0xe5fbb71c +.word 0x9e6e556b +.word 0xe492b66d +.word 0x3fefb9d0 +.word 0xe68b17b7 +.word 0x4eb00235 +.word 0x87ae09e3 +.word 0x3c274bd1 +.word 0xc02b538f +.word 0xc4c70762 +.word 0x9455a068 +.word 0x53917b6e +.word 0x9bd023cd +.word 0x1a5f3df9 +.word 0xe59df96c +.word 0x3dcee9b7 +.word 0xc5acba57 +.word 0x0705bda0 +.word 0xc9fb2717 +.word 0x4ba40b4a +.word 0x4b1d2bd2 +.word 0xeca5fdbd +.word 0x6f08ada0 +.word 0x02d791d0 +.word 0xe046c4bb +.word 0x4a3a0c34 +.word 0x72c17afb +.word 0x49dca607 +.word 0x92b8d8aa +.word 0xe87b81bd +.word 0x89b29072 +.word 0xdc2eb41d +.word 0xd0606992 +.word 0xd168f186 +.word 0x115bb8bc +.word 0xc5768cd6 +.word 0x5871a52e +.word 0x507c6943 +.word 0x4dd1778e +.word 0xb8420c77 +.word 0xab77d02b +.word 0xd0eceb68 +.word 0x2f4837a3 +.word 0xc8f3ceeb +.word 0xa3d5f9a9 +.word 0x730a0e87 +.word 0xd13b2302 +.word 0xe63cd542 +.word 0xbf98178a +.word 0xaf790a71 +.word 0xbcdb78cf +.word 0xb5f5fb1c +.word 0x48ca3a16 +.word 0x434a28fc +.word 0x19b479fd +.word 0x85ad1564 +.word 0xeb3d8ac0 +.word 0xbf4fa888 +.word 0x1a9c19c8 +.word 0xd9ef1d06 +.word 0x552d4fcb +.word 0x8a5c76e9 +.word 0x2bfaf92c +.word 0x9bd5e5ab +.word 0xd02d500b +.word 0xcdf4e978 +.word 0x562f01dd +.word 0x07f4a001 +.word 0xdf10d476 +.word 0x2b08dbe7 +.word 0x6a236d97 +.word 0x6dd9e6a5 +.word 0x0b7817a2 +.word 0x50f60d46 +.word 0xb6cef71f +.word 0x2a3618f3 +.word 0x8900c034 +.word 0xe3dd93f6 +.word 0xe9f62b78 +.word 0x19f750db +.word 0x5f1cb40a +.word 0xdb127b77 +.word 0xe6210ea3 +.word 0x91b6f494 +.word 0x36793c29 +.word 0x5c13a1ee +.word 0x744607a9 +.word 0x5fc2b68c +.word 0x670a2939 +.word 0x18694b0f +.word 0xdfa7eefe +.word 0xeb4839bd +.word 0x02f4811c +.word 0x4b41c97a +.word 0x25aa6624 +.word 0xa9ca21a6 +.word 0xbc125e4a +.word 0x6d971d60 +.word 0x02681f74 +.word 0x8832c8ea +.word 0x58b73b65 +.word 0x022a17ee +.word 0x51ace5e5 +.word 0x67baa037 +.word 0x85b699e6 +.word 0xdde91c12 +.word 0x3625a97f +.word 0x22e35239 +.word 0x9a53f3cf +.word 0xf230579b +.word 0x70ab77c4 +.word 0x7639971c +.word 0x321dc2ca +.word 0x30d4b90b +.word 0x9566b6f1 +.word 0x814b2384 +.word 0xe57ee88b +.word 0x6895bb10 +.word 0x39c3c5af +.word 0x24099769 +.word 0xb157f6ae +.word 0xdd9e886c +.word 0x29e18d0c +.word 0xa03eae62 +.word 0x7f1e08f4 +.word 0xeafa3688 +.word 0x36f46d98 +.word 0x89b6cd46 +.word 0x1350894d +.word 0x41853ea5 +.word 0x789b6cdd +.word 0x0c6f34fc +.word 0x7228a475 +.word 0xd8c83a7e +.word 0xb2964472 +.word 0x2e691fa2 +.word 0x5897d6b0 +.word 0x4180ffc8 +.word 0x7df6c969 +.word 0x0d575f09 +.word 0xd5a58061 +.word 0xfbf2d185 +.word 0x23faef5e +.word 0xa1820b0d +.word 0xa9888427 +.word 0xe5f29f8e +.word 0x038edf7b +.word 0x7ab29072 +.word 0x059a29c0 +.word 0x376f10d3 +.word 0xb59066d0 +.word 0xa22b8088 +.word 0x7a214db2 +.word 0xdf52b8df +.word 0x2675bd0f +.word 0xebbef76f +.word 0xdb932f77 +.word 0x57396f72 +.word 0x0b87912d +.word 0xae934f37 +.word 0x3fb6a24e +.word 0x7c54d9fe +.word 0x60ae4e54 +.word 0xf31c054c +.word 0xfad5dd9d +.word 0xb58e840b +.word 0x5abdbbab +.word 0xc44a71ef +.word 0xc95bb88b +.word 0xfc02c13b +.word 0x963cb8c2 +.word 0xf8a1daaf +.word 0x4d2e626a +.word 0x89ee099d +.word 0x5904141c +.word 0x9e0ada1e +.word 0x30836eb3 +.word 0x792f81e9 +.word 0x4132a626 +.word 0xf0e9b9be +.word 0x93635c60 +.word 0xd66e2270 +.word 0xcae69761 +.word 0x35aafd99 +.word 0x39761e6c +.word 0xed9383fd +.word 0x629c6ab0 +.word 0x9d4bd9c8 +.word 0xd2f69c67 +.word 0xecb1e6c9 +.word 0xee219bd1 +.word 0x95d6ba1c +.word 0xe48a84da +.word 0x8124b26d +.word 0xa01b2f1f +.word 0xcb61898b +.word 0xb5e74e67 +.word 0xca079b4a +.word 0x72447464 +.word 0x3c46149c +.word 0x67a5f3a5 +.word 0x1a7e2af7 +.word 0x8a0fe59f +.word 0xae69a220 +.word 0xc4cb1ee4 +.word 0xc7224c80 +.word 0x891aa200 +.word 0xe370d3ed +.word 0xaaf8e81a +.word 0x48b4ed87 +.word 0x6e81c9fc +.word 0xb4147445 +.word 0x1e604e92 +.word 0xddce8e9d +.word 0xe197924b +.word 0xdc235105 +.word 0xd3b0076a +.word 0x626934a9 +.word 0x6caf65ba +.word 0xed39f9c4 +.word 0xabc5f3ea +.word 0x14c5e787 +.word 0xd7ba151d +.word 0x396d1e05 +.word 0x985e5047 +.word 0x8df96bdb +.word 0x50e60752 +.word 0xb7650884 +.word 0x1c379381 +.word 0x1a3b34f6 +.word 0xa44bea6a +.word 0xfeb14416 +.word 0x6594162f +.word 0x0e52a778 +.word 0xe2ac41f2 +.word 0x92d69a58 +.word 0x9885d3db +.word 0xb49e8870 +.word 0x79ba9091 +.word 0xd33c1868 +.word 0xc6a9d349 +.word 0x9caa9a22 +.word 0x0a1ac6a3 +.word 0x4bc7dfe8 +.word 0xf5662b6f +.word 0xd6294c43 +.word 0x93abe0ba +.word 0xce9ff857 +.word 0x66d6748f +.word 0x78dc0036 +.word 0x327cb512 +.word 0x9023a884 +.word 0xa9f64696 +.word 0xdab50323 +.word 0x5c9ab74b +.word 0xc524c108 +.word 0xb35b8cf1 +.word 0x933f892f +.word 0x63d4afe0 +.word 0xca8192ea +.word 0x27d67598 +.word 0xdf7b85d4 +.word 0xb118ae75 +.word 0xa8340f8d +.word 0xb2506a15 +.word 0x61dabf8c +.word 0xbe507492 +.word 0x4f11685d +.word 0x5f6099b1 +.word 0x9875c1ac +.word 0x63d37073 +.word 0x4836e5fd +.word 0x9a1cbc70 +.word 0x74dadf0f +.word 0xd7568305 +.word 0xaf6d7bbd +.word 0x758b8ee9 +.word 0x72baa87b +.word 0x144e96bb +.word 0xde6faac2 +.word 0xd6499fca +.word 0xe2bc1fa5 +.word 0x119cd86a +.word 0x4711815d +.word 0xe0665e01 +.word 0x1fa92fd7 +.word 0xc7fe11b5 +.word 0x5fe64158 +.word 0x133c5d0e +.word 0x548b06d9 +.word 0x7bb6656d +.word 0x11930c98 +.word 0x0c6fa2e5 +.word 0x85b14f4e +.word 0xc85b3c2a +.word 0x0ffbe060 +.word 0xd94c197d +.word 0xa05d76c8 +.word 0x0d55487f +.word 0x8e5c0d54 +.word 0x85496e97 +.word 0x89c0fd7b +.word 0x155dcc79 +.word 0x1739844d +.word 0x24c44cec +.word 0x781b30d1 +.word 0x6012838c +.word 0x5a2dfc8b +.word 0x1c0cab30 +.word 0x88681e73 +.word 0xd6a31ec2 +.word 0xd1d9f92c +.word 0x7a6ec5fc +.word 0xcda84e89 +.word 0xf115fe2c +.word 0x9153ff12 +.word 0xa47e9af0 +.word 0xd5c3717a +.word 0x16b74d85 +.word 0xa00a55c7 +.word 0x9d48d203 +.word 0x96991b34 +.word 0x7576def1 +.word 0xbf0897cd +.word 0xe4a0ddda +.word 0x76d2c280 +.word 0x4d7953dd +.word 0x2b84e87b +.word 0x2d72584c +.word 0x492dfde6 +.word 0x4871ff36 +.word 0x93cb893b +.word 0xa6921644 +.word 0xe39004ab +.word 0x53aa5f42 +.word 0x967aed3f +.word 0xdc7c1abe +.word 0xb391d65c +.word 0xcc60e0f0 +.word 0xf8523261 +.word 0xab751ffe +.word 0x4fc46365 +.word 0x6b80632a +.word 0x020a692f +.word 0x3cd6a96d +.word 0xc80a8423 +.word 0xce573760 +.word 0xb2ec1af9 +.word 0xe8334b35 +.word 0xfbc62393 +.word 0xd8ef8c90 +.word 0x64e093cf +.word 0xe975ab3e +.word 0xe19e4011 +.word 0x4aed372a +.word 0xc54da717 +.word 0x0b0afcaf +.word 0xed7ae09a +.word 0xbc166f84 +.word 0x08d430b1 +.word 0x97cdc5fe +.word 0xa3452c30 +.word 0x829f625b +.word 0xa32587a1 +.word 0xda3e7f83 +.word 0x1cf4e8e1 +.word 0xa2e2917d +.word 0xe13aa563 +.word 0xe362ebd5 +.word 0xb48d6e7e +.word 0x6a41d279 +.word 0xb48afd91 +.word 0xdf0c7130 +.word 0xb06257f9 +.word 0x9fd5c5b1 +.word 0xa912159f +.word 0x2226ed62 +.word 0x15743fe5 +.word 0xdb7caa61 +.word 0xbcff13f0 +.word 0x61264a2e +.word 0x99a1bbb3 +.word 0xe8afee14 +.word 0x07a28344 +.word 0x21cb1d5b +.word 0x51b63c12 +.word 0xe598cfe6 +.word 0x7293bf17 +.word 0x9acd43bc +.word 0x687437b1 +.word 0xb9c53696 +.word 0x68225c46 +.word 0x619d5aca +.word 0x7c15d307 +.word 0xaaa757bd +.word 0x152ddebc +.word 0x40745ff8 +.word 0x0af7f6f3 +.word 0x409e9ad8 +.word 0xbef6e954 +.word 0x077d8216 +.word 0x93fcc3b9 +.word 0x677acdfb +.word 0x7ebccabc +.word 0x76e0db3f +.word 0x5ec9d21d +.word 0x37f1cf00 +.word 0xacfc796b +.word 0x367717c7 +.word 0x0515fc1e +.word 0x07fe9433 +.word 0xe767ddd1 +.word 0x222d2ddc +.word 0xcd3c10f9 +.word 0x018f8911 +.word 0xa40c46b7 +.word 0x2333f62e +.word 0x85a40625 +.word 0x7238faa8 +.word 0xbedd2fd9 +.word 0xc6fedff5 +.word 0xd79fc7b0 +.word 0x74f8541b +.word 0xfe5b36de +.word 0x56d23837 +.word 0xa0c6902a +.word 0x42624b35 +.word 0xa424c73f +.word 0xd032807f +.word 0x79a275c8 +.word 0xfb72c95a +.word 0x0bb518d2 +.word 0xc7b3210d +.word 0x6c64c8f2 +.word 0xd2fb0f47 +.word 0x345cd085 +.word 0x4f6f8c13 +.word 0x329a4f49 +.word 0x1a7fb5b9 +.word 0x53c82a54 +.word 0x79c7558b +.word 0x2637cee2 +.word 0xc5610bee +.word 0x467069d4 +.word 0x5d68a2e4 +.word 0xa33708ff +.word 0xd3b6eac4 +.word 0xf0d00ed9 +.word 0x5a71875b +.word 0x90cb3094 +.word 0x94b3e650 +.word 0x6c8e3a72 +.word 0xb56bd264 +.word 0xb8bbb3c0 +.word 0xe1496030 +.word 0x3a3bd78f +.word 0xd47d724a +.word 0xd3d52e14 +.word 0xab85199e +.word 0x83279c52 +.word 0xcc2ebd1b +.word 0x3859ed3a +.word 0xa32eb9c4 +.word 0x1379350b +.word 0x9cd53318 +.word 0xc14718f7 +.word 0x53997d27 +.word 0x52318a5b +.word 0xca3275ec +.word 0x53528909 +.word 0x24e3a189 +.word 0x1c4d8723 +.word 0xe06ca25e +.word 0x6883cf49 +.word 0x5ed76f04 +.word 0xce6a2186 +.word 0xefa372c5 +.word 0xca8c0cc5 +.word 0xa1f7d2dd +.word 0x00dd529e +.word 0x5bb1d190 +.word 0x89903bf0 +.word 0x7ea00c18 +.word 0x84fa8de2 +.word 0x006ac4b5 +.word 0xfabbc008 +.word 0x98086f2e +.word 0xa86c5e71 +.word 0x9349a0d3 +.word 0x41752ac8 +.word 0xae5c39b1 +.word 0x387f6aee +.word 0x65d84980 +.word 0x81a7c423 +.word 0xc46c5920 +.word 0x6bfdde9d +.word 0x539f7b72 +.word 0xf69fb3c2 +.word 0x39d728f8 +.word 0x5c812a97 +.word 0x823458b3 +.word 0x6f965976 +.word 0x7d6b26e3 +.word 0x5a84a850 +.word 0xe21951e6 +.word 0xde0a0a3b +.word 0x4a542c7d +.word 0xd3a80224 +.word 0x1c625f4f +.word 0x3d49e275 +.word 0x57b8c369 +.word 0xc733d3f5 +.word 0xbec559f3 +.word 0xa1fe3fff +.word 0xfc4a4cdd +.word 0x00f0b5c4 +.word 0xce970e7f +.word 0x31ac96e8 +.word 0x84233090 +.word 0xbd6681fe +.word 0x6bd962c4 +.word 0x0699d17b +.word 0x6acfb9e4 +.word 0x451e62ba +.word 0x80310fe6 +.word 0x06ff6274 +.word 0x5afa02e8 +.word 0x401e6515 +.word 0x5d464ce2 +.word 0x978e0e3c +.word 0x0adbba5e +.word 0x74a31e70 +.word 0xbdb40753 +.word 0x4647a3d0 +.word 0xb63e01aa +.word 0xf9890270 +.word 0xadd0194b +.word 0x239b0d18 +.word 0xbf5fa871 +.word 0x192ad76b +.word 0x2ba0d032 +.word 0xca159ca6 +.word 0x6effa56a +.word 0xb55e4c7b +.word 0xbebc2a87 +.word 0x6efbb421 +.word 0x6f37c153 +.word 0x191de590 +.word 0x49e26039 +.word 0x4967a57d +.word 0xf6211bd9 +.word 0x24c20538 +.word 0x7a7b9aba +.word 0x801154b3 +.word 0x754837ac +.word 0x6e096c52 +.word 0xbb2417b2 +.word 0x546c4707 +.word 0xce634e3b +.word 0x7c63b9e9 +.word 0xf522766d +.word 0x48426252 +.word 0x21f8f67e +.word 0xbfa6135b +.word 0x2a5521e1 +.word 0x3752cfbb +.word 0x93bdbc4f +.word 0xcfdbb43d +.word 0x2624a188 +.word 0xe6c5cd25 +.word 0x6165da16 +.word 0xa3b93b29 +.word 0x8749fd26 +.word 0x63c6e182 +.word 0x44129872 +.word 0x7d2bf77a +.word 0x9352c650 +.word 0x50da43d5 +.word 0x0ef14101 +.word 0x1fb9f66c +.word 0x1377f8eb +.word 0x008bdc6c +.word 0x3c6401ea +.word 0x7c8dcb2f +.word 0xce345a14 +.word 0x04bddb99 +.word 0x29194dfe +.word 0xb18b68de +.word 0xe8ad5bdd +.word 0x6d198b67 +.word 0xf8aa04ac +.word 0xf3636d5c +.word 0x18694693 +.word 0xaa81ef20 +.word 0xbb29a349 +.word 0xe522dca8 +.word 0x721928c8 +.word 0x08ce9a7e +.word 0xfee6ddf0 +.word 0xf103fe49 +.word 0x96543f48 +.word 0xb4bfee09 +.word 0xac4368e6 +.word 0xb7a0ced2 +.word 0x8ec274c5 +.word 0xa6be9bd2 +.word 0xd264c5d1 +.word 0xec78910e +.word 0x09d7eccc +.word 0x4a65e3b2 +.word 0xdb31feca +.word 0xd3f78089 +.word 0x0129e5d7 +.word 0x9819a435 +.word 0x53a51ed5 +.word 0xfff6f703 +.word 0x46c37f46 +.word 0xe2e9f305 +.word 0x5ac082bb +.word 0xfc29b377 +.word 0xba2e6b10 +.word 0x268ea452 +.word 0x19ccc228 +.word 0xcd7b0b78 +.word 0xd74e50b0 +.word 0x90e3c2b4 +.word 0x633f67d1 +.word 0x8b59b061 +.word 0x6fedfbf5 +.word 0x89ccaa32 +.word 0x07b7486f +.word 0x2005daca +.word 0x72599796 +.word 0xd8a255bc +.word 0x13c68e5a +.word 0xba856c54 +.word 0xa2528c47 +.word 0x5c7833ca +.word 0x367a9dbc +.word 0xc6ce2cd6 +.word 0x7db0c839 +.word 0xe6c53a3b +.word 0x1fd26c2f +.word 0x635ef09a +.word 0x16381258 +.word 0x58b05f9e +.word 0x2102b79b +.word 0xcf35618a +.word 0xb4fd9646 +.word 0x754e161a +.word 0x862405e8 +.word 0x4e65d575 +.word 0xa7502854 +.word 0x7db1e6cf +.word 0xec9e2293 +.word 0x8b8c5683 +.word 0x29415194 +.word 0x336f99dd +.word 0x230e6af4 +.word 0x7f0a7b1b +.word 0xf82ebf35 +.word 0x7354e6d3 +.word 0x0899c256 +.word 0x32402ed8 +.word 0x3a6fa26f +.word 0x3caeb117 +.word 0x82e97ad7 +.word 0xd0addcfd +.word 0x1fb90603 +.word 0x5dda2484 +.word 0x7e3b4ba5 +.word 0x61c161ee +.word 0x9b348d94 +.word 0xfaf82ca9 +.word 0x93a57a6f +.word 0x7542c48f +.word 0x68341967 +.word 0xf9e3a0ec +.word 0xa23a0a4c +.word 0xc3faee58 +.word 0x24742345 +.word 0xdef7a7b2 +.word 0xbb5f6b59 +.word 0x29c49a88 +.word 0x7faf88f2 +.word 0x68dcc2ef +.word 0x01a0c18f +.word 0x1de64aaa +.word 0xda7bb568 +.word 0x0874da98 +.word 0x7e6d136e +.word 0xba570dfc +.word 0xab60f726 +.word 0x58d8e137 +.word 0x4085e6e5 +.word 0xc877fc84 +.word 0xb612e04b +.word 0x49804d47 +.word 0x2b159940 +.word 0x4d127e06 +.word 0xf1a0d493 +.word 0x51fc6728 +.word 0x3e2f4838 +.word 0xb6b5948f +.word 0x792f6505 +.word 0xb38a9507 +.word 0xaea40d1f +.word 0x24338214 +.word 0x1bb8a4b3 +.word 0x42a60781 +.word 0xeb04a7a2 +.word 0x31d41d1a +.word 0x802d8cfc +.word 0x24faa024 +.word 0xcf960580 +.word 0x456bedf9 +.word 0x2c8088f2 +.word 0x388ad0ae +.word 0x69c132c8 +.word 0xbd19b933 +.word 0x52bea52b +.word 0xcf5acb5b +.word 0x89d45132 +.word 0xe3b75c03 +.word 0xb9a4729a +.word 0x54010cca +.word 0x648d5dbd +.word 0x4c289ed8 +.word 0xb1c53fe5 +.word 0xa8d87a8b +.word 0x83490aa4 +.word 0xaf4cb4e0 +.word 0xee99d169 +.word 0x84dac9b5 +.word 0xf07bb1bc +.word 0x22e03a8c +.word 0x6e9f18e0 +.word 0xd352c5a9 +.word 0xf7f09e25 +.word 0xbeb4fbc1 +.word 0x3762fe84 +.word 0x66e2d9aa +.word 0xe308bfd2 +.word 0x4ea14caf +.word 0x6efa7a8d +.word 0xeca647d9 +.word 0x6245cc61 +.word 0x03b57e03 +.word 0x58325181 +.word 0x07c73605 +.word 0x145e4f1f +.word 0xb984349f +.word 0xeaeb92c3 +.word 0x6077858b +.word 0x73dce50f +.word 0x7c5a6995 +.word 0x67afe577 +.word 0x3da42eba +.word 0xf3f4e254 +.word 0xda586033 +.word 0xab562177 +.word 0x1d170a98 +.word 0xf5148c85 +.word 0xec7ea56a +.word 0x63a1be1b +.word 0x045c7c44 +.word 0xd50c7575 +.word 0x5f18b3ea +.word 0x951f3b16 +.word 0xad77b424 +.word 0x5e72824e +.word 0xdf5ead89 +.word 0x85b45ce6 +.word 0x8deba81a +.word 0xfa8678cc +.word 0x66687d02 +.word 0x6a419b35 +.word 0x0c844a4e +.word 0x0054bf6e +.word 0x7d114a5c +.word 0xbbce1d25 +.word 0x15c506c7 +.word 0xc4ed1068 +.word 0x15ae412a +.word 0xa779de3b +.word 0x9978c1e5 +.word 0x7e12b60e +.word 0x103e2d1d +.word 0x106485ed +.word 0x1f24df33 +.word 0x75fa67aa +.word 0x4e9b0296 +.word 0xf87b9a0a +.word 0x30f82b25 +.word 0xbca54a3c +.word 0x5ff86f25 +.word 0xdb34461d +.word 0x52ef5561 +.word 0x8de3d518 +.word 0xad477b74 +.word 0x2ee0dab2 +.word 0x223a35ab +.word 0x4a984ca7 +.word 0x0983737a +.word 0xb511e68b +.word 0xf64a9bd8 +.word 0xa57e2a53 +.word 0xf32284d0 +.word 0x10b66d8f +.word 0xb78fbd8b +.word 0x6e6fb30c +.word 0x79f28627 +.word 0xe1accc70 +.word 0x027cee3c +.word 0xd5834052 +.word 0x5623cc57 +.word 0x03c3210b +.word 0xd8339804 +.word 0xcc3b4f52 +.word 0x7856c47a +.word 0xd5f24073 +.word 0x032e9646 +.word 0x9fab9e1f +.word 0xd54eeef2 +.word 0x21f181f8 +.word 0x43b0942e +.word 0xbbce4cb8 +.word 0x07ba91e3 +.word 0x78004056 +.word 0x9e2990f4 +.word 0x645582ea +.word 0x07ed252d +.word 0x75b206ae +.word 0x8deee6ab +.word 0x8cef11df +.word 0xf24299b0 +.word 0x56f29d8a +.word 0xe11f032f +.word 0xbf6e4cb7 +.word 0x3a54fd0f +.word 0xa9ee2147 +.word 0xb010214a +.word 0x7e09e6e1 +.word 0x0e4b56b5 +.word 0x3dd871e5 +.word 0x75d559c0 +.word 0x1b120c81 +.word 0xacec6660 +.word 0x2934b926 +.word 0xdf8fe306 +.word 0x5d25651d +.word 0xb1a87b46 +.word 0x4a33f51a +.word 0xa369e538 +.word 0x9f0b3143 +.word 0x8e52ccfc +.word 0x86744d75 +.word 0xbb3b7923 +.word 0xa6c94d20 +.word 0x16fb26a7 +.word 0x79bfc0ed +.word 0x863c8b8c +.word 0x5a074b18 +.word 0xbf6feb51 +.word 0x2ada1bce +.word 0x388ca282 +.word 0x4c3e3d36 +.word 0xd61eabe1 +.word 0x304c87b2 +.word 0x5fb515ef +.word 0xd51be178 +.word 0xfaf66468 +.word 0xb8a879d8 +.word 0x3111115e +.word 0xb368c46c +.word 0x48523365 +.word 0x4dd50cb8 +.word 0x2c189120 +.word 0xce4052a9 +.word 0x0a753c71 +.word 0x77e8ce2a +.word 0xb03315db +.word 0x19c5db1f +.word 0x1bdb99ff +.word 0x818f0f9f +.word 0x5d0ad5f7 +.word 0xea35550b +.word 0x08195e02 +.word 0xf9f9755f +.word 0xdce96291 +.word 0x7b9f2256 +.word 0x9511b2e9 +.word 0xc758f894 +.word 0x9632b1b3 +.word 0x964fe5c9 +.word 0x2661acca +.word 0x2a0b911d +.word 0x7c7f659b +.word 0x9d2adca7 +.word 0x3a2858c6 +.word 0x0cc97d24 +.word 0x926fc639 +.word 0x1186ecb2 +.word 0x8040caf5 +.word 0x26af1de8 +.word 0x5a6c8eed +.word 0x973810e4 +.word 0xaf390e68 +.word 0xb28f7808 +.word 0xb52323fd +.word 0xb0dae5f9 +.word 0x7aee1142 +.word 0x2eb681e8 +.word 0x0a620bd7 +.word 0xc79d27df +.word 0x82665d4c +.word 0xa0eefc54 +.word 0x02504fe8 +.word 0x0b50c183 +.word 0x0134cfa7 +.word 0x92b80437 +.word 0xc7a19876 +.word 0x0d911fa1 +.word 0x039c1fff +.word 0xd2d11e4a +.word 0x2441e8be +.word 0x26e45d6b +.word 0xfce906bc +.word 0xc481cbdb +.word 0xec5c9a48 +.word 0x8b6feeca +.word 0xb49cf1c2 +.word 0xf83ed23c +.word 0xfb075293 +.word 0x50bba0e7 +.word 0x97b93dea +.word 0xa34aac18 +.word 0xff5d1fbb +.word 0xbe854a19 +.word 0x31549818 +.word 0x092bbb7b +.word 0x02423074 +.word 0x74302510 +.word 0xbdce1c56 +.word 0x7d8c1b17 +.word 0x97ecffbf +.word 0x865998c4 +.word 0xe607b21c +.word 0x9eeb657b +.word 0xe3c25405 +.word 0xdefba558 +.word 0x53074b88 +.word 0xd145c03b +.word 0xf99003ae +.word 0x4218a350 +.word 0xb2b9a811 +.word 0xc7fcad61 +.word 0x1a5ffd14 +.word 0xa35c128a +.word 0x0a1eb9ce +.word 0x3c900c4a +.word 0x1d65739a +.word 0xb29bc44b +.word 0xc17ef1ee +.word 0x6f8d793c +.word 0xe5ea45d9 +.word 0x43e60439 +.word 0x333d4de6 +.word 0xbb988ce5 +.word 0xf20ae27a +.word 0x3fdfde5f +.word 0xdd0304b1 +.word 0xc481461d +.word 0x312d2dec +.word 0xc041392a +.word 0xb65d83e1 +.word 0xf712d893 +.word 0x873ae1ab +.word 0x353ef11a +.word 0xe2fbba40 +.word 0xa72c0f15 +.word 0xc81e8eac +.word 0xacd049d6 +.word 0xd4463c28 +.word 0xb0a8d61a +.word 0x96d0251e +.word 0x4d0bb941 +.word 0x8bb4bb32 +.word 0xe8b214f2 +.word 0x08dd1fa1 +.word 0xe8e28fa5 +.word 0x56b01d76 +.word 0x962b5e5f +.word 0x65b5ff0b +.word 0x40144dbb +.word 0x11539cd7 +.word 0x34dd8f99 +.word 0x5681e306 +.word 0xefc4369e +.word 0xa12f7555 +.word 0x4a2ad67c +.word 0x5ee92e16 +.word 0x3f00fd89 +.word 0x09f1d9da +.word 0x0c2c385d +.word 0x7f5597a5 +.word 0x148be97c +.word 0xbf71d874 +.word 0x8d30bf82 +.word 0xac08a090 +.word 0x37b979aa +.word 0xe8e0cf74 +.word 0xb13a596f +.word 0xff269fd7 +.word 0x2b14698b +.word 0x69ccc593 +.word 0xf6adceab +.word 0x1f58627a +.word 0xbdf7852b +.word 0x008ee2a4 +.word 0xc3d2a44e +.word 0xf900aeb3 +.word 0xe84da722 +.word 0x18bf960b +.word 0xacb91216 +.word 0x30ee9a2d +.word 0x7e59afa1 +.word 0xcd5e47ba +.word 0x253f1dd4 +.word 0x81ff1614 +.word 0xc24159a6 +.word 0x8d7eb95c +.word 0xf08fe611 +.word 0xa9c30397 +.word 0x2d22c4f1 +.word 0x0851bb3c +.word 0x1a77df25 +.word 0xff29eee5 +.word 0x379ed817 +.word 0x16964d0c +.word 0xc29acd19 +.word 0x00be820d +.word 0xe313f9f7 +.word 0x7dbec600 +.word 0xb5e02bb3 +.word 0x2436b15c +.word 0xc67c6732 +.word 0xb9c29ea7 +.word 0x5d42fb94 +.word 0xda089ba1 +.word 0x2c6cf2d7 +.word 0xbc2cdcd8 +.word 0x8b91f159 +.word 0x5d16c56c +.word 0x923c7022 +.word 0xd790afa6 +.word 0x0585c3f1 +.word 0x7759922a +.word 0xa86c6143 +.word 0x196eac11 +.word 0xcf72e6d8 +.word 0x3ecbdd2d +.word 0xf76e1465 +.word 0x885539f8 +.word 0xef7bebaf +.word 0xb09c9484 +.word 0x5afb74ac +.word 0xbba25369 +.word 0x85e7f27c +.word 0x13188485 +.word 0x650d9b0d +.word 0x926ab1e3 +.word 0x0136d97f +.word 0x2d3e73ce +.word 0xcc7ae167 +.word 0xcdc4a51a +.word 0xd00d490c +.word 0xe93e87c6 +.word 0xf90906d1 +.word 0x2087a498 +.word 0xde74ebbd +.word 0xae3f2699 +.word 0x132bc79f +.word 0xc4bdbd6b +.word 0x7f86283c +.word 0x547a018c +.word 0xe5f09514 +.word 0x40e64b8d +.word 0x96321c5f +.word 0x3a2f1c30 +.word 0x0bee6c49 +.word 0x31c98241 +.word 0x319a891e +.word 0x241f56f6 +.word 0xe80d9f9c +.word 0x55dffb49 +.word 0x8a249b45 +.word 0xf59df542 +.word 0xdad3e646 +.word 0xf939364b +.word 0xe806e627 +.word 0xb8cb22c0 +.word 0x64276146 +.word 0x9729df97 +.word 0xfe35ee57 +.word 0x5c96f0ce +.word 0xb2ab37dc +.word 0x7cf86b8b +.word 0x60ccc79f +.word 0x51f60f36 +.word 0x1ce6dec7 +.word 0x82ac792b +.word 0x75129ce3 +.word 0x70bae14f +.word 0x04d9dcdc +.word 0x135898c6 +.word 0x9c091374 +.word 0xe7a7449b +.word 0x7eb0b6ba +.word 0xdc88fe5f +.word 0xd2ead572 +.word 0x513e1239 +.word 0xa200d4ee +.word 0x33529e3b +.word 0xe633dd12 +.word 0xf36fcb7c +.word 0xbeea5bd1 +.word 0x83cb079e +.word 0x062de2d1 +.word 0x84008450 +.word 0x92a6579d +.word 0xa81332a0 +.word 0x1db0e55a +.word 0x29c648e0 +.word 0x92cdadd3 +.word 0x9ba3e36d +.word 0x9fef2dac +.word 0xbe15606a +.word 0x12d4abb1 +.word 0xad56ba35 +.word 0xee7acdb4 +.word 0xa5db2d4f +.word 0x1c42ca87 +.word 0x005113b0 +.word 0xd7d6dac6 +.word 0xec2453af +.word 0x4be89b0b +.word 0xc82a186a +.word 0xbf9b09c5 +.word 0xdad021cb +.word 0x3e04c35d +.word 0x6e28f0fa +.word 0xecd1126c +.word 0xdc51c04f +.word 0x44abf3b5 +.word 0xa358548d +.word 0x9f5866bc +.word 0xa1e5ad57 +.word 0xc0ef2e75 +.word 0xf6d34a6a +.word 0x2744e844 +.word 0x024e5a2c +.word 0x4fc5abff +.word 0xe53cca23 +.word 0x7a7c164d +.word 0xc26fa16e +.word 0xe7aef6d0 +.word 0x0584e2c8 +.word 0xf41028ad +.word 0x340d80be +.word 0x2a481620 +.word 0xd3d675eb +.word 0xb640d4a6 +.word 0x3ff5bf3f +.word 0x3238c611 +.word 0x61aa3505 +.word 0xcdf60292 +.word 0x1de4cb48 +.word 0x0e48545a +.word 0xb070c15b +.word 0x054eab2a +.word 0xa19d84f9 +.word 0x7c3ca8d1 +.word 0x2b701e72 +.word 0x60e0e746 +.word 0x45e495a9 +.word 0x23fc28c9 +.word 0xa8a77b48 +.word 0x15c70e8b +.word 0xfd232a5c +.word 0x5a07639e +.word 0xccd66e98 +.word 0xc2d6bda7 +.word 0xc3bb4d58 +.word 0xd124e96a +.word 0x4b985d23 +.word 0x72b225cd +.word 0x73c820b4 +.word 0x0c104758 +.word 0x32e81be8 +.word 0xa72b1d9c +.word 0x516a5519 +.word 0x6ba9c8df +.word 0x93792bd0 +.word 0x873fd688 +.word 0x05c5f036 +.word 0x430dabcf +.word 0x908eccd1 +.word 0x197ec1d1 +.word 0x22576ee3 +.word 0x1fa7915e +.word 0x0691a3da +.word 0x242bbae2 +.word 0xb5c9c543 +.word 0x267c862a +.word 0x14c66f90 +.word 0xa051c95b +.word 0xcbd67ec3 +.word 0x822dcbda +.word 0xd6f14ee6 +.word 0x30105b39 +.word 0xb26e8a89 +.word 0x82c68631 +.word 0xd651f3b1 +.word 0x76fc8d89 +.word 0x502fd146 +.word 0x7d4e6057 +.word 0x0435d304 +.word 0x2ef39008 +.word 0xf9087ce7 +.word 0x57b6b29a +.word 0xb3f7bb76 +.word 0x9a90c4e0 +.word 0xeef17097 +.word 0x1afcca79 +.word 0x4440af46 +.word 0xe61e1f15 +.word 0x7211f1ba +.word 0x50600893 +.word 0xca8b9195 +.word 0xed957df9 +.word 0xb4a46950 +.word 0x6746ffdd +.word 0xc47a0a9a +.word 0x4b8ede29 +.word 0xc8dcbf05 +.word 0x78fbf0bb +.word 0x6fe81522 +.word 0x5dc13f22 +.word 0xd970ba0b +.word 0x56ce7468 +.word 0xfba3bef1 +.word 0x40c2b06a +.word 0xcf1a1d14 +.word 0x86152e67 +.word 0xf7a00ba6 +.word 0xfa858bd8 +.word 0xfdbba29c +.word 0xc4fd6de6 +.word 0x6e8ea9bc +.word 0xd88dd6eb +.word 0x60c6fe2b +.word 0xd4cdc957 +.word 0xe98a1a86 +.word 0x183b5b53 +.word 0x16fa9247 +.word 0xaafb949d +.word 0x796a6633 +.word 0xd9afa43b +.word 0xdcd95775 +.word 0x5384ce4f +.word 0xa65b008a +.word 0x1eb1f3b2 +.word 0x398d1c58 +.word 0x4111dead +.word 0x26632421 +.word 0xbefefff7 +.word 0xfc3c42be +.word 0x747c7f5a +.word 0x159e0011 +.word 0xdd87003a +.word 0x9b36a9e4 +.word 0x816cb8ce +.word 0x7f05e5d7 +.word 0xb004de6f +.word 0x6dc77aed +.word 0x19fae491 +.word 0x10d4f837 +.word 0xee9d8910 +.word 0x4a9bb659 +.word 0xd10d9796 +.word 0x278d9bd9 +.word 0x3b613619 +.word 0x037d2e00 +.word 0xe72082d9 +.word 0x4005abf8 +.word 0x12ea025c +.word 0x86426321 +.word 0x50b87999 +.word 0x2939ca6f +.word 0x13d44339 +.word 0xcf2b2a21 +.word 0xdf8aced2 +.word 0x13bc6bb1 +.word 0x4ebf5e55 +.word 0xffd0c258 +.word 0xf5d63a72 +.word 0xb0fb0e01 +.word 0x3371ac02 +.word 0xaf3d18e0 +.word 0x267ad585 +.word 0xeec5af9b +.word 0xc09d8a7f +.word 0x9f729363 +.word 0xd1d27ded +.word 0xfd99f3ef +.word 0x97d0d072 +.word 0x69ef9d1c +.word 0x8eb1c84d +.word 0x2c9471bc +.word 0x092a45ce +.word 0x73c04be3 +.word 0x2b43f11e +.word 0x656b1528 +.word 0xaa4bbd5f +.word 0x17919197 +.word 0x43362c70 +.word 0x828f6364 +.word 0xa9bf122d +.word 0x92fe8ea2 +.word 0x9d83e510 +.word 0xdf7cd455 +.word 0x0ddc2259 +.word 0xa8ee4eef +.word 0x20766d98 +.word 0x2243309f +.word 0x1d9139fc +.word 0x75bc91d2 +.word 0x83afdfad +.word 0x46a7a819 +.word 0xd36064d6 +.word 0xf4887e8c +.word 0x4f583185 +.word 0x68a2cf80 +.word 0xbcd1a0d8 +.word 0xe97a18e3 +.word 0x9e7bae32 +.word 0x9b275eb5 +.word 0x2319c759 +.word 0x471fbcaa +.word 0xd7fc5338 +.word 0x2ef9b304 +.word 0xd0f45937 +.word 0xec29c86e +.word 0x81193b36 +.word 0x4c8a455a +.word 0xdc1367db +.word 0x4c6e8268 +.word 0xe6d12013 +.word 0x01f8385f +.word 0xc9c94036 +.word 0x3921b60f +.word 0xb60add0c +.word 0x01e07851 +.word 0x9434cd97 +.word 0x4f9d87ee +.word 0x1f7a824a +.word 0xa03b9109 +.word 0xd8bd796d +.word 0x6b727539 +.word 0x9bc3e8ed +.word 0x81b4cad8 +.word 0xc9e14efc +.word 0x3f07da31 +.word 0x3e1aa35e +.word 0x2ce99dc5 +.word 0x7e2d633b +.word 0xeb571f18 +.word 0x08997a7b +.word 0x9c236aa7 +.word 0x803850a0 +.word 0xfe0f6a9c +.word 0xc84bccb5 +.word 0x782b8af4 +.word 0xc3a560f8 +.word 0x73982eff +.word 0xe8187d01 +.word 0x09051f1a +.word 0x1c5c1925 +.word 0x04b224ab +.word 0xbb6d23f9 +.word 0xdcbb229c +.word 0x6294b44c +.word 0xc938178b +.word 0x693244a6 +.word 0xc59d2eff +.word 0x14e93d0a +.word 0xc528ff7b +.word 0x51895b07 +.word 0xe96df9dc +.word 0x1d54ff2b +.word 0x99424116 +.word 0xb27b81f8 +.word 0xa7f2d5fd +.word 0x7c2a8b14 +.word 0xed65f0a2 +.word 0x2051765c +.word 0x50da97e5 +.word 0x5e6415ba +.word 0xb2b97e8b +.word 0xbd97b0b8 +.word 0x21e58cbe +.word 0x25083430 +.word 0xd3c91c1e +.word 0x78e2d1db +.word 0x4e047fc6 +.word 0xfeba6055 +.word 0x35222118 +.word 0x7607d1ac +.word 0x01f4dff9 +.word 0x6ca9f863 +.word 0xa1ed5fa9 +.word 0xf354e9bf +.word 0xa4a32723 +.word 0x68a8aa14 +.word 0x17adc059 +.word 0x3145c448 +.word 0xbac5a484 +.word 0x7592ee48 +.word 0x38334409 +.word 0xbb374f00 +.word 0xed615663 +.word 0x73fb8729 +.word 0xacc323ff +.word 0x64950e1d +.word 0x619ee3fa +.word 0x347a4834 +.word 0xaaaf3887 +.word 0xbfe3232c +.word 0xdeff01ba +.word 0x94e6a4bc +.word 0xec652405 +.word 0xae8463de +.word 0x9f435bee +.word 0xd6c49f04 +.word 0x630dc8bf +.word 0xd82af509 +.word 0x4b1fbc6e +.word 0xf6a43723 +.word 0xf51bd8b3 +.word 0x0a8d2f14 +.word 0x685e8548 +.word 0x970895a0 +.word 0x18588b95 +.word 0xcb84e443 +.word 0x67be50ea +.word 0xcac20066 +.word 0x1a66f819 +.word 0x793fad21 +.word 0x65ea5831 +.word 0xe1916662 +.word 0xc9e07e8a +.word 0xf316b0e8 +.word 0xe18ddf3e +.word 0xd3c5943c +.word 0x4ac12b8f +.word 0xaa458a91 +.word 0xd4752d14 +.word 0xc5f3f072 +.word 0x46cd370b +.word 0x46c163a7 +.word 0x430e2809 +.word 0xe8facc86 +.word 0xcb94c0f7 +.word 0xa2e4b1a8 +.word 0xfbe2e3f8 +.word 0xefcb8967 +.word 0x22c76262 +.word 0xf7168405 +.word 0xbc148202 +.word 0x019e6f26 +.word 0xdbf7f9ef +.word 0x07c36803 +.word 0x4fdfd33b +.word 0x1149bc94 +.word 0x14d8c21d +.word 0x8b1fec76 +.word 0x272f22e8 +.word 0x83b02fcc +.word 0x3e502f00 +.word 0xcf8f37ba +.word 0x11f4a13c +.word 0x573b82aa +.word 0x88f332d6 +.word 0xb06f1833 +.word 0x5eb7d235 +.word 0xbc0ddd73 +.word 0x0a0f2036 +.word 0xeec00214 +.word 0x8ef18bb1 +.word 0x24c6bda6 +.word 0x2fe11f67 +.word 0xfcddc956 +.word 0x0c46e83d +.word 0xf49cc273 +.word 0x6ec5cfc0 +.word 0x8ca0829f +.word 0x8a0a10aa +.word 0x312c71e2 +.word 0xa13d6a37 +.word 0x443c6a6b +.word 0x9b0989e1 +.word 0x7aed2a55 +.word 0xdc878029 +.word 0x24395e5c +.word 0x70810620 +.word 0x5cb08c1f +.word 0xd6257327 +.word 0x7da06abd +.word 0x3cbe931d +.word 0x1f3bec4f +.word 0xb727e7b8 +.word 0xd5140c67 +.word 0x772011fb +.word 0x8c509581 +.word 0xc6be6bbe +.word 0x98500779 +.word 0x50231b59 +.word 0xffc34d8e +.word 0xb738cfea +.word 0x18936cb7 +.word 0x207644b3 +.word 0x041c3380 +.word 0x0fdd76ab +.word 0x6f31f827 +.word 0x45cd454b +.word 0xb4a207b2 +.word 0xda8d60b9 +.word 0x9b0d7677 +.word 0x004357a7 +.word 0x3efd6748 +.word 0xf9260731 +.word 0x362471f0 +.word 0xd2ff1e6c +.word 0xfe0806c8 +.word 0x6c1ff95c +.word 0xef369d64 +.word 0x9091e6b6 +.word 0x60b07ac4 +.word 0x4d5d733d +.word 0x1aef1c43 +.word 0xe8ef1dd2 +.word 0xa2a294bd +.word 0x1ce25355 +.word 0xba4c14fd +.word 0xfb483131 +.word 0x97cf8396 +.word 0xfcc3c617 +.word 0xe814c775 +.word 0xab4c7e84 +.word 0x7cb06917 +.word 0x9db7563d +.word 0x153643b1 +.word 0xe0a66759 +.word 0x0f0e4ed3 +.word 0xc6b6149a +.word 0xa49607ad +.word 0xc25375d6 +.word 0x1cdf68cb +.word 0x1b340456 +.word 0x63287bdb +.word 0xd46f65c3 +.word 0x9f6212ec +.word 0x10683e4e +.word 0x7a4a6bdd +.word 0x4a8f3acf +.word 0x08fd2eb7 +.word 0x49cd1965 +.word 0xd7d062d7 +.word 0x39e708e6 +.word 0xad6e6600 +.word 0xfc34247b +.word 0xad000803 +.word 0xee656416 +.word 0x8f65765c +.word 0x1bf1abff +.word 0x12361606 +.word 0x50683356 +.word 0x552869c2 +.word 0xb38b0283 +.word 0xff498e68 +.word 0xb83b36c1 +.word 0x75fdf256 +.word 0x0218b07f +.word 0x0a69f557 +.word 0x5681917f +.word 0x1ae8e220 +.word 0xad07b259 +.word 0x966c7d7b +.word 0x285b1b95 +.word 0x6c0a7fe3 +.word 0xde8ff30c +.word 0xb765d982 +.word 0x9bb6d3c6 +.word 0xbc1973ba +.word 0x0fa1f741 +.word 0x90b6711c +.word 0x0c7f94e9 +.word 0x8ca7740a +.word 0x55b7542f +.word 0x5acb29a9 +.word 0x86fee1cb +.word 0x0861601d +.word 0x9dcb1a5e +.word 0xc6f8eed6 +.word 0xdbf3fbaf +.word 0xbfb5f3ef +.word 0xf1bcbf00 +.word 0xb549c9be +.word 0x72c586ba +.word 0x2e9e9e6e +.word 0xa1bc6384 +.word 0x3db59e57 +.word 0x8082259c +.word 0xf785bf95 +.word 0xafe442dd +.word 0xd806c15d +.word 0x90c31e2e +.word 0xc64f7841 +.word 0xad2aa960 +.word 0xd0a9208f +.word 0xa0dec1cc +.word 0x8e164a9d +.word 0x8081d538 +.word 0x7645a22d +.word 0xfb5a77fe +.word 0x46e5fcd6 +.word 0x455e8f9e +.word 0xd05a898e +.word 0xd67e216f +.word 0x5931f18f +.word 0x23c4e01a +.word 0x665bd494 +.word 0xcc5a09c4 +.word 0x09488794 +.word 0x25576022 +.word 0xfb4c49c1 +.word 0x7a9a65c0 +.word 0x7faa0013 +.word 0xd2e68df8 +.word 0x34aa9c08 +.word 0x71ef24c9 +.word 0x32ca0b2b +.word 0x82a6fd66 +.word 0xa7d5455e +.word 0x0db8df20 +.word 0xd37a2f5e +.word 0x8374fc83 +.word 0x3ee5db92 +.word 0x29e472ab +.word 0x4d9ababd +.word 0x768dbcd4 +.word 0x01bd7e8d +.word 0x81d195a3 +.word 0xf63183a3 +.word 0x7b37f602 +.word 0x73b15c94 +.word 0xd63f7b2d +.word 0xadf88f0d +.word 0x27319998 +.word 0xd1a82565 +.word 0x0bb35ece +.word 0x4ffefcbf +.word 0xd706c886 +.word 0x337ac8e2 +.word 0x6ef57d32 +.word 0xaf6a7529 +.word 0xbfaf99dd +.word 0xe4004e61 +.word 0x3a904f6e +.word 0xc6df5def +.word 0xbcb4a94e +.word 0xa6395d46 +.word 0xf23e792c +.word 0x1441d5e3 +.word 0x6f83f483 +.word 0x8f9029ef +.word 0xe16d5067 +.word 0xb5e4c23b +.word 0x841d22dc +.word 0x83b30014 +.word 0x2bdc4504 +.word 0xa215e5fe +.word 0xc68debee +.word 0xe35692fd +.word 0xd948946b +.word 0x1d87abb4 +.word 0xca10b739 +.word 0x672f52ff +.word 0xe9799087 +.word 0xda2368e3 +.word 0xf1d32949 +.word 0xbe96425b +.word 0xc61b7405 +.word 0x01f6e54a +.word 0x0dea47f9 +.word 0xea95f795 +.word 0x77e625bc +.word 0x49b55a54 +.word 0x50fc96c7 +.word 0x3a58db8e +.word 0x0bd0af83 +.word 0x162b462f +.word 0xbd72fb60 +.word 0xe7d76999 +.word 0x5d31b836 +.word 0x53f1ef1a +.word 0x83e6006e +.word 0x2ba6d631 +.word 0x43bb247d +.word 0x7654e59f +.word 0xc589aab3 +.word 0xc3dab54a +.word 0x170f8292 +.word 0x342e7575 +.word 0x12ace139 +.word 0xdedf621e +.word 0x2ae444fd +.word 0xa6d25d31 +.word 0x157cb7c5 +.word 0xc0c39ce8 +.word 0x3c7b1f49 +.word 0xab62b696 +.word 0xdfa0e011 +.word 0x3de264a9 +.word 0x067a45a7 +.word 0x8ffbdfeb +.word 0x486f51a5 +.word 0xba8cb0d5 +.word 0x58cd6dc4 +.word 0x0088329c +.word 0xb6a886c8 +.word 0xd3ccdcb9 +.word 0xfd38de08 +.word 0xc4a5b709 +.word 0x9ad822cd +.word 0x237cb254 +.word 0x0650c649 +.word 0x6f296d53 +.word 0x78796f5b +.word 0x5bf00af9 +.word 0x29fbddef +.word 0xb86313ce +.word 0xdc705276 +.word 0x15bf56db +.word 0xdac5a588 +.word 0x28943bad +.word 0x61ac13bd +.word 0xa15b42e4 +.word 0xa4964f65 +.word 0xbb4d4a74 +.word 0x34421fef +.word 0x5bc86933 +.word 0xaf6e28b0 +.word 0x9668fc2d +.word 0x82fb1616 +.word 0xf384acc0 +.word 0x34ac5d00 +.word 0xce9d483d +.word 0xf50ef9aa +.word 0x0437e07b +.word 0xdc559095 +.word 0xcf5e833e +.word 0x5901d907 +.word 0x5440e2f6 +.word 0x8ab18582 +.word 0xeef4eab5 +.word 0x23b9aa88 +.word 0xcf1850f0 +.word 0xa1a1c88a +.word 0x17a5bf60 +.word 0xf7ff1ae0 +.word 0x3e59d112 +.word 0x20b14370 +.word 0xd82d4062 +.word 0x728c4dd2 +.word 0x6b33e407 +.word 0x4550febe +.word 0x08d3cdc2 +.word 0x7cbaaa3b +.word 0x47efe216 +.word 0x69fd913a +.word 0xc2802d3a +.word 0xcef482e7 +.word 0x86797830 +.word 0x5c89dc42 +.word 0x4800302c +.word 0x0e4a5cad +.word 0x16b5cb4d +.word 0xef254093 +.word 0x65cd0571 +.word 0xd2f6c24c +.word 0x6dfcca48 +.word 0x2bfb18b7 +.word 0xd5048035 +.word 0xbc975854 +.word 0x6f1995e1 +.word 0x728e635d +.word 0xf743d3d8 +.word 0x840c44e1 +.word 0x7b184352 +.word 0x5411d608 +.word 0xd55c07d0 +.word 0x30915a3b +.word 0x25442093 +.word 0x6523d3c9 +.word 0xacf3193a +.word 0xeba4bd28 +.word 0xbb51eb70 +.word 0xae971033 +.word 0xbc1edc79 +.word 0x4fc4adf5 +.word 0xa8e6a782 +.word 0x2d9f378f +.word 0xa1fce012 +.word 0x28caff87 +.word 0x8c9ae531 +.word 0x4be35216 +.word 0x58c4217f +.word 0x866a382a +.word 0x4d94482c +.word 0x22cde961 +.word 0xf6a71e29 +.word 0x5e88bdd6 +.word 0x2bfdb58f +.word 0x5628f936 +.word 0x6f5bae1b +.word 0xf58ef967 +.word 0xad4724e6 +.word 0xd5ac3854 +.word 0xf033502b +.word 0x63f5fe7c +.word 0x9e5e2043 +.word 0x9a897924 +.word 0x1fb47994 +.word 0x8b536318 +.word 0x868ec499 +.word 0x02b86607 +.word 0x3058ec67 +.word 0xbe60f9a8 +.word 0xd24e9f71 +.word 0xcbc74c9e +.word 0x1c7ffdb8 +.word 0xe53eab42 +.word 0xd5707ced +.word 0x82c34831 +.word 0x060a4404 +.word 0xf149d9fe +.word 0x8dcda505 +.word 0xd866cc4e +.word 0x003c03e3 +.word 0x06e3e1da +.word 0xfcd84506 +.word 0xbc6dc4b7 +.word 0x028ec3fa +.word 0x9085a206 +.word 0xafc0e496 +.word 0x63c78c06 +.word 0xcab662d1 +.word 0x4181b1aa +.word 0xa7d1c978 +.word 0x87532c1f +.word 0x888d6b54 +.word 0x11933d4f +.word 0x7b065400 +.word 0xfc6b065b +.word 0xf1679afc +.word 0x14811963 +.word 0xc39c9287 +.word 0xa357cd9f +.word 0x463a71e6 +.word 0xa197d1d7 +.word 0x333fa7c0 +.word 0x9679905a +.word 0xcd9ec3d0 +.word 0xe2d9c846 +.word 0x7080fab0 +.word 0x3cbdea54 +.word 0xbeb225ac +.word 0x8048aab4 +.word 0x72cc3568 +.word 0x3a0699a9 +.word 0xc9bc55c1 +.word 0xaf2184c3 +.word 0x6541c57e +.word 0xec127bbf +.word 0xc3adb16d +.word 0x5fb7ac8f +.word 0xcde57356 +.word 0x4e0b48e9 +.word 0x771aa434 +.word 0x04ac5ca3 +.word 0x12c86cef +.word 0x9dae6e8b +.word 0x7eead0c0 +.word 0xcabf2f4a +.word 0x953e9a38 +.word 0xbe3fa786 +.word 0xa6bb2c75 +.word 0x18825f0b +.word 0x1c817c8f +.word 0xc1920c04 +.word 0x5317d2b8 +.word 0xb38bce29 +.word 0x29ccdd15 +.word 0x9ea8dc31 +.word 0xd9ab2864 +.word 0xbb12a2d3 +.word 0xc8d88573 +.word 0xb3d77bfc +.word 0x63c61315 +.word 0x59cea63d +.word 0x24abd802 +.word 0x1f8f3bd6 +.word 0x1a32cbdb +.word 0x21e23f3b +.word 0x104abbbe +.word 0x82ddafb6 +.word 0xe2ad9e5a +.word 0xb69757e4 +.word 0x0edc1bcf +.word 0x9fd36be6 +.word 0x6e358793 +.word 0x271e67a8 +.word 0xdec8e648 +.word 0x1f50f98b +.word 0xa5189f5e +.word 0x6c595c57 +.word 0x7fc103a7 +.word 0xa44e0d0b +.word 0x4571e91c +.word 0xa57c958d +.word 0xf67581d4 +.word 0x5778b379 +.word 0x89e3425d +.word 0x8447d8c3 +.word 0x176d6888 +.word 0x7dd6809a +.word 0x3813e480 +.word 0xdc85feae +.word 0xe12b3a93 +.word 0x4985fefb +.word 0x3c7a59d3 +.word 0x9db55b8d +.word 0xfb6f91a8 +.word 0xd5b5c41a +.word 0x11493bba +.word 0x9e0f4af7 +.word 0x42171b9f +.word 0x53d21dc8 +.word 0x97ec5eac +.word 0xa82865ea +.word 0x4eec2227 +.word 0x3207bf62 +.word 0xdd7f243c +.word 0x66b955ad +.word 0x9b16eb79 +.word 0x67f11cd5 +.word 0xaae08962 +.word 0xd7c6fce4 +.word 0xba7f8b2a +.word 0x433c6704 +.word 0x36a1ac3f +.word 0x85f959a0 +.word 0x14afe36c +.word 0x15f0a9b6 +.word 0x8792f4b0 +.word 0x4c78cafb +.word 0xef72a320 +.word 0xfe2d59de +.word 0x3c171847 +.word 0xd5626f29 +.word 0xc0776c33 +.word 0x23aabe05 +.word 0xa5d598db +.word 0xd00ae3b6 +.word 0x9ca79f78 +.word 0x41968de1 +.word 0xff585d7b +.word 0xc0f53bd7 +.word 0x840997cc +.word 0xb95e324c +.word 0x106664fe +.word 0xe66955cb +.word 0x64e0be27 +.word 0x5680256c +.word 0x2922b57a +.word 0xee7da687 +.word 0x0ca2cf8c +.word 0xc65f52c2 +.word 0xd08e3009 +.word 0x7e17a21d +.word 0x5005fa9a +.word 0x65034e95 +.word 0x7662bef0 +.word 0xd282a683 +.word 0xdd64be3c +.word 0xb6e9c038 +.word 0x1dfef410 +.word 0x12b64ae7 +.word 0x57f91bce +.word 0xaec254e0 +.word 0xe3e26d60 +.word 0x035831d1 +.word 0x7c066c6f +.word 0xa0928080 +.word 0x2e733b49 +.word 0x28a23828 +.word 0x68b31b1b +.word 0x21641754 +.word 0x4e9b8a8c +.word 0x16f1d72b +.word 0x1c98e8f5 +.word 0x3114d062 +.word 0xd4dbeb24 +.word 0x94a9c195 +.word 0x3649dc81 +.word 0x553422c9 +.word 0x49b8d64d +.word 0xebcff460 +.word 0xb2a90840 +.word 0x9040c497 +.word 0x223932a2 +.word 0xa0118c53 +.word 0x9b85fa31 +.word 0xca008a33 +.word 0x1b1c3e6f +.word 0xd4155950 +.word 0xd90e3b39 +.word 0xfbfb940c +.word 0xe28433e0 +.word 0x97927098 +.word 0x6c717001 +.word 0x423a8090 +.word 0xdd7621ed +.word 0xb25192d0 +.word 0xd231167c +.word 0x5c0245fe +.word 0x5655431f +.word 0xfd5103ea +.word 0x14590d2e +.word 0xeb7b0d65 +.word 0xfa501504 +.word 0x7bc44e75 +.word 0xc851b166 +.word 0xf68c34ee +.word 0xc79066df +.word 0xa802f81b +.word 0xa4bdafc9 +.word 0xdf4c506e +.word 0xbffa8f8c +.word 0x4fedb8c8 +.word 0x40c1fec0 +.word 0xba933a04 +.word 0x13be9cf7 +.word 0x2cdf9b25 +.word 0x04235eaf +.word 0xc578af23 +.word 0x5108529c +.word 0xf3894575 +.word 0xd3f603dc +.word 0xe4bf8971 +.word 0x98825fb0 +.word 0x33022d16 +.word 0xd2c8b5c1 +.word 0x9ec8fd8f +.word 0xdba05958 +.word 0x08db459d +.word 0xcefa5326 +.word 0x5e50e08a +.word 0x4841f11a +.word 0xd26f07a3 +.word 0x6c0cf4b6 +.word 0xe86131e5 +.word 0x5200b9ed +.word 0xfd1d0e53 +.word 0x5480d7b6 +.word 0x0f082697 +.word 0x79342bb0 +.word 0x6b4b5304 +.word 0x19692673 +.word 0x6c59b2f8 +.word 0x8a74e289 +.word 0x863a6b9f +.word 0x1a9cdf7f +.word 0xe86f1b49 +.word 0x6a16885b +.word 0x53e28aea +.word 0x25e0ea30 +.word 0xc8fc9975 +.word 0x4df2e805 +.word 0xf780512e +.word 0xd123bfaf +.word 0x16e27bea +.word 0x9d13d30a +.word 0x47fcaad3 +.word 0x8c47e322 +.word 0x8da26391 +.word 0xe0343cc7 +.word 0xb0f37b0e +.word 0x1440b4a5 +.word 0x6e73f30b +.word 0xd4ac8370 +.word 0x6d94e9a8 +.word 0x07479716 +.word 0xec520f14 +.word 0xd0007a87 +.word 0x4d837818 +.word 0x937243a1 +.word 0xf31c64fb +.word 0xe175471e +.word 0x5e0904f9 +.word 0x5fd92917 +.word 0xb5738f67 +.word 0x253f350c +.word 0xd91dd11b +.word 0x24b26b8e +.word 0x02284b1e +.word 0x5396649a +.word 0xb749b881 +.word 0xdbcdeb58 +.word 0xae553af1 +.word 0x00b69483 +.word 0x377e7797 +.word 0x3c5ff43d +.word 0xf300fba1 +.word 0x1b24332c +.word 0xb9db5458 +.word 0xec9103e6 +.word 0x569fb43d +.word 0xabfb1aae +.word 0x1fd80fcd +.word 0xd62df3f2 +.word 0x8b28507e +.word 0xfc23d4f1 +.word 0x756bb120 +.word 0x8a50b6b1 +.word 0x17a6f871 +.word 0xbecfd18d +.word 0x87a57736 +.word 0xbf6fc8c4 +.word 0x6319c5b8 +.word 0xa45c2b42 +.word 0x93e64f78 +.word 0x730ed797 +.word 0x0c7b2a76 +.word 0x609b7198 +.word 0x24523fe4 +.word 0x08f25697 +.word 0x801c60e2 +.word 0x45166ba8 +.word 0x34b289db +.word 0x94e90005 +.word 0x82c2d8e8 +.word 0x59e0080b +.word 0xb2c02ed4 +.word 0x87e214a3 +.word 0x4b1b27e2 +.word 0xe9b864e7 +.word 0x36a49a7c +.word 0xa295f00f +.word 0x34e1ba03 +.word 0x1997ff53 +.word 0x80445101 +.word 0xe7b72ff6 +.word 0x6e47d2a9 +.word 0xbd0a3f76 +.word 0xc2bb7ef5 +.word 0x38542ecd +.word 0x0e93b350 +.word 0x5a8c5402 +.word 0x272f0013 +.word 0x6932ea44 +.word 0x3c88f58d +.word 0xc0f19659 +.word 0xec4a2383 +.word 0x5145dfc1 +.word 0xc4ef81cc +.word 0x049b8814 +.word 0xe343d7b1 +.word 0x8664cf98 +.word 0xc22d35af +.word 0x6fabd46c +.word 0x098eda88 +.word 0xa9012c09 +.word 0x95f15300 +.word 0xdab12afe +.word 0x1c226713 +.word 0xc49a171e +.word 0x7c99782e +.word 0xbbe3cd1f +.word 0xb043102c +.word 0xf0c59ecb +.word 0x8dd8e7be +.word 0x80b725fa +.word 0x6a2c4708 +.word 0xee3a9d57 +.word 0xaab6f357 +.word 0x293263b3 +.word 0xf5d0ea46 +.word 0xaa96d7b7 +.word 0x18c068a5 +.word 0x3230dc12 +.word 0xdd3ff731 +.word 0x1abb4b5a +.word 0x07fd4fce +.word 0x647deabf +.word 0x066c1271 +.word 0x60e63cfc +.word 0x72aadcac +.word 0xf3fc639a +.word 0xff389a90 +.word 0x0b8a345a +.word 0x3adf7044 +.word 0xebf242b7 +.word 0x26e036b5 +.word 0x921f3b8e +.word 0x8b8bfc76 +.word 0xf1eba522 +.word 0xf3621cc1 +.word 0x40c1e30e +.word 0xcfd01012 +.word 0xa5ab6b0a +.word 0x39421da7 +.word 0xa74a6025 +.word 0x0c92fea2 +.word 0xfc6e24cb +.word 0x386a77e7 +.word 0x8775afea +.word 0xcae1d140 +.word 0xeefa7d72 +.word 0xe4643147 +.word 0x9424f217 +.word 0x81153946 +.word 0xf4e8898b +.word 0x7094bb55 +.word 0xb72067d9 +.word 0x97549c6d +.word 0x74848f35 +.word 0x2af318b0 +.word 0xd6177177 +.word 0x5559d912 +.word 0x2b0a562f +.word 0x9e1f73a0 +.word 0x518bd530 +.word 0xb9b7eae4 +.word 0x5fc9fdd7 +.word 0xca4fa276 +.word 0x2a62ad04 +.word 0x6f62c274 +.word 0x26be10a3 +.word 0x8dec50fb +.word 0x5c89e8b3 +.word 0xa7adb060 +.word 0xa2ad6aab +.word 0x30422772 +.word 0x0bd4fd41 +.word 0xdf175344 +.word 0x45ee0582 +.word 0xaee48495 +.word 0xe5cdf820 +.word 0x2a4c830c +.word 0xda8b26bf +.word 0x4eb85612 +.word 0xeabf2ac5 +.word 0x652600b0 +.word 0x81e7327b +.word 0xabbb2012 +.word 0x8af7baf6 +.word 0x7952a9cf +.word 0xc5d797e8 +.word 0xb1fa57ab +.word 0xb29c7679 +.word 0x8aa38631 +.word 0xbed3da64 +.word 0xfecfff31 +.word 0x096ec89e +.word 0x8fee22bc +.word 0x4fb4da3a +.word 0x54b42740 +.word 0xc025750b +.word 0x6d1fbd36 +.word 0x88e0c173 +.word 0x702f87e8 +.word 0x3574451c +.word 0x781fa21a +.word 0x5977c6e1 +.word 0x208114e1 +.word 0xa87441e0 +.word 0x4cf8f3aa +.word 0x7d6609c1 +.word 0xbe2b302e +.word 0xe100e476 +.word 0x505af964 +.word 0x6531fe6a +.word 0xb7d1c524 +.word 0x5c207049 +.word 0x837763ba +.word 0x380345d5 +.word 0x82dd0224 +.word 0x636906a3 +.word 0x5d0ed5ae +.word 0xdc91d3b1 +.word 0x2a9f013b +.word 0xc2e61deb +.word 0x09cc0977 +.word 0x25dfa05c +.word 0x04838415 +.word 0x6609d8d6 +.word 0x1a996307 +.word 0x41bcf4a8 +.word 0x88e9278e +.word 0x818b28a1 +.word 0x822c30aa +.word 0x5fac010b +.word 0x81385a68 +.word 0x06c1e17e +.word 0x9626a487 +.word 0xdff6dc54 +.word 0x62386e89 +.word 0x6ce165f3 +.word 0xe34b4aed +.word 0x0b0ecc05 +.word 0xf2addda4 +.word 0x4a296f76 +.word 0x9d49eb8c +.word 0xda1a9a20 +.word 0xad0a5b8a +.word 0x9b95bd4f +.word 0xb6213cdc +.word 0xf85fdf36 +.word 0x6093a201 +.word 0xa3c8d3fd +.word 0x9353955d +.word 0x7a051f84 +.word 0xb4d8b0f4 +.word 0xb63e8cb8 +.word 0x2919b0f6 +.word 0xa31901f6 +.word 0xca5a40c1 +.word 0x39b9b250 +.word 0x0083b51b +.word 0x8e78f1a0 +.word 0xcb6a6c22 +.word 0x7def1c57 +.word 0xff1f3ce8 +.word 0xa6668597 +.word 0x50a08a9a +.word 0xc42eeb8e +.word 0x68c4eb51 +.word 0x0b8064db +.word 0x529911e2 +.word 0xbe322067 +.word 0x86145ae7 +.word 0xbacdeb40 +.word 0x10ea07e1 +.word 0x14ad8aa1 +.word 0x65c08738 +.word 0x1c1c419f +.word 0x57b1ab5d +.word 0xac61b093 +.word 0xeb5acda4 +.word 0x4f4d6e59 +.word 0xf81c21b5 +.word 0xee0d70e8 +.word 0xa441d96b +.word 0x512ed574 +.word 0x4e222dcf +.word 0xd79641e2 +.word 0x9f1b3f8d +.word 0xdd8a9387 +.word 0x1d0b0f42 +.word 0xe9851fcd +.word 0xab38d848 +.word 0xed7a50d0 +.word 0x450395a2 +.word 0xecf1ad70 +.word 0xe470b4be +.word 0x78e7c22d +.word 0xac46ea39 +.word 0xc17e0955 +.word 0x7f48c918 +.word 0x6800be2b +.word 0xbf3c358c +.word 0x7e729a86 +.word 0x88d64847 +.word 0x5b9dfd53 +.word 0xed06128b +.word 0xbb536674 +.word 0x67b95a28 +.word 0xae887230 +.word 0x7869dd5c +.word 0xd44b9061 +.word 0x6f883328 +.word 0x74ad8040 +.word 0x4436c55e +.word 0xa43b8a1f +.word 0x2d8d0f94 +.word 0xa113b948 +.word 0x2c0a47bd +.word 0xb538b967 +.word 0x4e84d25d +.word 0xfbb507aa +.word 0xd4ae8243 +.word 0xc0fd3bc1 +.word 0xa25ab290 +.word 0x4ffa8b29 +.word 0x5142f4cc +.word 0x9ff35cb0 +.word 0xdde57077 +.word 0x09251b3f +.word 0x62932d44 +.word 0xdeb65e2b +.word 0x20181dc1 +.word 0xafa92d96 +.word 0x1e9d03bb +.word 0x4c4130b8 +.word 0x8b84ee46 +.word 0x43993d9c +.word 0x39604f1e +.word 0xdd0e2c63 +.word 0x456e36c6 +.word 0x496f1b03 +.word 0xee834a16 +.word 0x7dd26f97 +.word 0x3b71299a +.word 0x6bd6d843 +.word 0xc8e21329 +.word 0x83a3e88c +.word 0xfcf3b450 +.word 0x9a4dddf7 +.word 0x2ce6e2e8 +.word 0x836d7bd7 +.word 0x1687dd9f +.word 0x0305a9f7 +.word 0x7ae8592f +.word 0x98c86691 +.word 0x348e6246 +.word 0x7e4e883e +.word 0xb45b66b9 +.word 0x228ab330 +.word 0xf0e70b8d +.word 0x4d117e4e +.word 0x99e6e31e +.word 0xec708ba3 +.word 0xde00f241 +.word 0xe528e921 +.word 0xcfa2384b +.word 0x03431a05 +.word 0xa2f092f3 +.word 0xbe3f9925 +.word 0x421eceea +.word 0x39daf08f +.word 0xd9b4780a +.word 0xc7e1b3a6 +.word 0x896b231e +.word 0x64d1ec48 +.word 0xe0423734 +.word 0xd48074db +.word 0xdafd8eb2 +.word 0xc0b9a6ec +.word 0xd9a8acbd +.word 0xdd326815 +.word 0xe3095911 +.word 0x58e26bdb +.word 0xe48c8e69 +.word 0x04f4f5a0 +.word 0xf07a68ba +.word 0xa13966d5 +.word 0x2cce4b13 +.word 0x59ceec5f +.word 0x5fb46cd6 +.word 0x724a7c4e +.word 0x403b79e4 +.word 0x631c7110 +.word 0x1507e808 +.word 0xc1a1100b +.word 0xd6dc84b2 +.word 0x8da7b16c +.word 0x700a8607 +.word 0xbecbc9f3 +.word 0x83a36c31 +.word 0xb8fbac02 +.word 0x25938df6 +.word 0xd2251fc7 +.word 0x9c9677e5 +.word 0xc88d937d +.word 0xd57db319 +.word 0x76e014fc +.word 0x96cc05c1 +.word 0x7ed586ee +.word 0xd9b5d45f +.word 0x98af10f2 +.word 0x8cf4bc76 +.word 0x1ced686e +.word 0x24d06346 +.word 0x20259e6e +.word 0x58a4ccac +.word 0x0a169eb4 +.word 0x99948abf +.word 0xb6e06baa +.word 0xc39b5f4e +.word 0xf0bcd3a5 +.word 0x718c4523 +.word 0xbad2dd6c +.word 0x6854049a +.word 0x9a3bfd77 +.word 0xa5f943b6 +.word 0xa39c09c1 +.word 0xfe2d3113 +.word 0xcf348a4a +.word 0x9f0d647a +.word 0x1fb0b4c7 +.word 0xf55594c3 +.word 0x53e752c1 +.word 0x54cf64cc +.word 0x1cb06395 +.word 0xa1004381 +.word 0xb8e37b62 +.word 0xfc998071 +.word 0xa9f8e527 +.word 0x3cd5fd19 +.word 0xcfe600d9 +.word 0xd27bd6e2 +.word 0xe552f50a +.word 0x3ee035fa +.word 0x670141c2 +.word 0x91ff8f00 +.word 0x3c68ff8b +.word 0xe1c04d0a +.word 0xa9af0c5d +.word 0x4f71507e +.word 0xcbb66d01 +.word 0xe6c0850b +.word 0x5e373f91 +.word 0xe0d283b4 +.word 0x897b1119 +.word 0x7f2b05eb +.word 0x962cf88b +.word 0x1edc6f37 +.word 0xd8fe9c1b +.word 0x2bd4ad55 +.word 0xdf311053 +.word 0x5e906bb3 +.word 0x11ed4231 +.word 0x53125a5a +.word 0xac1fdc62 +.word 0x6a410bf6 +.word 0x2067493b +.word 0x8a1c958b +.word 0x57762431 +.word 0xd30d42b4 +.word 0xa78bbb53 +.word 0xce7d3760 +.word 0xac303946 +.word 0xc698498b +.word 0x8e748c21 +.word 0x424d2992 +.word 0x4412966e +.word 0x1b34fd54 +.word 0xa147a85e +.word 0x9585d052 +.word 0x457b2bb4 +.word 0x86c5c100 +.word 0x29ba876c +.word 0xefd2c469 +.word 0x76e9aa1a +.word 0xd5536f40 +.word 0x1dbcda52 +.word 0x7e7b0277 +.word 0x86d8e9a7 +.word 0xde697452 +.word 0x1fda92d5 +.word 0xb0eac8bb +.word 0xa25c24cc +.word 0x7326cb34 +.word 0x09b60515 +.word 0x3d42fac7 +.word 0x3c3802a5 +.word 0xe8be0b34 +.word 0x6b7df584 +.word 0x24c4a546 +.word 0x46462f97 +.word 0xdc6051fa +.word 0xb045a00f +.word 0x56792c04 +.word 0xc07fd1a3 +.word 0xd2ff0200 +.word 0x29554dfa +.word 0x4695cd2f +.word 0xf6475be7 +.word 0xf8b65cd5 +.word 0x019ca407 +.word 0x8805ff33 +.word 0xcd095608 +.word 0x49c6e8a5 +.word 0xdb20c213 +.word 0xdcbdebf3 +.word 0x1fce76bd +.word 0x8a4ee803 +.word 0x21cfc55a +.word 0x0ec07d01 +.word 0xf3e07be0 +.word 0x55ad3763 +.word 0xfff1e20e +.word 0x8335b3b2 +.word 0x260cdd27 +.word 0x1f1a18a7 +.word 0xf2177e9a +.word 0x2629424d +.word 0xeb8e1c2b +.word 0x4f5731ac +.word 0x98940400 +.word 0x00297dea +.word 0x63e051db +.word 0x1629b48b +.word 0x03c54d38 +.word 0x8160457b +.word 0x69873fa2 +.word 0xb58226de +.word 0xc8d42d37 +.word 0xd286dab8 +.word 0xd6f66b9d +.word 0xd551194e +.word 0x2ed5d18b +.word 0xa7a9a01a +.word 0x8c092f55 +.word 0xc00b6ca9 +.word 0xda1e11d9 +.word 0x37f8a242 +.word 0x915d88ff +.word 0x06e1878b +.word 0x9302a2e0 +.word 0xf08a97dd +.word 0xf20129b8 +.word 0xc3ea3257 +.word 0x7cf57960 +.word 0x6dcd3b12 +.word 0xf097a68e +.word 0x1f2e1a2c +.word 0x35b44034 +.word 0x81b35a96 +.word 0xbe438c5d +.word 0x1cbdf452 +.word 0x20192bd3 +.word 0x6d936066 +.word 0x4368614a +.word 0xadeacaf3 +.word 0x6bff134a +.word 0x65f1de19 +.word 0x382c2793 +.word 0xc08e8c29 +.word 0x9927bed2 +.word 0x929367e4 +.word 0x95dd1da5 +.word 0xe75d71b6 +.word 0xa50389c0 +.word 0x0e83fe73 +.word 0x5afc883a +.word 0x27814e36 +.word 0xb3a96dc8 +.word 0x8eb84b68 +.word 0xdcf97022 +.word 0xb65e75ff +.word 0x7dcf3ef5 +.word 0xcd5660ba +.word 0x7f37434a +.word 0x9bbae642 +.word 0x93f6c476 +.word 0x3e34af99 +.word 0x18fc2191 +.word 0x75d600d2 +.word 0xa3f76082 +.word 0x1facf037 +.word 0x5be7b913 +.word 0xc9f59fb1 +.word 0x7783386d +.word 0x0685c571 +.word 0x1c1f2b16 +.word 0xbbfb0879 +.word 0x6c3827ad +.word 0x3bf31d24 +.word 0x7c311aef +.word 0xde0ccf07 +.word 0x1faebc10 +.word 0x1ed7d82a +.word 0xaa6d431a +.word 0x28a4bd9a +.word 0xad678885 +.word 0x9878f5f7 +.word 0xfc5d40a2 +.word 0x42387adb +.word 0x5cb9de97 +.word 0x3ac49b1d +.word 0xa3997f2a +.word 0x528420c1 +.word 0xa38fa80d +.word 0x29a81a21 +.word 0xd67403fe +.word 0xca34e0c7 +.word 0x33d56c5e +.word 0xe72d9d44 +.word 0x1b0d38ca +.word 0x10047b15 +.word 0x94482904 +.word 0x153ea775 +.word 0x77ed0c97 +.word 0x27151be9 +.word 0x81f4a4c8 +.word 0x7dc3e312 +.word 0xdd44cd9a +.word 0x86beb118 +.word 0x4f19fe98 +.word 0x20de95a0 +.word 0x2abe1a4f +.word 0x8f951388 +.word 0xee119fb6 +.word 0x0ed53c2a +.word 0x97ac6a02 +.word 0xa23f74b2 +.word 0x88defb26 +.word 0x6a7975c4 +.word 0x63aae573 +.word 0x5fb22162 +.word 0x6eb475bb +.word 0xc1e4d4a0 +.word 0x13b3c2e9 +.word 0x1c1ff2f5 +.word 0x4d30bf45 +.word 0x92bf4ce0 +.word 0xd8187927 +.word 0xe0c94ad5 +.word 0x68e45f0f +.word 0xc739e3a6 +.word 0x9d2b5f01 +.word 0x0790ec48 +.word 0x57e8ff40 +.word 0x9b04862a +.word 0xae4853f0 +.word 0xf71f412b +.word 0x13f82bd7 +.word 0xf44ce537 +.word 0x6b80db3e +.word 0x7b10cf32 +.word 0xefa59bc4 +.word 0x925b15d0 +.word 0x4196a4ff +.word 0x76f87873 +.word 0xe41be33a +.word 0x741d216c +.word 0xa685cd81 +.word 0xe167e1fc +.word 0x4eaa4f3e +.word 0x8d6afbf6 +.word 0xe98591e4 +.word 0x67f35570 +.word 0x35606933 +.word 0x24471946 +.word 0x10bbe008 +.word 0x528134b9 +.word 0x05608f05 +.word 0xdc873b6d +.word 0x9c868a2c +.word 0x70fe42d2 +.word 0x040bf689 +.word 0x6a0b08bb +.word 0x7ed1acee +.word 0x3ee3dbef +.word 0xccb3d354 +.word 0xa944d7ac +.word 0x757df430 +.word 0x04ab8983 +.word 0xa613a14e +.word 0x09d43ef3 +.word 0x6d7f6b3c +.word 0xa97b7be0 +.word 0x1db3182b +.word 0x9c845245 +.word 0x992cc5dc +.word 0x10ce0eba +.word 0xf54e7a5f +.word 0x0dea1c41 +.word 0x297d5a2a +.word 0xb65f788f +.word 0x9237f261 +.word 0xaf0add56 +.word 0x2601ec65 +.word 0xab2fb591 +.word 0xe3b8a54c +.word 0x7007ef66 +.word 0xff979bb8 +.word 0xc495efc8 +.word 0xe2c3ea22 +.word 0x23a5a14b +.word 0x9b38f058 +.word 0x6e636de1 +.word 0xa2f9c573 +.word 0xa37f47e4 +.word 0xfed5b4eb +.word 0xefb2c5c6 +.word 0x65814807 +.word 0x2f2b31bd +.word 0x3d2ab62e +.word 0x2b7a607d +.word 0xc2ff0c00 +.word 0x1ee5223e +.word 0xbdd8be03 +.word 0xc4d21ce7 +.word 0x410f74c7 +.word 0x3d58a13b +.word 0x015ab32e +.word 0x0c7d50d6 +.word 0x6f7f6249 +.word 0x7bb7dc6c +.word 0xf780c5b5 +.word 0x7112b35e +.word 0xe21c4ffd +.word 0x7812e0e1 +.word 0x455a7295 +.word 0xbaf1efcf +.word 0x866ec656 +.word 0x3c78322b +.word 0x6a7b0d73 +.word 0x02298820 +.word 0x4a5154de +.word 0xcc7a2d8c +.word 0x349e793f +.word 0x9287b475 +.word 0x95bd108f +.word 0x73bf717d +.word 0x9a109423 +.word 0x0cec1865 +.word 0xfe5c1fe7 +.word 0x30d68f42 +.word 0x43fa24d0 +.word 0x6de756e4 +.word 0xc01ca8db +.word 0x948c1379 +.word 0xd1518ea9 +.word 0x2e343072 +.word 0x9165f94a +.word 0x83104eb5 +.word 0x19a1e91f +.word 0x318330cd +.word 0x6f5b7894 +.word 0x6e1c7b9e +.word 0x2f0f9c53 +.word 0x141f138a +.word 0x0f5053b0 +.word 0xe3e0ed8e +.word 0xb1e98b69 +.word 0xee77d46c +.word 0x1ed4a1f9 +.word 0x7a32d42f +.word 0xf01160a8 +.word 0xe1c6267e +.word 0x7ee6e02a +.word 0x49900939 +.word 0x892d0ea5 +.word 0xc17a6a6f +.word 0x36e58b13 +.word 0x345a332a +.word 0x684cd392 +.word 0x389f6e05 +.word 0x8379b0a7 +.word 0x6d10c09b +.word 0x04d91d86 +.word 0x90d05b39 +.word 0x9e73bb20 +.word 0x815b7801 +.word 0x7b14cb90 +.word 0x348b8a95 +.word 0x498b51b4 +.word 0x97519ca4 +.word 0x0a02e728 +.word 0x84e64eab +.word 0xd1415751 +.word 0xbf525856 +.word 0xeb04029a +.word 0x2ce1ee78 +.word 0x905ef1cb +.word 0x2f8ef99e +.word 0x6fb377c0 +.word 0x8570f3d1 +.word 0xbaf6e479 +.word 0x6308cdc6 +.word 0xa169315c +.word 0xda64b1b0 +.word 0x8fc40d41 +.word 0x64034262 +.word 0xf891f0a9 +.word 0x6f4bc801 +.word 0x301a29d3 +.word 0x97c79e56 +.word 0x0e069376 +.word 0x1e5e67e4 +.word 0x910ff787 +.word 0x007c4116 +.word 0xf5255f4a +.word 0xaeed4708 +.word 0x15d0e806 +.word 0x521fd0c3 +.word 0xaa1b0ac2 +.word 0x96e8cab9 +.word 0xf11fdd9f +.word 0x989ca786 +.word 0xaba9aa9b +.word 0xcfaddc49 +.word 0xd6d90b4f +.word 0xbc704702 +.word 0xf1eacd5a +.word 0xa7695036 +.word 0xcf548cba +.word 0x8af359d0 +.word 0xa4a20e27 +.word 0x64e14ed1 +.word 0x67e6eb87 +.word 0x66dc9cc5 +.word 0x374e9100 +.word 0xe1e3e59e +.word 0x7e090e89 +.word 0x95a87985 +.word 0xfad41732 +.word 0x767e98e0 +.word 0x07fb232a +.word 0xd4f9ad09 +.word 0x5577cb7c +.word 0x55b6721f +.word 0x52aee5ad +.word 0xb7e4eee5 +.word 0xdaff7fae +.word 0x333d3c02 +.word 0xa7355e37 +.word 0xf7615933 +.word 0x81d0ebf6 +.word 0x9d4a3911 +.word 0x1846fc62 +.word 0x8844d1d1 +.word 0x44f9df3a +.word 0xabdb7d87 +.word 0xfbc44fad +.word 0xf02c0076 +.word 0x903f1223 +.word 0xa41490b3 +.word 0xfb45c629 +.word 0x2dfb762c +.word 0xd482c50b +.word 0x2763d478 +.word 0x26625a4e +.word 0x50a455da +.word 0x58637d94 +.word 0x883a2769 +.word 0x79a57dc6 +.word 0x42652df5 +.word 0xb9a33bb0 +.word 0x99243598 +.word 0xabc4e080 +.word 0xb336796f +.word 0x44d492cf +.word 0x5875b4e9 +.word 0x2836b95e +.word 0x87868a12 +.word 0xc4911767 +.word 0xffa7ba66 +.word 0x6b8dcf94 +.word 0xb6d4237d +.word 0x20fe3887 +.word 0x5ab7f4f6 +.word 0x423406f7 +.word 0x7b567613 +.word 0x381d37ce +.word 0x19081e45 +.word 0x0e50dae8 +.word 0x09e33a28 +.word 0x3b873d2c +.word 0x556d0d89 +.word 0xc672901d +.word 0xdc2ea251 +.word 0xfb9aab35 +.word 0x0c01ab2a +.word 0x39d27258 +.word 0x84571a18 +.word 0xd846cced +.word 0x65171474 +.word 0x753e33e3 +.word 0xe9ec5459 +.word 0x68e16993 +.word 0x0fe29d49 +.word 0x4ddbfadf +.word 0x498954f5 +.word 0x025b0a02 +.word 0xc7ac5b79 +.word 0x305b9695 +.word 0xa4e7316d +.word 0x5c8ec35e +.word 0x9fead516 +.word 0x19514630 +.word 0x26002e7a +.word 0x920c9a6f +.word 0xed53826a +.word 0xd23aea4b +.word 0x1f6d40a9 +.word 0xcec1134e +.word 0xf3abf422 +.word 0x93e17ced +.word 0x69185d42 +.word 0xfde7eb91 +.word 0x5ae8e499 +.word 0x35b09118 +.word 0x7e3cfb83 +.word 0xb445a9b9 +.word 0x24ee4059 +.word 0xb99a53e0 +.word 0xc4f2596b +.word 0x5939b9e4 +.word 0x1bee7036 +.word 0xed4f4e9b +.word 0xc8067dba +.word 0x3dc0b0cf +.word 0x8dad00eb +.word 0xaf25d42e +.word 0xefcd45a6 +.word 0xad32ce06 +.word 0xf99baf6c +.word 0xe92ba623 +.word 0x43d04f0f +.word 0x51cd8811 +.word 0x17689773 +.word 0x628e8bca +.word 0x8dc1fe20 +.word 0xafd7a1ad +.word 0xca02551e +.word 0xc07f9eb7 +.word 0xd56faec3 +.word 0xed16545b +.word 0xd836502b +.word 0x95d302d8 +.word 0xdfbcdedc +.word 0x82e2e421 +.word 0x322769a8 +.word 0x0f777ff9 +.word 0xde15cb39 +.word 0x3d34a475 +.word 0x5a2a7156 +.word 0xe66518d7 +.word 0xd0f11b20 +.word 0xacc2f504 +.word 0xf5f5ca1a +.word 0xcc419f19 +.word 0xcd4d0356 +.word 0x43055f91 +.word 0xca9a46c2 +.word 0x2cee2daa +.word 0xdfcfbe2d +.word 0xece94a64 +.word 0x3313626d +.word 0x48695de3 +.word 0xbed2f780 +.word 0xcc74ade5 +.word 0x8d5248c9 +.word 0x59b61733 +.word 0x9953358b +.word 0x17691985 +.word 0x34487a30 +.word 0x961ed2b5 +.word 0x5516f6ca +.word 0x91c83434 +.word 0xd8e4c60b +.word 0x82776ae3 +.word 0xd544b4f7 +.word 0xcbbf9662 +.word 0xabb00f24 +.word 0xf3bbe421 +.word 0x85ac0d22 +.word 0xad2484ec +.word 0xf803de6e +.word 0x472fcfd6 +.word 0x8dde3e1c +.word 0x50653b9b +.word 0x83da765b +.word 0x44d2cd19 +.word 0x967f26fc +.word 0x020666c5 +.word 0xfa0da81a +.word 0xd74810ee +.word 0xec2299d0 +.word 0x04eec145 +.word 0x1b9c909d +.word 0x82e6fddb +.word 0xaf271f65 +.word 0x5c6a6e92 +.word 0x9bbd29ad +.word 0xfe80ec91 +.word 0x7fcda614 +.word 0xa4769328 +.word 0x22bd0c2c +.word 0x4beb0817 +.word 0x9d272979 +.word 0x8a1a891e +.word 0xf2b578f6 +.word 0x1d479147 +.word 0x6cc29919 +.word 0x6826923b +.word 0x97fd6483 +.word 0xddf11e5e +.word 0xab342bf8 +.word 0x8eb3e5fb +.word 0xca2da120 +.word 0xf7b39984 +.word 0x1786d5d3 +.word 0x5075aaae +.word 0x507b0adc +.word 0x64efd050 +.word 0xdf025fdb +.word 0x90718ffe +.word 0xb0168c3b +.word 0x99151af6 +.word 0x17a3d0b1 +.word 0x595ac4cd +.word 0xcd393113 +.word 0x776a0582 +.word 0xa4bc5371 +.word 0xd76cbc90 +.word 0xfa043069 +.word 0x44d71f93 +.word 0x2de007dd +.word 0x28b3a4a5 +.word 0xe95eebcc +.word 0x350d58c4 +.word 0x27a20498 +.word 0x48407d4f +.word 0xe1299d57 +.word 0x0a481b42 +.word 0x535db8d9 +.word 0x2eef2189 +.word 0xfcace390 +.word 0x788192e5 +.word 0xc6091e8b +.word 0xec954be3 +.word 0x28fd790d +.word 0x3b49ec48 +.word 0xa773817a +.word 0x2d05b259 +.word 0x6d224fb8 +.word 0x63816132 +.word 0x57875388 +.word 0xf0474f0e +.word 0x59b5eca2 +.word 0xa6133bfd +.word 0x1ca6afc0 +.word 0x94f50bcf +.word 0xc7af3943 +.word 0xbbf5bdfc +.word 0x6a9dd7c9 +.word 0x351ee114 +.word 0xd4009e75 +.word 0xb0da156e +.word 0x2efc1257 +.word 0xe22ef0c7 +.word 0xc11746dc +.word 0x56592283 +.word 0x04fdfcd5 +.word 0xd379e7ca +.word 0x7ba7d95c +.word 0xb483b711 +.word 0xf71f7786 +.word 0xaf12f858 +.word 0x7c02a8a6 +.word 0x6f7a3709 +.word 0xc6e16d05 +.word 0x5935650b +.word 0x8e50c91b +.word 0x378d082e +.word 0xf74bd85c +.word 0xa851fd7c +.word 0x1daee471 +.word 0x7efa51fd +.word 0x5423f815 +.word 0x0f181989 +.word 0x5d881c1d +.word 0xf0870296 +.word 0x34767587 +.word 0x0f29227f +.word 0x7bd16d99 +.word 0xfc45c3be +.word 0x69855a9d +.word 0x22670507 +.word 0xb15ba7b5 +.word 0x8f2b2c3b +.word 0x72ce5986 +.word 0xff03fb81 +.word 0xbacbccac +.word 0xfe716dd8 +.word 0xb5be635a +.word 0x47036ef0 +.word 0x05bc6620 +.word 0x37f11d09 +.word 0xdb48cf0f +.word 0xb3a31579 +.word 0x6b15c061 +.word 0xdd14a523 +.word 0xf4c44008 +.word 0xd7367504 +.word 0x57674c81 +.word 0xe28151b9 +.word 0xc6adf33c +.word 0xbe88dd37 +.word 0xb2967c10 +.word 0x43d665b7 +.word 0xefeca3b6 +.word 0x9fcabe72 +.word 0x96845464 +.word 0xec896ea1 +.word 0x820e1cd2 +.word 0xaf58acff +.word 0x2a5d50f9 +.word 0x90d10386 +.word 0x5a0d9308 +.word 0xab946abc +.word 0x3e6c30db +.word 0x591ae1e3 +.word 0x3255869c +.word 0x89007bf6 +.word 0x16d43817 +.word 0xd48f168f +.word 0xdd2b96dc +.word 0x0834ea6d +.word 0x40a3f62c +.word 0x5d45ec39 +.word 0x9fb7aad6 +.word 0xdc7675bd +.word 0x76385a9f +.word 0xa630f0ff +.word 0xda12e9e5 +.word 0x0396bb6c +.word 0x184a09ed +.word 0x5dd2e2a0 +.word 0xc5793d7b +.word 0x61cb6599 +.word 0x83c182b1 +.word 0x7ce4f7da +.word 0xf5524fe8 +.word 0x2581f2c5 +.word 0x6a8c3fe0 +.word 0x598039a6 +.word 0xcccf17a0 +.word 0x52f425f8 +.word 0xaf97b955 +.word 0x1e548261 +.word 0x0e90a4dc +.word 0x9a51ee38 +.word 0x5317542a +.word 0x03c0238a +.word 0xe6c75519 +.word 0x1fd4ef29 +.word 0x3242be80 +.word 0x52413443 +.word 0x3c86d76a +.word 0x30357e69 +.word 0x1e503f14 +.word 0xe804643c +.word 0x04328726 +.word 0x19faaabe +.word 0xa0a59160 +.word 0x4164a6cb +.word 0xe8a1554c +.word 0x8646ba6d +.word 0xbd09c26a +.word 0x03b763a2 +.word 0x6284b9c0 +.word 0x5e5887a7 +.word 0x9e689c43 +.word 0xe8b3ab4f +.word 0x65058396 +.word 0x24fbcaae +.word 0x6ce88455 +.word 0x741c3346 +.word 0x90a4bda3 +.word 0x1889ba81 +.word 0x478ecb2f +.word 0x40ddfe5b +.word 0x67151941 +.word 0x287ca022 +.word 0x7f99d606 +.word 0x23eccb04 +.word 0xab10b184 +.word 0xd01b1cde +.word 0x267c5864 +.word 0xa76238ac +.word 0x5c2490e0 +.word 0x39b60b4b +.word 0xce28a9c5 +.word 0x2cfb596c +.word 0xd104acef +.word 0x838cce44 +.word 0x6e3e96bd +.word 0xab93d490 +.word 0xa911251f +.word 0x8b15ad46 +.word 0xd9d230b9 +.word 0x2c980ead +.word 0x89ed1c32 +.word 0x3bb5e8b5 +.word 0x88ebe653 +.word 0xc599302a +.word 0xf4d8093f +.word 0xec660a53 +.word 0x3ba5a4f9 +.word 0x38e1f505 +.word 0x66d231f2 +.word 0xe9ff5bfe +.word 0xdd4bb89d +.word 0xd6fbaf0f +.word 0x8ceefe80 +.word 0x32e28ee8 +.word 0x0ab53673 +.word 0xb001671e +.word 0x4586ab7f +.word 0x652a9694 +.word 0x00472772 +.word 0xda749c22 +.word 0x001ab90b +.word 0xa395022d +.word 0xb0cff43b +.word 0xc30140b9 +.word 0x4cf2b707 +.word 0xc6dfea03 +.word 0x0e0282c3 +.word 0x649765cb +.word 0x622c9a4b +.word 0x26a7c0c3 +.word 0x7e3d4d54 +.word 0xdce80812 +.word 0x92248b00 +.word 0x5b8c3512 +.word 0x83126402 +.word 0xe8888f47 +.word 0x25e4a814 +.word 0xdb6d715b +.word 0x525162a2 +.word 0x7aa47972 +.word 0x184664d6 +.word 0xdfb282fb +.word 0xa5ecfb5f +.word 0xd632f908 +.word 0x22b32acd +.word 0x64664e0b +.word 0x4494469c +.word 0x745e5f76 +.word 0xabfec67a +.word 0xf2b455c5 +.word 0x7f4d2f1b +.word 0x1fe9107b +.word 0x738637df +.word 0xbbeb6f58 +.word 0x237ad5f3 +.word 0x84ed4019 +.word 0xb15710b9 +.word 0x04258a3a +.word 0x04542cd2 +.word 0xcd47765e +.word 0xa9d9469f +.word 0xb0ef6129 +.word 0xf3fba121 +.word 0xc6d0ebae +.word 0x9155b28d +.word 0xe3b8f11f +.word 0xfa906069 +.word 0xe3f1486a +.word 0xf3977039 +.word 0x32a04127 +.word 0xf6517e6a +.word 0x3236d089 +.word 0x67fa9e78 +.word 0x04569759 +.word 0x37b49cfd +.word 0x2ecb8e8b +.word 0x09b989ed +.word 0x2d048b21 +.word 0x64181fb9 +.word 0x1077da19 +.word 0xb2dd3ae9 +.word 0xab901fc8 +.word 0xb67639da +.word 0x489a932d +.word 0xcf7c84a8 +.word 0x6ebe79b7 +.word 0xa45db592 +.word 0xe421cdfe +.word 0xf3cdc11f +.word 0xc7844de7 +.word 0x3e5cbaf7 +.word 0x87c8d862 +.word 0x18a73725 +.word 0x8a0f6157 +.word 0xb9e57b57 +.word 0xedf3274d +.word 0x33dfb4cd +.word 0xc9081ae6 +.word 0x56ce0e41 +.word 0x31e5ae73 +.word 0x86624e2e +.word 0x92111250 +.word 0x7b0c406e +.word 0xdfdd85f3 +.word 0xef82ed5c +.word 0x31410406 +.word 0xf0cd3b96 +.word 0xd8fa6574 +.word 0xeb7ca123 +.word 0xb535601a +.word 0x8441ef8a +.word 0x712178b7 +.word 0x84574b0b +.word 0xce63d615 +.word 0xb344cf5d +.word 0x86f5cfe8 +.word 0xdd8992f5 +.word 0xc9fa8cc4 +.word 0x41f862ab +.word 0xf89f654c +.word 0xe334662d +.word 0xb9732d6f +.word 0xb4abe412 +.word 0xabb74bc2 +.word 0xdce43919 +.word 0x47fc8805 +.word 0x22ea161b +.word 0x13c46877 +.word 0x864c1cf9 +.word 0x44afc22d +.word 0x60257d4f +.word 0x49aeaf40 +.word 0x15b01901 +.word 0x023c1e0b +.word 0xcfbd0238 +.word 0x04253f8b +.word 0xb85bc43a +.word 0x684818e2 +.word 0xc30c6358 +.word 0xd84521a2 +.word 0xd70e259c +.word 0xc1f7cc39 +.word 0x8a8f7271 +.word 0x8e99f3be +.word 0x3822842a +.word 0x1cefd7c5 +.word 0x1bd4ad7f +.word 0x47f5c4a9 +.word 0x4d949944 +.word 0xbf88f55d +.word 0x3fb4a104 +.word 0x4f50a829 +.word 0x3182d347 +.word 0x4b9bebe4 +.word 0x0d963226 +.word 0x561136d2 +.word 0x6dfc5b67 +.word 0xf6e9e772 +.word 0x567efe90 +.word 0x30ced05b +.word 0x84182edf +.word 0xd365a09d +.word 0x9423fd6b +.word 0x5dcc0d7e +.word 0x93c0fb3b +.word 0xf3f40850 +.word 0x43287493 +.word 0x7781611c +.word 0x427cd735 +.word 0xba0cc0dc +.word 0x9136847e +.word 0x49f8996e +.word 0x98d02ac9 +.word 0x6843e73f +.word 0xa830d10a +.word 0x0ee60eab +.word 0x1297d7be +.word 0x3207d032 +.word 0x0d81dcdd +.word 0xb32f5c5f +.word 0x15453e77 +.word 0xd24384a6 +.word 0xc4d6e61e +.word 0xa52e721f +.word 0x8edaa297 +.word 0xbc6f8216 +.word 0x8c69cc5f +.word 0x74072fc4 +.word 0x6a9d68bb +.word 0xaf59578a +.word 0x1166cf06 +.word 0x62713924 +.word 0x0554e165 +.word 0xf3e0a746 +.word 0x194434d9 +.word 0x6db84cfa +.word 0x8fde4500 +.word 0x64f16e60 +.word 0x4062988d +.word 0x7ce39817 +.word 0x4161cbaf +.word 0x04616984 +.word 0xb279b7b7 +.word 0x443ffb89 +.word 0x6e3af38c +.word 0xb4251bb6 +.word 0xd321fe7c +.word 0x9f148ad4 +.word 0xe2fec18a +.word 0x3e122807 +.word 0x6b9f45c2 +.word 0xe698f520 +.word 0x1b9bcada +.word 0x4209bb07 +.word 0xaba73e55 +.word 0x37bea945 +.word 0x1c717271 +.word 0x0232c1e9 +.word 0xdfbac73a +.word 0xab5f3bcc +.word 0x4138f121 +.word 0xf031e921 +.word 0x8bfc685b +.word 0xcef4cff0 +.word 0x1dad54ad +.word 0xba371e0c +.word 0x45b3632d +.word 0xf43fe013 +.word 0x115ddbd9 +.word 0x43bab7bf +.word 0x46bb47a1 +.word 0xb504c25a +.word 0x89973583 +.word 0xe2e7cdf1 +.word 0x7e6dc4ea +.word 0x4e23a503 +.word 0x9a649b89 +.word 0x9ad43005 +.word 0xe3069ed2 +.word 0xeb539fca +.word 0x7110749d +.word 0x7cea9131 +.word 0x41b792a5 +.word 0x8300c36a +.word 0xc2faa377 +.word 0x882b734a +.word 0x320b6014 +.word 0x9ea6a268 +.word 0xe9c73ce8 +.word 0x03a498f5 +.word 0x9d3ba7e8 +.word 0xa3f4e96d +.word 0x9a212f74 +.word 0x5726cfd7 +.word 0x8dfdcedd +.word 0x45b0871b +.word 0x55a46cd2 +.word 0xb4627a5f +.word 0x9c2733f8 +.word 0x4edcd580 +.word 0xa53c63f4 +.word 0xa2633aba +.word 0xfa7fce57 +.word 0x47b4abe5 +.word 0x78e54ef2 +.word 0x6b3756da +.word 0x6bfd8dab +.word 0xfc79808a +.word 0xab1de0dc +.word 0xf390570e +.word 0x8efe601a +.word 0xde69c4ab +.word 0xbcb437b9 +.word 0xd43d22fa +.word 0xa7e2b049 +.word 0x4722720e +.word 0x30c2601e +.word 0x7a0ee517 +.word 0xce71191f +.word 0x3f803d03 +.word 0x8277d482 +.word 0x4779bd8d +.word 0x731f4673 +.word 0x5395d4a0 +.word 0xfc356beb +.word 0x38958d3b +.word 0x220b620d +.word 0x73f2309a +.word 0x90b26894 +.word 0xf9ed0e78 +.word 0x343d0b42 +.word 0x128d1e22 +.word 0x69b249b9 +.word 0x42025d30 +.word 0x551445d7 +.word 0xad29f149 +.word 0x143b9d9c +.word 0x9c09ad7c +.word 0xfa8e5c9e +.word 0x6ea1b4e5 +.word 0xba39511f +.word 0x2097f310 +.word 0x7ede5c42 +.word 0x2c341b0a +.word 0x0aeb2682 +.word 0x148717ad +.word 0xa3aefc4e +.word 0x0ad302e3 +.word 0xeaa8c525 +.word 0xae02cf1a +.word 0xd38dc221 +.word 0xc489cd1b +.word 0x0cd8e2b1 +.word 0x931c6e69 +.word 0x61b90497 +.word 0x47b971ce +.word 0x11c596bf +.word 0x19de1678 +.word 0x50e6abd0 +.word 0xac9250e1 +.word 0x97f3925b +.word 0xc81911b5 +.word 0x3cdfaa2a +.word 0x8ca3d22b +.word 0x90bcc93d +.word 0x78aebb62 +.word 0x12ebe7e5 +.word 0x1538b4af +.word 0x4cbb8a10 +.word 0x7f65288a +.word 0x75de1394 +.word 0x43473d72 +.word 0xf63840ab +.word 0xf5bdf155 +.word 0x475e5371 +.word 0xdefa7ada +.word 0x97729733 +.word 0x09fcc701 +.word 0x1b4e248e +.word 0x3096394a +.word 0xd485e5a4 +.word 0x06056754 +.word 0x64a2cb82 +.word 0x2082a769 +.word 0xa571746e +.word 0xc873fe48 +.word 0x9659010f +.word 0x2e408c2c +.word 0xde7d45fb +.word 0xdb3f8f19 +.word 0x78ed4c90 +.word 0xdc28c0e8 +.word 0x6608bb26 +.word 0x4852156b +.word 0xb0a6e923 +.word 0x778d4755 +.word 0x16db1b0d +.word 0x4b16e199 +.word 0x2fc2fd58 +.word 0x155e7897 +.word 0x3cc274c2 +.word 0xf37ed456 +.word 0xb72e40cb +.word 0xaad33021 +.word 0xa040dbc1 +.word 0xf20bf843 +.word 0x5c7f1210 +.word 0x138093ea +.word 0x43c0d934 +.word 0x4831bc32 +.word 0x1b923061 +.word 0x78675793 +.word 0x02d88f29 +.word 0xda589bd7 +.word 0xe2c03001 +.word 0x0a933208 +.word 0xf7013584 +.word 0x875d00d2 +.word 0x530fa8a8 +.word 0x99ca1595 +.word 0xae3aedc8 +.word 0x98d3546b +.word 0xf862d09f +.word 0xd8986914 +.word 0x04201347 +.word 0xb8f91657 +.word 0x37a02d4a +.word 0xa01d5096 +.word 0x75aa018b +.word 0x3048fc12 +.word 0xd3bfbd67 +.word 0x59976659 +.word 0x2b824f90 +.word 0x9943c7c0 +.word 0x7a60dbc7 +.word 0xb33eb994 +.word 0x87c928d0 +.word 0x85e7f5cb +.word 0xeddf04c2 +.word 0x31a21e15 +.word 0x0dc0f69e +.word 0x9f3953b8 +.word 0x4a42bfd8 +.word 0xf6f3e0ce +.word 0xadbe61df +.word 0x2edb6b55 +.word 0x5b99ad1b +.word 0x57f25c9b +.word 0xe0662e56 +.word 0x00f0739d +.word 0x985d90db +.word 0x8c4d34f0 +.word 0xa097cc26 +.word 0x2802e7af +.word 0x5e489296 +.word 0x5eae1cb6 +.word 0xbd2fe656 +.word 0x7987d9b5 +.word 0xfeec4cce +.word 0x18852938 +.word 0x01456555 +.word 0x8cd596f7 +.word 0x97c515c3 +.word 0x427f839b +.word 0x916ee664 +.word 0x14c3cb95 +.word 0x5ac8cd83 +.word 0xbd27ac27 +.word 0xa4cb6be3 +.word 0x6d69a7a4 +.word 0xa428fdcc +.word 0xf52cedc6 +.word 0xa9f87dd0 +.word 0xda78f421 +.word 0x1f8fc26b +.word 0x711fe680 +.word 0x59b641e8 +.word 0xf47390f9 +.word 0x0ac0d8ea +.word 0xf4aed11d +.word 0x674b84ef +.word 0x2052c96e +.word 0xe20743f1 +.word 0x2633b996 +.word 0x7b45fce6 +.word 0x4989f9db +.word 0x170d411d +.word 0x7a77a526 +.word 0x94685b84 +.word 0xa800c393 +.word 0xe4f58669 +.word 0xf0cf7451 +.word 0x15a534ee +.word 0x585e57dd +.word 0x671dc18d +.word 0x3fc722b7 +.word 0x112ceb96 +.word 0x948b4608 +.word 0xa315a4f0 +.word 0xa858f617 +.word 0x27903979 +.word 0xdfbd6abd +.word 0x5460c3fb +.word 0xc4cd6433 +.word 0x34b02e20 +.word 0x743277cf +.word 0x9b0d8570 +.word 0xb1dd1740 +.word 0xf9167663 +.word 0x5da16b05 +.word 0x6c8ce5cd +.word 0xf611d333 +.word 0x3a27565d +.word 0x24a32812 +.word 0xab5f89ef +.word 0x452ba4bf +.word 0x237b3ca3 +.word 0x96061b8d +.word 0x81e1afaa +.word 0x4c9b9307 +.word 0x24f0b75c +.word 0xacfed497 +.word 0x2ec508f4 +.word 0x7d5f0eec +.word 0xf5ae8895 +.word 0xbadc4b9b +.word 0x7c2cf115 +.word 0xfe57269c +.word 0xf8c90e96 +.word 0xb390e4ba +.word 0xc1c64feb +.word 0x875aab9c +.word 0x146c838a +.word 0xfe78d253 +.word 0x39ee6969 +.word 0x6c4c3d2a +.word 0x693fc8cf +.word 0xa2441d65 +.word 0x6407eefa +.word 0xa954917b +.word 0x2ac8d47e +.word 0x8b3e2ec6 +.word 0x1ccb65cd +.word 0x4459f46c +.word 0xbf888870 +.word 0xfe8509de +.word 0xb16fa2a6 +.word 0xe52a9f5d +.word 0xdfd5c12d +.word 0x432c6524 +.word 0x8c64f96e +.word 0x8d2b25cf +.word 0xcd0fccd2 +.word 0x0018133c +.word 0xf89b13bf +.word 0x31291fc4 +.word 0x7844e829 +.word 0x56fd4938 +.word 0xb2156477 +.word 0xde989928 +.word 0xa7f76832 +.word 0xea94130d +.word 0x8c040449 +.word 0xfb9835b0 +.word 0x0351dbb2 +.word 0x56723a2c +.word 0x2978b0fa +.word 0xf95d3dc2 +.word 0x06e84514 +.word 0x48ca5d0d +.word 0x2d970993 +.word 0x230ddea2 +.word 0x46e93faa +.word 0x302710aa +.word 0x63180145 +.word 0x303e68ee +.word 0x4adccc08 +.word 0xe9210e5c +.word 0x22a7fd7b +.word 0x6c7d164b +.word 0xb52e62a7 +.word 0x691d9f2a +.word 0x3a405061 +.word 0x26f6bae4 +.word 0xc268f5ec +.word 0x487a74f7 +.word 0x8bd55c6d +.word 0x89c3265e +.word 0xe2616c99 +.word 0x8950fdd5 +.word 0x333a0210 +.word 0x3e4e17ae +.word 0x2d647fbb +.word 0xf8ca8fb4 +.word 0xe5c9a8ba +.word 0x9cb3d133 +.word 0xc0302aa5 +.word 0xdd0876e6 +.word 0x27ac03e7 +.word 0xf7dad69c +.word 0xd729aa30 +.word 0xb0575159 +.word 0x00da7559 +.word 0x297c661d +.word 0x9ca98571 +.word 0xa46e58dd +.word 0x6aa7fde1 +.word 0xccf4a505 +.word 0x7dd8b7ce +.word 0xfeee5ed9 +.word 0x00ee4d06 +.word 0xaacd93c7 +.word 0x7cd0a17e +.word 0x571bafde +.word 0xa7fc7d69 +.word 0xf35a0d67 +.word 0x40404683 +.word 0x84c407e9 +.word 0x527fe7d3 +.word 0x2ca5dcbb +.word 0x38a0009b +.word 0x95692e46 +.word 0x6846d40d +.word 0x1a852fdb +.word 0xb54b3883 +.word 0xec592d5a +.word 0x4f278e33 +.word 0x1852eaa0 +.word 0x8dce3b65 +.word 0x66351ba7 +.word 0x89d5faf3 +.word 0x288d11b1 +.word 0x0546f4ff +.word 0x5b1fbc1c +.word 0x80111ddd +.word 0x82d6560d +.word 0x533b93d7 +.word 0xbd42bd1b +.word 0x5d9259dd +.word 0xbe438761 +.word 0xd0eaae8c +.word 0xc02cd84e +.word 0x2a5014fa +.word 0xbf882834 +.word 0x93e037b0 +.word 0xa8ec307f +.word 0xdada62f1 +.word 0xf86e123c +.word 0xb95dd8a5 +.word 0xe7205bf7 +.word 0x290488d9 +.word 0x44aeec35 +.word 0xaf8add41 +.word 0xf0257a0b +.word 0x6a7d793d +.word 0x1d536548 +.word 0x7913cf35 +.word 0x8e3b90a6 +.word 0xca872a64 +.word 0x36add0ea +.word 0xaa2a6680 +.word 0x7b6a41fe +.word 0x72e949a7 +.word 0xfc1a3aa2 +.word 0x5750b570 +.word 0x9c9f3fe4 +.word 0x43a2d91f +.word 0x2f53a9d8 +.word 0xd9e594a3 +.word 0xa5a4f54f +.word 0xfbba92dc +.word 0xd5bebb5d +.word 0xb2355520 +.word 0xf209f200 +.word 0xbba41646 +.word 0x88b55478 +.word 0x9b9d62a4 +.word 0x0447fbdd +.word 0xd4403005 +.word 0x8a04a6b2 +.word 0x7d5188d6 +.word 0x033d57f9 +.word 0xfea15f31 +.word 0x01b52b8a +.word 0x906366f6 +.word 0x658c139e +.word 0xb3b048a1 +.word 0xc7867346 +.word 0xceb433ad +.word 0x1009cdb2 +.word 0x80c4f6c2 +.word 0x141e3d7e +.word 0x0ceafcfa +.word 0x90e43cd7 +.word 0x46fd1c13 +.word 0xc8de43c7 +.word 0x88a80047 +.word 0x918cee30 +.word 0x043e2a9f +.word 0x0699f3f3 +.word 0x9df13623 +.word 0x8498a3c9 +.word 0x83e61a37 +.word 0xa0eb7154 +.word 0xebefee0c +.word 0x550c3721 +.word 0x7a31838f +.word 0xd9e5ba1e +.word 0x44c29f61 +.word 0x46c32847 +.word 0x9183dc14 +.word 0x8d74af37 +.word 0x2d152ecd +.word 0x329a49c1 +.word 0x7c38fb85 +.word 0x3635aca3 +.word 0x787b32ad +.word 0xe2e76871 +.word 0xc7ecf5a7 +.word 0x1e463a09 +.word 0xfd1c9c65 +.word 0xea86653e +.word 0xd13d52be +.word 0xa9a45fa5 +.word 0xebcd051f +.word 0x4971b826 +.word 0x5766be5e +.word 0xd4587aeb +.word 0x62b160da +.word 0xb1956f2d +.word 0xb1fa6bce +.word 0x699964c3 +.word 0x2af1675c +.word 0x142aee83 +.word 0x35cc9457 +.word 0x0c4fbf9c +.word 0xa39c2af6 +.word 0x57aa5796 +.word 0x61c94e6f +.word 0x7cefe98b +.word 0xbfe02ec7 +.word 0xe6dc0e4e +.word 0x9ad227db +.word 0x506526dc +.word 0xbe8edced +.word 0x7d22c3e2 +.word 0x0830baad +.word 0x59ea5d2e +.word 0x0175bebd +.word 0x35c530f9 +.word 0x23ba730b +.word 0xe31ee63e +.word 0xe5c10ffc +.word 0x7c18df61 +.word 0x8a55c6d3 +.word 0xc1de8320 +.word 0xcd0fabe0 +.word 0x23977bc1 +.word 0x9cbc26f2 +.word 0xb63f8412 +.word 0x5b947f97 +.word 0x37d5e2b2 +.word 0xd709ed0a +.word 0x678c06fc +.word 0xd665d8b7 +.word 0xd6380d0a +.word 0x2a3e1190 +.word 0x43c7b720 +.word 0xd4136d5e +.word 0xa0ce12ed +.word 0x86f65ca6 +.word 0x4787487b +.word 0xa4c34e26 +.word 0xc18d4e10 +.word 0x4f4a3892 +.word 0x2e72728f +.word 0x0f5901c4 +.word 0xe10e99cc +.word 0x3d62251d +.word 0xf92dbec2 +.word 0x109aa05c +.word 0x656ebf29 +.word 0x0d2f1ffb +.word 0x948a50f4 +.word 0x0242842a +.word 0x6e5afac4 +.word 0x0dc23b27 +.word 0xe80cf95f +.word 0x3748d675 +.word 0xb42a0cd3 +.word 0x6b585355 +.word 0x9bad30de +.word 0x777b1f77 +.word 0xc4134938 +.word 0x3a3b39bc +.word 0x0b1e9407 +.word 0x43f542b6 +.word 0x6b161bed +.word 0x10e4c8b9 +.word 0x32f001e3 +.word 0x4b45d508 +.word 0xaba9a7a1 +.word 0x13f0a6fc +.word 0x45230677 +.word 0x2d844ce8 +.word 0x42c9bdf4 +.word 0xad9dcbe8 +.word 0x94f05f33 +.word 0x2fd579bf +.word 0x4f2b7d2b +.word 0xcd696cb8 +.word 0x3600a85e +.word 0x4eaf583d +.word 0x6f015526 +.word 0xdce39ce0 +.word 0x1bab660f +.word 0xb7af185d +.word 0xe84bf503 +.word 0x3d4f1ea0 +.word 0x37a6e7a3 +.word 0x0401441c +.word 0x250fedc9 +.word 0x637cd74e +.word 0xbf0f7698 +.word 0xabad1a27 +.word 0x376aab28 +.word 0xc6d8d1d4 +.word 0x78d6799f +.word 0xdb7d85b2 +.word 0x917ad3e3 +.word 0x496ee228 +.word 0xf0b76311 +.word 0x65155dbe +.word 0xdd0322c3 +.word 0xda5c8eff +.word 0x283c62b3 +.word 0xe8fb6415 +.word 0x93b158a9 +.word 0xde451be8 +.word 0xf4a0e2fd +.word 0x3856cdbe +.word 0x02db7787 +.word 0x37ab2055 +.word 0x5d7cd6d1 +.word 0xf242bbec +.word 0x7d024024 +.word 0x75a945cf +.word 0x7fa3a471 +.word 0x727b3cc9 +.word 0x1d03e6c6 +.word 0xd5a484d0 +.word 0xfc413553 +.word 0xc92d7a09 +.word 0x1dec24dc +.word 0xec828b83 +.word 0x49e57dcf +.word 0x6f92e4c5 +.word 0x1447866a +.word 0x99f13200 +.word 0x8e74dade +.word 0xf6ba5fc5 +.word 0xbe4a6417 +.word 0xe1c076fd +.word 0xb9ad8af3 +.word 0x9d8075e0 +.word 0xa51b9564 +.word 0x6e6d1f93 +.word 0xf82b1c81 +.word 0xe1358450 +.word 0xa2c79da5 +.word 0x1b87b08a +.word 0x4f853261 +.word 0x3c328747 +.word 0xe776f86f +.word 0x8e74664d +.word 0xa2eca2e8 +.word 0xbb76a704 +.word 0xa4ade13a +.word 0x9caafdba +.word 0xf6770ea0 +.word 0xb7001890 +.word 0xb7a96b84 +.word 0xc888564e +.word 0x2e19797f +.word 0x6beacbc1 +.word 0x3a2b84db +.word 0x0edc22fb +.word 0x7e8e50d8 +.word 0x9a36ef7b +.word 0x6f999fef +.word 0x588bf3bb +.word 0x2aedd359 +.word 0xc18c162c +.word 0x3bf785db +.word 0xfcecf381 +.word 0x50b2a8f0 +.word 0xdb659a0d +.word 0x97f9a854 +.word 0xbb420f60 +.word 0xbcc7ba00 +.word 0x58dad36b +.word 0xf7a4edcf +.word 0x9d4323a0 +.word 0x6d454422 +.word 0x4820dd17 +.word 0x8edc8723 +.word 0x79e234c3 +.word 0x05a3ff91 +.word 0x75190800 +.word 0x3b18776b +.word 0x5b265e69 +.word 0x3b005651 +.word 0x3e3a3501 +.word 0x51d88675 +.word 0x5903a49f +.word 0xcedc3d55 +.word 0x2b14e09d +.word 0xf0a6938e +.word 0xdd08273a +.word 0x4aa62544 +.word 0xfea27d3f +.word 0x8c4b28a9 +.word 0x11aec522 +.word 0xb4a44ba4 +.word 0xea6ca233 +.word 0xc9bd7e01 +.word 0x8a4f31f0 +.word 0x88e2b10b +.word 0x470ccf8b +.word 0x023d4477 +.word 0x7ccc3244 +.word 0x29d2f966 +.word 0xe3b7d9b7 +.word 0x60801a4f +.word 0x03982aae +.word 0xb09e3f8d +.word 0xc8fe55cb +.word 0x335644b6 +.word 0x44a0dc43 +.word 0x5ce5aab3 +.word 0xe148d801 +.word 0x5660b50f +.word 0xe58114cf +.word 0xfd59f987 +.word 0xb7420259 +.word 0xb410bde3 +.word 0x37720ec0 +.word 0xec4954f6 +.word 0xd24ed313 +.word 0xcb7d4209 +.word 0x6f737cd1 +.word 0x2e8e28ef +.word 0x54fde437 +.word 0x43d06dae +.word 0x28acdaa4 +.word 0x1662683f +.word 0x98a1351b +.word 0xef6aab6e +.word 0x0c47c793 +.word 0xd5ace770 +.word 0x038ac8c5 +.word 0x9e4bfde7 +.word 0x83c2ee58 +.word 0x17ec80ce +.word 0x6c45e486 +.word 0x423a1be0 +.word 0x114dae34 +.word 0x9a60f8db +.word 0x44bf2dd3 +.word 0x61f47b4d +.word 0x48d57911 +.word 0xa767eaef +.word 0x4b31b473 +.word 0x4f7441ad +.word 0xf3381ffa +.word 0x74130250 +.word 0xfa5793ae +.word 0xbafdc426 +.word 0x8159a5ae +.word 0x402158e0 +.word 0xbf5d2418 +.word 0xea9c302b +.word 0xa4a91d6a +.word 0x805459e3 +.word 0xcb2a11ea +.word 0x12fb639f +.word 0xbf63f79a +.word 0x12c240f3 +.word 0xbd7ff186 +.word 0x2abda893 +.word 0x4df02233 +.word 0x69bd9db1 +.word 0xee7ed9c0 +.word 0xc0f17268 +.word 0x5855acc0 +.word 0xff9c211c +.word 0x7a2d0db7 +.word 0x6aa2a043 +.word 0x41a79424 +.word 0x32418532 +.word 0x66a41923 +.word 0x1a8df318 +.word 0xe07b0c55 +.word 0x17a5e932 +.word 0x2c5a2bc5 diff --git a/isa/rv64uv/fcvt.S b/isa/rv64uv/fcvt.S new file mode 100644 index 0000000..151e054 --- /dev/null +++ b/isa/rv64uv/fcvt.S @@ -0,0 +1,72 @@ +#***************************************************************************** +# fcvt.S +#----------------------------------------------------------------------------- +# +# Test fcvt instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a3,4 + vvcfgivl a3,a3,32,32 + + la a3,src + vld vx2,a3 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a4,dest + vfsd vf0,a4 + fence.v.l + la a5,result + ld a1,0(a4) + ld a2,0(a5) + li x28,2 + bne a1,a2,fail + ld a1,8(a4) + ld a2,8(a5) + li x28,3 + bne a1,a2,fail + ld a1,16(a4) + ld a2,16(a5) + li x28,4 + bne a1,a2,fail + ld a1,24(a4) + ld a2,24(a5) + li x28,5 + bne a1,a2,fail + j pass + +vtcode: + fcvt.d.l f0,x2 + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src: + .dword 1 + .dword 2 + .dword 3 + .dword 4 +dest: + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe +result: + .double 1.0 + .double 2.0 + .double 3.0 + .double 4.0 + +RVTEST_DATA_END diff --git a/isa/rv64uv/fence.S b/isa/rv64uv/fence.S new file mode 100644 index 0000000..808fffa --- /dev/null +++ b/isa/rv64uv/fence.S @@ -0,0 +1,54 @@ +#***************************************************************************** +# fence.S +#----------------------------------------------------------------------------- +# +# Test fence instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + # make sure these don't choke at the beginning + fence.v.l + fence.v.g + + li a0,1 + bne a0,x0,skip1 + fence.v.l +skip1: + + bne a0,x0,skip3 + fence.v.g +skip3: + + j pass + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src1: + .dword 1 + .dword 2 + .dword 3 + .dword 4 +src2: + .dword 4 + .dword 3 + .dword 2 + .dword 1 +dest: + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + +RVTEST_DATA_END diff --git a/isa/rv64uv/fld.S b/isa/rv64uv/fld.S new file mode 100644 index 0000000..ab45100 --- /dev/null +++ b/isa/rv64uv/fld.S @@ -0,0 +1,59 @@ +#***************************************************************************** +# fld.S +#----------------------------------------------------------------------------- +# +# Test fld instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,512 + vvcfgivl a4,a4,4,1 + + la a5,src + vmsv vx2,a5 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a6,dest + vfsd vf0,a6 + fence.v.l + + li a2,0 +loop: + ld a0,0(a6) + addi x28,a2,2 + ld a1,0(a5) + bne a0,a1,fail + addi a6,a6,8 + addi a5,a5,8 + addi a2,a2,1 + bne a2,a4,loop + j pass + +vtcode: + utidx x3 + slli x3,x3,3 + add x2,x2,x3 + fld f0,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src: +#include "data_fd.h" + +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/flw.S b/isa/rv64uv/flw.S new file mode 100644 index 0000000..0a42b7b --- /dev/null +++ b/isa/rv64uv/flw.S @@ -0,0 +1,59 @@ +#***************************************************************************** +# flw.S +#----------------------------------------------------------------------------- +# +# Test flw instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,2048 + vvcfgivl a4,a4,4,1 + + la a5,src + vmsv vx2,a5 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a6,dest + vfsw vf0,a6 + fence.v.l + + li a2,0 +loop: + lw a0,0(a6) + addi x28,a2,2 + lw a1,0(a5) + bne a0,a1,fail + addi a6,a6,4 + addi a5,a5,4 + addi a2,a2,1 + bne a2,a4,loop + j pass + +vtcode: + utidx x3 + slli x3,x3,2 + add x2,x2,x3 + flw f0,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src: +#include "data_fw.h" + +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/fma.S b/isa/rv64uv/fma.S new file mode 100644 index 0000000..b31136c --- /dev/null +++ b/isa/rv64uv/fma.S @@ -0,0 +1,76 @@ +#***************************************************************************** +# fma.S +#----------------------------------------------------------------------------- +# +# Test fma instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a3,2048 + vvcfgivl a3,a3,3,2 + + la a4,src + fld f0,0(a4) + fld f1,8(a4) + mftx.d s0,f0 + mftx.d s1,f1 + vmsv vx1,s0 + vmsv vx2,s1 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + + li a7,0 + li a6,400 +wait: + addi a7,a7,1 + bne a7,a6,wait + + fadd.d f0,f0,f1 + mftx.d s2,f0 + + la a5,dest + vfsd vf0,a5 + fence.v.l + + la s3,result + ld s4,0(s3) + li x28,2 + bne s2,s4,fail + + li a2,0 +loop: + ld a0,0(a5) + addi x28,a2,3 + bne a0,s4,fail + addi a5,a5,8 + addi a2,a2,1 + bne a2,a3,loop + j pass + +vtcode: + mxtf.d f0,x1 + mxtf.d f1,x2 + fadd.d f0,f0,f1 + stop + + TEST_PASSFAIL + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src: + .double 1.0 + .double 2.0 +result: + .double 3.0 +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/fmovn.S b/isa/rv64uv/fmovn.S new file mode 100644 index 0000000..88ab03c --- /dev/null +++ b/isa/rv64uv/fmovn.S @@ -0,0 +1,58 @@ +#***************************************************************************** +# fmovn.S +#----------------------------------------------------------------------------- +# +# Test fmovn instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a6,2048 + vvcfgivl a6,a6,4,2 + + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a7,dest + vfsd vf0,a7 + fence.v.l + + li a1,0 + li a2,-1 +loop: + ld a0,0(a7) + slti a4,a1,10 + slli a4,a4,63 + srai a4,a4,63 + and a5,a2,a4 + addi x28,a1,2 + bne a0,a5,fail + addi a7,a7,8 + addi a1,a1,1 + bne a1,a6,loop + j pass + +vtcode: + utidx x1 + slti x2,x1,10 + li x1,-1 + li x3,0 + mxtf.d f0,x3 + mxtf.d f1,x1 + fmovn f0,x2,f1 + stop + + TEST_PASSFAIL + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/fmovz.S b/isa/rv64uv/fmovz.S new file mode 100644 index 0000000..bda56b9 --- /dev/null +++ b/isa/rv64uv/fmovz.S @@ -0,0 +1,61 @@ +#***************************************************************************** +# fmovz.S +#----------------------------------------------------------------------------- +# +# Test fmovz instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a6,2048 + vvcfgivl a6,a6,4,2 + + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a7,dest + vfsd vf0,a7 + fence.v.l + + li a1,0 + li a2,-1 +loop: + ld a0,0(a7) + slti a4,a1,10 + slli a4,a4,63 + srai a4,a4,63 + xori a4,a4,-1 + and a5,a2,a4 + addi x28,a1,2 + bne a0,a5,fail + addi a7,a7,8 + addi a1,a1,1 + bne a1,a6,loop + j pass + +vtcode: + utidx x1 + slti x2,x1,10 + li x1,-1 + li x3,0 + mxtf.d f0,x3 + mxtf.d f1,x1 + fmovz f0,x2,f1 + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/fsd.S b/isa/rv64uv/fsd.S new file mode 100644 index 0000000..d85a5f7 --- /dev/null +++ b/isa/rv64uv/fsd.S @@ -0,0 +1,59 @@ +#***************************************************************************** +# fsd.S +#----------------------------------------------------------------------------- +# +# Test fsd instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,2048 + vvcfgivl a4,a4,4,1 + + la a5,src + vfld vf0,a5 + la a6,dest + vmsv vx2,a6 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + fence.v.l + + li a2,0 +loop: + ld a0,0(a6) + addi x28,a2,2 + ld a1,0(a5) + bne a0,a1,fail + addi a6,a6,8 + addi a5,a5,8 + addi a2,a2,1 + bne a2,a4,loop + j pass + +vtcode: + utidx x3 + slli x3,x3,3 + add x2,x2,x3 + fsd f0,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src: +#include "data_fd.h" + +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/fsw.S b/isa/rv64uv/fsw.S new file mode 100644 index 0000000..69702d0 --- /dev/null +++ b/isa/rv64uv/fsw.S @@ -0,0 +1,59 @@ +#***************************************************************************** +# fsw.S +#----------------------------------------------------------------------------- +# +# Test fsw instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,2048 + vvcfgivl a4,a4,4,1 + + la a5,src + vflw vf0,a5 + la a6,dest + vmsv vx2,a6 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + fence.v.l + + li a2,0 +loop: + lw a0,0(a6) + addi x28,a2,2 + lw a1,0(a5) + bne a0,a1,fail + addi a6,a6,4 + addi a5,a5,4 + addi a2,a2,1 + bne a2,a4,loop + j pass + +vtcode: + utidx x3 + slli x3,x3,2 + add x2,x2,x3 + fsw f0,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src: +#include "data_fw.h" + +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/imul.S b/isa/rv64uv/imul.S new file mode 100644 index 0000000..bb9b6a3 --- /dev/null +++ b/isa/rv64uv/imul.S @@ -0,0 +1,82 @@ +#***************************************************************************** +# imul.S +#----------------------------------------------------------------------------- +# +# Test imul instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a3,2048 + vvcfgivl a3,a3,3,0 + + li a4,20 + li s0,2 + vmsv vx1,a4 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + mul s1,a4,s0 + + la a5,dest + vsd vx1,a5 + fence.v.l + + li s2,40 + li x28,2 + bne s1,s2,fail + + li a1,0 + li a2,0 +loop: + ld a0,0(a5) + addi x28,a2,3 + bne a0,a1,fail + addi a5,a5,8 + addi a1,a1,20 + addi a2,a2,1 + bne a2,a3,loop + j pass + +vtcode: + utidx x2 + mul x1,x2,x1 + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/lb.S b/isa/rv64uv/lb.S new file mode 100644 index 0000000..24c7caa --- /dev/null +++ b/isa/rv64uv/lb.S @@ -0,0 +1,61 @@ +#***************************************************************************** +# lb.S +#----------------------------------------------------------------------------- +# +# Test lb instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,512 + vvcfgivl a4,a4,16,0 + + la a5,src + vmsv vx2,a5 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a6,dest + vsd vx1,a6 + fence.v.l + + li a2,0 +loop: + ld a0,0(a6) + ld a1,0(a5) + sll a3,a1,56 + sra a3,a3,56 + addi x28,a2,2 + bne a0,a3,fail + addi a6,a6,8 + addi a5,a5,8 + addi a2,a2,1 + bne a2,a4,loop + j pass + +vtcode: + utidx x3 + slli x3,x3,3 + add x2,x2,x3 + lb x1,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src: +#include "data_d.h" + +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/lbu.S b/isa/rv64uv/lbu.S new file mode 100644 index 0000000..7fce752 --- /dev/null +++ b/isa/rv64uv/lbu.S @@ -0,0 +1,61 @@ +#***************************************************************************** +# lbu.S +#----------------------------------------------------------------------------- +# +# Test lby instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,512 + vvcfgivl a4,a4,16,0 + + la a5,src + vmsv vx2,a5 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a6,dest + vsd vx1,a6 + fence.v.l + + li a2,0 +loop: + ld a0,0(a6) + ld a1,0(a5) + sll a3,a1,56 + srl a3,a3,56 + addi x28,a2,2 + bne a0,a3,fail + addi a6,a6,8 + addi a5,a5,8 + addi a2,a2,1 + bne a2,a4,loop + j pass + +vtcode: + utidx x3 + slli x3,x3,3 + add x2,x2,x3 + lbu x1,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src: +#include "data_d.h" + +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/ld.S b/isa/rv64uv/ld.S new file mode 100644 index 0000000..03303b4 --- /dev/null +++ b/isa/rv64uv/ld.S @@ -0,0 +1,59 @@ +#***************************************************************************** +# ld.S +#----------------------------------------------------------------------------- +# +# Test ld instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,512 + vvcfgivl a4,a4,16,0 + + la a5,src + vmsv vx2,a5 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a6,dest + vsd vx1,a6 + fence.v.l + + li a2,0 +loop: + ld a0,0(a6) + ld a1,0(a5) + addi x28,a2,2 + bne a0,a1,fail + addi a6,a6,8 + addi a5,a5,8 + addi a2,a2,1 + bne a2,a4,loop + j pass + +vtcode: + utidx x3 + slli x3,x3,3 + add x2,x2,x3 + ld x1,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src: +#include "data_d.h" + +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/lh.S b/isa/rv64uv/lh.S new file mode 100644 index 0000000..98b001c --- /dev/null +++ b/isa/rv64uv/lh.S @@ -0,0 +1,61 @@ +#***************************************************************************** +# lh.S +#----------------------------------------------------------------------------- +# +# Test lh instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,512 + vvcfgivl a4,a4,16,0 + + la a5,src + vmsv vx2,a5 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a6,dest + vsd vx1,a6 + fence.v.l + + li a2,0 +loop: + ld a0,0(a6) + ld a1,0(a5) + sll a3,a1,48 + sra a3,a3,48 + addi x28,a2,2 + bne a0,a3,fail + addi a6,a6,8 + addi a5,a5,8 + addi a2,a2,1 + bne a2,a4,loop + j pass + +vtcode: + utidx x3 + slli x3,x3,3 + add x2,x2,x3 + lh x1,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src: +#include "data_d.h" + +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/lhu.S b/isa/rv64uv/lhu.S new file mode 100644 index 0000000..caa2c1c --- /dev/null +++ b/isa/rv64uv/lhu.S @@ -0,0 +1,61 @@ +#***************************************************************************** +# lhu.S +#----------------------------------------------------------------------------- +# +# Test lhu instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,512 + vvcfgivl a4,a4,16,0 + + la a5,src + vmsv vx2,a5 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a6,dest + vsd vx1,a6 + fence.v.l + + li a2,0 +loop: + ld a0,0(a6) + ld a1,0(a5) + sll a3,a1,48 + srl a3,a3,48 + addi x28,a2,2 + bne a0,a3,fail + addi a6,a6,8 + addi a5,a5,8 + addi a2,a2,1 + bne a2,a4,loop + j pass + +vtcode: + utidx x3 + slli x3,x3,3 + add x2,x2,x3 + lhu x1,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src: +#include "data_d.h" + +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/lw.S b/isa/rv64uv/lw.S new file mode 100644 index 0000000..5576bc6 --- /dev/null +++ b/isa/rv64uv/lw.S @@ -0,0 +1,61 @@ +#***************************************************************************** +# lw.S +#----------------------------------------------------------------------------- +# +# Test lw instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,512 + vvcfgivl a4,a4,16,0 + + la a5,src + vmsv vx2,a5 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a6,dest + vsd vx1,a6 + fence.v.l + + li a2,0 +loop: + ld a0,0(a6) + ld a1,0(a5) + sll a3,a1,32 + sra a3,a3,32 + addi x28,a2,2 + bne a0,a3,fail + addi a6,a6,8 + addi a5,a5,8 + addi a2,a2,1 + bne a2,a4,loop + j pass + +vtcode: + utidx x3 + slli x3,x3,3 + add x2,x2,x3 + lw x1,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src: +#include "data_d.h" + +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/lwu.S b/isa/rv64uv/lwu.S new file mode 100644 index 0000000..d8b5bf2 --- /dev/null +++ b/isa/rv64uv/lwu.S @@ -0,0 +1,61 @@ +#***************************************************************************** +# lwu.S +#----------------------------------------------------------------------------- +# +# Test lwu instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,512 + vvcfgivl a4,a4,16,0 + + la a5,src + vmsv vx2,a5 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a6,dest + vsd vx1,a6 + fence.v.l + + li a2,0 +loop: + ld a0,0(a6) + ld a1,0(a5) + sll a3,a1,32 + srl a3,a3,32 + addi x28,a2,2 + bne a0,a3,fail + addi a6,a6,8 + addi a5,a5,8 + addi a2,a2,1 + bne a2,a4,loop + j pass + +vtcode: + utidx x3 + slli x3,x3,3 + add x2,x2,x3 + lwu x1,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src: +#include "data_d.h" + +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/movn.S b/isa/rv64uv/movn.S new file mode 100644 index 0000000..91a5a3c --- /dev/null +++ b/isa/rv64uv/movn.S @@ -0,0 +1,58 @@ +#***************************************************************************** +# movn.S +#----------------------------------------------------------------------------- +# +# Test movn instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a6,2048 + vvcfgivl a6,a6,4,0 + + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a7,dest + vsd vx3,a7 + fence.v.l + + li a1,0 + li a2,-1 +loop: + ld a0,0(a7) + slt a4,a1,10 + slli a4,a4,63 + srai a4,a4,63 + and a5,a2,a4 + addi s8,a1,2 + bne a0,a5,fail + addi a7,a7,8 + addi a1,a1,1 + bne a1,a6,loop + j pass + +vtcode: + utidx x1 + slti x2,x1,10 + li x1,-1 + li x3,0 + movn x3,x2,x1 + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/movz.S b/isa/rv64uv/movz.S new file mode 100644 index 0000000..683afdb --- /dev/null +++ b/isa/rv64uv/movz.S @@ -0,0 +1,59 @@ +#***************************************************************************** +# movz.S +#----------------------------------------------------------------------------- +# +# Test movz instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a6,2048 + vvcfgivl a6,a6,4,0 + + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a7,dest + vsd vx3,a7 + fence.v.l + + li a1,0 + li a2,-1 +loop: + ld a0,0(a7) + slti a4,a1,10 + slli a4,a4,63 + srai a4,a4,63 + xori a4,a4,-1 + and a5,a2,a4 + addi x28,a1,2 + bne a0,a5,fail + addi a7,a7,8 + addi a1,a1,1 + bne a1,a6,loop + j pass + +vtcode: + utidx x1 + slti x2,x1,10 + li x1,-1 + li x3,0 + movz x3,x2,x1 + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/sb.S b/isa/rv64uv/sb.S new file mode 100644 index 0000000..bcee091 --- /dev/null +++ b/isa/rv64uv/sb.S @@ -0,0 +1,71 @@ +#***************************************************************************** +# sb.S +#----------------------------------------------------------------------------- +# +# Test sb instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,512 + vvcfgivl a4,a4,16,0 + + la a6,dest + li a2,0 + +initloop: + sd x0,0(a6) + addi a6,a6,8 + addi a2,a2,1 + bne a2,a4,initloop + fence + + la a5,src + vld vx1,a5 + la a6,dest + vmsv vx2,a6 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + fence.v.l + + li a2,0 +loop: + ld a0,0(a6) + ld a1,0(a5) + sll a3,a1,56 + srl a3,a3,56 + addi x28,a2,2 + bne a0,a3,fail + addi a6,a6,8 + addi a5,a5,8 + addi a2,a2,1 + bne a2,a4,loop + j pass + +vtcode: + utidx x3 + slli x3,x3,3 + add x2,x2,x3 + sb x1,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src: +#include "data_d.h" + +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/sd.S b/isa/rv64uv/sd.S new file mode 100644 index 0000000..dd6f72a --- /dev/null +++ b/isa/rv64uv/sd.S @@ -0,0 +1,59 @@ +#***************************************************************************** +# sd.S +#----------------------------------------------------------------------------- +# +# Test sd instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,512 + vvcfgivl a4,a4,16,0 + + la a5,src + vld vx1,a5 + la a6,dest + vmsv vx2,a6 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + fence.v.l + + li a2,0 +loop: + ld a0,0(a6) + ld a1,0(a5) + addi x28,a2,2 + bne a0,a1,fail + addi a6,a6,8 + addi a5,a5,8 + addi a2,a2,1 + bne a2,a4,loop + j pass + +vtcode: + utidx x3 + slli x3,x3,3 + add x2,x2,x3 + sd x1,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src: +#include "data_d.h" + +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/sh.S b/isa/rv64uv/sh.S new file mode 100644 index 0000000..6dc5ab8 --- /dev/null +++ b/isa/rv64uv/sh.S @@ -0,0 +1,71 @@ +#***************************************************************************** +# sh.S +#----------------------------------------------------------------------------- +# +# Test sh instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,512 + vvcfgivl a4,a4,16,0 + + la a6,dest + li a2,0 + +initloop: + sd x0,0(a6) + addi a6,a6,8 + addi a2,a2,1 + bne a2,a4,initloop + fence + + la a5,src + vld vx1,a5 + la a6,dest + vmsv vx2,a6 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + fence.v.l + + li a2,0 +loop: + ld a0,0(a6) + ld a1,0(a5) + sll a3,a1,48 + srl a3,a3,48 + addi x28,a2,2 + bne a0,a3,fail + addi a6,a6,8 + addi a5,a5,8 + addi a2,a2,1 + bne a2,a4,loop + j pass + +vtcode: + utidx x3 + slli x3,x3,3 + add x2,x2,x3 + sh x1,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src: +#include "data_d.h" + +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/sw.S b/isa/rv64uv/sw.S new file mode 100644 index 0000000..985e12a --- /dev/null +++ b/isa/rv64uv/sw.S @@ -0,0 +1,71 @@ +#***************************************************************************** +# sw.S +#----------------------------------------------------------------------------- +# +# Test sw instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a4,512 + vvcfgivl a4,a4,16,0 + + la a6,dest + li a2,0 + +initloop: + sd x0,0(a6) + addi a6,a6,8 + addi a2,a2,1 + bne a2,a4,initloop + fence + + la a5,src + vld vx1,a5 + la a6,dest + vmsv vx2,a6 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + fence.v.l + + li a2,0 +loop: + ld a0,0(a6) + ld a1,0(a5) + sll a3,a1,32 + srl a3,a3,32 + addi x28,a2,2 + bne a0,a3,fail + addi a6,a6,8 + addi a5,a5,8 + addi a2,a2,1 + bne a2,a4,loop + j pass + +vtcode: + utidx x3 + slli x3,x3,3 + add x2,x2,x3 + sw x1,0(x2) + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src: +#include "data_d.h" + +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/utidx.S b/isa/rv64uv/utidx.S new file mode 100644 index 0000000..95d954c --- /dev/null +++ b/isa/rv64uv/utidx.S @@ -0,0 +1,50 @@ +#***************************************************************************** +# utidx.S +#----------------------------------------------------------------------------- +# +# Test utidx instruction in a vf block. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a2,2048 + vvcfgivl a2,a2,2,0 + + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a4,dest + vsd vx1,a4 + fence.v.l + + li a1,1 +loop: + ld a0,0(a4) + addi x28,a1,2 + bne a0,a1,fail + addi a4,a4,8 + addi a1,a1,1 + bne a1,a2,loop + j pass + +vtcode: + utidx x1 + addi x1,x1,1 + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/vfmvv.S b/isa/rv64uv/vfmvv.S new file mode 100644 index 0000000..869160b --- /dev/null +++ b/isa/rv64uv/vfmvv.S @@ -0,0 +1,52 @@ +#***************************************************************************** +# vfmvv.S +#----------------------------------------------------------------------------- +# +# Test vfmvv instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a2,2048 + vvcfgivl a2,a2,2,2 + + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + vfmvv vf1,vf0 + la a3,dest + vfsd vf1,a3 + fence.v.l + + li a1,1 +loop: + ld a0,0(a3) + addi x28,a1,2 + bne a0,a1,fail + addi a3,a3,8 + addi a1,a1,1 + bne a1,a2,loop + j pass + +vtcode: + utidx x1 + addi x1,x1,1 + mxtf.d f0,x1 + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/vmsv.S b/isa/rv64uv/vmsv.S new file mode 100644 index 0000000..732f660 --- /dev/null +++ b/isa/rv64uv/vmsv.S @@ -0,0 +1,53 @@ +#***************************************************************************** +# vmsv.S +#----------------------------------------------------------------------------- +# +# Test vmsv instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a2,2048 + vvcfgivl a2,a2,3,0 + + li a3,-1 + vmsv vx2,a3 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a4,dest + vsd vx2,a4 + fence.v.l + + li a1,0 +loop: + ld a0,0(a4) + addi x28,a1,2 + bne a0,a1,fail + addi a4,a4,8 + addi a1,a1,1 + bne a1,a2,loop + j pass + +vtcode: + utidx x1 + addi x1,x1,1 + add x2,x1,x2 + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/vmvv.S b/isa/rv64uv/vmvv.S new file mode 100644 index 0000000..17e5865 --- /dev/null +++ b/isa/rv64uv/vmvv.S @@ -0,0 +1,51 @@ +#***************************************************************************** +# vmvv.S +#----------------------------------------------------------------------------- +# +# Test vmvv instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a2,2048 + vvcfgivl a2,a2,3,0 + + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + vmvv vx2,vx1 + la a4,dest + vsd vx2,a4 + fence.v.l + + li a1,1 +loop: + ld a0,0(a4) + addi x28,a1,2 + bne a0,a1,fail + addi a4,a4,8 + addi a1,a1,1 + bne a1,a2,loop + j pass + +vtcode: + utidx x1 + addi x1,x1,1 + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +dest: + .skip 16384 + +RVTEST_DATA_END diff --git a/isa/rv64uv/vsetvl.S b/isa/rv64uv/vsetvl.S new file mode 100644 index 0000000..862e983 --- /dev/null +++ b/isa/rv64uv/vsetvl.S @@ -0,0 +1,559 @@ +#***************************************************************************** +# vsetvl.S +#----------------------------------------------------------------------------- +# +# Test vsetvl instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_VSETVL( 2, 0, 0, 0x07, 768, 768 ); + TEST_VSETVL( 3, 0, 0, 0x07, 769, 768 ); + TEST_VSETVL( 4, 0, 0, 0x07, 767, 767 ); + + TEST_VSETVL( 5, 0, 0, 0xff, 2048, 2048 ); + TEST_VSETVL( 6, 0, 0, 0xff, 2049, 2048 ); + TEST_VSETVL( 7, 0, 0, 0xff, 2047, 2047 ); + + TEST_VSETVL( 8, 1, 0, 0x07, 768, 768 ); + TEST_VSETVL( 9, 1, 0, 0x07, 769, 768 ); + TEST_VSETVL( 10, 1, 0, 0x07, 767, 767 ); + + TEST_VSETVL( 11, 1, 0, 0xff, 2048, 2048 ); + TEST_VSETVL( 12, 1, 0, 0xff, 2049, 2048 ); + TEST_VSETVL( 13, 1, 0, 0xff, 2047, 2047 ); + + TEST_VSETVL( 14, 2, 0, 0x07, 768, 768 ); + TEST_VSETVL( 15, 2, 0, 0x07, 769, 768 ); + TEST_VSETVL( 16, 2, 0, 0x07, 767, 767 ); + + TEST_VSETVL( 17, 2, 0, 0xff, 2048, 2048 ); + TEST_VSETVL( 18, 2, 0, 0xff, 2049, 2048 ); + TEST_VSETVL( 19, 2, 0, 0xff, 2047, 2047 ); + + TEST_VSETVL( 20, 3, 0, 0x07, 384, 384 ); + TEST_VSETVL( 21, 3, 0, 0x07, 385, 384 ); + TEST_VSETVL( 22, 3, 0, 0x07, 383, 383 ); + + TEST_VSETVL( 23, 3, 0, 0xff, 1024, 1024 ); + TEST_VSETVL( 24, 3, 0, 0xff, 1025, 1024 ); + TEST_VSETVL( 25, 3, 0, 0xff, 1023, 1023 ); + + TEST_VSETVL( 26, 4, 0, 0x07, 255, 255 ); + TEST_VSETVL( 27, 4, 0, 0x07, 256, 255 ); + TEST_VSETVL( 28, 4, 0, 0x07, 254, 254 ); + + TEST_VSETVL( 29, 4, 0, 0xff, 680, 680 ); + TEST_VSETVL( 30, 4, 0, 0xff, 681, 680 ); + TEST_VSETVL( 31, 4, 0, 0xff, 679, 679 ); + + TEST_VSETVL( 32, 5, 0, 0x07, 192, 192 ); + TEST_VSETVL( 33, 5, 0, 0x07, 193, 192 ); + TEST_VSETVL( 34, 5, 0, 0x07, 191, 191 ); + + TEST_VSETVL( 35, 5, 0, 0xff, 512, 512 ); + TEST_VSETVL( 36, 5, 0, 0xff, 513, 512 ); + TEST_VSETVL( 37, 5, 0, 0xff, 511, 511 ); + + TEST_VSETVL( 38, 6, 0, 0x07, 153, 153 ); + TEST_VSETVL( 39, 6, 0, 0x07, 154, 153 ); + TEST_VSETVL( 40, 6, 0, 0x07, 152, 152 ); + + TEST_VSETVL( 41, 6, 0, 0xff, 408, 408 ); + TEST_VSETVL( 42, 6, 0, 0xff, 409, 408 ); + TEST_VSETVL( 43, 6, 0, 0xff, 407, 407 ); + + TEST_VSETVL( 44, 7, 0, 0x07, 126, 126 ); + TEST_VSETVL( 45, 7, 0, 0x07, 127, 126 ); + TEST_VSETVL( 46, 7, 0, 0x07, 125, 125 ); + + TEST_VSETVL( 47, 7, 0, 0xff, 336, 336 ); + TEST_VSETVL( 48, 7, 0, 0xff, 337, 336 ); + TEST_VSETVL( 49, 7, 0, 0xff, 335, 335 ); + + TEST_VSETVL( 50, 8, 0, 0x07, 108, 108 ); + TEST_VSETVL( 51, 8, 0, 0x07, 109, 108 ); + TEST_VSETVL( 52, 8, 0, 0x07, 107, 107 ); + + TEST_VSETVL( 53, 8, 0, 0xff, 288, 288 ); + TEST_VSETVL( 54, 8, 0, 0xff, 289, 288 ); + TEST_VSETVL( 55, 8, 0, 0xff, 287, 287 ); + + TEST_VSETVL( 56, 9, 0, 0x07, 96, 96 ); + TEST_VSETVL( 57, 9, 0, 0x07, 97, 96 ); + TEST_VSETVL( 58, 9, 0, 0x07, 95, 95 ); + + TEST_VSETVL( 59, 9, 0, 0xff, 256, 256 ); + TEST_VSETVL( 60, 9, 0, 0xff, 257, 256 ); + TEST_VSETVL( 61, 9, 0, 0xff, 255, 255 ); + + TEST_VSETVL( 62, 10, 0, 0x07, 84, 84 ); + TEST_VSETVL( 63, 10, 0, 0x07, 85, 84 ); + TEST_VSETVL( 64, 10, 0, 0x07, 83, 83 ); + + TEST_VSETVL( 65, 10, 0, 0xff, 224, 224 ); + TEST_VSETVL( 66, 10, 0, 0xff, 225, 224 ); + TEST_VSETVL( 67, 10, 0, 0xff, 223, 223 ); + + TEST_VSETVL( 68, 11, 0, 0x07, 75, 75 ); + TEST_VSETVL( 69, 11, 0, 0x07, 76, 75 ); + TEST_VSETVL( 70, 11, 0, 0x07, 74, 74 ); + + TEST_VSETVL( 71, 11, 0, 0xff, 200, 200 ); + TEST_VSETVL( 72, 11, 0, 0xff, 201, 200 ); + TEST_VSETVL( 73, 11, 0, 0xff, 199, 199 ); + + TEST_VSETVL( 74, 12, 0, 0x07, 69, 69 ); + TEST_VSETVL( 75, 12, 0, 0x07, 70, 69 ); + TEST_VSETVL( 76, 12, 0, 0x07, 68, 68 ); + + TEST_VSETVL( 77, 12, 0, 0xff, 184, 184 ); + TEST_VSETVL( 78, 12, 0, 0xff, 185, 184 ); + TEST_VSETVL( 79, 12, 0, 0xff, 183, 183 ); + + TEST_VSETVL( 80, 13, 0, 0x07, 63, 63 ); + TEST_VSETVL( 81, 13, 0, 0x07, 64, 63 ); + TEST_VSETVL( 82, 13, 0, 0x07, 62, 62 ); + + TEST_VSETVL( 83, 13, 0, 0xff, 168, 168 ); + TEST_VSETVL( 84, 13, 0, 0xff, 169, 168 ); + TEST_VSETVL( 85, 13, 0, 0xff, 167, 167 ); + + TEST_VSETVL( 86, 14, 0, 0x07, 57, 57 ); + TEST_VSETVL( 87, 14, 0, 0x07, 58, 57 ); + TEST_VSETVL( 88, 14, 0, 0x07, 56, 56 ); + + TEST_VSETVL( 89, 14, 0, 0xff, 152, 152 ); + TEST_VSETVL( 90, 14, 0, 0xff, 153, 152 ); + TEST_VSETVL( 91, 14, 0, 0xff, 151, 151 ); + + TEST_VSETVL( 92, 15, 0, 0x07, 54, 54 ); + TEST_VSETVL( 93, 15, 0, 0x07, 55, 54 ); + TEST_VSETVL( 94, 15, 0, 0x07, 53, 53 ); + + TEST_VSETVL( 95, 15, 0, 0xff, 144, 144 ); + TEST_VSETVL( 96, 15, 0, 0xff, 145, 144 ); + TEST_VSETVL( 97, 15, 0, 0xff, 143, 143 ); + + TEST_VSETVL( 98, 16, 0, 0x07, 51, 51 ); + TEST_VSETVL( 99, 16, 0, 0x07, 52, 51 ); + TEST_VSETVL( 100, 16, 0, 0x07, 50, 50 ); + + TEST_VSETVL( 101, 16, 0, 0xff, 136, 136 ); + TEST_VSETVL( 102, 16, 0, 0xff, 137, 136 ); + TEST_VSETVL( 103, 16, 0, 0xff, 135, 135 ); + + TEST_VSETVL( 104, 17, 0, 0x07, 48, 48 ); + TEST_VSETVL( 105, 17, 0, 0x07, 49, 48 ); + TEST_VSETVL( 106, 17, 0, 0x07, 47, 47 ); + + TEST_VSETVL( 107, 17, 0, 0xff, 128, 128 ); + TEST_VSETVL( 108, 17, 0, 0xff, 129, 128 ); + TEST_VSETVL( 109, 17, 0, 0xff, 127, 127 ); + + TEST_VSETVL( 110, 18, 0, 0x07, 45, 45 ); + TEST_VSETVL( 111, 18, 0, 0x07, 46, 45 ); + TEST_VSETVL( 112, 18, 0, 0x07, 44, 44 ); + + TEST_VSETVL( 113, 18, 0, 0xff, 120, 120 ); + TEST_VSETVL( 114, 18, 0, 0xff, 121, 120 ); + TEST_VSETVL( 115, 18, 0, 0xff, 119, 119 ); + + TEST_VSETVL( 116, 19, 0, 0x07, 42, 42 ); + TEST_VSETVL( 117, 19, 0, 0x07, 43, 42 ); + TEST_VSETVL( 118, 19, 0, 0x07, 41, 41 ); + + TEST_VSETVL( 119, 19, 0, 0xff, 112, 112 ); + TEST_VSETVL( 120, 19, 0, 0xff, 113, 112 ); + TEST_VSETVL( 121, 19, 0, 0xff, 111, 111 ); + + TEST_VSETVL( 122, 20, 0, 0x07, 39, 39 ); + TEST_VSETVL( 123, 20, 0, 0x07, 40, 39 ); + TEST_VSETVL( 124, 20, 0, 0x07, 38, 38 ); + + TEST_VSETVL( 125, 20, 0, 0xff, 104, 104 ); + TEST_VSETVL( 126, 20, 0, 0xff, 105, 104 ); + TEST_VSETVL( 127, 20, 0, 0xff, 103, 103 ); + + TEST_VSETVL( 128, 21, 0, 0x07, 36, 36 ); + TEST_VSETVL( 129, 21, 0, 0x07, 37, 36 ); + TEST_VSETVL( 130, 21, 0, 0x07, 35, 35 ); + + TEST_VSETVL( 131, 21, 0, 0xff, 96, 96 ); + TEST_VSETVL( 132, 21, 0, 0xff, 97, 96 ); + TEST_VSETVL( 133, 21, 0, 0xff, 95, 95 ); + + TEST_VSETVL( 134, 22, 0, 0x07, 36, 36 ); + TEST_VSETVL( 135, 22, 0, 0x07, 37, 36 ); + TEST_VSETVL( 136, 22, 0, 0x07, 35, 35 ); + + TEST_VSETVL( 137, 22, 0, 0xff, 96, 96 ); + TEST_VSETVL( 138, 22, 0, 0xff, 97, 96 ); + TEST_VSETVL( 139, 22, 0, 0xff, 95, 95 ); + + TEST_VSETVL( 140, 23, 0, 0x07, 33, 33 ); + TEST_VSETVL( 141, 23, 0, 0x07, 34, 33 ); + TEST_VSETVL( 142, 23, 0, 0x07, 32, 32 ); + + TEST_VSETVL( 143, 23, 0, 0xff, 88, 88 ); + TEST_VSETVL( 144, 23, 0, 0xff, 89, 88 ); + TEST_VSETVL( 145, 23, 0, 0xff, 87, 87 ); + + TEST_VSETVL( 146, 24, 0, 0x07, 33, 33 ); + TEST_VSETVL( 147, 24, 0, 0x07, 34, 33 ); + TEST_VSETVL( 148, 24, 0, 0x07, 32, 32 ); + + TEST_VSETVL( 149, 24, 0, 0xff, 88, 88 ); + TEST_VSETVL( 150, 24, 0, 0xff, 89, 88 ); + TEST_VSETVL( 151, 24, 0, 0xff, 87, 87 ); + + TEST_VSETVL( 152, 25, 0, 0x07, 30, 30 ); + TEST_VSETVL( 153, 25, 0, 0x07, 31, 30 ); + TEST_VSETVL( 154, 25, 0, 0x07, 29, 29 ); + + TEST_VSETVL( 155, 25, 0, 0xff, 80, 80 ); + TEST_VSETVL( 156, 25, 0, 0xff, 81, 80 ); + TEST_VSETVL( 157, 25, 0, 0xff, 79, 79 ); + + TEST_VSETVL( 158, 26, 0, 0x07, 30, 30 ); + TEST_VSETVL( 159, 26, 0, 0x07, 31, 30 ); + TEST_VSETVL( 160, 26, 0, 0x07, 29, 29 ); + + TEST_VSETVL( 161, 26, 0, 0xff, 80, 80 ); + TEST_VSETVL( 162, 26, 0, 0xff, 81, 80 ); + TEST_VSETVL( 163, 26, 0, 0xff, 79, 79 ); + + TEST_VSETVL( 164, 27, 0, 0x07, 27, 27 ); + TEST_VSETVL( 165, 27, 0, 0x07, 28, 27 ); + TEST_VSETVL( 166, 27, 0, 0x07, 26, 26 ); + + TEST_VSETVL( 167, 27, 0, 0xff, 72, 72 ); + TEST_VSETVL( 168, 27, 0, 0xff, 73, 72 ); + TEST_VSETVL( 169, 27, 0, 0xff, 71, 71 ); + + TEST_VSETVL( 170, 28, 0, 0x07, 27, 27 ); + TEST_VSETVL( 171, 28, 0, 0x07, 28, 27 ); + TEST_VSETVL( 172, 28, 0, 0x07, 26, 26 ); + + TEST_VSETVL( 173, 28, 0, 0xff, 72, 72 ); + TEST_VSETVL( 174, 28, 0, 0xff, 73, 72 ); + TEST_VSETVL( 175, 28, 0, 0xff, 71, 71 ); + + TEST_VSETVL( 176, 29, 0, 0x07, 27, 27 ); + TEST_VSETVL( 177, 29, 0, 0x07, 28, 27 ); + TEST_VSETVL( 178, 29, 0, 0x07, 26, 26 ); + + TEST_VSETVL( 179, 29, 0, 0xff, 72, 72 ); + TEST_VSETVL( 180, 29, 0, 0xff, 73, 72 ); + TEST_VSETVL( 181, 29, 0, 0xff, 71, 71 ); + + TEST_VSETVL( 182, 30, 0, 0x07, 24, 24 ); + TEST_VSETVL( 183, 30, 0, 0x07, 25, 24 ); + TEST_VSETVL( 184, 30, 0, 0x07, 23, 23 ); + + TEST_VSETVL( 185, 30, 0, 0xff, 64, 64 ); + TEST_VSETVL( 186, 30, 0, 0xff, 65, 64 ); + TEST_VSETVL( 187, 30, 0, 0xff, 63, 63 ); + + TEST_VSETVL( 188, 31, 0, 0x07, 24, 24 ); + TEST_VSETVL( 189, 31, 0, 0x07, 25, 24 ); + TEST_VSETVL( 190, 31, 0, 0x07, 23, 23 ); + + TEST_VSETVL( 191, 31, 0, 0xff, 64, 64 ); + TEST_VSETVL( 192, 31, 0, 0xff, 65, 64 ); + TEST_VSETVL( 193, 31, 0, 0xff, 63, 63 ); + + TEST_VSETVL( 194, 32, 0, 0x07, 24, 24 ); + TEST_VSETVL( 195, 32, 0, 0x07, 25, 24 ); + TEST_VSETVL( 196, 32, 0, 0x07, 23, 23 ); + + TEST_VSETVL( 197, 32, 0, 0xff, 64, 64 ); + TEST_VSETVL( 198, 32, 0, 0xff, 65, 64 ); + TEST_VSETVL( 199, 32, 0, 0xff, 63, 63 ); + + TEST_VSETVL( 200, 32, 0, 0x07, 24, 24 ); + TEST_VSETVL( 201, 32, 0, 0x07, 25, 24 ); + TEST_VSETVL( 202, 32, 0, 0x07, 23, 23 ); + + TEST_VSETVL( 203, 32, 0, 0xff, 64, 64 ); + TEST_VSETVL( 204, 32, 0, 0xff, 65, 64 ); + TEST_VSETVL( 205, 32, 0, 0xff, 63, 63 ); + + TEST_VSETVL( 206, 32, 1, 0x07, 24, 24 ); + TEST_VSETVL( 207, 32, 1, 0x07, 25, 24 ); + TEST_VSETVL( 208, 32, 1, 0x07, 23, 23 ); + + TEST_VSETVL( 209, 32, 1, 0xff, 64, 64 ); + TEST_VSETVL( 210, 32, 1, 0xff, 65, 64 ); + TEST_VSETVL( 211, 32, 1, 0xff, 63, 63 ); + + TEST_VSETVL( 212, 32, 2, 0x07, 21, 21 ); + TEST_VSETVL( 213, 32, 2, 0x07, 22, 21 ); + TEST_VSETVL( 214, 32, 2, 0x07, 20, 20 ); + + TEST_VSETVL( 215, 32, 2, 0xff, 56, 56 ); + TEST_VSETVL( 216, 32, 2, 0xff, 57, 56 ); + TEST_VSETVL( 217, 32, 2, 0xff, 55, 55 ); + + TEST_VSETVL( 218, 32, 3, 0x07, 21, 21 ); + TEST_VSETVL( 219, 32, 3, 0x07, 22, 21 ); + TEST_VSETVL( 220, 32, 3, 0x07, 20, 20 ); + + TEST_VSETVL( 221, 32, 3, 0xff, 56, 56 ); + TEST_VSETVL( 222, 32, 3, 0xff, 57, 56 ); + TEST_VSETVL( 223, 32, 3, 0xff, 55, 55 ); + + TEST_VSETVL( 224, 32, 4, 0x07, 21, 21 ); + TEST_VSETVL( 225, 32, 4, 0x07, 22, 21 ); + TEST_VSETVL( 226, 32, 4, 0x07, 20, 20 ); + + TEST_VSETVL( 227, 32, 4, 0xff, 56, 56 ); + TEST_VSETVL( 228, 32, 4, 0xff, 57, 56 ); + TEST_VSETVL( 229, 32, 4, 0xff, 55, 55 ); + + TEST_VSETVL( 230, 32, 5, 0x07, 21, 21 ); + TEST_VSETVL( 231, 32, 5, 0x07, 22, 21 ); + TEST_VSETVL( 232, 32, 5, 0x07, 20, 20 ); + + TEST_VSETVL( 233, 32, 5, 0xff, 56, 56 ); + TEST_VSETVL( 234, 32, 5, 0xff, 57, 56 ); + TEST_VSETVL( 235, 32, 5, 0xff, 55, 55 ); + + TEST_VSETVL( 236, 32, 6, 0x07, 18, 18 ); + TEST_VSETVL( 237, 32, 6, 0x07, 19, 18 ); + TEST_VSETVL( 238, 32, 6, 0x07, 17, 17 ); + + TEST_VSETVL( 239, 32, 6, 0xff, 48, 48 ); + TEST_VSETVL( 240, 32, 6, 0xff, 49, 48 ); + TEST_VSETVL( 241, 32, 6, 0xff, 47, 47 ); + + TEST_VSETVL( 242, 32, 7, 0x07, 18, 18 ); + TEST_VSETVL( 243, 32, 7, 0x07, 19, 18 ); + TEST_VSETVL( 244, 32, 7, 0x07, 17, 17 ); + + TEST_VSETVL( 245, 32, 7, 0xff, 48, 48 ); + TEST_VSETVL( 246, 32, 7, 0xff, 49, 48 ); + TEST_VSETVL( 247, 32, 7, 0xff, 47, 47 ); + + TEST_VSETVL( 248, 32, 8, 0x07, 18, 18 ); + TEST_VSETVL( 249, 32, 8, 0x07, 19, 18 ); + TEST_VSETVL( 250, 32, 8, 0x07, 17, 17 ); + + TEST_VSETVL( 251, 32, 8, 0xff, 48, 48 ); + TEST_VSETVL( 252, 32, 8, 0xff, 49, 48 ); + TEST_VSETVL( 253, 32, 8, 0xff, 47, 47 ); + + TEST_VSETVL( 254, 32, 9, 0x07, 18, 18 ); + TEST_VSETVL( 255, 32, 9, 0x07, 19, 18 ); + TEST_VSETVL( 256, 32, 9, 0x07, 17, 17 ); + + TEST_VSETVL( 257, 32, 9, 0xff, 48, 48 ); + TEST_VSETVL( 258, 32, 9, 0xff, 49, 48 ); + TEST_VSETVL( 259, 32, 9, 0xff, 47, 47 ); + + TEST_VSETVL( 260, 32, 10, 0x07, 18, 18 ); + TEST_VSETVL( 261, 32, 10, 0x07, 19, 18 ); + TEST_VSETVL( 262, 32, 10, 0x07, 17, 17 ); + + TEST_VSETVL( 263, 32, 10, 0xff, 48, 48 ); + TEST_VSETVL( 264, 32, 10, 0xff, 49, 48 ); + TEST_VSETVL( 265, 32, 10, 0xff, 47, 47 ); + + TEST_VSETVL( 266, 32, 11, 0x07, 18, 18 ); + TEST_VSETVL( 267, 32, 11, 0x07, 19, 18 ); + TEST_VSETVL( 268, 32, 11, 0x07, 17, 17 ); + + TEST_VSETVL( 269, 32, 11, 0xff, 48, 48 ); + TEST_VSETVL( 270, 32, 11, 0xff, 49, 48 ); + TEST_VSETVL( 271, 32, 11, 0xff, 47, 47 ); + + TEST_VSETVL( 272, 32, 12, 0x07, 15, 15 ); + TEST_VSETVL( 273, 32, 12, 0x07, 16, 15 ); + TEST_VSETVL( 274, 32, 12, 0x07, 14, 14 ); + + TEST_VSETVL( 275, 32, 12, 0xff, 40, 40 ); + TEST_VSETVL( 276, 32, 12, 0xff, 41, 40 ); + TEST_VSETVL( 277, 32, 12, 0xff, 39, 39 ); + + TEST_VSETVL( 278, 32, 13, 0x07, 15, 15 ); + TEST_VSETVL( 279, 32, 13, 0x07, 16, 15 ); + TEST_VSETVL( 280, 32, 13, 0x07, 14, 14 ); + + TEST_VSETVL( 281, 32, 13, 0xff, 40, 40 ); + TEST_VSETVL( 282, 32, 13, 0xff, 41, 40 ); + TEST_VSETVL( 283, 32, 13, 0xff, 39, 39 ); + + TEST_VSETVL( 284, 32, 14, 0x07, 15, 15 ); + TEST_VSETVL( 285, 32, 14, 0x07, 16, 15 ); + TEST_VSETVL( 286, 32, 14, 0x07, 14, 14 ); + + TEST_VSETVL( 287, 32, 14, 0xff, 40, 40 ); + TEST_VSETVL( 288, 32, 14, 0xff, 41, 40 ); + TEST_VSETVL( 289, 32, 14, 0xff, 39, 39 ); + + TEST_VSETVL( 290, 32, 15, 0x07, 15, 15 ); + TEST_VSETVL( 291, 32, 15, 0x07, 16, 15 ); + TEST_VSETVL( 292, 32, 15, 0x07, 14, 14 ); + + TEST_VSETVL( 293, 32, 15, 0xff, 40, 40 ); + TEST_VSETVL( 294, 32, 15, 0xff, 41, 40 ); + TEST_VSETVL( 295, 32, 15, 0xff, 39, 39 ); + + TEST_VSETVL( 296, 32, 16, 0x07, 15, 15 ); + TEST_VSETVL( 297, 32, 16, 0x07, 16, 15 ); + TEST_VSETVL( 298, 32, 16, 0x07, 14, 14 ); + + TEST_VSETVL( 299, 32, 16, 0xff, 40, 40 ); + TEST_VSETVL( 300, 32, 16, 0xff, 41, 40 ); + TEST_VSETVL( 301, 32, 16, 0xff, 39, 39 ); + + TEST_VSETVL( 302, 32, 17, 0x07, 15, 15 ); + TEST_VSETVL( 303, 32, 17, 0x07, 16, 15 ); + TEST_VSETVL( 304, 32, 17, 0x07, 14, 14 ); + + TEST_VSETVL( 305, 32, 17, 0xff, 40, 40 ); + TEST_VSETVL( 306, 32, 17, 0xff, 41, 40 ); + TEST_VSETVL( 307, 32, 17, 0xff, 39, 39 ); + + TEST_VSETVL( 308, 32, 18, 0x07, 15, 15 ); + TEST_VSETVL( 309, 32, 18, 0x07, 16, 15 ); + TEST_VSETVL( 310, 32, 18, 0x07, 14, 14 ); + + TEST_VSETVL( 311, 32, 18, 0xff, 40, 40 ); + TEST_VSETVL( 312, 32, 18, 0xff, 41, 40 ); + TEST_VSETVL( 313, 32, 18, 0xff, 39, 39 ); + + TEST_VSETVL( 314, 32, 19, 0x07, 15, 15 ); + TEST_VSETVL( 315, 32, 19, 0x07, 16, 15 ); + TEST_VSETVL( 316, 32, 19, 0x07, 14, 14 ); + + TEST_VSETVL( 317, 32, 19, 0xff, 40, 40 ); + TEST_VSETVL( 318, 32, 19, 0xff, 41, 40 ); + TEST_VSETVL( 319, 32, 19, 0xff, 39, 39 ); + + TEST_VSETVL( 320, 32, 20, 0x07, 15, 15 ); + TEST_VSETVL( 321, 32, 20, 0x07, 16, 15 ); + TEST_VSETVL( 322, 32, 20, 0x07, 14, 14 ); + + TEST_VSETVL( 323, 32, 20, 0xff, 40, 40 ); + TEST_VSETVL( 324, 32, 20, 0xff, 41, 40 ); + TEST_VSETVL( 325, 32, 20, 0xff, 39, 39 ); + + TEST_VSETVL( 326, 32, 21, 0x07, 12, 12 ); + TEST_VSETVL( 327, 32, 21, 0x07, 13, 12 ); + TEST_VSETVL( 328, 32, 21, 0x07, 11, 11 ); + + TEST_VSETVL( 329, 32, 21, 0xff, 32, 32 ); + TEST_VSETVL( 330, 32, 21, 0xff, 33, 32 ); + TEST_VSETVL( 331, 32, 21, 0xff, 31, 31 ); + + TEST_VSETVL( 332, 32, 22, 0x07, 12, 12 ); + TEST_VSETVL( 333, 32, 22, 0x07, 13, 12 ); + TEST_VSETVL( 334, 32, 22, 0x07, 11, 11 ); + + TEST_VSETVL( 335, 32, 22, 0xff, 32, 32 ); + TEST_VSETVL( 336, 32, 22, 0xff, 33, 32 ); + TEST_VSETVL( 337, 32, 22, 0xff, 31, 31 ); + + TEST_VSETVL( 338, 32, 23, 0x07, 12, 12 ); + TEST_VSETVL( 339, 32, 23, 0x07, 13, 12 ); + TEST_VSETVL( 340, 32, 23, 0x07, 11, 11 ); + + TEST_VSETVL( 341, 32, 23, 0xff, 32, 32 ); + TEST_VSETVL( 342, 32, 23, 0xff, 33, 32 ); + TEST_VSETVL( 343, 32, 23, 0xff, 31, 31 ); + + TEST_VSETVL( 344, 32, 24, 0x07, 12, 12 ); + TEST_VSETVL( 345, 32, 24, 0x07, 13, 12 ); + TEST_VSETVL( 346, 32, 24, 0x07, 11, 11 ); + + TEST_VSETVL( 347, 32, 24, 0xff, 32, 32 ); + TEST_VSETVL( 348, 32, 24, 0xff, 33, 32 ); + TEST_VSETVL( 349, 32, 24, 0xff, 31, 31 ); + + TEST_VSETVL( 350, 32, 25, 0x07, 12, 12 ); + TEST_VSETVL( 351, 32, 25, 0x07, 13, 12 ); + TEST_VSETVL( 352, 32, 25, 0x07, 11, 11 ); + + TEST_VSETVL( 353, 32, 25, 0xff, 32, 32 ); + TEST_VSETVL( 354, 32, 25, 0xff, 33, 32 ); + TEST_VSETVL( 355, 32, 25, 0xff, 31, 31 ); + + TEST_VSETVL( 356, 32, 26, 0x07, 12, 12 ); + TEST_VSETVL( 357, 32, 26, 0x07, 13, 12 ); + TEST_VSETVL( 358, 32, 26, 0x07, 11, 11 ); + + TEST_VSETVL( 359, 32, 26, 0xff, 32, 32 ); + TEST_VSETVL( 360, 32, 26, 0xff, 33, 32 ); + TEST_VSETVL( 361, 32, 26, 0xff, 31, 31 ); + + TEST_VSETVL( 362, 32, 27, 0x07, 12, 12 ); + TEST_VSETVL( 363, 32, 27, 0x07, 13, 12 ); + TEST_VSETVL( 364, 32, 27, 0x07, 11, 11 ); + + TEST_VSETVL( 365, 32, 27, 0xff, 32, 32 ); + TEST_VSETVL( 366, 32, 27, 0xff, 33, 32 ); + TEST_VSETVL( 367, 32, 27, 0xff, 31, 31 ); + + TEST_VSETVL( 368, 32, 28, 0x07, 12, 12 ); + TEST_VSETVL( 369, 32, 28, 0x07, 13, 12 ); + TEST_VSETVL( 370, 32, 28, 0x07, 11, 11 ); + + TEST_VSETVL( 371, 32, 28, 0xff, 32, 32 ); + TEST_VSETVL( 372, 32, 28, 0xff, 33, 32 ); + TEST_VSETVL( 373, 32, 28, 0xff, 31, 31 ); + + TEST_VSETVL( 374, 32, 29, 0x07, 12, 12 ); + TEST_VSETVL( 375, 32, 29, 0x07, 13, 12 ); + TEST_VSETVL( 376, 32, 29, 0x07, 11, 11 ); + + TEST_VSETVL( 377, 32, 29, 0xff, 32, 32 ); + TEST_VSETVL( 378, 32, 29, 0xff, 33, 32 ); + TEST_VSETVL( 379, 32, 29, 0xff, 31, 31 ); + + TEST_VSETVL( 380, 32, 30, 0x07, 12, 12 ); + TEST_VSETVL( 381, 32, 30, 0x07, 13, 12 ); + TEST_VSETVL( 382, 32, 30, 0x07, 11, 11 ); + + TEST_VSETVL( 383, 32, 30, 0xff, 32, 32 ); + TEST_VSETVL( 384, 32, 30, 0xff, 33, 32 ); + TEST_VSETVL( 385, 32, 30, 0xff, 31, 31 ); + + TEST_VSETVL( 386, 32, 31, 0x07, 12, 12 ); + TEST_VSETVL( 387, 32, 31, 0x07, 13, 12 ); + TEST_VSETVL( 388, 32, 31, 0x07, 11, 11 ); + + TEST_VSETVL( 389, 32, 31, 0xff, 32, 32 ); + TEST_VSETVL( 390, 32, 31, 0xff, 33, 32 ); + TEST_VSETVL( 391, 32, 31, 0xff, 31, 31 ); + + TEST_VSETVL( 392, 32, 32, 0x07, 12, 12 ); + TEST_VSETVL( 393, 32, 32, 0x07, 13, 12 ); + TEST_VSETVL( 394, 32, 32, 0x07, 11, 11 ); + + TEST_VSETVL( 395, 32, 32, 0xff, 32, 32 ); + TEST_VSETVL( 396, 32, 32, 0xff, 33, 32 ); + TEST_VSETVL( 397, 32, 32, 0xff, 31, 31 ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64uv/vvadd_branch.S b/isa/rv64uv/vvadd_branch.S new file mode 100644 index 0000000..191408d --- /dev/null +++ b/isa/rv64uv/vvadd_branch.S @@ -0,0 +1,141 @@ +#***************************************************************************** +# vvadd_branch.S +#----------------------------------------------------------------------------- +# +# Test vvadd branch. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a3,4 + vvcfgivl a3,a3,32,0 + + la a3,src1 + la a4,src2 + vld vx2,a3 + vld vx3,a4 + lui a0,%hi(vtcode1) + vf %lo(vtcode1)(a0) + la a5,dest + vsd vx2,a5 + fence.v.l + + ld a1,0(a5) + li a2,8 + li x28,2 + bne a1,a2,fail + ld a1,8(a5) + li a2, 6 + li x28,3 + bne a1,a2,fail + ld a1,16(a5) + li a2, 4 + li x28,4 + bne a1,a2,fail + li a2, 2 + ld a1,24(a5) + li x28,5 + bne a1,a2,fail + + la a3,src1 + vld vx4,a3 + li a4, 3 + vmsv vx5,a4 + lui a0,%hi(vtcode2) + vf %lo(vtcode2)(a0) + la a5,dest + vsd vx4,a5 + fence.v.l + + ld a1,0(a5) + li a2,1 + li x28,6 + bne a1,a2,fail + ld a1,8(a5) + li a2,2 + li x28,7 + bne a1,a2,fail + ld a1,16(a5) + li a2,0 + li x28,8 + bne a1,a2,fail + ld a1,24(a5) + li a2,0 + li x28,9 + bne a1,a2,fail + + la a3,src2 + vld vx5,a3 + lui a0,%hi(vtcode3) + vf %lo(vtcode3)(a0) + la a5,dest + vsd vx5,a5 + fence.v.l + + ld a1,0(a5) + li a2,4 + li x28,6 + bne a1,a2,fail + ld a1,8(a5) + li a2,3 + li x28,7 + bne a1,a2,fail + ld a1,16(a5) + li a2,2 + li x28,8 + bne a1,a2,fail + ld a1,24(a5) + li a2,1 + li x28,9 + bne a1,a2,fail + + j pass + +vtcode1: + beq x2, x2, end + add x2,x2,x3 +end: add x2, x3, x3 + stop + +vtcode2: + blt x4, x5, end2 + add x4, x0, x0 +end2: add x4, x4, x0 + stop + +vtcode3: + bge x5, x0, end3 + add x5, x0, x0 +end3: add x5, x5,x0 + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src1: + .dword 1 + .dword 2 + .dword 3 + .dword 4 +src2: + .dword 4 + .dword 3 + .dword 2 + .dword 1 +dest: + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + +RVTEST_DATA_END diff --git a/isa/rv64uv/vvadd_d.S b/isa/rv64uv/vvadd_d.S new file mode 100644 index 0000000..ae9db03 --- /dev/null +++ b/isa/rv64uv/vvadd_d.S @@ -0,0 +1,130 @@ +#***************************************************************************** +# vvadd_d.S +#----------------------------------------------------------------------------- +# +# Test vvadd d. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a3,4 + vvcfgivl a3,a3,32,0 + + la a3,src1 + la a4,src2 + vld vx2,a3 + vld vx3,a4 + lui a0,%hi(vtcode1) + vf %lo(vtcode1)(a0) + la a5,dest + vsd vx2,a5 + fence.v.l + + ld a1,0(a5) + li a2,5 + li x28,2 + bne a1,a2,fail + ld a1,8(a5) + li x28,3 + bne a1,a2,fail + ld a1,16(a5) + li x28,4 + bne a1,a2,fail + ld a1,24(a5) + li x28,5 + bne a1,a2,fail + + la a3,src1 + vld vx4,a3 + lui a0,%hi(vtcode2) + vf %lo(vtcode2)(a0) + la a5,dest + vsd vx4,a5 + fence.v.l + + ld a1,0(a5) + li a2,1 + li x28,6 + bne a1,a2,fail + ld a1,8(a5) + li a2,2 + li x28,7 + bne a1,a2,fail + ld a1,16(a5) + li a2,3 + li x28,8 + bne a1,a2,fail + ld a1,24(a5) + li a2,4 + li x28,9 + bne a1,a2,fail + + la a3,src2 + vld vx5,a3 + lui a0,%hi(vtcode3) + vf %lo(vtcode3)(a0) + la a5,dest + vsd vx5,a5 + fence.v.l + + ld a1,0(a5) + li a2,4 + li x28,6 + bne a1,a2,fail + ld a1,8(a5) + li a2,3 + li x28,7 + bne a1,a2,fail + ld a1,16(a5) + li a2,2 + li x28,8 + bne a1,a2,fail + ld a1,24(a5) + li a2,1 + li x28,9 + bne a1,a2,fail + + j pass + +vtcode1: + add x2,x2,x3 + stop + +vtcode2: + add a0,a0,x0 + stop + +vtcode3: + add a1,a1,x0 + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src1: + .dword 1 + .dword 2 + .dword 3 + .dword 4 +src2: + .dword 4 + .dword 3 + .dword 2 + .dword 1 +dest: + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + +RVTEST_DATA_END diff --git a/isa/rv64uv/vvadd_fd.S b/isa/rv64uv/vvadd_fd.S new file mode 100644 index 0000000..bcd417a --- /dev/null +++ b/isa/rv64uv/vvadd_fd.S @@ -0,0 +1,76 @@ +#***************************************************************************** +# vvadd_fd.S +#----------------------------------------------------------------------------- +# +# Test vvadd fd. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a3,4 + vvcfgivl a3,a3,32,32 + + la a3,src1 + la a4,src2 + vfld vf2,a3 + vfld vf3,a4 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a5,dest + vfsd vf2,a5 + fence.v.l + la a5,result + ld a1,0(a5) + ld a2,0(a5) + li x28,2 + bne a1,a2,fail + ld a1,8(a5) + li x28,3 + bne a1,a2,fail + ld a1,16(a5) + li x28,4 + bne a1,a2,fail + ld a1,24(a5) + li x28,5 + bne a1,a2,fail + j pass + +vtcode: + fadd.d f2,f2,f3 + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src1: + .double 0.1 + .double 0.2 + .double 0.3 + .double 0.4 +src2: + .double 0.4 + .double 0.3 + .double 0.2 + .double 0.1 +dest: + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe +result: + .double 0.5 + .double 0.5 + .double 0.5 + .double 0.5 + +RVTEST_DATA_END diff --git a/isa/rv64uv/vvadd_fw.S b/isa/rv64uv/vvadd_fw.S new file mode 100644 index 0000000..f857237 --- /dev/null +++ b/isa/rv64uv/vvadd_fw.S @@ -0,0 +1,76 @@ +#***************************************************************************** +# vvadd_fw.S +#----------------------------------------------------------------------------- +# +# Test vvadd fw. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a3,4 + vvcfgivl a3,a3,32,32 + + la a3,src1 + la a4,src2 + vflw vf2,a3 + vflw vf3,a4 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a5,dest + vfsw vf2,a5 + fence.v.l + la a6,result + lw a1,0(a5) + lw a2,0(a6) + li x28,2 + bne a1,a2,fail + lw a1,8(a5) + li x28,3 + bne a1,a2,fail + lw a1,16(a5) + li x28,4 + bne a1,a2,fail + lw a1,24(a5) + li x28,5 + bne a1,a2,fail + j pass + +vtcode: + fadd.s f2,f2,f3 + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src1: + .single 0.1 + .single 0.2 + .single 0.3 + .single 0.4 +src2: + .single 0.4 + .single 0.3 + .single 0.2 + .single 0.1 +dest: + .word 0xdeadbeef + .word 0xdeadbeef + .word 0xdeadbeef + .word 0xdeadbeef +result: + .single 0.5 + .single 0.5 + .single 0.5 + .single 0.5 + +RVTEST_DATA_END diff --git a/isa/rv64uv/vvadd_w.S b/isa/rv64uv/vvadd_w.S new file mode 100644 index 0000000..f4ad1ca --- /dev/null +++ b/isa/rv64uv/vvadd_w.S @@ -0,0 +1,85 @@ +#***************************************************************************** +# vvadd_w.S +#----------------------------------------------------------------------------- +# +# Test vvadd w. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a3,9 + vvcfgivl a3,a3,32,0 + + la a3,src1 + la a4,src2 + vlw vx2,a3 + vlw vx3,a4 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a5,dest + vsw vx2,a5 + fence.v.l + lw a1,0(a5) + li a2,10 + li x28,2 + bne a1,a2,fail + lw a1,4(a5) + li x28,3 + bne a1,a2,fail + lw a1,8(a5) + li x28,4 + bne a1,a2,fail + lw a1,12(a5) + li x28,5 + bne a1,a2,fail + j pass + +vtcode: + addw x2,x2,x3 + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src1: + .word 1 + .word 2 + .word 3 + .word 4 + .word 5 + .word 6 + .word 7 + .word 8 + .word 9 +src2: + .word 9 + .word 8 + .word 7 + .word 6 + .word 5 + .word 4 + .word 3 + .word 2 + .word 1 +dest: + .word 0xdeadbeef + .word 0xdeadbeef + .word 0xdeadbeef + .word 0xdeadbeef + .word 0xdeadbeef + .word 0xdeadbeef + .word 0xdeadbeef + .word 0xdeadbeef + .word 0xdeadbeef + +RVTEST_DATA_END diff --git a/isa/rv64uv/vvcfg.S b/isa/rv64uv/vvcfg.S new file mode 100644 index 0000000..e474d60 --- /dev/null +++ b/isa/rv64uv/vvcfg.S @@ -0,0 +1,559 @@ +#***************************************************************************** +# vvcfg.S +#----------------------------------------------------------------------------- +# +# Test vvcfg instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_VVCFG( 2, 0, 0, 0x07, 768, 768 ); + TEST_VVCFG( 3, 0, 0, 0x07, 769, 768 ); + TEST_VVCFG( 4, 0, 0, 0x07, 767, 767 ); + + TEST_VVCFG( 5, 0, 0, 0xff, 2048, 2048 ); + TEST_VVCFG( 6, 0, 0, 0xff, 2049, 2048 ); + TEST_VVCFG( 7, 0, 0, 0xff, 2047, 2047 ); + + TEST_VVCFG( 8, 1, 0, 0x07, 768, 768 ); + TEST_VVCFG( 9, 1, 0, 0x07, 769, 768 ); + TEST_VVCFG( 10, 1, 0, 0x07, 767, 767 ); + + TEST_VVCFG( 11, 1, 0, 0xff, 2048, 2048 ); + TEST_VVCFG( 12, 1, 0, 0xff, 2049, 2048 ); + TEST_VVCFG( 13, 1, 0, 0xff, 2047, 2047 ); + + TEST_VVCFG( 14, 2, 0, 0x07, 768, 768 ); + TEST_VVCFG( 15, 2, 0, 0x07, 769, 768 ); + TEST_VVCFG( 16, 2, 0, 0x07, 767, 767 ); + + TEST_VVCFG( 17, 2, 0, 0xff, 2048, 2048 ); + TEST_VVCFG( 18, 2, 0, 0xff, 2049, 2048 ); + TEST_VVCFG( 19, 2, 0, 0xff, 2047, 2047 ); + + TEST_VVCFG( 20, 3, 0, 0x07, 384, 384 ); + TEST_VVCFG( 21, 3, 0, 0x07, 385, 384 ); + TEST_VVCFG( 22, 3, 0, 0x07, 383, 383 ); + + TEST_VVCFG( 23, 3, 0, 0xff, 1024, 1024 ); + TEST_VVCFG( 24, 3, 0, 0xff, 1025, 1024 ); + TEST_VVCFG( 25, 3, 0, 0xff, 1023, 1023 ); + + TEST_VVCFG( 26, 4, 0, 0x07, 255, 255 ); + TEST_VVCFG( 27, 4, 0, 0x07, 256, 255 ); + TEST_VVCFG( 28, 4, 0, 0x07, 254, 254 ); + + TEST_VVCFG( 29, 4, 0, 0xff, 680, 680 ); + TEST_VVCFG( 30, 4, 0, 0xff, 681, 680 ); + TEST_VVCFG( 31, 4, 0, 0xff, 679, 679 ); + + TEST_VVCFG( 32, 5, 0, 0x07, 192, 192 ); + TEST_VVCFG( 33, 5, 0, 0x07, 193, 192 ); + TEST_VVCFG( 34, 5, 0, 0x07, 191, 191 ); + + TEST_VVCFG( 35, 5, 0, 0xff, 512, 512 ); + TEST_VVCFG( 36, 5, 0, 0xff, 513, 512 ); + TEST_VVCFG( 37, 5, 0, 0xff, 511, 511 ); + + TEST_VVCFG( 38, 6, 0, 0x07, 153, 153 ); + TEST_VVCFG( 39, 6, 0, 0x07, 154, 153 ); + TEST_VVCFG( 40, 6, 0, 0x07, 152, 152 ); + + TEST_VVCFG( 41, 6, 0, 0xff, 408, 408 ); + TEST_VVCFG( 42, 6, 0, 0xff, 409, 408 ); + TEST_VVCFG( 43, 6, 0, 0xff, 407, 407 ); + + TEST_VVCFG( 44, 7, 0, 0x07, 126, 126 ); + TEST_VVCFG( 45, 7, 0, 0x07, 127, 126 ); + TEST_VVCFG( 46, 7, 0, 0x07, 125, 125 ); + + TEST_VVCFG( 47, 7, 0, 0xff, 336, 336 ); + TEST_VVCFG( 48, 7, 0, 0xff, 337, 336 ); + TEST_VVCFG( 49, 7, 0, 0xff, 335, 335 ); + + TEST_VVCFG( 50, 8, 0, 0x07, 108, 108 ); + TEST_VVCFG( 51, 8, 0, 0x07, 109, 108 ); + TEST_VVCFG( 52, 8, 0, 0x07, 107, 107 ); + + TEST_VVCFG( 53, 8, 0, 0xff, 288, 288 ); + TEST_VVCFG( 54, 8, 0, 0xff, 289, 288 ); + TEST_VVCFG( 55, 8, 0, 0xff, 287, 287 ); + + TEST_VVCFG( 56, 9, 0, 0x07, 96, 96 ); + TEST_VVCFG( 57, 9, 0, 0x07, 97, 96 ); + TEST_VVCFG( 58, 9, 0, 0x07, 95, 95 ); + + TEST_VVCFG( 59, 9, 0, 0xff, 256, 256 ); + TEST_VVCFG( 60, 9, 0, 0xff, 257, 256 ); + TEST_VVCFG( 61, 9, 0, 0xff, 255, 255 ); + + TEST_VVCFG( 62, 10, 0, 0x07, 84, 84 ); + TEST_VVCFG( 63, 10, 0, 0x07, 85, 84 ); + TEST_VVCFG( 64, 10, 0, 0x07, 83, 83 ); + + TEST_VVCFG( 65, 10, 0, 0xff, 224, 224 ); + TEST_VVCFG( 66, 10, 0, 0xff, 225, 224 ); + TEST_VVCFG( 67, 10, 0, 0xff, 223, 223 ); + + TEST_VVCFG( 68, 11, 0, 0x07, 75, 75 ); + TEST_VVCFG( 69, 11, 0, 0x07, 76, 75 ); + TEST_VVCFG( 70, 11, 0, 0x07, 74, 74 ); + + TEST_VVCFG( 71, 11, 0, 0xff, 200, 200 ); + TEST_VVCFG( 72, 11, 0, 0xff, 201, 200 ); + TEST_VVCFG( 73, 11, 0, 0xff, 199, 199 ); + + TEST_VVCFG( 74, 12, 0, 0x07, 69, 69 ); + TEST_VVCFG( 75, 12, 0, 0x07, 70, 69 ); + TEST_VVCFG( 76, 12, 0, 0x07, 68, 68 ); + + TEST_VVCFG( 77, 12, 0, 0xff, 184, 184 ); + TEST_VVCFG( 78, 12, 0, 0xff, 185, 184 ); + TEST_VVCFG( 79, 12, 0, 0xff, 183, 183 ); + + TEST_VVCFG( 80, 13, 0, 0x07, 63, 63 ); + TEST_VVCFG( 81, 13, 0, 0x07, 64, 63 ); + TEST_VVCFG( 82, 13, 0, 0x07, 62, 62 ); + + TEST_VVCFG( 83, 13, 0, 0xff, 168, 168 ); + TEST_VVCFG( 84, 13, 0, 0xff, 169, 168 ); + TEST_VVCFG( 85, 13, 0, 0xff, 167, 167 ); + + TEST_VVCFG( 86, 14, 0, 0x07, 57, 57 ); + TEST_VVCFG( 87, 14, 0, 0x07, 58, 57 ); + TEST_VVCFG( 88, 14, 0, 0x07, 56, 56 ); + + TEST_VVCFG( 89, 14, 0, 0xff, 152, 152 ); + TEST_VVCFG( 90, 14, 0, 0xff, 153, 152 ); + TEST_VVCFG( 91, 14, 0, 0xff, 151, 151 ); + + TEST_VVCFG( 92, 15, 0, 0x07, 54, 54 ); + TEST_VVCFG( 93, 15, 0, 0x07, 55, 54 ); + TEST_VVCFG( 94, 15, 0, 0x07, 53, 53 ); + + TEST_VVCFG( 95, 15, 0, 0xff, 144, 144 ); + TEST_VVCFG( 96, 15, 0, 0xff, 145, 144 ); + TEST_VVCFG( 97, 15, 0, 0xff, 143, 143 ); + + TEST_VVCFG( 98, 16, 0, 0x07, 51, 51 ); + TEST_VVCFG( 99, 16, 0, 0x07, 52, 51 ); + TEST_VVCFG( 100, 16, 0, 0x07, 50, 50 ); + + TEST_VVCFG( 101, 16, 0, 0xff, 136, 136 ); + TEST_VVCFG( 102, 16, 0, 0xff, 137, 136 ); + TEST_VVCFG( 103, 16, 0, 0xff, 135, 135 ); + + TEST_VVCFG( 104, 17, 0, 0x07, 48, 48 ); + TEST_VVCFG( 105, 17, 0, 0x07, 49, 48 ); + TEST_VVCFG( 106, 17, 0, 0x07, 47, 47 ); + + TEST_VVCFG( 107, 17, 0, 0xff, 128, 128 ); + TEST_VVCFG( 108, 17, 0, 0xff, 129, 128 ); + TEST_VVCFG( 109, 17, 0, 0xff, 127, 127 ); + + TEST_VVCFG( 110, 18, 0, 0x07, 45, 45 ); + TEST_VVCFG( 111, 18, 0, 0x07, 46, 45 ); + TEST_VVCFG( 112, 18, 0, 0x07, 44, 44 ); + + TEST_VVCFG( 113, 18, 0, 0xff, 120, 120 ); + TEST_VVCFG( 114, 18, 0, 0xff, 121, 120 ); + TEST_VVCFG( 115, 18, 0, 0xff, 119, 119 ); + + TEST_VVCFG( 116, 19, 0, 0x07, 42, 42 ); + TEST_VVCFG( 117, 19, 0, 0x07, 43, 42 ); + TEST_VVCFG( 118, 19, 0, 0x07, 41, 41 ); + + TEST_VVCFG( 119, 19, 0, 0xff, 112, 112 ); + TEST_VVCFG( 120, 19, 0, 0xff, 113, 112 ); + TEST_VVCFG( 121, 19, 0, 0xff, 111, 111 ); + + TEST_VVCFG( 122, 20, 0, 0x07, 39, 39 ); + TEST_VVCFG( 123, 20, 0, 0x07, 40, 39 ); + TEST_VVCFG( 124, 20, 0, 0x07, 38, 38 ); + + TEST_VVCFG( 125, 20, 0, 0xff, 104, 104 ); + TEST_VVCFG( 126, 20, 0, 0xff, 105, 104 ); + TEST_VVCFG( 127, 20, 0, 0xff, 103, 103 ); + + TEST_VVCFG( 128, 21, 0, 0x07, 36, 36 ); + TEST_VVCFG( 129, 21, 0, 0x07, 37, 36 ); + TEST_VVCFG( 130, 21, 0, 0x07, 35, 35 ); + + TEST_VVCFG( 131, 21, 0, 0xff, 96, 96 ); + TEST_VVCFG( 132, 21, 0, 0xff, 97, 96 ); + TEST_VVCFG( 133, 21, 0, 0xff, 95, 95 ); + + TEST_VVCFG( 134, 22, 0, 0x07, 36, 36 ); + TEST_VVCFG( 135, 22, 0, 0x07, 37, 36 ); + TEST_VVCFG( 136, 22, 0, 0x07, 35, 35 ); + + TEST_VVCFG( 137, 22, 0, 0xff, 96, 96 ); + TEST_VVCFG( 138, 22, 0, 0xff, 97, 96 ); + TEST_VVCFG( 139, 22, 0, 0xff, 95, 95 ); + + TEST_VVCFG( 140, 23, 0, 0x07, 33, 33 ); + TEST_VVCFG( 141, 23, 0, 0x07, 34, 33 ); + TEST_VVCFG( 142, 23, 0, 0x07, 32, 32 ); + + TEST_VVCFG( 143, 23, 0, 0xff, 88, 88 ); + TEST_VVCFG( 144, 23, 0, 0xff, 89, 88 ); + TEST_VVCFG( 145, 23, 0, 0xff, 87, 87 ); + + TEST_VVCFG( 146, 24, 0, 0x07, 33, 33 ); + TEST_VVCFG( 147, 24, 0, 0x07, 34, 33 ); + TEST_VVCFG( 148, 24, 0, 0x07, 32, 32 ); + + TEST_VVCFG( 149, 24, 0, 0xff, 88, 88 ); + TEST_VVCFG( 150, 24, 0, 0xff, 89, 88 ); + TEST_VVCFG( 151, 24, 0, 0xff, 87, 87 ); + + TEST_VVCFG( 152, 25, 0, 0x07, 30, 30 ); + TEST_VVCFG( 153, 25, 0, 0x07, 31, 30 ); + TEST_VVCFG( 154, 25, 0, 0x07, 29, 29 ); + + TEST_VVCFG( 155, 25, 0, 0xff, 80, 80 ); + TEST_VVCFG( 156, 25, 0, 0xff, 81, 80 ); + TEST_VVCFG( 157, 25, 0, 0xff, 79, 79 ); + + TEST_VVCFG( 158, 26, 0, 0x07, 30, 30 ); + TEST_VVCFG( 159, 26, 0, 0x07, 31, 30 ); + TEST_VVCFG( 160, 26, 0, 0x07, 29, 29 ); + + TEST_VVCFG( 161, 26, 0, 0xff, 80, 80 ); + TEST_VVCFG( 162, 26, 0, 0xff, 81, 80 ); + TEST_VVCFG( 163, 26, 0, 0xff, 79, 79 ); + + TEST_VVCFG( 164, 27, 0, 0x07, 27, 27 ); + TEST_VVCFG( 165, 27, 0, 0x07, 28, 27 ); + TEST_VVCFG( 166, 27, 0, 0x07, 26, 26 ); + + TEST_VVCFG( 167, 27, 0, 0xff, 72, 72 ); + TEST_VVCFG( 168, 27, 0, 0xff, 73, 72 ); + TEST_VVCFG( 169, 27, 0, 0xff, 71, 71 ); + + TEST_VVCFG( 170, 28, 0, 0x07, 27, 27 ); + TEST_VVCFG( 171, 28, 0, 0x07, 28, 27 ); + TEST_VVCFG( 172, 28, 0, 0x07, 26, 26 ); + + TEST_VVCFG( 173, 28, 0, 0xff, 72, 72 ); + TEST_VVCFG( 174, 28, 0, 0xff, 73, 72 ); + TEST_VVCFG( 175, 28, 0, 0xff, 71, 71 ); + + TEST_VVCFG( 176, 29, 0, 0x07, 27, 27 ); + TEST_VVCFG( 177, 29, 0, 0x07, 28, 27 ); + TEST_VVCFG( 178, 29, 0, 0x07, 26, 26 ); + + TEST_VVCFG( 179, 29, 0, 0xff, 72, 72 ); + TEST_VVCFG( 180, 29, 0, 0xff, 73, 72 ); + TEST_VVCFG( 181, 29, 0, 0xff, 71, 71 ); + + TEST_VVCFG( 182, 30, 0, 0x07, 24, 24 ); + TEST_VVCFG( 183, 30, 0, 0x07, 25, 24 ); + TEST_VVCFG( 184, 30, 0, 0x07, 23, 23 ); + + TEST_VVCFG( 185, 30, 0, 0xff, 64, 64 ); + TEST_VVCFG( 186, 30, 0, 0xff, 65, 64 ); + TEST_VVCFG( 187, 30, 0, 0xff, 63, 63 ); + + TEST_VVCFG( 188, 31, 0, 0x07, 24, 24 ); + TEST_VVCFG( 189, 31, 0, 0x07, 25, 24 ); + TEST_VVCFG( 190, 31, 0, 0x07, 23, 23 ); + + TEST_VVCFG( 191, 31, 0, 0xff, 64, 64 ); + TEST_VVCFG( 192, 31, 0, 0xff, 65, 64 ); + TEST_VVCFG( 193, 31, 0, 0xff, 63, 63 ); + + TEST_VVCFG( 194, 32, 0, 0x07, 24, 24 ); + TEST_VVCFG( 195, 32, 0, 0x07, 25, 24 ); + TEST_VVCFG( 196, 32, 0, 0x07, 23, 23 ); + + TEST_VVCFG( 197, 32, 0, 0xff, 64, 64 ); + TEST_VVCFG( 198, 32, 0, 0xff, 65, 64 ); + TEST_VVCFG( 199, 32, 0, 0xff, 63, 63 ); + + TEST_VVCFG( 200, 32, 0, 0x07, 24, 24 ); + TEST_VVCFG( 201, 32, 0, 0x07, 25, 24 ); + TEST_VVCFG( 202, 32, 0, 0x07, 23, 23 ); + + TEST_VVCFG( 203, 32, 0, 0xff, 64, 64 ); + TEST_VVCFG( 204, 32, 0, 0xff, 65, 64 ); + TEST_VVCFG( 205, 32, 0, 0xff, 63, 63 ); + + TEST_VVCFG( 206, 32, 1, 0x07, 24, 24 ); + TEST_VVCFG( 207, 32, 1, 0x07, 25, 24 ); + TEST_VVCFG( 208, 32, 1, 0x07, 23, 23 ); + + TEST_VVCFG( 209, 32, 1, 0xff, 64, 64 ); + TEST_VVCFG( 210, 32, 1, 0xff, 65, 64 ); + TEST_VVCFG( 211, 32, 1, 0xff, 63, 63 ); + + TEST_VVCFG( 212, 32, 2, 0x07, 21, 21 ); + TEST_VVCFG( 213, 32, 2, 0x07, 22, 21 ); + TEST_VVCFG( 214, 32, 2, 0x07, 20, 20 ); + + TEST_VVCFG( 215, 32, 2, 0xff, 56, 56 ); + TEST_VVCFG( 216, 32, 2, 0xff, 57, 56 ); + TEST_VVCFG( 217, 32, 2, 0xff, 55, 55 ); + + TEST_VVCFG( 218, 32, 3, 0x07, 21, 21 ); + TEST_VVCFG( 219, 32, 3, 0x07, 22, 21 ); + TEST_VVCFG( 220, 32, 3, 0x07, 20, 20 ); + + TEST_VVCFG( 221, 32, 3, 0xff, 56, 56 ); + TEST_VVCFG( 222, 32, 3, 0xff, 57, 56 ); + TEST_VVCFG( 223, 32, 3, 0xff, 55, 55 ); + + TEST_VVCFG( 224, 32, 4, 0x07, 21, 21 ); + TEST_VVCFG( 225, 32, 4, 0x07, 22, 21 ); + TEST_VVCFG( 226, 32, 4, 0x07, 20, 20 ); + + TEST_VVCFG( 227, 32, 4, 0xff, 56, 56 ); + TEST_VVCFG( 228, 32, 4, 0xff, 57, 56 ); + TEST_VVCFG( 229, 32, 4, 0xff, 55, 55 ); + + TEST_VVCFG( 230, 32, 5, 0x07, 21, 21 ); + TEST_VVCFG( 231, 32, 5, 0x07, 22, 21 ); + TEST_VVCFG( 232, 32, 5, 0x07, 20, 20 ); + + TEST_VVCFG( 233, 32, 5, 0xff, 56, 56 ); + TEST_VVCFG( 234, 32, 5, 0xff, 57, 56 ); + TEST_VVCFG( 235, 32, 5, 0xff, 55, 55 ); + + TEST_VVCFG( 236, 32, 6, 0x07, 18, 18 ); + TEST_VVCFG( 237, 32, 6, 0x07, 19, 18 ); + TEST_VVCFG( 238, 32, 6, 0x07, 17, 17 ); + + TEST_VVCFG( 239, 32, 6, 0xff, 48, 48 ); + TEST_VVCFG( 240, 32, 6, 0xff, 49, 48 ); + TEST_VVCFG( 241, 32, 6, 0xff, 47, 47 ); + + TEST_VVCFG( 242, 32, 7, 0x07, 18, 18 ); + TEST_VVCFG( 243, 32, 7, 0x07, 19, 18 ); + TEST_VVCFG( 244, 32, 7, 0x07, 17, 17 ); + + TEST_VVCFG( 245, 32, 7, 0xff, 48, 48 ); + TEST_VVCFG( 246, 32, 7, 0xff, 49, 48 ); + TEST_VVCFG( 247, 32, 7, 0xff, 47, 47 ); + + TEST_VVCFG( 248, 32, 8, 0x07, 18, 18 ); + TEST_VVCFG( 249, 32, 8, 0x07, 19, 18 ); + TEST_VVCFG( 250, 32, 8, 0x07, 17, 17 ); + + TEST_VVCFG( 251, 32, 8, 0xff, 48, 48 ); + TEST_VVCFG( 252, 32, 8, 0xff, 49, 48 ); + TEST_VVCFG( 253, 32, 8, 0xff, 47, 47 ); + + TEST_VVCFG( 254, 32, 9, 0x07, 18, 18 ); + TEST_VVCFG( 255, 32, 9, 0x07, 19, 18 ); + TEST_VVCFG( 256, 32, 9, 0x07, 17, 17 ); + + TEST_VVCFG( 257, 32, 9, 0xff, 48, 48 ); + TEST_VVCFG( 258, 32, 9, 0xff, 49, 48 ); + TEST_VVCFG( 259, 32, 9, 0xff, 47, 47 ); + + TEST_VVCFG( 260, 32, 10, 0x07, 18, 18 ); + TEST_VVCFG( 261, 32, 10, 0x07, 19, 18 ); + TEST_VVCFG( 262, 32, 10, 0x07, 17, 17 ); + + TEST_VVCFG( 263, 32, 10, 0xff, 48, 48 ); + TEST_VVCFG( 264, 32, 10, 0xff, 49, 48 ); + TEST_VVCFG( 265, 32, 10, 0xff, 47, 47 ); + + TEST_VVCFG( 266, 32, 11, 0x07, 18, 18 ); + TEST_VVCFG( 267, 32, 11, 0x07, 19, 18 ); + TEST_VVCFG( 268, 32, 11, 0x07, 17, 17 ); + + TEST_VVCFG( 269, 32, 11, 0xff, 48, 48 ); + TEST_VVCFG( 270, 32, 11, 0xff, 49, 48 ); + TEST_VVCFG( 271, 32, 11, 0xff, 47, 47 ); + + TEST_VVCFG( 272, 32, 12, 0x07, 15, 15 ); + TEST_VVCFG( 273, 32, 12, 0x07, 16, 15 ); + TEST_VVCFG( 274, 32, 12, 0x07, 14, 14 ); + + TEST_VVCFG( 275, 32, 12, 0xff, 40, 40 ); + TEST_VVCFG( 276, 32, 12, 0xff, 41, 40 ); + TEST_VVCFG( 277, 32, 12, 0xff, 39, 39 ); + + TEST_VVCFG( 278, 32, 13, 0x07, 15, 15 ); + TEST_VVCFG( 279, 32, 13, 0x07, 16, 15 ); + TEST_VVCFG( 280, 32, 13, 0x07, 14, 14 ); + + TEST_VVCFG( 281, 32, 13, 0xff, 40, 40 ); + TEST_VVCFG( 282, 32, 13, 0xff, 41, 40 ); + TEST_VVCFG( 283, 32, 13, 0xff, 39, 39 ); + + TEST_VVCFG( 284, 32, 14, 0x07, 15, 15 ); + TEST_VVCFG( 285, 32, 14, 0x07, 16, 15 ); + TEST_VVCFG( 286, 32, 14, 0x07, 14, 14 ); + + TEST_VVCFG( 287, 32, 14, 0xff, 40, 40 ); + TEST_VVCFG( 288, 32, 14, 0xff, 41, 40 ); + TEST_VVCFG( 289, 32, 14, 0xff, 39, 39 ); + + TEST_VVCFG( 290, 32, 15, 0x07, 15, 15 ); + TEST_VVCFG( 291, 32, 15, 0x07, 16, 15 ); + TEST_VVCFG( 292, 32, 15, 0x07, 14, 14 ); + + TEST_VVCFG( 293, 32, 15, 0xff, 40, 40 ); + TEST_VVCFG( 294, 32, 15, 0xff, 41, 40 ); + TEST_VVCFG( 295, 32, 15, 0xff, 39, 39 ); + + TEST_VVCFG( 296, 32, 16, 0x07, 15, 15 ); + TEST_VVCFG( 297, 32, 16, 0x07, 16, 15 ); + TEST_VVCFG( 298, 32, 16, 0x07, 14, 14 ); + + TEST_VVCFG( 299, 32, 16, 0xff, 40, 40 ); + TEST_VVCFG( 300, 32, 16, 0xff, 41, 40 ); + TEST_VVCFG( 301, 32, 16, 0xff, 39, 39 ); + + TEST_VVCFG( 302, 32, 17, 0x07, 15, 15 ); + TEST_VVCFG( 303, 32, 17, 0x07, 16, 15 ); + TEST_VVCFG( 304, 32, 17, 0x07, 14, 14 ); + + TEST_VVCFG( 305, 32, 17, 0xff, 40, 40 ); + TEST_VVCFG( 306, 32, 17, 0xff, 41, 40 ); + TEST_VVCFG( 307, 32, 17, 0xff, 39, 39 ); + + TEST_VVCFG( 308, 32, 18, 0x07, 15, 15 ); + TEST_VVCFG( 309, 32, 18, 0x07, 16, 15 ); + TEST_VVCFG( 310, 32, 18, 0x07, 14, 14 ); + + TEST_VVCFG( 311, 32, 18, 0xff, 40, 40 ); + TEST_VVCFG( 312, 32, 18, 0xff, 41, 40 ); + TEST_VVCFG( 313, 32, 18, 0xff, 39, 39 ); + + TEST_VVCFG( 314, 32, 19, 0x07, 15, 15 ); + TEST_VVCFG( 315, 32, 19, 0x07, 16, 15 ); + TEST_VVCFG( 316, 32, 19, 0x07, 14, 14 ); + + TEST_VVCFG( 317, 32, 19, 0xff, 40, 40 ); + TEST_VVCFG( 318, 32, 19, 0xff, 41, 40 ); + TEST_VVCFG( 319, 32, 19, 0xff, 39, 39 ); + + TEST_VVCFG( 320, 32, 20, 0x07, 15, 15 ); + TEST_VVCFG( 321, 32, 20, 0x07, 16, 15 ); + TEST_VVCFG( 322, 32, 20, 0x07, 14, 14 ); + + TEST_VVCFG( 323, 32, 20, 0xff, 40, 40 ); + TEST_VVCFG( 324, 32, 20, 0xff, 41, 40 ); + TEST_VVCFG( 325, 32, 20, 0xff, 39, 39 ); + + TEST_VVCFG( 326, 32, 21, 0x07, 12, 12 ); + TEST_VVCFG( 327, 32, 21, 0x07, 13, 12 ); + TEST_VVCFG( 328, 32, 21, 0x07, 11, 11 ); + + TEST_VVCFG( 329, 32, 21, 0xff, 32, 32 ); + TEST_VVCFG( 330, 32, 21, 0xff, 33, 32 ); + TEST_VVCFG( 331, 32, 21, 0xff, 31, 31 ); + + TEST_VVCFG( 332, 32, 22, 0x07, 12, 12 ); + TEST_VVCFG( 333, 32, 22, 0x07, 13, 12 ); + TEST_VVCFG( 334, 32, 22, 0x07, 11, 11 ); + + TEST_VVCFG( 335, 32, 22, 0xff, 32, 32 ); + TEST_VVCFG( 336, 32, 22, 0xff, 33, 32 ); + TEST_VVCFG( 337, 32, 22, 0xff, 31, 31 ); + + TEST_VVCFG( 338, 32, 23, 0x07, 12, 12 ); + TEST_VVCFG( 339, 32, 23, 0x07, 13, 12 ); + TEST_VVCFG( 340, 32, 23, 0x07, 11, 11 ); + + TEST_VVCFG( 341, 32, 23, 0xff, 32, 32 ); + TEST_VVCFG( 342, 32, 23, 0xff, 33, 32 ); + TEST_VVCFG( 343, 32, 23, 0xff, 31, 31 ); + + TEST_VVCFG( 344, 32, 24, 0x07, 12, 12 ); + TEST_VVCFG( 345, 32, 24, 0x07, 13, 12 ); + TEST_VVCFG( 346, 32, 24, 0x07, 11, 11 ); + + TEST_VVCFG( 347, 32, 24, 0xff, 32, 32 ); + TEST_VVCFG( 348, 32, 24, 0xff, 33, 32 ); + TEST_VVCFG( 349, 32, 24, 0xff, 31, 31 ); + + TEST_VVCFG( 350, 32, 25, 0x07, 12, 12 ); + TEST_VVCFG( 351, 32, 25, 0x07, 13, 12 ); + TEST_VVCFG( 352, 32, 25, 0x07, 11, 11 ); + + TEST_VVCFG( 353, 32, 25, 0xff, 32, 32 ); + TEST_VVCFG( 354, 32, 25, 0xff, 33, 32 ); + TEST_VVCFG( 355, 32, 25, 0xff, 31, 31 ); + + TEST_VVCFG( 356, 32, 26, 0x07, 12, 12 ); + TEST_VVCFG( 357, 32, 26, 0x07, 13, 12 ); + TEST_VVCFG( 358, 32, 26, 0x07, 11, 11 ); + + TEST_VVCFG( 359, 32, 26, 0xff, 32, 32 ); + TEST_VVCFG( 360, 32, 26, 0xff, 33, 32 ); + TEST_VVCFG( 361, 32, 26, 0xff, 31, 31 ); + + TEST_VVCFG( 362, 32, 27, 0x07, 12, 12 ); + TEST_VVCFG( 363, 32, 27, 0x07, 13, 12 ); + TEST_VVCFG( 364, 32, 27, 0x07, 11, 11 ); + + TEST_VVCFG( 365, 32, 27, 0xff, 32, 32 ); + TEST_VVCFG( 366, 32, 27, 0xff, 33, 32 ); + TEST_VVCFG( 367, 32, 27, 0xff, 31, 31 ); + + TEST_VVCFG( 368, 32, 28, 0x07, 12, 12 ); + TEST_VVCFG( 369, 32, 28, 0x07, 13, 12 ); + TEST_VVCFG( 370, 32, 28, 0x07, 11, 11 ); + + TEST_VVCFG( 371, 32, 28, 0xff, 32, 32 ); + TEST_VVCFG( 372, 32, 28, 0xff, 33, 32 ); + TEST_VVCFG( 373, 32, 28, 0xff, 31, 31 ); + + TEST_VVCFG( 374, 32, 29, 0x07, 12, 12 ); + TEST_VVCFG( 375, 32, 29, 0x07, 13, 12 ); + TEST_VVCFG( 376, 32, 29, 0x07, 11, 11 ); + + TEST_VVCFG( 377, 32, 29, 0xff, 32, 32 ); + TEST_VVCFG( 378, 32, 29, 0xff, 33, 32 ); + TEST_VVCFG( 379, 32, 29, 0xff, 31, 31 ); + + TEST_VVCFG( 380, 32, 30, 0x07, 12, 12 ); + TEST_VVCFG( 381, 32, 30, 0x07, 13, 12 ); + TEST_VVCFG( 382, 32, 30, 0x07, 11, 11 ); + + TEST_VVCFG( 383, 32, 30, 0xff, 32, 32 ); + TEST_VVCFG( 384, 32, 30, 0xff, 33, 32 ); + TEST_VVCFG( 385, 32, 30, 0xff, 31, 31 ); + + TEST_VVCFG( 386, 32, 31, 0x07, 12, 12 ); + TEST_VVCFG( 387, 32, 31, 0x07, 13, 12 ); + TEST_VVCFG( 388, 32, 31, 0x07, 11, 11 ); + + TEST_VVCFG( 389, 32, 31, 0xff, 32, 32 ); + TEST_VVCFG( 390, 32, 31, 0xff, 33, 32 ); + TEST_VVCFG( 391, 32, 31, 0xff, 31, 31 ); + + TEST_VVCFG( 392, 32, 32, 0x07, 12, 12 ); + TEST_VVCFG( 393, 32, 32, 0x07, 13, 12 ); + TEST_VVCFG( 394, 32, 32, 0x07, 11, 11 ); + + TEST_VVCFG( 395, 32, 32, 0xff, 32, 32 ); + TEST_VVCFG( 396, 32, 32, 0xff, 33, 32 ); + TEST_VVCFG( 397, 32, 32, 0xff, 31, 31 ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64uv/vvcfgivl.S b/isa/rv64uv/vvcfgivl.S new file mode 100644 index 0000000..83e4c1c --- /dev/null +++ b/isa/rv64uv/vvcfgivl.S @@ -0,0 +1,559 @@ +#***************************************************************************** +# vvcfgivl.S +#----------------------------------------------------------------------------- +# +# Test vvcfgivl instruction. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + TEST_VVCFGIVL( 2, 0, 0, 0x07, 768, 768 ); + TEST_VVCFGIVL( 3, 0, 0, 0x07, 769, 768 ); + TEST_VVCFGIVL( 4, 0, 0, 0x07, 767, 767 ); + + TEST_VVCFGIVL( 5, 0, 0, 0xff, 2048, 2048 ); + TEST_VVCFGIVL( 6, 0, 0, 0xff, 2049, 2048 ); + TEST_VVCFGIVL( 7, 0, 0, 0xff, 2047, 2047 ); + + TEST_VVCFGIVL( 8, 1, 0, 0x07, 768, 768 ); + TEST_VVCFGIVL( 9, 1, 0, 0x07, 769, 768 ); + TEST_VVCFGIVL( 10, 1, 0, 0x07, 767, 767 ); + + TEST_VVCFGIVL( 11, 1, 0, 0xff, 2048, 2048 ); + TEST_VVCFGIVL( 12, 1, 0, 0xff, 2049, 2048 ); + TEST_VVCFGIVL( 13, 1, 0, 0xff, 2047, 2047 ); + + TEST_VVCFGIVL( 14, 2, 0, 0x07, 768, 768 ); + TEST_VVCFGIVL( 15, 2, 0, 0x07, 769, 768 ); + TEST_VVCFGIVL( 16, 2, 0, 0x07, 767, 767 ); + + TEST_VVCFGIVL( 17, 2, 0, 0xff, 2048, 2048 ); + TEST_VVCFGIVL( 18, 2, 0, 0xff, 2049, 2048 ); + TEST_VVCFGIVL( 19, 2, 0, 0xff, 2047, 2047 ); + + TEST_VVCFGIVL( 20, 3, 0, 0x07, 384, 384 ); + TEST_VVCFGIVL( 21, 3, 0, 0x07, 385, 384 ); + TEST_VVCFGIVL( 22, 3, 0, 0x07, 383, 383 ); + + TEST_VVCFGIVL( 23, 3, 0, 0xff, 1024, 1024 ); + TEST_VVCFGIVL( 24, 3, 0, 0xff, 1025, 1024 ); + TEST_VVCFGIVL( 25, 3, 0, 0xff, 1023, 1023 ); + + TEST_VVCFGIVL( 26, 4, 0, 0x07, 255, 255 ); + TEST_VVCFGIVL( 27, 4, 0, 0x07, 256, 255 ); + TEST_VVCFGIVL( 28, 4, 0, 0x07, 254, 254 ); + + TEST_VVCFGIVL( 29, 4, 0, 0xff, 680, 680 ); + TEST_VVCFGIVL( 30, 4, 0, 0xff, 681, 680 ); + TEST_VVCFGIVL( 31, 4, 0, 0xff, 679, 679 ); + + TEST_VVCFGIVL( 32, 5, 0, 0x07, 192, 192 ); + TEST_VVCFGIVL( 33, 5, 0, 0x07, 193, 192 ); + TEST_VVCFGIVL( 34, 5, 0, 0x07, 191, 191 ); + + TEST_VVCFGIVL( 35, 5, 0, 0xff, 512, 512 ); + TEST_VVCFGIVL( 36, 5, 0, 0xff, 513, 512 ); + TEST_VVCFGIVL( 37, 5, 0, 0xff, 511, 511 ); + + TEST_VVCFGIVL( 38, 6, 0, 0x07, 153, 153 ); + TEST_VVCFGIVL( 39, 6, 0, 0x07, 154, 153 ); + TEST_VVCFGIVL( 40, 6, 0, 0x07, 152, 152 ); + + TEST_VVCFGIVL( 41, 6, 0, 0xff, 408, 408 ); + TEST_VVCFGIVL( 42, 6, 0, 0xff, 409, 408 ); + TEST_VVCFGIVL( 43, 6, 0, 0xff, 407, 407 ); + + TEST_VVCFGIVL( 44, 7, 0, 0x07, 126, 126 ); + TEST_VVCFGIVL( 45, 7, 0, 0x07, 127, 126 ); + TEST_VVCFGIVL( 46, 7, 0, 0x07, 125, 125 ); + + TEST_VVCFGIVL( 47, 7, 0, 0xff, 336, 336 ); + TEST_VVCFGIVL( 48, 7, 0, 0xff, 337, 336 ); + TEST_VVCFGIVL( 49, 7, 0, 0xff, 335, 335 ); + + TEST_VVCFGIVL( 50, 8, 0, 0x07, 108, 108 ); + TEST_VVCFGIVL( 51, 8, 0, 0x07, 109, 108 ); + TEST_VVCFGIVL( 52, 8, 0, 0x07, 107, 107 ); + + TEST_VVCFGIVL( 53, 8, 0, 0xff, 288, 288 ); + TEST_VVCFGIVL( 54, 8, 0, 0xff, 289, 288 ); + TEST_VVCFGIVL( 55, 8, 0, 0xff, 287, 287 ); + + TEST_VVCFGIVL( 56, 9, 0, 0x07, 96, 96 ); + TEST_VVCFGIVL( 57, 9, 0, 0x07, 97, 96 ); + TEST_VVCFGIVL( 58, 9, 0, 0x07, 95, 95 ); + + TEST_VVCFGIVL( 59, 9, 0, 0xff, 256, 256 ); + TEST_VVCFGIVL( 60, 9, 0, 0xff, 257, 256 ); + TEST_VVCFGIVL( 61, 9, 0, 0xff, 255, 255 ); + + TEST_VVCFGIVL( 62, 10, 0, 0x07, 84, 84 ); + TEST_VVCFGIVL( 63, 10, 0, 0x07, 85, 84 ); + TEST_VVCFGIVL( 64, 10, 0, 0x07, 83, 83 ); + + TEST_VVCFGIVL( 65, 10, 0, 0xff, 224, 224 ); + TEST_VVCFGIVL( 66, 10, 0, 0xff, 225, 224 ); + TEST_VVCFGIVL( 67, 10, 0, 0xff, 223, 223 ); + + TEST_VVCFGIVL( 68, 11, 0, 0x07, 75, 75 ); + TEST_VVCFGIVL( 69, 11, 0, 0x07, 76, 75 ); + TEST_VVCFGIVL( 70, 11, 0, 0x07, 74, 74 ); + + TEST_VVCFGIVL( 71, 11, 0, 0xff, 200, 200 ); + TEST_VVCFGIVL( 72, 11, 0, 0xff, 201, 200 ); + TEST_VVCFGIVL( 73, 11, 0, 0xff, 199, 199 ); + + TEST_VVCFGIVL( 74, 12, 0, 0x07, 69, 69 ); + TEST_VVCFGIVL( 75, 12, 0, 0x07, 70, 69 ); + TEST_VVCFGIVL( 76, 12, 0, 0x07, 68, 68 ); + + TEST_VVCFGIVL( 77, 12, 0, 0xff, 184, 184 ); + TEST_VVCFGIVL( 78, 12, 0, 0xff, 185, 184 ); + TEST_VVCFGIVL( 79, 12, 0, 0xff, 183, 183 ); + + TEST_VVCFGIVL( 80, 13, 0, 0x07, 63, 63 ); + TEST_VVCFGIVL( 81, 13, 0, 0x07, 64, 63 ); + TEST_VVCFGIVL( 82, 13, 0, 0x07, 62, 62 ); + + TEST_VVCFGIVL( 83, 13, 0, 0xff, 168, 168 ); + TEST_VVCFGIVL( 84, 13, 0, 0xff, 169, 168 ); + TEST_VVCFGIVL( 85, 13, 0, 0xff, 167, 167 ); + + TEST_VVCFGIVL( 86, 14, 0, 0x07, 57, 57 ); + TEST_VVCFGIVL( 87, 14, 0, 0x07, 58, 57 ); + TEST_VVCFGIVL( 88, 14, 0, 0x07, 56, 56 ); + + TEST_VVCFGIVL( 89, 14, 0, 0xff, 152, 152 ); + TEST_VVCFGIVL( 90, 14, 0, 0xff, 153, 152 ); + TEST_VVCFGIVL( 91, 14, 0, 0xff, 151, 151 ); + + TEST_VVCFGIVL( 92, 15, 0, 0x07, 54, 54 ); + TEST_VVCFGIVL( 93, 15, 0, 0x07, 55, 54 ); + TEST_VVCFGIVL( 94, 15, 0, 0x07, 53, 53 ); + + TEST_VVCFGIVL( 95, 15, 0, 0xff, 144, 144 ); + TEST_VVCFGIVL( 96, 15, 0, 0xff, 145, 144 ); + TEST_VVCFGIVL( 97, 15, 0, 0xff, 143, 143 ); + + TEST_VVCFGIVL( 98, 16, 0, 0x07, 51, 51 ); + TEST_VVCFGIVL( 99, 16, 0, 0x07, 52, 51 ); + TEST_VVCFGIVL( 100, 16, 0, 0x07, 50, 50 ); + + TEST_VVCFGIVL( 101, 16, 0, 0xff, 136, 136 ); + TEST_VVCFGIVL( 102, 16, 0, 0xff, 137, 136 ); + TEST_VVCFGIVL( 103, 16, 0, 0xff, 135, 135 ); + + TEST_VVCFGIVL( 104, 17, 0, 0x07, 48, 48 ); + TEST_VVCFGIVL( 105, 17, 0, 0x07, 49, 48 ); + TEST_VVCFGIVL( 106, 17, 0, 0x07, 47, 47 ); + + TEST_VVCFGIVL( 107, 17, 0, 0xff, 128, 128 ); + TEST_VVCFGIVL( 108, 17, 0, 0xff, 129, 128 ); + TEST_VVCFGIVL( 109, 17, 0, 0xff, 127, 127 ); + + TEST_VVCFGIVL( 110, 18, 0, 0x07, 45, 45 ); + TEST_VVCFGIVL( 111, 18, 0, 0x07, 46, 45 ); + TEST_VVCFGIVL( 112, 18, 0, 0x07, 44, 44 ); + + TEST_VVCFGIVL( 113, 18, 0, 0xff, 120, 120 ); + TEST_VVCFGIVL( 114, 18, 0, 0xff, 121, 120 ); + TEST_VVCFGIVL( 115, 18, 0, 0xff, 119, 119 ); + + TEST_VVCFGIVL( 116, 19, 0, 0x07, 42, 42 ); + TEST_VVCFGIVL( 117, 19, 0, 0x07, 43, 42 ); + TEST_VVCFGIVL( 118, 19, 0, 0x07, 41, 41 ); + + TEST_VVCFGIVL( 119, 19, 0, 0xff, 112, 112 ); + TEST_VVCFGIVL( 120, 19, 0, 0xff, 113, 112 ); + TEST_VVCFGIVL( 121, 19, 0, 0xff, 111, 111 ); + + TEST_VVCFGIVL( 122, 20, 0, 0x07, 39, 39 ); + TEST_VVCFGIVL( 123, 20, 0, 0x07, 40, 39 ); + TEST_VVCFGIVL( 124, 20, 0, 0x07, 38, 38 ); + + TEST_VVCFGIVL( 125, 20, 0, 0xff, 104, 104 ); + TEST_VVCFGIVL( 126, 20, 0, 0xff, 105, 104 ); + TEST_VVCFGIVL( 127, 20, 0, 0xff, 103, 103 ); + + TEST_VVCFGIVL( 128, 21, 0, 0x07, 36, 36 ); + TEST_VVCFGIVL( 129, 21, 0, 0x07, 37, 36 ); + TEST_VVCFGIVL( 130, 21, 0, 0x07, 35, 35 ); + + TEST_VVCFGIVL( 131, 21, 0, 0xff, 96, 96 ); + TEST_VVCFGIVL( 132, 21, 0, 0xff, 97, 96 ); + TEST_VVCFGIVL( 133, 21, 0, 0xff, 95, 95 ); + + TEST_VVCFGIVL( 134, 22, 0, 0x07, 36, 36 ); + TEST_VVCFGIVL( 135, 22, 0, 0x07, 37, 36 ); + TEST_VVCFGIVL( 136, 22, 0, 0x07, 35, 35 ); + + TEST_VVCFGIVL( 137, 22, 0, 0xff, 96, 96 ); + TEST_VVCFGIVL( 138, 22, 0, 0xff, 97, 96 ); + TEST_VVCFGIVL( 139, 22, 0, 0xff, 95, 95 ); + + TEST_VVCFGIVL( 140, 23, 0, 0x07, 33, 33 ); + TEST_VVCFGIVL( 141, 23, 0, 0x07, 34, 33 ); + TEST_VVCFGIVL( 142, 23, 0, 0x07, 32, 32 ); + + TEST_VVCFGIVL( 143, 23, 0, 0xff, 88, 88 ); + TEST_VVCFGIVL( 144, 23, 0, 0xff, 89, 88 ); + TEST_VVCFGIVL( 145, 23, 0, 0xff, 87, 87 ); + + TEST_VVCFGIVL( 146, 24, 0, 0x07, 33, 33 ); + TEST_VVCFGIVL( 147, 24, 0, 0x07, 34, 33 ); + TEST_VVCFGIVL( 148, 24, 0, 0x07, 32, 32 ); + + TEST_VVCFGIVL( 149, 24, 0, 0xff, 88, 88 ); + TEST_VVCFGIVL( 150, 24, 0, 0xff, 89, 88 ); + TEST_VVCFGIVL( 151, 24, 0, 0xff, 87, 87 ); + + TEST_VVCFGIVL( 152, 25, 0, 0x07, 30, 30 ); + TEST_VVCFGIVL( 153, 25, 0, 0x07, 31, 30 ); + TEST_VVCFGIVL( 154, 25, 0, 0x07, 29, 29 ); + + TEST_VVCFGIVL( 155, 25, 0, 0xff, 80, 80 ); + TEST_VVCFGIVL( 156, 25, 0, 0xff, 81, 80 ); + TEST_VVCFGIVL( 157, 25, 0, 0xff, 79, 79 ); + + TEST_VVCFGIVL( 158, 26, 0, 0x07, 30, 30 ); + TEST_VVCFGIVL( 159, 26, 0, 0x07, 31, 30 ); + TEST_VVCFGIVL( 160, 26, 0, 0x07, 29, 29 ); + + TEST_VVCFGIVL( 161, 26, 0, 0xff, 80, 80 ); + TEST_VVCFGIVL( 162, 26, 0, 0xff, 81, 80 ); + TEST_VVCFGIVL( 163, 26, 0, 0xff, 79, 79 ); + + TEST_VVCFGIVL( 164, 27, 0, 0x07, 27, 27 ); + TEST_VVCFGIVL( 165, 27, 0, 0x07, 28, 27 ); + TEST_VVCFGIVL( 166, 27, 0, 0x07, 26, 26 ); + + TEST_VVCFGIVL( 167, 27, 0, 0xff, 72, 72 ); + TEST_VVCFGIVL( 168, 27, 0, 0xff, 73, 72 ); + TEST_VVCFGIVL( 169, 27, 0, 0xff, 71, 71 ); + + TEST_VVCFGIVL( 170, 28, 0, 0x07, 27, 27 ); + TEST_VVCFGIVL( 171, 28, 0, 0x07, 28, 27 ); + TEST_VVCFGIVL( 172, 28, 0, 0x07, 26, 26 ); + + TEST_VVCFGIVL( 173, 28, 0, 0xff, 72, 72 ); + TEST_VVCFGIVL( 174, 28, 0, 0xff, 73, 72 ); + TEST_VVCFGIVL( 175, 28, 0, 0xff, 71, 71 ); + + TEST_VVCFGIVL( 176, 29, 0, 0x07, 27, 27 ); + TEST_VVCFGIVL( 177, 29, 0, 0x07, 28, 27 ); + TEST_VVCFGIVL( 178, 29, 0, 0x07, 26, 26 ); + + TEST_VVCFGIVL( 179, 29, 0, 0xff, 72, 72 ); + TEST_VVCFGIVL( 180, 29, 0, 0xff, 73, 72 ); + TEST_VVCFGIVL( 181, 29, 0, 0xff, 71, 71 ); + + TEST_VVCFGIVL( 182, 30, 0, 0x07, 24, 24 ); + TEST_VVCFGIVL( 183, 30, 0, 0x07, 25, 24 ); + TEST_VVCFGIVL( 184, 30, 0, 0x07, 23, 23 ); + + TEST_VVCFGIVL( 185, 30, 0, 0xff, 64, 64 ); + TEST_VVCFGIVL( 186, 30, 0, 0xff, 65, 64 ); + TEST_VVCFGIVL( 187, 30, 0, 0xff, 63, 63 ); + + TEST_VVCFGIVL( 188, 31, 0, 0x07, 24, 24 ); + TEST_VVCFGIVL( 189, 31, 0, 0x07, 25, 24 ); + TEST_VVCFGIVL( 190, 31, 0, 0x07, 23, 23 ); + + TEST_VVCFGIVL( 191, 31, 0, 0xff, 64, 64 ); + TEST_VVCFGIVL( 192, 31, 0, 0xff, 65, 64 ); + TEST_VVCFGIVL( 193, 31, 0, 0xff, 63, 63 ); + + TEST_VVCFGIVL( 194, 32, 0, 0x07, 24, 24 ); + TEST_VVCFGIVL( 195, 32, 0, 0x07, 25, 24 ); + TEST_VVCFGIVL( 196, 32, 0, 0x07, 23, 23 ); + + TEST_VVCFGIVL( 197, 32, 0, 0xff, 64, 64 ); + TEST_VVCFGIVL( 198, 32, 0, 0xff, 65, 64 ); + TEST_VVCFGIVL( 199, 32, 0, 0xff, 63, 63 ); + + TEST_VVCFGIVL( 200, 32, 0, 0x07, 24, 24 ); + TEST_VVCFGIVL( 201, 32, 0, 0x07, 25, 24 ); + TEST_VVCFGIVL( 202, 32, 0, 0x07, 23, 23 ); + + TEST_VVCFGIVL( 203, 32, 0, 0xff, 64, 64 ); + TEST_VVCFGIVL( 204, 32, 0, 0xff, 65, 64 ); + TEST_VVCFGIVL( 205, 32, 0, 0xff, 63, 63 ); + + TEST_VVCFGIVL( 206, 32, 1, 0x07, 24, 24 ); + TEST_VVCFGIVL( 207, 32, 1, 0x07, 25, 24 ); + TEST_VVCFGIVL( 208, 32, 1, 0x07, 23, 23 ); + + TEST_VVCFGIVL( 209, 32, 1, 0xff, 64, 64 ); + TEST_VVCFGIVL( 210, 32, 1, 0xff, 65, 64 ); + TEST_VVCFGIVL( 211, 32, 1, 0xff, 63, 63 ); + + TEST_VVCFGIVL( 212, 32, 2, 0x07, 21, 21 ); + TEST_VVCFGIVL( 213, 32, 2, 0x07, 22, 21 ); + TEST_VVCFGIVL( 214, 32, 2, 0x07, 20, 20 ); + + TEST_VVCFGIVL( 215, 32, 2, 0xff, 56, 56 ); + TEST_VVCFGIVL( 216, 32, 2, 0xff, 57, 56 ); + TEST_VVCFGIVL( 217, 32, 2, 0xff, 55, 55 ); + + TEST_VVCFGIVL( 218, 32, 3, 0x07, 21, 21 ); + TEST_VVCFGIVL( 219, 32, 3, 0x07, 22, 21 ); + TEST_VVCFGIVL( 220, 32, 3, 0x07, 20, 20 ); + + TEST_VVCFGIVL( 221, 32, 3, 0xff, 56, 56 ); + TEST_VVCFGIVL( 222, 32, 3, 0xff, 57, 56 ); + TEST_VVCFGIVL( 223, 32, 3, 0xff, 55, 55 ); + + TEST_VVCFGIVL( 224, 32, 4, 0x07, 21, 21 ); + TEST_VVCFGIVL( 225, 32, 4, 0x07, 22, 21 ); + TEST_VVCFGIVL( 226, 32, 4, 0x07, 20, 20 ); + + TEST_VVCFGIVL( 227, 32, 4, 0xff, 56, 56 ); + TEST_VVCFGIVL( 228, 32, 4, 0xff, 57, 56 ); + TEST_VVCFGIVL( 229, 32, 4, 0xff, 55, 55 ); + + TEST_VVCFGIVL( 230, 32, 5, 0x07, 21, 21 ); + TEST_VVCFGIVL( 231, 32, 5, 0x07, 22, 21 ); + TEST_VVCFGIVL( 232, 32, 5, 0x07, 20, 20 ); + + TEST_VVCFGIVL( 233, 32, 5, 0xff, 56, 56 ); + TEST_VVCFGIVL( 234, 32, 5, 0xff, 57, 56 ); + TEST_VVCFGIVL( 235, 32, 5, 0xff, 55, 55 ); + + TEST_VVCFGIVL( 236, 32, 6, 0x07, 18, 18 ); + TEST_VVCFGIVL( 237, 32, 6, 0x07, 19, 18 ); + TEST_VVCFGIVL( 238, 32, 6, 0x07, 17, 17 ); + + TEST_VVCFGIVL( 239, 32, 6, 0xff, 48, 48 ); + TEST_VVCFGIVL( 240, 32, 6, 0xff, 49, 48 ); + TEST_VVCFGIVL( 241, 32, 6, 0xff, 47, 47 ); + + TEST_VVCFGIVL( 242, 32, 7, 0x07, 18, 18 ); + TEST_VVCFGIVL( 243, 32, 7, 0x07, 19, 18 ); + TEST_VVCFGIVL( 244, 32, 7, 0x07, 17, 17 ); + + TEST_VVCFGIVL( 245, 32, 7, 0xff, 48, 48 ); + TEST_VVCFGIVL( 246, 32, 7, 0xff, 49, 48 ); + TEST_VVCFGIVL( 247, 32, 7, 0xff, 47, 47 ); + + TEST_VVCFGIVL( 248, 32, 8, 0x07, 18, 18 ); + TEST_VVCFGIVL( 249, 32, 8, 0x07, 19, 18 ); + TEST_VVCFGIVL( 250, 32, 8, 0x07, 17, 17 ); + + TEST_VVCFGIVL( 251, 32, 8, 0xff, 48, 48 ); + TEST_VVCFGIVL( 252, 32, 8, 0xff, 49, 48 ); + TEST_VVCFGIVL( 253, 32, 8, 0xff, 47, 47 ); + + TEST_VVCFGIVL( 254, 32, 9, 0x07, 18, 18 ); + TEST_VVCFGIVL( 255, 32, 9, 0x07, 19, 18 ); + TEST_VVCFGIVL( 256, 32, 9, 0x07, 17, 17 ); + + TEST_VVCFGIVL( 257, 32, 9, 0xff, 48, 48 ); + TEST_VVCFGIVL( 258, 32, 9, 0xff, 49, 48 ); + TEST_VVCFGIVL( 259, 32, 9, 0xff, 47, 47 ); + + TEST_VVCFGIVL( 260, 32, 10, 0x07, 18, 18 ); + TEST_VVCFGIVL( 261, 32, 10, 0x07, 19, 18 ); + TEST_VVCFGIVL( 262, 32, 10, 0x07, 17, 17 ); + + TEST_VVCFGIVL( 263, 32, 10, 0xff, 48, 48 ); + TEST_VVCFGIVL( 264, 32, 10, 0xff, 49, 48 ); + TEST_VVCFGIVL( 265, 32, 10, 0xff, 47, 47 ); + + TEST_VVCFGIVL( 266, 32, 11, 0x07, 18, 18 ); + TEST_VVCFGIVL( 267, 32, 11, 0x07, 19, 18 ); + TEST_VVCFGIVL( 268, 32, 11, 0x07, 17, 17 ); + + TEST_VVCFGIVL( 269, 32, 11, 0xff, 48, 48 ); + TEST_VVCFGIVL( 270, 32, 11, 0xff, 49, 48 ); + TEST_VVCFGIVL( 271, 32, 11, 0xff, 47, 47 ); + + TEST_VVCFGIVL( 272, 32, 12, 0x07, 15, 15 ); + TEST_VVCFGIVL( 273, 32, 12, 0x07, 16, 15 ); + TEST_VVCFGIVL( 274, 32, 12, 0x07, 14, 14 ); + + TEST_VVCFGIVL( 275, 32, 12, 0xff, 40, 40 ); + TEST_VVCFGIVL( 276, 32, 12, 0xff, 41, 40 ); + TEST_VVCFGIVL( 277, 32, 12, 0xff, 39, 39 ); + + TEST_VVCFGIVL( 278, 32, 13, 0x07, 15, 15 ); + TEST_VVCFGIVL( 279, 32, 13, 0x07, 16, 15 ); + TEST_VVCFGIVL( 280, 32, 13, 0x07, 14, 14 ); + + TEST_VVCFGIVL( 281, 32, 13, 0xff, 40, 40 ); + TEST_VVCFGIVL( 282, 32, 13, 0xff, 41, 40 ); + TEST_VVCFGIVL( 283, 32, 13, 0xff, 39, 39 ); + + TEST_VVCFGIVL( 284, 32, 14, 0x07, 15, 15 ); + TEST_VVCFGIVL( 285, 32, 14, 0x07, 16, 15 ); + TEST_VVCFGIVL( 286, 32, 14, 0x07, 14, 14 ); + + TEST_VVCFGIVL( 287, 32, 14, 0xff, 40, 40 ); + TEST_VVCFGIVL( 288, 32, 14, 0xff, 41, 40 ); + TEST_VVCFGIVL( 289, 32, 14, 0xff, 39, 39 ); + + TEST_VVCFGIVL( 290, 32, 15, 0x07, 15, 15 ); + TEST_VVCFGIVL( 291, 32, 15, 0x07, 16, 15 ); + TEST_VVCFGIVL( 292, 32, 15, 0x07, 14, 14 ); + + TEST_VVCFGIVL( 293, 32, 15, 0xff, 40, 40 ); + TEST_VVCFGIVL( 294, 32, 15, 0xff, 41, 40 ); + TEST_VVCFGIVL( 295, 32, 15, 0xff, 39, 39 ); + + TEST_VVCFGIVL( 296, 32, 16, 0x07, 15, 15 ); + TEST_VVCFGIVL( 297, 32, 16, 0x07, 16, 15 ); + TEST_VVCFGIVL( 298, 32, 16, 0x07, 14, 14 ); + + TEST_VVCFGIVL( 299, 32, 16, 0xff, 40, 40 ); + TEST_VVCFGIVL( 300, 32, 16, 0xff, 41, 40 ); + TEST_VVCFGIVL( 301, 32, 16, 0xff, 39, 39 ); + + TEST_VVCFGIVL( 302, 32, 17, 0x07, 15, 15 ); + TEST_VVCFGIVL( 303, 32, 17, 0x07, 16, 15 ); + TEST_VVCFGIVL( 304, 32, 17, 0x07, 14, 14 ); + + TEST_VVCFGIVL( 305, 32, 17, 0xff, 40, 40 ); + TEST_VVCFGIVL( 306, 32, 17, 0xff, 41, 40 ); + TEST_VVCFGIVL( 307, 32, 17, 0xff, 39, 39 ); + + TEST_VVCFGIVL( 308, 32, 18, 0x07, 15, 15 ); + TEST_VVCFGIVL( 309, 32, 18, 0x07, 16, 15 ); + TEST_VVCFGIVL( 310, 32, 18, 0x07, 14, 14 ); + + TEST_VVCFGIVL( 311, 32, 18, 0xff, 40, 40 ); + TEST_VVCFGIVL( 312, 32, 18, 0xff, 41, 40 ); + TEST_VVCFGIVL( 313, 32, 18, 0xff, 39, 39 ); + + TEST_VVCFGIVL( 314, 32, 19, 0x07, 15, 15 ); + TEST_VVCFGIVL( 315, 32, 19, 0x07, 16, 15 ); + TEST_VVCFGIVL( 316, 32, 19, 0x07, 14, 14 ); + + TEST_VVCFGIVL( 317, 32, 19, 0xff, 40, 40 ); + TEST_VVCFGIVL( 318, 32, 19, 0xff, 41, 40 ); + TEST_VVCFGIVL( 319, 32, 19, 0xff, 39, 39 ); + + TEST_VVCFGIVL( 320, 32, 20, 0x07, 15, 15 ); + TEST_VVCFGIVL( 321, 32, 20, 0x07, 16, 15 ); + TEST_VVCFGIVL( 322, 32, 20, 0x07, 14, 14 ); + + TEST_VVCFGIVL( 323, 32, 20, 0xff, 40, 40 ); + TEST_VVCFGIVL( 324, 32, 20, 0xff, 41, 40 ); + TEST_VVCFGIVL( 325, 32, 20, 0xff, 39, 39 ); + + TEST_VVCFGIVL( 326, 32, 21, 0x07, 12, 12 ); + TEST_VVCFGIVL( 327, 32, 21, 0x07, 13, 12 ); + TEST_VVCFGIVL( 328, 32, 21, 0x07, 11, 11 ); + + TEST_VVCFGIVL( 329, 32, 21, 0xff, 32, 32 ); + TEST_VVCFGIVL( 330, 32, 21, 0xff, 33, 32 ); + TEST_VVCFGIVL( 331, 32, 21, 0xff, 31, 31 ); + + TEST_VVCFGIVL( 332, 32, 22, 0x07, 12, 12 ); + TEST_VVCFGIVL( 333, 32, 22, 0x07, 13, 12 ); + TEST_VVCFGIVL( 334, 32, 22, 0x07, 11, 11 ); + + TEST_VVCFGIVL( 335, 32, 22, 0xff, 32, 32 ); + TEST_VVCFGIVL( 336, 32, 22, 0xff, 33, 32 ); + TEST_VVCFGIVL( 337, 32, 22, 0xff, 31, 31 ); + + TEST_VVCFGIVL( 338, 32, 23, 0x07, 12, 12 ); + TEST_VVCFGIVL( 339, 32, 23, 0x07, 13, 12 ); + TEST_VVCFGIVL( 340, 32, 23, 0x07, 11, 11 ); + + TEST_VVCFGIVL( 341, 32, 23, 0xff, 32, 32 ); + TEST_VVCFGIVL( 342, 32, 23, 0xff, 33, 32 ); + TEST_VVCFGIVL( 343, 32, 23, 0xff, 31, 31 ); + + TEST_VVCFGIVL( 344, 32, 24, 0x07, 12, 12 ); + TEST_VVCFGIVL( 345, 32, 24, 0x07, 13, 12 ); + TEST_VVCFGIVL( 346, 32, 24, 0x07, 11, 11 ); + + TEST_VVCFGIVL( 347, 32, 24, 0xff, 32, 32 ); + TEST_VVCFGIVL( 348, 32, 24, 0xff, 33, 32 ); + TEST_VVCFGIVL( 349, 32, 24, 0xff, 31, 31 ); + + TEST_VVCFGIVL( 350, 32, 25, 0x07, 12, 12 ); + TEST_VVCFGIVL( 351, 32, 25, 0x07, 13, 12 ); + TEST_VVCFGIVL( 352, 32, 25, 0x07, 11, 11 ); + + TEST_VVCFGIVL( 353, 32, 25, 0xff, 32, 32 ); + TEST_VVCFGIVL( 354, 32, 25, 0xff, 33, 32 ); + TEST_VVCFGIVL( 355, 32, 25, 0xff, 31, 31 ); + + TEST_VVCFGIVL( 356, 32, 26, 0x07, 12, 12 ); + TEST_VVCFGIVL( 357, 32, 26, 0x07, 13, 12 ); + TEST_VVCFGIVL( 358, 32, 26, 0x07, 11, 11 ); + + TEST_VVCFGIVL( 359, 32, 26, 0xff, 32, 32 ); + TEST_VVCFGIVL( 360, 32, 26, 0xff, 33, 32 ); + TEST_VVCFGIVL( 361, 32, 26, 0xff, 31, 31 ); + + TEST_VVCFGIVL( 362, 32, 27, 0x07, 12, 12 ); + TEST_VVCFGIVL( 363, 32, 27, 0x07, 13, 12 ); + TEST_VVCFGIVL( 364, 32, 27, 0x07, 11, 11 ); + + TEST_VVCFGIVL( 365, 32, 27, 0xff, 32, 32 ); + TEST_VVCFGIVL( 366, 32, 27, 0xff, 33, 32 ); + TEST_VVCFGIVL( 367, 32, 27, 0xff, 31, 31 ); + + TEST_VVCFGIVL( 368, 32, 28, 0x07, 12, 12 ); + TEST_VVCFGIVL( 369, 32, 28, 0x07, 13, 12 ); + TEST_VVCFGIVL( 370, 32, 28, 0x07, 11, 11 ); + + TEST_VVCFGIVL( 371, 32, 28, 0xff, 32, 32 ); + TEST_VVCFGIVL( 372, 32, 28, 0xff, 33, 32 ); + TEST_VVCFGIVL( 373, 32, 28, 0xff, 31, 31 ); + + TEST_VVCFGIVL( 374, 32, 29, 0x07, 12, 12 ); + TEST_VVCFGIVL( 375, 32, 29, 0x07, 13, 12 ); + TEST_VVCFGIVL( 376, 32, 29, 0x07, 11, 11 ); + + TEST_VVCFGIVL( 377, 32, 29, 0xff, 32, 32 ); + TEST_VVCFGIVL( 378, 32, 29, 0xff, 33, 32 ); + TEST_VVCFGIVL( 379, 32, 29, 0xff, 31, 31 ); + + TEST_VVCFGIVL( 380, 32, 30, 0x07, 12, 12 ); + TEST_VVCFGIVL( 381, 32, 30, 0x07, 13, 12 ); + TEST_VVCFGIVL( 382, 32, 30, 0x07, 11, 11 ); + + TEST_VVCFGIVL( 383, 32, 30, 0xff, 32, 32 ); + TEST_VVCFGIVL( 384, 32, 30, 0xff, 33, 32 ); + TEST_VVCFGIVL( 385, 32, 30, 0xff, 31, 31 ); + + TEST_VVCFGIVL( 386, 32, 31, 0x07, 12, 12 ); + TEST_VVCFGIVL( 387, 32, 31, 0x07, 13, 12 ); + TEST_VVCFGIVL( 388, 32, 31, 0x07, 11, 11 ); + + TEST_VVCFGIVL( 389, 32, 31, 0xff, 32, 32 ); + TEST_VVCFGIVL( 390, 32, 31, 0xff, 33, 32 ); + TEST_VVCFGIVL( 391, 32, 31, 0xff, 31, 31 ); + + TEST_VVCFGIVL( 392, 32, 32, 0x07, 12, 12 ); + TEST_VVCFGIVL( 393, 32, 32, 0x07, 13, 12 ); + TEST_VVCFGIVL( 394, 32, 32, 0x07, 11, 11 ); + + TEST_VVCFGIVL( 395, 32, 32, 0xff, 32, 32 ); + TEST_VVCFGIVL( 396, 32, 32, 0xff, 33, 32 ); + TEST_VVCFGIVL( 397, 32, 32, 0xff, 31, 31 ); + + #------------------------------------------------------------- + # Source/Destination tests + #------------------------------------------------------------- + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END diff --git a/isa/rv64uv/vvmul_d.S b/isa/rv64uv/vvmul_d.S new file mode 100644 index 0000000..9748fa4 --- /dev/null +++ b/isa/rv64uv/vvmul_d.S @@ -0,0 +1,73 @@ +#***************************************************************************** +# vvmul_d.S +#----------------------------------------------------------------------------- +# +# Test vvmul d. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + li a3,4 + vvcfgivl a3,a3,32,0 + + la a3,src1 + la a4,src2 + vld vx2,a3 + vld vx3,a4 + lui a0,%hi(vtcode) + vf %lo(vtcode)(a0) + la a5,dest + vsd vx2,a5 + fence.v.l + ld a1,0(a5) + li a2,4 + li x28,2 + bne a1,a2,fail + ld a1,8(a5) + li a2,6 + li x28,3 + bne a1,a2,fail + ld a1,16(a5) + li a2,6 + li x28,4 + bne a1,a2,fail + ld a1,24(a5) + li a2,4 + li x28,5 + bne a1,a2,fail + j pass + +vtcode: + mul x2,x2,x3 + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src1: + .dword 1 + .dword 2 + .dword 3 + .dword 4 +src2: + .dword 4 + .dword 3 + .dword 2 + .dword 1 +dest: + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + +RVTEST_DATA_END diff --git a/isa/rv64uv/wakeup.S b/isa/rv64uv/wakeup.S new file mode 100644 index 0000000..62cc6c8 --- /dev/null +++ b/isa/rv64uv/wakeup.S @@ -0,0 +1,159 @@ +#***************************************************************************** +# wakeup.S +#----------------------------------------------------------------------------- +# +# Test wakeup. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64U +RVTEST_CODE_BEGIN + + # make sure these don't choke at the beginning + fence.v.l + fence.v.l + fence.v.g + fence.v.g + + # this shouldn't go through since app vl is zero + la a3,src1 + la a4,src2 + vld vx2,a3 + vld vx3,a4 + lui a0,%hi(vtcode1) + vf %lo(vtcode1)(a0) + la a5,dest + vsd vx2,a5 + fence.v.l + + ld a1,0(a5) + li a2,0xdeadbeefcafebabe + li x28,2 + bne a1,a2,fail + ld a1,8(a5) + li x28,3 + bne a1,a2,fail + ld a1,16(a5) + li x28,4 + bne a1,a2,fail + ld a1,24(a5) + li x28,5 + bne a1,a2,fail + + # check default hw vector length, which is 32 + li a3, 32 + vsetvl a3, a3 + li a0, 32 + li x28, 6 + bne a3, a0, fail + + li a3, 33 + vsetvl a3, a3 + li a0, 32 + li x28, 7 + bne a3, a0, fail + + li a3, 31 + vsetvl a3, a3 + li a0, 31 + li x28, 8 + bne a3, a0, fail + + # now do some vector stuff without vvcfgivl + vsetvl x0, x0 + + li a3, 4 + la a4,src1 + la a5,src2 + vsetvl a3, a3 + vld vx2,a4 + vld vx3,a5 + lui a0,%hi(vtcode1) + vf %lo(vtcode1)(a0) + la a5,dest + vsd vx2,a5 + fence.v.l + + ld a1,0(a5) + li a2,5 + li x28,9 + bne a1,a2,fail + ld a1,8(a5) + li x28,10 + bne a1,a2,fail + ld a1,16(a5) + li x28,11 + bne a1,a2,fail + ld a1,24(a5) + li x28,12 + bne a1,a2,fail + + # initialize dest memory + li a3, 0xdeadbeefcafebabe + sd a3, 0(a5) + sd a3, 8(a5) + sd a3, 16(a5) + sd a3, 24(a5) + + # test app vl zero again + li a3, 0 + vsetvl a3, a3 + + la a3,src1 + la a4,src2 + vld vx2,a3 + vld vx3,a4 + lui a0,%hi(vtcode1) + vf %lo(vtcode1)(a0) + la a5,dest + vsd vx2,a5 + fence.v.l + + ld a1,0(a5) + li a2,0xdeadbeefcafebabe + li x28,13 + bne a1,a2,fail + ld a1,8(a5) + li x28,14 + bne a1,a2,fail + ld a1,16(a5) + li x28,15 + bne a1,a2,fail + ld a1,24(a5) + li x28,16 + bne a1,a2,fail + + j pass + +vtcode1: + add x2,x2,x3 + stop + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +src1: + .dword 1 + .dword 2 + .dword 3 + .dword 4 +src2: + .dword 4 + .dword 3 + .dword 2 + .dword 1 +dest: + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + .dword 0xdeadbeefcafebabe + +RVTEST_DATA_END |