diff --git a/fpga_spn/Makefile b/fpga_spn/Makefile deleted file mode 100644 index ad85959..0000000 --- a/fpga_spn/Makefile +++ /dev/null @@ -1,27 +0,0 @@ - -TARGET = raven_spn -C_SRCS = $(wildcard src/*.c) $(BSP_BASE)/drivers/fe300prci/fe300prci_driver.c $(BSP_BASE)/drivers/plic/plic_driver.c -CXX_SRCS = $(wildcard src/*.cpp) -HEADERS = $(wildcard src/*.h) -CFLAGS = -g -fno-builtin-printf -DUSE_PLIC -I./src -CXXFLAGS = -fno-use-cxa-atexit -LDFLAGS += -g -lstdc++ -fno-use-cxa-atexit -march=$(RISCV_ARCH) -mabi=$(RISCV_ABI) -mcmodel=medany - - -BOARD=freedom-e300-hifive1 -LINK_TARGET=flash -RISCV_ARCH=rv32imac -RISCV_ABI=ilp32 - -TOOL_DIR=/opt/shared/riscv/tools/Ubuntu/riscv64-unknown-elf-gcc-8.3.0-2020.04.1-x86_64-linux-ubuntu14/bin - -BSP_BASE = ./bsp -include $(BSP_BASE)/env/common.mk - -.PHONY: all -all: $(TARGET).dump - -$(TARGET).dump: $(TARGET) - $(TOOL_DIR)/$(TRIPLET)-objdump -d -S -C $< > $@ - - diff --git a/fpga_spn/bsp/drivers/clic/clic_driver.c b/fpga_spn/bsp/drivers/clic/clic_driver.c deleted file mode 100644 index 0612e58..0000000 --- a/fpga_spn/bsp/drivers/clic/clic_driver.c +++ /dev/null @@ -1,163 +0,0 @@ -// See LICENSE for license details. - -#include "sifive/devices/clic.h" -#include "clic/clic_driver.h" -#include "platform.h" -#include "encoding.h" -#include - - -void volatile_memzero(uint8_t * base, unsigned int size) { - volatile uint8_t * ptr; - for (ptr = base; ptr < (base + size); ptr++){ - *ptr = 0; - } -} - -// Note that there are no assertions or bounds checking on these -// parameter values. -void clic_init ( - clic_instance_t * this_clic, - uintptr_t hart_addr, - interrupt_function_ptr_t* vect_table, - interrupt_function_ptr_t default_handler, - uint32_t num_irq, - uint32_t num_config_bits - ) -{ - this_clic->hart_addr= hart_addr; - this_clic->vect_table= vect_table; - this_clic->num_config_bits= num_config_bits; - - //initialize vector table - for(int i=0;i++;ivect_table[i] = default_handler; - } - - //set base vectors - write_csr(mtvt, vect_table); - - - //clear all interrupt enables and pending - volatile_memzero((uint8_t*)(this_clic->hart_addr+CLIC_INTIE), num_irq); - volatile_memzero((uint8_t*)(this_clic->hart_addr+CLIC_INTIP), num_irq); - - //clear nlbits and nvbits; all interrupts trap to level 15 - *(volatile uint8_t*)(this_clic->hart_addr+CLIC_CFG)=0; - -} - -void clic_install_handler (clic_instance_t * this_clic, uint32_t source, interrupt_function_ptr_t handler) { - this_clic->vect_table[source] = handler; -} - -void clic_enable_interrupt (clic_instance_t * this_clic, uint32_t source) { - *(volatile uint8_t*)(this_clic->hart_addr+CLIC_INTIE+source) = 1; -} - -void clic_disable_interrupt (clic_instance_t * this_clic, uint32_t source){ - *(volatile uint8_t*)(this_clic->hart_addr+CLIC_INTIE+source) = 0; -} - -void clic_set_pending(clic_instance_t * this_clic, uint32_t source){ - *(volatile uint8_t*)(this_clic->hart_addr+CLIC_INTIP+source) = 1; -} - -void clic_clear_pending(clic_instance_t * this_clic, uint32_t source){ - *(volatile uint8_t*)(this_clic->hart_addr+CLIC_INTIP+source) = 0; -} - -void clic_set_intcfg (clic_instance_t * this_clic, uint32_t source, uint32_t intcfg){ - *(volatile uint8_t*)(this_clic->hart_addr+CLIC_INTCFG+source) = intcfg; -} - -uint8_t clic_get_intcfg (clic_instance_t * this_clic, uint32_t source){ - return *(volatile uint8_t*)(this_clic->hart_addr+CLIC_INTCFG+source); -} - -void clic_set_cliccfg (clic_instance_t * this_clic, uint32_t cfg){ - *(volatile uint8_t*)(this_clic->hart_addr+CLIC_CFG) = cfg; -} - -uint8_t clic_get_cliccfg (clic_instance_t * this_clic){ - return *(volatile uint8_t*)(this_clic->hart_addr+CLIC_CFG); -} - -//sets an interrupt level based encoding of nmbits, nlbits -uint8_t clic_set_int_level( clic_instance_t * this_clic, uint32_t source, uint8_t level) { - //extract nlbits - uint8_t nlbits = clic_get_cliccfg(this_clic); - nlbits = (nlbits >>1) & 0x7; - - //shift level right to mask off unused bits - level = level>>((this_clic->num_config_bits)-nlbits); //plus this_clic->nmbits which is always 0 for now. - //shift level into correct bit position - level = level << (8-this_clic->num_config_bits) + (this_clic->num_config_bits - nlbits); - - //write to clicintcfg - uint8_t current_intcfg = clic_get_intcfg(this_clic, source); - clic_set_intcfg(this_clic, source, (current_intcfg | level)); - - return level; -} - -//gets an interrupt level based encoding of nmbits, nlbits -uint8_t clic_get_int_level( clic_instance_t * this_clic, uint32_t source) { - uint8_t level; - level = clic_get_intcfg(this_clic, source); - - //extract nlbits - uint8_t nlbits = clic_get_cliccfg(this_clic); - nlbits = (nlbits >>1) & 0x7; - - //shift level - level = level >> (8-(this_clic->num_config_bits)); - - //shift level right to mask off priority bits - level = level>>(this_clic->num_config_bits-nlbits); //this_clic->nmbits which is always 0 for now. - - return level; -} - -//sets an interrupt priority based encoding of nmbits, nlbits -uint8_t clic_set_int_priority( clic_instance_t * this_clic, uint32_t source, uint8_t priority) { - //priority bits = num_config_bits - nlbits - //extract nlbits - uint8_t nlbits = clic_get_cliccfg(this_clic); - nlbits = (nlbits >>1) & 0x7; - - uint8_t priority_bits = this_clic->num_config_bits-nlbits; - if(priority_bits = 0) { - //no bits to set - return 0; - } - //mask off unused bits - priority = priority >> (8-priority_bits); - //shift into the correct bit position - priority = priority << (8-(this_clic->num_config_bits)); - - //write to clicintcfg - uint8_t current_intcfg = clic_get_intcfg(this_clic, source); - clic_set_intcfg(this_clic, source, (current_intcfg | priority)); - return current_intcfg; -} - -//gets an interrupt priority based encoding of nmbits, nlbits -uint8_t clic_get_int_priority( clic_instance_t * this_clic, uint32_t source) { - uint8_t priority; - priority = clic_get_intcfg(this_clic, source); - - //extract nlbits - uint8_t nlbits = clic_get_cliccfg(this_clic); - nlbits = (nlbits >>1) & 0x7; - - //shift left to mask off level bits - priority = priority << nlbits; - - //shift priority - priority = priority >> (8-((this_clic->num_config_bits)+nlbits)); - - return priority; -} - - diff --git a/fpga_spn/bsp/drivers/clic/clic_driver.h b/fpga_spn/bsp/drivers/clic/clic_driver.h deleted file mode 100644 index 27c34c2..0000000 --- a/fpga_spn/bsp/drivers/clic/clic_driver.h +++ /dev/null @@ -1,44 +0,0 @@ -// See LICENSE file for licence details - -#ifndef PLIC_DRIVER_H -#define PLIC_DRIVER_H - - -__BEGIN_DECLS - -#include "platform.h" - -typedef void (*interrupt_function_ptr_t) (void); - -typedef struct __clic_instance_t -{ - uintptr_t hart_addr; - interrupt_function_ptr_t* vect_table; - uint32_t num_config_bits; - uint32_t num_sources; -} clic_instance_t; - -// Note that there are no assertions or bounds checking on these -// parameter values. -void clic_init (clic_instance_t * this_clic, uintptr_t hart_addr, interrupt_function_ptr_t* vect_table, interrupt_function_ptr_t default_handler, uint32_t num_irq,uint32_t num_config_bits); -void clic_install_handler (clic_instance_t * this_clic, uint32_t source, interrupt_function_ptr_t handler); -void clic_enable_interrupt (clic_instance_t * this_clic, uint32_t source); -void clic_disable_interrupt (clic_instance_t * this_clic, uint32_t source); -void clic_set_pending(clic_instance_t * this_clic, uint32_t source); -void clic_clear_pending(clic_instance_t * this_clic, uint32_t source); -void clic_set_intcfg (clic_instance_t * this_clic, uint32_t source, uint32_t intcfg); -uint8_t clic_get_intcfg (clic_instance_t * this_clic, uint32_t source); -void clic_set_cliccfg (clic_instance_t * this_clic, uint32_t cfg); -uint8_t clic_get_cliccfg (clic_instance_t * this_clic); -//sets an interrupt level based encoding of nmbits, nlbits -uint8_t clic_set_int_level( clic_instance_t * this_clic, uint32_t source, uint8_t level); -//get an interrupt level based encoding of nmbits, nlbits -uint8_t clic_get_int_level( clic_instance_t * this_clic, uint32_t source); -//sets an interrupt priority based encoding of nmbits, nlbits -uint8_t clic_set_int_priority( clic_instance_t * this_clic, uint32_t source, uint8_t priority); -//sets an interrupt priority based encoding of nmbits, nlbits -uint8_t clic_get_int_priority( clic_instance_t * this_clic, uint32_t source); - -__END_DECLS - -#endif diff --git a/fpga_spn/bsp/drivers/fe300prci/fe300prci_driver.c b/fpga_spn/bsp/drivers/fe300prci/fe300prci_driver.c deleted file mode 100644 index 8eeaafc..0000000 --- a/fpga_spn/bsp/drivers/fe300prci/fe300prci_driver.c +++ /dev/null @@ -1,252 +0,0 @@ -// See LICENSE file for license details - -#include "platform.h" - -#ifdef PRCI_CTRL_ADDR -#include "fe300prci/fe300prci_driver.h" -#include - -#define rdmcycle(x) { \ - uint32_t lo, hi, hi2; \ - __asm__ __volatile__ ("1:\n\t" \ - "csrr %0, mcycleh\n\t" \ - "csrr %1, mcycle\n\t" \ - "csrr %2, mcycleh\n\t" \ - "bne %0, %2, 1b\n\t" \ - : "=r" (hi), "=r" (lo), "=r" (hi2)) ; \ - *(x) = lo | ((uint64_t) hi << 32); \ - } - -uint32_t PRCI_measure_mcycle_freq(uint32_t mtime_ticks, uint32_t mtime_freq) -{ - - uint32_t start_mtime = CLINT_REG(CLINT_MTIME); - uint32_t end_mtime = start_mtime + mtime_ticks + 1; - - // Make sure we won't get rollover. - while (end_mtime < start_mtime){ - start_mtime = CLINT_REG(CLINT_MTIME); - end_mtime = start_mtime + mtime_ticks + 1; - } - - // Don't start measuring until mtime edge. - uint32_t tmp = start_mtime; - do { - start_mtime = CLINT_REG(CLINT_MTIME); - } while (start_mtime == tmp); - - uint64_t start_mcycle; - rdmcycle(&start_mcycle); - - while (CLINT_REG(CLINT_MTIME) < end_mtime) ; - - uint64_t end_mcycle; - rdmcycle(&end_mcycle); - uint32_t difference = (uint32_t) (end_mcycle - start_mcycle); - - uint64_t freq = ((uint64_t) difference * mtime_freq) / mtime_ticks; - return (uint32_t) freq & 0xFFFFFFFF; - -} - - -void PRCI_use_hfrosc(int div, int trim) -{ - // Make sure the HFROSC is running at its default setting - // It is OK to change this even if we are running off of it. - - PRCI_REG(PRCI_HFROSCCFG) = (ROSC_DIV(div) | ROSC_TRIM(trim) | ROSC_EN(1)); - - while ((PRCI_REG(PRCI_HFROSCCFG) & ROSC_RDY(1)) == 0); - - PRCI_REG(PRCI_PLLCFG) &= ~PLL_SEL(1); -} - -void PRCI_use_pll(int refsel, int bypass, - int r, int f, int q, int finaldiv, - int hfroscdiv, int hfrosctrim) -{ - // Ensure that we aren't running off the PLL before we mess with it. - if (PRCI_REG(PRCI_PLLCFG) & PLL_SEL(1)) { - // Make sure the HFROSC is running at its default setting - PRCI_use_hfrosc(4, 16); - } - - // Set PLL Source to be HFXOSC if desired. - uint32_t config_value = 0; - - config_value |= PLL_REFSEL(refsel); - - if (bypass) { - // Bypass - config_value |= PLL_BYPASS(1); - - PRCI_REG(PRCI_PLLCFG) = config_value; - - // If we don't have an HFXTAL, this doesn't really matter. - // Set our Final output divide to divide-by-1: - PRCI_REG(PRCI_PLLDIV) = (PLL_FINAL_DIV_BY_1(1) | PLL_FINAL_DIV(0)); - } else { - - // To overclock, use the hfrosc - if (hfrosctrim >= 0 && hfroscdiv >= 0) { - PRCI_use_hfrosc(hfroscdiv, hfrosctrim); - } - - // Set DIV Settings for PLL - - // (Legal values of f_REF are 6-48MHz) - - // Set DIVR to divide-by-2 to get 8MHz frequency - // (legal values of f_R are 6-12 MHz) - - config_value |= PLL_BYPASS(1); - config_value |= PLL_R(r); - - // Set DIVF to get 512Mhz frequncy - // There is an implied multiply-by-2, 16Mhz. - // So need to write 32-1 - // (legal values of f_F are 384-768 MHz) - config_value |= PLL_F(f); - - // Set DIVQ to divide-by-2 to get 256 MHz frequency - // (legal values of f_Q are 50-400Mhz) - config_value |= PLL_Q(q); - - // Set our Final output divide to divide-by-1: - if (finaldiv == 1){ - PRCI_REG(PRCI_PLLDIV) = (PLL_FINAL_DIV_BY_1(1) | PLL_FINAL_DIV(0)); - } else { - PRCI_REG(PRCI_PLLDIV) = (PLL_FINAL_DIV(finaldiv-1)); - } - - PRCI_REG(PRCI_PLLCFG) = config_value; - - // Un-Bypass the PLL. - PRCI_REG(PRCI_PLLCFG) &= ~PLL_BYPASS(1); - - // Wait for PLL Lock - // Note that the Lock signal can be glitchy. - // Need to wait 100 us - // RTC is running at 32kHz. - // So wait 4 ticks of RTC. - uint32_t now = CLINT_REG(CLINT_MTIME); - while (CLINT_REG(CLINT_MTIME) - now < 4) ; - - // Now it is safe to check for PLL Lock - while ((PRCI_REG(PRCI_PLLCFG) & PLL_LOCK(1)) == 0); - - } - - // Switch over to PLL Clock source - PRCI_REG(PRCI_PLLCFG) |= PLL_SEL(1); - - // If we're running off HFXOSC, turn off the HFROSC to - // save power. - if (refsel) { - PRCI_REG(PRCI_HFROSCCFG) &= ~ROSC_EN(1); - } - -} - -void PRCI_use_default_clocks() -{ - // Turn off the LFROSC - AON_REG(AON_LFROSC) &= ~ROSC_EN(1); - - // Use HFROSC - PRCI_use_hfrosc(4, 16); -} - -void PRCI_use_hfxosc(uint32_t finaldiv) -{ - - PRCI_use_pll(1, // Use HFXTAL - 1, // Bypass = 1 - 0, // PLL settings don't matter - 0, // PLL settings don't matter - 0, // PLL settings don't matter - finaldiv, - -1, - -1); -} - -// This is a generic function, which -// doesn't span the entire range of HFROSC settings. -// It only adjusts the trim, which can span a hundred MHz or so. -// This function does not check the legality of the PLL settings -// at all, and it is quite possible to configure invalid PLL settings -// this way. -// It returns the actual measured CPU frequency. - -uint32_t PRCI_set_hfrosctrim_for_f_cpu(uint32_t f_cpu, PRCI_freq_target target ) -{ - - uint32_t hfrosctrim = 0; - uint32_t hfroscdiv = 4; - uint32_t prev_trim = 0; - - // In this function we use PLL settings which - // will give us a 32x multiplier from the output - // of the HFROSC source to the output of the - // PLL. We first measure our HFROSC to get the - // right trim, then finally use it as the PLL source. - // We should really check here that the f_cpu - // requested is something in the limit of the PLL. For - // now that is up to the user. - - // This will undershoot for frequencies not divisible by 16. - uint32_t desired_hfrosc_freq = (f_cpu/ 16); - - PRCI_use_hfrosc(hfroscdiv, hfrosctrim); - - // Ignore the first run (for icache reasons) - uint32_t cpu_freq = PRCI_measure_mcycle_freq(3000, RTC_FREQ); - - cpu_freq = PRCI_measure_mcycle_freq(3000, RTC_FREQ); - uint32_t prev_freq = cpu_freq; - - while ((cpu_freq < desired_hfrosc_freq) && (hfrosctrim < 0x1F)){ - prev_trim = hfrosctrim; - prev_freq = cpu_freq; - hfrosctrim ++; - PRCI_use_hfrosc(hfroscdiv, hfrosctrim); - cpu_freq = PRCI_measure_mcycle_freq(3000, RTC_FREQ); - } - - // We couldn't go low enough - if (prev_freq > desired_hfrosc_freq){ - PRCI_use_pll(0, 0, 1, 31, 1, 1, hfroscdiv, prev_trim); - cpu_freq = PRCI_measure_mcycle_freq(1000, RTC_FREQ); - return cpu_freq; - } - - // We couldn't go high enough - if (cpu_freq < desired_hfrosc_freq){ - PRCI_use_pll(0, 0, 1, 31, 1, 1, hfroscdiv, prev_trim); - cpu_freq = PRCI_measure_mcycle_freq(1000, RTC_FREQ); - return cpu_freq; - } - - // Check for over/undershoot - switch(target) { - case(PRCI_FREQ_CLOSEST): - if ((desired_hfrosc_freq - prev_freq) < (cpu_freq - desired_hfrosc_freq)) { - PRCI_use_pll(0, 0, 1, 31, 1, 1, hfroscdiv, prev_trim); - } else { - PRCI_use_pll(0, 0, 1, 31, 1, 1, hfroscdiv, hfrosctrim); - } - break; - case(PRCI_FREQ_UNDERSHOOT): - PRCI_use_pll(0, 0, 1, 31, 1, 1, hfroscdiv, prev_trim); - break; - default: - PRCI_use_pll(0, 0, 1, 31, 1, 1, hfroscdiv, hfrosctrim); - } - - cpu_freq = PRCI_measure_mcycle_freq(1000, RTC_FREQ); - return cpu_freq; - -} - -#endif diff --git a/fpga_spn/bsp/drivers/fe300prci/fe300prci_driver.h b/fpga_spn/bsp/drivers/fe300prci/fe300prci_driver.h deleted file mode 100644 index 7100f46..0000000 --- a/fpga_spn/bsp/drivers/fe300prci/fe300prci_driver.h +++ /dev/null @@ -1,79 +0,0 @@ -// See LICENSE file for license details - -#ifndef _FE300PRCI_DRIVER_H_ -#define _FE300PRCI_DRIVER_H_ - -__BEGIN_DECLS - -#include - -typedef enum prci_freq_target { - - PRCI_FREQ_OVERSHOOT, - PRCI_FREQ_CLOSEST, - PRCI_FREQ_UNDERSHOOT - -} PRCI_freq_target; - -/* Measure and return the approximate frequency of the - * CPU, as given by measuring the mcycle counter against - * the mtime ticks. - */ -uint32_t PRCI_measure_mcycle_freq(uint32_t mtime_ticks, uint32_t mtime_freq); - -/* Safely switch over to the HFROSC using the given div - * and trim settings. - */ -void PRCI_use_hfrosc(int div, int trim); - -/* Safely switch over to the 16MHz HFXOSC, - * applying the finaldiv clock divider (1 is the lowest - * legal value). - */ -void PRCI_use_hfxosc(uint32_t finaldiv); - -/* Safely switch over to the PLL using the given - * settings. - * - * Note that not all combinations of the inputs are actually - * legal, and this function does not check for their - * legality ("safely" means that this function won't turn off - * or glitch the clock the CPU is actually running off, but - * doesn't protect against you making it too fast or slow.) - */ - -void PRCI_use_pll(int refsel, int bypass, - int r, int f, int q, int finaldiv, - int hfroscdiv, int hfrosctrim); - -/* Use the default clocks configured at reset. - * This is ~16Mhz HFROSC and turns off the LFROSC - * (on the current FE310 Dev Platforms, an external LFROSC is - * used as it is more power efficient). - */ -void PRCI_use_default_clocks(); - -/* This routine will adjust the HFROSC trim - * while using HFROSC as the clock source, - * measure the resulting frequency, then - * use it as the PLL clock source, - * in an attempt to get over, under, or close to the - * requested frequency. It returns the actual measured - * frequency. - * - * Note that the requested frequency must be within the - * range supported by the PLL so not all values are - * achievable with this function, and not all - * are guaranteed to actually work. The PLL - * is rated higher than the hardware. - * - * There is no check on the desired f_cpu frequency, it - * is up to the user to specify something reasonable. - */ - -uint32_t PRCI_set_hfrosctrim_for_f_cpu(uint32_t f_cpu, PRCI_freq_target target); - -__END_DECLS - -#endif - diff --git a/fpga_spn/bsp/drivers/plic/plic_driver.c b/fpga_spn/bsp/drivers/plic/plic_driver.c deleted file mode 100644 index 4f41bda..0000000 --- a/fpga_spn/bsp/drivers/plic/plic_driver.c +++ /dev/null @@ -1,122 +0,0 @@ -// See LICENSE for license details. - -#include "sifive/devices/plic.h" -#include "plic/plic_driver.h" -#include "platform.h" -#include "encoding.h" -#include - - -// Note that there are no assertions or bounds checking on these -// parameter values. - -void volatile_memzero(uint8_t * base, unsigned int size) -{ - volatile uint8_t * ptr; - for (ptr = base; ptr < (base + size); ptr++){ - *ptr = 0; - } -} - -void PLIC_init ( - plic_instance_t * this_plic, - uintptr_t base_addr, - uint32_t num_sources, - uint32_t num_priorities, - uint32_t target_hartid - ) -{ - - this_plic->base_addr = base_addr; - this_plic->num_sources = num_sources; - this_plic->num_priorities = num_priorities; - this_plic->target_hartid = target_hartid; - - // Disable all interrupts (don't assume that these registers are reset). - volatile_memzero((uint8_t*) (this_plic->base_addr + - PLIC_ENABLE_OFFSET + - (this_plic->target_hartid << PLIC_ENABLE_SHIFT_PER_TARGET)), - (num_sources + 8) / 8); - - // Set all priorities to 0 (equal priority -- don't assume that these are reset). - volatile_memzero ((uint8_t *)(this_plic->base_addr + - PLIC_PRIORITY_OFFSET), - (num_sources + 1) << PLIC_PRIORITY_SHIFT_PER_SOURCE); - - // Set the threshold to 0. - volatile plic_threshold* threshold = (plic_threshold*) - (this_plic->base_addr + - PLIC_THRESHOLD_OFFSET + - (this_plic->target_hartid << PLIC_THRESHOLD_SHIFT_PER_TARGET)); - - *threshold = 0; - -} - -void PLIC_set_threshold (plic_instance_t * this_plic, - plic_threshold threshold){ - - volatile plic_threshold* threshold_ptr = (plic_threshold*) (this_plic->base_addr + - PLIC_THRESHOLD_OFFSET + - (this_plic->target_hartid << PLIC_THRESHOLD_SHIFT_PER_TARGET)); - - *threshold_ptr = threshold; - -} - - -void PLIC_enable_interrupt (plic_instance_t * this_plic, plic_source source){ - - volatile uint8_t * current_ptr = (volatile uint8_t *)(this_plic->base_addr + - PLIC_ENABLE_OFFSET + - (this_plic->target_hartid << PLIC_ENABLE_SHIFT_PER_TARGET) + - (source >> 3)); - uint8_t current = *current_ptr; - current = current | ( 1 << (source & 0x7)); - *current_ptr = current; - -} - -void PLIC_disable_interrupt (plic_instance_t * this_plic, plic_source source){ - - volatile uint8_t * current_ptr = (volatile uint8_t *) (this_plic->base_addr + - PLIC_ENABLE_OFFSET + - (this_plic->target_hartid << PLIC_ENABLE_SHIFT_PER_TARGET) + - (source >> 3)); - uint8_t current = *current_ptr; - current = current & ~(( 1 << (source & 0x7))); - *current_ptr = current; - -} - -void PLIC_set_priority (plic_instance_t * this_plic, plic_source source, plic_priority priority){ - - if (this_plic->num_priorities > 0) { - volatile plic_priority * priority_ptr = (volatile plic_priority *) - (this_plic->base_addr + - PLIC_PRIORITY_OFFSET + - (source << PLIC_PRIORITY_SHIFT_PER_SOURCE)); - *priority_ptr = priority; - } -} - -plic_source PLIC_claim_interrupt(plic_instance_t * this_plic){ - - volatile plic_source * claim_addr = (volatile plic_source * ) - (this_plic->base_addr + - PLIC_CLAIM_OFFSET + - (this_plic->target_hartid << PLIC_CLAIM_SHIFT_PER_TARGET)); - - return *claim_addr; - -} - -void PLIC_complete_interrupt(plic_instance_t * this_plic, plic_source source){ - - volatile plic_source * claim_addr = (volatile plic_source *) (this_plic->base_addr + - PLIC_CLAIM_OFFSET + - (this_plic->target_hartid << PLIC_CLAIM_SHIFT_PER_TARGET)); - *claim_addr = source; - -} - diff --git a/fpga_spn/bsp/drivers/plic/plic_driver.h b/fpga_spn/bsp/drivers/plic/plic_driver.h deleted file mode 100644 index f7201ee..0000000 --- a/fpga_spn/bsp/drivers/plic/plic_driver.h +++ /dev/null @@ -1,52 +0,0 @@ -// See LICENSE file for licence details - -#ifndef PLIC_DRIVER_H -#define PLIC_DRIVER_H - - -__BEGIN_DECLS - -#include "platform.h" - -typedef struct __plic_instance_t -{ - uintptr_t base_addr; - - uint32_t num_sources; - uint32_t num_priorities; - uint32_t target_hartid; -} plic_instance_t; - -typedef uint32_t plic_source; -typedef uint32_t plic_priority; -typedef uint32_t plic_threshold; - -void PLIC_init ( - plic_instance_t * this_plic, - uintptr_t base_addr, - uint32_t num_sources, - uint32_t num_priorities, - uint32_t target_hartid - ); - -void PLIC_set_threshold (plic_instance_t * this_plic, - plic_threshold threshold); - -void PLIC_enable_interrupt (plic_instance_t * this_plic, - plic_source source); - -void PLIC_disable_interrupt (plic_instance_t * this_plic, - plic_source source); - -void PLIC_set_priority (plic_instance_t * this_plic, - plic_source source, - plic_priority priority); - -plic_source PLIC_claim_interrupt(plic_instance_t * this_plic); - -void PLIC_complete_interrupt(plic_instance_t * this_plic, - plic_source source); - -__END_DECLS - -#endif diff --git a/fpga_spn/bsp/env/common.mk b/fpga_spn/bsp/env/common.mk deleted file mode 100644 index 0ca2c70..0000000 --- a/fpga_spn/bsp/env/common.mk +++ /dev/null @@ -1,66 +0,0 @@ -# See LICENSE for license details. - -ifndef _SIFIVE_MK_COMMON -_SIFIVE_MK_COMMON := # defined - -.PHONY: all -all: $(TARGET) - -include $(BSP_BASE)/libwrap/libwrap.mk - -ENV_DIR = $(BSP_BASE)/env -PLATFORM_DIR = $(ENV_DIR)/$(BOARD) - -ASM_SRCS += $(ENV_DIR)/start.S -ASM_SRCS += $(ENV_DIR)/entry.S -C_SRCS += $(PLATFORM_DIR)/init.c - -LINKER_SCRIPT := $(PLATFORM_DIR)/$(LINK_TARGET).lds - -INCLUDES += -I$(BSP_BASE)/include -INCLUDES += -I$(BSP_BASE)/drivers/ -INCLUDES += -I$(ENV_DIR) -INCLUDES += -I$(PLATFORM_DIR) - -TOOL_DIR ?= $(BSP_BASE)/../toolchain/bin - -LDFLAGS += -T $(LINKER_SCRIPT) -nostartfiles -LDFLAGS += -L$(ENV_DIR) --specs=nano.specs - -ASM_OBJS := $(ASM_SRCS:.S=.o) -C_OBJS := $(C_SRCS:.c=.o) -CXX_OBJS := $(CXX_SRCS:.cpp=.o) - -LINK_OBJS += $(ASM_OBJS) $(C_OBJS) $(CXX_OBJS) -LINK_DEPS += $(LINKER_SCRIPT) - -CLEAN_OBJS += $(TARGET) $(LINK_OBJS) - -CFLAGS += -march=$(RISCV_ARCH) -CFLAGS += -mabi=$(RISCV_ABI) -CFLAGS += -mcmodel=medany - -TRIPLET?=riscv64-unknown-elf -CXX=$(TOOL_DIR)/$(TRIPLET)-c++ -CC=$(TOOL_DIR)/$(TRIPLET)-gcc -LD=$(TOOL_DIR)/$(TRIPLET)-gcc -AR=$(TOOL_DIR)/$(TRIPLET)-ar - - -$(TARGET): $(LINK_OBJS) $(LINK_DEPS) - $(LD) $(LINK_OBJS) $(LDFLAGS) $(LIBWRAP) -o $@ - -$(ASM_OBJS): %.o: %.S $(HEADERS) - $(CC) $(CFLAGS) $(INCLUDES) -c -o $@ $< - -$(C_OBJS): %.o: %.c $(HEADERS) - $(CC) $(CFLAGS) $(INCLUDES) -include sys/cdefs.h -c -o $@ $< - -$(CXX_OBJS): %.o: %.cpp $(HEADERS) - $(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) -include sys/cdefs.h -c -o $@ $< - -.PHONY: clean -clean: - rm -f $(CLEAN_OBJS) $(LIBWRAP) - -endif # _SIFIVE_MK_COMMON diff --git a/fpga_spn/bsp/env/coreip-e2-arty/flash.lds b/fpga_spn/bsp/env/coreip-e2-arty/flash.lds deleted file mode 100644 index 2d5eb01..0000000 --- a/fpga_spn/bsp/env/coreip-e2-arty/flash.lds +++ /dev/null @@ -1,161 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - flash (rxai!w) : ORIGIN = 0x40400000, LENGTH = 512M - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 64K -} - -PHDRS -{ - flash PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 2K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >flash AT>flash :flash - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >flash AT>flash :flash - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >flash AT>flash :flash - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - .rodata : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - } >flash AT>flash :flash - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >flash AT>flash :flash - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >flash AT>flash :flash - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >flash AT>flash :flash - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >flash AT>flash :flash - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >flash AT>flash :flash - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >flash AT>flash :flash - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>flash :ram_init - - .data : - { - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>flash :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack ORIGIN(ram) + LENGTH(ram) - __stack_size : - { - PROVIDE( _heap_end = . ); - . = __stack_size; - PROVIDE( _sp = . ); - } >ram AT>ram :ram -} diff --git a/fpga_spn/bsp/env/coreip-e2-arty/init.c b/fpga_spn/bsp/env/coreip-e2-arty/init.c deleted file mode 100644 index 3a4c77c..0000000 --- a/fpga_spn/bsp/env/coreip-e2-arty/init.c +++ /dev/null @@ -1,98 +0,0 @@ -//See LICENSE for license details. -#include -#include -#include - -#include "platform.h" -#include "encoding.h" - -#define CPU_FREQ 32000000 -#define XSTR(x) #x -#define STR(x) XSTR(x) - -extern int main(int argc, char** argv); - -unsigned long get_cpu_freq() -{ - return CPU_FREQ; -} - -unsigned long get_timer_freq() -{ - return get_cpu_freq(); -} - -uint64_t get_timer_value() -{ -#if __riscv_xlen == 32 - while (1) { - uint32_t hi = read_csr(mcycleh); - uint32_t lo = read_csr(mcycle); - if (hi == read_csr(mcycleh)) - return ((uint64_t)hi << 32) | lo; - } -#else - return read_csr(mcycle); -#endif -} - -static void uart_init(size_t baud_rate) -{ - UART0_REG(UART_REG_DIV) = (get_cpu_freq() ) / baud_rate - 1; - UART0_REG(UART_REG_TXCTRL) |= UART_TXEN; -} - - -typedef void (*interrupt_function_ptr_t) (void); -interrupt_function_ptr_t localISR[CLIC_NUM_INTERRUPTS] __attribute__((aligned(64))); - - -void trap_entry(void) __attribute__((interrupt, aligned(64))); -void trap_entry(void) -{ - unsigned long mcause = read_csr(mcause); - unsigned long mepc = read_csr(mepc); - if (mcause & MCAUSE_INT) { - localISR[mcause & MCAUSE_CAUSE] (); - } else { - while(1); - } -} - -#ifdef CLIC_DIRECT -#else -void default_handler(void)__attribute__((interrupt));; -#endif -void default_handler(void) -{ - puts("default handler\n"); - while(1); -} - -void _init() -{ -#ifndef NO_INIT - uart_init(115200); - - puts("core freq at " STR(CPU_FREQ) " Hz\n"); - -//initialize vector table - int i=0; - while(iflash AT>flash :flash - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >flash AT>flash :flash - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >flash AT>flash :flash - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >flash AT>flash :flash - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >flash AT>flash :flash - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >flash AT>flash :flash - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >flash AT>flash :flash - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >flash AT>flash :flash - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >flash AT>flash :flash - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>flash :ram_init - - .data : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>flash :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack ORIGIN(ram) + LENGTH(ram) - __stack_size : - { - PROVIDE( _heap_end = . ); - . = __stack_size; - PROVIDE( _sp = . ); - } >ram AT>ram :ram -} diff --git a/fpga_spn/bsp/env/coreip-e2-arty/tim.lds b/fpga_spn/bsp/env/coreip-e2-arty/tim.lds deleted file mode 100644 index 7dfb36b..0000000 --- a/fpga_spn/bsp/env/coreip-e2-arty/tim.lds +++ /dev/null @@ -1,161 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 64K -} - -PHDRS -{ - ram PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 1K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >ram AT>ram :ram - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >ram AT>ram :ram - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >ram AT>ram :ram - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - .rodata : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - } >ram AT>ram :ram - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >ram AT>ram :ram - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >ram AT>ram :ram - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >ram AT>ram :ram - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >ram AT>ram :ram - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >ram AT>ram :ram - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >ram AT>ram :ram - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>ram :ram_init - - .data : - { - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>ram :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack : - { - . = ALIGN(8); - . += __stack_size; - PROVIDE( _sp = . ); - PROVIDE( _heap_end = . ); - } >ram AT>ram :ram -} diff --git a/fpga_spn/bsp/env/coreplexip-arty.h b/fpga_spn/bsp/env/coreplexip-arty.h deleted file mode 100644 index eedcaa5..0000000 --- a/fpga_spn/bsp/env/coreplexip-arty.h +++ /dev/null @@ -1,102 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_COREPLEXIP_ARTY_H -#define _SIFIVE_COREPLEXIP_ARTY_H - -#include - -/**************************************************************************** - * GPIO Connections - *****************************************************************************/ - -// These are the GPIO bit offsets for the directly driven -// RGB LEDs on the Freedom Exx Coreplex IP Evaluation Arty FPGA Dev Kit. -// Additional RGB LEDs are driven by the 3 PWM outputs. - -#define RED_LED_OFFSET 0 -#define GREEN_LED_OFFSET 1 -#define BLUE_LED_OFFSET 2 - -// Switch 3 is used as a GPIO input. (Switch 0 is used to set -// the reset vector, the other switches are unused). - -#define SW_3_OFFSET 3 - -// These are the buttons which are mapped as inputs. - -#define HAS_BOARD_BUTTONS - -#define BUTTON_0_OFFSET 4 -#define BUTTON_1_OFFSET 5 -#define BUTTON_2_OFFSET 6 -#define BUTTON_3_OFFSET 7 - -// These are the bit offsets for the different GPIO pins -// mapped onto the PMOD A header. - -#define JA_0_OFFSET 8 -#define JA_1_OFFSET 9 -#define JA_2_OFFSET 10 -#define JA_3_OFFSET 11 -#define JA_4_OFFSET 12 -#define JA_5_OFFSET 13 -#define JA_6_OFFSET 14 -#define JA_7_OFFSET 15 - -// The below gives a mapping between global interrupt -// sources and their number. Note that on the coreplex -// deliverable, the io_global_interrupts go directly into -// the PLIC. The evaluation image on the FPGA mimics a -// system with peripheral devices which are driving the -// global interrupt lines. -// So, on this image, in order to get an interrupt from -// e.g. pressing BUTTON_0: -// 1) Steps which are external to the delivery coreplex: -// a) The corresponding GPIO pin must be configured as in input -// b) The "interrupt on fall" bit must be set for the GPIO pin -// 2) Steps which would also need to be performed for the delivery coreplex: -// a) The corresponding global interrupt, priority, and threshold must be configured in the PLIC. -// b) The external interrupt bit must be enabled in MSTATUS -// c) Interrupts must be enabled globally in the core. - -// Any of the above GPIO pins can be used as global interrupt -// sources by adding their offset to the INT_GPIO_BASE. -// For example, the buttons are shown here: - -#define INT_DEVICE_BUTTON_0 (GPIO_INT_BASE + BUTTON_0_OFFSET) -#define INT_DEVICE_BUTTON_1 (GPIO_INT_BASE + BUTTON_1_OFFSET) -#define INT_DEVICE_BUTTON_2 (GPIO_INT_BASE + BUTTON_2_OFFSET) -#define INT_DEVICE_BUTTON_3 (GPIO_INT_BASE + BUTTON_3_OFFSET) - -// In addition, the Switches are mapped directly to -// the PLIC (without going through the GPIO Peripheral). - -#define INT_EXT_DEVICE_SW_0 (EXTERNAL_INT_BASE + 0) -#define INT_EXT_DEVICE_SW_1 (EXTERNAL_INT_BASE + 1) -#define INT_EXT_DEVICE_SW_2 (EXTERNAL_INT_BASE + 2) -#define INT_EXT_DEVICE_SW_3 (EXTERNAL_INT_BASE + 3) - -// This gives the mapping from inputs to LOCAL interrupts. - -#define LOCAL_INT_SW_0 0 -#define LOCAL_INT_SW_1 1 -#define LOCAL_INT_SW_2 2 -#define LOCAL_INT_SW_3 3 -#define LOCAL_INT_BTN_0 4 -#define LOCAL_INT_BTN_1 5 -#define LOCAL_INT_BTN_2 6 -#define LOCAL_INT_BTN_3 7 -#define LOCAL_INT_JA_0 8 -#define LOCAL_INT_JA_1 9 -#define LOCAL_INT_JA_2 10 -#define LOCAL_INT_JA_3 11 -#define LOCAL_INT_JA_4 12 -#define LOCAL_INT_JA_5 13 -#define LOCAL_INT_JA_6 14 -#define LOCAL_INT_JA_7 15 - -#define RTC_FREQ 32768 - -void write_hex(int fd, unsigned long int hex); - -#endif /* _SIFIVE_COREPLEXIP_ARTY_H */ diff --git a/fpga_spn/bsp/env/coreplexip-e31-arty/dhrystone.lds b/fpga_spn/bsp/env/coreplexip-e31-arty/dhrystone.lds deleted file mode 100644 index 8f6527b..0000000 --- a/fpga_spn/bsp/env/coreplexip-e31-arty/dhrystone.lds +++ /dev/null @@ -1,157 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - flash (rxai!w) : ORIGIN = 0x40400000, LENGTH = 512M - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K -} - -PHDRS -{ - flash PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 1K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >flash AT>flash :flash - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >flash AT>flash :flash - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >flash AT>flash :flash - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >flash AT>flash :flash - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >flash AT>flash :flash - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >flash AT>flash :flash - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >flash AT>flash :flash - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >flash AT>flash :flash - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >flash AT>flash :flash - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>flash :ram_init - - .data : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>flash :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack ORIGIN(ram) + LENGTH(ram) - __stack_size : - { - PROVIDE( _heap_end = . ); - . = __stack_size; - PROVIDE( _sp = . ); - } >ram AT>ram :ram -} diff --git a/fpga_spn/bsp/env/coreplexip-e31-arty/flash.lds b/fpga_spn/bsp/env/coreplexip-e31-arty/flash.lds deleted file mode 100644 index 590c5b6..0000000 --- a/fpga_spn/bsp/env/coreplexip-e31-arty/flash.lds +++ /dev/null @@ -1,161 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - flash (rxai!w) : ORIGIN = 0x40400000, LENGTH = 512M - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K -} - -PHDRS -{ - flash PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 2K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >flash AT>flash :flash - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >flash AT>flash :flash - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >flash AT>flash :flash - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - .rodata : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - } >flash AT>flash :flash - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >flash AT>flash :flash - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >flash AT>flash :flash - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >flash AT>flash :flash - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >flash AT>flash :flash - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >flash AT>flash :flash - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >flash AT>flash :flash - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>flash :ram_init - - .data : - { - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>flash :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack ORIGIN(ram) + LENGTH(ram) - __stack_size : - { - PROVIDE( _heap_end = . ); - . = __stack_size; - PROVIDE( _sp = . ); - } >ram AT>ram :ram -} diff --git a/fpga_spn/bsp/env/coreplexip-e31-arty/init.c b/fpga_spn/bsp/env/coreplexip-e31-arty/init.c deleted file mode 100644 index 1f8b679..0000000 --- a/fpga_spn/bsp/env/coreplexip-e31-arty/init.c +++ /dev/null @@ -1,122 +0,0 @@ -//See LICENSE for license details. -#include -#include -#include - -#include "platform.h" -#include "encoding.h" - -#define CPU_FREQ 65000000 -#define XSTR(x) #x -#define STR(x) XSTR(x) - -#ifndef VECT_IRQ - #define TRAP_ENTRY trap_entry -#else - #define TRAP_ENTRY vtrap_entry -#endif - -extern int main(int argc, char** argv); -extern void TRAP_ENTRY(); - -unsigned long get_cpu_freq() -{ - return CPU_FREQ; -} - -unsigned long get_timer_freq() -{ - return get_cpu_freq(); -} - -uint64_t get_timer_value() -{ -#if __riscv_xlen == 32 - while (1) { - uint32_t hi = read_csr(mcycleh); - uint32_t lo = read_csr(mcycle); - if (hi == read_csr(mcycleh)) - return ((uint64_t)hi << 32) | lo; - } -#else - return read_csr(mcycle); -#endif -} - -static void uart_init(size_t baud_rate) -{ - UART0_REG(UART_REG_DIV) = (get_cpu_freq() / 2) / baud_rate - 1; - UART0_REG(UART_REG_TXCTRL) |= UART_TXEN; -} - - -#ifdef USE_PLIC -extern void handle_m_ext_interrupt(); -#endif - -#ifdef USE_M_TIME -extern void handle_m_time_interrupt(); -#endif - -#ifdef USE_LOCAL_ISR -typedef void (*my_interrupt_function_ptr_t) (void); -extern my_interrupt_function_ptr_t localISR[]; -#endif - -#ifndef VECT_IRQ -uintptr_t handle_trap(uintptr_t mcause, uintptr_t epc) __attribute__((noinline)); -uintptr_t handle_trap(uintptr_t mcause, uintptr_t epc) -{ - if (0){ -#ifdef USE_PLIC - // External Machine-Level interrupt from PLIC - } else if ((mcause & MCAUSE_INT) && ((mcause & MCAUSE_CAUSE) == IRQ_M_EXT)) { - handle_m_ext_interrupt(); -#endif -#ifdef USE_M_TIME - // External Machine-Level interrupt from PLIC - } else if ((mcause & MCAUSE_INT) && ((mcause & MCAUSE_CAUSE) == IRQ_M_TIMER)){ - handle_m_time_interrupt(); -#endif -#ifdef USE_LOCAL_ISR - } else if (mcause & MCAUSE_INT) { - localISR[mcause & MCAUSE_CAUSE] (); -#endif - } - else { - write(1, "Unhandled Trap:\n", 16); - _exit(1 + mcause); - } - return epc; -} -#endif - -#ifdef USE_CLIC -void trap_entry(void) __attribute__((interrupt("SiFive-CLIC-preemptible"), aligned(64))); -void trap_entry(void) -{ - unsigned long mcause = read_csr(mcause); - unsigned long mepc = read_csr(mepc); - handle_trap(mcause, mepc); -} -#endif - -void _init() -{ - #ifndef NO_INIT - uart_init(115200); - - puts("core freq at " STR(CPU_FREQ) " Hz\n"); - -#ifdef USE_CLIC - write_csr(mtvec, ((unsigned long)&trap_entry | MTVEC_CLIC)); -#else - write_csr(mtvec, ((unsigned long)&TRAP_ENTRY | MTVEC_VECTORED)); -#endif - - #endif -} - -void _fini() -{ -} diff --git a/fpga_spn/bsp/env/coreplexip-e31-arty/openocd.cfg b/fpga_spn/bsp/env/coreplexip-e31-arty/openocd.cfg deleted file mode 100644 index 0481a72..0000000 --- a/fpga_spn/bsp/env/coreplexip-e31-arty/openocd.cfg +++ /dev/null @@ -1,31 +0,0 @@ -# JTAG adapter setup -adapter_khz 10000 - -interface ftdi -ftdi_device_desc "Olimex OpenOCD JTAG ARM-USB-TINY-H" -ftdi_vid_pid 0x15ba 0x002a - -ftdi_layout_init 0x0808 0x0a1b -ftdi_layout_signal nSRST -oe 0x0200 -#ftdi_layout_signal nTRST -data 0x0100 -oe 0x0100 -ftdi_layout_signal LED -data 0x0800 - -set _CHIPNAME riscv -jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x20000001 - -set _TARGETNAME $_CHIPNAME.cpu - -target create $_TARGETNAME.0 riscv -chain-position $_TARGETNAME -$_TARGETNAME.0 configure -work-area-phys 0x80000000 -work-area-size 10000 -work-area-backup 1 - -# Un-comment these two flash lines if you have a SPI flash and want to write -# it. -flash bank spi0 fespi 0x40000000 0 0 0 $_TARGETNAME.0 0x20004000 -init -if {[ info exists pulse_srst]} { - ftdi_set_signal nSRST 0 - ftdi_set_signal nSRST z -} -halt -#flash protect 0 64 last off -echo "Ready for Remote Connections" diff --git a/fpga_spn/bsp/env/coreplexip-e31-arty/platform.h b/fpga_spn/bsp/env/coreplexip-e31-arty/platform.h deleted file mode 100644 index 6fa79ea..0000000 --- a/fpga_spn/bsp/env/coreplexip-e31-arty/platform.h +++ /dev/null @@ -1,100 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_PLATFORM_H -#define _SIFIVE_PLATFORM_H - -// Some things missing from the official encoding.h - -#if __riscv_xlen == 32 -#define MCAUSE_INT 0x80000000UL -#define MCAUSE_CAUSE 0x000003FFUL -#else -#define MCAUSE_INT 0x8000000000000000UL -#define MCAUSE_CAUSE 0x00000000000003FFUL -#endif - -#ifdef VECT_IRQ - #define MTVEC_VECTORED 0x01 -#else - #define MTVEC_VECTORED 0x00 -#endif -#define MTVEC_CLIC 0x02 -#define IRQ_M_LOCAL 16 -#define MIP_MLIP(x) (1 << (IRQ_M_LOCAL + x)) - -#include "sifive/const.h" -#include "sifive/devices/clint.h" -#include "sifive/devices/gpio.h" -#include "sifive/devices/plic.h" -#include "sifive/devices/pwm.h" -#include "sifive/devices/spi.h" -#include "sifive/devices/uart.h" - -/**************************************************************************** - * Platform definitions - *****************************************************************************/ - -// Memory map -#define CLINT_CTRL_ADDR _AC(0x02000000,UL) -#define GPIO_CTRL_ADDR _AC(0x20002000,UL) -#define PLIC_CTRL_ADDR _AC(0x0C000000,UL) -#define PWM0_CTRL_ADDR _AC(0x20005000,UL) -#define RAM_MEM_ADDR _AC(0x80000000,UL) -#define RAM_MEM_SIZE _AC(0x10000,UL) -#define SPI0_CTRL_ADDR _AC(0x20004000,UL) -#define SPI0_MEM_ADDR _AC(0x40000000,UL) -#define SPI0_MEM_SIZE _AC(0x20000000,UL) -#define TESTBENCH_MEM_ADDR _AC(0x20000000,UL) -#define TESTBENCH_MEM_SIZE _AC(0x10000000,UL) -#define TRAPVEC_TABLE_CTRL_ADDR _AC(0x00001010,UL) -#define UART0_CTRL_ADDR _AC(0x20000000,UL) - -// IOF masks - -// Interrupt numbers -#define RESERVED_INT_BASE 0 -#define UART0_INT_BASE 1 -#define EXTERNAL_INT_BASE 2 -#define SPI0_INT_BASE 6 -#define GPIO_INT_BASE 7 -#define PWM0_INT_BASE 23 - -// Helper functions -#define _REG64(p, i) (*(volatile uint64_t *)((p) + (i))) -#define _REG32(p, i) (*(volatile uint32_t *)((p) + (i))) -#define _REG16(p, i) (*(volatile uint16_t *)((p) + (i))) -// Bulk set bits in `reg` to either 0 or 1. -// E.g. SET_BITS(MY_REG, 0x00000007, 0) would generate MY_REG &= ~0x7 -// E.g. SET_BITS(MY_REG, 0x00000007, 1) would generate MY_REG |= 0x7 -#define SET_BITS(reg, mask, value) if ((value) == 0) { (reg) &= ~(mask); } else { (reg) |= (mask); } -#define CLINT_REG(offset) _REG32(CLINT_CTRL_ADDR, offset) -#define GPIO_REG(offset) _REG32(GPIO_CTRL_ADDR, offset) -#define PLIC_REG(offset) _REG32(PLIC_CTRL_ADDR, offset) -#define PWM0_REG(offset) _REG32(PWM0_CTRL_ADDR, offset) -#define SPI0_REG(offset) _REG32(SPI0_CTRL_ADDR, offset) -#define TRAPVEC_TABLE_REG(offset) _REG32(TRAPVEC_TABLE_CTRL_ADDR, offset) -#define UART0_REG(offset) _REG32(UART0_CTRL_ADDR, offset) -#define CLINT_REG64(offset) _REG64(CLINT_CTRL_ADDR, offset) -#define GPIO_REG64(offset) _REG64(GPIO_CTRL_ADDR, offset) -#define PLIC_REG64(offset) _REG64(PLIC_CTRL_ADDR, offset) -#define PWM0_REG64(offset) _REG64(PWM0_CTRL_ADDR, offset) -#define SPI0_REG64(offset) _REG64(SPI0_CTRL_ADDR, offset) -#define TRAPVEC_TABLE_REG64(offset) _REG64(TRAPVEC_TABLE_CTRL_ADDR, offset) -#define UART0_REG64(offset) _REG64(UART0_CTRL_ADDR, offset) - -// Misc - -#define NUM_GPIO 16 - -#define PLIC_NUM_INTERRUPTS 28 -#define PLIC_NUM_PRIORITIES 7 - -#define HAS_BOARD_BUTTONS - -#include "coreplexip-arty.h" - -unsigned long get_cpu_freq(void); -unsigned long get_timer_freq(void); -uint64_t get_timer_value(void); - -#endif /* _SIFIVE_PLATFORM_H */ diff --git a/fpga_spn/bsp/env/coreplexip-e31-arty/scratchpad.lds b/fpga_spn/bsp/env/coreplexip-e31-arty/scratchpad.lds deleted file mode 100644 index 7887c13..0000000 --- a/fpga_spn/bsp/env/coreplexip-e31-arty/scratchpad.lds +++ /dev/null @@ -1,161 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K -} - -PHDRS -{ - ram PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 1K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >ram AT>ram :ram - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >ram AT>ram :ram - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >ram AT>ram :ram - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - .rodata : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - } >ram AT>ram :ram - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >ram AT>ram :ram - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >ram AT>ram :ram - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >ram AT>ram :ram - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >ram AT>ram :ram - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >ram AT>ram :ram - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >ram AT>ram :ram - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>ram :ram_init - - .data : - { - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>ram :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack : - { - . = ALIGN(8); - . += __stack_size; - PROVIDE( _sp = . ); - PROVIDE( _heap_end = . ); - } >ram AT>ram :ram -} diff --git a/fpga_spn/bsp/env/coreplexip-e31-arty/settings.mk b/fpga_spn/bsp/env/coreplexip-e31-arty/settings.mk deleted file mode 100644 index 230fccc..0000000 --- a/fpga_spn/bsp/env/coreplexip-e31-arty/settings.mk +++ /dev/null @@ -1,3 +0,0 @@ -# Describes the CPU on this board to the rest of the SDK. -RISCV_ARCH := rv32imac -RISCV_ABI := ilp32 diff --git a/fpga_spn/bsp/env/coreplexip-e51-arty/dhrystone.lds b/fpga_spn/bsp/env/coreplexip-e51-arty/dhrystone.lds deleted file mode 100644 index 8f6527b..0000000 --- a/fpga_spn/bsp/env/coreplexip-e51-arty/dhrystone.lds +++ /dev/null @@ -1,157 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - flash (rxai!w) : ORIGIN = 0x40400000, LENGTH = 512M - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K -} - -PHDRS -{ - flash PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 1K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >flash AT>flash :flash - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >flash AT>flash :flash - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >flash AT>flash :flash - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >flash AT>flash :flash - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >flash AT>flash :flash - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >flash AT>flash :flash - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >flash AT>flash :flash - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >flash AT>flash :flash - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >flash AT>flash :flash - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>flash :ram_init - - .data : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>flash :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack ORIGIN(ram) + LENGTH(ram) - __stack_size : - { - PROVIDE( _heap_end = . ); - . = __stack_size; - PROVIDE( _sp = . ); - } >ram AT>ram :ram -} diff --git a/fpga_spn/bsp/env/coreplexip-e51-arty/flash.lds b/fpga_spn/bsp/env/coreplexip-e51-arty/flash.lds deleted file mode 100644 index 590c5b6..0000000 --- a/fpga_spn/bsp/env/coreplexip-e51-arty/flash.lds +++ /dev/null @@ -1,161 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - flash (rxai!w) : ORIGIN = 0x40400000, LENGTH = 512M - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K -} - -PHDRS -{ - flash PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 2K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >flash AT>flash :flash - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >flash AT>flash :flash - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >flash AT>flash :flash - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - .rodata : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - } >flash AT>flash :flash - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >flash AT>flash :flash - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >flash AT>flash :flash - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >flash AT>flash :flash - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >flash AT>flash :flash - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >flash AT>flash :flash - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >flash AT>flash :flash - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>flash :ram_init - - .data : - { - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>flash :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack ORIGIN(ram) + LENGTH(ram) - __stack_size : - { - PROVIDE( _heap_end = . ); - . = __stack_size; - PROVIDE( _sp = . ); - } >ram AT>ram :ram -} diff --git a/fpga_spn/bsp/env/coreplexip-e51-arty/init.c b/fpga_spn/bsp/env/coreplexip-e51-arty/init.c deleted file mode 100644 index 1f8b679..0000000 --- a/fpga_spn/bsp/env/coreplexip-e51-arty/init.c +++ /dev/null @@ -1,122 +0,0 @@ -//See LICENSE for license details. -#include -#include -#include - -#include "platform.h" -#include "encoding.h" - -#define CPU_FREQ 65000000 -#define XSTR(x) #x -#define STR(x) XSTR(x) - -#ifndef VECT_IRQ - #define TRAP_ENTRY trap_entry -#else - #define TRAP_ENTRY vtrap_entry -#endif - -extern int main(int argc, char** argv); -extern void TRAP_ENTRY(); - -unsigned long get_cpu_freq() -{ - return CPU_FREQ; -} - -unsigned long get_timer_freq() -{ - return get_cpu_freq(); -} - -uint64_t get_timer_value() -{ -#if __riscv_xlen == 32 - while (1) { - uint32_t hi = read_csr(mcycleh); - uint32_t lo = read_csr(mcycle); - if (hi == read_csr(mcycleh)) - return ((uint64_t)hi << 32) | lo; - } -#else - return read_csr(mcycle); -#endif -} - -static void uart_init(size_t baud_rate) -{ - UART0_REG(UART_REG_DIV) = (get_cpu_freq() / 2) / baud_rate - 1; - UART0_REG(UART_REG_TXCTRL) |= UART_TXEN; -} - - -#ifdef USE_PLIC -extern void handle_m_ext_interrupt(); -#endif - -#ifdef USE_M_TIME -extern void handle_m_time_interrupt(); -#endif - -#ifdef USE_LOCAL_ISR -typedef void (*my_interrupt_function_ptr_t) (void); -extern my_interrupt_function_ptr_t localISR[]; -#endif - -#ifndef VECT_IRQ -uintptr_t handle_trap(uintptr_t mcause, uintptr_t epc) __attribute__((noinline)); -uintptr_t handle_trap(uintptr_t mcause, uintptr_t epc) -{ - if (0){ -#ifdef USE_PLIC - // External Machine-Level interrupt from PLIC - } else if ((mcause & MCAUSE_INT) && ((mcause & MCAUSE_CAUSE) == IRQ_M_EXT)) { - handle_m_ext_interrupt(); -#endif -#ifdef USE_M_TIME - // External Machine-Level interrupt from PLIC - } else if ((mcause & MCAUSE_INT) && ((mcause & MCAUSE_CAUSE) == IRQ_M_TIMER)){ - handle_m_time_interrupt(); -#endif -#ifdef USE_LOCAL_ISR - } else if (mcause & MCAUSE_INT) { - localISR[mcause & MCAUSE_CAUSE] (); -#endif - } - else { - write(1, "Unhandled Trap:\n", 16); - _exit(1 + mcause); - } - return epc; -} -#endif - -#ifdef USE_CLIC -void trap_entry(void) __attribute__((interrupt("SiFive-CLIC-preemptible"), aligned(64))); -void trap_entry(void) -{ - unsigned long mcause = read_csr(mcause); - unsigned long mepc = read_csr(mepc); - handle_trap(mcause, mepc); -} -#endif - -void _init() -{ - #ifndef NO_INIT - uart_init(115200); - - puts("core freq at " STR(CPU_FREQ) " Hz\n"); - -#ifdef USE_CLIC - write_csr(mtvec, ((unsigned long)&trap_entry | MTVEC_CLIC)); -#else - write_csr(mtvec, ((unsigned long)&TRAP_ENTRY | MTVEC_VECTORED)); -#endif - - #endif -} - -void _fini() -{ -} diff --git a/fpga_spn/bsp/env/coreplexip-e51-arty/openocd.cfg b/fpga_spn/bsp/env/coreplexip-e51-arty/openocd.cfg deleted file mode 100644 index 0481a72..0000000 --- a/fpga_spn/bsp/env/coreplexip-e51-arty/openocd.cfg +++ /dev/null @@ -1,31 +0,0 @@ -# JTAG adapter setup -adapter_khz 10000 - -interface ftdi -ftdi_device_desc "Olimex OpenOCD JTAG ARM-USB-TINY-H" -ftdi_vid_pid 0x15ba 0x002a - -ftdi_layout_init 0x0808 0x0a1b -ftdi_layout_signal nSRST -oe 0x0200 -#ftdi_layout_signal nTRST -data 0x0100 -oe 0x0100 -ftdi_layout_signal LED -data 0x0800 - -set _CHIPNAME riscv -jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x20000001 - -set _TARGETNAME $_CHIPNAME.cpu - -target create $_TARGETNAME.0 riscv -chain-position $_TARGETNAME -$_TARGETNAME.0 configure -work-area-phys 0x80000000 -work-area-size 10000 -work-area-backup 1 - -# Un-comment these two flash lines if you have a SPI flash and want to write -# it. -flash bank spi0 fespi 0x40000000 0 0 0 $_TARGETNAME.0 0x20004000 -init -if {[ info exists pulse_srst]} { - ftdi_set_signal nSRST 0 - ftdi_set_signal nSRST z -} -halt -#flash protect 0 64 last off -echo "Ready for Remote Connections" diff --git a/fpga_spn/bsp/env/coreplexip-e51-arty/platform.h b/fpga_spn/bsp/env/coreplexip-e51-arty/platform.h deleted file mode 100644 index 6fa79ea..0000000 --- a/fpga_spn/bsp/env/coreplexip-e51-arty/platform.h +++ /dev/null @@ -1,100 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_PLATFORM_H -#define _SIFIVE_PLATFORM_H - -// Some things missing from the official encoding.h - -#if __riscv_xlen == 32 -#define MCAUSE_INT 0x80000000UL -#define MCAUSE_CAUSE 0x000003FFUL -#else -#define MCAUSE_INT 0x8000000000000000UL -#define MCAUSE_CAUSE 0x00000000000003FFUL -#endif - -#ifdef VECT_IRQ - #define MTVEC_VECTORED 0x01 -#else - #define MTVEC_VECTORED 0x00 -#endif -#define MTVEC_CLIC 0x02 -#define IRQ_M_LOCAL 16 -#define MIP_MLIP(x) (1 << (IRQ_M_LOCAL + x)) - -#include "sifive/const.h" -#include "sifive/devices/clint.h" -#include "sifive/devices/gpio.h" -#include "sifive/devices/plic.h" -#include "sifive/devices/pwm.h" -#include "sifive/devices/spi.h" -#include "sifive/devices/uart.h" - -/**************************************************************************** - * Platform definitions - *****************************************************************************/ - -// Memory map -#define CLINT_CTRL_ADDR _AC(0x02000000,UL) -#define GPIO_CTRL_ADDR _AC(0x20002000,UL) -#define PLIC_CTRL_ADDR _AC(0x0C000000,UL) -#define PWM0_CTRL_ADDR _AC(0x20005000,UL) -#define RAM_MEM_ADDR _AC(0x80000000,UL) -#define RAM_MEM_SIZE _AC(0x10000,UL) -#define SPI0_CTRL_ADDR _AC(0x20004000,UL) -#define SPI0_MEM_ADDR _AC(0x40000000,UL) -#define SPI0_MEM_SIZE _AC(0x20000000,UL) -#define TESTBENCH_MEM_ADDR _AC(0x20000000,UL) -#define TESTBENCH_MEM_SIZE _AC(0x10000000,UL) -#define TRAPVEC_TABLE_CTRL_ADDR _AC(0x00001010,UL) -#define UART0_CTRL_ADDR _AC(0x20000000,UL) - -// IOF masks - -// Interrupt numbers -#define RESERVED_INT_BASE 0 -#define UART0_INT_BASE 1 -#define EXTERNAL_INT_BASE 2 -#define SPI0_INT_BASE 6 -#define GPIO_INT_BASE 7 -#define PWM0_INT_BASE 23 - -// Helper functions -#define _REG64(p, i) (*(volatile uint64_t *)((p) + (i))) -#define _REG32(p, i) (*(volatile uint32_t *)((p) + (i))) -#define _REG16(p, i) (*(volatile uint16_t *)((p) + (i))) -// Bulk set bits in `reg` to either 0 or 1. -// E.g. SET_BITS(MY_REG, 0x00000007, 0) would generate MY_REG &= ~0x7 -// E.g. SET_BITS(MY_REG, 0x00000007, 1) would generate MY_REG |= 0x7 -#define SET_BITS(reg, mask, value) if ((value) == 0) { (reg) &= ~(mask); } else { (reg) |= (mask); } -#define CLINT_REG(offset) _REG32(CLINT_CTRL_ADDR, offset) -#define GPIO_REG(offset) _REG32(GPIO_CTRL_ADDR, offset) -#define PLIC_REG(offset) _REG32(PLIC_CTRL_ADDR, offset) -#define PWM0_REG(offset) _REG32(PWM0_CTRL_ADDR, offset) -#define SPI0_REG(offset) _REG32(SPI0_CTRL_ADDR, offset) -#define TRAPVEC_TABLE_REG(offset) _REG32(TRAPVEC_TABLE_CTRL_ADDR, offset) -#define UART0_REG(offset) _REG32(UART0_CTRL_ADDR, offset) -#define CLINT_REG64(offset) _REG64(CLINT_CTRL_ADDR, offset) -#define GPIO_REG64(offset) _REG64(GPIO_CTRL_ADDR, offset) -#define PLIC_REG64(offset) _REG64(PLIC_CTRL_ADDR, offset) -#define PWM0_REG64(offset) _REG64(PWM0_CTRL_ADDR, offset) -#define SPI0_REG64(offset) _REG64(SPI0_CTRL_ADDR, offset) -#define TRAPVEC_TABLE_REG64(offset) _REG64(TRAPVEC_TABLE_CTRL_ADDR, offset) -#define UART0_REG64(offset) _REG64(UART0_CTRL_ADDR, offset) - -// Misc - -#define NUM_GPIO 16 - -#define PLIC_NUM_INTERRUPTS 28 -#define PLIC_NUM_PRIORITIES 7 - -#define HAS_BOARD_BUTTONS - -#include "coreplexip-arty.h" - -unsigned long get_cpu_freq(void); -unsigned long get_timer_freq(void); -uint64_t get_timer_value(void); - -#endif /* _SIFIVE_PLATFORM_H */ diff --git a/fpga_spn/bsp/env/coreplexip-e51-arty/scratchpad.lds b/fpga_spn/bsp/env/coreplexip-e51-arty/scratchpad.lds deleted file mode 100644 index 7887c13..0000000 --- a/fpga_spn/bsp/env/coreplexip-e51-arty/scratchpad.lds +++ /dev/null @@ -1,161 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K -} - -PHDRS -{ - ram PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 1K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >ram AT>ram :ram - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >ram AT>ram :ram - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >ram AT>ram :ram - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - .rodata : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - } >ram AT>ram :ram - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >ram AT>ram :ram - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >ram AT>ram :ram - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >ram AT>ram :ram - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >ram AT>ram :ram - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >ram AT>ram :ram - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >ram AT>ram :ram - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>ram :ram_init - - .data : - { - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>ram :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack : - { - . = ALIGN(8); - . += __stack_size; - PROVIDE( _sp = . ); - PROVIDE( _heap_end = . ); - } >ram AT>ram :ram -} diff --git a/fpga_spn/bsp/env/coreplexip-e51-arty/settings.mk b/fpga_spn/bsp/env/coreplexip-e51-arty/settings.mk deleted file mode 100644 index 96aea84..0000000 --- a/fpga_spn/bsp/env/coreplexip-e51-arty/settings.mk +++ /dev/null @@ -1,3 +0,0 @@ -# Describes the CPU on this board to the rest of the SDK. -RISCV_ARCH := rv64imac -RISCV_ABI := lp64 diff --git a/fpga_spn/bsp/env/encoding.h b/fpga_spn/bsp/env/encoding.h deleted file mode 100644 index 35e0f9f..0000000 --- a/fpga_spn/bsp/env/encoding.h +++ /dev/null @@ -1,1313 +0,0 @@ -// See LICENSE for license details. - -#ifndef RISCV_CSR_ENCODING_H -#define RISCV_CSR_ENCODING_H - -#define MSTATUS_UIE 0x00000001 -#define MSTATUS_SIE 0x00000002 -#define MSTATUS_HIE 0x00000004 -#define MSTATUS_MIE 0x00000008 -#define MSTATUS_UPIE 0x00000010 -#define MSTATUS_SPIE 0x00000020 -#define MSTATUS_HPIE 0x00000040 -#define MSTATUS_MPIE 0x00000080 -#define MSTATUS_SPP 0x00000100 -#define MSTATUS_HPP 0x00000600 -#define MSTATUS_MPP 0x00001800 -#define MSTATUS_FS 0x00006000 -#define MSTATUS_XS 0x00018000 -#define MSTATUS_MPRV 0x00020000 -#define MSTATUS_PUM 0x00040000 -#define MSTATUS_MXR 0x00080000 -#define MSTATUS_VM 0x1F000000 -#define MSTATUS32_SD 0x80000000 -#define MSTATUS64_SD 0x8000000000000000 - -#define SSTATUS_UIE 0x00000001 -#define SSTATUS_SIE 0x00000002 -#define SSTATUS_UPIE 0x00000010 -#define SSTATUS_SPIE 0x00000020 -#define SSTATUS_SPP 0x00000100 -#define SSTATUS_FS 0x00006000 -#define SSTATUS_XS 0x00018000 -#define SSTATUS_PUM 0x00040000 -#define SSTATUS32_SD 0x80000000 -#define SSTATUS64_SD 0x8000000000000000 - -#define DCSR_XDEBUGVER (3U<<30) -#define DCSR_NDRESET (1<<29) -#define DCSR_FULLRESET (1<<28) -#define DCSR_EBREAKM (1<<15) -#define DCSR_EBREAKH (1<<14) -#define DCSR_EBREAKS (1<<13) -#define DCSR_EBREAKU (1<<12) -#define DCSR_STOPCYCLE (1<<10) -#define DCSR_STOPTIME (1<<9) -#define DCSR_CAUSE (7<<6) -#define DCSR_DEBUGINT (1<<5) -#define DCSR_HALT (1<<3) -#define DCSR_STEP (1<<2) -#define DCSR_PRV (3<<0) - -#define DCSR_CAUSE_NONE 0 -#define DCSR_CAUSE_SWBP 1 -#define DCSR_CAUSE_HWBP 2 -#define DCSR_CAUSE_DEBUGINT 3 -#define DCSR_CAUSE_STEP 4 -#define DCSR_CAUSE_HALT 5 - -#define MCONTROL_TYPE(xlen) (0xfULL<<((xlen)-4)) -#define MCONTROL_DMODE(xlen) (1ULL<<((xlen)-5)) -#define MCONTROL_MASKMAX(xlen) (0x3fULL<<((xlen)-11)) - -#define MCONTROL_SELECT (1<<19) -#define MCONTROL_TIMING (1<<18) -#define MCONTROL_ACTION (0x3f<<12) -#define MCONTROL_CHAIN (1<<11) -#define MCONTROL_MATCH (0xf<<7) -#define MCONTROL_M (1<<6) -#define MCONTROL_H (1<<5) -#define MCONTROL_S (1<<4) -#define MCONTROL_U (1<<3) -#define MCONTROL_EXECUTE (1<<2) -#define MCONTROL_STORE (1<<1) -#define MCONTROL_LOAD (1<<0) - -#define MCONTROL_TYPE_NONE 0 -#define MCONTROL_TYPE_MATCH 2 - -#define MCONTROL_ACTION_DEBUG_EXCEPTION 0 -#define MCONTROL_ACTION_DEBUG_MODE 1 -#define MCONTROL_ACTION_TRACE_START 2 -#define MCONTROL_ACTION_TRACE_STOP 3 -#define MCONTROL_ACTION_TRACE_EMIT 4 - -#define MCONTROL_MATCH_EQUAL 0 -#define MCONTROL_MATCH_NAPOT 1 -#define MCONTROL_MATCH_GE 2 -#define MCONTROL_MATCH_LT 3 -#define MCONTROL_MATCH_MASK_LOW 4 -#define MCONTROL_MATCH_MASK_HIGH 5 - -#define MIP_SSIP (1 << IRQ_S_SOFT) -#define MIP_HSIP (1 << IRQ_H_SOFT) -#define MIP_MSIP (1 << IRQ_M_SOFT) -#define MIP_STIP (1 << IRQ_S_TIMER) -#define MIP_HTIP (1 << IRQ_H_TIMER) -#define MIP_MTIP (1 << IRQ_M_TIMER) -#define MIP_SEIP (1 << IRQ_S_EXT) -#define MIP_HEIP (1 << IRQ_H_EXT) -#define MIP_MEIP (1 << IRQ_M_EXT) - -#define SIP_SSIP MIP_SSIP -#define SIP_STIP MIP_STIP - -#define PRV_U 0 -#define PRV_S 1 -#define PRV_H 2 -#define PRV_M 3 - -#define VM_MBARE 0 -#define VM_MBB 1 -#define VM_MBBID 2 -#define VM_SV32 8 -#define VM_SV39 9 -#define VM_SV48 10 - -#define IRQ_S_SOFT 1 -#define IRQ_H_SOFT 2 -#define IRQ_M_SOFT 3 -#define IRQ_S_TIMER 5 -#define IRQ_H_TIMER 6 -#define IRQ_M_TIMER 7 -#define IRQ_S_EXT 9 -#define IRQ_H_EXT 10 -#define IRQ_M_EXT 11 -#define IRQ_COP 12 -#define IRQ_HOST 13 - -#define DEFAULT_RSTVEC 0x00001000 -#define DEFAULT_NMIVEC 0x00001004 -#define DEFAULT_MTVEC 0x00001010 -#define CONFIG_STRING_ADDR 0x0000100C -#define EXT_IO_BASE 0x40000000 -#define DRAM_BASE 0x80000000 - -// page table entry (PTE) fields -#define PTE_V 0x001 // Valid -#define PTE_R 0x002 // Read -#define PTE_W 0x004 // Write -#define PTE_X 0x008 // Execute -#define PTE_U 0x010 // User -#define PTE_G 0x020 // Global -#define PTE_A 0x040 // Accessed -#define PTE_D 0x080 // Dirty -#define PTE_SOFT 0x300 // Reserved for Software - -#define PTE_PPN_SHIFT 10 - -#define PTE_TABLE(PTE) (((PTE) & (PTE_V | PTE_R | PTE_W | PTE_X)) == PTE_V) - -#ifdef __riscv - -#ifdef __riscv64 -# define MSTATUS_SD MSTATUS64_SD -# define SSTATUS_SD SSTATUS64_SD -# define RISCV_PGLEVEL_BITS 9 -#else -# define MSTATUS_SD MSTATUS32_SD -# define SSTATUS_SD SSTATUS32_SD -# define RISCV_PGLEVEL_BITS 10 -#endif -#define RISCV_PGSHIFT 12 -#define RISCV_PGSIZE (1 << RISCV_PGSHIFT) - -#ifndef __ASSEMBLER__ - -#ifdef __GNUC__ - -#define read_csr(reg) ({ unsigned long __tmp; \ - asm volatile ("csrr %0, " #reg : "=r"(__tmp)); \ - __tmp; }) - -#define write_csr(reg, val) ({ \ - if (__builtin_constant_p(val) && (unsigned long)(val) < 32) \ - asm volatile ("csrw " #reg ", %0" :: "i"(val)); \ - else \ - asm volatile ("csrw " #reg ", %0" :: "r"(val)); }) - -#define swap_csr(reg, val) ({ unsigned long __tmp; \ - if (__builtin_constant_p(val) && (unsigned long)(val) < 32) \ - asm volatile ("csrrw %0, " #reg ", %1" : "=r"(__tmp) : "i"(val)); \ - else \ - asm volatile ("csrrw %0, " #reg ", %1" : "=r"(__tmp) : "r"(val)); \ - __tmp; }) - -#define set_csr(reg, bit) ({ unsigned long __tmp; \ - if (__builtin_constant_p(bit) && (unsigned long)(bit) < 32) \ - asm volatile ("csrrs %0, " #reg ", %1" : "=r"(__tmp) : "i"(bit)); \ - else \ - asm volatile ("csrrs %0, " #reg ", %1" : "=r"(__tmp) : "r"(bit)); \ - __tmp; }) - -#define clear_csr(reg, bit) ({ unsigned long __tmp; \ - if (__builtin_constant_p(bit) && (unsigned long)(bit) < 32) \ - asm volatile ("csrrc %0, " #reg ", %1" : "=r"(__tmp) : "i"(bit)); \ - else \ - asm volatile ("csrrc %0, " #reg ", %1" : "=r"(__tmp) : "r"(bit)); \ - __tmp; }) - -#define rdtime() read_csr(time) -#define rdcycle() read_csr(cycle) -#define rdinstret() read_csr(instret) - -#endif - -#endif - -#endif - -#endif -/* Automatically generated by parse-opcodes */ -#ifndef RISCV_ENCODING_H -#define RISCV_ENCODING_H -#define MATCH_BEQ 0x63 -#define MASK_BEQ 0x707f -#define MATCH_BNE 0x1063 -#define MASK_BNE 0x707f -#define MATCH_BLT 0x4063 -#define MASK_BLT 0x707f -#define MATCH_BGE 0x5063 -#define MASK_BGE 0x707f -#define MATCH_BLTU 0x6063 -#define MASK_BLTU 0x707f -#define MATCH_BGEU 0x7063 -#define MASK_BGEU 0x707f -#define MATCH_JALR 0x67 -#define MASK_JALR 0x707f -#define MATCH_JAL 0x6f -#define MASK_JAL 0x7f -#define MATCH_LUI 0x37 -#define MASK_LUI 0x7f -#define MATCH_AUIPC 0x17 -#define MASK_AUIPC 0x7f -#define MATCH_ADDI 0x13 -#define MASK_ADDI 0x707f -#define MATCH_SLLI 0x1013 -#define MASK_SLLI 0xfc00707f -#define MATCH_SLTI 0x2013 -#define MASK_SLTI 0x707f -#define MATCH_SLTIU 0x3013 -#define MASK_SLTIU 0x707f -#define MATCH_XORI 0x4013 -#define MASK_XORI 0x707f -#define MATCH_SRLI 0x5013 -#define MASK_SRLI 0xfc00707f -#define MATCH_SRAI 0x40005013 -#define MASK_SRAI 0xfc00707f -#define MATCH_ORI 0x6013 -#define MASK_ORI 0x707f -#define MATCH_ANDI 0x7013 -#define MASK_ANDI 0x707f -#define MATCH_ADD 0x33 -#define MASK_ADD 0xfe00707f -#define MATCH_SUB 0x40000033 -#define MASK_SUB 0xfe00707f -#define MATCH_SLL 0x1033 -#define MASK_SLL 0xfe00707f -#define MATCH_SLT 0x2033 -#define MASK_SLT 0xfe00707f -#define MATCH_SLTU 0x3033 -#define MASK_SLTU 0xfe00707f -#define MATCH_XOR 0x4033 -#define MASK_XOR 0xfe00707f -#define MATCH_SRL 0x5033 -#define MASK_SRL 0xfe00707f -#define MATCH_SRA 0x40005033 -#define MASK_SRA 0xfe00707f -#define MATCH_OR 0x6033 -#define MASK_OR 0xfe00707f -#define MATCH_AND 0x7033 -#define MASK_AND 0xfe00707f -#define MATCH_ADDIW 0x1b -#define MASK_ADDIW 0x707f -#define MATCH_SLLIW 0x101b -#define MASK_SLLIW 0xfe00707f -#define MATCH_SRLIW 0x501b -#define MASK_SRLIW 0xfe00707f -#define MATCH_SRAIW 0x4000501b -#define MASK_SRAIW 0xfe00707f -#define MATCH_ADDW 0x3b -#define MASK_ADDW 0xfe00707f -#define MATCH_SUBW 0x4000003b -#define MASK_SUBW 0xfe00707f -#define MATCH_SLLW 0x103b -#define MASK_SLLW 0xfe00707f -#define MATCH_SRLW 0x503b -#define MASK_SRLW 0xfe00707f -#define MATCH_SRAW 0x4000503b -#define MASK_SRAW 0xfe00707f -#define MATCH_LB 0x3 -#define MASK_LB 0x707f -#define MATCH_LH 0x1003 -#define MASK_LH 0x707f -#define MATCH_LW 0x2003 -#define MASK_LW 0x707f -#define MATCH_LD 0x3003 -#define MASK_LD 0x707f -#define MATCH_LBU 0x4003 -#define MASK_LBU 0x707f -#define MATCH_LHU 0x5003 -#define MASK_LHU 0x707f -#define MATCH_LWU 0x6003 -#define MASK_LWU 0x707f -#define MATCH_SB 0x23 -#define MASK_SB 0x707f -#define MATCH_SH 0x1023 -#define MASK_SH 0x707f -#define MATCH_SW 0x2023 -#define MASK_SW 0x707f -#define MATCH_SD 0x3023 -#define MASK_SD 0x707f -#define MATCH_FENCE 0xf -#define MASK_FENCE 0x707f -#define MATCH_FENCE_I 0x100f -#define MASK_FENCE_I 0x707f -#define MATCH_MUL 0x2000033 -#define MASK_MUL 0xfe00707f -#define MATCH_MULH 0x2001033 -#define MASK_MULH 0xfe00707f -#define MATCH_MULHSU 0x2002033 -#define MASK_MULHSU 0xfe00707f -#define MATCH_MULHU 0x2003033 -#define MASK_MULHU 0xfe00707f -#define MATCH_DIV 0x2004033 -#define MASK_DIV 0xfe00707f -#define MATCH_DIVU 0x2005033 -#define MASK_DIVU 0xfe00707f -#define MATCH_REM 0x2006033 -#define MASK_REM 0xfe00707f -#define MATCH_REMU 0x2007033 -#define MASK_REMU 0xfe00707f -#define MATCH_MULW 0x200003b -#define MASK_MULW 0xfe00707f -#define MATCH_DIVW 0x200403b -#define MASK_DIVW 0xfe00707f -#define MATCH_DIVUW 0x200503b -#define MASK_DIVUW 0xfe00707f -#define MATCH_REMW 0x200603b -#define MASK_REMW 0xfe00707f -#define MATCH_REMUW 0x200703b -#define MASK_REMUW 0xfe00707f -#define MATCH_AMOADD_W 0x202f -#define MASK_AMOADD_W 0xf800707f -#define MATCH_AMOXOR_W 0x2000202f -#define MASK_AMOXOR_W 0xf800707f -#define MATCH_AMOOR_W 0x4000202f -#define MASK_AMOOR_W 0xf800707f -#define MATCH_AMOAND_W 0x6000202f -#define MASK_AMOAND_W 0xf800707f -#define MATCH_AMOMIN_W 0x8000202f -#define MASK_AMOMIN_W 0xf800707f -#define MATCH_AMOMAX_W 0xa000202f -#define MASK_AMOMAX_W 0xf800707f -#define MATCH_AMOMINU_W 0xc000202f -#define MASK_AMOMINU_W 0xf800707f -#define MATCH_AMOMAXU_W 0xe000202f -#define MASK_AMOMAXU_W 0xf800707f -#define MATCH_AMOSWAP_W 0x800202f -#define MASK_AMOSWAP_W 0xf800707f -#define MATCH_LR_W 0x1000202f -#define MASK_LR_W 0xf9f0707f -#define MATCH_SC_W 0x1800202f -#define MASK_SC_W 0xf800707f -#define MATCH_AMOADD_D 0x302f -#define MASK_AMOADD_D 0xf800707f -#define MATCH_AMOXOR_D 0x2000302f -#define MASK_AMOXOR_D 0xf800707f -#define MATCH_AMOOR_D 0x4000302f -#define MASK_AMOOR_D 0xf800707f -#define MATCH_AMOAND_D 0x6000302f -#define MASK_AMOAND_D 0xf800707f -#define MATCH_AMOMIN_D 0x8000302f -#define MASK_AMOMIN_D 0xf800707f -#define MATCH_AMOMAX_D 0xa000302f -#define MASK_AMOMAX_D 0xf800707f -#define MATCH_AMOMINU_D 0xc000302f -#define MASK_AMOMINU_D 0xf800707f -#define MATCH_AMOMAXU_D 0xe000302f -#define MASK_AMOMAXU_D 0xf800707f -#define MATCH_AMOSWAP_D 0x800302f -#define MASK_AMOSWAP_D 0xf800707f -#define MATCH_LR_D 0x1000302f -#define MASK_LR_D 0xf9f0707f -#define MATCH_SC_D 0x1800302f -#define MASK_SC_D 0xf800707f -#define MATCH_ECALL 0x73 -#define MASK_ECALL 0xffffffff -#define MATCH_EBREAK 0x100073 -#define MASK_EBREAK 0xffffffff -#define MATCH_URET 0x200073 -#define MASK_URET 0xffffffff -#define MATCH_SRET 0x10200073 -#define MASK_SRET 0xffffffff -#define MATCH_HRET 0x20200073 -#define MASK_HRET 0xffffffff -#define MATCH_MRET 0x30200073 -#define MASK_MRET 0xffffffff -#define MATCH_DRET 0x7b200073 -#define MASK_DRET 0xffffffff -#define MATCH_SFENCE_VM 0x10400073 -#define MASK_SFENCE_VM 0xfff07fff -#define MATCH_WFI 0x10500073 -#define MASK_WFI 0xffffffff -#define MATCH_CSRRW 0x1073 -#define MASK_CSRRW 0x707f -#define MATCH_CSRRS 0x2073 -#define MASK_CSRRS 0x707f -#define MATCH_CSRRC 0x3073 -#define MASK_CSRRC 0x707f -#define MATCH_CSRRWI 0x5073 -#define MASK_CSRRWI 0x707f -#define MATCH_CSRRSI 0x6073 -#define MASK_CSRRSI 0x707f -#define MATCH_CSRRCI 0x7073 -#define MASK_CSRRCI 0x707f -#define MATCH_FADD_S 0x53 -#define MASK_FADD_S 0xfe00007f -#define MATCH_FSUB_S 0x8000053 -#define MASK_FSUB_S 0xfe00007f -#define MATCH_FMUL_S 0x10000053 -#define MASK_FMUL_S 0xfe00007f -#define MATCH_FDIV_S 0x18000053 -#define MASK_FDIV_S 0xfe00007f -#define MATCH_FSGNJ_S 0x20000053 -#define MASK_FSGNJ_S 0xfe00707f -#define MATCH_FSGNJN_S 0x20001053 -#define MASK_FSGNJN_S 0xfe00707f -#define MATCH_FSGNJX_S 0x20002053 -#define MASK_FSGNJX_S 0xfe00707f -#define MATCH_FMIN_S 0x28000053 -#define MASK_FMIN_S 0xfe00707f -#define MATCH_FMAX_S 0x28001053 -#define MASK_FMAX_S 0xfe00707f -#define MATCH_FSQRT_S 0x58000053 -#define MASK_FSQRT_S 0xfff0007f -#define MATCH_FADD_D 0x2000053 -#define MASK_FADD_D 0xfe00007f -#define MATCH_FSUB_D 0xa000053 -#define MASK_FSUB_D 0xfe00007f -#define MATCH_FMUL_D 0x12000053 -#define MASK_FMUL_D 0xfe00007f -#define MATCH_FDIV_D 0x1a000053 -#define MASK_FDIV_D 0xfe00007f -#define MATCH_FSGNJ_D 0x22000053 -#define MASK_FSGNJ_D 0xfe00707f -#define MATCH_FSGNJN_D 0x22001053 -#define MASK_FSGNJN_D 0xfe00707f -#define MATCH_FSGNJX_D 0x22002053 -#define MASK_FSGNJX_D 0xfe00707f -#define MATCH_FMIN_D 0x2a000053 -#define MASK_FMIN_D 0xfe00707f -#define MATCH_FMAX_D 0x2a001053 -#define MASK_FMAX_D 0xfe00707f -#define MATCH_FCVT_S_D 0x40100053 -#define MASK_FCVT_S_D 0xfff0007f -#define MATCH_FCVT_D_S 0x42000053 -#define MASK_FCVT_D_S 0xfff0007f -#define MATCH_FSQRT_D 0x5a000053 -#define MASK_FSQRT_D 0xfff0007f -#define MATCH_FLE_S 0xa0000053 -#define MASK_FLE_S 0xfe00707f -#define MATCH_FLT_S 0xa0001053 -#define MASK_FLT_S 0xfe00707f -#define MATCH_FEQ_S 0xa0002053 -#define MASK_FEQ_S 0xfe00707f -#define MATCH_FLE_D 0xa2000053 -#define MASK_FLE_D 0xfe00707f -#define MATCH_FLT_D 0xa2001053 -#define MASK_FLT_D 0xfe00707f -#define MATCH_FEQ_D 0xa2002053 -#define MASK_FEQ_D 0xfe00707f -#define MATCH_FCVT_W_S 0xc0000053 -#define MASK_FCVT_W_S 0xfff0007f -#define MATCH_FCVT_WU_S 0xc0100053 -#define MASK_FCVT_WU_S 0xfff0007f -#define MATCH_FCVT_L_S 0xc0200053 -#define MASK_FCVT_L_S 0xfff0007f -#define MATCH_FCVT_LU_S 0xc0300053 -#define MASK_FCVT_LU_S 0xfff0007f -#define MATCH_FMV_X_S 0xe0000053 -#define MASK_FMV_X_S 0xfff0707f -#define MATCH_FCLASS_S 0xe0001053 -#define MASK_FCLASS_S 0xfff0707f -#define MATCH_FCVT_W_D 0xc2000053 -#define MASK_FCVT_W_D 0xfff0007f -#define MATCH_FCVT_WU_D 0xc2100053 -#define MASK_FCVT_WU_D 0xfff0007f -#define MATCH_FCVT_L_D 0xc2200053 -#define MASK_FCVT_L_D 0xfff0007f -#define MATCH_FCVT_LU_D 0xc2300053 -#define MASK_FCVT_LU_D 0xfff0007f -#define MATCH_FMV_X_D 0xe2000053 -#define MASK_FMV_X_D 0xfff0707f -#define MATCH_FCLASS_D 0xe2001053 -#define MASK_FCLASS_D 0xfff0707f -#define MATCH_FCVT_S_W 0xd0000053 -#define MASK_FCVT_S_W 0xfff0007f -#define MATCH_FCVT_S_WU 0xd0100053 -#define MASK_FCVT_S_WU 0xfff0007f -#define MATCH_FCVT_S_L 0xd0200053 -#define MASK_FCVT_S_L 0xfff0007f -#define MATCH_FCVT_S_LU 0xd0300053 -#define MASK_FCVT_S_LU 0xfff0007f -#define MATCH_FMV_S_X 0xf0000053 -#define MASK_FMV_S_X 0xfff0707f -#define MATCH_FCVT_D_W 0xd2000053 -#define MASK_FCVT_D_W 0xfff0007f -#define MATCH_FCVT_D_WU 0xd2100053 -#define MASK_FCVT_D_WU 0xfff0007f -#define MATCH_FCVT_D_L 0xd2200053 -#define MASK_FCVT_D_L 0xfff0007f -#define MATCH_FCVT_D_LU 0xd2300053 -#define MASK_FCVT_D_LU 0xfff0007f -#define MATCH_FMV_D_X 0xf2000053 -#define MASK_FMV_D_X 0xfff0707f -#define MATCH_FLW 0x2007 -#define MASK_FLW 0x707f -#define MATCH_FLD 0x3007 -#define MASK_FLD 0x707f -#define MATCH_FSW 0x2027 -#define MASK_FSW 0x707f -#define MATCH_FSD 0x3027 -#define MASK_FSD 0x707f -#define MATCH_FMADD_S 0x43 -#define MASK_FMADD_S 0x600007f -#define MATCH_FMSUB_S 0x47 -#define MASK_FMSUB_S 0x600007f -#define MATCH_FNMSUB_S 0x4b -#define MASK_FNMSUB_S 0x600007f -#define MATCH_FNMADD_S 0x4f -#define MASK_FNMADD_S 0x600007f -#define MATCH_FMADD_D 0x2000043 -#define MASK_FMADD_D 0x600007f -#define MATCH_FMSUB_D 0x2000047 -#define MASK_FMSUB_D 0x600007f -#define MATCH_FNMSUB_D 0x200004b -#define MASK_FNMSUB_D 0x600007f -#define MATCH_FNMADD_D 0x200004f -#define MASK_FNMADD_D 0x600007f -#define MATCH_C_NOP 0x1 -#define MASK_C_NOP 0xffff -#define MATCH_C_ADDI16SP 0x6101 -#define MASK_C_ADDI16SP 0xef83 -#define MATCH_C_JR 0x8002 -#define MASK_C_JR 0xf07f -#define MATCH_C_JALR 0x9002 -#define MASK_C_JALR 0xf07f -#define MATCH_C_EBREAK 0x9002 -#define MASK_C_EBREAK 0xffff -#define MATCH_C_LD 0x6000 -#define MASK_C_LD 0xe003 -#define MATCH_C_SD 0xe000 -#define MASK_C_SD 0xe003 -#define MATCH_C_ADDIW 0x2001 -#define MASK_C_ADDIW 0xe003 -#define MATCH_C_LDSP 0x6002 -#define MASK_C_LDSP 0xe003 -#define MATCH_C_SDSP 0xe002 -#define MASK_C_SDSP 0xe003 -#define MATCH_C_ADDI4SPN 0x0 -#define MASK_C_ADDI4SPN 0xe003 -#define MATCH_C_FLD 0x2000 -#define MASK_C_FLD 0xe003 -#define MATCH_C_LW 0x4000 -#define MASK_C_LW 0xe003 -#define MATCH_C_FLW 0x6000 -#define MASK_C_FLW 0xe003 -#define MATCH_C_FSD 0xa000 -#define MASK_C_FSD 0xe003 -#define MATCH_C_SW 0xc000 -#define MASK_C_SW 0xe003 -#define MATCH_C_FSW 0xe000 -#define MASK_C_FSW 0xe003 -#define MATCH_C_ADDI 0x1 -#define MASK_C_ADDI 0xe003 -#define MATCH_C_JAL 0x2001 -#define MASK_C_JAL 0xe003 -#define MATCH_C_LI 0x4001 -#define MASK_C_LI 0xe003 -#define MATCH_C_LUI 0x6001 -#define MASK_C_LUI 0xe003 -#define MATCH_C_SRLI 0x8001 -#define MASK_C_SRLI 0xec03 -#define MATCH_C_SRAI 0x8401 -#define MASK_C_SRAI 0xec03 -#define MATCH_C_ANDI 0x8801 -#define MASK_C_ANDI 0xec03 -#define MATCH_C_SUB 0x8c01 -#define MASK_C_SUB 0xfc63 -#define MATCH_C_XOR 0x8c21 -#define MASK_C_XOR 0xfc63 -#define MATCH_C_OR 0x8c41 -#define MASK_C_OR 0xfc63 -#define MATCH_C_AND 0x8c61 -#define MASK_C_AND 0xfc63 -#define MATCH_C_SUBW 0x9c01 -#define MASK_C_SUBW 0xfc63 -#define MATCH_C_ADDW 0x9c21 -#define MASK_C_ADDW 0xfc63 -#define MATCH_C_J 0xa001 -#define MASK_C_J 0xe003 -#define MATCH_C_BEQZ 0xc001 -#define MASK_C_BEQZ 0xe003 -#define MATCH_C_BNEZ 0xe001 -#define MASK_C_BNEZ 0xe003 -#define MATCH_C_SLLI 0x2 -#define MASK_C_SLLI 0xe003 -#define MATCH_C_FLDSP 0x2002 -#define MASK_C_FLDSP 0xe003 -#define MATCH_C_LWSP 0x4002 -#define MASK_C_LWSP 0xe003 -#define MATCH_C_FLWSP 0x6002 -#define MASK_C_FLWSP 0xe003 -#define MATCH_C_MV 0x8002 -#define MASK_C_MV 0xf003 -#define MATCH_C_ADD 0x9002 -#define MASK_C_ADD 0xf003 -#define MATCH_C_FSDSP 0xa002 -#define MASK_C_FSDSP 0xe003 -#define MATCH_C_SWSP 0xc002 -#define MASK_C_SWSP 0xe003 -#define MATCH_C_FSWSP 0xe002 -#define MASK_C_FSWSP 0xe003 -#define MATCH_CUSTOM0 0xb -#define MASK_CUSTOM0 0x707f -#define MATCH_CUSTOM0_RS1 0x200b -#define MASK_CUSTOM0_RS1 0x707f -#define MATCH_CUSTOM0_RS1_RS2 0x300b -#define MASK_CUSTOM0_RS1_RS2 0x707f -#define MATCH_CUSTOM0_RD 0x400b -#define MASK_CUSTOM0_RD 0x707f -#define MATCH_CUSTOM0_RD_RS1 0x600b -#define MASK_CUSTOM0_RD_RS1 0x707f -#define MATCH_CUSTOM0_RD_RS1_RS2 0x700b -#define MASK_CUSTOM0_RD_RS1_RS2 0x707f -#define MATCH_CUSTOM1 0x2b -#define MASK_CUSTOM1 0x707f -#define MATCH_CUSTOM1_RS1 0x202b -#define MASK_CUSTOM1_RS1 0x707f -#define MATCH_CUSTOM1_RS1_RS2 0x302b -#define MASK_CUSTOM1_RS1_RS2 0x707f -#define MATCH_CUSTOM1_RD 0x402b -#define MASK_CUSTOM1_RD 0x707f -#define MATCH_CUSTOM1_RD_RS1 0x602b -#define MASK_CUSTOM1_RD_RS1 0x707f -#define MATCH_CUSTOM1_RD_RS1_RS2 0x702b -#define MASK_CUSTOM1_RD_RS1_RS2 0x707f -#define MATCH_CUSTOM2 0x5b -#define MASK_CUSTOM2 0x707f -#define MATCH_CUSTOM2_RS1 0x205b -#define MASK_CUSTOM2_RS1 0x707f -#define MATCH_CUSTOM2_RS1_RS2 0x305b -#define MASK_CUSTOM2_RS1_RS2 0x707f -#define MATCH_CUSTOM2_RD 0x405b -#define MASK_CUSTOM2_RD 0x707f -#define MATCH_CUSTOM2_RD_RS1 0x605b -#define MASK_CUSTOM2_RD_RS1 0x707f -#define MATCH_CUSTOM2_RD_RS1_RS2 0x705b -#define MASK_CUSTOM2_RD_RS1_RS2 0x707f -#define MATCH_CUSTOM3 0x7b -#define MASK_CUSTOM3 0x707f -#define MATCH_CUSTOM3_RS1 0x207b -#define MASK_CUSTOM3_RS1 0x707f -#define MATCH_CUSTOM3_RS1_RS2 0x307b -#define MASK_CUSTOM3_RS1_RS2 0x707f -#define MATCH_CUSTOM3_RD 0x407b -#define MASK_CUSTOM3_RD 0x707f -#define MATCH_CUSTOM3_RD_RS1 0x607b -#define MASK_CUSTOM3_RD_RS1 0x707f -#define MATCH_CUSTOM3_RD_RS1_RS2 0x707b -#define MASK_CUSTOM3_RD_RS1_RS2 0x707f -#define CSR_FFLAGS 0x1 -#define CSR_FRM 0x2 -#define CSR_FCSR 0x3 -#define CSR_CYCLE 0xc00 -#define CSR_TIME 0xc01 -#define CSR_INSTRET 0xc02 -#define CSR_HPMCOUNTER3 0xc03 -#define CSR_HPMCOUNTER4 0xc04 -#define CSR_HPMCOUNTER5 0xc05 -#define CSR_HPMCOUNTER6 0xc06 -#define CSR_HPMCOUNTER7 0xc07 -#define CSR_HPMCOUNTER8 0xc08 -#define CSR_HPMCOUNTER9 0xc09 -#define CSR_HPMCOUNTER10 0xc0a -#define CSR_HPMCOUNTER11 0xc0b -#define CSR_HPMCOUNTER12 0xc0c -#define CSR_HPMCOUNTER13 0xc0d -#define CSR_HPMCOUNTER14 0xc0e -#define CSR_HPMCOUNTER15 0xc0f -#define CSR_HPMCOUNTER16 0xc10 -#define CSR_HPMCOUNTER17 0xc11 -#define CSR_HPMCOUNTER18 0xc12 -#define CSR_HPMCOUNTER19 0xc13 -#define CSR_HPMCOUNTER20 0xc14 -#define CSR_HPMCOUNTER21 0xc15 -#define CSR_HPMCOUNTER22 0xc16 -#define CSR_HPMCOUNTER23 0xc17 -#define CSR_HPMCOUNTER24 0xc18 -#define CSR_HPMCOUNTER25 0xc19 -#define CSR_HPMCOUNTER26 0xc1a -#define CSR_HPMCOUNTER27 0xc1b -#define CSR_HPMCOUNTER28 0xc1c -#define CSR_HPMCOUNTER29 0xc1d -#define CSR_HPMCOUNTER30 0xc1e -#define CSR_HPMCOUNTER31 0xc1f -#define CSR_SSTATUS 0x100 -#define CSR_SIE 0x104 -#define CSR_STVEC 0x105 -#define CSR_SSCRATCH 0x140 -#define CSR_SEPC 0x141 -#define CSR_SCAUSE 0x142 -#define CSR_SBADADDR 0x143 -#define CSR_SIP 0x144 -#define CSR_SPTBR 0x180 -#define CSR_MSTATUS 0x300 -#define CSR_MISA 0x301 -#define CSR_MEDELEG 0x302 -#define CSR_MIDELEG 0x303 -#define CSR_MIE 0x304 -#define CSR_MTVEC 0x305 -#define CSR_MSCRATCH 0x340 -#define CSR_MEPC 0x341 -#define CSR_MCAUSE 0x342 -#define CSR_MBADADDR 0x343 -#define CSR_MIP 0x344 -#define CSR_TSELECT 0x7a0 -#define CSR_TDATA1 0x7a1 -#define CSR_TDATA2 0x7a2 -#define CSR_TDATA3 0x7a3 -#define CSR_DCSR 0x7b0 -#define CSR_DPC 0x7b1 -#define CSR_DSCRATCH 0x7b2 -#define CSR_MCYCLE 0xb00 -#define CSR_MINSTRET 0xb02 -#define CSR_MHPMCOUNTER3 0xb03 -#define CSR_MHPMCOUNTER4 0xb04 -#define CSR_MHPMCOUNTER5 0xb05 -#define CSR_MHPMCOUNTER6 0xb06 -#define CSR_MHPMCOUNTER7 0xb07 -#define CSR_MHPMCOUNTER8 0xb08 -#define CSR_MHPMCOUNTER9 0xb09 -#define CSR_MHPMCOUNTER10 0xb0a -#define CSR_MHPMCOUNTER11 0xb0b -#define CSR_MHPMCOUNTER12 0xb0c -#define CSR_MHPMCOUNTER13 0xb0d -#define CSR_MHPMCOUNTER14 0xb0e -#define CSR_MHPMCOUNTER15 0xb0f -#define CSR_MHPMCOUNTER16 0xb10 -#define CSR_MHPMCOUNTER17 0xb11 -#define CSR_MHPMCOUNTER18 0xb12 -#define CSR_MHPMCOUNTER19 0xb13 -#define CSR_MHPMCOUNTER20 0xb14 -#define CSR_MHPMCOUNTER21 0xb15 -#define CSR_MHPMCOUNTER22 0xb16 -#define CSR_MHPMCOUNTER23 0xb17 -#define CSR_MHPMCOUNTER24 0xb18 -#define CSR_MHPMCOUNTER25 0xb19 -#define CSR_MHPMCOUNTER26 0xb1a -#define CSR_MHPMCOUNTER27 0xb1b -#define CSR_MHPMCOUNTER28 0xb1c -#define CSR_MHPMCOUNTER29 0xb1d -#define CSR_MHPMCOUNTER30 0xb1e -#define CSR_MHPMCOUNTER31 0xb1f -#define CSR_MUCOUNTEREN 0x320 -#define CSR_MSCOUNTEREN 0x321 -#define CSR_MHPMEVENT3 0x323 -#define CSR_MHPMEVENT4 0x324 -#define CSR_MHPMEVENT5 0x325 -#define CSR_MHPMEVENT6 0x326 -#define CSR_MHPMEVENT7 0x327 -#define CSR_MHPMEVENT8 0x328 -#define CSR_MHPMEVENT9 0x329 -#define CSR_MHPMEVENT10 0x32a -#define CSR_MHPMEVENT11 0x32b -#define CSR_MHPMEVENT12 0x32c -#define CSR_MHPMEVENT13 0x32d -#define CSR_MHPMEVENT14 0x32e -#define CSR_MHPMEVENT15 0x32f -#define CSR_MHPMEVENT16 0x330 -#define CSR_MHPMEVENT17 0x331 -#define CSR_MHPMEVENT18 0x332 -#define CSR_MHPMEVENT19 0x333 -#define CSR_MHPMEVENT20 0x334 -#define CSR_MHPMEVENT21 0x335 -#define CSR_MHPMEVENT22 0x336 -#define CSR_MHPMEVENT23 0x337 -#define CSR_MHPMEVENT24 0x338 -#define CSR_MHPMEVENT25 0x339 -#define CSR_MHPMEVENT26 0x33a -#define CSR_MHPMEVENT27 0x33b -#define CSR_MHPMEVENT28 0x33c -#define CSR_MHPMEVENT29 0x33d -#define CSR_MHPMEVENT30 0x33e -#define CSR_MHPMEVENT31 0x33f -#define CSR_MVENDORID 0xf11 -#define CSR_MARCHID 0xf12 -#define CSR_MIMPID 0xf13 -#define CSR_MHARTID 0xf14 -#define CSR_CYCLEH 0xc80 -#define CSR_TIMEH 0xc81 -#define CSR_INSTRETH 0xc82 -#define CSR_HPMCOUNTER3H 0xc83 -#define CSR_HPMCOUNTER4H 0xc84 -#define CSR_HPMCOUNTER5H 0xc85 -#define CSR_HPMCOUNTER6H 0xc86 -#define CSR_HPMCOUNTER7H 0xc87 -#define CSR_HPMCOUNTER8H 0xc88 -#define CSR_HPMCOUNTER9H 0xc89 -#define CSR_HPMCOUNTER10H 0xc8a -#define CSR_HPMCOUNTER11H 0xc8b -#define CSR_HPMCOUNTER12H 0xc8c -#define CSR_HPMCOUNTER13H 0xc8d -#define CSR_HPMCOUNTER14H 0xc8e -#define CSR_HPMCOUNTER15H 0xc8f -#define CSR_HPMCOUNTER16H 0xc90 -#define CSR_HPMCOUNTER17H 0xc91 -#define CSR_HPMCOUNTER18H 0xc92 -#define CSR_HPMCOUNTER19H 0xc93 -#define CSR_HPMCOUNTER20H 0xc94 -#define CSR_HPMCOUNTER21H 0xc95 -#define CSR_HPMCOUNTER22H 0xc96 -#define CSR_HPMCOUNTER23H 0xc97 -#define CSR_HPMCOUNTER24H 0xc98 -#define CSR_HPMCOUNTER25H 0xc99 -#define CSR_HPMCOUNTER26H 0xc9a -#define CSR_HPMCOUNTER27H 0xc9b -#define CSR_HPMCOUNTER28H 0xc9c -#define CSR_HPMCOUNTER29H 0xc9d -#define CSR_HPMCOUNTER30H 0xc9e -#define CSR_HPMCOUNTER31H 0xc9f -#define CSR_MCYCLEH 0xb80 -#define CSR_MINSTRETH 0xb82 -#define CSR_MHPMCOUNTER3H 0xb83 -#define CSR_MHPMCOUNTER4H 0xb84 -#define CSR_MHPMCOUNTER5H 0xb85 -#define CSR_MHPMCOUNTER6H 0xb86 -#define CSR_MHPMCOUNTER7H 0xb87 -#define CSR_MHPMCOUNTER8H 0xb88 -#define CSR_MHPMCOUNTER9H 0xb89 -#define CSR_MHPMCOUNTER10H 0xb8a -#define CSR_MHPMCOUNTER11H 0xb8b -#define CSR_MHPMCOUNTER12H 0xb8c -#define CSR_MHPMCOUNTER13H 0xb8d -#define CSR_MHPMCOUNTER14H 0xb8e -#define CSR_MHPMCOUNTER15H 0xb8f -#define CSR_MHPMCOUNTER16H 0xb90 -#define CSR_MHPMCOUNTER17H 0xb91 -#define CSR_MHPMCOUNTER18H 0xb92 -#define CSR_MHPMCOUNTER19H 0xb93 -#define CSR_MHPMCOUNTER20H 0xb94 -#define CSR_MHPMCOUNTER21H 0xb95 -#define CSR_MHPMCOUNTER22H 0xb96 -#define CSR_MHPMCOUNTER23H 0xb97 -#define CSR_MHPMCOUNTER24H 0xb98 -#define CSR_MHPMCOUNTER25H 0xb99 -#define CSR_MHPMCOUNTER26H 0xb9a -#define CSR_MHPMCOUNTER27H 0xb9b -#define CSR_MHPMCOUNTER28H 0xb9c -#define CSR_MHPMCOUNTER29H 0xb9d -#define CSR_MHPMCOUNTER30H 0xb9e -#define CSR_MHPMCOUNTER31H 0xb9f -#define CAUSE_MISALIGNED_FETCH 0x0 -#define CAUSE_FAULT_FETCH 0x1 -#define CAUSE_ILLEGAL_INSTRUCTION 0x2 -#define CAUSE_BREAKPOINT 0x3 -#define CAUSE_MISALIGNED_LOAD 0x4 -#define CAUSE_FAULT_LOAD 0x5 -#define CAUSE_MISALIGNED_STORE 0x6 -#define CAUSE_FAULT_STORE 0x7 -#define CAUSE_USER_ECALL 0x8 -#define CAUSE_SUPERVISOR_ECALL 0x9 -#define CAUSE_HYPERVISOR_ECALL 0xa -#define CAUSE_MACHINE_ECALL 0xb -#endif -#ifdef DECLARE_INSN -DECLARE_INSN(beq, MATCH_BEQ, MASK_BEQ) -DECLARE_INSN(bne, MATCH_BNE, MASK_BNE) -DECLARE_INSN(blt, MATCH_BLT, MASK_BLT) -DECLARE_INSN(bge, MATCH_BGE, MASK_BGE) -DECLARE_INSN(bltu, MATCH_BLTU, MASK_BLTU) -DECLARE_INSN(bgeu, MATCH_BGEU, MASK_BGEU) -DECLARE_INSN(jalr, MATCH_JALR, MASK_JALR) -DECLARE_INSN(jal, MATCH_JAL, MASK_JAL) -DECLARE_INSN(lui, MATCH_LUI, MASK_LUI) -DECLARE_INSN(auipc, MATCH_AUIPC, MASK_AUIPC) -DECLARE_INSN(addi, MATCH_ADDI, MASK_ADDI) -DECLARE_INSN(slli, MATCH_SLLI, MASK_SLLI) -DECLARE_INSN(slti, MATCH_SLTI, MASK_SLTI) -DECLARE_INSN(sltiu, MATCH_SLTIU, MASK_SLTIU) -DECLARE_INSN(xori, MATCH_XORI, MASK_XORI) -DECLARE_INSN(srli, MATCH_SRLI, MASK_SRLI) -DECLARE_INSN(srai, MATCH_SRAI, MASK_SRAI) -DECLARE_INSN(ori, MATCH_ORI, MASK_ORI) -DECLARE_INSN(andi, MATCH_ANDI, MASK_ANDI) -DECLARE_INSN(add, MATCH_ADD, MASK_ADD) -DECLARE_INSN(sub, MATCH_SUB, MASK_SUB) -DECLARE_INSN(sll, MATCH_SLL, MASK_SLL) -DECLARE_INSN(slt, MATCH_SLT, MASK_SLT) -DECLARE_INSN(sltu, MATCH_SLTU, MASK_SLTU) -DECLARE_INSN(xor, MATCH_XOR, MASK_XOR) -DECLARE_INSN(srl, MATCH_SRL, MASK_SRL) -DECLARE_INSN(sra, MATCH_SRA, MASK_SRA) -DECLARE_INSN(or, MATCH_OR, MASK_OR) -DECLARE_INSN(and, MATCH_AND, MASK_AND) -DECLARE_INSN(addiw, MATCH_ADDIW, MASK_ADDIW) -DECLARE_INSN(slliw, MATCH_SLLIW, MASK_SLLIW) -DECLARE_INSN(srliw, MATCH_SRLIW, MASK_SRLIW) -DECLARE_INSN(sraiw, MATCH_SRAIW, MASK_SRAIW) -DECLARE_INSN(addw, MATCH_ADDW, MASK_ADDW) -DECLARE_INSN(subw, MATCH_SUBW, MASK_SUBW) -DECLARE_INSN(sllw, MATCH_SLLW, MASK_SLLW) -DECLARE_INSN(srlw, MATCH_SRLW, MASK_SRLW) -DECLARE_INSN(sraw, MATCH_SRAW, MASK_SRAW) -DECLARE_INSN(lb, MATCH_LB, MASK_LB) -DECLARE_INSN(lh, MATCH_LH, MASK_LH) -DECLARE_INSN(lw, MATCH_LW, MASK_LW) -DECLARE_INSN(ld, MATCH_LD, MASK_LD) -DECLARE_INSN(lbu, MATCH_LBU, MASK_LBU) -DECLARE_INSN(lhu, MATCH_LHU, MASK_LHU) -DECLARE_INSN(lwu, MATCH_LWU, MASK_LWU) -DECLARE_INSN(sb, MATCH_SB, MASK_SB) -DECLARE_INSN(sh, MATCH_SH, MASK_SH) -DECLARE_INSN(sw, MATCH_SW, MASK_SW) -DECLARE_INSN(sd, MATCH_SD, MASK_SD) -DECLARE_INSN(fence, MATCH_FENCE, MASK_FENCE) -DECLARE_INSN(fence_i, MATCH_FENCE_I, MASK_FENCE_I) -DECLARE_INSN(mul, MATCH_MUL, MASK_MUL) -DECLARE_INSN(mulh, MATCH_MULH, MASK_MULH) -DECLARE_INSN(mulhsu, MATCH_MULHSU, MASK_MULHSU) -DECLARE_INSN(mulhu, MATCH_MULHU, MASK_MULHU) -DECLARE_INSN(div, MATCH_DIV, MASK_DIV) -DECLARE_INSN(divu, MATCH_DIVU, MASK_DIVU) -DECLARE_INSN(rem, MATCH_REM, MASK_REM) -DECLARE_INSN(remu, MATCH_REMU, MASK_REMU) -DECLARE_INSN(mulw, MATCH_MULW, MASK_MULW) -DECLARE_INSN(divw, MATCH_DIVW, MASK_DIVW) -DECLARE_INSN(divuw, MATCH_DIVUW, MASK_DIVUW) -DECLARE_INSN(remw, MATCH_REMW, MASK_REMW) -DECLARE_INSN(remuw, MATCH_REMUW, MASK_REMUW) -DECLARE_INSN(amoadd_w, MATCH_AMOADD_W, MASK_AMOADD_W) -DECLARE_INSN(amoxor_w, MATCH_AMOXOR_W, MASK_AMOXOR_W) -DECLARE_INSN(amoor_w, MATCH_AMOOR_W, MASK_AMOOR_W) -DECLARE_INSN(amoand_w, MATCH_AMOAND_W, MASK_AMOAND_W) -DECLARE_INSN(amomin_w, MATCH_AMOMIN_W, MASK_AMOMIN_W) -DECLARE_INSN(amomax_w, MATCH_AMOMAX_W, MASK_AMOMAX_W) -DECLARE_INSN(amominu_w, MATCH_AMOMINU_W, MASK_AMOMINU_W) -DECLARE_INSN(amomaxu_w, MATCH_AMOMAXU_W, MASK_AMOMAXU_W) -DECLARE_INSN(amoswap_w, MATCH_AMOSWAP_W, MASK_AMOSWAP_W) -DECLARE_INSN(lr_w, MATCH_LR_W, MASK_LR_W) -DECLARE_INSN(sc_w, MATCH_SC_W, MASK_SC_W) -DECLARE_INSN(amoadd_d, MATCH_AMOADD_D, MASK_AMOADD_D) -DECLARE_INSN(amoxor_d, MATCH_AMOXOR_D, MASK_AMOXOR_D) -DECLARE_INSN(amoor_d, MATCH_AMOOR_D, MASK_AMOOR_D) -DECLARE_INSN(amoand_d, MATCH_AMOAND_D, MASK_AMOAND_D) -DECLARE_INSN(amomin_d, MATCH_AMOMIN_D, MASK_AMOMIN_D) -DECLARE_INSN(amomax_d, MATCH_AMOMAX_D, MASK_AMOMAX_D) -DECLARE_INSN(amominu_d, MATCH_AMOMINU_D, MASK_AMOMINU_D) -DECLARE_INSN(amomaxu_d, MATCH_AMOMAXU_D, MASK_AMOMAXU_D) -DECLARE_INSN(amoswap_d, MATCH_AMOSWAP_D, MASK_AMOSWAP_D) -DECLARE_INSN(lr_d, MATCH_LR_D, MASK_LR_D) -DECLARE_INSN(sc_d, MATCH_SC_D, MASK_SC_D) -DECLARE_INSN(ecall, MATCH_ECALL, MASK_ECALL) -DECLARE_INSN(ebreak, MATCH_EBREAK, MASK_EBREAK) -DECLARE_INSN(uret, MATCH_URET, MASK_URET) -DECLARE_INSN(sret, MATCH_SRET, MASK_SRET) -DECLARE_INSN(hret, MATCH_HRET, MASK_HRET) -DECLARE_INSN(mret, MATCH_MRET, MASK_MRET) -DECLARE_INSN(dret, MATCH_DRET, MASK_DRET) -DECLARE_INSN(sfence_vm, MATCH_SFENCE_VM, MASK_SFENCE_VM) -DECLARE_INSN(wfi, MATCH_WFI, MASK_WFI) -DECLARE_INSN(csrrw, MATCH_CSRRW, MASK_CSRRW) -DECLARE_INSN(csrrs, MATCH_CSRRS, MASK_CSRRS) -DECLARE_INSN(csrrc, MATCH_CSRRC, MASK_CSRRC) -DECLARE_INSN(csrrwi, MATCH_CSRRWI, MASK_CSRRWI) -DECLARE_INSN(csrrsi, MATCH_CSRRSI, MASK_CSRRSI) -DECLARE_INSN(csrrci, MATCH_CSRRCI, MASK_CSRRCI) -DECLARE_INSN(fadd_s, MATCH_FADD_S, MASK_FADD_S) -DECLARE_INSN(fsub_s, MATCH_FSUB_S, MASK_FSUB_S) -DECLARE_INSN(fmul_s, MATCH_FMUL_S, MASK_FMUL_S) -DECLARE_INSN(fdiv_s, MATCH_FDIV_S, MASK_FDIV_S) -DECLARE_INSN(fsgnj_s, MATCH_FSGNJ_S, MASK_FSGNJ_S) -DECLARE_INSN(fsgnjn_s, MATCH_FSGNJN_S, MASK_FSGNJN_S) -DECLARE_INSN(fsgnjx_s, MATCH_FSGNJX_S, MASK_FSGNJX_S) -DECLARE_INSN(fmin_s, MATCH_FMIN_S, MASK_FMIN_S) -DECLARE_INSN(fmax_s, MATCH_FMAX_S, MASK_FMAX_S) -DECLARE_INSN(fsqrt_s, MATCH_FSQRT_S, MASK_FSQRT_S) -DECLARE_INSN(fadd_d, MATCH_FADD_D, MASK_FADD_D) -DECLARE_INSN(fsub_d, MATCH_FSUB_D, MASK_FSUB_D) -DECLARE_INSN(fmul_d, MATCH_FMUL_D, MASK_FMUL_D) -DECLARE_INSN(fdiv_d, MATCH_FDIV_D, MASK_FDIV_D) -DECLARE_INSN(fsgnj_d, MATCH_FSGNJ_D, MASK_FSGNJ_D) -DECLARE_INSN(fsgnjn_d, MATCH_FSGNJN_D, MASK_FSGNJN_D) -DECLARE_INSN(fsgnjx_d, MATCH_FSGNJX_D, MASK_FSGNJX_D) -DECLARE_INSN(fmin_d, MATCH_FMIN_D, MASK_FMIN_D) -DECLARE_INSN(fmax_d, MATCH_FMAX_D, MASK_FMAX_D) -DECLARE_INSN(fcvt_s_d, MATCH_FCVT_S_D, MASK_FCVT_S_D) -DECLARE_INSN(fcvt_d_s, MATCH_FCVT_D_S, MASK_FCVT_D_S) -DECLARE_INSN(fsqrt_d, MATCH_FSQRT_D, MASK_FSQRT_D) -DECLARE_INSN(fle_s, MATCH_FLE_S, MASK_FLE_S) -DECLARE_INSN(flt_s, MATCH_FLT_S, MASK_FLT_S) -DECLARE_INSN(feq_s, MATCH_FEQ_S, MASK_FEQ_S) -DECLARE_INSN(fle_d, MATCH_FLE_D, MASK_FLE_D) -DECLARE_INSN(flt_d, MATCH_FLT_D, MASK_FLT_D) -DECLARE_INSN(feq_d, MATCH_FEQ_D, MASK_FEQ_D) -DECLARE_INSN(fcvt_w_s, MATCH_FCVT_W_S, MASK_FCVT_W_S) -DECLARE_INSN(fcvt_wu_s, MATCH_FCVT_WU_S, MASK_FCVT_WU_S) -DECLARE_INSN(fcvt_l_s, MATCH_FCVT_L_S, MASK_FCVT_L_S) -DECLARE_INSN(fcvt_lu_s, MATCH_FCVT_LU_S, MASK_FCVT_LU_S) -DECLARE_INSN(fmv_x_s, MATCH_FMV_X_S, MASK_FMV_X_S) -DECLARE_INSN(fclass_s, MATCH_FCLASS_S, MASK_FCLASS_S) -DECLARE_INSN(fcvt_w_d, MATCH_FCVT_W_D, MASK_FCVT_W_D) -DECLARE_INSN(fcvt_wu_d, MATCH_FCVT_WU_D, MASK_FCVT_WU_D) -DECLARE_INSN(fcvt_l_d, MATCH_FCVT_L_D, MASK_FCVT_L_D) -DECLARE_INSN(fcvt_lu_d, MATCH_FCVT_LU_D, MASK_FCVT_LU_D) -DECLARE_INSN(fmv_x_d, MATCH_FMV_X_D, MASK_FMV_X_D) -DECLARE_INSN(fclass_d, MATCH_FCLASS_D, MASK_FCLASS_D) -DECLARE_INSN(fcvt_s_w, MATCH_FCVT_S_W, MASK_FCVT_S_W) -DECLARE_INSN(fcvt_s_wu, MATCH_FCVT_S_WU, MASK_FCVT_S_WU) -DECLARE_INSN(fcvt_s_l, MATCH_FCVT_S_L, MASK_FCVT_S_L) -DECLARE_INSN(fcvt_s_lu, MATCH_FCVT_S_LU, MASK_FCVT_S_LU) -DECLARE_INSN(fmv_s_x, MATCH_FMV_S_X, MASK_FMV_S_X) -DECLARE_INSN(fcvt_d_w, MATCH_FCVT_D_W, MASK_FCVT_D_W) -DECLARE_INSN(fcvt_d_wu, MATCH_FCVT_D_WU, MASK_FCVT_D_WU) -DECLARE_INSN(fcvt_d_l, MATCH_FCVT_D_L, MASK_FCVT_D_L) -DECLARE_INSN(fcvt_d_lu, MATCH_FCVT_D_LU, MASK_FCVT_D_LU) -DECLARE_INSN(fmv_d_x, MATCH_FMV_D_X, MASK_FMV_D_X) -DECLARE_INSN(flw, MATCH_FLW, MASK_FLW) -DECLARE_INSN(fld, MATCH_FLD, MASK_FLD) -DECLARE_INSN(fsw, MATCH_FSW, MASK_FSW) -DECLARE_INSN(fsd, MATCH_FSD, MASK_FSD) -DECLARE_INSN(fmadd_s, MATCH_FMADD_S, MASK_FMADD_S) -DECLARE_INSN(fmsub_s, MATCH_FMSUB_S, MASK_FMSUB_S) -DECLARE_INSN(fnmsub_s, MATCH_FNMSUB_S, MASK_FNMSUB_S) -DECLARE_INSN(fnmadd_s, MATCH_FNMADD_S, MASK_FNMADD_S) -DECLARE_INSN(fmadd_d, MATCH_FMADD_D, MASK_FMADD_D) -DECLARE_INSN(fmsub_d, MATCH_FMSUB_D, MASK_FMSUB_D) -DECLARE_INSN(fnmsub_d, MATCH_FNMSUB_D, MASK_FNMSUB_D) -DECLARE_INSN(fnmadd_d, MATCH_FNMADD_D, MASK_FNMADD_D) -DECLARE_INSN(c_nop, MATCH_C_NOP, MASK_C_NOP) -DECLARE_INSN(c_addi16sp, MATCH_C_ADDI16SP, MASK_C_ADDI16SP) -DECLARE_INSN(c_jr, MATCH_C_JR, MASK_C_JR) -DECLARE_INSN(c_jalr, MATCH_C_JALR, MASK_C_JALR) -DECLARE_INSN(c_ebreak, MATCH_C_EBREAK, MASK_C_EBREAK) -DECLARE_INSN(c_ld, MATCH_C_LD, MASK_C_LD) -DECLARE_INSN(c_sd, MATCH_C_SD, MASK_C_SD) -DECLARE_INSN(c_addiw, MATCH_C_ADDIW, MASK_C_ADDIW) -DECLARE_INSN(c_ldsp, MATCH_C_LDSP, MASK_C_LDSP) -DECLARE_INSN(c_sdsp, MATCH_C_SDSP, MASK_C_SDSP) -DECLARE_INSN(c_addi4spn, MATCH_C_ADDI4SPN, MASK_C_ADDI4SPN) -DECLARE_INSN(c_fld, MATCH_C_FLD, MASK_C_FLD) -DECLARE_INSN(c_lw, MATCH_C_LW, MASK_C_LW) -DECLARE_INSN(c_flw, MATCH_C_FLW, MASK_C_FLW) -DECLARE_INSN(c_fsd, MATCH_C_FSD, MASK_C_FSD) -DECLARE_INSN(c_sw, MATCH_C_SW, MASK_C_SW) -DECLARE_INSN(c_fsw, MATCH_C_FSW, MASK_C_FSW) -DECLARE_INSN(c_addi, MATCH_C_ADDI, MASK_C_ADDI) -DECLARE_INSN(c_jal, MATCH_C_JAL, MASK_C_JAL) -DECLARE_INSN(c_li, MATCH_C_LI, MASK_C_LI) -DECLARE_INSN(c_lui, MATCH_C_LUI, MASK_C_LUI) -DECLARE_INSN(c_srli, MATCH_C_SRLI, MASK_C_SRLI) -DECLARE_INSN(c_srai, MATCH_C_SRAI, MASK_C_SRAI) -DECLARE_INSN(c_andi, MATCH_C_ANDI, MASK_C_ANDI) -DECLARE_INSN(c_sub, MATCH_C_SUB, MASK_C_SUB) -DECLARE_INSN(c_xor, MATCH_C_XOR, MASK_C_XOR) -DECLARE_INSN(c_or, MATCH_C_OR, MASK_C_OR) -DECLARE_INSN(c_and, MATCH_C_AND, MASK_C_AND) -DECLARE_INSN(c_subw, MATCH_C_SUBW, MASK_C_SUBW) -DECLARE_INSN(c_addw, MATCH_C_ADDW, MASK_C_ADDW) -DECLARE_INSN(c_j, MATCH_C_J, MASK_C_J) -DECLARE_INSN(c_beqz, MATCH_C_BEQZ, MASK_C_BEQZ) -DECLARE_INSN(c_bnez, MATCH_C_BNEZ, MASK_C_BNEZ) -DECLARE_INSN(c_slli, MATCH_C_SLLI, MASK_C_SLLI) -DECLARE_INSN(c_fldsp, MATCH_C_FLDSP, MASK_C_FLDSP) -DECLARE_INSN(c_lwsp, MATCH_C_LWSP, MASK_C_LWSP) -DECLARE_INSN(c_flwsp, MATCH_C_FLWSP, MASK_C_FLWSP) -DECLARE_INSN(c_mv, MATCH_C_MV, MASK_C_MV) -DECLARE_INSN(c_add, MATCH_C_ADD, MASK_C_ADD) -DECLARE_INSN(c_fsdsp, MATCH_C_FSDSP, MASK_C_FSDSP) -DECLARE_INSN(c_swsp, MATCH_C_SWSP, MASK_C_SWSP) -DECLARE_INSN(c_fswsp, MATCH_C_FSWSP, MASK_C_FSWSP) -DECLARE_INSN(custom0, MATCH_CUSTOM0, MASK_CUSTOM0) -DECLARE_INSN(custom0_rs1, MATCH_CUSTOM0_RS1, MASK_CUSTOM0_RS1) -DECLARE_INSN(custom0_rs1_rs2, MATCH_CUSTOM0_RS1_RS2, MASK_CUSTOM0_RS1_RS2) -DECLARE_INSN(custom0_rd, MATCH_CUSTOM0_RD, MASK_CUSTOM0_RD) -DECLARE_INSN(custom0_rd_rs1, MATCH_CUSTOM0_RD_RS1, MASK_CUSTOM0_RD_RS1) -DECLARE_INSN(custom0_rd_rs1_rs2, MATCH_CUSTOM0_RD_RS1_RS2, MASK_CUSTOM0_RD_RS1_RS2) -DECLARE_INSN(custom1, MATCH_CUSTOM1, MASK_CUSTOM1) -DECLARE_INSN(custom1_rs1, MATCH_CUSTOM1_RS1, MASK_CUSTOM1_RS1) -DECLARE_INSN(custom1_rs1_rs2, MATCH_CUSTOM1_RS1_RS2, MASK_CUSTOM1_RS1_RS2) -DECLARE_INSN(custom1_rd, MATCH_CUSTOM1_RD, MASK_CUSTOM1_RD) -DECLARE_INSN(custom1_rd_rs1, MATCH_CUSTOM1_RD_RS1, MASK_CUSTOM1_RD_RS1) -DECLARE_INSN(custom1_rd_rs1_rs2, MATCH_CUSTOM1_RD_RS1_RS2, MASK_CUSTOM1_RD_RS1_RS2) -DECLARE_INSN(custom2, MATCH_CUSTOM2, MASK_CUSTOM2) -DECLARE_INSN(custom2_rs1, MATCH_CUSTOM2_RS1, MASK_CUSTOM2_RS1) -DECLARE_INSN(custom2_rs1_rs2, MATCH_CUSTOM2_RS1_RS2, MASK_CUSTOM2_RS1_RS2) -DECLARE_INSN(custom2_rd, MATCH_CUSTOM2_RD, MASK_CUSTOM2_RD) -DECLARE_INSN(custom2_rd_rs1, MATCH_CUSTOM2_RD_RS1, MASK_CUSTOM2_RD_RS1) -DECLARE_INSN(custom2_rd_rs1_rs2, MATCH_CUSTOM2_RD_RS1_RS2, MASK_CUSTOM2_RD_RS1_RS2) -DECLARE_INSN(custom3, MATCH_CUSTOM3, MASK_CUSTOM3) -DECLARE_INSN(custom3_rs1, MATCH_CUSTOM3_RS1, MASK_CUSTOM3_RS1) -DECLARE_INSN(custom3_rs1_rs2, MATCH_CUSTOM3_RS1_RS2, MASK_CUSTOM3_RS1_RS2) -DECLARE_INSN(custom3_rd, MATCH_CUSTOM3_RD, MASK_CUSTOM3_RD) -DECLARE_INSN(custom3_rd_rs1, MATCH_CUSTOM3_RD_RS1, MASK_CUSTOM3_RD_RS1) -DECLARE_INSN(custom3_rd_rs1_rs2, MATCH_CUSTOM3_RD_RS1_RS2, MASK_CUSTOM3_RD_RS1_RS2) -#endif -#ifdef DECLARE_CSR -DECLARE_CSR(fflags, CSR_FFLAGS) -DECLARE_CSR(frm, CSR_FRM) -DECLARE_CSR(fcsr, CSR_FCSR) -DECLARE_CSR(cycle, CSR_CYCLE) -DECLARE_CSR(time, CSR_TIME) -DECLARE_CSR(instret, CSR_INSTRET) -DECLARE_CSR(hpmcounter3, CSR_HPMCOUNTER3) -DECLARE_CSR(hpmcounter4, CSR_HPMCOUNTER4) -DECLARE_CSR(hpmcounter5, CSR_HPMCOUNTER5) -DECLARE_CSR(hpmcounter6, CSR_HPMCOUNTER6) -DECLARE_CSR(hpmcounter7, CSR_HPMCOUNTER7) -DECLARE_CSR(hpmcounter8, CSR_HPMCOUNTER8) -DECLARE_CSR(hpmcounter9, CSR_HPMCOUNTER9) -DECLARE_CSR(hpmcounter10, CSR_HPMCOUNTER10) -DECLARE_CSR(hpmcounter11, CSR_HPMCOUNTER11) -DECLARE_CSR(hpmcounter12, CSR_HPMCOUNTER12) -DECLARE_CSR(hpmcounter13, CSR_HPMCOUNTER13) -DECLARE_CSR(hpmcounter14, CSR_HPMCOUNTER14) -DECLARE_CSR(hpmcounter15, CSR_HPMCOUNTER15) -DECLARE_CSR(hpmcounter16, CSR_HPMCOUNTER16) -DECLARE_CSR(hpmcounter17, CSR_HPMCOUNTER17) -DECLARE_CSR(hpmcounter18, CSR_HPMCOUNTER18) -DECLARE_CSR(hpmcounter19, CSR_HPMCOUNTER19) -DECLARE_CSR(hpmcounter20, CSR_HPMCOUNTER20) -DECLARE_CSR(hpmcounter21, CSR_HPMCOUNTER21) -DECLARE_CSR(hpmcounter22, CSR_HPMCOUNTER22) -DECLARE_CSR(hpmcounter23, CSR_HPMCOUNTER23) -DECLARE_CSR(hpmcounter24, CSR_HPMCOUNTER24) -DECLARE_CSR(hpmcounter25, CSR_HPMCOUNTER25) -DECLARE_CSR(hpmcounter26, CSR_HPMCOUNTER26) -DECLARE_CSR(hpmcounter27, CSR_HPMCOUNTER27) -DECLARE_CSR(hpmcounter28, CSR_HPMCOUNTER28) -DECLARE_CSR(hpmcounter29, CSR_HPMCOUNTER29) -DECLARE_CSR(hpmcounter30, CSR_HPMCOUNTER30) -DECLARE_CSR(hpmcounter31, CSR_HPMCOUNTER31) -DECLARE_CSR(sstatus, CSR_SSTATUS) -DECLARE_CSR(sie, CSR_SIE) -DECLARE_CSR(stvec, CSR_STVEC) -DECLARE_CSR(sscratch, CSR_SSCRATCH) -DECLARE_CSR(sepc, CSR_SEPC) -DECLARE_CSR(scause, CSR_SCAUSE) -DECLARE_CSR(sbadaddr, CSR_SBADADDR) -DECLARE_CSR(sip, CSR_SIP) -DECLARE_CSR(sptbr, CSR_SPTBR) -DECLARE_CSR(mstatus, CSR_MSTATUS) -DECLARE_CSR(misa, CSR_MISA) -DECLARE_CSR(medeleg, CSR_MEDELEG) -DECLARE_CSR(mideleg, CSR_MIDELEG) -DECLARE_CSR(mie, CSR_MIE) -DECLARE_CSR(mtvec, CSR_MTVEC) -DECLARE_CSR(mscratch, CSR_MSCRATCH) -DECLARE_CSR(mepc, CSR_MEPC) -DECLARE_CSR(mcause, CSR_MCAUSE) -DECLARE_CSR(mbadaddr, CSR_MBADADDR) -DECLARE_CSR(mip, CSR_MIP) -DECLARE_CSR(tselect, CSR_TSELECT) -DECLARE_CSR(tdata1, CSR_TDATA1) -DECLARE_CSR(tdata2, CSR_TDATA2) -DECLARE_CSR(tdata3, CSR_TDATA3) -DECLARE_CSR(dcsr, CSR_DCSR) -DECLARE_CSR(dpc, CSR_DPC) -DECLARE_CSR(dscratch, CSR_DSCRATCH) -DECLARE_CSR(mcycle, CSR_MCYCLE) -DECLARE_CSR(minstret, CSR_MINSTRET) -DECLARE_CSR(mhpmcounter3, CSR_MHPMCOUNTER3) -DECLARE_CSR(mhpmcounter4, CSR_MHPMCOUNTER4) -DECLARE_CSR(mhpmcounter5, CSR_MHPMCOUNTER5) -DECLARE_CSR(mhpmcounter6, CSR_MHPMCOUNTER6) -DECLARE_CSR(mhpmcounter7, CSR_MHPMCOUNTER7) -DECLARE_CSR(mhpmcounter8, CSR_MHPMCOUNTER8) -DECLARE_CSR(mhpmcounter9, CSR_MHPMCOUNTER9) -DECLARE_CSR(mhpmcounter10, CSR_MHPMCOUNTER10) -DECLARE_CSR(mhpmcounter11, CSR_MHPMCOUNTER11) -DECLARE_CSR(mhpmcounter12, CSR_MHPMCOUNTER12) -DECLARE_CSR(mhpmcounter13, CSR_MHPMCOUNTER13) -DECLARE_CSR(mhpmcounter14, CSR_MHPMCOUNTER14) -DECLARE_CSR(mhpmcounter15, CSR_MHPMCOUNTER15) -DECLARE_CSR(mhpmcounter16, CSR_MHPMCOUNTER16) -DECLARE_CSR(mhpmcounter17, CSR_MHPMCOUNTER17) -DECLARE_CSR(mhpmcounter18, CSR_MHPMCOUNTER18) -DECLARE_CSR(mhpmcounter19, CSR_MHPMCOUNTER19) -DECLARE_CSR(mhpmcounter20, CSR_MHPMCOUNTER20) -DECLARE_CSR(mhpmcounter21, CSR_MHPMCOUNTER21) -DECLARE_CSR(mhpmcounter22, CSR_MHPMCOUNTER22) -DECLARE_CSR(mhpmcounter23, CSR_MHPMCOUNTER23) -DECLARE_CSR(mhpmcounter24, CSR_MHPMCOUNTER24) -DECLARE_CSR(mhpmcounter25, CSR_MHPMCOUNTER25) -DECLARE_CSR(mhpmcounter26, CSR_MHPMCOUNTER26) -DECLARE_CSR(mhpmcounter27, CSR_MHPMCOUNTER27) -DECLARE_CSR(mhpmcounter28, CSR_MHPMCOUNTER28) -DECLARE_CSR(mhpmcounter29, CSR_MHPMCOUNTER29) -DECLARE_CSR(mhpmcounter30, CSR_MHPMCOUNTER30) -DECLARE_CSR(mhpmcounter31, CSR_MHPMCOUNTER31) -DECLARE_CSR(mucounteren, CSR_MUCOUNTEREN) -DECLARE_CSR(mscounteren, CSR_MSCOUNTEREN) -DECLARE_CSR(mhpmevent3, CSR_MHPMEVENT3) -DECLARE_CSR(mhpmevent4, CSR_MHPMEVENT4) -DECLARE_CSR(mhpmevent5, CSR_MHPMEVENT5) -DECLARE_CSR(mhpmevent6, CSR_MHPMEVENT6) -DECLARE_CSR(mhpmevent7, CSR_MHPMEVENT7) -DECLARE_CSR(mhpmevent8, CSR_MHPMEVENT8) -DECLARE_CSR(mhpmevent9, CSR_MHPMEVENT9) -DECLARE_CSR(mhpmevent10, CSR_MHPMEVENT10) -DECLARE_CSR(mhpmevent11, CSR_MHPMEVENT11) -DECLARE_CSR(mhpmevent12, CSR_MHPMEVENT12) -DECLARE_CSR(mhpmevent13, CSR_MHPMEVENT13) -DECLARE_CSR(mhpmevent14, CSR_MHPMEVENT14) -DECLARE_CSR(mhpmevent15, CSR_MHPMEVENT15) -DECLARE_CSR(mhpmevent16, CSR_MHPMEVENT16) -DECLARE_CSR(mhpmevent17, CSR_MHPMEVENT17) -DECLARE_CSR(mhpmevent18, CSR_MHPMEVENT18) -DECLARE_CSR(mhpmevent19, CSR_MHPMEVENT19) -DECLARE_CSR(mhpmevent20, CSR_MHPMEVENT20) -DECLARE_CSR(mhpmevent21, CSR_MHPMEVENT21) -DECLARE_CSR(mhpmevent22, CSR_MHPMEVENT22) -DECLARE_CSR(mhpmevent23, CSR_MHPMEVENT23) -DECLARE_CSR(mhpmevent24, CSR_MHPMEVENT24) -DECLARE_CSR(mhpmevent25, CSR_MHPMEVENT25) -DECLARE_CSR(mhpmevent26, CSR_MHPMEVENT26) -DECLARE_CSR(mhpmevent27, CSR_MHPMEVENT27) -DECLARE_CSR(mhpmevent28, CSR_MHPMEVENT28) -DECLARE_CSR(mhpmevent29, CSR_MHPMEVENT29) -DECLARE_CSR(mhpmevent30, CSR_MHPMEVENT30) -DECLARE_CSR(mhpmevent31, CSR_MHPMEVENT31) -DECLARE_CSR(mvendorid, CSR_MVENDORID) -DECLARE_CSR(marchid, CSR_MARCHID) -DECLARE_CSR(mimpid, CSR_MIMPID) -DECLARE_CSR(mhartid, CSR_MHARTID) -DECLARE_CSR(cycleh, CSR_CYCLEH) -DECLARE_CSR(timeh, CSR_TIMEH) -DECLARE_CSR(instreth, CSR_INSTRETH) -DECLARE_CSR(hpmcounter3h, CSR_HPMCOUNTER3H) -DECLARE_CSR(hpmcounter4h, CSR_HPMCOUNTER4H) -DECLARE_CSR(hpmcounter5h, CSR_HPMCOUNTER5H) -DECLARE_CSR(hpmcounter6h, CSR_HPMCOUNTER6H) -DECLARE_CSR(hpmcounter7h, CSR_HPMCOUNTER7H) -DECLARE_CSR(hpmcounter8h, CSR_HPMCOUNTER8H) -DECLARE_CSR(hpmcounter9h, CSR_HPMCOUNTER9H) -DECLARE_CSR(hpmcounter10h, CSR_HPMCOUNTER10H) -DECLARE_CSR(hpmcounter11h, CSR_HPMCOUNTER11H) -DECLARE_CSR(hpmcounter12h, CSR_HPMCOUNTER12H) -DECLARE_CSR(hpmcounter13h, CSR_HPMCOUNTER13H) -DECLARE_CSR(hpmcounter14h, CSR_HPMCOUNTER14H) -DECLARE_CSR(hpmcounter15h, CSR_HPMCOUNTER15H) -DECLARE_CSR(hpmcounter16h, CSR_HPMCOUNTER16H) -DECLARE_CSR(hpmcounter17h, CSR_HPMCOUNTER17H) -DECLARE_CSR(hpmcounter18h, CSR_HPMCOUNTER18H) -DECLARE_CSR(hpmcounter19h, CSR_HPMCOUNTER19H) -DECLARE_CSR(hpmcounter20h, CSR_HPMCOUNTER20H) -DECLARE_CSR(hpmcounter21h, CSR_HPMCOUNTER21H) -DECLARE_CSR(hpmcounter22h, CSR_HPMCOUNTER22H) -DECLARE_CSR(hpmcounter23h, CSR_HPMCOUNTER23H) -DECLARE_CSR(hpmcounter24h, CSR_HPMCOUNTER24H) -DECLARE_CSR(hpmcounter25h, CSR_HPMCOUNTER25H) -DECLARE_CSR(hpmcounter26h, CSR_HPMCOUNTER26H) -DECLARE_CSR(hpmcounter27h, CSR_HPMCOUNTER27H) -DECLARE_CSR(hpmcounter28h, CSR_HPMCOUNTER28H) -DECLARE_CSR(hpmcounter29h, CSR_HPMCOUNTER29H) -DECLARE_CSR(hpmcounter30h, CSR_HPMCOUNTER30H) -DECLARE_CSR(hpmcounter31h, CSR_HPMCOUNTER31H) -DECLARE_CSR(mcycleh, CSR_MCYCLEH) -DECLARE_CSR(minstreth, CSR_MINSTRETH) -DECLARE_CSR(mhpmcounter3h, CSR_MHPMCOUNTER3H) -DECLARE_CSR(mhpmcounter4h, CSR_MHPMCOUNTER4H) -DECLARE_CSR(mhpmcounter5h, CSR_MHPMCOUNTER5H) -DECLARE_CSR(mhpmcounter6h, CSR_MHPMCOUNTER6H) -DECLARE_CSR(mhpmcounter7h, CSR_MHPMCOUNTER7H) -DECLARE_CSR(mhpmcounter8h, CSR_MHPMCOUNTER8H) -DECLARE_CSR(mhpmcounter9h, CSR_MHPMCOUNTER9H) -DECLARE_CSR(mhpmcounter10h, CSR_MHPMCOUNTER10H) -DECLARE_CSR(mhpmcounter11h, CSR_MHPMCOUNTER11H) -DECLARE_CSR(mhpmcounter12h, CSR_MHPMCOUNTER12H) -DECLARE_CSR(mhpmcounter13h, CSR_MHPMCOUNTER13H) -DECLARE_CSR(mhpmcounter14h, CSR_MHPMCOUNTER14H) -DECLARE_CSR(mhpmcounter15h, CSR_MHPMCOUNTER15H) -DECLARE_CSR(mhpmcounter16h, CSR_MHPMCOUNTER16H) -DECLARE_CSR(mhpmcounter17h, CSR_MHPMCOUNTER17H) -DECLARE_CSR(mhpmcounter18h, CSR_MHPMCOUNTER18H) -DECLARE_CSR(mhpmcounter19h, CSR_MHPMCOUNTER19H) -DECLARE_CSR(mhpmcounter20h, CSR_MHPMCOUNTER20H) -DECLARE_CSR(mhpmcounter21h, CSR_MHPMCOUNTER21H) -DECLARE_CSR(mhpmcounter22h, CSR_MHPMCOUNTER22H) -DECLARE_CSR(mhpmcounter23h, CSR_MHPMCOUNTER23H) -DECLARE_CSR(mhpmcounter24h, CSR_MHPMCOUNTER24H) -DECLARE_CSR(mhpmcounter25h, CSR_MHPMCOUNTER25H) -DECLARE_CSR(mhpmcounter26h, CSR_MHPMCOUNTER26H) -DECLARE_CSR(mhpmcounter27h, CSR_MHPMCOUNTER27H) -DECLARE_CSR(mhpmcounter28h, CSR_MHPMCOUNTER28H) -DECLARE_CSR(mhpmcounter29h, CSR_MHPMCOUNTER29H) -DECLARE_CSR(mhpmcounter30h, CSR_MHPMCOUNTER30H) -DECLARE_CSR(mhpmcounter31h, CSR_MHPMCOUNTER31H) -#endif -#ifdef DECLARE_CAUSE -DECLARE_CAUSE("misaligned fetch", CAUSE_MISALIGNED_FETCH) -DECLARE_CAUSE("fault fetch", CAUSE_FAULT_FETCH) -DECLARE_CAUSE("illegal instruction", CAUSE_ILLEGAL_INSTRUCTION) -DECLARE_CAUSE("breakpoint", CAUSE_BREAKPOINT) -DECLARE_CAUSE("misaligned load", CAUSE_MISALIGNED_LOAD) -DECLARE_CAUSE("fault load", CAUSE_FAULT_LOAD) -DECLARE_CAUSE("misaligned store", CAUSE_MISALIGNED_STORE) -DECLARE_CAUSE("fault store", CAUSE_FAULT_STORE) -DECLARE_CAUSE("user_ecall", CAUSE_USER_ECALL) -DECLARE_CAUSE("supervisor_ecall", CAUSE_SUPERVISOR_ECALL) -DECLARE_CAUSE("hypervisor_ecall", CAUSE_HYPERVISOR_ECALL) -DECLARE_CAUSE("machine_ecall", CAUSE_MACHINE_ECALL) -#endif diff --git a/fpga_spn/bsp/env/entry.S b/fpga_spn/bsp/env/entry.S deleted file mode 100644 index 261b2a4..0000000 --- a/fpga_spn/bsp/env/entry.S +++ /dev/null @@ -1,98 +0,0 @@ -// See LICENSE for license details - -#ifndef ENTRY_S -#define ENTRY_S - -#include "encoding.h" -#include "sifive/bits.h" - - .section .text.entry - .align 2 - .weak trap_entry - .global trap_entry -trap_entry: - addi sp, sp, -32*REGBYTES - - STORE x1, 1*REGBYTES(sp) - STORE x2, 2*REGBYTES(sp) - STORE x3, 3*REGBYTES(sp) - STORE x4, 4*REGBYTES(sp) - STORE x5, 5*REGBYTES(sp) - STORE x6, 6*REGBYTES(sp) - STORE x7, 7*REGBYTES(sp) - STORE x8, 8*REGBYTES(sp) - STORE x9, 9*REGBYTES(sp) - STORE x10, 10*REGBYTES(sp) - STORE x11, 11*REGBYTES(sp) - STORE x12, 12*REGBYTES(sp) - STORE x13, 13*REGBYTES(sp) - STORE x14, 14*REGBYTES(sp) - STORE x15, 15*REGBYTES(sp) - STORE x16, 16*REGBYTES(sp) - STORE x17, 17*REGBYTES(sp) - STORE x18, 18*REGBYTES(sp) - STORE x19, 19*REGBYTES(sp) - STORE x20, 20*REGBYTES(sp) - STORE x21, 21*REGBYTES(sp) - STORE x22, 22*REGBYTES(sp) - STORE x23, 23*REGBYTES(sp) - STORE x24, 24*REGBYTES(sp) - STORE x25, 25*REGBYTES(sp) - STORE x26, 26*REGBYTES(sp) - STORE x27, 27*REGBYTES(sp) - STORE x28, 28*REGBYTES(sp) - STORE x29, 29*REGBYTES(sp) - STORE x30, 30*REGBYTES(sp) - STORE x31, 31*REGBYTES(sp) - - csrr a0, mcause - csrr a1, mepc - mv a2, sp - call handle_trap - csrw mepc, a0 - - # Remain in M-mode after mret - li t0, MSTATUS_MPP - csrs mstatus, t0 - - LOAD x1, 1*REGBYTES(sp) - LOAD x2, 2*REGBYTES(sp) - LOAD x3, 3*REGBYTES(sp) - LOAD x4, 4*REGBYTES(sp) - LOAD x5, 5*REGBYTES(sp) - LOAD x6, 6*REGBYTES(sp) - LOAD x7, 7*REGBYTES(sp) - LOAD x8, 8*REGBYTES(sp) - LOAD x9, 9*REGBYTES(sp) - LOAD x10, 10*REGBYTES(sp) - LOAD x11, 11*REGBYTES(sp) - LOAD x12, 12*REGBYTES(sp) - LOAD x13, 13*REGBYTES(sp) - LOAD x14, 14*REGBYTES(sp) - LOAD x15, 15*REGBYTES(sp) - LOAD x16, 16*REGBYTES(sp) - LOAD x17, 17*REGBYTES(sp) - LOAD x18, 18*REGBYTES(sp) - LOAD x19, 19*REGBYTES(sp) - LOAD x20, 20*REGBYTES(sp) - LOAD x21, 21*REGBYTES(sp) - LOAD x22, 22*REGBYTES(sp) - LOAD x23, 23*REGBYTES(sp) - LOAD x24, 24*REGBYTES(sp) - LOAD x25, 25*REGBYTES(sp) - LOAD x26, 26*REGBYTES(sp) - LOAD x27, 27*REGBYTES(sp) - LOAD x28, 28*REGBYTES(sp) - LOAD x29, 29*REGBYTES(sp) - LOAD x30, 30*REGBYTES(sp) - LOAD x31, 31*REGBYTES(sp) - - addi sp, sp, 32*REGBYTES - mret - -.weak handle_trap -handle_trap: -1: - j 1b - -#endif diff --git a/fpga_spn/bsp/env/freedom-e300-arty/flash.lds b/fpga_spn/bsp/env/freedom-e300-arty/flash.lds deleted file mode 100644 index 6b37141..0000000 --- a/fpga_spn/bsp/env/freedom-e300-arty/flash.lds +++ /dev/null @@ -1,161 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - flash (rxai!w) : ORIGIN = 0x20400000, LENGTH = 512M - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K -} - -PHDRS -{ - flash PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 2K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >flash AT>flash :flash - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >flash AT>flash :flash - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >flash AT>flash :flash - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - .rodata : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - } >flash AT>flash :flash - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >flash AT>flash :flash - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >flash AT>flash :flash - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >flash AT>flash :flash - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >flash AT>flash :flash - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >flash AT>flash :flash - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >flash AT>flash :flash - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>flash :ram_init - - .data : - { - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>flash :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack ORIGIN(ram) + LENGTH(ram) - __stack_size : - { - PROVIDE( _heap_end = . ); - . = __stack_size; - PROVIDE( _sp = . ); - } >ram AT>ram :ram -} diff --git a/fpga_spn/bsp/env/freedom-e300-arty/init.c b/fpga_spn/bsp/env/freedom-e300-arty/init.c deleted file mode 100644 index a6f4b39..0000000 --- a/fpga_spn/bsp/env/freedom-e300-arty/init.c +++ /dev/null @@ -1,87 +0,0 @@ -//See LICENSE for license details. -#include -#include -#include - -#include "platform.h" -#include "encoding.h" - -extern int main(int argc, char** argv); -extern void trap_entry(); - -static unsigned long get_cpu_freq() -{ - return 65000000; -} - -unsigned long get_timer_freq() -{ - return get_cpu_freq(); -} - -uint64_t get_timer_value() -{ -#if __riscv_xlen == 32 - while (1) { - uint32_t hi = read_csr(mcycleh); - uint32_t lo = read_csr(mcycle); - if (hi == read_csr(mcycleh)) - return ((uint64_t)hi << 32) | lo; - } -#else - return read_csr(mcycle); -#endif -} - -static void uart_init(size_t baud_rate) -{ - GPIO_REG(GPIO_IOF_SEL) &= ~IOF0_UART0_MASK; - GPIO_REG(GPIO_IOF_EN) |= IOF0_UART0_MASK; - UART0_REG(UART_REG_DIV) = get_cpu_freq() / baud_rate - 1; - UART0_REG(UART_REG_TXCTRL) |= UART_TXEN; -} - - -#ifdef USE_PLIC -extern void handle_m_ext_interrupt(); -#endif - -#ifdef USE_M_TIME -extern void handle_m_time_interrupt(); -#endif - -uintptr_t handle_trap(uintptr_t mcause, uintptr_t epc) -{ - if (0){ -#ifdef USE_PLIC - // External Machine-Level interrupt from PLIC - } else if ((mcause & MCAUSE_INT) && ((mcause & MCAUSE_CAUSE) == IRQ_M_EXT)) { - handle_m_ext_interrupt(); -#endif -#ifdef USE_M_TIME - // External Machine-Level interrupt from PLIC - } else if ((mcause & MCAUSE_INT) && ((mcause & MCAUSE_CAUSE) == IRQ_M_TIMER)){ - handle_m_time_interrupt(); -#endif - } - else { - write(1, "Unhandled Trap:\n", 16); - _exit(1 + mcause); - } - return epc; -} - -void _init() -{ - #ifndef NO_INIT - uart_init(115200); - - printf("core freq at %d Hz\n", get_cpu_freq()); - - write_csr(mtvec, &trap_entry); - #endif -} - -void _fini() -{ -} diff --git a/fpga_spn/bsp/env/freedom-e300-arty/openocd.cfg b/fpga_spn/bsp/env/freedom-e300-arty/openocd.cfg deleted file mode 100644 index f4b28ed..0000000 --- a/fpga_spn/bsp/env/freedom-e300-arty/openocd.cfg +++ /dev/null @@ -1,30 +0,0 @@ -adapter_khz 10000 - -#source [find interface/ftdi/olimex-arm-usb-tiny-h.cfg] - -interface ftdi -ftdi_device_desc "Olimex OpenOCD JTAG ARM-USB-TINY-H" -ftdi_vid_pid 0x15ba 0x002a - -ftdi_layout_init 0x0808 0x0a1b -ftdi_layout_signal nSRST -oe 0x0200 -ftdi_layout_signal nTRST -data 0x0100 -oe 0x0100 -ftdi_layout_signal LED -data 0x0800 -# - -set _CHIPNAME riscv -jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x10e31913 - -set _TARGETNAME $_CHIPNAME.cpu -target create $_TARGETNAME riscv -chain-position $_TARGETNAME -$_TARGETNAME configure -work-area-phys 0x80000000 -work-area-size 10000 -work-area-backup 1 - -flash bank my_first_flash fespi 0x20000000 0 0 0 $_TARGETNAME -init -#reset -if {[ info exists pulse_srst]} { - ftdi_set_signal nSRST 0 - ftdi_set_signal nSRST z -} -halt -#flash protect 0 64 last off diff --git a/fpga_spn/bsp/env/freedom-e300-arty/platform.h b/fpga_spn/bsp/env/freedom-e300-arty/platform.h deleted file mode 100644 index 8ff7ae6..0000000 --- a/fpga_spn/bsp/env/freedom-e300-arty/platform.h +++ /dev/null @@ -1,124 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_PLATFORM_H -#define _SIFIVE_PLATFORM_H - -// Some things missing from the official encoding.h -#define MCAUSE_INT 0x80000000 -#define MCAUSE_CAUSE 0x7FFFFFFF - -#include "sifive/const.h" -#include "sifive/devices/aon.h" -#include "sifive/devices/clint.h" -#include "sifive/devices/gpio.h" -#include "sifive/devices/plic.h" -#include "sifive/devices/pwm.h" -#include "sifive/devices/spi.h" -#include "sifive/devices/uart.h" - -/**************************************************************************** - * Platform definitions - *****************************************************************************/ - -#define TRAPVEC_TABLE_CTRL_ADDR _AC(0x00001010,UL) -#define CLINT_CTRL_ADDR _AC(0x02000000,UL) -#define PLIC_CTRL_ADDR _AC(0x0C000000,UL) -#define AON_CTRL_ADDR _AC(0x10000000,UL) -#define GPIO_CTRL_ADDR _AC(0x10012000,UL) -#define UART0_CTRL_ADDR _AC(0x10013000,UL) -#define SPI0_CTRL_ADDR _AC(0x10014000,UL) -#define PWM0_CTRL_ADDR _AC(0x10015000,UL) -#define UART1_CTRL_ADDR _AC(0x10023000,UL) -#define SPI1_CTRL_ADDR _AC(0x10024000,UL) -#define PWM1_CTRL_ADDR _AC(0x10025000,UL) -#define SPI2_CTRL_ADDR _AC(0x10034000,UL) -#define PWM2_CTRL_ADDR _AC(0x10035000,UL) -#define SPI0_MMAP_ADDR _AC(0x20000000,UL) -#define MEM_CTRL_ADDR _AC(0x80000000,UL) - -// IOF Mappings -#define IOF0_SPI1_MASK _AC(0x000007FC,UL) -#define SPI11_NUM_SS (4) -#define IOF_SPI1_SS0 (2u) -#define IOF_SPI1_SS1 (8u) -#define IOF_SPI1_SS2 (9u) -#define IOF_SPI1_SS3 (10u) -#define IOF_SPI1_MOSI (3u) -#define IOF_SPI1_MISO (4u) -#define IOF_SPI1_SCK (5u) -#define IOF_SPI1_DQ0 (3u) -#define IOF_SPI1_DQ1 (4u) -#define IOF_SPI1_DQ2 (6u) -#define IOF_SPI1_DQ3 (7u) - -#define IOF0_SPI2_MASK _AC(0xFC000000,UL) -#define SPI2_NUM_SS (1) -#define IOF_SPI2_SS0 (26u) -#define IOF_SPI2_MOSI (27u) -#define IOF_SPI2_MISO (28u) -#define IOF_SPI2_SCK (29u) -#define IOF_SPI2_DQ0 (27u) -#define IOF_SPI2_DQ1 (28u) -#define IOF_SPI2_DQ2 (30u) -#define IOF_SPI2_DQ3 (31u) - -#define IOF0_UART0_MASK _AC(0x00030000, UL) -#define IOF_UART0_RX (16u) -#define IOF_UART0_TX (17u) - -#define IOF0_UART1_MASK _AC(0x03000000, UL) -#define IOF_UART1_RX (24u) -#define IOF_UART1_TX (25u) - -#define IOF1_PWM0_MASK _AC(0x0000000F, UL) -#define IOF1_PWM1_MASK _AC(0x00780000, UL) -#define IOF1_PWM2_MASK _AC(0x00003C00, UL) - -// Interrupt Numbers -#define INT_RESERVED 0 -#define INT_WDOGCMP 1 -#define INT_RTCCMP 2 -#define INT_UART0_BASE 3 -#define INT_UART1_BASE 4 -#define INT_SPI0_BASE 5 -#define INT_SPI1_BASE 6 -#define INT_SPI2_BASE 7 -#define INT_GPIO_BASE 8 -#define INT_PWM0_BASE 40 -#define INT_PWM1_BASE 44 -#define INT_PWM2_BASE 48 - -// Helper functions -#define _REG32(p, i) (*(volatile uint32_t *) ((p) + (i))) -#define _REG32P(p, i) ((volatile uint32_t *) ((p) + (i))) -#define AON_REG(offset) _REG32(AON_CTRL_ADDR, offset) -#define CLINT_REG(offset) _REG32(CLINT_CTRL_ADDR, offset) -#define GPIO_REG(offset) _REG32(GPIO_CTRL_ADDR, offset) -#define OTP_REG(offset) _REG32(OTP_CTRL_ADDR, offset) -#define PLIC_REG(offset) _REG32(PLIC_CTRL_ADDR, offset) -#define PWM0_REG(offset) _REG32(PWM0_CTRL_ADDR, offset) -#define PWM1_REG(offset) _REG32(PWM1_CTRL_ADDR, offset) -#define PWM2_REG(offset) _REG32(PWM2_CTRL_ADDR, offset) -#define SPI0_REG(offset) _REG32(SPI0_CTRL_ADDR, offset) -#define SPI1_REG(offset) _REG32(SPI1_CTRL_ADDR, offset) -#define SPI2_REG(offset) _REG32(SPI2_CTRL_ADDR, offset) -#define UART0_REG(offset) _REG32(UART0_CTRL_ADDR, offset) -#define UART1_REG(offset) _REG32(UART1_CTRL_ADDR, offset) - -// Misc - -#include - - -#define NUM_GPIO 32 - -#define PLIC_NUM_INTERRUPTS 52 -#define PLIC_NUM_PRIORITIES 7 - -#define HAS_BOARD_BUTTONS -#include "hifive1.h" - -unsigned long get_timer_freq(void); -uint64_t get_timer_value(void); - -#endif /* _SIFIVE_PLATFORM_H */ diff --git a/fpga_spn/bsp/env/freedom-e300-arty/settings.mk b/fpga_spn/bsp/env/freedom-e300-arty/settings.mk deleted file mode 100644 index 230fccc..0000000 --- a/fpga_spn/bsp/env/freedom-e300-arty/settings.mk +++ /dev/null @@ -1,3 +0,0 @@ -# Describes the CPU on this board to the rest of the SDK. -RISCV_ARCH := rv32imac -RISCV_ABI := ilp32 diff --git a/fpga_spn/bsp/env/freedom-e300-hifive1/dhrystone.lds b/fpga_spn/bsp/env/freedom-e300-hifive1/dhrystone.lds deleted file mode 100644 index cc9cd9b..0000000 --- a/fpga_spn/bsp/env/freedom-e300-hifive1/dhrystone.lds +++ /dev/null @@ -1,157 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - flash (rxai!w) : ORIGIN = 0x20400000, LENGTH = 512M - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K -} - -PHDRS -{ - flash PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 2K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >flash AT>flash :flash - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >flash AT>flash :flash - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >flash AT>flash :flash - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >flash AT>flash :flash - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >flash AT>flash :flash - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >flash AT>flash :flash - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >flash AT>flash :flash - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >flash AT>flash :flash - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >flash AT>flash :flash - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>flash :ram_init - - .data : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>flash :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack ORIGIN(ram) + LENGTH(ram) - __stack_size : - { - PROVIDE( _heap_end = . ); - . = __stack_size; - PROVIDE( _sp = . ); - } >ram AT>ram :ram -} diff --git a/fpga_spn/bsp/env/freedom-e300-hifive1/flash.lds b/fpga_spn/bsp/env/freedom-e300-hifive1/flash.lds deleted file mode 100644 index 22f90c6..0000000 --- a/fpga_spn/bsp/env/freedom-e300-hifive1/flash.lds +++ /dev/null @@ -1,166 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - flash (rxai!w) : ORIGIN = 0x20400000, LENGTH = 512M - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 512K -} - -PHDRS -{ - flash PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 2K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >flash AT>flash :flash - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >flash AT>flash :flash - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >flash AT>flash :flash - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - .rodata : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - } >flash AT>flash :flash - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >flash AT>flash :flash - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >flash AT>flash :flash - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >flash AT>flash :flash - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >flash AT>flash :flash - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >flash AT>flash :flash - - .except : - { - *(.gcc_except_table.*) - } >flash AT>flash :flash - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >flash AT>flash :flash - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>flash :ram_init - - .data : - { - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>flash :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack ORIGIN(ram) + LENGTH(ram) - __stack_size : - { - PROVIDE( _heap_end = . ); - . = __stack_size; - PROVIDE( _sp = . ); - } >ram AT>ram :ram -} diff --git a/fpga_spn/bsp/env/freedom-e300-hifive1/init.c b/fpga_spn/bsp/env/freedom-e300-hifive1/init.c deleted file mode 100644 index 621a6e2..0000000 --- a/fpga_spn/bsp/env/freedom-e300-hifive1/init.c +++ /dev/null @@ -1,238 +0,0 @@ -#include -#include -#include - -#include "platform.h" -#include "encoding.h" - -extern int main(int argc, char** argv); -extern void trap_entry(); - -static unsigned long mtime_lo(void) -{ - return *(volatile unsigned long *)(CLINT_CTRL_ADDR + CLINT_MTIME); -} - -#ifdef __riscv32 - -static uint32_t mtime_hi(void) -{ - return *(volatile uint32_t *)(CLINT_CTRL_ADDR + CLINT_MTIME + 4); -} - -uint64_t get_timer_value() -{ - while (1) { - uint32_t hi = mtime_hi(); - uint32_t lo = mtime_lo(); - if (hi == mtime_hi()) - return ((uint64_t)hi << 32) | lo; - } -} - -#else /* __riscv32 */ - -uint64_t get_timer_value() -{ - return mtime_lo(); -} - -#endif - -unsigned long get_timer_freq() -{ - return 32768; -} - -static void use_hfrosc(int div, int trim) -{ - // Make sure the HFROSC is running at its default setting - PRCI_REG(PRCI_HFROSCCFG) = (ROSC_DIV(div) | ROSC_TRIM(trim) | ROSC_EN(1)); - while ((PRCI_REG(PRCI_HFROSCCFG) & ROSC_RDY(1)) == 0) ; - PRCI_REG(PRCI_PLLCFG) &= ~PLL_SEL(1); -} - -static void use_pll(int refsel, int bypass, int r, int f, int q) -{ - // Ensure that we aren't running off the PLL before we mess with it. - if (PRCI_REG(PRCI_PLLCFG) & PLL_SEL(1)) { - // Make sure the HFROSC is running at its default setting - use_hfrosc(4, 16); - } - - // Set PLL Source to be HFXOSC if available. - uint32_t config_value = 0; - - config_value |= PLL_REFSEL(refsel); - - if (bypass) { - // Bypass - config_value |= PLL_BYPASS(1); - - PRCI_REG(PRCI_PLLCFG) = config_value; - - // If we don't have an HFXTAL, this doesn't really matter. - // Set our Final output divide to divide-by-1: - PRCI_REG(PRCI_PLLDIV) = (PLL_FINAL_DIV_BY_1(1) | PLL_FINAL_DIV(0)); - } else { - // In case we are executing from QSPI, - // (which is quite likely) we need to - // set the QSPI clock divider appropriately - // before boosting the clock frequency. - - // Div = f_sck/2 - SPI0_REG(SPI_REG_SCKDIV) = 8; - - // Set DIV Settings for PLL - // Both HFROSC and HFXOSC are modeled as ideal - // 16MHz sources (assuming dividers are set properly for - // HFROSC). - // (Legal values of f_REF are 6-48MHz) - - // Set DIVR to divide-by-2 to get 8MHz frequency - // (legal values of f_R are 6-12 MHz) - - config_value |= PLL_BYPASS(1); - config_value |= PLL_R(r); - - // Set DIVF to get 512Mhz frequncy - // There is an implied multiply-by-2, 16Mhz. - // So need to write 32-1 - // (legal values of f_F are 384-768 MHz) - config_value |= PLL_F(f); - - // Set DIVQ to divide-by-2 to get 256 MHz frequency - // (legal values of f_Q are 50-400Mhz) - config_value |= PLL_Q(q); - - // Set our Final output divide to divide-by-1: - PRCI_REG(PRCI_PLLDIV) = (PLL_FINAL_DIV_BY_1(1) | PLL_FINAL_DIV(0)); - - PRCI_REG(PRCI_PLLCFG) = config_value; - - // Un-Bypass the PLL. - PRCI_REG(PRCI_PLLCFG) &= ~PLL_BYPASS(1); - - // Wait for PLL Lock - // Note that the Lock signal can be glitchy. - // Need to wait 100 us - // RTC is running at 32kHz. - // So wait 4 ticks of RTC. - uint32_t now = mtime_lo(); - while (mtime_lo() - now < 4) ; - - // Now it is safe to check for PLL Lock - while ((PRCI_REG(PRCI_PLLCFG) & PLL_LOCK(1)) == 0) ; - } - - // Switch over to PLL Clock source - PRCI_REG(PRCI_PLLCFG) |= PLL_SEL(1); -} - -static void use_default_clocks() -{ - // Turn off the LFROSC - AON_REG(AON_LFROSC) &= ~ROSC_EN(1); - - // Use HFROSC - use_hfrosc(4, 16); -} - -static unsigned long __attribute__((noinline)) measure_cpu_freq(size_t n) -{ - unsigned long start_mtime, delta_mtime; - unsigned long mtime_freq = get_timer_freq(); - - // Don't start measuruing until we see an mtime tick - unsigned long tmp = mtime_lo(); - do { - start_mtime = mtime_lo(); - } while (start_mtime == tmp); - - unsigned long start_mcycle = read_csr(mcycle); - - do { - delta_mtime = mtime_lo() - start_mtime; - } while (delta_mtime < n); - - unsigned long delta_mcycle = read_csr(mcycle) - start_mcycle; - - return (delta_mcycle / delta_mtime) * mtime_freq - + ((delta_mcycle % delta_mtime) * mtime_freq) / delta_mtime; -} - -unsigned long get_cpu_freq() -{ - static uint32_t cpu_freq; - - if (!cpu_freq) { - // warm up I$ - measure_cpu_freq(1); - // measure for real - cpu_freq = measure_cpu_freq(10); - } - - return cpu_freq; -} - -static void uart_init(size_t baud_rate) -{ - GPIO_REG(GPIO_IOF_SEL) &= ~IOF0_UART0_MASK; - GPIO_REG(GPIO_IOF_EN) |= IOF0_UART0_MASK; - UART0_REG(UART_REG_DIV) = get_cpu_freq() / baud_rate - 1; - UART0_REG(UART_REG_TXCTRL) |= UART_TXEN; -} - - - -#ifdef USE_PLIC -extern void handle_m_ext_interrupt(); -#endif - -#ifdef USE_M_TIME -extern void handle_m_time_interrupt(); -#endif - -uintptr_t handle_trap(uintptr_t mcause, uintptr_t epc) -{ - if (0){ -#ifdef USE_PLIC - // External Machine-Level interrupt from PLIC - } else if ((mcause & MCAUSE_INT) && ((mcause & MCAUSE_CAUSE) == IRQ_M_EXT)) { - handle_m_ext_interrupt(); -#endif -#ifdef USE_M_TIME - // External Machine-Level interrupt from PLIC - } else if ((mcause & MCAUSE_INT) && ((mcause & MCAUSE_CAUSE) == IRQ_M_TIMER)){ - handle_m_time_interrupt(); -#endif - } - else { - write(1, "trap\n", 5); - _exit(1 + mcause); - } - return epc; -} - -void _init() -{ - - #ifndef NO_INIT - use_default_clocks(); - use_pll(0, 0, 1, 31, 1); - uart_init(115200); - - printf("core freq at %d Hz\n", get_cpu_freq()); - - write_csr(mtvec, &trap_entry); - if (read_csr(misa) & (1 << ('F' - 'A'))) { // if F extension is present - write_csr(mstatus, MSTATUS_FS); // allow FPU instructions without trapping - write_csr(fcsr, 0); // initialize rounding mode, undefined at reset - } - #endif - -} - -void _fini() -{ -} diff --git a/fpga_spn/bsp/env/freedom-e300-hifive1/openocd.cfg b/fpga_spn/bsp/env/freedom-e300-hifive1/openocd.cfg deleted file mode 100644 index b531e9c..0000000 --- a/fpga_spn/bsp/env/freedom-e300-hifive1/openocd.cfg +++ /dev/null @@ -1,34 +0,0 @@ -adapter_khz 10000 - -interface ftdi -ftdi_device_desc "Dual RS232-HS" -ftdi_vid_pid 0x0403 0x6010 - -ftdi_layout_init 0x0008 0x001b -ftdi_layout_signal nSRST -oe 0x0020 -data 0x0020 - -#Reset Stretcher logic on FE310 is ~1 second long -#This doesn't apply if you use -# ftdi_set_signal, but still good to document -#adapter_nsrst_delay 1500 - -set _CHIPNAME riscv -jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x10e31913 - -set _TARGETNAME $_CHIPNAME.cpu -target create $_TARGETNAME riscv -chain-position $_TARGETNAME -$_TARGETNAME configure -work-area-phys 0x80000000 -work-area-size 10000 -work-area-backup 1 - -flash bank onboard_spi_flash fespi 0x20000000 0 0 0 $_TARGETNAME -init -#reset -- This type of reset is not implemented yet -if {[ info exists pulse_srst]} { - ftdi_set_signal nSRST 0 - ftdi_set_signal nSRST z - #Wait for the reset stretcher - #It will work without this, but - #will incur lots of delays for later commands. - sleep 1500 -} -halt -#flash protect 0 64 last off diff --git a/fpga_spn/bsp/env/freedom-e300-hifive1/platform.h b/fpga_spn/bsp/env/freedom-e300-hifive1/platform.h deleted file mode 100644 index 806fcfc..0000000 --- a/fpga_spn/bsp/env/freedom-e300-hifive1/platform.h +++ /dev/null @@ -1,133 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_PLATFORM_H -#define _SIFIVE_PLATFORM_H - -// Some things missing from the official encoding.h -#define MCAUSE_INT 0x80000000 -#define MCAUSE_CAUSE 0x7FFFFFFF - -#include "sifive/const.h" -#include "sifive/devices/aon.h" -#include "sifive/devices/clint.h" -#include "sifive/devices/gpio.h" -#include "sifive/devices/otp.h" -#include "sifive/devices/plic.h" -#include "sifive/devices/prci.h" -#include "sifive/devices/pwm.h" -#include "sifive/devices/spi.h" -#include "sifive/devices/uart.h" - -/**************************************************************************** - * Platform definitions - *****************************************************************************/ - -// Memory map -#define MASKROM_MEM_ADDR _AC(0x00001000,UL) -#define TRAPVEC_TABLE_CTRL_ADDR _AC(0x00001010,UL) -#define OTP_MEM_ADDR _AC(0x00020000,UL) -#define CLINT_CTRL_ADDR _AC(0x02000000,UL) -#define PLIC_CTRL_ADDR _AC(0x0C000000,UL) -#define AON_CTRL_ADDR _AC(0x10000000,UL) -#define PRCI_CTRL_ADDR _AC(0x10008000,UL) -#define OTP_CTRL_ADDR _AC(0x10010000,UL) -#define GPIO_CTRL_ADDR _AC(0x10012000,UL) -#define UART0_CTRL_ADDR _AC(0x10013000,UL) -#define SPI0_CTRL_ADDR _AC(0x10014000,UL) -#define PWM0_CTRL_ADDR _AC(0x10015000,UL) -#define UART1_CTRL_ADDR _AC(0x10023000,UL) -#define SPI1_CTRL_ADDR _AC(0x10024000,UL) -#define PWM1_CTRL_ADDR _AC(0x10025000,UL) -#define SPI2_CTRL_ADDR _AC(0x10034000,UL) -#define PWM2_CTRL_ADDR _AC(0x10035000,UL) -#define SPI0_MEM_ADDR _AC(0x20000000,UL) -#define MEM_CTRL_ADDR _AC(0x80000000,UL) - -// IOF masks -#define IOF0_SPI1_MASK _AC(0x000007FC,UL) -#define SPI11_NUM_SS (4) -#define IOF_SPI1_SS0 (2u) -#define IOF_SPI1_SS1 (8u) -#define IOF_SPI1_SS2 (9u) -#define IOF_SPI1_SS3 (10u) -#define IOF_SPI1_MOSI (3u) -#define IOF_SPI1_MISO (4u) -#define IOF_SPI1_SCK (5u) -#define IOF_SPI1_DQ0 (3u) -#define IOF_SPI1_DQ1 (4u) -#define IOF_SPI1_DQ2 (6u) -#define IOF_SPI1_DQ3 (7u) - -#define IOF0_SPI2_MASK _AC(0xFC000000,UL) -#define SPI2_NUM_SS (1) -#define IOF_SPI2_SS0 (26u) -#define IOF_SPI2_MOSI (27u) -#define IOF_SPI2_MISO (28u) -#define IOF_SPI2_SCK (29u) -#define IOF_SPI2_DQ0 (27u) -#define IOF_SPI2_DQ1 (28u) -#define IOF_SPI2_DQ2 (30u) -#define IOF_SPI2_DQ3 (31u) - -//#define IOF0_I2C_MASK _AC(0x00003000,UL) - -#define IOF0_UART0_MASK _AC(0x00030000, UL) -#define IOF_UART0_RX (16u) -#define IOF_UART0_TX (17u) - -#define IOF0_UART1_MASK _AC(0x03000000, UL) -#define IOF_UART1_RX (24u) -#define IOF_UART1_TX (25u) - -#define IOF1_PWM0_MASK _AC(0x0000000F, UL) -#define IOF1_PWM1_MASK _AC(0x00780000, UL) -#define IOF1_PWM2_MASK _AC(0x00003C00, UL) - -// Interrupt numbers -#define INT_RESERVED 0 -#define INT_WDOGCMP 1 -#define INT_RTCCMP 2 -#define INT_UART0_BASE 3 -#define INT_UART1_BASE 4 -#define INT_SPI0_BASE 5 -#define INT_SPI1_BASE 6 -#define INT_SPI2_BASE 7 -#define INT_GPIO_BASE 8 -#define INT_PWM0_BASE 40 -#define INT_PWM1_BASE 44 -#define INT_PWM2_BASE 48 - -// Helper functions -#define _REG32(p, i) (*(volatile uint32_t *) ((p) + (i))) -#define _REG32P(p, i) ((volatile uint32_t *) ((p) + (i))) -#define AON_REG(offset) _REG32(AON_CTRL_ADDR, offset) -#define CLINT_REG(offset) _REG32(CLINT_CTRL_ADDR, offset) -#define GPIO_REG(offset) _REG32(GPIO_CTRL_ADDR, offset) -#define OTP_REG(offset) _REG32(OTP_CTRL_ADDR, offset) -#define PLIC_REG(offset) _REG32(PLIC_CTRL_ADDR, offset) -#define PRCI_REG(offset) _REG32(PRCI_CTRL_ADDR, offset) -#define PWM0_REG(offset) _REG32(PWM0_CTRL_ADDR, offset) -#define PWM1_REG(offset) _REG32(PWM1_CTRL_ADDR, offset) -#define PWM2_REG(offset) _REG32(PWM2_CTRL_ADDR, offset) -#define SPI0_REG(offset) _REG32(SPI0_CTRL_ADDR, offset) -#define SPI1_REG(offset) _REG32(SPI1_CTRL_ADDR, offset) -#define SPI2_REG(offset) _REG32(SPI2_CTRL_ADDR, offset) -#define UART0_REG(offset) _REG32(UART0_CTRL_ADDR, offset) -#define UART1_REG(offset) _REG32(UART1_CTRL_ADDR, offset) - -// Misc - -#include - -#define NUM_GPIO 32 - -#define PLIC_NUM_INTERRUPTS 52 -#define PLIC_NUM_PRIORITIES 7 - -#include "hifive1.h" - -unsigned long get_cpu_freq(void); -unsigned long get_timer_freq(void); -uint64_t get_timer_value(void); - -#endif /* _SIFIVE_PLATFORM_H */ diff --git a/fpga_spn/bsp/env/freedom-e300-hifive1/settings.mk b/fpga_spn/bsp/env/freedom-e300-hifive1/settings.mk deleted file mode 100644 index 230fccc..0000000 --- a/fpga_spn/bsp/env/freedom-e300-hifive1/settings.mk +++ /dev/null @@ -1,3 +0,0 @@ -# Describes the CPU on this board to the rest of the SDK. -RISCV_ARCH := rv32imac -RISCV_ABI := ilp32 diff --git a/fpga_spn/bsp/env/hifive1.h b/fpga_spn/bsp/env/hifive1.h deleted file mode 100644 index 0db2f0f..0000000 --- a/fpga_spn/bsp/env/hifive1.h +++ /dev/null @@ -1,81 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_HIFIVE1_H -#define _SIFIVE_HIFIVE1_H - -#include - -/**************************************************************************** - * GPIO Connections - *****************************************************************************/ - -// These are the GPIO bit offsets for the RGB LED on HiFive1 Board. -// These are also mapped to RGB LEDs on the Freedom E300 Arty -// FPGA -// Dev Kit. - -#define RED_LED_OFFSET 22 -#define GREEN_LED_OFFSET 19 -#define BLUE_LED_OFFSET 21 - -// These are the GPIO bit offsets for the differen digital pins -// on the headers for both the HiFive1 Board and the Freedom E300 Arty FPGA Dev Kit. -#define PIN_0_OFFSET 16 -#define PIN_1_OFFSET 17 -#define PIN_2_OFFSET 18 -#define PIN_3_OFFSET 19 -#define PIN_4_OFFSET 20 -#define PIN_5_OFFSET 21 -#define PIN_6_OFFSET 22 -#define PIN_7_OFFSET 23 -#define PIN_8_OFFSET 0 -#define PIN_9_OFFSET 1 -#define PIN_10_OFFSET 2 -#define PIN_11_OFFSET 3 -#define PIN_12_OFFSET 4 -#define PIN_13_OFFSET 5 -//#define PIN_14_OFFSET 8 //This pin is not connected on either board. -#define PIN_15_OFFSET 9 -#define PIN_16_OFFSET 10 -#define PIN_17_OFFSET 11 -#define PIN_18_OFFSET 12 -#define PIN_19_OFFSET 13 - -// These are *PIN* numbers, not -// GPIO Offset Numbers. -#define PIN_SPI1_SCK (13u) -#define PIN_SPI1_MISO (12u) -#define PIN_SPI1_MOSI (11u) -#define PIN_SPI1_SS0 (10u) -#define PIN_SPI1_SS1 (14u) -#define PIN_SPI1_SS2 (15u) -#define PIN_SPI1_SS3 (16u) - -#define SS_PIN_TO_CS_ID(x) \ - ((x==PIN_SPI1_SS0 ? 0 : \ - (x==PIN_SPI1_SS1 ? 1 : \ - (x==PIN_SPI1_SS2 ? 2 : \ - (x==PIN_SPI1_SS3 ? 3 : \ - -1))))) - - -// These buttons are present only on the Freedom E300 Arty Dev Kit. -#ifdef HAS_BOARD_BUTTONS -#define BUTTON_0_OFFSET 15 -#define BUTTON_1_OFFSET 30 -#define BUTTON_2_OFFSET 31 - -#define INT_DEVICE_BUTTON_0 (INT_GPIO_BASE + BUTTON_0_OFFSET) -#define INT_DEVICE_BUTTON_1 (INT_GPIO_BASE + BUTTON_1_OFFSET) -#define INT_DEVICE_BUTTON_2 (INT_GPIO_BASE + BUTTON_2_OFFSET) - -#endif - -#define HAS_HFXOSC 1 -#define HAS_LFROSC_BYPASS 1 - -#define RTC_FREQ 32768 - -void write_hex(int fd, unsigned long int hex); - -#endif /* _SIFIVE_HIFIVE1_H */ diff --git a/fpga_spn/bsp/env/start.S b/fpga_spn/bsp/env/start.S deleted file mode 100644 index 4e9f665..0000000 --- a/fpga_spn/bsp/env/start.S +++ /dev/null @@ -1,111 +0,0 @@ -// See LICENSE for license details. -#include - -/* This is defined in sifive/platform.h, but that can't be included from - * assembly. */ -#define CLINT_CTRL_ADDR 0x02000000 - - .section .init - .globl _start - .type _start,@function - -_start: - .cfi_startproc - .cfi_undefined ra -.option push -.option norelax - la gp, __global_pointer$ -.option pop - la sp, _sp - -#if defined(ENABLE_SMP) - smp_pause(t0, t1) -#endif - - /* Load data section */ - la a0, _data_lma - la a1, _data - la a2, _edata - bgeu a1, a2, 2f -1: - lw t0, (a0) - sw t0, (a1) - addi a0, a0, 4 - addi a1, a1, 4 - bltu a1, a2, 1b -2: - - /* Clear bss section */ - la a0, __bss_start - la a1, _end - bgeu a0, a1, 2f -1: - sw zero, (a0) - addi a0, a0, 4 - bltu a0, a1, 1b -2: - - /* Call global constructors */ - la a0, __libc_fini_array - call atexit - call __libc_init_array - -#ifndef __riscv_float_abi_soft - /* Enable FPU */ - li t0, MSTATUS_FS - csrs mstatus, t0 - csrr t1, mstatus - and t1, t1, t0 - beqz t1, 1f - fssr x0 -1: -#endif - -#if defined(ENABLE_SMP) - smp_resume(t0, t1) - - csrr a0, mhartid - bnez a0, 2f -#endif - - auipc ra, 0 - addi sp, sp, -16 -#if __riscv_xlen == 32 - sw ra, 8(sp) -#else - sd ra, 8(sp) -#endif - - /* argc = argv = 0 */ - li a0, 0 - li a1, 0 - call main - tail exit -1: - j 1b - -#if defined(ENABLE_SMP) -2: - la t0, trap_entry - csrw mtvec, t0 - - csrr a0, mhartid - la t1, _sp - slli t0, a0, 10 - sub sp, t1, t0 - - auipc ra, 0 - addi sp, sp, -16 -#if __riscv_xlen == 32 - sw ra, 8(sp) -#else - sd ra, 8(sp) -#endif - - call secondary_main - tail exit - -1: - j 1b -#endif - .cfi_endproc diff --git a/fpga_spn/bsp/env/ventry.S b/fpga_spn/bsp/env/ventry.S deleted file mode 100644 index 5c82c48..0000000 --- a/fpga_spn/bsp/env/ventry.S +++ /dev/null @@ -1,288 +0,0 @@ -// See LICENSE for license details - -#ifndef VENTRY_S -#define VENTRY_S - -#include "encoding.h" -#include "sifive/bits.h" - -#only save caller registers -.macro TRAP_ENTRY - addi sp, sp, -16*REGBYTES - - STORE x1, 0*REGBYTES(sp) - STORE x5, 1*REGBYTES(sp) - STORE x6, 2*REGBYTES(sp) - STORE x7, 3*REGBYTES(sp) - STORE x10, 4*REGBYTES(sp) - STORE x11, 5*REGBYTES(sp) - STORE x12, 6*REGBYTES(sp) - STORE x13, 7*REGBYTES(sp) - STORE x14, 8*REGBYTES(sp) - STORE x15, 9*REGBYTES(sp) - STORE x16, 10*REGBYTES(sp) - STORE x17, 11*REGBYTES(sp) - STORE x28, 12*REGBYTES(sp) - STORE x29, 13*REGBYTES(sp) - STORE x30, 14*REGBYTES(sp) - STORE x31, 15*REGBYTES(sp) -.endm - -#restore caller registers -.macro TRAP_EXIT -# Remain in M-mode after mret - li t0, MSTATUS_MPP - csrs mstatus, t0 - - LOAD x1, 0*REGBYTES(sp) - LOAD x5, 1*REGBYTES(sp) - LOAD x6, 2*REGBYTES(sp) - LOAD x7, 3*REGBYTES(sp) - LOAD x10, 4*REGBYTES(sp) - LOAD x11, 5*REGBYTES(sp) - LOAD x12, 6*REGBYTES(sp) - LOAD x13, 7*REGBYTES(sp) - LOAD x14, 8*REGBYTES(sp) - LOAD x15, 9*REGBYTES(sp) - LOAD x16, 10*REGBYTES(sp) - LOAD x17, 11*REGBYTES(sp) - LOAD x28, 12*REGBYTES(sp) - LOAD x29, 13*REGBYTES(sp) - LOAD x30, 14*REGBYTES(sp) - LOAD x31, 15*REGBYTES(sp) - - addi sp, sp, 16*REGBYTES - mret -.endm - - - -#Vector table for E31/E51 - - .section .text.entry - .align 8 - .global vtrap_entry -vtrap_entry: - j sync_trap - .align 2 - j reserved - .align 2 - j reserved - .align 2 - j vmsi_Handler - .align 2 - j reserved - .align 2 - j reserved - .align 2 - j reserved - .align 2 - j vmti_Handler - .align 2 - j reserved - .align 2 - j reserved - .align 2 - j reserved - .align 2 - j vmei_Handler - .align 2 - j reserved - .align 2 - j reserved - .align 2 - j reserved - .align 2 - j reserved - .align 2 - j vlip_Handler0 - .align 2 - j vlip_Handler1 - .align 2 - j vlip_Handler2 - .align 2 - j vlip_Handler3 - .align 2 - j vlip_Handler4 - .align 2 - j vlip_Handler5 - .align 2 - j vlip_Handler6 - .align 2 - j vlip_Handler7 - .align 2 - j vlip_Handler8 - .align 2 - j vlip_Handler9 - .align 2 - j vlip_Handler10 - .align 2 - j vlip_Handler11 - .align 2 - j vlip_Handler12 - .align 2 - j vlip_Handler13 - .align 2 - j vlip_Handler14 - .align 2 - j vlip_Handler15 - -#synchronous trap -sync_trap: - TRAP_ENTRY - jal handle_sync_trap - TRAP_EXIT - -#Machine Software Interrupt -vmsi_Handler: - TRAP_ENTRY - jal reserved - TRAP_EXIT - -#Machine Timer Interrupt -vmti_Handler: - TRAP_ENTRY - jal handle_m_time_interrupt - TRAP_EXIT - -#Machine External Interrupt -vmei_Handler: - TRAP_ENTRY - jal handle_m_external_interrupt - TRAP_EXIT - -#LIP0 -vlip_Handler0: - TRAP_ENTRY - jal handle_local_interrupt0 - TRAP_EXIT - -#LIP1 -vlip_Handler1: - TRAP_ENTRY - jal handle_local_interrupt1 - TRAP_EXIT - -#LIP2 -vlip_Handler2: - TRAP_ENTRY - jal handle_local_interrupt2 - TRAP_EXIT - -#LIP3 -vlip_Handler3: - TRAP_ENTRY - jal handle_local_interrupt3 - TRAP_EXIT - -#LIP4 -vlip_Handler4: - TRAP_ENTRY - jal handle_local_interrupt4 - TRAP_EXIT - -#LIP5 -vlip_Handler5: - TRAP_ENTRY - jal handle_local_interrupt5 - TRAP_EXIT - -#LIP6 -vlip_Handler6: - TRAP_ENTRY - jal handle_local_interrupt6 - TRAP_EXIT - -#LIP7 -vlip_Handler7: - TRAP_ENTRY - jal handle_local_interrupt7 - TRAP_EXIT - -#LIP8 -vlip_Handler8: - TRAP_ENTRY - jal handle_local_interrupt8 - TRAP_EXIT - -#LIP9 -vlip_Handler9: - TRAP_ENTRY - jal handle_local_interrupt9 - TRAP_EXIT - -#LIP10 -vlip_Handler10: - TRAP_ENTRY - jal handle_local_interrupt10 - TRAP_EXIT - -#LIP11 -vlip_Handler11: - TRAP_ENTRY - jal handle_local_interrupt11 - TRAP_EXIT - -#LIP12 -vlip_Handler12: - TRAP_ENTRY - jal handle_local_interrupt12 - TRAP_EXIT - -#LIP13 -vlip_Handler13: - TRAP_ENTRY - jal handle_local_interrupt13 - TRAP_EXIT - -#LIP14 -vlip_Handler14: - TRAP_ENTRY - jal handle_local_interrupt14 - TRAP_EXIT - -#LIP15 -vlip_Handler15: - TRAP_ENTRY - jal handle_local_interrupt15 - TRAP_EXIT - -#unimplemented ISRs trap here -.weak reserved -reserved: -.weak handle_local_interrupt0 -handle_local_interrupt0: -.weak handle_local_interrupt1 -handle_local_interrupt1: -.weak handle_local_interrupt2 -handle_local_interrupt2: -.weak handle_local_interrupt3 -handle_local_interrupt3: -.weak handle_local_interrupt4 -handle_local_interrupt4: -.weak handle_local_interrupt5 -handle_local_interrupt5: -.weak handle_local_interrupt6 -handle_local_interrupt6: -.weak handle_local_interrupt7 -handle_local_interrupt7: -.weak handle_local_interrupt8 -handle_local_interrupt8: -.weak handle_local_interrupt9 -handle_local_interrupt9: -.weak handle_local_interrupt10 -handle_local_interrupt10: -.weak handle_local_interrupt11 -handle_local_interrupt11: -.weak handle_local_interrupt12 -handle_local_interrupt12: -.weak handle_local_interrupt13 -handle_local_interrupt13: -.weak handle_local_interrupt14 -handle_local_interrupt14: -.weak handle_local_interrupt15 -handle_local_interrupt15: -1: - j 1b - -#endif diff --git a/fpga_spn/bsp/include/sifive/bits.h b/fpga_spn/bsp/include/sifive/bits.h deleted file mode 100644 index bfe656f..0000000 --- a/fpga_spn/bsp/include/sifive/bits.h +++ /dev/null @@ -1,36 +0,0 @@ -// See LICENSE for license details. -#ifndef _RISCV_BITS_H -#define _RISCV_BITS_H - -#define likely(x) __builtin_expect((x), 1) -#define unlikely(x) __builtin_expect((x), 0) - -#define ROUNDUP(a, b) ((((a)-1)/(b)+1)*(b)) -#define ROUNDDOWN(a, b) ((a)/(b)*(b)) - -#define MAX(a, b) ((a) > (b) ? (a) : (b)) -#define MIN(a, b) ((a) < (b) ? (a) : (b)) -#define CLAMP(a, lo, hi) MIN(MAX(a, lo), hi) - -#define EXTRACT_FIELD(val, which) (((val) & (which)) / ((which) & ~((which)-1))) -#define INSERT_FIELD(val, which, fieldval) (((val) & ~(which)) | ((fieldval) * ((which) & ~((which)-1)))) - -#define STR(x) XSTR(x) -#define XSTR(x) #x - -#if __riscv_xlen == 64 -# define SLL32 sllw -# define STORE sd -# define LOAD ld -# define LWU lwu -# define LOG_REGBYTES 3 -#else -# define SLL32 sll -# define STORE sw -# define LOAD lw -# define LWU lw -# define LOG_REGBYTES 2 -#endif -#define REGBYTES (1 << LOG_REGBYTES) - -#endif diff --git a/fpga_spn/bsp/include/sifive/const.h b/fpga_spn/bsp/include/sifive/const.h deleted file mode 100644 index 8dcffbb..0000000 --- a/fpga_spn/bsp/include/sifive/const.h +++ /dev/null @@ -1,18 +0,0 @@ -// See LICENSE for license details. -/* Derived from */ - -#ifndef _SIFIVE_CONST_H -#define _SIFIVE_CONST_H - -#ifdef __ASSEMBLER__ -#define _AC(X,Y) X -#define _AT(T,X) X -#else -#define _AC(X,Y) (X##Y) -#define _AT(T,X) ((T)(X)) -#endif /* !__ASSEMBLER__*/ - -#define _BITUL(x) (_AC(1,UL) << (x)) -#define _BITULL(x) (_AC(1,ULL) << (x)) - -#endif /* _SIFIVE_CONST_H */ diff --git a/fpga_spn/bsp/include/sifive/devices/aon.h b/fpga_spn/bsp/include/sifive/devices/aon.h deleted file mode 100644 index 63f1db3..0000000 --- a/fpga_spn/bsp/include/sifive/devices/aon.h +++ /dev/null @@ -1,88 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_AON_H -#define _SIFIVE_AON_H - -/* Register offsets */ - -#define AON_WDOGCFG 0x000 -#define AON_WDOGCOUNT 0x008 -#define AON_WDOGS 0x010 -#define AON_WDOGFEED 0x018 -#define AON_WDOGKEY 0x01C -#define AON_WDOGCMP 0x020 - -#define AON_RTCCFG 0x040 -#define AON_RTCLO 0x048 -#define AON_RTCHI 0x04C -#define AON_RTCS 0x050 -#define AON_RTCCMP 0x060 - -#define AON_BACKUP0 0x080 -#define AON_BACKUP1 0x084 -#define AON_BACKUP2 0x088 -#define AON_BACKUP3 0x08C -#define AON_BACKUP4 0x090 -#define AON_BACKUP5 0x094 -#define AON_BACKUP6 0x098 -#define AON_BACKUP7 0x09C -#define AON_BACKUP8 0x0A0 -#define AON_BACKUP9 0x0A4 -#define AON_BACKUP10 0x0A8 -#define AON_BACKUP11 0x0AC -#define AON_BACKUP12 0x0B0 -#define AON_BACKUP13 0x0B4 -#define AON_BACKUP14 0x0B8 -#define AON_BACKUP15 0x0BC - -#define AON_PMUWAKEUPI0 0x100 -#define AON_PMUWAKEUPI1 0x104 -#define AON_PMUWAKEUPI2 0x108 -#define AON_PMUWAKEUPI3 0x10C -#define AON_PMUWAKEUPI4 0x110 -#define AON_PMUWAKEUPI5 0x114 -#define AON_PMUWAKEUPI6 0x118 -#define AON_PMUWAKEUPI7 0x11C -#define AON_PMUSLEEPI0 0x120 -#define AON_PMUSLEEPI1 0x124 -#define AON_PMUSLEEPI2 0x128 -#define AON_PMUSLEEPI3 0x12C -#define AON_PMUSLEEPI4 0x130 -#define AON_PMUSLEEPI5 0x134 -#define AON_PMUSLEEPI6 0x138 -#define AON_PMUSLEEPI7 0x13C -#define AON_PMUIE 0x140 -#define AON_PMUCAUSE 0x144 -#define AON_PMUSLEEP 0x148 -#define AON_PMUKEY 0x14C - -#define AON_LFROSC 0x070 -/* Constants */ - -#define AON_WDOGKEY_VALUE 0x51F15E -#define AON_WDOGFEED_VALUE 0xD09F00D - -#define AON_WDOGCFG_SCALE 0x0000000F -#define AON_WDOGCFG_RSTEN 0x00000100 -#define AON_WDOGCFG_ZEROCMP 0x00000200 -#define AON_WDOGCFG_ENALWAYS 0x00001000 -#define AON_WDOGCFG_ENCOREAWAKE 0x00002000 -#define AON_WDOGCFG_CMPIP 0x10000000 - -#define AON_RTCCFG_SCALE 0x0000000F -#define AON_RTCCFG_ENALWAYS 0x00001000 -#define AON_RTCCFG_CMPIP 0x10000000 - -#define AON_WAKEUPCAUSE_RESET 0x00 -#define AON_WAKEUPCAUSE_RTC 0x01 -#define AON_WAKEUPCAUSE_DWAKEUP 0x02 -#define AON_WAKEUPCAUSE_AWAKEUP 0x03 - -#define AON_RESETCAUSE_POWERON 0x0000 -#define AON_RESETCAUSE_EXTERNAL 0x0100 -#define AON_RESETCAUSE_WATCHDOG 0x0200 - -#define AON_PMUCAUSE_WAKEUPCAUSE 0x00FF -#define AON_PMUCAUSE_RESETCAUSE 0xFF00 - -#endif /* _SIFIVE_AON_H */ diff --git a/fpga_spn/bsp/include/sifive/devices/clic.h b/fpga_spn/bsp/include/sifive/devices/clic.h deleted file mode 100644 index e8dc2df..0000000 --- a/fpga_spn/bsp/include/sifive/devices/clic.h +++ /dev/null @@ -1,30 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_CLIC_H -#define _SIFIVE_CLIC_H - -#define CLIC_HART0 0x00800000 -#define CLIC_MSIP 0x0000 -#define CLIC_MSIP_size 0x4 -#define CLIC_MTIMECMP 0x4000 -#define CLIC_MTIMECMP_size 0x8 -#define CLIC_MTIME 0xBFF8 -#define CLIC_MTIME_size 0x8 - -#define CLIC_INTIP 0x000 -#define CLIC_INTIE 0x400 -#define CLIC_INTCFG 0x800 -#define CLIC_CFG 0xc00 - -// These interrupt IDs are consistent across old and new mtvec modes -#define SSIPID 1 -#define MSIPID 3 -#define STIPID 5 -#define MTIPID 7 -#define SEIPID 9 -#define MEIPID 11 -#define CSIPID 12 -#define LOCALINTIDBASE 16 - - -#endif /* _SIFIVE_CLIC_H */ diff --git a/fpga_spn/bsp/include/sifive/devices/clint.h b/fpga_spn/bsp/include/sifive/devices/clint.h deleted file mode 100644 index cd3e0c7..0000000 --- a/fpga_spn/bsp/include/sifive/devices/clint.h +++ /dev/null @@ -1,14 +0,0 @@ -// See LICENSE for license details - -#ifndef _SIFIVE_CLINT_H -#define _SIFIVE_CLINT_H - - -#define CLINT_MSIP 0x0000 -#define CLINT_MSIP_size 0x4 -#define CLINT_MTIMECMP 0x4000 -#define CLINT_MTIMECMP_size 0x8 -#define CLINT_MTIME 0xBFF8 -#define CLINT_MTIME_size 0x8 - -#endif /* _SIFIVE_CLINT_H */ diff --git a/fpga_spn/bsp/include/sifive/devices/gpio.h b/fpga_spn/bsp/include/sifive/devices/gpio.h deleted file mode 100644 index f7f0acb..0000000 --- a/fpga_spn/bsp/include/sifive/devices/gpio.h +++ /dev/null @@ -1,24 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_GPIO_H -#define _SIFIVE_GPIO_H - -#define GPIO_INPUT_VAL (0x00) -#define GPIO_INPUT_EN (0x04) -#define GPIO_OUTPUT_EN (0x08) -#define GPIO_OUTPUT_VAL (0x0C) -#define GPIO_PULLUP_EN (0x10) -#define GPIO_DRIVE (0x14) -#define GPIO_RISE_IE (0x18) -#define GPIO_RISE_IP (0x1C) -#define GPIO_FALL_IE (0x20) -#define GPIO_FALL_IP (0x24) -#define GPIO_HIGH_IE (0x28) -#define GPIO_HIGH_IP (0x2C) -#define GPIO_LOW_IE (0x30) -#define GPIO_LOW_IP (0x34) -#define GPIO_IOF_EN (0x38) -#define GPIO_IOF_SEL (0x3C) -#define GPIO_OUTPUT_XOR (0x40) - -#endif /* _SIFIVE_GPIO_H */ diff --git a/fpga_spn/bsp/include/sifive/devices/otp.h b/fpga_spn/bsp/include/sifive/devices/otp.h deleted file mode 100644 index 93833e2..0000000 --- a/fpga_spn/bsp/include/sifive/devices/otp.h +++ /dev/null @@ -1,23 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_OTP_H -#define _SIFIVE_OTP_H - -/* Register offsets */ - -#define OTP_LOCK 0x00 -#define OTP_CK 0x04 -#define OTP_OE 0x08 -#define OTP_SEL 0x0C -#define OTP_WE 0x10 -#define OTP_MR 0x14 -#define OTP_MRR 0x18 -#define OTP_MPP 0x1C -#define OTP_VRREN 0x20 -#define OTP_VPPEN 0x24 -#define OTP_A 0x28 -#define OTP_D 0x2C -#define OTP_Q 0x30 -#define OTP_READ_TIMINGS 0x34 - -#endif diff --git a/fpga_spn/bsp/include/sifive/devices/plic.h b/fpga_spn/bsp/include/sifive/devices/plic.h deleted file mode 100644 index e1ca5d6..0000000 --- a/fpga_spn/bsp/include/sifive/devices/plic.h +++ /dev/null @@ -1,31 +0,0 @@ -// See LICENSE for license details. - -#ifndef PLIC_H -#define PLIC_H - -#include - -// 32 bits per source -#define PLIC_PRIORITY_OFFSET _AC(0x0000,UL) -#define PLIC_PRIORITY_SHIFT_PER_SOURCE 2 -// 1 bit per source (1 address) -#define PLIC_PENDING_OFFSET _AC(0x1000,UL) -#define PLIC_PENDING_SHIFT_PER_SOURCE 0 - -//0x80 per target -#define PLIC_ENABLE_OFFSET _AC(0x2000,UL) -#define PLIC_ENABLE_SHIFT_PER_TARGET 7 - - -#define PLIC_THRESHOLD_OFFSET _AC(0x200000,UL) -#define PLIC_CLAIM_OFFSET _AC(0x200004,UL) -#define PLIC_THRESHOLD_SHIFT_PER_TARGET 12 -#define PLIC_CLAIM_SHIFT_PER_TARGET 12 - -#define PLIC_MAX_SOURCE 1023 -#define PLIC_SOURCE_MASK 0x3FF - -#define PLIC_MAX_TARGET 15871 -#define PLIC_TARGET_MASK 0x3FFF - -#endif /* PLIC_H */ diff --git a/fpga_spn/bsp/include/sifive/devices/prci.h b/fpga_spn/bsp/include/sifive/devices/prci.h deleted file mode 100644 index 1a3de58..0000000 --- a/fpga_spn/bsp/include/sifive/devices/prci.h +++ /dev/null @@ -1,56 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_PRCI_H -#define _SIFIVE_PRCI_H - -/* Register offsets */ - -#define PRCI_HFROSCCFG (0x0000) -#define PRCI_HFXOSCCFG (0x0004) -#define PRCI_PLLCFG (0x0008) -#define PRCI_PLLDIV (0x000C) -#define PRCI_PROCMONCFG (0x00F0) - -/* Fields */ -#define ROSC_DIV(x) (((x) & 0x2F) << 0 ) -#define ROSC_TRIM(x) (((x) & 0x1F) << 16) -#define ROSC_EN(x) (((x) & 0x1 ) << 30) -#define ROSC_RDY(x) (((x) & 0x1 ) << 31) - -#define XOSC_EN(x) (((x) & 0x1) << 30) -#define XOSC_RDY(x) (((x) & 0x1) << 31) - -#define PLL_R(x) (((x) & 0x7) << 0) -// single reserved bit for F LSB. -#define PLL_F(x) (((x) & 0x3F) << 4) -#define PLL_Q(x) (((x) & 0x3) << 10) -#define PLL_SEL(x) (((x) & 0x1) << 16) -#define PLL_REFSEL(x) (((x) & 0x1) << 17) -#define PLL_BYPASS(x) (((x) & 0x1) << 18) -#define PLL_LOCK(x) (((x) & 0x1) << 31) - -#define PLL_R_default 0x1 -#define PLL_F_default 0x1F -#define PLL_Q_default 0x3 - -#define PLL_REFSEL_HFROSC 0x0 -#define PLL_REFSEL_HFXOSC 0x1 - -#define PLL_SEL_HFROSC 0x0 -#define PLL_SEL_PLL 0x1 - -#define PLL_FINAL_DIV(x) (((x) & 0x3F) << 0) -#define PLL_FINAL_DIV_BY_1(x) (((x) & 0x1 ) << 8) - -#define PROCMON_DIV(x) (((x) & 0x1F) << 0) -#define PROCMON_TRIM(x) (((x) & 0x1F) << 8) -#define PROCMON_EN(x) (((x) & 0x1) << 16) -#define PROCMON_SEL(x) (((x) & 0x3) << 24) -#define PROCMON_NT_EN(x) (((x) & 0x1) << 28) - -#define PROCMON_SEL_HFCLK 0 -#define PROCMON_SEL_HFXOSCIN 1 -#define PROCMON_SEL_PLLOUTDIV 2 -#define PROCMON_SEL_PROCMON 3 - -#endif // _SIFIVE_PRCI_H diff --git a/fpga_spn/bsp/include/sifive/devices/pwm.h b/fpga_spn/bsp/include/sifive/devices/pwm.h deleted file mode 100644 index 067889a..0000000 --- a/fpga_spn/bsp/include/sifive/devices/pwm.h +++ /dev/null @@ -1,37 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_PWM_H -#define _SIFIVE_PWM_H - -/* Register offsets */ - -#define PWM_CFG 0x00 -#define PWM_COUNT 0x08 -#define PWM_S 0x10 -#define PWM_CMP0 0x20 -#define PWM_CMP1 0x24 -#define PWM_CMP2 0x28 -#define PWM_CMP3 0x2C - -/* Constants */ - -#define PWM_CFG_SCALE 0x0000000F -#define PWM_CFG_STICKY 0x00000100 -#define PWM_CFG_ZEROCMP 0x00000200 -#define PWM_CFG_DEGLITCH 0x00000400 -#define PWM_CFG_ENALWAYS 0x00001000 -#define PWM_CFG_ONESHOT 0x00002000 -#define PWM_CFG_CMP0CENTER 0x00010000 -#define PWM_CFG_CMP1CENTER 0x00020000 -#define PWM_CFG_CMP2CENTER 0x00040000 -#define PWM_CFG_CMP3CENTER 0x00080000 -#define PWM_CFG_CMP0GANG 0x01000000 -#define PWM_CFG_CMP1GANG 0x02000000 -#define PWM_CFG_CMP2GANG 0x04000000 -#define PWM_CFG_CMP3GANG 0x08000000 -#define PWM_CFG_CMP0IP 0x10000000 -#define PWM_CFG_CMP1IP 0x20000000 -#define PWM_CFG_CMP2IP 0x40000000 -#define PWM_CFG_CMP3IP 0x80000000 - -#endif /* _SIFIVE_PWM_H */ diff --git a/fpga_spn/bsp/include/sifive/devices/spi.h b/fpga_spn/bsp/include/sifive/devices/spi.h deleted file mode 100644 index 80ef345..0000000 --- a/fpga_spn/bsp/include/sifive/devices/spi.h +++ /dev/null @@ -1,80 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_SPI_H -#define _SIFIVE_SPI_H - -/* Register offsets */ - -#define SPI_REG_SCKDIV 0x00 -#define SPI_REG_SCKMODE 0x04 -#define SPI_REG_CSID 0x10 -#define SPI_REG_CSDEF 0x14 -#define SPI_REG_CSMODE 0x18 - -#define SPI_REG_DCSSCK 0x28 -#define SPI_REG_DSCKCS 0x2a -#define SPI_REG_DINTERCS 0x2c -#define SPI_REG_DINTERXFR 0x2e - -#define SPI_REG_FMT 0x40 -#define SPI_REG_TXFIFO 0x48 -#define SPI_REG_RXFIFO 0x4c -#define SPI_REG_TXCTRL 0x50 -#define SPI_REG_RXCTRL 0x54 - -#define SPI_REG_FCTRL 0x60 -#define SPI_REG_FFMT 0x64 - -#define SPI_REG_IE 0x70 -#define SPI_REG_IP 0x74 - -/* Fields */ - -#define SPI_SCK_PHA 0x1 -#define SPI_SCK_POL 0x2 - -#define SPI_FMT_PROTO(x) ((x) & 0x3) -#define SPI_FMT_ENDIAN(x) (((x) & 0x1) << 2) -#define SPI_FMT_DIR(x) (((x) & 0x1) << 3) -#define SPI_FMT_LEN(x) (((x) & 0xf) << 16) - -/* TXCTRL register */ -#define SPI_TXWM(x) ((x) & 0xffff) -/* RXCTRL register */ -#define SPI_RXWM(x) ((x) & 0xffff) - -#define SPI_IP_TXWM 0x1 -#define SPI_IP_RXWM 0x2 - -#define SPI_FCTRL_EN 0x1 - -#define SPI_INSN_CMD_EN 0x1 -#define SPI_INSN_ADDR_LEN(x) (((x) & 0x7) << 1) -#define SPI_INSN_PAD_CNT(x) (((x) & 0xf) << 4) -#define SPI_INSN_CMD_PROTO(x) (((x) & 0x3) << 8) -#define SPI_INSN_ADDR_PROTO(x) (((x) & 0x3) << 10) -#define SPI_INSN_DATA_PROTO(x) (((x) & 0x3) << 12) -#define SPI_INSN_CMD_CODE(x) (((x) & 0xff) << 16) -#define SPI_INSN_PAD_CODE(x) (((x) & 0xff) << 24) - -#define SPI_TXFIFO_FULL (1 << 31) -#define SPI_RXFIFO_EMPTY (1 << 31) - -/* Values */ - -#define SPI_CSMODE_AUTO 0 -#define SPI_CSMODE_HOLD 2 -#define SPI_CSMODE_OFF 3 - -#define SPI_DIR_RX 0 -#define SPI_DIR_TX 1 - -#define SPI_PROTO_S 0 -#define SPI_PROTO_D 1 -#define SPI_PROTO_Q 2 - -#define SPI_ENDIAN_MSB 0 -#define SPI_ENDIAN_LSB 1 - - -#endif /* _SIFIVE_SPI_H */ diff --git a/fpga_spn/bsp/include/sifive/devices/uart.h b/fpga_spn/bsp/include/sifive/devices/uart.h deleted file mode 100644 index 71bea6f..0000000 --- a/fpga_spn/bsp/include/sifive/devices/uart.h +++ /dev/null @@ -1,27 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_UART_H -#define _SIFIVE_UART_H - -/* Register offsets */ -#define UART_REG_TXFIFO 0x00 -#define UART_REG_RXFIFO 0x04 -#define UART_REG_TXCTRL 0x08 -#define UART_REG_RXCTRL 0x0c -#define UART_REG_IE 0x10 -#define UART_REG_IP 0x14 -#define UART_REG_DIV 0x18 - -/* TXCTRL register */ -#define UART_TXEN 0x1 -#define UART_TXWM(x) (((x) & 0xffff) << 16) - -/* RXCTRL register */ -#define UART_RXEN 0x1 -#define UART_RXWM(x) (((x) & 0xffff) << 16) - -/* IP register */ -#define UART_IP_TXWM 0x1 -#define UART_IP_RXWM 0x2 - -#endif /* _SIFIVE_UART_H */ diff --git a/fpga_spn/bsp/include/sifive/sections.h b/fpga_spn/bsp/include/sifive/sections.h deleted file mode 100644 index 6e1f051..0000000 --- a/fpga_spn/bsp/include/sifive/sections.h +++ /dev/null @@ -1,17 +0,0 @@ -// See LICENSE for license details. -#ifndef _SECTIONS_H -#define _SECTIONS_H - -extern unsigned char _rom[]; -extern unsigned char _rom_end[]; - -extern unsigned char _ram[]; -extern unsigned char _ram_end[]; - -extern unsigned char _ftext[]; -extern unsigned char _etext[]; -extern unsigned char _fbss[]; -extern unsigned char _ebss[]; -extern unsigned char _end[]; - -#endif /* _SECTIONS_H */ diff --git a/fpga_spn/bsp/include/sifive/smp.h b/fpga_spn/bsp/include/sifive/smp.h deleted file mode 100644 index 8e34388..0000000 --- a/fpga_spn/bsp/include/sifive/smp.h +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef SIFIVE_SMP -#define SIFIVE_SMP - -// The maximum number of HARTs this code supports -#ifndef MAX_HARTS -#define MAX_HARTS 32 -#endif -#define CLINT_END_HART_IPI CLINT_CTRL_ADDR + (MAX_HARTS*4) - -// The hart that non-SMP tests should run on -#ifndef NONSMP_HART -#define NONSMP_HART 0 -#endif - -/* If your test cannot handle multiple-threads, use this: - * smp_disable(reg1) - */ -#define smp_disable(reg1, reg2) \ - csrr reg1, mhartid ;\ - li reg2, NONSMP_HART ;\ - beq reg1, reg2, hart0_entry ;\ -42: ;\ - wfi ;\ - j 42b ;\ -hart0_entry: - -/* If your test needs to temporarily block multiple-threads, do this: - * smp_pause(reg1, reg2) - * ... single-threaded work ... - * smp_resume(reg1, reg2) - * ... multi-threaded work ... - */ - -#define smp_pause(reg1, reg2) \ - li reg2, 0x8 ;\ - csrw mie, reg2 ;\ - csrr reg2, mhartid ;\ - bnez reg2, 42f - -#define smp_resume(reg1, reg2) \ - li reg1, CLINT_CTRL_ADDR ;\ -41: ;\ - li reg2, 1 ;\ - sw reg2, 0(reg1) ;\ - addi reg1, reg1, 4 ;\ - li reg2, CLINT_END_HART_IPI ;\ - blt reg1, reg2, 41b ;\ -42: ;\ - wfi ;\ - csrr reg2, mip ;\ - andi reg2, reg2, 0x8 ;\ - beqz reg2, 42b ;\ - li reg1, CLINT_CTRL_ADDR ;\ - csrr reg2, mhartid ;\ - slli reg2, reg2, 2 ;\ - add reg2, reg2, reg1 ;\ - sw zero, 0(reg2) ;\ -41: ;\ - lw reg2, 0(reg1) ;\ - bnez reg2, 41b ;\ - addi reg1, reg1, 4 ;\ - li reg2, CLINT_END_HART_IPI ;\ - blt reg1, reg2, 41b - -#endif diff --git a/fpga_spn/bsp/libwrap/libwrap.mk b/fpga_spn/bsp/libwrap/libwrap.mk deleted file mode 100644 index 71bba3d..0000000 --- a/fpga_spn/bsp/libwrap/libwrap.mk +++ /dev/null @@ -1,56 +0,0 @@ -# See LICENSE for license details. - -ifndef _SIFIVE_MK_LIBWRAP -_SIFIVE_MK_LIBWRAP := # defined - -LIBWRAP_DIR := $(dir $(lastword $(MAKEFILE_LIST))) -LIBWRAP_DIR := $(LIBWRAP_DIR:/=) - -LIBWRAP_SRCS := \ - stdlib/malloc.c \ - sys/open.c \ - sys/lseek.c \ - sys/read.c \ - sys/write.c \ - sys/fstat.c \ - sys/stat.c \ - sys/close.c \ - sys/link.c \ - sys/unlink.c \ - sys/execve.c \ - sys/fork.c \ - sys/getpid.c \ - sys/kill.c \ - sys/wait.c \ - sys/isatty.c \ - sys/times.c \ - sys/sbrk.c \ - sys/_exit.c \ - sys/puts.c \ - misc/write_hex.c - -LIBWRAP_SRCS := $(foreach f,$(LIBWRAP_SRCS),$(LIBWRAP_DIR)/$(f)) -LIBWRAP_OBJS := $(LIBWRAP_SRCS:.c=.o) - -LIBWRAP_SYMS := malloc free \ - open lseek read write fstat stat close link unlink \ - execve fork getpid kill wait \ - isatty times sbrk _exit puts - -LIBWRAP := libwrap.a - -LINK_DEPS += $(LIBWRAP) - -LDFLAGS += $(foreach s,$(LIBWRAP_SYMS),-Wl,--wrap=$(s)) -LDFLAGS += $(foreach s,$(LIBWRAP_SYMS),-Wl,--wrap=_$(s)) -LDFLAGS += -L. -Wl,--start-group -lwrap -lc -Wl,--end-group - -CLEAN_OBJS += $(LIBWRAP_OBJS) - -$(LIBWRAP_OBJS): %.o: %.c $(HEADERS) - $(CC) $(CFLAGS) $(INCLUDES) -c -o $@ $< - -$(LIBWRAP): $(LIBWRAP_OBJS) - $(AR) rcs $@ $^ - -endif # _SIFIVE_MK_LIBWRAP diff --git a/fpga_spn/bsp/libwrap/misc/write_hex.c b/fpga_spn/bsp/libwrap/misc/write_hex.c deleted file mode 100644 index a35ad7a..0000000 --- a/fpga_spn/bsp/libwrap/misc/write_hex.c +++ /dev/null @@ -1,19 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include -#include "platform.h" - -void write_hex(int fd, unsigned long int hex) -{ - uint8_t ii; - uint8_t jj; - char towrite; - write(fd , "0x", 2); - for (ii = sizeof(unsigned long int) * 2 ; ii > 0; ii--) { - jj = ii - 1; - uint8_t digit = ((hex & (0xF << (jj*4))) >> (jj*4)); - towrite = digit < 0xA ? ('0' + digit) : ('A' + (digit - 0xA)); - write(fd, &towrite, 1); - } -} diff --git a/fpga_spn/bsp/libwrap/stdlib/malloc.c b/fpga_spn/bsp/libwrap/stdlib/malloc.c deleted file mode 100644 index 8f4f432..0000000 --- a/fpga_spn/bsp/libwrap/stdlib/malloc.c +++ /dev/null @@ -1,17 +0,0 @@ -/* See LICENSE for license details. */ - -/* These functions are intended for embedded RV32 systems and are - obviously incorrect in general. */ - -void* __wrap_malloc(unsigned long sz) -{ - extern void* sbrk(long); - void* res = sbrk(sz); - if ((long)res == -1) - return 0; - return res; -} - -void __wrap_free(void* ptr) -{ -} diff --git a/fpga_spn/bsp/libwrap/sys/_exit.c b/fpga_spn/bsp/libwrap/sys/_exit.c deleted file mode 100644 index 011464f..0000000 --- a/fpga_spn/bsp/libwrap/sys/_exit.c +++ /dev/null @@ -1,17 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "platform.h" -#include "weak_under_alias.h" - -void __wrap_exit(int code) -{ - const char message[] = "\nProgam has exited with code:"; - - write(STDERR_FILENO, message, sizeof(message) - 1); - write_hex(STDERR_FILENO, code); - write(STDERR_FILENO, "\n", 1); - - for (;;); -} -weak_under_alias(exit); diff --git a/fpga_spn/bsp/libwrap/sys/close.c b/fpga_spn/bsp/libwrap/sys/close.c deleted file mode 100644 index 199fe51..0000000 --- a/fpga_spn/bsp/libwrap/sys/close.c +++ /dev/null @@ -1,11 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "stub.h" -#include "weak_under_alias.h" - -int __wrap_close(int fd) -{ - return _stub(EBADF); -} -weak_under_alias(close); diff --git a/fpga_spn/bsp/libwrap/sys/execve.c b/fpga_spn/bsp/libwrap/sys/execve.c deleted file mode 100644 index f7be25a..0000000 --- a/fpga_spn/bsp/libwrap/sys/execve.c +++ /dev/null @@ -1,11 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "stub.h" -#include "weak_under_alias.h" - -int __wrap_execve(const char* name, char* const argv[], char* const env[]) -{ - return _stub(ENOMEM); -} -weak_under_alias(execve); diff --git a/fpga_spn/bsp/libwrap/sys/fork.c b/fpga_spn/bsp/libwrap/sys/fork.c deleted file mode 100644 index 13a3e65..0000000 --- a/fpga_spn/bsp/libwrap/sys/fork.c +++ /dev/null @@ -1,9 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "stub.h" - -int fork(void) -{ - return _stub(EAGAIN); -} diff --git a/fpga_spn/bsp/libwrap/sys/fstat.c b/fpga_spn/bsp/libwrap/sys/fstat.c deleted file mode 100644 index ff82bf9..0000000 --- a/fpga_spn/bsp/libwrap/sys/fstat.c +++ /dev/null @@ -1,18 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include -#include -#include "stub.h" -#include "weak_under_alias.h" - -int __wrap_fstat(int fd, struct stat* st) -{ - if (isatty(fd)) { - st->st_mode = S_IFCHR; - return 0; - } - - return _stub(EBADF); -} -weak_under_alias(fstat); diff --git a/fpga_spn/bsp/libwrap/sys/getpid.c b/fpga_spn/bsp/libwrap/sys/getpid.c deleted file mode 100644 index 195fbec..0000000 --- a/fpga_spn/bsp/libwrap/sys/getpid.c +++ /dev/null @@ -1,8 +0,0 @@ -/* See LICENSE of license details. */ -#include "weak_under_alias.h" - -int __wrap_getpid(void) -{ - return 1; -} -weak_under_alias(getpid); diff --git a/fpga_spn/bsp/libwrap/sys/isatty.c b/fpga_spn/bsp/libwrap/sys/isatty.c deleted file mode 100644 index 7bb82ab..0000000 --- a/fpga_spn/bsp/libwrap/sys/isatty.c +++ /dev/null @@ -1,13 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "weak_under_alias.h" - -int __wrap_isatty(int fd) -{ - if (fd == STDOUT_FILENO || fd == STDERR_FILENO) - return 1; - - return 0; -} -weak_under_alias(isatty); diff --git a/fpga_spn/bsp/libwrap/sys/kill.c b/fpga_spn/bsp/libwrap/sys/kill.c deleted file mode 100644 index 18b9bd4..0000000 --- a/fpga_spn/bsp/libwrap/sys/kill.c +++ /dev/null @@ -1,11 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "stub.h" -#include "weak_under_alias.h" - -int __wrap_kill(int pid, int sig) -{ - return _stub(EINVAL); -} -weak_under_alias(kill); diff --git a/fpga_spn/bsp/libwrap/sys/link.c b/fpga_spn/bsp/libwrap/sys/link.c deleted file mode 100644 index 0cad551..0000000 --- a/fpga_spn/bsp/libwrap/sys/link.c +++ /dev/null @@ -1,11 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "stub.h" -#include "weak_under_alias.h" - -int __wrap_link(const char *old_name, const char *new_name) -{ - return _stub(EMLINK); -} -weak_under_alias(link); diff --git a/fpga_spn/bsp/libwrap/sys/lseek.c b/fpga_spn/bsp/libwrap/sys/lseek.c deleted file mode 100644 index 4131449..0000000 --- a/fpga_spn/bsp/libwrap/sys/lseek.c +++ /dev/null @@ -1,16 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include -#include -#include "stub.h" -#include "weak_under_alias.h" - -off_t __wrap_lseek(int fd, off_t ptr, int dir) -{ - if (isatty(fd)) - return 0; - - return _stub(EBADF); -} -weak_under_alias(lseek); diff --git a/fpga_spn/bsp/libwrap/sys/open.c b/fpga_spn/bsp/libwrap/sys/open.c deleted file mode 100644 index c61415a..0000000 --- a/fpga_spn/bsp/libwrap/sys/open.c +++ /dev/null @@ -1,11 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "stub.h" -#include "weak_under_alias.h" - -int __wrap_open(const char* name, int flags, int mode) -{ - return _stub(ENOENT); -} -weak_under_alias(open); diff --git a/fpga_spn/bsp/libwrap/sys/openat.c b/fpga_spn/bsp/libwrap/sys/openat.c deleted file mode 100644 index 227c956..0000000 --- a/fpga_spn/bsp/libwrap/sys/openat.c +++ /dev/null @@ -1,11 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "stub.h" -#include "weak_under_alias.h" - -int __wrap_openat(int dirfd, const char* name, int flags, int mode) -{ - return _stub(ENOENT); -} -weak_under_alias(openat); diff --git a/fpga_spn/bsp/libwrap/sys/puts.c b/fpga_spn/bsp/libwrap/sys/puts.c deleted file mode 100644 index 50d6437..0000000 --- a/fpga_spn/bsp/libwrap/sys/puts.c +++ /dev/null @@ -1,28 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include -#include -#include - -#include "platform.h" -#include "stub.h" -#include "weak_under_alias.h" - -int __wrap_puts(const char *s) -{ - while (*s != '\0') { - while (UART0_REG(UART_REG_TXFIFO) & 0x80000000) ; - UART0_REG(UART_REG_TXFIFO) = *s; - - if (*s == '\n') { - while (UART0_REG(UART_REG_TXFIFO) & 0x80000000) ; - UART0_REG(UART_REG_TXFIFO) = '\r'; - } - - ++s; - } - - return 0; -} -weak_under_alias(puts); diff --git a/fpga_spn/bsp/libwrap/sys/read.c b/fpga_spn/bsp/libwrap/sys/read.c deleted file mode 100644 index 3226cdb..0000000 --- a/fpga_spn/bsp/libwrap/sys/read.c +++ /dev/null @@ -1,32 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include -#include -#include - -#include "platform.h" -#include "stub.h" -#include "weak_under_alias.h" - -ssize_t __wrap_read(int fd, void* ptr, size_t len) -{ - uint8_t * current = (uint8_t *)ptr; - volatile uint32_t * uart_rx = (uint32_t *)(UART0_CTRL_ADDR + UART_REG_RXFIFO); - volatile uint8_t * uart_rx_cnt = (uint8_t *)(UART0_CTRL_ADDR + UART_REG_RXCTRL + 2); - - ssize_t result = 0; - - if (isatty(fd)) { - for (current = (uint8_t *)ptr; - (current < ((uint8_t *)ptr) + len) && (*uart_rx_cnt > 0); - current ++) { - *current = *uart_rx; - result++; - } - return result; - } - - return _stub(EBADF); -} -weak_under_alias(read); diff --git a/fpga_spn/bsp/libwrap/sys/sbrk.c b/fpga_spn/bsp/libwrap/sys/sbrk.c deleted file mode 100644 index 12170b4..0000000 --- a/fpga_spn/bsp/libwrap/sys/sbrk.c +++ /dev/null @@ -1,18 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "weak_under_alias.h" - -void *__wrap_sbrk(ptrdiff_t incr) -{ - extern char _end[]; - extern char _heap_end[]; - static char *curbrk = _end; - - if ((curbrk + incr < _end) || (curbrk + incr > _heap_end)) - return NULL - 1; - - curbrk += incr; - return curbrk - incr; -} -weak_under_alias(sbrk); diff --git a/fpga_spn/bsp/libwrap/sys/stat.c b/fpga_spn/bsp/libwrap/sys/stat.c deleted file mode 100644 index 1576ca1..0000000 --- a/fpga_spn/bsp/libwrap/sys/stat.c +++ /dev/null @@ -1,12 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include -#include "stub.h" -#include "weak_under_alias.h" - -int __wrap_stat(const char* file, struct stat* st) -{ - return _stub(EACCES); -} -weak_under_alias(stat); diff --git a/fpga_spn/bsp/libwrap/sys/stub.h b/fpga_spn/bsp/libwrap/sys/stub.h deleted file mode 100644 index fb5e5be..0000000 --- a/fpga_spn/bsp/libwrap/sys/stub.h +++ /dev/null @@ -1,10 +0,0 @@ -/* See LICENSE of license details. */ -#ifndef _SIFIVE_SYS_STUB_H -#define _SIFIVE_SYS_STUB_H - -static inline int _stub(int err) -{ - return -1; -} - -#endif /* _SIFIVE_SYS_STUB_H */ diff --git a/fpga_spn/bsp/libwrap/sys/times.c b/fpga_spn/bsp/libwrap/sys/times.c deleted file mode 100644 index 55969a7..0000000 --- a/fpga_spn/bsp/libwrap/sys/times.c +++ /dev/null @@ -1,12 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include -#include "stub.h" -#include "weak_under_alias.h" - -clock_t __wrap_times(struct tms* buf) -{ - return _stub(EACCES); -} -weak_under_alias(times); diff --git a/fpga_spn/bsp/libwrap/sys/unlink.c b/fpga_spn/bsp/libwrap/sys/unlink.c deleted file mode 100644 index 09f4da7..0000000 --- a/fpga_spn/bsp/libwrap/sys/unlink.c +++ /dev/null @@ -1,11 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "stub.h" -#include "weak_under_alias.h" - -int __wrap_unlink(const char* name) -{ - return _stub(ENOENT); -} -weak_under_alias(unlink); diff --git a/fpga_spn/bsp/libwrap/sys/wait.c b/fpga_spn/bsp/libwrap/sys/wait.c deleted file mode 100644 index ea3225b..0000000 --- a/fpga_spn/bsp/libwrap/sys/wait.c +++ /dev/null @@ -1,9 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "stub.h" - -int wait(int* status) -{ - return _stub(ECHILD); -} diff --git a/fpga_spn/bsp/libwrap/sys/weak_under_alias.h b/fpga_spn/bsp/libwrap/sys/weak_under_alias.h deleted file mode 100644 index 7629353..0000000 --- a/fpga_spn/bsp/libwrap/sys/weak_under_alias.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef _BSP_LIBWRAP_WEAK_UNDER_ALIAS_H -#define _BSP_LIBWRAP_WEAK_UNDER_ALIAS_H - -#define weak_under_alias(name) \ - extern __typeof (__wrap_##name) __wrap__##name __attribute__ ((weak, alias ("__wrap_"#name))) - -#endif diff --git a/fpga_spn/bsp/libwrap/sys/write.c b/fpga_spn/bsp/libwrap/sys/write.c deleted file mode 100644 index b1e9a7e..0000000 --- a/fpga_spn/bsp/libwrap/sys/write.c +++ /dev/null @@ -1,31 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include -#include -#include - -#include "platform.h" -#include "stub.h" -#include "weak_under_alias.h" - -ssize_t __wrap_write(int fd, const void* ptr, size_t len) -{ - const uint8_t * current = (const char *)ptr; - - if (isatty(fd)) { - for (size_t jj = 0; jj < len; jj++) { - while (UART0_REG(UART_REG_TXFIFO) & 0x80000000) ; - UART0_REG(UART_REG_TXFIFO) = current[jj]; - - if (current[jj] == '\n') { - while (UART0_REG(UART_REG_TXFIFO) & 0x80000000) ; - UART0_REG(UART_REG_TXFIFO) = '\r'; - } - } - return len; - } - - return _stub(EBADF); -} -weak_under_alias(write); diff --git a/fpga_spn/raven_spn b/fpga_spn/raven_spn deleted file mode 100755 index db4b234..0000000 Binary files a/fpga_spn/raven_spn and /dev/null differ diff --git a/fpga_spn/src/bsp.h b/fpga_spn/src/bsp.h deleted file mode 100644 index f04f4f4..0000000 --- a/fpga_spn/src/bsp.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * bsp.h - * - * Created on: 30.07.2018 - * Author: eyck - */ - -#ifndef BSP_H_ -#define BSP_H_ - -#ifdef __cplusplus -extern "C" { -#endif -#include -#include -#include -extern void trap_entry(); -#ifdef __cplusplus -} -#endif - -#endif /* BSP_H_ */ diff --git a/fpga_spn/src/delay.c b/fpga_spn/src/delay.c deleted file mode 100644 index 24070b4..0000000 --- a/fpga_spn/src/delay.c +++ /dev/null @@ -1,123 +0,0 @@ -/* - * delay.c - * - * Created on: 30.07.2018 - * Author: eyck - */ - -#include "delay.h" - -#define rdmcycle(x) { \ - uint32_t lo, hi, hi2; \ - __asm__ __volatile__ ("1:\n\t" \ - "csrr %0, mcycleh\n\t" \ - "csrr %1, mcycle\n\t" \ - "csrr %2, mcycleh\n\t" \ - "bne %0, %2, 1b\n\t" \ - : "=r" (hi), "=r" (lo), "=r" (hi2)) ; \ - *(x) = lo | ((uint64_t) hi << 32); \ - } - -typedef struct { - uint32_t n; - uint32_t mult; - uint32_t shift; -} int_inverse ; - -int_inverse f_cpu_1000_inv; -int_inverse f_cpu_1000000_inv; - -uint32_t F_CPU=1000000; - -void calc_inv(uint32_t n, int_inverse * res){ - uint32_t one = ~0; - uint32_t d = one/n; - uint32_t r = one%n + 1; - if (r >= n) ++d; - if (d == 0) --d; - uint32_t shift = 0; - while ((d & 0x80000000) == 0){ - d <<= 1; - ++shift; - } - res->n = n; - res->mult = d; - res->shift = shift; -} - -uint32_t divide32_using_inverse(uint32_t n, int_inverse *inv){ - uint32_t d = (uint32_t)(((uint64_t)n * inv->mult) >> 32); - d >>= inv->shift; - if (n - d*inv->n >= inv->n) ++d; - return d; -} - -// Almost full-range 64/32 divide. -// If divisor-1 has i bits, then the answer is exact for n of up to 64-i bits -// e.g. for divisors up to a million, n can have up to 45 bits -// On RV32IM with divide32_using_inverse inlines this uses 5 multiplies, -// 33 instructions, zero branches, 3 loads, 0 stores. -uint64_t divide64_using_inverse(uint64_t n, int_inverse *inv){ - uint32_t preshift = (31 - inv->shift) & 31; - uint64_t d = (uint64_t)divide32_using_inverse(n >> preshift, inv) << preshift; - uint32_t r = n - d * inv->n; - d += divide32_using_inverse(r, inv); - return d; -} - - -uint32_t millis(){ - uint64_t x; - rdmcycle(&x); - x = divide64_using_inverse(x, &f_cpu_1000_inv); - return((uint32_t) (x & 0xFFFFFFFF)); -} - -uint32_t micros(void){ - uint64_t x; - rdmcycle(&x); - // For Power-of-two MHz F_CPU, - // this compiles into a simple shift, - // and is faster than the general solution. -#if F_CPU==16000000 - x = x / (F_CPU / 1000000); -#else -#if F_CPU==256000000 - x = x / (F_CPU / 1000000); -#else - x = divide64_using_inverse(x, &f_cpu_1000000_inv); -#endif -#endif - return((uint32_t) (x & 0xFFFFFFFF)); -} - - -void delayMS(uint32_t dwMs){ - uint64_t current, later; - rdmcycle(¤t); - later = current + dwMs * (F_CPU/1000); - if (later > current){ // usual case - while (later > current) - rdmcycle(¤t); - } else { // wrap. Though this is unlikely to be hit w/ 64-bit mcycle - while (later < current) - rdmcycle(¤t); - while (current < later) - rdmcycle(¤t); - } -} - -void delayUS(uint32_t dwUs){ - uint64_t current, later; - rdmcycle(¤t); - later = current + dwUs * (F_CPU/1000000); - if (later > current){ // usual case - while (later > current) - rdmcycle(¤t); - } else {// wrap. Though this is unlikely to be hit w/ 64-bit mcycle - while (later < current) - rdmcycle(¤t); - while (current < later) - rdmcycle(¤t); - } -} diff --git a/fpga_spn/src/delay.h b/fpga_spn/src/delay.h deleted file mode 100644 index 36ce098..0000000 --- a/fpga_spn/src/delay.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * delay.h - * - * Created on: 30.07.2018 - * Author: eyck - */ - -#ifndef DELAY_H_ -#define DELAY_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif -extern uint32_t F_CPU; - -void delayMS(uint32_t dwMs); -void delayUS(uint32_t dwUs); - -#ifdef __cplusplus -} -#endif - -#endif /* DELAY_H_ */ diff --git a/fpga_spn/src/dma_regs.h b/fpga_spn/src/dma_regs.h deleted file mode 100644 index 6886f5e..0000000 --- a/fpga_spn/src/dma_regs.h +++ /dev/null @@ -1,62 +0,0 @@ - -#ifndef _DMA_REGS_H_ -#define _DMA_REGS_H_ - -#include -#include - -#define DMA_REG_START 0x00 -#define DMA_REG_CLEAR_INTERRUPT 0x0C -#define DMA_REG_FPGA_ADDRESS 0x10 -#define DMA_REG_SC_ADDRESS 0x20 -#define DMA_REG_OPERATION 0x30 // 0 = READ, 1 = WRITE, 2 = ALLOC, 3 = FREE -#define DMA_REG_BYTES 0x40 -#define DMA_REG_ALLOC_ADDRESS 0x50 - -template -class dma_regs { -public: - // storage declarations -// BEGIN_BF_DECL(start_t, uint32_t); -// BF_FIELD(start, 0, 1); -// END_BF_DECL() r_start; - uint32_t r_start; - - uint32_t r_address; - - uint32_t r_operation; - - uint32_t r_bytes; - - static inline uint32_t& start_reg(){ - return *reinterpret_cast(BASE_ADDR+DMA_REG_START); - } - - static inline uint32_t& clear_interrupt_reg(){ - return *reinterpret_cast(BASE_ADDR+DMA_REG_CLEAR_INTERRUPT); - } - - static inline uint32_t & fpga_address_reg(){ - return *reinterpret_cast(BASE_ADDR+DMA_REG_FPGA_ADDRESS); - } - - static inline uint32_t & sc_address_reg(){ - return *reinterpret_cast(BASE_ADDR+DMA_REG_SC_ADDRESS); - } - - static inline uint32_t & operation_reg(){ - return *reinterpret_cast(BASE_ADDR+DMA_REG_OPERATION); - } - - static inline uint32_t & bytes_reg(){ - return *reinterpret_cast(BASE_ADDR+DMA_REG_BYTES); - } - - static inline uint32_t & alloc_address_reg(){ - return *reinterpret_cast(BASE_ADDR+DMA_REG_ALLOC_ADDRESS); - } - - -}; - -#endif // _SPN_REGS_H_ diff --git a/fpga_spn/src/init.h b/fpga_spn/src/init.h deleted file mode 100644 index 8515496..0000000 --- a/fpga_spn/src/init.h +++ /dev/null @@ -1,96 +0,0 @@ -#ifndef SRC_INIT_H_ -#define SRC_INIT_H_ - -#include -#include - -#include "delay.h" -#include "bsp.h" -#include "plic/plic_driver.h" - -typedef void (*function_ptr_t) (void); -//! Instance data for the PLIC. -plic_instance_t g_plic; -std::array g_ext_interrupt_handlers; -bool hw_interrupt{true}; -bool dma_interrupt{true}; - - -/*! \brief external interrupt handler - * - * routes the peripheral interrupts to the the respective handler - * - */ -extern "C" void handle_m_ext_interrupt() { - plic_source int_num = PLIC_claim_interrupt(&g_plic); - if ((int_num >=1 ) && (int_num < PLIC_NUM_INTERRUPTS)) - g_ext_interrupt_handlers[int_num](); - else - exit(1 + (uintptr_t) int_num); - PLIC_complete_interrupt(&g_plic, int_num); -} -/*! \brief dummy interrupt handler - * - */ -void no_interrupt_handler (void) {}; -/*! \brief configure the per-interrupt handler - * - */ -void configure_irq(size_t irq_num, function_ptr_t handler, unsigned char prio=1) { - g_ext_interrupt_handlers[irq_num] = handler; - // Priority must be set > 0 to trigger the interrupt. - PLIC_set_priority(&g_plic, irq_num, prio); - // Have to enable the interrupt both at the GPIO level, and at the PLIC level. - PLIC_enable_interrupt(&g_plic, irq_num); -} - -void wait_for_spn_interrupt() { - // wait until HW is done - if(hw_interrupt) { - do{ - asm("wfi"); - asm("nop"); - }while(hw_interrupt); - } - hw_interrupt=true; -} - -void wait_for_dma_interrupt() { - // wait until HW is done - if(dma_interrupt) { - do{ - asm("wfi"); - asm("nop"); - }while(dma_interrupt); - } - dma_interrupt=true; -} - -/*!\brief initializes platform - * - */ -void platform_init(){ - // UART init section TODO: clarify how to get the functions from init.c? - GPIO_REG(GPIO_IOF_SEL) &= ~IOF0_UART0_MASK; - GPIO_REG(GPIO_IOF_EN) |= IOF0_UART0_MASK; - UART0_REG(UART_REG_TXCTRL) |= UART_TXEN; - - F_CPU=PRCI_measure_mcycle_freq(20, RTC_FREQ); - printf("core freq at %d Hz\n", F_CPU); - // initialie interupt & trap handling - write_csr(mtvec, &trap_entry); - - PLIC_init(&g_plic, PLIC_CTRL_ADDR, PLIC_NUM_INTERRUPTS, PLIC_NUM_PRIORITIES, 0); - // Disable the machine & timer interrupts until setup is done. - clear_csr(mie, MIP_MEIP); - clear_csr(mie, MIP_MTIP); - for (auto& h:g_ext_interrupt_handlers) h=no_interrupt_handler; - // Enable interrupts in general. - set_csr(mstatus, MSTATUS_MIE); - // Enable the Machine-External bit in MIE - set_csr(mie, MIP_MEIP); - - //hw_interrupt = false; -} - -#endif /* SRC_INIT_H_ */ diff --git a/fpga_spn/src/io/gpio.h b/fpga_spn/src/io/gpio.h deleted file mode 100644 index 466f2d2..0000000 --- a/fpga_spn/src/io/gpio.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - * gpio.h - * - * Created on: 29.07.2018 - * Author: eyck - */ - -#ifndef GPIO_H_ -#define GPIO_H_ - -#include -#include - -template -class gpio_regs { -public: - static inline uint32_t& value_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_INPUT_VAL); - } - - static inline uint32_t& input_en_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_INPUT_EN); - } - - static inline uint32_t& output_en_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_OUTPUT_EN); - } - - static inline uint32_t& port_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_OUTPUT_VAL); - } - - static inline uint32_t& pue_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_PULLUP_EN); - } - - static inline uint32_t& ds_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_DRIVE); - } - - static inline uint32_t& rise_ie_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_RISE_IE); - } - - static inline uint32_t& rise_ip_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_RISE_IP); - } - - static inline uint32_t& fall_ie_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_FALL_IE); - } - - static inline uint32_t& fall_ip_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_FALL_IP); - } - - static inline uint32_t& high_ie_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_HIGH_IE); - } - - static inline uint32_t& high_ip_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_HIGH_IP); - } - - static inline uint32_t& low_ie_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_LOW_IE); - } - - static inline uint32_t& low_ip_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_LOW_IP); - } - - static inline uint32_t& iof_en_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_IOF_EN); - } - - static inline uint32_t& iof_sel_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_IOF_SEL); - } - - static inline uint32_t& out_xor_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_OUTPUT_XOR); - } - -}; - - - -#endif /* GPIO_H_ */ diff --git a/fpga_spn/src/io/pwm.h b/fpga_spn/src/io/pwm.h deleted file mode 100644 index 2aab61b..0000000 --- a/fpga_spn/src/io/pwm.h +++ /dev/null @@ -1,122 +0,0 @@ -/* - * pwm.h - * - * Created on: 29.07.2018 - * Author: eyck - */ - -#ifndef PWM_H_ -#define PWM_H_ - -#include -#include "util/bit_field.h" -#include -#include - -template -class pwm_regs { -public: - BEGIN_BF_DECL(pwmcfg_t, uint32_t); - BF_FIELD(scale, 0, 4); - BF_FIELD(sticky, 8, 1); - BF_FIELD(zerocmp, 9, 1); - BF_FIELD(deglitch, 10, 1); - BF_FIELD(enalways, 12, 1); - BF_FIELD(enoneshot, 13, 1); - BF_FIELD(cmp0center, 16, 1); - BF_FIELD(cmp1center, 17, 1); - BF_FIELD(cmp2center, 18, 1); - BF_FIELD(cmp3center, 19, 1); - BF_FIELD(cmp0gang, 24, 1); - BF_FIELD(cmp1gang, 25, 1); - BF_FIELD(cmp2gang, 26, 1); - BF_FIELD(cmp3gang, 27, 1); - BF_FIELD(cmp0ip, 28, 1); - BF_FIELD(cmp1ip, 29, 1); - BF_FIELD(cmp2ip, 30, 1); - BF_FIELD(cmp3ip, 31, 1); - END_BF_DECL(); - - BEGIN_BF_DECL(pwms_t, uint32_t); - BF_FIELD(s, 0, 16); - END_BF_DECL() r_pwms; - - BEGIN_BF_DECL(pwmcmp0_t, uint32_t); - BF_FIELD(cmp0, 0, 16); - END_BF_DECL() r_pwmcmp0; - - BEGIN_BF_DECL(pwmcmp1_t, uint32_t); - BF_FIELD(cmp0, 0, 16); - END_BF_DECL() r_pwmcmp1; - - BEGIN_BF_DECL(pwmcmp2_t, uint32_t); - BF_FIELD(cmp0, 0, 16); - END_BF_DECL() r_pwmcmp2; - - BEGIN_BF_DECL(pwmcmp3_t, uint32_t); - BF_FIELD(cmp0, 0, 16); - END_BF_DECL() r_pwmcmp3; - - static inline pwmcfg_t& cfg_reg(){ - return *reinterpret_cast(BASE_ADDR+PWM_CFG); - } - - static inline uint32_t& count_reg(){ - return *reinterpret_cast(BASE_ADDR+PWM_COUNT); - } - - static inline pwms_t& s_reg(){ - return *reinterpret_cast(BASE_ADDR+PWM_S); - } - - static inline pwmcmp0_t& cmp0_reg(){ - return *reinterpret_cast(BASE_ADDR+PWM_CMP0); - } - - static inline pwmcmp1_t& cmp1_reg(){ - return *reinterpret_cast(BASE_ADDR+PWM_CMP1); - } - - static inline pwmcmp2_t& cmp2_reg(){ - return *reinterpret_cast(BASE_ADDR+PWM_CMP2); - } - - static inline pwmcmp3_t& cmp3_reg(){ - return *reinterpret_cast(BASE_ADDR+PWM_CMP3); - } - - static inline bool oneshot_delay(long delay_us){ - auto scaling_factor=0; - while(delay_us/(1< std::numeric_limits::max()){ - scaling_factor++; - } - cfg_reg()=0; - count_reg()=0; - cfg_reg().scale=4+scaling_factor; // divide by 16 so we get 1us per pwm clock - cmp0_reg().cmp0 = delay_us/(1< -#include "util/bit_field.h" -#include -#include - -template -class spi_regs { -public: - // storage declarations - BEGIN_BF_DECL(sckdiv_t, uint32_t); - BF_FIELD(div, 0, 12); - END_BF_DECL(); - - BEGIN_BF_DECL(sckmode_t, uint32_t); - BF_FIELD(pha, 0, 1); - BF_FIELD(pol, 1, 1); - END_BF_DECL(); - - uint32_t r_csid; - - uint32_t r_csdef; - - BEGIN_BF_DECL(csmode_t, uint32_t); - BF_FIELD(mode, 0, 2); - END_BF_DECL(); - - BEGIN_BF_DECL(delay0_t, uint32_t); - BF_FIELD(cssck, 0, 8); - BF_FIELD(sckcs, 16, 8); - END_BF_DECL(); - - BEGIN_BF_DECL(delay1_t, uint32_t); - BF_FIELD(intercs, 0, 16); - BF_FIELD(interxfr, 16, 8); - END_BF_DECL(); - - BEGIN_BF_DECL(fmt_t, uint32_t); - BF_FIELD(proto, 0, 2); - BF_FIELD(endian, 2, 1); - BF_FIELD(dir, 3, 1); - BF_FIELD(len, 16, 4); - END_BF_DECL(); - - BEGIN_BF_DECL(txdata_t, uint32_t); - BF_FIELD(data, 0, 8); - BF_FIELD(full, 31, 1); - END_BF_DECL() r_txdata; - - BEGIN_BF_DECL(rxdata_t, uint32_t); - BF_FIELD(data, 0, 8); - BF_FIELD(empty, 31, 1); - END_BF_DECL(); - - BEGIN_BF_DECL(txmark_t, uint32_t); - BF_FIELD(txmark, 0, 3); - END_BF_DECL(); - - BEGIN_BF_DECL(rxmark_t, uint32_t); - BF_FIELD(rxmark, 0, 3); - END_BF_DECL(); - - BEGIN_BF_DECL(fctrl_t, uint32_t); - BF_FIELD(en, 0, 1); - END_BF_DECL(); - - BEGIN_BF_DECL(ffmt_t, uint32_t); - BF_FIELD(cmd_en, 0, 1); - BF_FIELD(addr_len, 1, 2); - BF_FIELD(pad_cnt, 3, 4); - BF_FIELD(cmd_proto, 7, 2); - BF_FIELD(addr_proto, 9, 2); - BF_FIELD(data_proto, 11, 2); - BF_FIELD(cmd_code, 16, 8); - BF_FIELD(pad_code, 24, 8); - END_BF_DECL(); - - BEGIN_BF_DECL(ie_t, uint32_t); - BF_FIELD(txwm, 0, 1); - BF_FIELD(rxwm, 1, 1); - END_BF_DECL(); - - BEGIN_BF_DECL(ip_t, uint32_t); - BF_FIELD(txwm, 0, 1); - BF_FIELD(rxwm, 1, 1); - END_BF_DECL(); - - static inline sckdiv_t& sckdiv_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_SCKDIV); - } - - static inline sckmode_t& sckmode_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_SCKMODE); - } - - static inline uint32_t& csid_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_CSID); - } - - static inline uint32_t& csdef_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_CSDEF); - } - - static inline csmode_t& csmode_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_CSMODE); - } - - static inline delay0_t& dcssck_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_DCSSCK); - } - - static inline uint32_t& dsckcs_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_DSCKCS); - } - - static inline delay1_t& dintercs_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_DINTERCS); - } - - static inline uint32_t& dinterxfr_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_DINTERXFR); - } - - static inline fmt_t& fmt_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_FMT); - } - - static inline txdata_t& txfifo_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_TXFIFO); - } - - static inline rxdata_t& rxfifo_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_RXFIFO); - } - - static inline txmark_t& txctrl_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_TXCTRL); - } - - static inline rxmark_t& rxctrl_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_RXCTRL); - } - - static inline fctrl_t& fctrl_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_FCTRL); - } - - static inline ffmt_t& ffmt_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_FFMT); - } - - static inline ie_t& ie_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_IE); - } - - static inline ip_t& ip_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_IP); - } - - template - static bool transfer(std::array& bytes){ - csmode_reg().mode=2; // HOLD mode - rxctrl_reg().rxmark=bytes.size()-1; // trigger irq if more than 2 bytes are received; - ie_reg().rxwm=1; - // write data bytes - for(size_t i=0; i -#include "util/bit_field.h" -#include - -template -class uart_regs { -public: - BEGIN_BF_DECL(txdata_t, uint32_t); - BF_FIELD(data, 0, 8); - BF_FIELD(full, 31, 1); - END_BF_DECL() ; - - BEGIN_BF_DECL(rxdata_t, uint32_t); - BF_FIELD(data, 0, 8); - BF_FIELD(empty, 31, 1); - END_BF_DECL(); - - BEGIN_BF_DECL(txctrl_t, uint32_t); - BF_FIELD(txen, 0, 1); - BF_FIELD(nstop, 1, 1); - BF_FIELD(txcnt, 16, 3); - END_BF_DECL(); - - BEGIN_BF_DECL(rxctrl_t, uint32_t); - BF_FIELD(rxen, 0, 1); - BF_FIELD(rxcnt, 16, 3); - END_BF_DECL(); - - BEGIN_BF_DECL(ie_t, uint32_t); - BF_FIELD(txwm, 0, 1); - BF_FIELD(rxwm, 1, 1); - END_BF_DECL(); - - BEGIN_BF_DECL(ip_t, uint32_t); - BF_FIELD(txwm, 0, 1); - BF_FIELD(rxwm, 1, 1); - END_BF_DECL(); - - BEGIN_BF_DECL(div_t, uint32_t); - BF_FIELD(div, 0, 16); - END_BF_DECL(); - - static inline txdata_t& txdata_reg(){ - return *reinterpret_cast(BASE_ADDR+UART_REG_TXFIFO); - } - - static inline rxdata_t& rxdata_reg(){ - return *reinterpret_cast(BASE_ADDR+UART_REG_RXFIFO); - } - - static inline txctrl_t& txctrl_reg(){ - return *reinterpret_cast(BASE_ADDR+UART_REG_TXCTRL); - } - - static inline rxctrl_t& rxctrl_reg(){ - return *reinterpret_cast(BASE_ADDR+UART_REG_RXCTRL); - } - - static inline ie_t& ie_reg(){ - return *reinterpret_cast(BASE_ADDR+UART_REG_IE); - } - - static inline ip_t& ip_reg(){ - return *reinterpret_cast(BASE_ADDR+UART_REG_IP); - } - - static inline div_t& div_reg(){ - return *reinterpret_cast(BASE_ADDR+UART_REG_DIV); - } - -}; - -#endif /* SPI_H_ */ diff --git a/fpga_spn/src/raven_spn.cpp b/fpga_spn/src/raven_spn.cpp deleted file mode 100644 index 5399d85..0000000 --- a/fpga_spn/src/raven_spn.cpp +++ /dev/null @@ -1,157 +0,0 @@ -#include "raven_spn.h" -#include "spn_regs.h" -#include "dma_regs.h" -#include "init.h" -#include "spn_checker_regs.h" - -using spn = spn_regs<0x90000000>; -using dma = dma_regs<0xB0000000>; -using spn_checker = spn_checker_regs<0x10040000>; - -void run_xspn(int in_addr, int out_addr, int num_samples, int in_beats, int out_beats) { - spn::mode_reg() = 0; - spn::input_length_reg() = num_samples; // each sample consists of 5 uint8 values - spn::input_addr_reg() = in_addr; - spn::output_addr_reg() = out_addr; - spn::num_of_in_beats_reg() = in_beats; // Number of AXI4 burst beats needed to load all input data - spn::num_of_out_beats_reg() = out_beats; // Number of AXI4 burst beats needed to store all result data - printf("Starting XSPN\n"); - spn::start_reg() = 1; -} - -void fpga_dma(int direction, int fpga_address, int sc_address, int num_bytes) { - dma::operation_reg() = direction; - dma::fpga_address_reg() = fpga_address; - dma::sc_address_reg() = sc_address; - dma::bytes_reg() = num_bytes; - dma::start_reg() = 1; - wait_for_dma_interrupt(); - dma::clear_interrupt_reg() = 1; -} - -int fpga_alloc(int num_bytes) { - dma::operation_reg() = 2; - dma::bytes_reg() = num_bytes; - dma::start_reg() = 1; - wait_for_dma_interrupt(); - dma::clear_interrupt_reg() = 1; - return dma::alloc_address_reg(); -} - -void fpga_free(int address) { - dma::operation_reg() = 3; - dma::fpga_address_reg() = address; - dma::start_reg() = 1; - wait_for_dma_interrupt(); - dma::clear_interrupt_reg() = 1; -} - -static void spn_interrupt_handler(){ - printf("spn_interrupt_handler\n"); - hw_interrupt = false; -} - -static void dma_interrupt_handler(){ - printf("dma_interrupt_handler\n"); - dma_interrupt = false; -} - -/*! \brief main function - * - */ -int main() { - - - platform_init(); - configure_irq(2, spn_interrupt_handler); - configure_irq(22, dma_interrupt_handler); - - - - uint32_t batch_size = spn_checker::batch_size_reg(); - uint32_t iterations = spn_checker::num_iterations_reg(); - - printf("BATCH SIZE: %d\n", batch_size); - printf("ITERATIONS: %d\n", iterations); - - - - int in_addr = 0x30000000; // place input samples in the SPI memory - int out_addr = 0x3C000000; - int out_addr2 = 0x3E000000; - - - - spn::mode_reg() = 1; - spn::start_reg() = 1; - wait_for_spn_interrupt(); - spn::interrupt_reg() = 1; - uint32_t readout = spn::readout_reg(); - printf("READOUT HW:0x%x\n", readout); - - uint32_t axi_bytes = readout; - axi_bytes = axi_bytes & 0xff; - axi_bytes = 1 << axi_bytes; - - printf("AXI Bytes: %d\n", axi_bytes); - - uint32_t sample_bytes = readout; - sample_bytes = sample_bytes >> 16; - sample_bytes = sample_bytes / 8; - - printf("Sample Bytes: %d\n", sample_bytes); - - uint32_t result_bytes = 8; - - printf("Result Bytes: %d\n", result_bytes); - - uint32_t in_bytes = batch_size * sample_bytes; - uint32_t out_bytes = batch_size * result_bytes; - - uint32_t total_in = in_bytes * iterations; - - if (total_in > (out_addr - in_addr)) { - printf("ERROR: input data requires %d bytes, only %d bytes available\n", total_in, out_addr - in_addr); - return 1; - } - if (out_bytes > (out_addr2 - out_addr)) { - printf("ERROR: output data requires %d bytes, only %d bytes available\n", out_bytes, out_addr2 - out_addr); - return 1; - } - - - uint32_t in_beats = in_bytes / axi_bytes; - if (in_beats * axi_bytes < batch_size * sample_bytes) in_beats++; - uint32_t out_beats = out_bytes / axi_bytes; - if (out_beats * axi_bytes < batch_size * result_bytes) out_beats++; - - uint32_t current_in_addr = in_addr; - int fpga_address_in = fpga_alloc(batch_size * sample_bytes + 64); - int fpga_address_out = fpga_alloc(batch_size * result_bytes + 64); - - // inject SPN input data - spn_checker::input_addr_reg() = current_in_addr; - spn_checker::num_input_samples_reg() = sample_bytes * batch_size * iterations; - spn_checker::start_data_trans_reg() = 1; - spn_checker::output_addr_reg() = out_addr; - - //run_xspn(in_addr, out_addr); - for (int k = 0; k < iterations*batch_size; k+=batch_size) { - fpga_dma(1, fpga_address_in, current_in_addr, batch_size * sample_bytes); - run_xspn(fpga_address_in, fpga_address_out, batch_size, in_beats, out_beats); - wait_for_spn_interrupt(); - spn::interrupt_reg() = 1; - printf("XSPN finished\n"); - fpga_dma(0, fpga_address_out, out_addr, batch_size * result_bytes); - spn_checker::offset_reg() = k; - spn_checker::length_reg() = batch_size; - spn_checker::start_result_check_reg() = 1; - - current_in_addr += batch_size * sample_bytes; // 5 bytes in each sample - } - - fpga_free(fpga_address_in); - fpga_free(fpga_address_out); - - return 0; -} diff --git a/fpga_spn/src/raven_spn.h b/fpga_spn/src/raven_spn.h deleted file mode 100644 index 14ff1a8..0000000 --- a/fpga_spn/src/raven_spn.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef RAVEN_SPN_H_ -#define RAVEN_SPN_H_ - -extern "C" void handle_m_ext_interrupt(); - -#endif /* RAVEN_SPN_H_ */ diff --git a/fpga_spn/src/spn_checker_regs.h b/fpga_spn/src/spn_checker_regs.h deleted file mode 100644 index ff9e250..0000000 --- a/fpga_spn/src/spn_checker_regs.h +++ /dev/null @@ -1,125 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Copyright (C) 2017, MINRES Technologies GmbH -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// 3. Neither the name of the copyright holder nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// -// Created on: Thu Oct 01 15:45:55 CEST 2020 -// * spn_regs.h Author: -// -//////////////////////////////////////////////////////////////////////////////// -#pragma once - -#include -#include - -#define SPN_CNTL_REG_START_RESULT_CHECK 0x00 -#define SPN_CNTL_REG_OFFSET 0x10 -#define SPN_CNTL_REG_LENGTH 0x20 -#define SPN_CNTL_REG_OUTPUT_ADDR 0x30 -#define SPN_CNTL_REG_INPUT_ADDR 0x40 -#define SPN_CNTL_REG_NUM_INPUT_SAMPLES 0x50 -#define SPN_CNTL_REG_START_DATA_TRANS 0x60 -#define SPN_CNTL_REG_OUTPUT_ADDR2 0x70 -#define SPN_CNTL_REG_XSPN_COUNT 0x80 -#define SPN_CNTL_REG_BATCH_SIZE 0x90 -#define SPN_CNTL_REG_NUM_ITERATIONS 0xA0 - -template -class spn_checker_regs { -public: - // storage declarations -// BEGIN_BF_DECL(start_t, uint32_t); -// BF_FIELD(start, 0, 1); -// END_BF_DECL() r_start; - uint32_t r_start_result_check; - - uint32_t r_offset; - - uint32_t r_length; - - uint32_t r_output_addr; - - uint32_t r_output_addr2; - - uint32_t r_input_addr; - - uint32_t r_num_input_samples; - - uint32_t r_start_data_trans; - - uint32_t r_xspn_count; - - uint32_t r_batch_size; - - uint32_t r_num_iterations; - - static inline uint32_t& start_result_check_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_CNTL_REG_START_RESULT_CHECK); - } - - static inline uint32_t & offset_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_CNTL_REG_OFFSET); - } - - static inline uint32_t & length_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_CNTL_REG_LENGTH); - } - - static inline uint32_t & output_addr_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_CNTL_REG_OUTPUT_ADDR); - } - - static inline uint32_t & output_addr2_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_CNTL_REG_OUTPUT_ADDR2); - } - - static inline uint32_t & input_addr_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_CNTL_REG_INPUT_ADDR); - } - - static inline uint32_t & num_input_samples_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_CNTL_REG_NUM_INPUT_SAMPLES); - } - - static inline uint32_t& start_data_trans_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_CNTL_REG_START_DATA_TRANS); - } - - static inline uint32_t& xspn_count_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_CNTL_REG_XSPN_COUNT); - } - - static inline uint32_t& batch_size_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_CNTL_REG_BATCH_SIZE); - } - - static inline uint32_t& num_iterations_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_CNTL_REG_NUM_ITERATIONS); - } - -}; diff --git a/fpga_spn/src/spn_regs.h b/fpga_spn/src/spn_regs.h deleted file mode 100644 index a733586..0000000 --- a/fpga_spn/src/spn_regs.h +++ /dev/null @@ -1,116 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Copyright (C) 2017, MINRES Technologies GmbH -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// 3. Neither the name of the copyright holder nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// -// Created on: Thu Oct 01 15:45:55 CEST 2020 -// * spn_regs.h Author: -// -//////////////////////////////////////////////////////////////////////////////// - -#ifndef _SPN_REGS_H_ -#define _SPN_REGS_H_ - -#include -#include - -#define SPN_REG_START 0x00 -#define SPN_REG_READOUT 0x10 -#define SPN_REG_MODE 0x20 -#define SPN_REG_INPUT_LENGTH 0x30 -#define SPN_REG_INPUT_ADDR 0x40 -#define SPN_REG_OUTPUT_ADDR 0x50 -#define SPN_REG_NUM_OF_INPUT_BEATS 0x60 -#define SPN_REG_NUM_OF_OUTPUT_BEATS 0x70 -#define SPN_REG_INTERRUPT 0x0C - -template -class spn_regs { -public: - // storage declarations -// BEGIN_BF_DECL(start_t, uint32_t); -// BF_FIELD(start, 0, 1); -// END_BF_DECL() r_start; - uint32_t r_start; - - uint32_t r_readout; - - uint32_t r_mode; - - uint32_t r_input_length; - - uint32_t r_input_addr; - - uint32_t r_output_addr; - - uint32_t r_num_of_input_beats; - - uint32_t r_num_of_output_beats; - -// static inline start_t& start_reg(){ -// return *reinterpret_cast(BASE_ADDR+SPN_REG_START); -// } - static inline uint32_t& start_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_REG_START); - } - - static inline uint32_t & readout_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_REG_READOUT); - } - - static inline uint32_t & mode_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_REG_MODE); - } - - static inline uint32_t & input_length_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_REG_INPUT_LENGTH); - } - - static inline uint32_t & input_addr_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_REG_INPUT_ADDR); - } - - static inline uint32_t & output_addr_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_REG_OUTPUT_ADDR); - } - - static inline uint32_t & num_of_in_beats_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_REG_NUM_OF_INPUT_BEATS); - } - - static inline uint32_t & num_of_out_beats_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_REG_NUM_OF_OUTPUT_BEATS); - } - - static inline uint32_t & interrupt_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_REG_INTERRUPT); - } - -}; - -#endif // _SPN_REGS_H_ diff --git a/fpga_spn/src/util/bit_field.h b/fpga_spn/src/util/bit_field.h deleted file mode 100644 index d4aff48..0000000 --- a/fpga_spn/src/util/bit_field.h +++ /dev/null @@ -1,179 +0,0 @@ -/*--------------------------------------------------------- -Copyright (c) 2015 Jeff Preshing - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgement in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. ----------------------------------------------------------*/ - -#ifndef BIT_FIELD_H_ -#define BIT_FIELD_H_ - -#ifndef __CPP11OM_BITFIELD_H__ -#define __CPP11OM_BITFIELD_H__ - -#include - -//--------------------------------------------------------- -// BitFieldMember<>: Used internally by ADD_BITFIELD_MEMBER macro. -// All members are public to simplify compliance with sections 9.0.7 and -// 9.5.1 of the C++11 standard, thereby avoiding undefined behavior. -//--------------------------------------------------------- -template struct BitFieldMember { - T value; - - static_assert(Offset + Bits <= (int)sizeof(T) * 8, "Member exceeds bitfield boundaries"); - static_assert(Bits < (int)sizeof(T) * 8, "Can't fill entire bitfield with one member"); - - static const T Maximum = (T(1) << Bits) - 1; - static const T Mask = Maximum << Offset; - T maximum() const { return Maximum; } - T one() const { return T(1) << Offset; } - - operator T() const { return (value >> Offset) & Maximum; } - - BitFieldMember &operator=(T v) { - assert(v <= Maximum); // v must fit inside the bitfield member - value = (value & ~Mask) | (v << Offset); - return *this; - } - - BitFieldMember &operator+=(T v) { - assert(T(*this) + v <= Maximum); // result must fit inside the bitfield member - value += v << Offset; - return *this; - } - - BitFieldMember &operator-=(T v) { - assert(T(*this) >= v); // result must not underflow - value -= v << Offset; - return *this; - } - - BitFieldMember &operator++() { return *this += 1; } - BitFieldMember operator++(int) { // postfix form - BitFieldMember tmp(*this); - operator++(); - return tmp; - } - BitFieldMember &operator--() { return *this -= 1; } - BitFieldMember operator--(int) { // postfix form - BitFieldMember tmp(*this); - operator--(); - return tmp; - } -}; - -//--------------------------------------------------------- -// BitFieldArray<>: Used internally by ADD_BITFIELD_ARRAY macro. -// All members are public to simplify compliance with sections 9.0.7 and -// 9.5.1 of the C++11 standard, thereby avoiding undefined behavior. -//--------------------------------------------------------- -template class BitFieldArray { -public: - T value; - - static_assert(BaseOffset + BitsPerItem * NumItems <= (int)sizeof(T) * 8, "Array exceeds bitfield boundaries"); - static_assert(BitsPerItem < (int)sizeof(T) * 8, "Can't fill entire bitfield with one array element"); - - static const T Maximum = (T(1) << BitsPerItem) - 1; - T maximum() const { return Maximum; } - int numItems() const { return NumItems; } - - class Element { - private: - T &value; - int offset; - - public: - Element(T &value, int offset) - : value(value) - , offset(offset) {} - T mask() const { return Maximum << offset; } - - operator T() const { return (value >> offset) & Maximum; } - - Element &operator=(T v) { - assert(v <= Maximum); // v must fit inside the bitfield member - value = (value & ~mask()) | (v << offset); - return *this; - } - - Element &operator+=(T v) { - assert(T(*this) + v <= Maximum); // result must fit inside the bitfield member - value += v << offset; - return *this; - } - - Element &operator-=(T v) { - assert(T(*this) >= v); // result must not underflow - value -= v << offset; - return *this; - } - - Element &operator++() { return *this += 1; } - Element operator++(int) { // postfix form - Element tmp(*this); - operator++(); - return tmp; - } - Element &operator--() { return *this -= 1; } - Element operator--(int) { // postfix form - Element tmp(*this); - operator--(); - return tmp; - } - }; - - Element operator[](int i) { - assert(i >= 0 && i < NumItems); // array index must be in range - return Element(value, BaseOffset + BitsPerItem * i); - } - - const Element operator[](int i) const { - assert(i >= 0 && i < NumItems); // array index must be in range - return Element(value, BaseOffset + BitsPerItem * i); - } -}; - -//--------------------------------------------------------- -// Bitfield definition macros. -// All members are public to simplify compliance with sections 9.0.7 and -// 9.5.1 of the C++11 standard, thereby avoiding undefined behavior. -//--------------------------------------------------------- -#define BEGIN_BF_DECL(typeName, T) \ - union typeName { \ - struct Wrapper { \ - T value; \ - }; \ - Wrapper flat; \ - typeName(T v = 0) { flat.value = v; } \ - typeName &operator=(T v) { \ - flat.value = v; \ - return *this; \ - } \ - operator T &() { return flat.value; } \ - operator T() const { return flat.value; } \ - using StorageType = T; - -#define BF_FIELD(memberName, offset, bits) BitFieldMember memberName; - -#define BF_ARRAY(memberName, offset, bits, numItems) BitFieldArray memberName; - -#define END_BF_DECL() } - -#endif // __CPP11OM_BITFIELD_H__ - -#endif /* BIT_FIELD_H_ */ diff --git a/fpga_spn/src/xspn_data.cpp b/fpga_spn/src/xspn_data.cpp deleted file mode 100644 index 0b57e2a..0000000 --- a/fpga_spn/src/xspn_data.cpp +++ /dev/null @@ -1,20007 +0,0 @@ -#include -#include - -constexpr auto ln2 = std::log(2); -std::array input_data = { -0,0,0,1,0, -0,1,5,2,0, -0,0,8,0,0, -0,0,5,4,0, -0,0,1,1,0, -0,0,0,2,0, -0,0,8,0,0, -0,0,5,0,0, -0,0,12,20,0, -0,0,4,2,0, -0,0,26,1,0, -0,0,45,0,0, -0,0,0,1,0, -0,0,6,4,0, -0,2,0,2,0, -0,0,0,2,0, -19,0,7,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,11,0,0, -0,2,0,0,0, -0,0,1,0,0, -0,0,1,0,0, -0,0,2,1,0, -0,0,0,2,0, -0,0,15,1,0, -0,0,0,0,0, -0,3,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,17,1,0, -0,0,0,0,0, -0,1,14,0,0, -0,0,21,0,0, -0,0,21,2,0, -0,0,0,0,0, -0,0,0,0,0, -1,0,10,1,0, -0,1,1,1,0, -0,1,14,1,0, -0,0,1,0,0, -0,0,17,1,0, -0,0,21,2,0, -0,0,14,0,0, -0,0,0,4,0, -0,0,2,0,0, -0,0,44,1,0, -0,1,0,0,0, -0,0,0,3,0, -0,0,1,1,0, -0,0,11,0,0, -0,0,8,2,0, -0,2,0,1,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,0,1,0, -0,0,17,0,0, -0,0,19,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,4,0,0, -0,0,16,0,0, -0,0,0,2,0, -0,0,9,0,0, -0,0,14,0,0, -0,0,71,1,0, -0,0,16,0,0, -0,0,0,2,0, -0,0,11,1,0, -0,0,0,0,0, -0,0,3,0,0, -0,1,0,4,0, -0,0,19,3,0, -0,2,5,6,0, -2,0,9,2,0, -0,0,31,0,0, -0,1,0,0,0, -0,0,3,1,0, -0,0,0,1,0, -0,0,17,0,0, -0,0,15,1,0, -0,0,3,1,0, -0,0,7,0,0, -0,0,5,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,10,2,0, -0,2,0,2,0, -0,0,0,0,0, -0,1,5,2,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,8,0,0, -0,0,24,0,0, -0,0,11,0,0, -0,0,21,0,0, -0,0,0,0,0, -0,1,0,4,0, -0,0,1,2,0, -0,0,9,0,0, -0,0,13,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,7,0,0, -0,0,0,3,0, -0,0,0,2,0, -0,0,0,1,0, -0,0,19,1,0, -1,0,1,2,0, -0,0,7,0,0, -0,0,15,5,0, -0,2,9,1,0, -0,0,20,8,0, -0,0,5,0,0, -0,0,8,2,0, -0,0,17,0,0, -0,0,0,0,0, -0,0,20,0,0, -3,0,0,10,0, -0,1,0,1,0, -0,2,0,7,0, -0,1,0,0,0, -0,0,10,0,0, -0,1,3,4,0, -0,1,6,0,0, -0,0,24,0,0, -0,0,13,2,0, -0,0,9,0,0, -0,0,30,0,0, -0,0,43,1,0, -0,0,2,0,0, -0,1,5,7,0, -0,0,0,1,0, -0,0,10,0,0, -0,0,1,0,0, -0,0,28,0,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,2,5,6,0, -0,0,8,9,0, -0,0,8,0,0, -0,0,3,1,0, -0,0,4,1,0, -0,1,0,4,0, -0,0,25,1,0, -0,0,0,0,0, -0,0,7,1,0, -0,0,0,0,0, -0,1,6,0,0, -0,0,11,0,0, -0,0,6,1,0, -0,0,13,2,0, -0,0,11,0,0, -1,1,10,1,0, -0,1,0,0,0, -0,0,1,1,0, -0,0,0,1,0, -0,1,7,0,0, -0,0,0,11,0, -0,0,18,1,0, -0,0,22,0,0, -0,0,8,0,0, -0,0,12,1,0, -0,1,2,4,0, -0,0,0,1,0, -31,0,0,1,0, -0,0,7,2,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,14,0,0, -0,0,24,0,0, -0,0,0,0,0, -0,0,4,4,0, -0,0,71,1,0, -0,1,1,0,0, -0,0,17,0,0, -0,0,7,0,0, -0,0,9,0,0, -0,0,0,3,0, -0,0,10,0,0, -0,0,16,0,0, -0,3,0,2,0, -0,0,8,2,0, -0,0,1,24,0, -0,1,4,4,0, -0,0,1,2,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,2,0,0, -0,0,0,3,0, -5,0,0,0,0, -0,0,0,1,0, -0,1,0,0,0, -0,1,0,1,0, -0,0,44,1,0, -0,0,0,0,0, -0,0,7,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,8,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,4,2,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,1,23,1,0, -0,0,25,1,0, -0,0,17,0,0, -0,0,0,0,0, -0,0,8,0,0, -48,0,4,2,0, -5,0,3,1,0, -0,0,0,0,0, -1,0,0,2,0, -0,1,1,0,0, -0,0,0,0,0, -0,0,12,1,0, -0,0,0,1,0, -0,0,1,0,0, -0,0,28,1,0, -0,0,16,0,0, -0,0,10,0,0, -0,0,0,3,0, -0,0,0,0,0, -0,0,24,1,0, -0,0,5,0,0, -0,0,7,0,0, -0,0,0,1,0, -0,0,7,3,0, -0,0,0,0,0, -0,0,5,0,0, -0,3,23,4,46, -0,2,4,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,5,0,0, -0,0,10,0,0, -0,0,0,0,0, -0,3,12,0,0, -1,0,11,3,0, -0,2,6,0,0, -0,2,0,5,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,4,3,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,17,0,0, -0,0,6,1,0, -0,0,19,1,0, -0,0,0,1,0, -0,0,9,1,0, -0,0,17,5,0, -0,0,1,3,0, -0,3,8,1,0, -0,1,1,0,0, -0,1,23,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,1,71, -0,1,16,2,0, -0,0,2,0,0, -0,0,7,0,0, -0,0,0,0,0, -0,0,12,0,0, -0,0,1,3,1, -0,2,0,2,0, -0,0,0,3,0, -0,0,16,1,0, -1,0,1,3,0, -0,0,3,0,0, -0,1,1,1,0, -0,1,1,1,0, -0,0,0,0,6, -0,0,0,1,0, -0,0,7,1,0, -0,0,7,0,0, -0,0,12,0,0, -0,1,7,3,0, -0,0,3,3,0, -19,0,7,0,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,38,0,0, -0,0,13,0,0, -0,0,5,0,0, -0,0,2,1,0, -0,1,0,1,0, -0,1,0,0,0, -0,0,35,1,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,16,2,0, -0,0,3,0,0, -0,2,7,0,0, -0,1,0,4,0, -0,0,22,6,0, -0,0,13,0,0, -0,0,3,1,0, -0,0,6,1,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,0,0,0, -0,0,1,1,0, -0,0,14,3,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,25,6,0, -0,0,0,1,0, -0,0,15,1,0, -4,0,2,2,0, -0,0,2,0,0, -0,0,23,3,0, -0,0,0,0,0, -0,0,1,4,0, -0,0,0,0,0, -0,1,0,1,0, -0,1,16,2,0, -0,0,1,3,0, -0,0,0,3,0, -0,0,0,3,0, -0,2,0,0,0, -0,0,2,0,0, -0,0,19,1,0, -0,0,0,3,0, -0,0,0,0,0, -0,0,5,0,0, -0,0,2,0,0, -0,0,0,0,0, -2,0,9,2,0, -0,0,19,2,0, -0,0,5,0,0, -0,1,2,4,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,1,8,1,0, -0,0,14,0,0, -0,0,42,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,3,0,0, -0,0,0,2,0, -0,0,11,0,0, -0,0,3,1,0, -0,0,42,0,0, -0,0,1,0,0, -0,0,8,0,0, -0,0,10,0,0, -0,1,0,1,0, -1,0,1,3,0, -0,0,24,0,0, -0,0,6,2,0, -0,0,21,1,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,2,0,0, -0,0,2,2,0, -0,0,14,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,3,0,0, -0,0,18,0,0, -0,0,14,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,48,4,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,2,1,0, -0,1,19,2,0, -0,0,4,0,0, -0,1,0,2,0, -0,0,14,1,0, -0,0,0,0,0, -0,0,22,6,0, -0,0,7,2,0, -0,0,8,0,0, -0,0,0,1,0, -0,0,8,2,0, -0,0,13,0,0, -0,0,0,0,0, -0,0,7,0,0, -0,0,14,0,0, -0,1,0,1,0, -0,0,0,0,0, -0,0,5,0,0, -0,0,33,2,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,32,0,0, -0,0,3,12,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,11,1,0, -0,0,11,1,0, -0,0,0,2,0, -0,0,16,0,0, -0,0,0,3,0, -0,2,5,6,0, -0,0,18,0,0, -0,0,0,0,0, -0,1,11,4,0, -0,0,0,0,0, -0,0,2,0,0, -0,0,21,5,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,3,8,0, -0,1,0,4,3, -0,0,0,1,0, -0,0,0,0,0, -0,0,1,2,0, -0,0,4,1,0, -0,0,4,0,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,33,2,0, -0,0,0,2,0, -0,0,1,0,0, -0,0,0,0,0, -2,0,4,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,4,0, -6,0,4,0,0, -0,5,0,4,0, -0,0,0,0,0, -0,0,14,0,0, -0,0,1,0,0, -5,0,15,1,0, -0,0,6,2,0, -0,0,9,0,0, -0,0,0,1,0, -0,0,4,1,0, -0,0,17,0,0, -0,0,4,4,0, -0,0,1,2,0, -0,0,13,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,43,1,0, -0,0,11,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,16,1,0, -0,0,2,1,0, -0,0,2,1,0, -0,0,5,0,0, -0,1,0,1,0, -0,0,5,0,0, -0,0,0,0,0, -0,0,4,3,0, -0,0,5,7,0, -0,0,0,3,0, -0,0,0,0,0, -0,1,0,0,0, -0,0,8,9,0, -0,2,28,0,0, -0,0,21,0,0, -18,0,5,1,0, -1,0,10,1,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,21,0,0, -0,0,0,2,0, -0,0,0,1,0, -0,1,8,0,0, -0,0,0,3,0, -0,0,7,0,0, -0,0,0,0,0, -0,0,13,1,0, -0,0,0,3,0, -0,0,21,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,2,0,2,0, -0,0,0,0,0, -0,0,8,9,0, -0,0,13,0,0, -0,0,22,0,0, -0,0,3,0,0, -0,0,20,1,0, -0,0,0,0,0, -0,3,2,3,0, -0,0,18,1,0, -0,0,2,2,0, -0,0,5,0,0, -0,0,3,2,0, -0,0,4,1,0, -0,1,1,1,0, -0,3,18,1,0, -0,0,0,2,0, -0,0,3,8,0, -0,0,0,5,0, -0,0,12,2,0, -0,0,9,0,0, -0,0,4,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,3,0, -0,2,0,1,0, -0,14,11,2,0, -0,0,1,0,0, -11,0,2,0,0, -0,0,0,0,0, -0,1,2,4,0, -0,2,11,2,0, -0,0,15,0,0, -3,0,9,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,33,2,0, -0,0,8,0,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,0,0,0, -0,0,39,0,0, -0,0,2,2,0, -0,0,0,1,0, -0,0,5,0,0, -0,0,8,1,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,1,0,0, -0,3,12,0,0, -0,0,5,0,0, -0,0,2,2,0, -0,0,12,1,0, -0,0,1,2,0, -0,0,0,0,0, -0,0,6,0,0, -0,0,0,1,0, -0,0,8,2,0, -0,0,1,0,0, -0,0,32,1,0, -0,0,15,0,0, -0,0,15,1,0, -0,1,16,0,0, -0,0,0,1,0, -0,0,18,0,0, -0,0,0,3,0, -0,0,0,12,0, -0,0,0,3,0, -0,0,4,4,0, -0,0,1,0,0, -0,1,1,1,0, -24,0,2,0,0, -3,0,0,10,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,24,0,0, -5,0,0,0,0, -0,1,0,3,0, -0,0,0,3,0, -0,1,16,2,0, -0,0,0,0,0, -0,0,0,1,71, -0,0,0,2,0, -0,0,11,0,0, -0,0,1,0,0, -0,0,8,1,0, -0,0,1,2,0, -0,0,0,0,0, -0,0,3,0,0, -0,0,0,0,0, -0,0,0,4,0, -0,0,9,1,0, -0,0,4,2,0, -0,0,13,0,0, -0,0,20,0,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,12,1,0, -0,0,0,2,0, -0,0,1,3,0, -0,0,0,1,0, -0,0,17,0,0, -0,0,6,0,0, -0,1,7,1,0, -0,0,0,2,0, -0,0,0,0,6, -0,0,7,0,0, -0,0,0,1,0, -0,0,1,2,0, -0,0,5,2,0, -16,0,2,0,0, -0,0,20,0,0, -0,0,0,4,0, -0,0,2,1,0, -0,0,0,1,0, -0,1,7,1,0, -0,0,8,1,0, -0,0,3,0,0, -0,0,11,0,0, -0,0,0,2,0, -0,0,1,1,0, -0,1,7,1,0, -8,0,8,1,0, -0,1,16,0,0, -0,0,1,0,0, -0,0,21,1,0, -0,0,17,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,23,1,0, -1,0,10,2,0, -0,0,0,10,0, -1,0,2,1,0, -0,1,5,0,0, -0,0,1,5,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,29,0,0, -0,1,33,3,0, -0,0,0,0,0, -0,0,0,0,0, -0,1,11,0,0, -0,0,0,1,0, -0,0,7,0,0, -0,0,24,0,0, -0,0,15,0,0, -0,1,13,1,0, -0,0,14,1,0, -0,0,0,5,0, -0,0,40,0,0, -0,0,1,0,0, -0,0,21,1,0, -0,0,15,0,0, -0,0,10,2,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,1,3,0, -0,0,5,0,0, -0,0,0,0,0, -0,1,2,4,0, -0,1,18,3,0, -0,0,0,0,0, -17,0,0,0,0, -0,0,9,0,0, -0,0,0,0,0, -0,0,2,1,0, -0,0,16,0,0, -0,4,0,2,0, -0,0,30,5,0, -0,0,3,2,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,20,0,0, -0,0,1,1,0, -0,0,5,4,0, -0,0,9,1,0, -0,0,4,1,0, -0,1,38,2,0, -0,0,6,0,0, -0,0,21,1,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,11,0,0, -0,0,21,0,0, -0,0,4,2,0, -0,0,11,1,0, -0,0,10,4,0, -0,0,22,0,0, -0,0,22,6,0, -0,0,11,1,0, -0,0,5,0,0, -0,0,0,4,0, -0,0,0,3,0, -0,0,4,2,0, -0,0,15,1,0, -0,0,1,2,0, -0,0,0,0,0, -0,1,18,0,0, -0,0,0,0,0, -0,2,0,10,0, -0,0,1,0,0, -0,0,16,1,0, -2,0,0,0,0, -0,0,13,3,0, -0,0,0,1,0, -0,1,8,1,0, -0,2,0,2,0, -0,0,0,3,0, -0,0,2,0,0, -0,0,2,1,0, -0,0,14,0,0, -38,0,6,1,0, -0,0,14,0,0, -0,1,1,1,0, -0,0,7,1,0, -0,0,0,3,0, -0,0,39,0,0, -0,0,0,0,0, -0,2,0,0,0, -0,0,2,0,0, -0,0,0,2,0, -0,0,15,1,0, -0,0,0,5,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,0,3,0, -0,0,14,0,0, -0,0,0,1,0, -0,0,11,0,0, -0,1,22,0,0, -0,0,21,2,0, -0,4,33,2,1, -0,0,3,1,0, -0,0,0,3,0, -0,0,1,3,1, -0,0,1,0,0, -0,1,9,0,0, -0,0,23,3,0, -0,0,11,2,0, -0,0,5,1,0, -0,0,0,0,0, -0,0,5,3,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,21,1,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,20,0,0, -0,0,3,1,0, -0,0,28,1,0, -0,0,17,1,0, -0,0,6,2,0, -0,0,0,3,0, -0,0,0,8,0, -0,0,0,5,0, -0,0,8,1,0, -0,0,4,4,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,5,10,0, -0,0,4,2,0, -0,0,0,2,0, -0,0,0,2,0, -0,0,10,0,0, -0,0,0,1,0, -0,0,26,1,0, -0,0,12,0,0, -0,0,26,0,0, -0,0,0,0,0, -0,0,0,2,0, -20,0,10,0,0, -0,0,0,1,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,1,2,0, -0,0,0,2,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,6,1,0, -0,0,3,0,0, -0,0,7,1,0, -0,0,0,0,0, -0,0,7,2,0, -0,0,0,0,0, -0,0,6,1,0, -0,0,11,0,0, -0,0,2,0,0, -0,0,0,1,0, -0,0,10,1,0, -0,0,2,0,0, -0,0,6,2,0, -1,1,9,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,1,1,1,0, -0,0,3,0,0, -0,1,0,3,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,0,1,0, -0,0,1,0,0, -0,0,6,1,0, -0,0,13,0,0, -0,0,7,1,0, -1,1,9,0,0, -0,0,13,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,13,0,0, -0,0,6,1,0, -0,0,2,1,0, -0,0,8,0,0, -0,0,0,2,0, -0,0,11,0,0, -0,0,10,0,0, -0,2,42,0,0, -0,0,0,2,0, -0,0,8,3,0, -0,1,0,4,0, -0,0,10,2,0, -0,0,0,0,0, -0,0,10,1,0, -0,0,5,0,0, -0,0,45,0,0, -0,1,0,4,0, -0,0,4,3,0, -0,0,7,2,0, -0,0,5,1,0, -0,0,3,0,0, -0,0,17,0,0, -0,2,0,5,0, -0,0,9,1,0, -0,0,18,0,0, -0,0,3,2,0, -1,0,18,0,0, -0,0,8,0,0, -0,0,0,0,0, -0,0,1,0,0, -0,0,2,1,0, -0,0,0,0,0, -0,1,2,4,0, -0,0,9,1,0, -0,0,19,2,0, -0,0,3,0,0, -8,0,8,1,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,6,2,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,16,0,0, -0,0,0,0,0, -0,0,3,4,0, -0,0,0,0,0, -0,0,2,4,0, -0,0,1,1,0, -0,0,17,1,0, -0,0,3,1,0, -0,0,1,0,0, -0,0,3,0,0, -0,0,18,2,0, -0,0,2,1,0, -0,1,11,0,0, -0,0,9,0,0, -0,0,0,0,0, -0,2,0,0,0, -0,0,9,0,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,1,2,0, -0,0,0,2,0, -0,1,19,1,0, -0,0,0,2,0, -0,0,20,0,0, -0,0,0,2,2, -0,0,16,2,0, -0,1,18,0,0, -0,0,9,2,0, -5,0,0,0,0, -0,0,8,9,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,0,3,0, -0,0,9,4,0, -0,1,8,2,0, -0,1,0,1,0, -0,0,25,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,10,0,0, -0,0,3,0,0, -0,0,20,5,0, -0,0,2,0,0, -0,0,0,0,0, -0,0,9,0,0, -0,0,0,1,0, -71,0,11,0,0, -0,0,0,2,0, -5,0,0,0,0, -0,1,16,0,0, -0,0,0,0,0, -0,0,0,2,0, -0,1,13,2,0, -0,0,15,0,0, -0,0,23,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,9,2,0, -0,0,5,0,0, -0,0,32,1,0, -0,0,0,0,0, -0,0,6,0,0, -0,0,40,0,0, -0,0,0,1,0, -48,0,4,2,0, -0,0,7,1,0, -0,0,3,2,0, -0,0,28,1,0, -0,0,4,0,0, -0,0,2,0,0, -0,1,0,1,0, -0,0,0,5,0, -0,0,2,1,0, -0,0,3,2,0, -0,0,7,3,0, -0,2,11,2,0, -0,0,9,0,0, -0,0,0,3,0, -0,0,0,0,0, -0,1,10,4,0, -0,0,0,1,0, -0,0,12,0,0, -0,5,0,4,0, -0,0,2,1,0, -0,0,0,0,0, -0,0,1,0,0, -0,3,2,3,0, -0,0,1,3,0, -0,0,3,2,0, -0,0,0,0,0, -0,0,1,0,0, -0,0,11,0,0, -0,0,1,1,0, -48,0,4,2,0, -0,0,2,0,0, -0,0,0,3,0, -0,0,24,0,0, -0,0,0,0,0, -0,0,3,0,0, -0,0,0,0,0, -0,0,2,0,0, -0,0,24,0,0, -0,0,1,1,0, -0,0,0,2,0, -0,0,5,0,0, -0,0,6,1,0, -0,0,0,0,0, -0,0,20,0,0, -0,0,17,1,0, -0,1,0,0,0, -0,0,12,0,0, -0,0,2,3,0, -0,0,0,0,0, -0,0,9,0,0, -0,0,2,0,0, -0,0,5,0,0, -0,0,14,0,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,1,0,0, -0,0,2,0,0, -0,0,0,0,0, -2,0,6,0,0, -0,0,0,0,0, -0,3,12,0,0, -0,2,0,0,0, -0,0,3,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,17,0,0, -0,0,6,3,0, -0,0,0,1,0, -0,0,8,0,0, -1,0,10,2,0, -0,1,0,4,0, -0,0,8,0,0, -0,0,0,1,0, -0,0,0,2,0, -0,1,12,0,0, -0,0,0,2,0, -0,0,1,1,0, -0,0,7,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,6,0,0, -0,0,0,1,0, -0,0,25,1,0, -5,0,15,1,0, -0,3,9,2,0, -0,1,4,0,0, -0,0,3,1,0, -0,0,2,1,0, -0,0,10,0,0, -0,0,0,0,0, -0,2,8,0,0, -0,0,0,5,0, -0,3,0,5,0, -0,0,0,3,0, -0,0,57,1,0, -0,0,0,0,0, -0,0,1,2,0, -0,0,22,2,0, -0,0,0,0,0, -0,1,3,1,0, -0,0,8,4,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,7,1,0, -0,0,0,0,0, -0,1,0,1,0, -0,14,11,2,0, -0,1,0,0,0, -0,0,9,1,0, -0,0,2,0,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,20,0,0, -1,0,1,3,0, -0,0,9,0,0, -0,0,0,0,0, -0,0,2,1,0, -0,0,8,0,0, -0,0,0,1,0, -0,0,12,0,0, -0,0,10,0,0, -0,0,8,0,0, -0,0,6,2,0, -0,0,19,1,0, -0,1,0,0,0, -0,0,0,0,0, -0,0,0,4,0, -0,0,0,1,0, -0,0,3,1,0, -0,1,13,2,0, -0,0,0,1,0, -0,0,0,3,0, -0,0,5,3,0, -0,0,21,5,0, -0,0,0,4,0, -0,0,15,0,0, -0,0,6,1,0, -0,0,0,1,0, -0,1,1,1,0, -0,14,11,2,0, -0,1,1,0,0, -0,0,0,1,0, -0,0,14,1,0, -0,0,1,0,0, -0,0,1,1,0, -0,0,17,0,0, -0,0,13,1,0, -19,0,7,0,0, -0,0,0,0,0, -0,0,6,1,0, -0,0,28,0,0, -0,0,1,2,0, -0,0,0,0,0, -20,0,10,0,0, -0,2,1,1,0, -0,0,11,1,0, -0,0,0,0,0, -0,0,11,1,0, -0,0,26,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,13,0,0, -0,0,4,2,0, -0,0,1,1,0, -0,0,12,0,0, -0,0,7,0,0, -0,0,0,0,0, -0,1,0,1,0, -1,0,3,1,0, -0,0,10,0,0, -0,0,8,5,0, -0,0,1,3,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,3,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,1,1,0, -0,0,25,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,2,0,0, -0,0,3,1,0, -0,0,8,0,0, -0,0,4,2,0, -0,0,7,0,0, -0,1,5,0,0, -0,1,0,0,0, -0,0,0,1,0, -0,0,1,0,0, -0,0,17,0,0, -0,1,25,7,0, -9,0,5,1,0, -0,0,3,1,0, -0,2,0,0,0, -0,0,0,0,0, -0,0,10,4,0, -0,0,28,0,0, -4,0,5,1,0, -0,0,10,0,0, -0,0,10,4,0, -0,0,0,2,0, -0,2,4,0,0, -0,0,0,0,0, -0,0,10,1,0, -0,0,4,3,0, -0,0,0,3,0, -0,0,7,2,0, -0,0,6,1,0, -8,1,0,0,0, -0,0,3,1,0, -0,0,16,0,0, -0,0,1,3,0, -0,0,0,8,0, -0,0,0,1,0, -0,0,11,2,0, -0,0,4,3,0, -1,0,0,2,0, -0,0,0,1,0, -0,0,23,0,0, -0,0,11,0,0, -0,0,0,2,0, -0,0,15,0,0, -3,0,0,10,0, -0,0,10,0,0, -0,0,0,1,0, -0,0,9,0,0, -0,0,11,0,0, -0,0,5,7,0, -0,0,0,2,0, -0,2,14,0,0, -0,0,0,1,0, -0,0,18,1,0, -0,0,15,2,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,14,1,0, -0,0,21,1,0, -0,0,1,1,0, -0,0,0,1,0, -0,0,5,0,0, -0,0,0,0,0, -4,0,5,1,0, -0,0,0,1,0, -0,0,1,3,0, -0,0,6,2,0, -0,0,0,1,0, -0,0,10,2,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,2,1,0, -0,0,5,7,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,21,0,0, -0,0,7,0,0, -0,0,0,0,0, -0,0,1,1,0, -0,0,3,0,0, -0,0,0,2,0, -0,0,0,1,0, -0,0,7,1,0, -0,2,42,0,0, -0,1,18,0,0, -0,3,2,2,0, -0,0,5,3,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,6,1,0, -24,0,2,0,0, -0,2,0,0,0, -0,0,13,2,0, -0,1,16,0,0, -0,0,0,0,0, -0,3,0,2,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,25,0,0, -0,0,0,2,0, -0,0,25,1,0, -0,0,38,0,0, -0,1,4,0,0, -0,0,0,0,0, -0,0,2,1,0, -0,0,1,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,5,0,0, -0,0,8,1,0, -0,0,23,0,0, -0,0,12,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,2,0,0, -0,0,0,3,0, -0,0,0,0,0, -0,0,3,1,0, -0,1,11,1,0, -6,0,2,2,0, -0,0,0,2,0, -0,0,4,4,0, -0,0,0,2,0, -0,0,28,0,0, -0,0,3,0,0, -0,2,0,2,0, -0,0,3,0,0, -0,0,0,3,0, -0,3,2,2,0, -0,0,9,0,0, -0,2,42,0,0, -0,0,0,0,0, -0,0,2,3,0, -0,0,9,6,0, -0,0,0,3,0, -0,0,4,0,0, -0,0,0,3,0, -0,0,11,3,0, -0,0,1,2,0, -1,0,0,0,0, -0,0,2,2,0, -0,0,1,0,0, -0,0,10,2,0, -0,0,0,0,0, -0,0,11,1,0, -0,0,0,0,0, -0,1,15,3,0, -0,1,0,10,0, -0,0,0,0,0, -0,0,3,4,0, -24,0,2,0,0, -0,1,13,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,2,20,7,0, -0,0,3,0,0, -0,1,2,2,0, -0,0,8,8,0, -0,0,7,1,0, -0,0,6,1,0, -0,0,8,2,0, -0,0,21,0,0, -0,0,7,2,0, -0,0,0,1,0, -0,0,5,0,0, -0,1,9,0,0, -0,0,3,1,0, -0,0,3,4,0, -0,0,5,1,0, -0,2,7,0,0, -0,0,19,0,0, -0,0,9,0,0, -0,1,10,5,0, -0,0,9,1,0, -0,0,20,0,0, -0,0,11,1,0, -0,0,14,0,0, -0,0,0,0,0, -0,0,8,2,0, -0,0,30,0,0, -0,0,4,1,0, -0,0,1,2,0, -0,0,0,2,0, -0,0,0,1,0, -0,0,2,0,0, -0,0,1,1,0, -0,0,42,0,0, -0,0,11,0,0, -0,0,13,0,0, -0,0,0,1,0, -0,0,3,3,0, -0,1,28,1,0, -0,0,0,2,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,16,0,0, -0,0,1,0,0, -0,3,0,1,0, -0,0,8,0,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,1,0,0, -0,1,0,1,0, -0,0,0,1,0, -0,0,7,1,0, -0,0,5,0,0, -0,0,17,0,0, -0,0,3,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,7,3,0, -0,0,1,2,0, -0,0,0,2,0, -0,0,13,1,0, -0,3,8,1,0, -0,0,17,0,0, -0,0,32,1,0, -0,0,0,2,0, -0,0,0,2,0, -0,1,1,2,0, -15,0,7,0,0, -0,0,12,2,0, -0,0,19,0,0, -0,0,6,1,0, -0,0,3,4,0, -0,0,3,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,28,1,0, -0,0,7,1,0, -0,3,6,4,0, -0,0,5,0,0, -0,0,8,0,0, -0,0,13,2,0, -0,0,16,1,0, -31,0,0,1,0, -0,0,20,0,0, -0,0,0,3,0, -0,0,21,0,0, -0,0,4,0,0, -0,0,2,0,0, -0,0,15,1,0, -0,0,3,0,0, -0,0,21,1,0, -0,1,0,2,0, -0,3,9,2,0, -0,0,7,1,0, -0,0,2,0,0, -0,0,8,1,0, -0,0,0,3,0, -0,0,6,2,0, -0,0,0,0,0, -0,0,30,5,0, -0,0,1,1,0, -0,0,2,2,0, -0,0,0,1,0, -0,1,1,1,0, -0,0,14,0,0, -0,0,11,0,0, -0,0,0,3,0, -0,0,24,0,0, -0,71,0,3,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,8,0,0, -0,0,2,0,0, -0,0,0,2,0, -0,0,6,1,0, -0,0,2,1,0, -0,2,4,0,0, -0,0,11,0,0, -0,0,5,0,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,9,1,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,1,0,0, -0,0,3,4,0, -0,0,13,0,0, -0,0,2,3,0, -0,0,0,4,0, -0,0,0,0,0, -0,3,0,2,0, -0,0,0,16,0, -0,0,0,0,0, -0,0,4,2,0, -0,0,1,0,0, -0,0,9,2,0, -0,0,1,1,0, -0,0,1,2,0, -0,0,0,1,0, -0,0,13,1,0, -0,1,5,0,0, -0,0,0,0,0, -0,0,29,1,0, -0,0,0,1,0, -0,0,0,2,0, -0,1,7,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,40,1,0, -0,0,0,0,0, -0,1,4,0,0, -0,1,1,0,0, -0,12,0,7,0, -0,0,7,1,0, -0,0,0,2,0, -0,0,1,0,0, -0,0,3,0,0, -0,0,29,0,0, -0,0,1,0,0, -0,0,1,0,0, -0,1,0,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,8,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -1,0,30,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,2,4,0, -0,0,0,0,0, -0,0,3,1,0, -20,0,10,0,0, -0,0,6,0,0, -0,0,18,1,0, -0,0,20,0,0, -0,0,7,0,0, -0,0,4,3,0, -0,0,18,2,0, -0,0,14,3,0, -0,0,19,1,0, -0,0,0,0,0, -0,0,2,1,0, -0,0,0,2,0, -0,0,0,1,0, -0,0,0,46,0, -0,0,8,1,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,3,1,0, -0,0,0,1,0, -0,0,28,0,0, -0,0,0,1,0, -0,2,8,0,0, -0,1,21,0,0, -0,0,3,0,0, -0,0,0,0,0, -0,1,0,0,0, -0,0,25,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,2,4,0, -0,0,3,0,0, -15,0,7,0,0, -0,1,2,0,0, -1,0,10,2,0, -0,0,0,0,0, -0,0,33,2,0, -0,3,0,1,0, -0,0,32,1,0, -0,0,3,0,0, -0,0,0,1,0, -0,0,5,10,0, -0,0,1,3,0, -0,0,2,1,0, -0,0,0,1,0, -16,0,2,0,0, -0,0,9,0,0, -0,0,9,0,0, -0,0,2,1,0, -0,0,1,1,0, -0,0,16,0,0, -0,0,11,1,0, -0,0,0,5,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,7,3,0, -0,0,2,0,0, -0,1,13,2,0, -0,0,0,0,0, -0,1,10,4,0, -0,0,5,1,0, -0,0,0,0,0, -0,0,13,1,0, -0,0,0,0,0, -0,0,3,1,0, -0,1,0,2,0, -0,0,15,1,0, -17,0,0,0,0, -0,0,0,0,0, -0,0,9,4,0, -0,0,1,2,0, -0,0,4,1,0, -0,0,0,0,0, -0,1,3,0,0, -0,0,0,1,0, -15,0,17,1,0, -0,0,0,4,0, -0,0,16,0,0, -0,0,14,1,0, -0,0,0,0,0, -0,0,7,0,0, -0,0,2,0,0, -0,1,4,0,0, -0,0,8,2,0, -0,0,1,0,0, -0,0,18,0,0, -0,0,7,2,0, -0,0,0,1,0, -0,1,5,1,0, -0,0,8,1,0, -0,0,9,1,0, -0,0,0,0,0, -0,0,13,0,0, -0,0,0,0,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,55,0,0, -0,1,1,0,0, -0,0,7,2,0, -0,0,1,2,0, -0,0,16,0,0, -0,0,12,20,0, -0,0,0,2,0, -0,0,12,1,0, -0,0,1,0,0, -0,0,2,1,0, -0,0,8,1,0, -0,0,0,0,0, -0,0,15,0,0, -0,0,35,0,0, -0,0,0,0,0, -0,0,13,0,0, -0,0,18,0,0, -0,0,5,0,0, -0,0,0,1,0, -0,0,1,0,0, -0,0,1,0,0, -0,0,9,2,0, -0,0,0,0,0, -0,0,0,1,0, -0,2,0,0,0, -0,0,0,4,0, -0,0,0,0,0, -1,0,1,3,0, -0,0,9,1,0, -0,0,1,0,0, -0,0,21,1,0, -0,0,20,0,0, -0,1,12,0,0, -0,0,9,1,0, -0,0,0,0,0, -1,0,10,1,0, -0,0,11,0,0, -0,0,0,0,0, -0,0,29,0,0, -0,1,14,1,0, -71,0,11,0,0, -0,0,12,0,0, -0,0,32,0,0, -0,0,48,1,0, -0,1,5,0,0, -0,0,7,1,0, -0,0,0,2,0, -0,1,1,1,0, -0,0,29,0,0, -0,0,0,0,0, -0,1,7,1,0, -0,1,0,1,0, -0,2,4,0,0, -0,0,1,3,0, -5,0,15,1,0, -1,0,2,1,0, -0,0,3,0,0, -0,0,0,1,71, -0,0,6,0,0, -0,1,0,0,0, -0,1,5,0,0, -0,0,4,3,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,7,1,0, -0,0,0,1,0, -16,0,2,0,0, -0,0,0,2,0, -0,0,0,3,0, -0,1,14,3,0, -0,0,0,4,0, -0,0,10,0,0, -0,0,21,5,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,21,1,0, -0,0,38,0,0, -18,0,5,1,0, -0,0,0,0,0, -0,2,0,10,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,28,1,0, -0,0,0,0,0, -0,0,5,0,0, -0,0,0,1,0, -0,0,19,1,0, -0,0,0,0,0, -0,0,7,4,0, -0,0,4,1,0, -0,0,2,0,0, -0,0,1,1,0, -0,0,2,0,0, -0,0,0,5,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,12,1,0, -0,0,40,0,0, -0,0,0,8,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,15,0,0, -0,0,0,0,0, -0,0,13,0,0, -0,0,11,0,0, -0,1,0,1,0, -0,0,11,0,0, -0,0,0,0,0, -0,0,28,0,0, -0,0,2,1,0, -0,0,0,0,0, -0,0,0,4,0, -0,0,6,0,0, -0,0,0,0,0, -0,1,0,4,0, -0,0,0,2,0, -0,0,3,0,0, -0,0,3,0,0, -2,0,4,1,0, -0,0,11,0,0, -0,0,11,1,0, -0,3,8,1,0, -0,0,8,0,0, -0,0,5,9,0, -0,0,0,1,0, -0,1,18,0,0, -0,0,3,0,0, -0,0,38,0,0, -0,0,19,0,0, -0,1,0,1,0, -0,1,4,0,0, -0,0,0,1,0, -1,0,2,1,0, -0,0,8,0,0, -0,0,0,3,0, -0,0,7,2,0, -0,0,0,6,0, -0,0,0,0,0, -0,0,2,0,0, -0,0,2,0,0, -0,0,16,0,0, -0,0,0,3,0, -0,0,7,2,0, -0,0,0,4,0, -0,0,7,2,0, -0,3,18,1,0, -0,0,2,0,0, -0,0,7,4,0, -0,0,10,1,0, -0,0,0,0,0, -0,0,19,1,0, -0,0,19,1,0, -0,0,9,0,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,6,2,0, -0,0,0,1,0, -0,0,0,0,0, -0,2,25,1,0, -0,0,0,1,0, -0,0,11,3,0, -0,0,0,4,0, -0,0,28,0,0, -0,0,0,0,0, -0,0,9,1,0, -0,0,6,2,0, -0,0,2,1,0, -0,1,1,1,0, -0,0,12,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,12,4,0, -0,0,0,0,0, -0,0,0,4,0, -0,0,23,0,0, -0,4,0,2,0, -0,0,4,1,0, -0,0,0,0,0, -0,0,5,7,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,2,2,0, -1,0,8,1,0, -0,0,12,0,0, -0,0,1,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,13,1,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,25,2,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,1,19,2,0, -1,0,10,1,0, -0,0,22,0,0, -0,0,0,0,0, -0,0,11,1,0, -2,0,2,0,0, -0,0,21,1,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,18,0,0, -0,0,0,1,0, -0,0,0,6,0, -0,0,44,1,0, -0,0,16,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,2,1,0, -0,0,2,2,0, -0,0,3,7,0, -0,0,4,2,0, -0,0,1,0,0, -0,0,0,1,0, -0,0,10,2,0, -0,1,14,0,0, -0,1,4,2,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,12,0,0, -0,0,0,0,0, -0,0,22,0,0, -0,0,5,2,0, -0,0,3,0,0, -0,0,8,0,0, -0,0,0,0,0, -1,0,11,1,0, -0,0,31,2,0, -0,0,24,0,0, -0,1,2,4,0, -0,0,0,1,0, -0,0,0,3,0, -0,0,11,0,0, -0,0,0,0,0, -0,0,29,1,0, -0,0,0,0,0, -0,0,12,1,0, -0,0,25,1,0, -0,0,1,0,0, -0,1,11,2,0, -0,0,0,5,0, -0,0,8,1,0, -2,0,9,2,0, -0,0,39,0,0, -0,0,4,3,0, -0,0,0,3,0, -0,0,17,0,0, -0,0,0,0,0, -1,0,1,2,0, -0,0,0,3,0, -0,0,29,0,0, -0,0,0,0,0, -0,1,7,1,0, -0,0,28,2,0, -48,0,4,2,0, -31,0,0,1,0, -0,0,0,2,0, -0,0,15,1,0, -0,0,3,0,0, -0,0,0,0,0, -0,0,12,0,0, -0,0,0,0,0, -0,1,7,0,0, -0,0,15,0,0, -0,0,4,0,0, -0,0,1,0,0, -0,0,16,1,0, -0,0,1,0,0, -0,0,4,4,0, -0,0,14,0,0, -0,0,14,1,0, -0,0,0,1,0, -0,0,7,1,0, -0,0,1,1,0, -0,0,0,0,0, -0,1,19,1,0, -0,0,0,0,0, -0,0,9,0,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,11,3,0, -0,0,3,0,0, -0,0,10,2,0, -0,0,11,1,0, -0,1,7,1,0, -0,1,18,3,0, -0,0,0,0,0, -0,0,3,0,0, -1,0,0,2,0, -0,0,14,3,0, -0,0,8,0,0, -0,0,0,3,0, -0,0,3,0,0, -0,0,8,1,0, -0,0,6,1,0, -0,0,9,0,0, -1,0,2,1,0, -0,0,8,1,0, -0,1,14,1,0, -0,0,42,0,0, -0,0,10,2,0, -0,0,5,9,0, -0,0,31,0,0, -0,0,13,0,0, -0,0,0,0,0, -0,0,12,0,0, -0,0,0,1,0, -0,0,2,1,0, -0,0,0,2,0, -0,0,2,0,0, -4,0,15,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,1,0,0, -0,0,8,0,0, -0,0,12,4,0, -0,0,29,0,0, -0,0,7,2,0, -27,0,19,0,0, -0,0,0,0,0, -24,0,2,0,0, -0,0,0,3,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,17,1,0, -0,0,3,12,0, -0,0,0,0,0, -0,0,0,0,0, -0,1,7,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,1,1,1,0, -0,0,7,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,1,0,1,0, -0,0,9,0,0, -0,0,0,1,0, -0,0,13,1,0, -0,0,12,0,2, -0,0,26,1,0, -0,0,7,0,0, -0,0,1,3,0, -0,1,7,3,0, -0,0,2,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,1,5,0, -0,0,0,0,0, -0,0,32,1,0, -0,0,0,0,0, -14,0,4,0,0, -0,0,0,2,0, -0,2,4,0,0, -0,0,4,1,0, -0,0,0,0,0, -0,0,3,1,0, -0,0,2,0,0, -0,0,0,1,0, -0,0,6,4,0, -0,0,1,0,0, -0,0,0,1,0, -0,0,1,0,0, -0,0,3,1,0, -0,0,10,0,0, -0,0,5,0,0, -0,0,8,1,0, -0,0,0,2,0, -0,0,8,0,0, -0,2,0,10,0, -0,0,0,1,0, -0,0,1,2,0, -0,0,11,0,0, -0,0,19,1,0, -0,0,0,1,0, -0,0,3,0,0, -0,0,0,3,0, -0,0,0,2,0, -1,0,1,3,0, -0,0,9,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,4,1,0, -0,0,3,4,0, -0,0,0,1,0, -0,0,11,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,4,0,0, -0,0,8,5,0, -0,0,12,0,0, -0,0,23,3,0, -0,0,16,2,0, -0,0,8,0,0, -0,0,9,0,0, -0,0,13,2,0, -0,0,8,0,0, -0,0,11,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,2,0, -3,0,8,2,0, -0,0,0,0,0, -0,0,2,1,0, -0,1,0,2,0, -0,1,11,2,0, -0,0,0,1,0, -0,1,0,3,0, -0,1,3,4,0, -0,1,1,1,0, -0,0,0,0,0, -0,0,24,1,0, -0,0,0,0,0, -0,0,22,0,0, -0,0,11,0,0, -0,0,2,1,0, -0,0,0,0,0, -0,0,1,1,0, -0,0,3,0,0, -0,0,0,0,0, -0,0,3,0,0, -0,0,17,0,0, -0,0,0,5,0, -0,0,0,0,0, -0,0,2,0,0, -0,0,0,1,0, -1,0,1,3,0, -0,0,4,0,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,2,0,0, -0,0,19,0,0, -0,0,0,2,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,4,1,0, -0,0,28,0,0, -0,0,2,0,0, -0,0,11,0,0, -0,0,21,0,0, -0,0,0,0,0, -0,1,0,0,0, -0,0,2,0,0, -0,0,0,0,0, -0,0,5,0,0, -0,1,12,0,0, -0,0,0,2,0, -0,0,22,0,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,2,0,0, -0,2,4,1,0, -0,0,1,1,0, -0,0,20,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,13,0,0, -0,0,0,2,0, -0,0,0,2,0, -0,0,0,2,0, -0,0,15,2,0, -0,1,4,0,0, -0,0,0,0,0, -0,0,1,1,0, -0,0,16,0,0, -0,0,0,0,0, -0,0,17,0,0, -0,0,0,1,0, -0,0,0,4,0, -0,0,0,1,0, -0,0,6,1,0, -0,0,21,1,0, -0,0,3,1,0, -0,0,4,3,0, -0,0,0,1,0, -0,1,28,0,0, -0,0,5,0,0, -0,0,0,1,0, -0,0,9,1,0, -0,0,0,3,0, -0,0,71,1,0, -0,1,15,3,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,6,1,0, -0,0,9,0,0, -0,0,0,1,0, -0,0,12,0,0, -0,0,3,0,0, -0,0,1,0,0, -0,0,0,1,0, -0,0,1,0,0, -0,0,0,2,0, -0,14,11,2,0, -9,0,0,2,0, -0,0,1,0,0, -0,0,0,3,0, -0,0,0,0,0, -31,0,0,1,0, -0,0,2,3,0, -0,0,5,0,0, -0,1,14,1,0, -0,0,5,0,0, -0,0,7,0,0, -0,0,13,0,0, -0,0,0,2,0, -0,0,12,20,0, -0,0,1,3,0, -0,0,18,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,32,0,0, -0,0,5,1,0, -0,0,8,1,0, -0,0,5,2,0, -0,0,7,1,0, -0,0,1,2,0, -0,1,0,1,0, -0,0,9,0,0, -0,0,2,0,0, -0,0,55,0,0, -0,1,27,2,0, -0,3,12,2,0, -0,0,16,0,0, -0,0,0,1,0, -0,0,8,0,0, -1,0,30,2,0, -0,0,2,1,0, -0,0,0,1,0, -0,0,0,1,0, -6,0,4,0,0, -0,1,0,4,3, -0,0,0,0,0, -48,0,4,2,0, -0,0,1,0,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,11,0,0, -0,0,0,0,0, -0,1,1,0,0, -0,2,0,10,0, -0,2,4,0,0, -0,0,6,1,0, -0,0,0,2,0, -0,0,0,0,0, -0,4,21,1,0, -0,0,1,0,0, -0,0,2,0,0, -0,0,3,0,0, -0,1,5,7,0, -0,0,5,2,0, -0,0,0,0,0, -0,0,0,2,0, -0,1,13,1,0, -0,0,0,1,0, -0,0,20,0,0, -10,0,1,1,0, -3,0,0,10,0, -0,0,15,0,0, -0,0,0,0,0, -0,0,15,0,0, -0,0,0,1,0, -0,0,11,0,0, -0,0,5,9,0, -38,0,6,1,0, -0,0,2,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,4,0,0, -0,0,3,1,0, -0,0,1,3,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,8,0,0, -0,0,1,0,0, -0,0,4,4,0, -0,0,11,1,0, -0,0,0,0,0, -0,1,3,0,0, -0,0,0,0,0, -0,0,4,0,0, -0,1,16,0,0, -0,1,0,0,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,1,1,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,14,1,0, -0,0,9,0,0, -0,0,5,1,0, -0,0,0,0,0, -5,0,0,0,0, -0,0,13,0,0, -0,0,0,0,0, -0,0,4,1,0, -0,2,9,1,0, -0,0,14,0,0, -0,0,0,1,0, -0,0,13,0,0, -0,0,13,2,0, -0,0,20,0,0, -0,0,0,2,0, -0,0,0,1,0, -0,0,13,3,0, -0,0,0,2,0, -0,2,0,2,0, -0,0,39,0,0, -0,0,0,1,0, -0,1,0,1,0, -0,0,5,1,0, -0,0,0,0,0, -0,0,3,2,0, -0,0,10,0,0, -2,0,4,1,0, -0,1,5,1,0, -0,0,17,0,0, -0,0,3,0,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,10,1,0, -0,0,0,2,0, -0,0,17,0,0, -0,0,0,0,0, -0,1,4,2,0, -0,0,4,0,0, -0,0,21,5,0, -0,0,28,1,0, -0,1,3,0,0, -0,0,28,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,2,0,7,0, -5,0,0,1,0, -0,0,2,0,0, -0,0,1,1,0, -0,0,0,1,0, -0,14,11,2,0, -0,0,19,0,0, -0,0,13,0,0, -6,0,2,2,0, -1,0,4,0,0, -0,0,17,1,0, -0,0,0,0,0, -0,0,3,1,0, -0,0,23,0,0, -0,0,0,0,0, -0,0,23,3,0, -0,0,0,2,0, -0,0,4,2,0, -0,0,7,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,2,0, -0,1,0,1,0, -0,0,4,0,0, -0,1,7,0,0, -0,0,1,0,0, -0,0,5,1,0, -0,0,11,0,0, -0,0,0,1,0, -0,0,14,0,0, -0,0,15,0,0, -0,0,9,6,0, -0,0,3,0,0, -0,0,0,0,0, -0,0,4,1,0, -0,0,0,1,0, -0,0,1,0,0, -0,0,13,41,0, -0,0,45,2,0, -0,0,0,5,0, -0,0,1,0,0, -0,0,17,1,0, -0,0,0,0,0, -0,0,33,2,0, -0,0,10,0,0, -31,0,0,1,0, -0,0,0,1,0, -1,0,10,2,0, -0,0,0,1,0, -0,0,0,3,0, -0,0,0,2,0, -0,0,0,3,0, -0,1,0,0,0, -0,0,0,0,0, -0,0,17,1,0, -0,0,0,0,0, -0,0,25,1,0, -0,0,4,2,0, -0,0,2,1,0, -0,0,11,0,0, -0,0,0,3,0, -0,0,0,0,0, -32,0,1,1,0, -0,0,4,0,0, -0,0,6,0,0, -0,0,10,0,0, -0,0,9,4,0, -0,0,21,1,0, -0,0,0,1,0, -0,0,1,0,0, -0,0,7,2,0, -0,0,5,0,0, -0,0,0,1,0, -0,0,3,0,0, -0,2,4,1,0, -9,0,0,2,0, -0,0,19,1,0, -0,1,11,0,0, -0,0,4,1,0, -0,0,0,1,0, -0,0,19,0,0, -0,0,1,0,0, -0,0,0,2,0, -0,0,3,0,0, -0,0,0,0,0, -0,0,7,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,9,0,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,6,0,0, -0,0,5,1,0, -0,0,23,0,0, -0,0,23,0,0, -0,0,6,1,0, -0,0,2,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,2,1,0, -0,0,14,0,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,1,1,0, -0,0,13,2,0, -0,0,11,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,9,0,0, -0,0,0,0,0, -0,0,10,0,0, -0,0,0,1,0, -0,0,18,0,0, -0,0,5,0,0, -0,0,1,0,0, -5,0,0,1,0, -0,0,3,0,0, -0,0,6,1,0, -0,0,1,2,0, -0,0,0,3,0, -0,0,0,0,0, -0,1,22,0,0, -0,0,0,1,0, -0,0,6,4,0, -0,1,25,7,0, -0,0,0,1,0, -0,0,14,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,16,1,0, -0,0,12,4,0, -0,0,25,2,0, -0,0,24,0,0, -0,1,14,0,0, -0,0,23,0,0, -0,0,5,9,0, -0,0,0,0,0, -0,0,1,0,0, -0,0,0,1,0, -0,1,1,0,0, -0,0,1,0,0, -0,0,10,4,0, -0,1,6,0,0, -0,0,39,0,0, -0,0,0,3,0, -0,0,5,7,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,19,0,0, -0,0,0,1,0, -0,0,0,10,0, -0,0,3,0,0, -0,0,0,1,0, -0,0,5,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,1,1,1,0, -0,0,12,1,0, -0,0,0,3,0, -0,0,6,1,0, -0,0,13,0,0, -0,0,0,0,0, -0,0,12,0,0, -0,0,0,1,0, -0,0,12,0,0, -15,0,7,0,0, -0,0,0,2,0, -0,0,20,0,0, -0,0,10,2,0, -0,0,1,1,0, -0,0,7,0,0, -0,1,14,0,0, -0,0,0,0,0, -0,0,20,0,0, -0,1,5,7,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,12,2,0, -0,0,1,2,0, -0,0,6,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,17,0,0, -0,0,0,0,0, -0,0,3,1,0, -0,1,7,1,0, -0,1,0,3,0, -0,0,0,0,0, -0,0,25,1,0, -0,0,7,0,0, -0,0,0,0,0, -0,0,1,0,0, -0,0,41,0,0, -0,0,3,1,0, -0,0,28,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,11,1,0, -0,0,0,0,0, -0,0,7,0,0, -0,0,1,1,0, -0,0,3,1,0, -0,0,45,0,0, -9,0,5,1,0, -0,0,38,0,0, -0,0,3,0,0, -0,0,2,0,0, -0,0,4,0,0, -0,0,0,2,0, -0,4,33,2,1, -0,0,23,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,1,0,0, -0,0,0,2,0, -0,0,4,0,0, -0,0,7,4,0, -0,0,1,0,0, -0,0,1,1,0, -0,0,7,1,0, -0,0,0,1,0, -0,0,15,0,0, -0,0,0,2,0, -0,0,11,0,0, -0,0,0,0,0, -0,0,6,2,0, -0,1,3,1,0, -0,0,0,1,0, -0,3,2,2,0, -0,1,0,1,0, -0,0,0,0,0, -0,0,48,1,0, -0,0,48,1,0, -0,2,25,5,0, -0,0,16,4,0, -0,0,5,1,0, -0,0,15,1,0, -0,0,4,1,0, -0,0,0,5,0, -0,0,0,0,0, -0,0,21,1,0, -0,0,19,3,0, -0,0,3,0,0, -0,0,8,1,0, -0,0,6,2,0, -0,0,5,2,0, -0,0,12,20,0, -0,0,15,0,0, -0,0,1,0,0, -0,0,16,0,0, -0,0,0,1,0, -0,0,3,0,0, -0,0,0,3,0, -0,0,1,0,0, -0,0,9,0,0, -0,0,38,0,0, -0,0,0,0,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,19,3,0, -0,0,7,2,0, -0,0,0,2,0, -0,0,54,0,0, -0,0,3,0,0, -0,0,0,5,0, -0,0,17,0,0, -0,0,11,0,0, -0,3,0,1,0, -0,1,10,1,0, -0,0,1,0,0, -1,0,10,2,0, -0,0,0,1,0, -0,0,0,5,0, -0,3,12,0,0, -0,0,7,4,0, -0,0,3,0,0, -5,0,0,1,0, -0,0,11,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,22,6,0, -0,1,0,0,0, -0,0,0,0,0, -0,0,1,0,0, -0,2,25,1,0, -0,0,1,0,0, -0,0,0,2,0, -0,0,15,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,13,0,0, -0,1,5,0,0, -0,0,17,0,0, -0,4,1,1,0, -15,0,7,0,0, -0,0,1,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,3,0, -0,3,0,2,0, -0,1,19,1,0, -0,0,8,1,0, -0,0,3,1,0, -0,0,0,0,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,1,14,0,0, -0,0,0,1,0, -0,0,4,1,0, -0,0,5,1,0, -0,0,1,2,0, -1,0,0,1,0, -0,0,1,0,0, -0,0,0,1,0, -0,0,5,1,0, -0,0,6,1,0, -0,0,30,0,0, -0,0,20,0,0, -0,0,3,0,0, -0,0,25,0,0, -0,0,0,1,0, -0,0,5,0,0, -0,0,19,1,0, -0,0,7,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,14,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,0,2,0, -0,0,2,1,0, -0,0,12,0,0, -0,0,0,1,0, -0,0,0,2,0, -0,3,0,1,0, -0,0,8,0,0, -0,0,7,1,0, -0,0,0,0,0, -19,0,7,0,0, -0,0,5,0,0, -0,0,2,0,0, -0,0,29,4,0, -0,1,0,3,0, -0,0,11,0,0, -0,0,22,0,0, -0,0,0,0,0, -0,1,10,1,0, -0,0,7,0,0, -0,0,27,0,0, -0,0,0,0,0, -0,0,3,4,0, -0,0,3,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,4,0,0, -0,0,2,1,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,0,2,0, -0,1,9,0,0, -0,1,11,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,1,14,0,0, -0,0,3,4,0, -2,0,0,0,0, -0,0,0,0,0, -0,0,5,0,0, -0,0,9,0,0, -0,0,5,0,0, -0,1,8,2,0, -10,0,6,4,0, -0,0,0,0,0, -0,0,13,1,0, -0,0,28,0,0, -0,0,1,0,0, -0,0,30,0,0, -0,0,2,0,0, -0,0,5,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,4,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,14,1,0, -0,0,11,0,0, -0,0,0,2,0, -0,1,0,1,0, -0,0,21,0,0, -0,0,0,1,0, -0,0,2,2,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,8,0,0, -0,1,14,1,0, -0,0,21,5,0, -0,1,0,2,0, -0,0,0,0,0, -0,0,2,1,0, -0,0,2,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,1,5,7,0, -0,1,3,1,0, -0,0,23,0,0, -0,0,0,1,0, -0,0,0,3,0, -0,0,5,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,1,2,4,0, -0,1,8,1,0, -0,0,23,0,0, -0,0,0,0,0, -0,2,14,0,0, -0,3,0,1,0, -0,0,7,0,0, -0,1,0,0,0, -0,0,17,0,0, -0,1,2,2,0, -0,1,9,1,0, -0,0,0,3,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,3,0,0, -0,0,0,0,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,2,2,0, -0,0,8,4,0, -2,0,6,0,0, -0,0,9,0,0, -0,0,1,0,0, -0,0,0,2,0, -0,0,3,2,0, -0,0,2,2,0, -0,0,19,1,0, -0,0,1,0,0, -0,1,4,0,0, -0,0,7,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,1,0,4,0, -0,0,0,0,0, -0,2,0,2,0, -0,2,8,0,0, -0,0,0,0,0, -0,3,0,2,0, -0,0,0,0,0, -0,0,22,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,2,14,0,0, -0,0,0,0,0, -0,0,22,0,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,2,2,0, -0,0,10,0,0, -0,0,0,4,0, -0,0,11,1,0, -0,0,0,0,0, -0,0,0,5,0, -0,0,10,1,0, -0,0,0,2,0, -0,0,1,1,0, -0,0,0,2,0, -0,0,13,2,0, -0,0,9,2,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,13,41,0, -0,0,19,1,0, -0,0,11,0,0, -0,0,1,0,0, -0,0,13,0,0, -0,0,2,0,0, -0,0,0,0,0, -0,0,14,1,0, -0,1,0,1,0, -0,1,10,1,0, -0,0,15,0,0, -0,0,0,1,0, -0,0,12,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,18,1,0, -0,0,0,0,0, -0,1,8,0,0, -0,1,2,4,0, -0,0,1,0,0, -0,0,2,0,0, -0,0,6,2,0, -0,0,0,0,0, -0,0,32,0,0, -20,0,10,0,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,3,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,16,0,0, -0,0,4,3,0, -0,0,0,0,0, -0,1,2,0,0, -0,0,30,0,0, -0,0,0,0,0, -0,0,6,0,0, -0,0,0,3,0, -0,0,13,0,0, -0,0,0,0,0, -0,0,17,2,0, -0,0,12,0,0, -0,0,23,0,0, -0,0,1,1,0, -0,0,5,1,0, -0,0,0,1,0, -0,0,3,0,0, -0,1,15,3,0, -0,1,4,0,0, -0,5,0,4,0, -0,1,11,0,0, -0,0,9,0,0, -0,1,5,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,5,7,0, -0,0,11,0,0, -0,0,0,0,0, -0,0,16,1,0, -0,0,0,1,0, -0,0,25,1,0, -0,0,48,1,0, -0,0,10,0,0, -0,2,0,2,0, -0,0,7,0,0, -0,0,39,0,0, -0,0,0,2,0, -0,0,20,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,4,1,0, -0,0,5,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,16,0,0, -0,1,0,2,0, -0,0,24,1,0, -0,0,6,1,0, -0,0,0,3,0, -0,2,25,5,0, -0,0,15,1,0, -0,0,6,1,0, -0,0,16,0,0, -0,0,4,2,0, -0,1,19,1,0, -0,0,0,0,0, -0,0,12,2,0, -0,0,0,0,0, -0,0,1,0,0, -0,0,5,1,0, -0,0,31,0,0, -0,0,4,1,0, -0,0,2,0,0, -0,0,11,3,6, -0,0,3,1,0, -0,0,8,2,0, -0,1,12,0,0, -0,0,0,1,0, -0,2,0,2,0, -1,0,10,1,0, -0,0,6,1,0, -0,0,18,0,0, -0,0,6,2,0, -0,0,17,5,0, -0,0,0,0,0, -0,0,10,2,0, -0,0,49,3,0, -0,0,11,1,0, -0,2,0,0,0, -0,0,0,0,0, -0,1,16,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,12,0,0, -0,0,20,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,3,0,0, -0,0,0,0,0, -0,0,40,0,0, -0,71,0,3,0, -0,0,30,5,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,14,1,0, -0,0,3,0,0, -0,0,22,0,0, -0,0,2,1,0, -0,0,1,0,0, -0,0,0,2,0, -0,0,25,0,0, -0,0,0,0,0, -0,0,3,0,0, -0,0,0,1,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,17,2,0, -0,0,49,2,0, -0,0,15,0,0, -0,0,10,1,0, -0,2,9,1,0, -0,0,3,1,0, -0,0,0,1,0, -0,0,8,1,0, -0,0,3,1,0, -0,2,0,2,0, -0,1,9,0,0, -0,0,0,2,0, -0,0,0,0,0, -5,0,0,1,0, -0,0,0,0,0, -0,0,14,0,0, -0,0,0,2,0, -0,0,2,3,0, -0,0,6,2,0, -0,0,10,4,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,13,0,0, -0,0,1,1,0, -0,0,0,2,0, -0,0,16,0,0, -0,1,0,0,0, -0,0,3,2,0, -0,0,2,0,0, -0,0,10,4,0, -0,0,0,0,0, -0,0,0,12,0, -0,0,3,0,0, -0,0,11,0,0, -0,1,11,2,0, -0,0,35,1,0, -0,0,0,1,0, -15,0,7,0,0, -0,0,1,2,0, -0,0,6,2,0, -0,0,6,1,0, -0,0,10,0,0, -0,0,0,3,0, -0,0,0,0,0, -0,1,0,0,0, -0,1,1,1,0, -0,0,1,1,0, -0,0,13,0,0, -0,0,9,1,0, -0,1,0,1,0, -0,0,17,1,0, -0,0,8,2,0, -0,0,0,0,0, -0,1,0,3,0, -0,0,0,4,0, -0,0,5,0,0, -0,0,0,0,0, -0,0,30,0,0, -0,0,0,1,0, -0,0,3,0,0, -0,0,0,0,0, -0,0,1,1,0, -0,0,9,2,0, -0,0,20,0,0, -0,0,15,1,0, -0,0,3,7,0, -0,0,1,0,0, -0,0,38,0,0, -0,0,0,1,0, -0,0,3,1,0, -0,0,2,1,0, -0,0,1,0,0, -0,0,7,3,0, -0,0,0,12,0, -0,0,20,0,0, -0,0,2,0,0, -0,0,0,3,0, -0,0,0,0,0, -0,0,5,1,0, -0,0,3,1,0, -0,0,16,0,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,7,4,0, -0,0,7,1,0, -0,0,0,10,0, -0,0,23,2,0, -0,0,0,1,0, -0,1,0,0,0, -0,0,9,0,0, -0,0,19,0,0, -0,0,0,2,0, -0,0,3,1,0, -0,0,8,0,0, -0,0,0,0,0, -0,0,12,4,0, -0,1,4,0,0, -0,2,0,2,0, -0,0,0,2,0, -0,0,11,1,0, -0,0,3,0,0, -0,0,14,1,0, -0,0,0,0,0, -0,0,20,8,0, -0,0,0,0,0, -2,0,0,0,0, -0,0,0,0,0, -0,0,1,3,0, -0,0,0,3,0, -0,0,3,7,0, -0,0,11,0,0, -0,0,2,3,0, -0,1,11,0,0, -0,1,9,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,22,2,0, -0,0,17,0,0, -0,0,0,1,0, -0,0,0,1,0, -0,1,25,7,0, -0,0,0,1,0, -0,0,8,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -4,0,5,1,0, -0,0,6,1,0, -0,1,0,0,0, -0,0,0,0,0, -0,0,0,4,0, -0,0,0,5,0, -0,0,1,0,0, -0,0,8,0,0, -0,0,5,0,0, -0,0,0,0,0, -0,0,9,0,0, -0,0,2,0,0, -0,0,18,0,0, -0,0,11,1,0, -0,0,20,0,0, -0,0,3,0,0, -0,0,19,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,4,0,2,0, -0,0,1,0,0, -0,0,0,2,0, -0,0,0,4,0, -0,0,15,0,0, -0,0,1,3,0, -0,0,8,0,0, -0,0,3,0,0, -0,0,7,1,0, -0,0,0,2,0, -0,1,0,3,0, -0,0,22,0,0, -0,0,6,1,0, -0,0,13,3,0, -24,0,2,0,0, -11,0,2,0,0, -0,0,0,1,0, -0,0,11,1,0, -0,0,13,0,0, -0,0,0,0,0, -0,0,3,0,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,10,3,0, -0,3,2,2,0, -0,0,4,1,0, -0,0,3,0,0, -0,0,4,0,0, -0,0,0,0,0, -0,0,2,3,0, -0,0,17,1,0, -0,0,7,0,0, -0,0,0,3,0, -0,0,0,0,0, -0,0,15,0,0, -0,1,23,0,0, -0,0,15,0,0, -0,0,19,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,49,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,1,0,0,0, -0,0,3,1,0, -0,0,0,0,0, -0,0,2,0,0, -0,0,0,2,0, -0,0,4,0,0, -0,0,0,46,0, -0,0,0,0,0, -0,0,13,2,0, -0,0,1,0,0, -0,0,0,0,0, -2,0,4,1,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,3,0,0, -0,0,7,1,0, -0,3,0,1,0, -0,0,5,1,0, -0,0,7,2,0, -0,0,0,1,0, -0,1,13,0,0, -0,0,13,1,0, -0,0,28,1,0, -0,1,2,2,0, -0,0,0,1,0, -0,0,3,0,0, -0,0,0,0,0, -0,0,6,2,0, -0,0,3,0,0, -0,0,7,1,0, -0,1,28,1,0, -0,0,32,1,0, -0,0,5,1,0, -0,0,5,0,0, -0,0,15,0,0, -0,0,0,0,0, -0,0,2,3,0, -0,0,12,0,0, -0,0,4,0,0, -0,0,0,0,0, -0,0,19,1,0, -0,0,7,3,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,4,1,0, -0,2,9,1,0, -0,0,4,4,0, -0,0,21,1,0, -0,0,12,2,0, -0,0,11,0,0, -0,0,0,0,0, -0,1,0,0,0, -0,0,7,0,0, -0,0,4,0,0, -0,0,3,1,0, -0,0,5,0,0, -0,0,0,0,0, -0,0,7,3,0, -0,2,0,7,0, -0,1,0,0,0, -0,0,0,0,0, -0,4,21,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,1,0,0, -0,0,12,0,0, -0,0,1,2,0, -0,0,0,0,0, -0,0,27,0,0, -0,0,6,0,0, -0,0,0,4,0, -0,0,0,3,0, -0,0,0,0,0, -5,0,3,1,0, -0,0,33,1,0, -0,0,7,3,0, -0,0,16,1,0, -0,0,2,1,0, -15,0,7,0,0, -0,0,5,0,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,8,1,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,1,2,0, -0,0,8,1,0, -0,0,0,0,0, -0,0,23,0,0, -0,0,1,0,0, -0,0,19,0,0, -0,0,23,1,0, -0,0,8,0,0, -0,0,14,1,0, -0,2,4,0,0, -0,0,3,2,0, -0,0,28,2,0, -0,1,14,1,0, -0,0,2,4,0, -0,0,3,0,0, -0,2,0,2,0, -0,1,0,1,0, -0,0,0,1,0, -0,1,27,2,0, -0,0,0,4,0, -0,0,0,0,0, -0,0,7,1,0, -0,3,18,1,0, -0,0,6,1,0, -1,0,10,3,0, -0,0,4,0,0, -0,0,0,0,0, -0,1,7,0,0, -0,0,0,1,0, -0,0,3,1,0, -0,0,10,1,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,35,1,0, -0,0,0,1,0, -10,1,4,1,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,2,0,0, -0,0,9,1,0, -0,0,0,1,0, -0,1,0,1,0, -0,0,26,0,0, -0,0,15,1,0, -0,0,0,1,0, -0,0,1,0,0, -3,0,8,2,0, -0,0,8,0,0, -0,0,0,0,0, -0,0,5,0,0, -0,0,3,2,0, -0,0,0,0,0, -0,0,3,0,0, -0,0,9,0,0, -0,1,28,0,0, -0,0,3,0,0, -0,0,0,0,0, -0,0,3,1,0, -0,0,0,0,0, -0,0,3,2,0, -0,0,12,1,0, -0,3,0,5,0, -0,0,0,2,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,0,1,0, -2,0,6,0,0, -0,0,15,0,0, -0,0,0,0,0, -0,0,21,0,0, -0,2,0,2,0, -0,0,0,2,0, -0,0,6,4,0, -0,1,0,0,0, -0,0,3,1,0, -0,0,0,2,0, -0,0,8,1,0, -0,0,15,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,3,0,0, -0,0,12,4,0, -0,0,4,3,0, -0,0,0,0,0, -0,0,0,4,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,5,0,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,0,1,0, -0,1,0,1,0, -0,0,8,0,0, -0,1,2,2,0, -0,0,7,1,0, -0,0,2,0,0, -0,0,0,8,0, -0,0,8,0,0, -0,0,1,2,0, -0,0,1,3,0, -0,0,4,4,0, -0,0,15,1,0, -0,0,0,0,0, -0,0,21,0,0, -0,0,0,3,0, -0,0,15,0,0, -0,0,1,0,0, -15,0,7,0,0, -0,1,0,0,0, -0,1,0,10,0, -0,0,8,5,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,1,4,0, -0,5,0,4,0, -0,0,9,1,0, -0,0,57,1,0, -0,0,6,3,0, -0,0,10,0,0, -0,0,0,1,0, -0,1,15,3,0, -0,0,7,1,0, -0,0,9,0,0, -0,0,2,0,0, -0,0,3,1,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,9,0,0, -0,0,6,0,0, -0,0,1,1,0, -0,0,25,1,0, -0,2,0,0,0, -0,0,10,0,0, -0,1,0,1,0, -0,0,7,0,0, -0,1,0,0,0, -0,0,0,1,0, -0,0,4,4,0, -0,0,11,1,0, -0,1,5,1,0, -0,0,7,2,0, -0,0,0,2,0, -0,0,0,1,0, -1,0,18,0,0, -0,0,0,2,0, -0,0,5,0,0, -0,0,0,4,0, -0,0,3,7,0, -0,0,6,1,0, -0,0,12,20,0, -0,0,15,0,0, -0,0,16,1,0, -0,2,7,0,0, -0,0,0,4,0, -0,0,0,0,0, -0,0,0,0,0, -0,2,0,1,0, -0,0,0,1,0, -0,0,28,1,0, -0,0,0,0,0, -0,0,29,0,0, -0,0,13,0,0, -0,0,5,0,0, -0,1,7,3,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,4,0,0, -0,0,21,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,5,1,0, -0,0,0,1,0, -0,2,1,1,0, -0,0,0,0,0, -0,1,13,1,0, -0,1,0,1,0, -0,0,2,1,0, -1,0,8,1,0, -0,0,2,0,0, -0,0,0,0,0, -0,0,8,0,0, -0,0,6,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,6,4,0, -0,1,15,6,0, -0,0,0,4,0, -0,0,0,0,0, -0,0,10,0,0, -0,0,11,1,0, -0,0,2,0,0, -0,0,0,2,0, -0,0,7,1,0, -0,0,17,1,0, -0,0,0,1,0, -0,0,3,0,0, -0,0,1,1,0, -0,0,4,0,0, -24,0,2,0,0, -0,0,0,0,0, -0,0,14,0,0, -0,1,0,0,0, -9,0,5,1,0, -0,0,0,0,0, -0,0,3,0,0, -0,0,22,0,0, -0,0,0,0,0, -0,0,19,1,0, -0,0,1,1,0, -0,0,0,0,0, -16,0,2,0,0, -0,0,29,0,0, -0,0,9,1,0, -0,0,0,3,0, -0,0,0,0,0, -0,0,1,24,0, -0,0,0,1,0, -0,1,0,0,0, -0,0,0,0,0, -0,0,5,4,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,49,3,0, -0,0,2,0,0, -0,0,5,0,0, -0,1,13,2,0, -0,0,16,0,0, -0,0,48,4,0, -0,0,5,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,9,4,0, -0,0,0,1,0, -0,2,0,2,0, -0,0,0,2,0, -0,0,3,2,0, -0,1,9,0,0, -0,0,3,0,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,5,0,0, -0,0,0,1,0, -0,1,4,0,0, -0,0,0,0,0, -0,0,10,0,0, -0,0,2,1,0, -0,1,2,1,0, -0,0,13,0,0, -0,0,5,2,0, -0,0,29,0,0, -0,0,3,1,0, -0,0,0,1,0, -0,0,8,0,0, -0,0,5,1,0, -0,1,0,0,0, -0,0,3,1,0, -0,0,4,0,0, -0,0,0,1,0, -0,0,12,1,0, -0,0,7,3,0, -0,0,0,0,0, -0,0,1,0,0, -0,0,0,2,2, -0,0,0,0,0, -0,0,35,1,0, -0,0,7,0,0, -0,0,0,0,0, -0,0,3,0,0, -0,0,0,0,0, -0,2,0,2,0, -0,0,1,0,0, -0,0,9,0,0, -0,0,1,0,0, -0,0,30,5,0, -0,0,11,1,0, -0,0,11,2,0, -0,0,14,0,0, -0,0,0,0,0, -0,0,9,0,0, -0,0,11,0,0, -0,0,16,0,0, -0,0,0,2,0, -0,0,11,1,0, -0,0,1,2,0, -0,0,2,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,4,1,0, -0,0,3,0,0, -0,0,1,3,0, -0,0,0,1,0, -0,0,19,1,0, -3,0,0,10,0, -0,0,3,0,0, -0,2,14,0,0, -0,0,0,0,0, -0,2,42,0,0, -0,0,13,1,0, -1,0,18,0,0, -0,0,1,0,0, -0,0,2,0,0, -0,0,0,3,0, -0,1,4,0,0, -0,0,13,0,0, -0,0,23,3,0, -0,0,13,0,0, -0,0,16,1,0, -0,0,2,0,0, -0,3,2,3,0, -0,0,14,0,0, -0,0,0,1,0, -0,0,12,2,0, -0,0,9,1,0, -1,0,2,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,13,3,0, -0,0,18,0,0, -0,0,31,2,0, -0,0,0,2,0, -0,0,0,2,0, -0,0,28,1,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,6,0,0, -0,0,1,1,0, -0,0,0,4,0, -0,2,5,6,0, -9,0,0,2,0, -0,1,0,0,0, -0,0,9,1,0, -0,0,3,0,0, -0,0,0,1,0, -0,0,1,0,0, -0,3,0,2,0, -0,0,0,3,0, -9,0,5,1,0, -0,0,0,0,0, -0,0,2,0,0, -0,0,2,0,0, -0,0,38,0,0, -0,0,5,0,0, -0,0,5,0,0, -0,1,11,2,0, -0,0,4,2,0, -0,0,1,3,1, -0,0,1,2,0, -0,1,14,1,0, -0,0,1,0,0, -0,0,28,1,0, -0,0,8,1,0, -0,0,3,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,0,1,0, -0,1,3,1,0, -0,0,7,0,0, -0,0,42,0,0, -0,1,1,0,0, -0,0,14,0,0, -0,0,21,0,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,19,2,0, -0,1,0,3,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,0,4,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,2,4,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,11,0,0, -16,0,2,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,1,0,0, -0,0,24,0,0, -0,3,12,2,0, -0,0,6,2,0, -0,0,0,2,0, -0,0,2,0,0, -0,0,0,2,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,0,1,0, -0,0,10,0,0, -8,1,0,0,0, -0,0,1,0,0, -0,0,8,4,0, -0,0,0,1,0, -0,0,10,0,0, -0,0,0,0,0, -27,0,19,0,0, -0,0,0,0,0, -0,0,1,0,0, -0,0,1,2,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,12,1,0, -0,0,7,0,0, -0,0,5,0,0, -0,0,2,0,0, -0,0,0,1,0, -0,0,24,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,7,0,0, -0,0,3,1,0, -0,0,9,0,0, -0,0,13,1,0, -0,0,7,3,0, -0,0,0,0,0, -0,0,20,0,0, -0,0,0,0,0, -0,0,7,0,0, -0,0,0,0,0, -5,0,3,1,0, -0,0,0,2,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,1,0,0, -0,2,0,2,0, -0,0,5,1,0, -0,0,0,2,0, -0,0,0,1,0, -0,1,0,1,0, -0,0,0,2,0, -0,0,11,0,0, -0,0,1,2,0, -0,0,0,0,0, -0,0,14,0,0, -0,0,0,1,0, -0,0,8,4,0, -0,0,7,0,0, -0,0,0,2,0, -1,0,0,1,0, -0,0,5,0,0, -1,0,0,0,0, -0,0,19,1,0, -0,0,0,1,0, -0,0,9,0,0, -0,0,2,0,0, -0,0,1,24,0, -0,0,5,1,0, -0,0,5,0,0, -0,0,9,0,0, -0,0,39,0,0, -0,0,8,9,0, -0,0,35,1,0, -0,0,15,1,0, -0,0,1,0,0, -1,0,1,3,0, -0,0,11,0,0, -0,0,8,0,0, -0,0,0,1,0, -0,0,4,3,0, -0,1,0,1,0, -0,0,0,1,0, -0,0,21,0,0, -0,0,4,1,0, -0,0,0,0,0, -0,0,6,1,0, -0,0,0,5,0, -0,0,3,0,0, -0,4,0,2,0, -0,0,0,8,0, -0,0,1,1,0, -0,1,0,0,0, -0,0,6,1,0, -0,0,4,2,0, -0,0,4,2,0, -0,0,9,0,0, -0,0,19,0,0, -0,0,0,1,0, -0,0,29,0,0, -1,0,18,0,0, -0,0,40,0,0, -0,0,4,1,0, -0,0,15,1,0, -0,0,0,1,0, -0,0,11,0,0, -0,0,13,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,3,0,0, -0,0,0,0,0, -0,0,10,0,0, -0,0,22,0,0, -0,0,0,12,0, -0,0,1,0,0, -0,1,0,0,0, -0,0,5,0,0, -0,0,2,0,0, -0,0,14,0,0, -0,1,1,1,0, -0,1,27,2,0, -0,1,0,1,0, -1,1,10,1,0, -0,0,0,0,0, -0,1,0,0,0, -0,0,0,1,0, -0,0,14,1,0, -0,0,0,10,0, -0,0,42,0,0, -0,0,3,0,0, -20,0,10,0,0, -0,0,9,0,0, -0,0,2,0,0, -0,1,0,1,0, -0,0,3,0,0, -0,0,12,0,0, -0,0,0,2,0, -0,0,8,1,0, -0,0,0,5,0, -0,0,0,0,0, -0,0,3,12,0, -0,0,7,1,0, -0,0,12,0,0, -0,0,2,1,0, -0,0,0,0,0, -0,0,15,1,0, -0,0,0,0,0, -0,0,1,0,0, -0,0,13,3,0, -0,0,0,0,0, -0,0,0,1,0, -0,1,28,4,0, -0,2,25,5,0, -0,0,1,1,0, -0,0,22,6,0, -0,0,0,2,0, -0,0,8,1,0, -0,0,9,1,0, -0,0,9,0,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,0,0,0, -5,0,0,1,0, -0,0,0,2,0, -0,4,0,2,0, -0,0,3,0,0, -9,0,0,2,0, -0,0,2,0,0, -0,0,10,2,0, -0,0,26,1,0, -0,0,26,3,0, -0,1,11,0,0, -0,0,10,1,0, -0,0,0,0,0, -0,1,28,1,0, -0,0,0,1,0, -0,0,22,0,0, -0,0,4,0,0, -0,0,16,2,0, -0,0,2,0,0, -0,0,0,2,0, -0,1,38,2,0, -0,0,0,2,0, -0,0,0,1,0, -0,0,19,1,0, -0,1,2,1,0, -0,0,0,0,0, -5,0,0,1,0, -0,0,0,0,0, -0,2,8,0,0, -0,0,0,0,0, -0,0,9,1,0, -0,0,0,0,0, -0,1,0,0,0, -0,1,0,0,0, -0,0,0,1,0, -0,0,3,1,0, -0,0,20,0,0, -1,0,10,2,0, -0,0,16,0,0, -1,0,4,0,0, -0,0,5,1,0, -0,0,20,0,0, -0,0,4,0,0, -0,0,1,2,0, -0,0,11,0,0, -0,0,4,2,0, -0,0,0,2,0, -0,0,0,0,0, -0,1,14,0,0, -0,0,1,2,0, -0,0,16,4,0, -0,1,0,0,0, -0,0,8,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,1,2,0,0, -0,0,1,1,0, -0,0,0,1,0, -0,0,3,1,0, -0,0,0,3,0, -0,0,1,0,0, -0,3,9,2,0, -0,0,11,0,0, -0,0,44,1,0, -0,0,5,1,0, -0,0,3,1,0, -0,0,0,0,0, -0,0,0,1,0, -2,0,0,0,0, -0,0,6,1,0, -0,0,0,0,0, -0,0,1,0,0, -0,0,12,3,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,16,0,0, -0,0,0,1,0, -0,0,1,1,0, -0,0,5,0,0, -0,0,0,0,0, -0,0,4,1,0, -0,0,0,0,0, -0,0,7,0,0, -0,0,3,2,0, -0,1,0,10,0, -0,0,1,0,0, -5,0,0,0,0, -0,0,7,1,0, -0,0,0,1,0, -0,0,2,1,0, -0,0,1,1,0, -0,0,4,1,0, -0,0,7,2,0, -0,0,11,3,0, -0,0,0,3,0, -16,0,2,0,0, -0,0,39,0,0, -0,0,11,0,0, -0,0,8,2,0, -0,1,18,0,0, -0,0,20,0,0, -0,4,0,2,0, -0,0,7,1,0, -2,0,0,0,0, -0,1,0,3,0, -0,0,11,1,0, -0,0,7,1,0, -0,0,1,1,0, -0,1,0,0,0, -0,0,0,2,0, -0,0,5,4,0, -0,1,2,3,0, -0,0,22,0,0, -0,0,3,0,0, -0,0,0,2,0, -0,0,10,0,0, -0,1,30,0,0, -0,0,3,1,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,15,0,0, -0,0,0,0,0, -0,0,30,5,0, -0,0,1,0,0, -0,0,0,3,0, -0,0,9,2,0, -0,0,9,0,0, -0,0,0,0,0, -0,1,10,5,0, -0,0,15,0,0, -0,0,0,0,0, -0,0,0,1,0, -3,0,8,2,0, -0,0,5,9,0, -0,0,1,24,0, -0,0,11,0,0, -0,0,5,1,0, -0,0,0,0,0, -0,0,15,1,0, -0,0,20,0,0, -0,0,7,1,0, -0,0,1,1,0, -0,1,0,0,0, -0,0,2,0,0, -0,0,0,0,0, -0,2,0,0,0, -0,0,15,0,0, -0,0,12,2,0, -0,0,6,2,0, -0,0,1,1,0, -0,0,1,3,0, -0,0,5,1,0, -0,1,3,1,0, -0,0,10,1,0, -0,2,6,4,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,5,3,0, -0,1,1,1,0, -1,0,4,0,0, -0,0,17,5,0, -0,0,4,1,0, -5,0,0,0,0, -0,0,19,3,0, -0,0,9,0,0, -0,1,7,0,0, -0,0,1,0,0, -0,3,2,2,0, -0,0,1,3,0, -0,1,7,1,0, -0,0,0,1,0, -0,0,5,2,0, -48,0,4,2,0, -0,0,11,1,0, -0,0,0,5,0, -0,0,3,0,0, -1,0,1,2,0, -0,0,3,1,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,22,0,0, -0,0,0,0,0, -0,0,7,3,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,4,0, -0,0,0,0,0, -0,0,22,0,0, -0,0,0,1,0, -5,0,0,1,0, -0,0,18,1,0, -0,0,1,1,0, -0,0,0,3,0, -0,0,0,0,0, -0,0,0,0,0, -0,1,2,3,0, -0,1,22,0,0, -0,0,16,0,0, -0,0,0,1,0, -0,1,11,1,0, -0,0,0,1,0, -0,0,14,0,0, -0,0,0,1,0, -0,0,9,2,0, -0,2,6,0,0, -0,1,1,1,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,3,0,0, -0,1,0,1,0, -0,0,1,0,0, -0,0,9,0,0, -0,0,0,0,0, -0,0,3,1,0, -0,0,12,2,0, -0,0,0,1,0, -0,1,10,4,0, -0,0,0,0,0, -0,0,4,2,0, -0,1,15,1,0, -0,0,2,0,0, -0,0,3,0,0, -0,0,0,2,0, -0,0,6,0,0, -0,0,38,0,0, -0,0,0,2,0, -0,0,12,1,0, -0,0,6,2,0, -0,1,1,1,0, -0,0,11,0,0, -0,0,0,3,0, -0,0,25,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,20,0,0, -0,0,1,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,0,0,0, -0,0,4,1,0, -0,1,9,1,0, -0,0,16,1,0, -0,1,11,4,0, -0,0,0,3,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,1,2,0, -0,0,0,0,0, -0,0,45,2,0, -0,1,0,1,0, -0,0,15,0,0, -0,0,0,1,0, -0,0,0,6,0, -0,1,0,0,0, -0,0,3,0,0, -0,0,1,0,0, -0,0,15,1,0, -0,0,0,3,0, -0,0,0,2,0, -0,0,11,0,0, -0,0,17,0,0, -0,0,22,2,0, -0,0,0,0,0, -0,0,23,3,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,20,0,0, -0,0,16,0,0, -0,0,19,0,0, -0,0,7,1,0, -0,0,8,0,0, -0,0,0,0,0, -0,0,8,0,0, -0,0,0,0,0, -0,0,13,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,6,2,0, -0,0,3,1,0, -0,3,2,2,0, -0,0,0,1,0, -0,0,2,0,0, -0,0,4,1,0, -0,0,10,0,0, -0,0,13,0,0, -0,0,4,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,1,0,0,0, -0,0,4,1,0, -0,0,1,0,0, -0,0,6,2,0, -0,0,15,0,0, -0,0,7,0,0, -0,0,0,0,0, -1,0,11,3,0, -0,0,1,0,0, -0,1,13,0,0, -0,0,1,3,0, -0,0,0,0,0, -0,1,5,1,0, -0,0,11,0,0, -0,0,0,1,0, -0,0,2,0,0, -0,0,20,0,0, -0,0,0,0,0, -0,2,14,0,0, -0,0,1,0,0, -0,0,10,0,0, -0,0,1,0,0, -0,0,24,0,0, -0,1,15,3,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,20,5,0, -0,0,11,0,0, -0,0,0,1,0, -0,1,0,1,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,6,2,0, -9,0,0,2,0, -0,0,4,0,0, -0,1,1,1,0, -0,0,3,1,0, -0,0,0,3,0, -0,1,11,0,0, -0,0,0,2,0, -0,0,6,0,0, -0,0,1,0,0, -0,2,0,2,0, -0,0,1,0,0, -0,0,18,0,0, -0,0,25,6,0, -0,0,0,0,0, -0,0,1,1,0, -0,1,0,1,0, -0,0,15,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,6,2,0, -0,1,5,0,0, -0,0,31,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,1,1,0, -0,0,5,2,0, -0,0,18,0,0, -0,0,0,0,0, -0,0,14,0,0, -0,0,8,0,0, -0,0,12,1,0, -0,0,4,1,0, -0,0,0,2,0, -0,3,6,4,0, -0,0,12,0,0, -0,0,20,0,3, -0,1,0,1,0, -0,0,2,4,0, -0,0,0,1,0, -0,0,0,4,0, -0,0,2,0,0, -0,0,3,2,0, -0,0,0,0,0, -0,2,0,2,0, -0,0,6,1,0, -0,0,1,1,0, -0,0,0,5,0, -0,1,0,0,0, -0,0,0,2,0, -0,0,3,2,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,10,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,3,1,0, -0,0,12,20,0, -0,2,0,0,0, -0,0,3,0,0, -0,0,28,0,0, -0,0,7,2,0, -0,0,6,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,1,71, -0,0,1,1,0, -0,0,0,0,0, -0,0,5,7,0, -0,0,15,0,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,0,1,0, -0,0,19,1,0, -0,0,0,1,0, -0,1,1,1,0, -0,0,20,1,0, -0,0,0,1,0, -0,0,13,3,0, -0,1,0,0,0, -0,1,11,1,0, -0,0,13,6,0, -0,1,1,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,15,1,0, -0,0,0,0,0, -0,1,1,1,0, -0,0,24,1,0, -0,0,0,0,0, -0,0,17,0,0, -0,0,3,0,0, -0,0,15,1,0, -0,0,10,0,0, -0,0,0,5,0, -0,0,16,0,0, -0,0,10,2,0, -0,0,11,1,0, -0,0,12,0,0, -0,0,15,1,0, -0,1,21,0,0, -0,0,5,1,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,1,0,0,0, -0,0,8,0,0, -0,0,1,3,0, -0,0,0,2,0, -0,0,3,8,0, -0,0,0,1,0, -0,0,13,6,0, -0,0,4,3,0, -0,0,0,0,0, -0,0,7,1,0, -0,0,0,5,0, -0,0,6,1,0, -0,0,0,1,0, -0,0,15,0,0, -0,0,5,4,0, -0,0,26,0,0, -1,0,10,2,0, -0,0,0,0,0, -0,0,12,0,0, -0,0,18,0,0, -0,1,4,0,0, -0,0,0,4,0, -0,0,2,0,0, -0,0,0,0,0, -0,1,2,4,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,5,4,0, -0,0,7,1,0, -0,0,1,0,0, -0,0,5,2,0, -0,0,0,0,0, -0,0,4,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,5,0,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,19,0,0, -0,0,8,1,0, -0,0,20,8,0, -0,0,5,7,0, -0,0,13,0,0, -0,0,2,0,0, -0,0,42,0,0, -0,0,0,2,0, -0,0,23,0,0, -0,0,0,0,0, -0,0,7,1,0, -0,0,1,1,0, -0,0,2,0,0, -0,0,9,0,0, -0,0,0,2,2, -0,0,5,1,0, -0,0,0,1,0, -0,1,0,0,0, -0,0,1,0,0, -0,0,4,0,0, -0,0,9,4,0, -0,0,8,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,12,2,0, -0,0,0,1,0, -0,0,0,2,0, -0,2,7,0,0, -0,1,12,0,0, -0,0,24,1,0, -0,0,1,0,0, -0,0,15,0,0, -0,0,0,2,0, -0,0,13,1,0, -0,0,2,0,0, -0,0,2,4,0, -0,0,3,0,0, -0,0,0,3,0, -0,1,13,0,0, -0,0,5,0,0, -0,1,13,1,0, -0,0,0,2,0, -0,0,22,0,0, -0,1,1,0,0, -0,0,5,0,0, -0,0,14,0,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,4,1,0, -0,0,3,0,0, -0,0,54,0,0, -0,0,0,0,0, -0,0,8,2,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,20,8,0, -0,0,16,1,0, -4,0,2,2,0, -0,0,0,0,0, -0,0,13,2,0, -0,0,10,3,0, -0,2,0,1,0, -0,0,1,3,0, -0,1,0,0,0, -71,0,11,0,0, -0,0,2,0,0, -0,1,21,0,0, -0,0,14,0,0, -0,0,7,4,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,1,1,0, -0,0,5,4,0, -0,2,0,2,0, -0,1,38,2,0, -0,0,0,2,0, -0,1,0,1,0, -0,0,16,0,0, -0,0,8,0,0, -10,1,4,1,0, -0,0,3,0,0, -0,0,3,0,0, -0,0,15,0,0, -0,0,23,0,0, -0,0,0,0,0, -0,0,5,2,0, -0,0,0,1,0, -0,0,0,6,0, -0,2,0,2,0, -0,0,6,4,0, -0,0,3,0,0, -0,0,14,0,0, -0,0,9,1,0, -0,3,12,2,0, -0,0,0,2,0, -0,71,0,3,0, -0,0,0,1,0, -0,0,17,1,0, -0,0,15,0,0, -0,0,6,1,0, -0,0,0,1,0, -0,0,19,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,9,0,0, -0,0,1,2,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,0,6,0, -0,0,1,1,0, -0,1,9,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,1,2,0, -0,0,14,0,0, -0,0,17,1,0, -0,0,9,0,0, -0,0,0,1,0, -0,0,45,2,0, -0,0,8,2,0, -0,0,3,0,0, -0,1,8,1,0, -0,0,49,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,3,0,0, -0,0,0,0,0, -0,0,3,0,0, -0,0,20,0,0, -0,1,0,2,0, -0,0,1,1,0, -0,0,7,1,0, -0,0,10,0,0, -0,1,10,1,0, -0,0,0,0,0, -0,0,4,2,0, -0,0,22,0,0, -0,0,0,1,0, -0,0,11,1,0, -0,0,8,1,0, -0,0,12,0,0, -0,0,3,0,0, -0,0,3,0,0, -0,2,0,2,0, -0,0,23,3,0, -0,0,14,0,0, -0,0,0,0,0, -1,0,10,2,0, -0,1,9,0,0, -0,0,0,0,0, -0,0,12,1,0, -0,0,0,0,0, -0,0,9,3,0, -0,0,4,1,0, -0,1,12,0,0, -0,1,1,1,0, -0,1,11,0,0, -0,0,1,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,21,0,0, -0,0,1,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,1,16,0,0, -0,0,4,0,0, -0,0,24,0,0, -0,0,23,0,0, -0,1,7,0,0, -0,1,10,1,0, -0,0,4,1,0, -0,0,10,0,0, -0,1,0,1,0, -0,0,3,0,0, -5,0,0,1,0, -0,0,6,1,0, -0,0,0,1,0, -0,0,9,0,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,0,0,0, -0,1,16,0,0, -0,0,0,2,0, -0,0,2,2,0, -0,0,0,0,0, -0,0,9,0,0, -0,0,0,1,0, -0,0,3,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,12,0,7,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,1,1,0,0, -0,0,1,2,0, -0,0,0,1,0, -0,1,10,5,0, -1,0,30,2,0, -0,0,1,2,0, -0,0,17,1,0, -0,0,3,0,0, -0,0,20,0,0, -0,1,0,1,0, -0,1,0,3,0, -0,0,2,2,0, -0,0,8,4,0, -0,0,12,0,2, -0,0,12,0,0, -0,0,15,2,0, -0,0,20,0,0, -0,0,0,0,0, -0,1,5,2,0, -0,1,1,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,1,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,8,1,0, -0,0,14,0,0, -0,1,5,2,0, -0,0,14,0,0, -0,1,0,1,0, -0,0,38,0,0, -0,0,39,0,0, -0,0,0,1,0, -0,0,22,0,0, -0,0,21,5,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,4,1,0, -0,0,7,0,0, -0,1,11,1,0, -0,0,22,2,0, -0,0,0,0,0, -0,0,13,3,0, -0,0,3,1,0, -0,0,14,1,0, -0,0,4,2,0, -0,1,5,0,0, -0,0,25,1,0, -0,0,0,2,0, -0,0,5,10,0, -0,1,3,0,0, -0,1,1,0,0, -0,0,0,0,0, -0,0,0,2,0, -0,1,0,2,0, -0,0,0,2,0, -0,0,9,0,0, -0,0,2,0,0, -0,0,1,0,0, -0,0,0,1,0, -0,0,25,1,0, -0,0,17,2,0, -0,0,0,0,0, -0,0,8,0,0, -0,0,26,0,0, -0,0,0,8,0, -0,1,12,2,0, -0,0,0,0,0, -0,0,0,2,2, -0,0,14,0,0, -0,0,29,2,0, -0,0,0,0,0, -0,0,1,0,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,9,0,0, -0,0,2,2,0, -0,0,0,1,0, -0,0,0,1,0, -0,1,4,0,0, -0,0,2,0,0, -0,0,14,1,0, -0,3,9,2,0, -0,0,10,0,0, -0,0,7,0,0, -0,0,0,1,0, -0,0,1,0,0, -0,1,5,2,0, -0,0,0,1,0, -0,0,11,0,0, -0,0,8,1,0, -0,0,0,0,0, -0,0,4,0,0, -0,1,12,0,0, -0,1,0,0,0, -0,0,0,8,0, -0,0,3,0,0, -0,0,6,1,0, -0,0,6,0,0, -0,0,13,1,0, -0,1,13,2,0, -0,0,1,0,0, -1,0,8,1,0, -0,0,1,0,0, -0,0,6,2,0, -0,0,2,0,0, -0,0,39,0,0, -0,0,10,0,0, -0,0,3,0,0, -0,0,2,0,0, -0,0,13,0,0, -0,0,0,1,0, -0,0,0,1,0, -0,1,8,1,0, -0,0,5,3,0, -0,0,10,0,0, -0,0,0,2,0, -0,1,14,1,0, -0,0,0,0,0, -0,0,7,1,0, -0,2,0,0,0, -0,0,0,1,0, -0,0,5,2,0, -0,0,1,0,0, -0,0,10,0,0, -2,0,2,0,0, -0,0,0,0,0, -0,0,4,1,0, -0,0,16,0,0, -0,0,2,0,0, -0,0,1,0,0, -0,0,0,2,0, -0,0,9,0,0, -0,0,0,0,0, -0,0,32,0,0, -0,1,4,4,0, -0,0,4,0,0, -0,0,39,0,0, -0,0,5,1,0, -0,0,15,2,0, -0,0,0,5,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,1,5,0,0, -0,0,0,0,0, -0,0,15,0,0, -0,0,0,1,0, -0,0,48,4,0, -0,0,0,0,0, -0,0,19,1,0, -0,0,24,0,0, -0,1,12,2,0, -0,0,13,0,0, -0,1,23,0,0, -0,0,5,1,0, -0,1,9,1,0, -0,2,20,7,0, -0,0,0,0,0, -0,1,0,0,0, -0,1,28,4,0, -0,0,8,3,0, -0,1,0,3,0, -0,0,0,5,0, -0,0,10,0,0, -0,0,8,2,0, -0,0,0,2,0, -0,0,8,0,0, -0,0,71,1,0, -0,1,5,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,3,23,4,46, -0,0,21,0,0, -0,3,0,2,0, -0,0,6,1,0, -0,0,12,20,0, -38,0,6,1,0, -0,0,0,1,0, -0,0,28,1,0, -0,0,0,0,0, -0,0,5,7,0, -0,0,8,9,0, -0,0,11,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,1,3,0,0, -0,0,39,0,0, -0,0,0,1,0, -0,0,9,2,0, -0,0,2,4,0, -0,2,5,6,0, -0,0,4,0,0, -0,2,0,2,0, -0,0,0,2,0, -0,1,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,2,0,0, -0,0,19,0,0, -0,0,1,3,0, -0,0,3,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,4,1,0, -0,0,16,0,0, -0,2,27,4,0, -0,0,3,0,0, -0,0,0,2,0, -0,0,0,0,0, -0,1,0,1,0, -0,1,4,4,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,9,0,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,14,3,0, -0,0,3,1,0, -0,0,19,2,0, -0,0,35,0,0, -0,0,5,2,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,11,1,0, -0,0,0,1,0, -0,1,10,4,0, -0,0,2,0,0, -0,0,0,1,0, -0,0,3,0,0, -0,0,20,1,0, -0,0,11,0,0, -0,1,1,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,4,1,0, -0,0,8,0,0, -0,0,4,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,5,0, -0,0,12,4,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,5,0,0, -0,0,0,2,0, -0,0,15,1,0, -0,0,0,0,0, -0,0,8,0,0, -0,0,45,0,0, -0,0,6,1,0, -0,0,0,4,0, -0,0,0,1,0, -0,0,7,0,0, -0,0,0,2,0, -0,0,11,0,0, -0,0,32,1,0, -0,0,24,0,0, -27,0,19,0,0, -0,0,22,6,0, -0,1,0,0,0, -0,0,0,1,0, -0,0,11,1,0, -0,3,18,1,0, -5,0,0,0,0, -0,0,6,1,0, -0,0,0,1,0, -0,0,3,7,0, -0,0,2,1,0, -0,0,3,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,1,1,0, -0,0,0,2,0, -0,0,2,0,0, -0,0,30,5,0, -0,0,3,1,0, -0,0,11,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,1,0,0, -0,0,3,1,0, -0,0,0,1,0, -0,1,0,0,0, -1,0,11,3,0, -0,1,3,4,0, -0,0,9,1,0, -0,0,3,1,0, -0,0,7,0,0, -0,0,24,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,4,1,0, -0,0,1,1,0, -0,0,2,2,0, -0,0,0,0,0, -0,0,2,1,0, -0,0,2,0,0, -0,0,6,2,0, -0,0,0,3,0, -0,0,0,2,0, -0,0,0,1,0, -0,1,21,0,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,0,3,0, -0,0,32,0,0, -0,0,45,0,0, -0,1,1,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,15,1,0, -0,0,17,0,0, -0,0,0,0,0, -0,0,11,0,0, -0,2,0,0,0, -0,0,9,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,8,2,0, -0,0,0,1,0, -0,1,0,3,0, -0,0,0,2,0, -0,0,4,0,0, -0,2,27,4,0, -0,0,1,0,0, -0,0,10,2,0, -0,0,10,0,0, -0,0,2,0,0, -0,1,0,4,0, -0,1,0,0,0, -0,1,0,0,0, -0,0,13,6,0, -0,0,22,0,0, -0,0,1,0,0, -0,0,0,3,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,4,0,0, -0,0,10,0,0, -0,0,30,5,0, -0,0,8,1,0, -0,0,2,3,0, -0,1,27,2,0, -6,0,4,0,0, -0,0,6,2,0, -0,0,49,2,0, -0,0,21,0,0, -0,0,0,1,0, -0,0,21,0,0, -0,0,0,2,0, -0,0,30,0,0, -0,1,15,3,0, -0,0,0,1,0, -0,0,20,0,0, -0,0,0,3,0, -0,0,0,1,0, -0,0,11,1,0, -0,0,0,1,0, -0,0,16,2,0, -0,0,2,1,0, -0,0,0,1,0, -0,0,1,2,0, -0,1,2,2,0, -0,0,0,3,0, -0,0,0,0,0, -0,0,10,0,0, -0,0,28,0,0, -0,0,9,0,0, -0,1,0,0,0, -0,1,0,1,0, -0,0,0,2,0, -0,1,28,0,0, -1,0,2,1,0, -0,0,5,0,0, -0,0,0,0,0, -0,2,20,7,0, -0,0,8,0,0, -0,0,8,0,0, -0,0,0,1,0, -0,0,13,6,0, -0,0,28,0,0, -0,0,7,0,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,5,2,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,3,0,0, -0,0,3,0,0, -0,0,10,0,0, -0,0,20,0,0, -0,0,2,1,0, -0,0,0,1,0, -0,0,8,0,0, -0,0,0,0,0, -0,1,8,1,0, -0,0,5,2,0, -0,0,0,1,0, -0,0,32,1,0, -0,0,0,2,0, -0,0,0,0,0, -0,1,0,3,0, -0,0,0,0,0, -0,0,9,1,0, -0,0,7,1,0, -0,0,0,1,0, -1,1,10,1,0, -0,0,17,0,0, -0,0,6,0,0, -0,0,55,0,0, -0,0,2,2,0, -0,0,21,2,0, -0,0,2,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,10,0,0, -20,0,10,0,0, -0,0,31,0,0, -0,0,11,0,0, -0,0,5,0,0, -0,0,0,1,0, -0,1,5,0,0, -0,0,20,0,0, -0,0,17,0,0, -0,0,9,0,0, -0,0,0,0,0, -0,0,20,0,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,16,0,0, -0,0,1,0,0, -0,0,3,0,0, -0,0,0,1,0, -0,0,7,1,0, -0,0,14,0,0, -0,1,13,2,0, -0,0,0,1,0, -0,0,2,0,0, -0,0,13,0,0, -0,0,7,0,0, -0,0,0,2,0, -0,0,0,1,0, -0,0,8,2,0, -0,0,0,0,0, -0,0,9,0,0, -0,0,0,3,0, -0,0,0,0,0, -0,0,13,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,2,14,0,0, -0,0,0,0,0, -0,0,13,0,0, -0,0,0,0,0, -0,0,1,0,0, -0,0,0,2,0, -0,1,3,1,0, -0,1,4,2,0, -0,2,0,7,0, -0,0,13,2,0, -0,0,1,2,0, -0,0,6,1,0, -0,0,1,1,0, -0,0,0,0,0, -0,1,14,1,0, -0,0,13,0,0, -0,1,13,0,0, -0,0,0,0,0, -0,0,1,2,0, -0,0,11,1,0, -0,0,18,0,0, -0,0,1,3,0, -0,0,48,1,0, -0,2,9,1,0, -0,0,3,0,0, -0,1,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,8,2,0, -0,0,0,1,0, -0,0,21,0,0, -0,0,12,0,0, -0,0,0,2,0, -0,1,15,0,0, -0,0,49,2,0, -0,0,7,1,0, -0,0,0,0,0, -0,0,9,0,0, -0,0,2,3,0, -0,0,3,0,0, -0,1,30,0,0, -0,0,1,0,0, -0,0,20,0,0, -0,0,0,1,0, -0,0,10,1,0, -0,0,8,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,5,1,0, -0,0,1,1,0, -0,0,1,3,0, -0,0,10,2,0, -0,0,6,1,0, -0,0,12,0,0, -0,0,20,5,0, -0,0,16,0,0, -0,0,0,0,0, -0,0,16,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,7,1,0, -0,0,18,1,0, -0,0,2,0,0, -0,0,0,0,0, -0,0,13,0,0, -0,0,0,0,0, -0,0,8,1,0, -0,0,9,0,0, -0,0,0,0,0, -0,0,9,2,0, -0,0,0,46,0, -0,0,15,0,0, -0,0,10,2,0, -0,0,12,2,0, -0,0,0,0,0, -1,0,11,1,0, -0,0,22,0,0, -0,0,4,0,0, -0,1,0,2,0, -1,0,10,3,0, -0,0,0,1,0, -0,0,1,2,0, -0,0,0,0,0, -0,0,25,1,0, -0,0,7,2,0, -0,0,11,0,0, -0,1,4,0,0, -0,1,0,4,0, -0,0,3,0,0, -0,0,14,0,0, -0,0,7,1,0, -0,0,11,3,6, -0,0,28,0,0, -0,0,0,0,0, -0,0,17,0,0, -0,0,20,0,0, -10,1,4,1,0, -0,0,1,1,0, -0,0,2,2,0, -0,1,0,0,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,20,1,0, -0,0,0,0,0, -0,1,14,1,0, -0,1,3,0,0, -4,0,15,0,0, -0,0,5,0,0, -0,0,2,0,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,0,5,0, -0,0,0,1,0, -0,1,38,2,0, -0,0,0,1,0, -0,0,17,0,0, -0,0,3,0,0, -0,0,0,2,0, -0,0,45,1,0, -0,1,18,0,0, -0,0,23,3,0, -0,0,0,2,0, -0,0,1,2,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,9,0,0, -0,0,11,0,0, -0,0,20,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,2,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,7,2,0, -0,0,19,1,0, -0,0,1,1,0, -0,0,24,0,0, -0,0,49,2,0, -0,0,17,1,0, -0,0,0,1,0, -0,1,0,0,0, -0,0,0,0,0, -0,4,0,2,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,5,1,0, -0,0,4,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,7,1,0, -0,0,14,3,0, -0,0,0,1,0, -0,0,0,5,0, -0,2,4,1,0, -0,0,0,0,0, -0,0,6,1,0, -0,0,14,1,0, -0,0,0,1,0, -0,0,20,0,0, -0,0,21,1,0, -0,0,0,0,0, -0,0,1,0,0, -0,1,0,1,0, -0,0,0,0,0, -0,0,5,0,0, -0,0,0,3,0, -0,0,18,0,0, -0,0,49,3,0, -0,0,4,0,0, -0,0,13,0,0, -0,0,0,1,0, -0,0,0,0,0, -18,0,5,1,0, -0,0,4,2,0, -0,0,21,0,0, -0,0,8,1,0, -0,0,0,0,0, -0,2,5,6,0, -0,0,11,0,0, -0,0,5,0,0, -0,0,21,0,0, -0,0,9,0,0, -0,0,3,0,0, -0,0,20,0,0, -0,0,3,1,0, -0,0,25,1,0, -0,0,8,1,0, -0,0,0,0,0, -0,0,14,0,0, -0,0,2,2,0, -0,2,0,2,0, -26,0,8,1,0, -0,1,2,0,0, -0,0,1,0,0, -0,0,16,0,0, -0,2,4,0,0, -0,1,16,0,0, -20,0,10,0,0, -0,0,20,0,0, -0,0,13,0,0, -0,0,0,1,0, -0,0,6,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,1,3,0,0, -0,0,0,1,0, -0,0,0,3,0, -0,0,0,0,0, -0,0,2,0,0, -0,0,12,1,0, -0,0,12,4,0, -2,0,4,1,0, -0,0,6,0,0, -0,0,8,1,0, -0,0,0,0,0, -0,0,15,1,0, -0,0,20,0,0, -0,0,10,0,0, -0,0,8,0,0, -0,0,8,1,0, -0,0,11,3,6, -0,0,2,0,0, -0,0,0,2,0, -0,0,11,0,0, -0,0,19,2,0, -0,0,1,1,0, -0,0,55,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,4,1,0, -38,0,6,1,0, -0,0,7,1,0, -0,0,3,0,0, -0,0,12,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,12,4,0, -0,0,0,5,0, -0,0,3,0,0, -0,0,11,3,0, -0,0,0,1,0, -0,0,0,1,0, -2,0,6,0,0, -0,0,0,0,0, -0,0,6,1,0, -1,0,11,1,0, -0,0,0,0,0, -71,0,11,0,0, -0,0,13,0,0, -0,1,23,1,0, -0,0,3,0,0, -0,0,0,1,0, -0,0,14,0,0, -5,0,3,1,0, -0,0,5,0,0, -0,0,0,0,0, -0,1,8,0,0, -2,0,0,0,0, -0,1,2,3,0, -16,0,2,0,0, -0,0,5,3,0, -0,1,0,0,0, -0,0,10,0,0, -0,0,21,0,0, -0,0,2,0,0, -0,1,10,1,0, -0,0,5,0,0, -0,0,0,0,0, -0,0,20,8,0, -0,0,13,0,0, -0,0,4,1,0, -0,0,1,0,0, -0,1,0,0,0, -0,0,3,0,0, -0,0,1,1,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,3,1,0, -0,0,6,0,0, -0,2,0,7,0, -0,1,6,0,0, -0,0,19,1,0, -71,0,11,0,0, -0,0,0,1,0, -0,0,1,0,0, -0,0,0,8,0, -0,0,1,0,0, -0,0,1,0,0, -0,0,5,0,0, -0,0,3,0,0, -0,0,0,0,0, -0,0,7,0,0, -0,0,20,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,23,2,0, -0,0,0,1,0, -26,0,8,1,0, -0,0,13,0,0, -0,0,0,1,0, -0,2,25,1,0, -0,1,0,3,0, -0,0,0,3,0, -0,0,0,2,0, -0,0,1,1,0, -0,0,21,1,0, -0,0,17,0,0, -0,0,0,1,0, -0,1,0,0,0, -0,0,1,0,0, -0,0,41,0,0, -0,0,1,2,0, -0,0,0,0,0, -0,0,3,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,1,1,0, -0,0,6,1,0, -0,0,6,0,0, -0,0,3,0,0, -0,0,0,2,0, -0,0,8,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,6,2,0, -0,0,0,0,0, -0,0,0,1,0, -0,1,2,3,0, -0,0,15,1,0, -0,0,29,0,0, -0,0,0,2,0, -0,0,71,1,0, -0,0,7,1,0, -0,1,5,0,0, -0,0,0,0,0, -0,0,9,0,0, -0,0,6,3,0, -10,1,4,1,0, -0,0,1,1,0, -0,0,0,1,0, -0,1,11,0,0, -0,0,12,2,0, -0,0,24,0,0, -0,0,1,0,0, -0,0,6,1,0, -1,0,4,0,0, -0,0,6,1,0, -0,0,0,1,0, -0,0,28,1,0, -0,0,13,0,0, -0,0,9,2,0, -0,0,3,1,0, -0,0,39,0,0, -0,0,8,0,0, -0,1,25,7,0, -0,1,33,3,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,3,0,0, -0,0,38,0,0, -0,0,0,0,0, -0,0,1,0,0, -0,0,3,1,0, -0,0,13,41,0, -0,0,0,5,0, -0,0,0,0,0, -0,0,0,0,0, -0,1,38,2,0, -0,0,1,3,0, -0,1,11,2,0, -0,0,8,0,0, -0,0,13,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,2,11,2,0, -0,0,2,0,0, -0,0,0,0,0, -0,0,11,1,0, -10,0,1,1,0, -0,0,0,0,0, -0,0,7,3,0, -1,0,10,1,0, -0,0,0,0,0, -0,1,0,0,0, -0,0,7,2,0, -0,0,2,2,0, -0,0,1,1,0, -1,1,10,1,0, -0,0,3,0,0, -0,0,31,2,0, -0,0,3,0,0, -0,0,0,1,0, -0,0,12,0,2, -0,2,7,0,0, -0,0,21,1,0, -0,0,17,0,0, -0,0,5,1,0, -0,1,38,2,0, -0,0,0,0,0, -0,0,16,1,0, -0,0,2,0,0, -0,0,44,1,0, -0,0,0,0,0, -2,0,6,0,0, -0,0,8,0,0, -0,0,8,3,0, -0,0,17,0,0, -0,0,1,0,0, -0,0,28,1,0, -0,0,5,0,0, -0,0,0,0,0, -0,0,28,1,0, -0,0,4,1,0, -0,0,4,1,0, -0,1,10,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,12,0,0, -0,0,0,0,0, -0,0,20,0,0, -0,0,20,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,5,1,0, -0,0,0,2,0, -0,0,7,2,0, -0,1,22,0,0, -0,0,0,1,0, -0,0,9,2,0, -0,0,7,1,0, -0,0,2,2,0, -0,0,4,2,0, -0,0,14,0,0, -0,0,4,2,0, -1,0,10,3,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,30,0,0, -0,0,13,6,0, -0,0,0,3,0, -0,0,0,0,0, -0,0,19,1,0, -0,3,2,3,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,1,3,0, -10,1,4,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,6,1,0, -0,0,0,1,0, -0,0,5,7,0, -0,0,5,56,0, -0,0,1,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,1,0,0, -0,0,19,1,0, -0,0,6,1,0, -0,0,9,1,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,9,0,0, -0,0,20,0,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,1,5,0, -0,0,0,1,0, -0,1,3,0,0, -0,0,0,1,0, -0,0,5,1,0, -0,0,4,0,0, -0,1,5,0,0, -0,0,0,3,0, -0,0,2,1,0, -0,0,13,0,0, -0,0,3,0,0, -0,3,2,2,0, -0,0,3,2,0, -0,0,10,2,0, -0,0,0,1,0, -0,1,0,0,0, -0,0,4,4,0, -0,0,3,1,0, -0,0,41,0,0, -0,0,24,0,0, -0,0,2,1,0, -0,0,3,0,0, -0,1,7,1,0, -0,0,17,0,0, -0,0,0,1,0, -0,0,8,0,0, -0,0,19,1,0, -0,0,0,12,0, -0,0,1,2,0, -0,0,2,0,0, -0,0,0,1,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,5,1,0, -0,0,7,0,0, -0,1,1,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,1,1,0, -0,0,0,2,0, -0,0,25,0,0, -0,0,29,0,0, -0,0,4,3,0, -0,0,6,1,0, -0,0,0,0,0, -0,0,2,0,0, -0,0,0,0,0, -0,0,16,0,0, -0,0,0,2,0, -0,0,8,0,0, -0,0,8,0,0, -0,1,18,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,5,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,6,0,0, -0,0,14,0,0, -0,0,0,1,0, -0,1,2,4,0, -0,0,11,3,0, -0,1,0,2,0, -0,0,0,1,0, -0,0,10,0,0, -0,4,0,2,0, -0,1,2,4,0, -0,0,10,9,0, -0,0,30,0,0, -0,0,4,2,0, -0,0,0,1,0, -0,0,10,0,0, -0,0,3,1,0, -0,0,0,0,0, -0,0,6,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,45,0,0, -0,0,0,2,0, -15,0,7,0,0, -0,0,18,0,0, -0,0,2,0,0, -14,0,4,0,0, -0,0,4,3,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,18,0,0, -0,0,0,3,0, -0,0,0,0,0, -0,0,1,3,0, -0,0,0,0,0, -0,1,0,1,0, -0,0,7,2,0, -0,0,0,1,0, -0,0,5,0,0, -0,0,12,0,0, -0,0,0,2,0, -0,0,1,6,0, -0,0,0,3,0, -0,0,0,2,0, -0,1,14,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,8,2,0, -0,1,7,0,0, -0,0,10,1,0, -0,0,0,0,0, -0,0,4,4,0, -0,0,3,0,0, -0,0,0,2,0, -0,0,7,0,0, -0,0,24,0,0, -0,0,0,2,0, -0,0,2,1,0, -0,1,0,1,0, -0,1,0,2,0, -0,3,2,2,0, -0,0,0,2,0, -0,0,19,1,0, -0,0,0,2,0, -0,0,13,0,0, -0,0,45,2,0, -0,0,9,1,0, -0,1,12,0,0, -0,0,5,1,0, -0,0,0,2,0, -0,0,13,0,0, -0,0,0,0,0, -0,0,9,0,0, -0,0,0,2,0, -0,0,8,0,0, -0,0,5,0,0, -0,0,0,3,0, -0,0,0,0,0, -0,0,0,3,0, -0,4,33,2,1, -0,0,0,1,0, -0,0,0,1,0, -0,0,3,0,0, -0,0,14,1,0, -0,0,8,4,0, -0,0,35,0,0, -0,0,3,1,0, -0,0,22,6,0, -0,0,5,0,0, -0,1,0,0,0, -0,0,6,1,0, -0,0,24,1,0, -0,2,6,0,0, -0,0,9,0,0, -0,0,0,0,0, -0,1,0,0,0, -0,0,22,0,0, -2,0,6,0,0, -0,0,19,0,0, -0,0,16,1,0, -0,0,0,0,0, -0,0,8,0,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,10,3,0, -1,0,30,2,0, -0,4,33,2,1, -0,0,0,0,0, -0,0,1,1,0, -0,0,6,3,0, -0,0,2,2,0, -0,0,1,0,0, -0,0,0,0,0, -1,1,9,0,0, -0,0,3,1,0, -0,0,20,0,0, -0,0,7,0,0, -0,0,0,1,0, -0,0,13,0,0, -0,0,14,1,0, -0,0,0,0,0, -0,0,0,3,0, -0,1,23,1,0, -0,1,0,1,0, -0,0,4,3,0, -0,0,6,0,0, -0,0,8,2,0, -0,0,0,2,0, -0,0,9,0,0, -0,0,3,0,0, -0,1,14,1,0, -0,0,1,0,0, -0,1,0,0,0, -0,1,7,1,0, -0,0,14,0,0, -0,0,0,0,0, -0,2,0,2,0, -0,0,3,0,0, -0,0,4,3,0, -0,0,12,4,0, -0,0,0,3,0, -0,0,20,0,0, -0,0,0,0,0, -5,0,0,0,0, -0,0,3,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,0,1,0, -0,1,10,5,0, -0,0,10,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,3,0,0, -0,0,48,1,0, -0,0,20,0,3, -0,0,1,0,0, -0,0,6,2,0, -0,0,0,1,0, -0,0,15,0,0, -0,0,15,1,0, -26,0,8,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,5,1,0, -0,0,12,0,0, -0,0,11,0,0, -0,0,3,0,0, -0,0,16,1,0, -0,0,5,0,0, -0,3,0,2,0, -0,0,0,1,0, -0,0,5,0,0, -0,0,3,0,0, -0,0,0,0,0, -5,0,0,1,0, -0,0,1,6,0, -0,1,19,2,0, -0,1,0,1,0, -0,1,0,0,0, -1,0,10,3,0, -0,0,0,0,0, -0,0,12,20,0, -0,0,1,3,0, -0,2,0,10,0, -0,1,2,2,0, -0,0,1,0,0, -0,0,0,0,0, -0,1,11,2,0, -0,0,0,0,0, -0,1,15,6,0, -0,0,0,0,0, -0,0,21,0,0, -15,0,17,1,0, -0,0,22,2,0, -0,0,10,0,0, -0,0,16,2,0, -0,0,2,0,0, -0,0,38,0,0, -0,0,0,3,0, -0,0,0,0,0, -0,0,2,0,0, -1,0,0,0,0, -0,1,14,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,1,14,1,0, -0,0,5,1,0, -0,0,28,1,0, -0,0,16,4,0, -0,0,19,0,0, -0,1,0,4,0, -15,0,17,1,0, -0,0,0,0,0, -0,0,19,0,0, -0,1,0,4,3, -0,0,0,0,0, -0,0,11,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,48,1,0, -0,0,5,0,0, -0,0,0,2,0, -0,1,27,2,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,0,0,0, -0,1,11,2,0, -5,0,15,1,0, -0,0,0,1,0, -0,0,21,0,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,5,0,0, -0,0,0,2,0, -0,0,28,1,0, -0,1,3,4,0, -0,0,0,2,0, -0,0,20,0,0, -0,1,14,3,0, -0,0,0,0,0, -0,1,6,0,0, -0,0,0,2,0, -0,0,10,9,0, -0,0,9,2,0, -0,1,0,4,0, -0,0,30,0,0, -0,1,0,1,0, -0,0,0,0,0, -0,0,11,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,2,1,0, -0,0,20,1,0, -0,0,1,5,0, -0,0,0,1,0, -0,0,28,0,0, -0,0,3,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,12,0,0, -0,0,20,0,0, -0,0,0,1,0, -0,1,0,0,0, -0,0,0,0,0, -0,0,8,0,0, -0,0,0,1,0, -0,2,14,0,0, -1,0,4,0,0, -0,0,0,0,0, -0,1,14,0,0, -0,0,1,1,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,0,3,0, -0,0,0,0,0, -0,1,2,4,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,7,1,0, -0,0,1,0,0, -0,0,0,5,0, -0,0,8,2,0, -0,0,48,4,0, -18,0,5,1,0, -0,0,6,2,0, -0,0,5,0,0, -0,0,31,0,0, -0,0,0,0,0, -10,1,4,1,0, -0,0,23,0,0, -0,0,10,0,0, -0,0,1,1,0, -0,0,3,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,33,2,0, -0,5,0,4,0, -0,0,16,1,0, -0,0,29,4,0, -0,0,0,1,0, -0,0,1,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,6,1,0, -0,0,2,2,0, -0,0,0,3,0, -0,0,24,1,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,25,1,0, -0,0,39,0,0, -0,0,0,3,0, -0,1,4,0,0, -0,0,5,0,0, -0,0,9,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,13,0,0, -0,0,18,0,0, -0,0,2,1,0, -0,3,8,1,0, -0,2,9,1,0, -0,1,0,0,0, -0,0,0,1,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,4,2,0, -31,0,0,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,3,1,0, -0,2,1,1,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,15,0,0, -0,0,11,0,0, -0,14,11,2,0, -0,0,1,0,0, -0,0,29,4,0, -0,0,0,1,0, -1,0,0,2,0, -0,0,0,1,0, -0,0,10,2,0, -0,0,15,0,0, -0,0,27,0,0, -0,0,0,0,0, -19,0,7,0,0, -0,0,0,3,0, -0,0,10,0,0, -0,0,31,2,0, -0,0,0,1,0, -0,0,2,2,0, -0,0,2,1,0, -0,0,4,1,0, -0,0,18,0,0, -0,0,9,2,0, -0,0,14,71,0, -0,0,0,5,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,1,6,0, -0,0,0,2,0, -0,0,0,1,0, -0,0,0,0,0, -1,0,10,3,0, -0,0,0,0,0, -0,1,5,0,0, -0,0,5,2,0, -0,0,4,0,0, -0,1,14,0,0, -0,0,11,1,0, -0,0,4,1,0, -0,0,0,3,0, -19,0,7,0,0, -0,0,30,0,0, -0,0,22,0,0, -0,1,4,0,0, -0,0,0,2,0, -0,0,0,2,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,6,0,0, -0,0,2,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,5,0,0, -0,3,2,3,0, -0,0,5,0,0, -0,0,0,0,0, -0,0,3,1,0, -0,0,0,0,0, -0,0,0,8,0, -0,0,5,0,0, -0,0,11,1,0, -0,0,0,0,0, -0,0,20,0,0, -0,0,15,0,0, -0,0,0,5,0, -0,0,4,0,0, -0,0,2,2,0, -0,0,8,0,0, -0,0,1,0,0, -0,0,5,0,0, -0,0,38,0,0, -0,0,0,0,0, -0,0,21,0,0, -0,0,0,2,0, -0,0,18,0,0, -0,0,0,1,0, -0,0,0,1,0, -5,0,0,1,0, -0,0,0,0,0, -0,0,13,3,0, -0,1,10,1,0, -0,0,0,0,0, -10,0,1,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,32,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,4,1,0, -0,1,13,2,0, -0,2,7,0,0, -0,1,3,0,0, -0,0,24,0,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,0,0,0, -0,1,14,1,0, -0,0,0,0,0, -0,0,4,3,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,8,1,0, -0,0,1,1,0, -0,0,0,5,0, -0,0,4,1,0, -0,0,0,1,0, -0,0,1,1,0, -0,1,18,3,0, -0,0,10,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,1,0,0,0, -0,0,0,0,0, -0,0,5,1,0, -0,0,10,0,0, -0,0,4,1,0, -0,0,5,2,0, -0,1,7,0,0, -0,0,0,2,0, -0,0,6,1,0, -0,0,49,2,0, -0,0,7,1,0, -0,0,12,4,0, -0,0,6,1,0, -0,1,4,4,0, -0,0,21,0,0, -0,0,22,0,0, -0,0,16,1,0, -0,0,0,2,0, -0,0,3,8,0, -0,3,0,5,0, -0,0,17,0,0, -0,0,1,2,0, -0,3,0,1,0, -0,0,0,7,0, -0,0,0,1,0, -0,1,8,1,0, -0,2,9,1,0, -0,0,0,1,0, -0,0,0,4,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,7,3,0, -0,0,0,1,0, -0,0,5,0,0, -0,0,6,1,0, -0,0,0,0,0, -0,0,2,0,0, -0,0,0,0,0, -0,0,6,2,0, -0,0,5,1,0, -0,0,7,0,0, -0,1,0,0,0, -6,0,2,2,0, -0,0,0,8,0, -0,0,23,2,0, -0,0,2,0,0, -0,0,0,2,0, -0,0,13,0,0, -0,0,19,1,0, -0,4,1,1,0, -0,0,49,3,0, -0,1,4,0,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,5,1,0, -0,0,0,0,0, -0,0,0,1,0, -1,0,0,0,0, -0,0,0,1,0, -0,0,8,3,0, -0,0,13,0,0, -0,0,0,1,0, -0,0,14,3,0, -0,0,0,1,0, -8,1,0,0,0, -0,0,0,2,0, -0,0,1,1,0, -0,0,12,4,0, -0,0,6,0,0, -0,0,9,6,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,7,1,0, -0,0,0,0,0, -0,0,2,0,0, -0,0,11,0,0, -0,0,0,0,0, -0,0,11,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,2,9,0,0, -0,0,5,0,0, -0,1,0,10,0, -0,0,12,0,0, -0,0,0,3,0, -0,0,23,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,9,3,0, -0,3,8,1,0, -0,0,35,0,0, -0,1,28,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,2,2,0, -0,0,8,2,0, -0,1,0,0,0, -0,0,12,4,0, -2,0,9,2,0, -0,0,3,0,0, -0,0,0,1,0, -0,0,2,0,0, -0,0,21,5,0, -0,0,2,1,0, -0,0,16,4,0, -0,0,1,1,0, -0,1,0,0,0, -0,0,0,1,0, -0,0,26,0,0, -0,0,0,1,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,14,1,0, -0,0,0,1,0, -0,1,0,1,0, -0,1,1,2,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,1,0,0, -0,0,1,3,0, -0,0,18,2,0, -0,2,0,1,0, -0,0,22,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,7,1,0, -0,0,0,0,0, -0,0,0,1,0, -4,0,2,2,0, -0,0,0,3,0, -0,1,0,1,0, -0,0,11,0,0, -0,0,3,2,0, -0,0,1,1,0, -0,0,0,1,0, -0,0,2,2,0, -0,0,16,0,0, -0,0,45,1,0, -0,0,2,1,0, -38,0,6,1,0, -1,0,3,1,0, -0,3,12,2,0, -0,0,11,1,0, -0,0,16,1,0, -0,0,12,0,0, -0,0,1,0,0, -0,0,0,1,0, -0,0,9,2,0, -0,0,8,2,0, -0,0,15,0,0, -0,0,0,0,0, -0,0,40,0,0, -0,0,3,0,0, -71,0,11,0,0, -0,0,16,0,0, -0,0,8,9,0, -0,1,1,0,0, -0,0,13,1,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,29,0,0, -0,0,0,2,0, -0,0,0,1,0, -0,0,24,0,0, -0,0,26,0,0, -0,1,2,1,0, -0,0,0,1,0, -5,0,0,0,0, -0,0,23,3,0, -0,0,2,0,0, -0,0,11,0,0, -0,0,7,0,0, -0,0,0,1,0, -0,0,8,9,0, -0,0,1,5,0, -0,0,7,0,0, -0,0,0,1,0, -0,0,12,0,2, -0,1,13,2,0, -0,0,6,2,0, -0,0,1,0,0, -0,0,30,0,0, -0,0,0,16,0, -0,0,1,1,0, -0,0,71,1,0, -0,2,0,1,0, -0,0,0,1,0, -0,0,1,0,0, -0,0,0,4,0, -16,0,2,0,0, -0,0,7,1,0, -0,1,0,1,0, -0,0,21,0,0, -0,1,4,4,0, -0,0,0,4,0, -0,0,0,1,0, -0,0,9,0,0, -0,0,2,1,0, -0,0,0,0,0, -0,0,5,0,0, -0,0,25,1,0, -0,1,2,2,0, -0,0,12,0,2, -5,0,0,0,0, -0,0,19,0,0, -0,0,14,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,8,0,0, -0,0,2,0,0, -0,1,1,1,0, -0,0,9,0,0, -0,1,3,0,0, -0,2,11,2,0, -0,3,0,2,0, -0,0,1,0,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,0,1,0, -16,0,2,0,0, -0,0,24,0,0, -0,0,29,0,0, -0,0,3,1,0, -0,0,1,1,0, -0,0,7,3,0, -0,0,2,4,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,0,1,0, -0,0,29,2,0, -0,0,1,1,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,3,1,0, -0,0,24,0,0, -0,0,0,3,0, -0,0,0,0,0, -0,0,11,0,0, -0,0,0,1,0, -0,0,19,0,0, -0,0,15,0,0, -0,0,0,1,0, -0,0,19,2,0, -0,0,5,4,0, -0,0,4,1,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,11,0,0, -0,0,0,0,0, -0,0,4,1,0, -0,0,41,0,0, -0,0,0,0,0, -0,0,2,0,0, -2,0,2,0,0, -0,1,7,1,0, -0,0,3,0,0, -0,0,17,2,0, -0,0,0,1,0, -0,0,10,0,0, -0,0,1,3,0, -0,0,0,0,0, -0,0,0,2,0, -1,0,10,3,0, -0,1,16,0,0, -0,0,15,0,0, -0,0,14,0,0, -0,0,1,0,0, -0,0,0,1,0, -0,0,9,4,0, -0,0,2,0,0, -0,0,11,0,0, -0,0,11,4,0, -0,0,9,4,0, -0,1,0,0,0, -0,0,4,0,0, -0,0,0,10,0, -0,0,0,3,0, -0,0,0,1,0, -0,3,0,1,0, -0,0,0,1,0, -0,0,9,0,0, -0,0,2,0,0, -1,0,0,2,0, -0,0,8,5,0, -11,0,2,0,0, -0,0,6,4,0, -0,0,4,3,0, -0,0,19,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,4,1,0, -0,0,8,2,0, -1,0,9,1,0, -0,0,7,3,0, -0,0,0,1,0, -0,2,0,2,0, -0,0,6,2,0, -0,1,1,1,0, -0,0,0,4,0, -0,0,0,2,0, -0,0,6,2,0, -0,0,5,0,0, -9,0,5,1,0, -0,0,6,2,0, -0,0,0,5,0, -0,2,5,6,0, -0,0,0,0,0, -0,0,30,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,9,1,0, -0,0,31,2,0, -0,0,15,0,0, -0,0,7,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,1,0,0, -2,0,9,2,0, -0,0,0,0,0, -0,0,12,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,12,1,0, -0,0,42,0,0, -0,0,0,3,0, -5,0,15,1,0, -0,0,18,0,0, -0,1,5,0,0, -0,0,0,2,0, -0,0,5,1,0, -0,0,23,3,0, -0,0,0,3,0, -0,0,14,0,0, -0,0,17,0,0, -0,0,1,0,0, -0,0,9,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,22,0,0, -0,0,0,1,0, -71,0,11,0,0, -0,0,0,3,0, -0,0,0,1,0, -0,0,40,1,0, -0,0,8,0,0, -0,0,0,1,0, -0,0,0,3,0, -0,1,11,0,0, -0,0,0,2,0, -0,0,17,0,0, -0,0,12,0,0, -0,0,19,0,0, -0,0,3,1,0, -0,0,1,1,0, -0,0,1,2,0, -0,0,1,2,0, -0,0,6,4,0, -0,0,0,1,0, -0,14,11,2,0, -0,0,11,3,6, -0,0,6,1,0, -0,0,0,0,0, -0,0,11,0,0, -0,0,1,1,0, -0,1,0,1,0, -0,0,10,1,0, -0,0,0,0,0, -0,0,16,2,0, -3,0,8,2,0, -0,0,8,0,0, -0,0,0,0,0, -11,0,2,0,0, -0,0,0,0,0, -0,0,10,2,0, -0,1,7,1,0, -0,0,0,1,0, -0,0,7,1,0, -0,0,0,3,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,2,0,0, -0,0,10,1,0, -0,0,0,1,0, -0,1,7,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -1,0,10,2,0, -0,0,14,71,0, -0,0,0,1,0, -0,0,8,8,0, -0,0,0,0,0, -0,0,3,0,0, -0,0,0,0,0, -0,0,7,1,0, -0,0,0,0,0, -0,0,13,2,0, -0,0,8,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,13,6,0, -0,0,12,0,0, -0,0,6,0,0, -0,0,1,0,0, -0,1,1,1,0, -0,0,1,0,0, -1,0,4,0,0, -0,0,0,2,0, -0,0,3,1,0, -0,0,2,0,0, -0,0,2,1,0, -4,0,5,1,0, -0,0,13,0,0, -0,0,11,2,0, -0,0,0,0,0, -0,0,5,1,0, -0,0,14,0,0, -0,0,20,0,0, -0,0,13,1,0, -0,0,17,0,0, -0,0,0,0,0, -0,3,23,4,46, -0,0,1,0,0, -0,0,7,4,0, -5,0,0,1,0, -0,0,6,2,0, -0,0,20,0,0, -0,0,3,4,0, -0,0,0,3,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,1,1,0, -0,0,2,2,0, -0,3,12,2,0, -0,1,2,1,0, -0,2,11,2,0, -0,1,14,0,0, -0,4,1,1,0, -0,0,40,0,0, -0,0,0,0,0, -0,0,0,0,0, -10,0,1,1,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,16,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,1,2,0, -0,0,0,0,0, -0,1,14,0,0, -0,0,0,0,0, -0,0,4,0,0, -0,2,42,0,0, -0,0,0,2,0, -16,0,2,0,0, -0,0,0,0,0, -0,0,3,1,0, -1,0,11,1,0, -0,0,7,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,14,1,0, -0,0,48,4,0, -0,1,0,0,0, -0,0,3,0,0, -0,0,17,0,0, -0,0,0,0,0, -0,0,5,2,0, -0,0,5,2,0, -0,1,0,4,0, -0,0,8,1,0, -0,0,0,2,0, -0,0,45,0,0, -0,0,4,0,0, -0,1,7,3,0, -0,0,6,3,0, -0,0,0,0,0, -0,1,1,1,0, -0,0,5,2,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,1,4,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,3,0,0, -0,0,6,2,0, -0,0,0,0,0, -0,0,0,2,0, -0,2,25,5,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,2,2,0, -0,0,0,1,0, -0,0,1,0,0, -0,0,15,0,0, -0,4,0,2,0, -0,0,4,1,0, -0,0,0,3,0, -10,0,6,4,0, -0,1,28,0,0, -0,0,0,1,0, -0,0,8,1,0, -0,0,12,0,0, -0,0,0,1,0, -0,0,24,0,0, -0,0,2,1,0, -0,0,1,1,0, -0,0,13,1,0, -0,0,15,0,0, -0,0,0,0,0, -0,0,2,0,0, -0,0,0,0,0, -0,0,20,0,0, -0,0,0,0,0, -0,0,1,1,0, -0,0,4,0,0, -0,2,28,0,0, -0,0,18,0,0, -0,0,3,1,0, -0,0,17,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,2,3,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,5,2,0, -0,0,3,0,0, -0,1,16,0,0, -0,0,16,1,0, -0,0,11,0,0, -0,1,0,3,0, -0,0,13,0,0, -0,0,8,0,0, -0,0,0,10,0, -0,0,0,12,0, -0,0,0,0,0, -2,0,4,1,0, -0,0,23,0,0, -0,0,0,1,0, -0,0,18,0,0, -0,0,8,1,0, -0,0,0,0,0, -0,0,12,0,0, -0,4,1,1,0, -0,0,2,0,0, -0,0,3,0,0, -0,0,0,0,0, -0,0,5,0,0, -0,0,7,3,0, -0,0,0,0,0, -0,0,2,1,0, -0,0,0,1,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,11,0,0, -0,0,5,0,0, -0,0,6,3,0, -0,0,0,1,0, -0,0,29,4,0, -0,0,2,2,0, -0,0,0,0,0, -0,0,5,0,0, -0,0,4,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,2,0,5,0, -0,0,20,0,0, -0,0,0,2,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,3,0,0, -0,0,0,2,0, -0,0,28,2,0, -0,0,14,0,0, -0,0,0,2,0, -0,0,3,0,0, -0,0,17,0,0, -0,0,9,2,0, -0,0,0,1,0, -0,0,1,2,0, -0,0,4,0,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,5,3,0, -0,0,3,0,0, -0,1,0,4,3, -0,0,8,3,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,29,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,1,5,0, -0,0,0,1,0, -0,0,13,0,0, -0,0,4,0,0, -0,0,0,2,0, -10,0,6,4,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,2,25,5,0, -0,0,1,0,0, -0,0,0,2,0, -0,0,6,1,0, -0,0,24,0,0, -0,0,11,0,0, -0,0,20,1,0, -0,0,4,2,0, -1,0,30,2,0, -0,0,1,0,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,3,1,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,1,28,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,3,0, -0,1,0,0,0, -0,0,20,8,0, -0,0,0,3,0, -0,0,6,3,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,1,1,0, -0,0,0,3,0, -0,0,3,0,0, -0,0,10,2,0, -0,0,1,1,0, -1,1,10,1,0, -0,0,4,1,0, -0,1,15,6,0, -0,0,0,0,0, -0,0,3,0,0, -0,0,21,0,0, -0,0,0,0,0, -0,0,6,1,0, -0,0,13,0,0, -0,0,2,0,0, -0,0,12,0,0, -0,0,28,1,0, -0,0,0,1,0, -0,0,3,0,0, -0,0,14,1,0, -0,0,14,1,0, -0,0,0,1,0, -0,0,0,12,0, -0,0,1,0,0, -0,0,42,0,0, -0,0,7,0,0, -6,0,2,2,0, -0,0,11,0,0, -0,0,9,0,0, -0,0,17,0,0, -0,0,23,3,0, -0,0,1,0,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,0,5,0, -4,0,5,1,0, -0,0,0,0,0, -0,0,7,2,0, -0,0,0,1,0, -0,0,7,2,0, -0,0,6,2,0, -0,1,2,0,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,7,2,0, -0,0,15,5,0, -1,1,9,0,0, -0,0,0,5,0, -0,0,4,2,0, -0,0,0,5,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,1,2,0, -0,0,0,1,0, -0,0,4,1,0, -0,0,29,0,0, -0,0,0,0,0, -0,3,9,2,0, -1,0,8,1,0, -0,0,1,0,0, -0,0,0,1,0, -0,0,18,0,0, -0,0,2,1,0, -9,0,0,2,0, -3,0,0,10,0, -0,0,6,1,0, -0,0,0,1,0, -0,0,0,3,0, -0,0,5,7,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,1,1,0, -0,1,10,1,0, -0,0,7,2,0, -0,0,20,0,0, -0,0,0,2,0, -0,0,43,1,0, -0,0,0,0,0, -0,3,12,0,0, -0,0,8,1,0, -0,0,0,0,0, -0,0,9,1,0, -0,0,1,0,0, -0,0,5,1,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,11,1,0, -0,0,0,1,0, -0,0,5,0,0, -0,0,0,2,0, -0,0,8,2,0, -0,0,4,0,0, -0,1,23,1,0, -0,0,7,3,0, -0,0,0,2,0, -0,0,1,3,0, -0,1,5,1,0, -0,0,15,1,0, -0,0,4,0,0, -0,0,9,1,0, -0,0,0,2,0, -0,0,0,1,0, -0,0,6,2,0, -0,0,3,1,0, -0,0,0,1,0, -0,0,3,2,0, -0,0,10,0,0, -0,0,5,0,0, -0,1,0,0,0, -0,0,8,0,0, -0,0,4,1,0, -0,0,14,0,0, -0,0,0,1,0, -0,0,30,0,0, -0,0,7,0,0, -0,0,3,1,0, -0,0,22,0,0, -0,0,10,2,0, -0,0,3,4,0, -0,0,0,1,0, -0,0,24,1,0, -0,0,0,0,0, -0,0,10,1,0, -0,1,1,1,0, -0,0,32,0,0, -0,0,19,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,8,1,0, -0,0,28,1,0, -0,0,3,1,0, -0,0,0,0,0, -0,0,7,2,0, -0,0,2,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,13,0,0, -0,0,5,0,0, -0,0,26,1,0, -0,0,0,1,0, -0,0,31,0,0, -0,1,4,2,0, -5,0,0,0,0, -0,0,6,1,0, -0,4,33,2,1, -0,0,8,0,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,8,2,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,7,1,0, -0,0,3,0,0, -0,0,3,1,0, -0,0,0,0,0, -0,0,4,1,0, -0,0,19,0,0, -0,0,30,0,0, -0,0,0,0,0, -0,2,1,1,0, -0,0,21,1,0, -0,0,0,0,0, -0,0,8,2,0, -0,0,1,1,0, -0,0,0,16,0, -0,0,10,4,0, -0,0,31,2,0, -0,0,1,0,0, -2,0,2,0,0, -0,0,0,1,0, -0,0,6,1,0, -0,0,0,0,0, -0,0,5,1,0, -0,2,0,5,0, -1,0,11,3,0, -0,0,0,2,0, -0,0,0,1,0, -0,0,5,0,0, -0,0,0,3,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,6,2,0, -0,0,15,2,0, -0,1,0,1,0, -10,1,4,1,0, -0,0,13,6,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,8,4,0, -0,0,1,0,0, -0,0,0,1,0, -0,0,6,2,0, -0,0,21,5,0, -0,0,5,0,0, -0,0,0,1,0, -0,0,21,5,0, -0,0,14,0,0, -0,0,21,0,0, -8,0,8,1,0, -0,1,10,1,0, -0,0,2,1,0, -0,0,26,1,0, -0,0,8,2,0, -0,1,4,0,0, -0,0,16,2,0, -0,0,0,1,0, -0,0,2,1,0, -0,0,0,0,0, -0,0,22,2,0, -0,1,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,11,0,0, -0,0,12,4,0, -0,0,31,2,0, -0,0,11,2,0, -0,2,4,0,0, -1,1,10,1,0, -0,2,4,0,0, -0,0,8,1,0, -19,0,7,0,0, -0,0,11,4,0, -0,0,1,3,0, -0,0,0,0,0, -0,0,5,0,0, -0,0,14,1,0, -0,0,5,0,0, -0,0,0,1,0, -0,0,10,1,0, -0,2,0,2,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,19,0,0, -0,0,1,0,0, -0,0,11,3,6, -0,0,0,0,0, -0,0,23,0,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,8,5,0, -0,0,9,0,0, -0,0,6,1,0, -0,0,0,1,0, -0,0,12,0,0, -0,0,17,2,0, -0,0,24,0,0, -0,0,48,4,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,9,1,0, -0,0,1,1,0, -0,0,1,0,0, -0,0,26,1,0, -0,0,5,0,0, -0,0,9,0,0, -0,1,11,4,0, -0,0,0,1,0, -0,0,1,1,0, -0,0,13,0,0, -0,2,0,7,0, -0,0,1,2,0, -0,0,0,2,0, -0,0,0,0,0, -0,1,0,1,0, -0,0,13,0,0, -0,0,2,0,0, -0,0,15,0,0, -0,0,0,1,0, -0,0,9,0,0, -0,0,21,0,0, -0,3,2,3,0, -0,0,14,1,0, -0,0,0,1,0, -0,0,2,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,1,28,1,0, -0,0,6,1,0, -0,0,3,1,0, -0,0,5,0,0, -0,0,6,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,4,0, -0,0,1,3,1, -0,0,5,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,21,1,0, -0,0,7,3,0, -15,0,7,0,0, -0,0,1,1,0, -0,0,0,3,0, -0,0,0,1,0, -0,0,2,0,0, -0,1,0,0,0, -0,0,22,0,0, -0,0,3,0,0, -0,0,3,1,0, -0,0,0,2,0, -0,0,6,2,0, -0,0,2,0,0, -38,0,6,1,0, -0,0,0,0,0, -0,0,0,0,0, -5,0,0,1,0, -2,0,0,0,0, -0,0,0,1,0, -0,0,1,0,0, -0,0,2,3,0, -0,0,33,1,0, -0,0,0,0,0, -0,1,2,1,0, -0,0,22,2,0, -0,3,0,1,0, -0,0,0,1,0, -0,0,2,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,1,0,0, -0,0,1,0,0, -0,0,3,1,0, -0,0,12,1,0, -0,0,5,0,0, -0,0,0,1,0, -0,0,0,3,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,13,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,1,12,0,0, -0,0,0,1,0, -0,0,16,1,0, -0,1,0,0,0, -0,0,4,1,0, -0,0,23,2,0, -0,0,1,0,0, -0,1,19,1,0, -0,0,0,0,0, -0,0,13,2,0, -0,0,0,0,0, -0,0,0,4,0, -0,0,0,0,0, -0,1,15,1,0, -0,0,2,0,0, -0,0,31,0,0, -0,0,3,0,0, -2,0,0,0,0, -0,0,6,0,0, -0,0,11,0,0, -0,0,9,0,0, -0,0,5,0,0, -0,0,0,1,0, -1,0,1,2,0, -0,0,0,0,0, -0,0,3,7,0, -0,0,0,1,0, -24,0,2,0,0, -0,0,3,0,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,1,0,0, -0,0,26,3,0, -0,0,2,0,0, -0,0,0,0,0, -0,0,4,1,0, -0,0,14,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,3,1,0, -0,0,3,1,0, -0,0,18,2,0, -0,0,19,0,0, -0,0,3,2,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,2,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,2,1,0, -0,0,15,1,0, -17,0,0,0,0, -0,0,5,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,3,1,0, -0,0,6,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,2,2,0, -0,0,13,0,0, -0,0,0,1,0, -0,0,0,4,0, -0,1,14,3,0, -0,0,7,1,0, -0,0,2,0,0, -0,0,0,1,0, -0,0,35,1,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,0,0,0, -0,2,0,7,0, -0,0,10,1,0, -0,0,0,1,0, -0,2,0,0,0, -0,0,3,1,0, -0,0,0,0,0, -0,0,14,0,0, -0,1,0,0,0, -0,0,5,0,0, -0,0,4,3,0, -0,0,9,4,0, -0,0,11,0,0, -0,0,0,0,0, -0,0,6,1,0, -0,1,12,2,0, -0,0,5,0,0, -0,0,4,2,0, -0,0,2,0,0, -0,0,9,3,0, -0,0,1,3,0, -0,0,0,1,0, -0,0,0,0,0, -0,1,0,0,0, -0,0,14,0,0, -0,0,3,0,0, -0,0,0,1,0, -0,0,17,0,0, -0,0,17,1,0, -0,0,6,0,0, -0,1,2,3,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,9,2,0, -32,0,1,1,0, -0,0,0,46,0, -0,0,3,0,0, -0,3,8,1,0, -0,0,0,0,0, -3,0,8,2,0, -0,0,22,0,0, -0,0,1,0,0, -0,0,3,2,0, -0,0,45,1,0, -0,0,14,0,0, -0,0,0,0,0, -0,4,21,1,0, -0,0,0,2,0, -0,0,2,1,0, -0,0,0,12,0, -0,0,0,1,0, -0,0,14,3,0, -0,0,0,2,0, -0,0,9,0,0, -0,0,0,0,0, -0,0,48,1,0, -0,0,19,0,0, -0,0,0,1,0, -0,0,8,2,0, -0,2,27,4,0, -0,0,0,1,0, -0,0,3,1,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,38,0,0, -0,0,0,0,0, -0,0,6,0,0, -0,0,48,1,0, -0,0,0,2,0, -0,0,0,1,0, -0,0,0,1,71, -0,1,0,0,0, -0,0,0,1,0, -0,0,3,1,0, -0,0,0,16,0, -0,0,13,0,0, -0,0,0,0,0, -0,0,0,5,0, -0,1,18,0,0, -0,1,0,0,0, -0,1,4,0,0, -0,0,10,0,0, -0,1,8,1,0, -0,0,3,0,0, -0,0,0,1,0, -0,0,0,2,0, -0,1,5,7,0, -0,0,0,3,0, -0,2,0,1,0, -0,0,0,0,0, -0,0,7,1,0, -0,0,8,0,0, -0,3,0,1,0, -0,3,18,1,0, -0,0,25,1,0, -1,0,1,3,0, -0,0,9,2,0, -0,0,1,0,0, -0,0,11,1,0, -0,0,0,0,0, -0,1,28,4,0, -0,0,0,46,0, -0,0,3,0,0, -0,0,0,2,0, -0,0,19,0,0, -10,1,4,1,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,0,2,0, -0,1,4,0,0, -0,0,12,0,0, -0,0,4,3,0, -0,0,14,0,0, -0,0,11,0,0, -0,0,19,0,0, -0,0,15,0,0, -0,0,1,0,0, -0,0,5,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,1,2,1,0, -0,1,21,0,0, -0,0,1,0,0, -0,0,0,1,0, -0,0,3,1,0, -0,0,0,0,0, -0,4,21,1,0, -0,0,12,0,0, -0,0,8,1,0, -0,0,17,0,0, -0,0,7,3,0, -0,0,15,5,0, -0,2,1,1,0, -0,0,6,0,0, -0,1,9,1,0, -0,0,14,1,0, -0,0,16,0,0, -0,0,0,1,0, -0,0,1,1,0, -0,0,1,0,0, -0,1,0,1,0, -0,0,0,0,0, -0,0,30,0,0, -0,2,0,2,0, -1,0,9,1,0, -0,0,19,2,0, -0,0,0,1,0, -0,0,8,0,0, -0,0,0,0,0, -0,0,9,0,0, -0,0,10,0,0, -0,0,11,0,0, -0,0,13,0,0, -0,2,14,0,0, -0,0,0,0,0, -0,0,4,2,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,16,0,0, -0,0,3,4,0, -0,0,0,1,0, -0,0,2,2,0, -0,0,6,1,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,5,1,0, -0,1,7,1,0, -0,0,11,3,0, -0,0,2,2,0, -0,0,20,1,0, -0,0,0,0,0, -0,0,1,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,3,0,0, -0,0,8,0,0, -0,0,4,1,0, -0,0,0,2,0, -0,0,5,0,0, -0,0,12,1,0, -0,1,11,0,0, -0,0,1,0,0, -0,0,1,1,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,4,1,0, -0,0,0,1,0, -0,0,7,2,0, -0,0,4,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,46,0, -0,2,9,1,0, -0,0,14,1,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,3,0,0, -0,0,0,0,0, -0,0,0,0,6, -0,0,0,3,0, -0,0,39,0,0, -0,0,0,2,0, -0,0,25,0,0, -0,0,19,1,0, -0,0,12,0,0, -0,0,0,0,0, -0,0,6,1,0, -0,0,0,0,0, -0,0,3,8,0, -0,0,18,0,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,40,0,0, -0,0,0,0,0, -0,0,2,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,0,1,0, -0,0,4,1,0, -0,0,15,0,0, -0,0,0,0,0, -0,3,23,4,46, -0,0,3,1,0, -0,2,42,0,0, -0,3,0,2,0, -0,0,3,0,0, -0,0,2,0,0, -0,0,0,6,0, -0,0,9,0,0, -0,0,0,0,0, -0,0,14,1,0, -0,0,2,0,0, -0,0,0,0,0, -31,0,0,1,0, -0,0,0,0,0, -0,0,1,0,0, -0,1,5,0,0, -0,0,16,4,0, -0,0,0,0,0, -0,0,10,2,0, -0,0,4,0,0, -0,1,0,0,0, -5,0,0,1,0, -0,0,0,0,0, -0,0,6,1,0, -0,0,23,0,0, -0,0,0,0,0, -0,2,8,0,0, -0,0,33,2,0, -0,0,0,1,0, -0,0,20,0,0, -0,0,29,0,0, -0,0,0,7,0, -0,0,0,0,0, -0,1,5,2,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,26,0,0, -0,0,1,0,0, -0,2,0,7,0, -0,1,1,0,0, -0,0,6,1,0, -0,0,0,1,0, -0,0,5,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,3,1,0, -0,0,0,0,0, -0,0,3,0,0, -0,0,8,1,0, -0,0,2,3,0, -0,0,0,0,0, -0,0,5,10,0, -0,0,1,1,0, -0,1,0,1,0, -0,0,8,0,0, -0,0,18,2,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,0,2,0, -0,2,25,5,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,0,1,0, -0,0,12,2,0, -0,0,3,0,0, -0,0,1,1,0, -0,0,0,5,0, -0,0,0,0,0, -0,0,2,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,6,0,0, -0,2,1,1,0, -0,0,19,0,0, -0,0,20,0,0, -0,0,15,1,0, -0,0,0,0,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,3,0,0, -0,0,0,6,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,17,0,0, -0,0,0,1,0, -0,0,45,0,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,19,1,0, -0,0,0,3,0, -0,0,2,0,0, -0,0,5,56,0, -0,0,0,0,0, -0,0,2,1,0, -0,0,5,2,0, -0,0,0,1,0, -0,0,5,3,0, -0,1,2,0,0, -0,0,1,2,0, -0,0,12,0,0, -0,0,2,2,0, -0,1,9,1,0, -0,0,5,2,0, -0,0,23,3,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,2,1,0, -0,0,3,0,0, -0,1,0,1,0, -0,0,7,0,0, -0,0,19,3,0, -0,0,5,2,0, -0,0,0,2,0, -0,0,21,2,0, -0,0,18,2,0, -0,0,18,0,0, -0,0,0,2,0, -0,1,11,0,0, -0,4,0,2,0, -0,2,6,0,0, -0,1,7,0,0, -0,0,13,0,0, -0,0,11,0,0, -0,0,0,0,0, -0,0,7,1,0, -0,2,25,5,0, -0,0,29,0,0, -0,0,0,0,0, -5,0,0,0,0, -0,0,5,0,0, -0,0,5,1,0, -0,0,6,2,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,20,0,0, -0,0,4,0,0, -0,0,1,1,0, -0,0,0,2,0, -0,1,19,2,0, -0,0,6,2,0, -0,0,19,1,0, -0,0,0,0,0, -0,0,1,5,0, -0,1,5,1,0, -0,0,6,2,0, -0,0,1,0,0, -0,1,2,4,0, -0,0,5,0,0, -0,0,8,0,0, -0,1,8,2,0, -0,0,0,1,0, -0,0,14,0,0, -0,0,3,0,0, -0,0,7,0,0, -0,0,0,2,0, -0,3,0,2,0, -0,0,1,3,0, -0,0,1,0,0, -0,0,5,4,0, -0,0,4,3,0, -0,0,7,0,0, -0,0,17,2,0, -0,1,6,0,0, -0,1,1,1,0, -0,0,5,1,0, -0,0,0,4,0, -0,0,3,4,0, -0,0,0,0,0, -0,1,0,1,0, -0,0,38,0,0, -0,0,0,2,0, -0,0,16,1,0, -0,0,5,0,0, -0,0,35,1,0, -0,0,1,1,0, -0,0,0,3,0, -0,0,0,0,0, -0,0,0,4,0, -0,0,2,0,0, -0,0,1,1,0, -0,0,15,0,0, -2,0,2,0,0, -0,0,28,2,0, -0,0,71,1,0, -0,0,0,0,0, -0,1,9,1,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,0,2,0, -0,1,33,3,0, -0,0,22,0,0, -0,0,30,0,0, -0,0,0,1,0, -0,0,11,0,0, -0,1,0,1,0, -0,1,0,0,0, -0,0,11,1,0, -0,0,0,0,0, -0,0,5,3,0, -0,0,2,1,0, -0,0,3,0,0, -0,0,0,0,0, -0,0,17,0,0, -0,0,5,0,0, -20,0,10,0,0, -0,0,6,1,0, -0,0,14,0,0, -0,0,38,0,0, -0,0,0,0,0, -0,1,11,2,0, -0,0,0,2,0, -0,0,0,1,0, -0,0,12,0,0, -0,0,3,1,0, -0,0,0,0,0, -0,0,0,2,0, -0,1,33,3,0, -0,0,2,0,0, -0,0,7,1,0, -0,0,0,0,0, -0,0,0,5,0, -0,0,0,0,0, -0,1,0,1,0, -0,0,0,0,0, -0,0,21,5,0, -0,0,0,0,0, -0,0,3,2,0, -0,0,4,1,0, -0,0,0,0,0, -0,0,21,5,0, -0,0,11,3,6, -0,0,14,0,0, -0,0,13,0,0, -0,0,0,1,0, -0,0,4,4,0, -0,0,0,1,0, -0,3,12,0,0, -0,0,7,0,0, -0,0,12,0,0, -0,0,18,0,0, -0,0,1,3,0, -0,0,17,2,0, -0,0,3,1,0, -0,0,0,0,0, -0,0,22,6,0, -0,0,0,0,0, -0,0,21,0,0, -0,0,11,0,0, -0,0,0,0,0, -5,0,0,0,0, -0,0,10,0,0, -1,0,8,1,0, -0,0,0,1,0, -0,0,0,0,0, -4,0,5,1,0, -0,0,0,1,0, -0,0,13,0,0, -0,1,11,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,5,0,0, -0,0,19,2,0, -0,0,0,0,0, -0,0,1,0,0, -0,0,8,5,0, -0,0,0,1,0, -0,0,9,1,0, -0,0,10,1,0, -0,1,0,0,0, -0,0,9,0,0, -0,0,21,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,20,0,0, -0,0,17,5,0, -0,0,5,1,0, -0,0,0,0,0, -0,0,1,1,0, -3,0,8,2,0, -0,0,0,1,0, -0,0,12,4,0, -0,0,0,1,0, -0,0,8,0,0, -0,0,0,5,0, -0,0,8,2,0, -0,0,0,1,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,10,3,0, -0,3,6,4,0, -0,0,1,0,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,23,0,0, -0,0,14,0,0, -0,0,15,2,0, -0,0,11,1,0, -0,0,0,16,0, -0,0,0,0,0, -0,0,21,5,0, -0,1,5,1,0, -0,0,0,1,0, -0,0,0,2,0, -0,3,18,1,0, -0,0,0,3,0, -0,0,0,0,0, -0,0,5,2,0, -0,0,0,1,0, -0,0,1,0,0, -0,0,8,1,0, -0,0,33,2,0, -0,0,0,2,0, -0,2,14,0,0, -0,2,42,0,0, -0,0,8,2,0, -0,0,10,0,0, -0,0,3,2,0, -0,1,2,1,0, -0,0,9,0,0, -0,0,16,4,0, -1,0,9,1,0, -0,0,1,1,0, -0,2,28,0,0, -0,0,0,1,0, -0,0,10,0,0, -0,0,1,3,0, -0,0,1,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,0,0,0, -0,1,28,1,0, -0,0,19,2,0, -0,0,45,0,0, -0,1,1,2,0, -0,0,6,0,0, -0,1,0,0,0, -0,0,0,0,0, -0,0,0,5,0, -0,0,5,0,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,0,1,0, -0,1,0,2,0, -0,0,6,0,0, -0,3,12,2,0, -0,0,2,1,0, -0,0,9,6,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,5,2,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,11,1,0, -0,1,3,1,0, -0,0,0,0,0, -0,0,25,0,0, -0,0,0,2,0, -0,0,7,2,0, -0,0,23,0,0, -0,0,1,2,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,21,5,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,10,0,0, -0,0,11,0,0, -0,0,2,0,0, -0,0,13,0,0, -0,0,0,0,0, -0,0,9,1,0, -0,0,0,0,0, -1,0,0,0,0, -0,0,1,1,0, -0,0,6,1,0, -0,0,0,2,0, -0,0,0,4,0, -8,1,0,0,0, -0,0,11,1,0, -0,0,7,0,0, -0,0,1,0,0, -0,0,7,0,0, -0,0,20,0,0, -0,0,7,0,0, -0,0,20,5,0, -0,0,0,0,0, -0,3,0,2,0, -0,1,5,1,0, -0,0,2,0,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,0,2,2, -0,0,0,0,0, -26,0,8,1,0, -0,0,14,0,0, -0,0,7,4,0, -0,0,0,5,0, -48,0,4,2,0, -0,0,0,3,0, -0,0,0,5,0, -0,0,0,1,0, -0,0,16,2,0, -0,2,5,6,0, -0,0,3,1,0, -0,0,0,1,0, -0,1,4,0,0, -0,0,0,0,0, -0,71,0,3,0, -0,0,29,0,0, -0,0,1,1,0, -0,0,0,0,0, -0,1,28,4,0, -0,0,2,0,0, -0,0,28,2,0, -0,1,1,1,0, -0,0,0,0,0, -0,0,3,1,0, -0,0,1,3,0, -2,0,4,1,0, -0,1,5,7,0, -0,0,29,0,0, -0,0,1,2,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,9,0,0, -0,0,4,2,0, -0,0,8,1,0, -0,0,48,1,0, -0,0,1,1,0, -0,0,10,0,0, -0,0,0,0,0, -0,0,5,3,0, -1,0,0,0,0, -0,0,3,2,0, -0,2,0,5,0, -0,0,10,1,0, -0,0,18,1,0, -0,0,2,0,0, -0,0,2,0,0, -0,0,1,0,0, -0,0,0,1,0, -0,0,1,0,0, -0,5,0,4,0, -0,1,0,1,0, -0,0,0,2,0, -0,0,14,1,0, -26,0,8,1,0, -0,0,0,0,0, -0,0,2,0,0, -0,0,28,1,0, -0,0,11,2,0, -0,0,12,3,0, -0,0,2,1,0, -0,0,0,0,0, -0,1,10,4,0, -0,0,3,2,0, -0,0,5,0,0, -0,0,2,0,0, -0,0,10,1,0, -0,2,11,2,0, -0,0,3,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,3,0, -0,0,0,0,0, -0,1,0,1,0, -0,0,9,0,0, -0,0,0,0,0, -0,0,8,1,0, -0,0,0,6,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,3,4,0, -0,0,15,0,0, -0,0,5,0,0, -0,0,7,1,0, -0,0,0,1,0, -5,0,0,1,0, -0,0,5,2,0, -0,0,2,3,0, -0,0,0,2,0, -0,0,5,0,0, -0,0,0,6,0, -0,1,0,0,0, -0,0,11,0,0, -0,0,13,0,0, -0,1,14,0,0, -0,0,3,1,0, -0,0,11,1,0, -0,0,5,1,0, -0,0,23,1,0, -1,0,2,1,0, -0,0,6,1,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,18,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,3,0,0, -0,2,0,10,0, -0,0,12,4,0, -0,0,0,0,0, -5,0,0,0,0, -1,0,30,2,0, -0,0,1,0,0, -0,0,9,1,0, -0,0,0,2,0, -0,0,0,2,0, -0,0,3,0,0, -0,0,0,1,0, -0,0,16,0,0, -0,0,1,1,0, -0,0,10,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,1,3,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,9,6,0, -16,0,2,0,0, -0,0,5,10,0, -0,0,0,0,0, -0,0,30,0,0, -0,1,5,7,0, -0,0,21,0,0, -0,0,19,1,0, -0,1,0,1,0, -0,0,1,1,0, -0,1,2,1,0, -0,0,0,0,0, -0,0,3,1,0, -0,0,5,2,0, -0,0,0,0,0, -0,0,6,2,0, -0,0,0,1,0, -0,0,0,0,0, -0,4,0,2,0, -0,0,0,1,0, -0,0,11,3,6, -0,1,0,3,0, -0,0,3,7,0, -0,1,0,3,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,7,4,0, -0,0,2,1,0, -0,0,0,1,0, -0,0,8,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,6,0, -0,0,0,5,0, -0,1,10,5,0, -5,0,0,0,0, -0,0,3,2,0, -0,0,28,0,0, -0,0,28,2,0, -0,0,41,0,0, -0,0,20,0,0, -0,0,0,1,0, -0,1,1,1,0, -0,0,1,1,0, -0,0,0,2,0, -0,0,19,1,0, -0,1,5,2,0, -0,0,1,0,0, -0,2,0,0,0, -0,0,12,1,0, -0,0,1,2,0, -0,0,0,2,0, -0,0,19,1,0, -0,0,18,2,0, -0,1,4,0,0, -0,0,5,10,0, -0,0,9,2,0, -0,1,11,0,0, -0,0,0,1,0, -0,0,21,0,0, -0,0,10,0,0, -0,0,0,0,0, -9,0,5,1,0, -0,0,0,0,0, -0,2,0,2,0, -0,0,3,0,0, -0,0,12,4,0, -0,0,9,0,0, -0,0,7,0,0, -0,1,0,10,0, -0,0,0,0,0, -0,0,2,0,0, -0,0,0,1,0, -0,0,7,1,0, -0,0,1,1,0, -0,0,6,0,0, -0,0,5,0,0, -0,0,1,0,0, -0,0,8,2,0, -0,0,0,0,0, -0,0,24,0,0, -0,0,4,3,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,0,1,0, -0,1,1,1,0, -0,0,24,0,0, -0,0,4,1,0, -10,0,1,1,0, -0,0,8,0,0, -0,0,8,1,0, -0,1,30,0,0, -0,0,0,1,0, -0,1,10,4,0, -0,0,17,1,0, -0,0,3,0,0, -0,0,40,0,0, -0,0,0,2,0, -0,0,2,2,0, -0,0,8,0,0, -0,0,0,2,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,3,1,0, -0,0,28,0,0, -0,0,0,0,0, -0,0,8,0,0, -0,1,7,0,0, -0,1,23,1,0, -0,0,7,1,0, -0,0,0,2,0, -0,0,2,0,0, -0,0,11,0,0, -0,0,0,1,0, -0,0,9,0,0, -0,1,28,4,0, -0,0,19,0,0, -0,0,0,0,0, -0,1,16,2,0, -0,0,1,0,0, -0,4,0,2,0, -0,0,3,1,0, -0,1,1,1,0, -0,0,0,3,0, -0,3,0,2,0, -0,0,25,2,0, -0,0,14,0,0, -0,0,15,0,0, -0,0,5,0,0, -0,0,17,1,0, -0,0,6,1,0, -0,0,2,0,0, -0,0,15,2,0, -0,1,30,0,0, -0,0,0,1,0, -0,0,0,1,0, -0,1,9,0,0, -0,0,0,1,0, -0,2,4,1,0, -0,0,0,1,0, -0,1,38,2,0, -0,0,22,2,0, -0,0,0,0,0, -0,0,16,0,0, -0,0,0,0,0, -0,0,21,5,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,6,1,0, -0,0,0,0,0, -0,1,1,1,0, -0,0,8,2,0, -0,0,1,0,0, -0,0,0,2,0, -0,0,6,0,0, -0,1,0,0,0, -0,0,6,2,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,8,3,0, -0,0,16,0,0, -0,0,1,1,0, -0,0,3,0,0, -0,0,0,1,0, -0,0,1,1,0, -16,0,2,0,0, -0,0,17,0,0, -71,0,11,0,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,10,2,0, -0,0,18,2,0, -0,0,14,0,0, -0,0,9,0,0, -0,0,0,0,0, -0,0,2,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,16,0,0, -0,0,23,1,0, -0,0,8,4,0, -0,0,0,0,0, -0,0,16,4,0, -0,0,0,0,0, -0,0,26,0,0, -0,0,11,4,0, -0,0,10,9,0, -0,0,24,0,0, -0,0,1,5,0, -0,0,1,3,1, -0,0,11,0,0, -0,0,1,0,0, -0,2,4,1,0, -0,0,0,1,0, -0,0,12,3,0, -0,0,18,0,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,8,0,0, -0,1,0,0,0, -0,0,4,0,0, -0,0,9,0,0, -0,0,0,0,0, -0,0,20,0,0, -0,0,1,1,0, -0,0,0,2,0, -0,0,12,4,0, -0,0,7,0,0, -0,0,9,0,0, -0,0,9,1,0, -0,0,0,0,0, -0,0,18,1,0, -0,0,0,1,0, -0,0,13,0,0, -0,1,28,0,0, -0,0,4,0,0, -0,0,19,1,0, -0,0,3,0,0, -0,0,5,0,0, -0,1,0,0,0, -0,0,23,0,0, -0,1,14,0,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,5,0,0, -0,0,6,0,0, -0,0,5,0,0, -0,0,0,5,0, -0,0,4,3,0, -0,0,0,3,0, -0,0,10,0,0, -0,0,0,0,0, -0,1,1,0,0, -0,0,6,1,0, -0,0,7,0,0, -8,0,8,1,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,5,0,0, -0,0,9,1,0, -0,0,0,1,0, -0,0,18,0,0, -0,0,7,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,1,1,1,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,21,1,0, -0,0,0,2,0, -0,0,0,1,0, -0,0,0,3,0, -0,1,7,1,0, -0,0,25,2,0, -0,0,8,0,0, -0,0,3,7,0, -0,0,3,2,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,1,0,0,0, -0,0,1,1,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,1,0,0, -0,0,9,1,0, -0,0,12,4,0, -0,1,13,2,0, -0,0,11,0,0, -0,0,7,0,0, -0,0,7,0,0, -0,0,0,0,0, -0,0,0,8,0, -0,0,0,16,0, -0,0,24,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,6,1,0, -0,0,0,1,0, -0,0,0,3,0, -0,1,0,1,0, -0,0,0,0,0, -0,2,0,0,0, -0,0,14,1,0, -0,2,27,4,0, -0,1,2,4,0, -0,0,0,1,0, -0,1,1,0,0, -0,0,0,1,0, -0,0,0,1,0, -0,1,2,2,0, -0,1,0,1,0, -0,0,0,0,0, -0,0,5,0,0, -0,0,0,2,0, -0,0,19,0,0, -0,0,0,1,0, -0,0,1,0,0, -0,2,42,0,0, -0,1,18,3,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,9,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,4,0,0, -0,0,0,0,0, -0,0,1,3,0, -0,0,20,0,0, -0,0,0,1,0, -0,0,15,0,0, -0,0,22,0,0, -0,0,20,1,0, -2,0,6,0,0, -0,0,0,0,0, -0,0,6,1,0, -0,0,2,4,0, -0,0,13,0,0, -0,0,35,1,0, -0,0,4,1,0, -0,0,13,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,28,2,0, -0,0,2,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,1,0, -0,1,0,4,0, -0,0,28,1,0, -0,0,0,0,0, -5,0,15,1,0, -0,0,6,0,0, -0,0,0,1,0, -0,0,11,0,0, -0,0,0,46,0, -0,0,0,2,0, -0,0,40,1,0, -0,0,54,0,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,20,0,3, -0,0,7,3,0, -0,0,0,1,0, -0,0,5,0,0, -0,0,2,0,0, -0,1,3,1,0, -0,0,4,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,0,0,0, -0,0,0,11,0, -0,0,8,8,0, -4,0,5,1,0, -0,0,3,1,0, -0,0,5,1,0, -0,0,23,3,0, -0,0,0,0,0, -0,0,20,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,18,0,0, -0,0,0,0,0, -0,0,9,1,0, -0,0,23,0,0, -0,1,16,0,0, -0,1,16,0,0, -0,0,0,0,0, -0,0,0,12,0, -1,0,0,1,0, -0,1,15,1,0, -0,0,0,3,0, -0,0,7,1,0, -0,0,0,0,0, -0,0,7,0,0, -0,0,20,0,0, -0,0,1,0,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,5,0,0, -0,0,0,1,0, -0,0,4,4,0, -0,0,2,0,0, -0,0,11,1,0, -0,0,0,0,0, -0,0,2,1,0, -0,0,28,0,0, -0,0,3,1,0, -0,0,0,1,0, -0,1,8,2,0, -0,14,11,2,0, -0,1,5,1,0, -20,0,10,0,0, -0,0,9,1,0, -0,0,4,0,0, -0,0,5,0,0, -0,0,0,0,0, -0,0,11,0,0, -0,2,0,2,0, -0,0,23,0,0, -1,0,9,1,0, -0,0,15,1,0, -0,0,0,0,0, -0,0,38,0,0, -0,0,11,4,0, -1,0,9,1,0, -0,0,0,1,0, -5,0,0,0,0, -0,0,0,0,0, -0,0,1,0,0, -0,2,14,0,0, -0,0,0,0,0, -8,1,0,0,0, -0,0,6,2,0, -0,0,8,0,0, -0,0,0,0,0, -0,0,4,2,0, -0,0,21,0,0, -0,0,3,1,0, -0,1,14,1,0, -0,1,0,4,3, -0,1,22,0,0, -0,0,0,2,0, -0,0,0,4,0, -0,2,0,2,0, -0,0,0,0,0, -0,0,6,1,0, -0,3,2,2,0, -0,1,2,2,0, -0,0,0,2,0, -0,0,9,3,0, -0,0,3,1,0, -0,1,0,1,0, -0,0,6,2,0, -0,0,0,0,0, -0,0,11,0,0, -0,2,14,0,0, -0,0,3,0,0, -0,0,0,0,0, -48,0,4,2,0, -0,0,0,1,0, -0,0,10,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,6,0,0, -0,0,0,1,0, -0,1,13,0,0, -0,0,3,0,0, -0,0,7,0,0, -0,1,18,0,0, -0,0,0,0,0, -10,1,4,1,0, -0,0,2,0,0, -0,0,1,0,0, -0,0,0,2,0, -0,1,0,0,0, -0,0,10,0,0, -0,0,0,1,0, -0,0,30,0,0, -0,0,41,0,0, -0,0,6,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,1,0,10,0, -0,0,3,0,0, -0,0,11,0,0, -0,0,0,1,0, -0,0,15,0,0, -0,0,0,0,0, -0,1,0,0,0, -0,0,0,0,0, -0,1,0,0,0, -0,0,42,0,0, -0,5,0,4,0, -0,0,27,0,0, -0,1,15,1,0, -0,0,0,1,0, -0,2,42,0,0, -0,0,16,1,0, -0,1,10,1,0, -0,0,0,1,0, -0,1,15,0,0, -0,2,0,2,0, -0,0,0,1,0, -0,0,3,0,0, -0,0,17,0,0, -0,0,9,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,8,0,0, -0,0,1,1,0, -0,0,0,2,0, -0,0,19,1,0, -0,0,0,1,0, -0,0,8,1,0, -0,0,0,0,0, -0,0,4,1,0, -0,0,11,1,0, -0,0,21,5,0, -0,0,4,3,0, -0,0,5,1,0, -0,0,1,0,0, -0,0,24,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,2,0, -0,1,15,0,0, -31,0,0,1,0, -0,1,13,1,0, -0,0,1,0,0, -0,0,23,0,0, -0,0,0,0,0, -0,0,11,0,0, -0,0,0,0,0, -0,0,1,0,0, -0,0,8,0,0, -24,0,2,0,0, -0,0,14,0,0, -0,0,1,3,0, -0,0,20,0,0, -0,0,0,0,0, -0,0,3,0,0, -0,0,4,2,0, -0,0,13,0,0, -0,0,5,7,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,23,1,0, -0,0,13,3,0, -0,14,11,2,0, -0,0,5,0,0, -0,0,6,1,0, -0,0,1,0,0, -0,0,5,2,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,13,0,0, -0,0,10,0,0, -0,1,0,0,0, -0,0,0,1,0, -0,0,0,2,0, -0,1,0,0,0, -0,1,1,0,0, -0,0,0,3,0, -0,0,32,1,0, -0,0,0,0,0, -0,0,1,0,0, -0,0,0,0,6, -0,0,0,0,0, -0,1,28,0,0, -0,0,4,2,0, -0,0,20,0,0, -0,0,1,0,0, -0,0,17,2,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,0,2,0, -0,0,2,1,0, -0,0,16,4,0, -0,0,0,2,0, -31,0,0,1,0, -0,0,9,0,0, -0,0,12,0,0, -0,0,0,0,0, -0,0,14,0,0, -0,1,13,0,0, -0,0,8,0,0, -0,0,23,3,0, -0,0,0,0,0, -10,1,4,1,0, -0,0,0,3,0, -0,0,40,0,0, -0,0,11,0,0, -0,0,26,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,8,2,0, -0,0,1,0,0, -2,0,4,1,0, -0,0,0,1,0, -0,1,5,0,0, -0,0,0,0,0, -0,0,17,1,0, -0,0,0,3,0, -0,0,24,1,0, -0,0,1,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,15,1,0, -0,1,0,0,0, -0,0,2,2,0, -0,0,6,0,0, -0,1,10,5,0, -0,0,1,0,0, -0,0,5,0,0, -0,0,1,3,0, -0,0,7,1,0, -0,0,0,2,0, -0,2,0,0,0, -0,1,16,2,0, -0,0,0,2,0, -0,0,0,0,0, -0,2,0,5,0, -0,0,4,3,0, -0,0,25,1,0, -0,1,0,4,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,7,2,0, -0,0,0,0,0, -0,0,19,0,0, -0,0,0,0,0, -0,0,40,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,1,21,0,0, -0,0,5,0,0, -0,0,0,0,0, -0,0,28,1,0, -0,0,0,0,0, -0,0,5,4,0, -0,0,6,3,0, -0,0,1,3,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,1,0, -18,0,5,1,0, -0,0,1,3,0, -0,1,1,0,0, -0,1,0,0,0, -0,0,40,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,1,3,0, -0,0,20,0,0, -0,0,9,0,0, -0,0,22,2,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,3,4,0, -0,0,7,2,0, -0,0,20,0,0, -1,0,3,1,0, -0,0,12,0,0, -0,0,13,2,0, -0,2,5,6,0, -0,0,6,2,0, -0,0,5,4,0, -0,0,14,1,0, -0,0,3,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,7,0,0, -0,0,0,1,0, -0,0,0,2,0, -0,1,9,1,0, -0,2,28,0,0, -1,0,9,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,1,0, -0,1,0,0,0, -0,0,2,1,0, -0,0,12,0,2, -0,0,0,1,0, -0,0,15,0,0, -0,0,0,0,0, -0,0,9,0,0, -0,0,7,1,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,1,1,0, -0,0,3,0,0, -0,0,1,1,0, -0,0,2,1,0, -0,0,2,1,0, -0,1,0,0,0, -0,0,13,1,0, -0,0,4,1,0, -0,0,5,1,0, -0,0,7,2,0, -17,0,0,0,0, -0,0,3,0,0, -0,0,0,0,0, -0,0,29,2,0, -0,0,1,0,0, -0,1,5,2,0, -0,0,16,0,0, -0,0,0,0,0, -1,1,10,1,0, -0,0,3,0,0, -0,0,0,1,0, -0,0,12,2,0, -0,1,0,0,0, -0,0,0,1,0, -0,0,5,0,0, -0,0,0,1,0, -0,0,0,4,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,0,3,0, -0,0,14,1,0, -0,0,0,0,0, -0,0,5,2,0, -0,4,0,2,0, -0,0,0,2,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,13,0,0, -0,0,0,0,0, -0,0,11,0,0, -0,0,4,1,0, -0,1,0,0,0, -0,0,1,0,0, -0,0,11,0,0, -0,0,0,4,0, -0,0,0,0,0, -0,0,1,0,0, -0,0,28,1,0, -0,0,19,0,0, -0,0,0,2,0, -0,1,4,0,0, -0,0,45,1,0, -0,1,0,1,0, -0,1,0,1,0, -0,0,22,0,0, -0,0,24,0,0, -0,0,3,0,0, -0,0,7,0,0, -0,1,5,2,0, -0,0,0,11,0, -0,0,0,3,0, -0,0,0,4,0, -0,0,0,0,0, -0,0,3,2,0, -0,0,0,0,0, -0,0,4,2,0, -0,1,38,2,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,6,1,0, -0,0,0,1,0, -0,0,13,1,0, -0,0,0,2,0, -0,0,12,1,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,0,1,0, -0,0,16,0,0, -0,0,5,1,0, -0,0,1,2,0, -0,0,71,1,0, -0,0,0,5,0, -0,1,0,1,0, -0,0,1,0,0, -0,0,26,0,0, -0,0,0,0,0, -0,0,5,0,0, -0,0,20,0,0, -0,1,11,2,0, -0,0,15,0,0, -0,0,3,0,0, -0,0,1,1,0, -0,0,2,2,0, -0,0,0,2,0, -0,0,0,1,0, -0,1,18,0,0, -0,1,5,1,0, -0,0,5,0,0, -0,0,20,0,0, -0,0,6,1,0, -0,0,13,0,0, -0,0,32,0,0, -0,1,7,1,0, -0,2,0,2,0, -0,0,1,0,0, -11,0,2,0,0, -0,0,24,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,2,2,0, -0,0,5,0,0, -0,0,0,1,0, -0,0,15,1,0, -0,0,24,0,0, -0,0,1,2,0, -0,0,1,1,0, -0,0,12,0,0, -0,0,6,0,0, -0,0,0,0,0, -0,0,3,1,0, -0,0,0,1,0, -0,0,3,4,0, -0,0,0,0,0, -0,0,25,6,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,5,0,0, -0,0,19,3,0, -0,1,0,0,0, -0,0,0,1,0, -0,1,0,0,0, -0,0,0,0,0, -0,0,5,3,0, -0,0,13,2,0, -0,0,3,0,0, -0,0,16,1,0, -0,0,0,1,0, -0,0,16,0,0, -0,0,7,1,0, -0,1,0,0,0, -0,0,5,2,0, -0,0,25,0,0, -0,0,3,0,0, -0,0,3,0,0, -0,2,0,2,0, -0,2,0,2,0, -0,0,9,0,0, -0,0,0,2,0, -0,0,3,0,0, -0,0,16,0,0, -0,1,2,2,0, -0,1,0,0,0, -0,0,0,1,0, -0,0,3,4,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,14,0,0, -0,1,0,0,0, -0,0,3,0,0, -0,0,21,5,0, -0,0,0,0,0, -0,0,8,3,0, -0,0,0,5,0, -0,0,2,0,0, -0,0,12,0,0, -0,0,8,1,0, -0,0,21,0,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,0,2,0, -0,1,25,7,0, -0,0,17,0,0, -0,0,1,0,0, -0,0,11,0,0, -0,3,0,1,0, -0,1,15,1,0, -0,0,6,3,0, -0,0,22,2,0, -0,0,3,0,0, -0,0,3,0,0, -0,0,14,3,0, -0,0,2,2,0, -0,0,0,2,0, -0,0,19,0,0, -0,0,12,0,0, -0,0,0,1,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,1,1,0, -0,0,0,2,0, -0,0,5,0,0, -0,0,0,0,0, -0,4,33,2,1, -0,2,14,0,0, -0,0,1,0,0, -0,1,0,4,0, -0,0,0,2,0, -0,0,26,1,0, -0,1,7,1,0, -0,0,3,12,0, -0,3,6,4,0, -0,2,27,4,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,4,3,0, -0,0,3,0,0, -0,0,12,3,0, -0,0,0,10,0, -0,0,1,3,0, -0,0,25,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,15,0,0, -0,0,1,3,0, -0,0,2,0,0, -0,0,1,4,0, -0,0,14,3,0, -0,0,15,1,0, -0,0,4,0,0, -0,0,7,2,0, -0,0,0,0,0, -0,0,3,8,0, -0,0,16,1,0, -0,1,18,0,0, -0,0,2,0,0, -0,1,0,1,0, -0,1,0,0,0, -0,0,0,2,0, -0,0,8,0,0, -0,0,17,0,0, -5,0,0,0,0, -2,0,0,0,0, -0,0,8,1,0, -0,1,16,0,0, -0,0,5,0,0, -0,0,0,0,0, -0,0,17,0,0, -0,0,24,0,0, -0,1,1,1,0, -0,0,3,2,0, -0,0,11,0,0, -0,3,0,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,1,0,1,0, -0,0,13,0,0, -0,0,15,5,0, -5,0,0,1,0, -0,0,18,0,0, -0,0,13,0,0, -0,1,2,4,0, -0,0,13,1,0, -0,0,0,0,0, -0,0,13,0,0, -0,0,19,0,0, -0,0,11,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,16,0,0, -0,0,0,5,0, -0,1,9,0,0, -0,0,6,1,0, -0,0,16,2,0, -0,0,0,2,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,9,1,0, -0,0,2,0,0, -0,1,9,0,0, -0,0,17,0,0, -0,0,0,1,0, -0,0,45,0,0, -1,0,1,3,0, -0,0,0,1,0, -0,0,12,3,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,3,0,0, -0,0,0,0,0, -0,0,25,0,0, -0,0,38,0,0, -0,0,26,1,0, -0,0,0,0,0, -0,0,14,0,0, -0,0,13,1,0, -0,0,0,1,0, -0,0,9,0,0, -5,0,0,1,0, -0,0,20,0,0, -0,0,0,2,0, -0,0,14,0,0, -0,0,6,1,0, -0,1,6,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,4,0,2,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,2,2,0, -0,0,0,2,0, -0,0,0,3,0, -0,0,25,1,0, -0,0,0,1,0, -0,0,3,8,0, -0,0,4,0,0, -0,0,21,0,0, -0,0,2,3,0, -0,1,0,2,0, -0,0,8,1,0, -0,0,20,0,0, -0,0,0,0,0, -0,0,0,2,0, -0,1,23,1,0, -0,0,9,0,0, -0,0,0,2,0, -0,0,40,0,0, -0,0,7,2,0, -0,1,28,4,0, -0,0,42,0,0, -0,0,7,2,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,7,0,0, -0,0,17,0,0, -0,0,0,2,0, -0,0,0,0,0, -0,12,0,7,0, -0,0,6,1,0, -0,0,12,0,0, -0,0,20,0,3, -0,0,7,4,0, -0,0,24,0,0, -0,0,7,2,0, -0,0,13,0,0, -0,0,0,3,0, -0,0,0,1,0, -0,0,2,0,0, -0,0,8,2,0, -0,0,0,3,0, -0,0,3,1,0, -0,0,0,2,0, -0,0,2,4,0, -0,0,11,0,0, -0,0,1,1,0, -0,0,8,1,0, -0,0,0,1,0, -0,1,2,2,0, -0,0,16,2,0, -0,1,0,4,0, -0,0,8,0,0, -0,0,4,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,18,1,0, -0,0,0,0,0, -0,0,14,0,0, -0,0,10,0,0, -0,0,4,1,0, -0,1,0,1,0, -0,0,0,0,0, -0,0,11,0,0, -0,0,9,0,0, -0,0,15,0,0, -0,0,23,3,0, -0,0,3,0,0, -0,0,4,1,0, -0,0,0,1,0, -0,0,3,2,0, -0,0,2,1,0, -0,0,3,0,0, -0,0,0,1,0, -0,0,6,3,0, -0,0,0,1,0, -0,1,11,2,0, -0,2,0,0,0, -4,0,15,0,0, -0,0,0,3,0, -0,0,25,1,0, -0,1,5,0,0, -0,2,0,2,0, -0,0,1,0,0, -0,0,28,1,0, -0,0,0,4,0, -0,0,3,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,9,0,0, -1,0,18,0,0, -0,0,1,0,0, -0,0,6,1,0, -9,0,0,2,0, -0,0,5,2,0, -0,0,11,1,0, -0,0,41,0,0, -0,0,10,1,0, -0,1,0,0,0, -0,0,7,1,0, -0,0,0,12,0, -0,0,18,1,0, -0,0,17,2,0, -0,0,2,0,0, -0,0,1,3,0, -0,0,0,5,0, -0,0,0,0,0, -0,0,0,1,0, -1,0,4,0,0, -0,0,23,3,0, -0,0,0,2,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,0,2,0, -1,0,18,0,0, -0,0,14,1,0, -0,0,0,0,0, -0,0,9,1,0, -0,0,12,0,0, -0,0,14,0,0, -0,0,49,2,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,10,2,0, -0,0,0,1,0, -0,0,19,0,0, -0,0,0,1,0, -0,0,31,0,0, -0,0,6,1,0, -0,0,2,3,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,18,0,0, -0,0,2,0,0, -0,0,0,0,0, -0,0,5,1,0, -0,0,4,0,0, -0,0,13,3,0, -0,0,15,0,0, -0,0,25,6,0, -0,0,1,0,0, -0,0,0,5,0, -0,0,0,1,0, -0,0,22,6,0, -0,0,3,1,0, -0,0,71,1,0, -0,0,0,0,0, -0,0,10,0,0, -0,0,19,0,0, -18,0,5,1,0, -0,0,0,4,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,20,0,0, -0,0,4,1,0, -0,0,0,0,0, -0,1,10,5,0, -0,0,16,0,0, -0,0,0,1,0, -0,1,0,0,0, -0,0,0,1,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,9,2,0, -0,0,1,5,0, -0,0,2,2,0, -0,0,0,2,0, -0,2,6,0,0, -0,3,0,1,0, -0,0,0,2,0, -0,1,0,0,0, -0,0,15,1,0, -0,0,12,0,0, -0,0,0,0,0, -0,0,2,1,0, -0,0,5,0,0, -0,0,0,2,0, -0,0,11,0,0, -0,0,14,0,0, -0,1,0,0,0, -0,2,0,2,0, -0,0,0,0,0, -0,2,6,4,0, -0,0,42,0,0, -0,0,11,0,0, -0,0,9,0,0, -0,0,2,0,0, -0,0,0,8,0, -0,1,19,2,0, -0,0,3,1,0, -0,1,1,1,0, -0,0,14,1,0, -0,0,1,2,0, -0,0,9,0,0, -0,0,11,0,0, -0,0,1,1,0, -0,0,7,0,0, -0,2,0,2,0, -0,1,0,3,0, -0,0,18,1,0, -0,1,3,1,0, -1,0,3,1,0, -0,0,0,3,0, -0,0,11,0,0, -0,0,27,0,0, -0,0,0,0,0, -0,0,3,1,0, -0,0,17,0,0, -0,0,7,1,0, -0,0,26,1,0, -0,0,0,1,0, -0,0,16,0,0, -0,0,5,0,0, -0,0,9,0,0, -0,0,19,0,0, -0,0,0,0,0, -0,1,13,2,0, -0,0,6,1,0, -0,0,1,3,0, -0,0,0,1,0, -0,1,6,0,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,0,1,0, -0,1,15,3,0, -0,0,0,0,0, -0,0,17,0,0, -0,0,3,1,0, -0,0,9,1,0, -0,0,0,1,0, -0,0,5,2,0, -1,0,1,2,0, -0,0,10,1,0, -0,0,8,1,0, -0,0,3,1,0, -0,0,1,0,0, -0,0,0,3,0, -0,0,0,0,0, -0,0,3,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,29,1,0, -0,1,0,2,0, -0,1,0,0,0, -0,0,0,1,0, -0,0,3,4,0, -0,0,5,0,0, -17,0,0,0,0, -0,0,15,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,11,0,0, -0,0,5,1,0, -9,0,5,1,0, -0,1,5,0,0, -0,0,0,2,0, -0,1,28,1,0, -0,0,0,1,0, -0,0,0,2,0, -0,2,0,1,0, -0,0,12,0,0, -0,0,7,0,0, -0,0,0,0,0, -0,0,1,3,0, -0,0,1,1,0, -0,0,11,0,0, -0,0,3,0,0, -19,0,7,0,0, -0,0,38,0,0, -0,0,0,2,0, -0,3,23,4,46, -0,0,0,0,0, -0,2,0,2,0, -0,0,0,0,0, -0,0,0,12,0, -0,0,0,1,0, -0,0,0,1,0, -1,0,10,3,0, -0,0,0,0,0, -0,0,4,1,0, -0,0,11,3,6, -0,0,29,0,0, -0,0,5,2,0, -2,0,9,2,0, -0,0,0,0,0, -0,0,5,0,0, -0,0,10,2,0, -0,0,2,0,0, -0,0,0,8,0, -0,0,7,0,0, -0,0,11,0,0, -0,2,7,0,0, -0,0,1,1,0, -0,0,2,0,0, -0,2,25,1,0, -0,0,14,1,0, -0,2,0,2,0, -0,0,0,1,0, -0,2,0,2,0, -0,2,9,0,0, -0,0,0,1,0, -0,1,1,0,0, -0,0,4,1,0, -0,0,5,0,0, -0,0,0,1,0, -0,0,6,1,0, -0,0,0,0,0, -48,0,4,2,0, -0,0,0,0,0, -0,0,15,0,0, -0,0,0,0,0, -0,0,12,1,0, -0,0,25,0,0, -0,1,0,4,0, -0,0,0,0,0, -0,0,11,0,0, -0,0,0,2,0, -0,0,5,1,0, -0,0,0,10,0, -0,0,20,1,0, -0,0,21,1,0, -0,0,1,1,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,3,0,0, -0,0,0,1,0, -0,0,3,0,0, -0,4,1,1,0, -0,0,11,0,0, -0,0,0,0,0, -0,0,45,0,0, -0,0,0,0,0, -0,0,20,0,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,0,2,0, -0,0,8,3,0, -1,0,0,1,0, -0,0,8,0,0, -0,0,0,0,0, -0,1,9,0,0, -0,0,0,1,0, -0,0,40,1,0, -0,0,0,0,0, -0,0,25,0,0, -0,0,2,2,0, -0,0,0,0,0, -0,0,13,2,0, -0,1,11,0,0, -0,0,0,5,0, -0,0,1,1,0, -0,1,3,1,0, -0,0,14,1,0, -0,0,26,1,0, -0,0,7,0,0, -0,0,1,1,0, -0,1,2,3,0, -0,0,2,0,0, -0,0,0,1,0, -0,0,0,3,0, -0,0,0,2,0, -0,1,4,0,0, -0,0,0,2,0, -0,0,24,0,0, -0,0,0,0,0, -0,0,9,6,0, -0,0,0,1,0, -0,1,2,3,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,6,3,0, -0,0,0,1,0, -0,0,0,3,0, -0,0,15,1,0, -1,0,30,2,0, -0,0,18,2,0, -0,0,0,0,0, -0,0,28,2,0, -1,1,9,0,0, -0,1,0,0,0, -0,0,0,3,0, -0,0,0,3,0, -0,0,4,3,0, -0,0,0,2,0, -0,0,0,5,0, -0,0,28,2,0, -0,0,13,3,0, -0,0,25,1,0, -0,0,0,0,0, -0,0,4,2,0, -0,0,0,0,0, -0,3,9,2,0, -0,0,18,0,0, -0,0,16,2,0, -0,0,57,1,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,14,0,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,0,2,0, -0,0,10,0,0, -0,0,44,1,0, -0,0,0,1,0, -0,0,6,1,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,6,1,0, -0,0,0,0,0, -0,1,28,1,0, -0,0,9,1,0, -0,0,8,2,0, -0,0,19,0,0, -0,1,12,0,0, -0,0,0,1,0, -0,0,8,0,0, -0,0,7,1,0, -0,0,26,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,5,3,0, -0,0,1,0,0, -0,1,30,0,0, -0,0,11,0,0, -0,2,0,2,0, -0,0,0,0,0, -0,0,19,1,0, -0,0,6,1,0, -0,0,26,1,0, -0,1,0,0,0, -0,0,5,2,0, -0,0,0,1,0, -0,1,16,0,0, -0,0,0,1,0, -0,0,45,0,0, -0,0,0,1,0, -0,0,2,0,0, -0,3,0,2,0, -0,0,0,1,0, -0,0,4,1,0, -0,0,0,0,0, -0,0,25,1,0, -0,0,1,2,0, -0,0,0,7,0, -0,0,5,1,0, -0,0,45,0,0, -0,0,29,0,0, -0,0,1,0,0, -0,3,0,1,0, -0,0,12,1,0, -0,0,0,0,0, -0,0,2,0,0, -0,0,21,0,0, -0,2,0,0,0, -0,0,3,1,0, -0,1,7,1,0, -0,0,10,1,0, -0,1,9,0,0, -0,0,6,0,0, -0,0,0,3,0, -0,2,0,0,0, -0,0,4,1,0, -0,0,0,1,0, -0,0,1,0,0, -0,0,1,2,0, -0,0,4,1,0, -0,0,18,2,0, -0,2,20,7,0, -0,0,0,3,0, -0,0,0,0,0, -0,0,29,0,0, -0,0,7,0,0, -0,0,6,0,0, -0,0,8,3,0, -0,0,0,0,0, -0,0,13,2,0, -0,0,11,1,0, -0,0,0,1,0, -0,0,9,0,0, -0,0,3,3,0, -0,1,0,2,0, -1,0,9,1,0, -0,0,7,2,0, -0,1,9,1,0, -0,0,11,3,6, -0,2,0,1,0, -0,1,1,1,0, -0,0,39,0,0, -0,0,10,2,0, -0,0,6,1,0, -8,0,8,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,4,0,0, -0,0,0,10,0, -0,0,1,3,0, -0,1,14,1,0, -0,1,0,4,3, -0,0,19,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,5,0,0, -0,0,35,0,0, -0,0,24,0,0, -0,0,25,0,0, -0,0,5,4,0, -0,0,3,0,0, -0,0,0,1,0, -0,0,1,0,0, -0,0,0,2,0, -0,0,17,1,0, -0,2,0,2,0, -0,0,3,1,0, -0,0,0,3,0, -0,0,1,0,0, -0,0,1,1,0, -0,0,7,1,0, -0,0,4,2,0, -0,1,2,4,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,21,0,0, -0,0,8,1,0, -0,0,4,0,0, -0,0,12,0,0, -0,0,9,2,0, -0,0,0,0,0, -0,0,16,4,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,11,1,0, -0,0,5,0,0, -0,0,1,0,0, -0,0,29,4,0, -0,0,14,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,4,1,0, -0,1,3,0,0, -0,0,1,1,0, -2,0,9,2,0, -0,0,3,7,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,12,20,0, -0,0,5,1,0, -0,0,0,0,0, -0,0,0,2,0, -2,0,2,0,0, -0,0,1,1,0, -0,0,32,1,0, -0,0,0,4,0, -0,0,4,1,0, -0,0,12,0,0, -0,0,2,1,0, -0,0,0,0,0, -0,0,10,1,0, -0,0,0,2,0, -0,1,0,3,0, -0,0,15,0,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,10,0,0, -0,0,0,0,0, -15,0,7,0,0, -0,0,18,2,0, -0,0,0,3,0, -0,0,1,1,0, -0,0,18,2,0, -0,0,3,0,0, -0,0,20,0,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,3,0,0, -0,1,3,1,0, -0,0,13,1,0, -0,0,16,0,0, -0,1,28,0,0, -0,2,5,6,0, -0,0,0,0,0, -0,0,1,1,0, -0,1,0,0,0, -0,0,6,2,0, -0,0,0,0,0, -0,0,20,0,0, -0,0,2,0,0, -0,0,2,2,0, -0,0,1,3,0, -0,2,14,0,0, -0,0,3,0,0, -0,1,7,3,0, -0,1,2,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,26,3,0, -0,2,0,2,0, -0,0,35,0,0, -0,0,0,5,0, -0,0,3,1,0, -0,0,0,0,0, -0,0,9,1,0, -0,0,0,0,0, -0,0,0,12,0, -0,0,0,0,0, -0,0,10,0,0, -0,0,11,2,0, -0,0,1,3,0, -0,0,3,0,0, -0,0,5,2,0, -0,0,0,3,0, -0,0,12,4,0, -0,0,0,0,0, -0,0,7,1,0, -0,1,0,1,0, -0,0,0,4,0, -0,0,0,1,0, -0,0,19,1,0, -0,0,30,0,0, -0,0,21,0,0, -0,0,0,3,0, -0,0,11,2,0, -1,0,4,0,0, -0,0,13,0,0, -0,0,11,0,0, -0,0,0,1,0, -0,0,4,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,1,1,0, -0,0,6,1,0, -0,0,12,1,0, -0,0,8,4,0, -0,0,0,0,0, -0,0,15,0,0, -0,0,2,0,0, -0,0,0,4,0, -0,0,0,1,0, -0,0,0,3,0, -0,0,0,5,0, -0,0,0,0,0, -0,0,19,1,0, -0,0,6,3,0, -0,0,1,1,0, -0,1,11,4,0, -0,0,1,2,0, -0,0,3,0,0, -0,0,0,1,0, -0,0,3,1,0, -0,0,1,3,0, -0,0,6,0,0, -0,0,7,3,0, -0,0,0,4,0, -0,0,7,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,1,0,1,0, -0,1,33,3,0, -0,3,8,1,0, -0,0,0,1,0, -0,0,16,0,0, -0,0,5,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,1,1,2,0, -0,0,0,0,0, -0,0,27,2,0, -1,1,9,0,0, -0,1,3,0,0, -0,0,1,0,0, -3,0,8,2,0, -0,0,28,2,0, -0,0,7,1,0, -0,0,0,1,0, -0,0,1,0,0, -0,0,1,2,0, -0,0,14,0,0, -0,0,0,3,0, -0,0,11,0,0, -0,0,4,2,0, -71,0,11,0,0, -0,0,0,1,0, -0,0,1,1,0, -0,0,0,3,0, -0,0,1,0,0, -0,1,0,3,0, -0,1,16,2,0, -0,0,4,1,0, -0,0,7,0,0, -0,0,27,0,0, -0,0,13,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,2,2,0, -32,0,1,1,0, -1,0,10,3,0, -0,1,5,1,0, -0,0,0,0,0, -0,2,4,1,0, -0,0,8,1,0, -0,0,11,1,0, -0,0,0,0,0, -0,0,21,1,0, -0,0,1,0,0, -0,0,4,0,0, -0,0,0,0,0, -0,0,8,0,0, -0,0,0,0,0, -0,0,1,0,0, -0,1,15,6,0, -0,0,25,6,0, -0,0,16,1,0, -0,0,1,0,0, -0,0,5,7,0, -0,0,0,0,0, -0,0,0,1,0, -0,1,18,3,0, -0,0,1,0,0, -1,0,10,3,0, -0,0,29,0,0, -0,0,0,0,0, -0,0,10,0,0, -0,0,9,3,0, -0,0,1,0,0, -0,0,5,3,0, -0,0,0,1,0, -0,0,6,2,0, -0,0,2,0,0, -0,0,0,3,0, -0,0,16,4,0, -0,0,14,0,0, -0,0,0,0,0, -0,0,23,1,0, -0,0,0,0,0, -0,0,1,1,0, -0,0,0,10,0, -0,0,0,2,0, -0,0,9,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,17,1,0, -0,0,9,2,0, -0,0,0,0,0, -0,0,1,1,0, -0,0,1,1,0, -0,0,7,3,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,1,1,0, -0,1,5,2,0, -0,0,1,5,0, -0,1,2,0,0, -0,0,21,0,0, -1,0,11,1,0, -0,0,2,0,0, -0,4,0,2,0, -0,0,0,0,0, -0,0,12,4,0, -0,0,2,0,0, -0,1,19,1,0, -0,3,0,1,0, -0,2,25,5,0, -27,0,19,0,0, -0,0,29,0,0, -0,0,0,0,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,13,3,0, -0,0,9,4,0, -5,0,15,1,0, -0,0,14,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -2,0,4,1,0, -0,0,15,0,0, -0,0,0,2,0, -0,0,0,1,0, -0,2,0,10,0, -0,0,4,1,0, -15,0,7,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,7,2,0, -0,0,0,1,0, -0,0,7,0,0, -0,0,6,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,19,1,0, -0,4,33,2,1, -0,0,0,0,0, -0,0,10,1,0, -0,0,2,1,0, -0,1,4,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,7,0,0, -0,0,0,0,0, -0,0,3,1,0, -0,0,1,4,0, -0,0,0,1,0, -0,1,11,0,0, -0,0,0,1,0, -0,0,3,1,0, -0,0,0,1,0, -0,0,7,1,0, -0,0,4,0,0, -0,0,12,0,0, -0,0,24,0,0, -0,0,4,1,0, -0,0,5,0,0, -0,0,9,0,0, -1,0,8,1,0, -0,0,6,2,0, -0,2,9,1,0, -0,0,7,1,0, -0,0,13,1,0, -0,0,3,2,0, -0,0,20,1,0, -1,0,0,0,0, -0,0,15,0,0, -1,0,8,1,0, -0,0,2,1,0, -4,0,2,2,0, -0,1,2,2,0, -0,0,0,0,0, -0,0,15,0,0, -0,1,15,0,0, -0,2,7,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,4,0,0, -0,0,0,0,0, -0,0,4,1,0, -0,0,0,1,0, -0,0,16,0,0, -0,0,0,0,0, -0,0,0,1,0, -5,0,0,0,0, -0,2,0,10,0, -0,0,0,0,0, -0,0,0,0,0, -0,2,4,1,0, -0,1,5,0,0, -0,0,6,2,0, -0,0,0,0,0, -1,0,1,3,0, -0,0,0,2,0, -0,0,11,1,0, -0,0,6,0,0, -0,0,45,2,0, -0,2,6,0,0, -0,0,0,0,0, -0,0,0,2,0, -0,2,4,1,0, -0,0,0,2,0, -0,0,0,2,0, -0,0,43,1,0, -0,0,0,3,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,14,0,0, -0,1,0,1,0, -0,0,5,0,0, -0,0,14,0,0, -0,0,9,1,0, -0,0,0,0,0, -0,0,4,0,0, -0,0,0,1,0, -0,3,6,4,0, -0,0,13,0,0, -5,0,3,1,0, -0,0,0,0,0, -0,0,0,2,2, -0,1,5,2,0, -0,0,0,4,0, -0,0,1,0,0, -0,0,4,0,0, -0,0,0,0,0, -0,0,9,1,0, -0,0,1,6,0, -9,0,0,2,0, -0,1,14,3,0, -0,0,8,1,0, -24,0,2,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,9,0,0, -0,0,12,2,0, -1,0,0,2,0, -0,0,1,0,0, -0,0,7,1,0, -0,0,20,0,3, -0,0,3,1,0, -0,0,49,3,0, -0,0,2,0,0, -0,0,18,0,0, -0,0,2,0,0, -0,0,5,4,0, -0,0,23,0,0, -0,0,0,0,0, -0,0,1,1,0, -0,0,7,2,0, -0,0,0,0,0, -0,1,18,0,0, -0,0,6,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,1,0,1,0, -0,0,0,1,0, -0,1,1,1,0, -0,0,1,0,0, -0,1,7,3,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,6,0,0, -0,0,5,0,0, -0,0,4,1,0, -0,0,0,0,0, -0,0,5,2,0, -0,0,0,4,0, -0,0,41,0,0, -0,0,0,0,0, -0,0,3,0,0, -0,0,0,3,0, -0,1,8,0,0, -0,0,4,4,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,3,1,0, -0,0,20,0,0, -0,0,5,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,2,0,0, -0,0,24,0,0, -0,0,1,0,0, -0,0,5,1,0, -0,2,14,0,0, -0,0,39,0,0, -0,0,2,2,0, -0,0,2,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,10,2,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,1,1,0, -0,1,0,2,0, -0,0,0,1,0, -0,0,3,1,0, -0,0,6,0,0, -0,0,10,0,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,11,4,0, -0,0,0,0,0, -0,2,20,7,0, -0,0,4,4,0, -0,3,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,1,24,0, -0,0,0,3,0, -0,2,11,2,0, -0,0,16,4,0, -0,0,20,8,0, -0,0,0,0,0, -0,1,3,0,0, -0,0,14,71,0, -0,5,0,4,0, -0,0,0,3,0, -0,0,0,1,0, -0,0,3,3,0, -0,0,0,0,0, -0,0,0,0,0, -0,1,0,0,0, -0,0,5,0,0, -0,0,1,0,0, -0,0,15,0,0, -0,0,0,5,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,4,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,4,1,0, -0,1,11,0,0, -0,0,14,1,0, -0,0,0,0,0, -0,0,4,0,0, -0,1,0,1,0, -0,0,0,0,0, -0,0,0,2,0, -0,1,0,3,0, -0,0,0,0,0, -0,0,0,1,0, -0,1,1,1,0, -0,0,0,0,0, -0,0,2,0,0, -0,0,0,0,0, -0,0,1,1,0, -0,0,8,0,0, -0,0,26,0,0, -0,0,0,2,0, -1,0,8,1,0, -0,0,0,2,0, -0,0,9,2,0, -0,1,5,1,0, -0,0,24,0,0, -0,0,27,2,0, -0,0,0,2,0, -0,3,9,2,0, -0,0,0,1,0, -0,3,0,2,0, -0,0,20,1,0, -0,0,0,1,71, -0,0,1,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,5,0,0, -0,0,0,0,0, -0,0,7,4,0, -0,0,0,0,0, -0,0,1,0,0, -0,0,30,5,0, -5,0,15,1,0, -0,0,7,0,0, -0,1,4,0,0, -0,0,28,2,0, -0,1,16,2,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,5,1,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,20,0,3, -0,1,0,0,0, -0,0,7,1,0, -0,0,17,0,0, -19,0,7,0,0, -0,0,0,1,0, -0,0,13,2,0, -0,2,1,1,0, -0,0,3,0,0, -0,0,15,0,0, -0,0,18,0,0, -0,2,0,10,0, -0,1,0,0,0, -0,0,14,1,0, -0,0,20,8,0, -0,2,20,7,0, -1,0,11,1,0, -0,1,0,0,0, -0,0,2,0,0, -0,0,0,1,0, -0,0,9,0,0, -0,0,0,1,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,16,0,0, -0,1,4,2,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,39,0,0, -0,0,1,1,0, -0,1,0,0,0, -0,0,0,5,0, -0,0,19,1,0, -0,0,3,12,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,19,0,0, -0,0,11,1,0, -0,0,0,0,0, -0,0,9,1,0, -0,0,14,0,0, -0,0,1,2,0, -0,0,5,0,0, -0,0,3,1,0, -0,0,7,1,0, -0,0,0,3,0, -0,0,26,1,0, -0,0,0,0,0, -0,0,0,3,0, -0,1,10,1,0, -0,0,1,0,0, -0,0,9,2,0, -0,0,3,0,0, -0,0,0,0,0, -0,0,29,4,0, -1,0,10,2,0, -0,0,3,1,0, -0,0,0,2,0, -0,0,10,2,0, -0,0,8,1,0, -0,0,0,0,0, -0,0,20,0,0, -0,0,13,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,4,2,0, -0,0,4,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,6,1,0, -0,0,0,1,0, -0,0,23,0,0, -0,1,8,1,0, -0,0,0,2,0, -1,0,3,1,0, -0,0,6,1,0, -0,0,13,0,0, -0,0,31,2,0, -0,0,8,1,0, -0,0,0,1,0, -0,0,0,4,0, -0,1,4,0,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,2,0,0, -0,0,0,1,0, -0,0,6,2,0, -0,0,8,3,0, -0,0,0,5,0, -0,0,0,0,0, -0,0,14,0,0, -0,0,0,0,0, -5,0,0,0,0, -0,0,0,1,0, -0,0,6,1,0, -0,0,7,2,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,3,1,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,1,0,0, -0,0,12,0,0, -0,0,7,3,0, -0,0,0,1,0, -0,0,0,0,6, -0,0,15,0,0, -0,0,1,1,0, -0,0,0,0,0, -0,0,20,1,0, -0,0,1,2,0, -0,0,28,1,0, -0,2,14,0,0, -0,0,0,0,0, -0,0,23,1,0, -0,0,3,1,0, -0,0,8,0,0, -0,0,11,3,0, -0,0,3,0,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,2,0,0, -0,1,4,0,0, -0,0,0,2,0, -0,0,7,2,0, -0,0,12,1,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,28,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,1,0,3,0, -0,0,11,0,0, -0,0,2,2,0, -0,0,4,0,0, -0,1,0,1,0, -0,0,0,0,0, -0,0,10,0,0, -0,0,0,0,0, -0,1,9,1,0, -0,0,13,1,0, -0,0,3,0,0, -0,0,14,1,0, -0,0,9,1,0, -0,0,9,0,0, -0,0,11,1,0, -0,0,45,0,0, -0,0,1,0,0, -0,0,10,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,0,1,0, -0,0,9,0,0, -0,0,8,0,0, -0,0,2,0,0, -0,0,0,1,0, -0,0,40,0,0, -0,1,28,4,0, -0,0,11,0,0, -0,1,7,1,0, -0,0,15,1,0, -0,1,0,3,0, -5,0,3,1,0, -0,0,4,0,0, -0,0,0,1,0, -0,0,22,0,0, -0,1,0,0,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,8,0,0, -0,0,2,0,0, -0,1,2,2,0, -0,0,2,0,0, -0,0,1,2,0, -0,0,3,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,10,0,0, -0,0,0,0,0, -0,0,0,3,0, -0,0,0,1,0, -0,0,0,3,0, -0,1,11,0,0, -0,0,23,3,0, -0,0,8,0,0, -0,0,0,1,0, -0,0,1,0,0, -0,0,11,1,0, -0,0,4,3,0, -0,0,5,1,0, -0,0,0,3,0, -0,0,0,1,0, -0,0,9,4,0, -0,0,6,2,0, -0,0,24,0,0, -0,1,0,0,0, -0,0,28,0,0, -0,0,3,0,0, -0,0,2,0,0, -0,0,20,0,0, -0,0,10,0,0, -0,3,12,0,0, -0,0,21,1,0, -0,0,6,1,0, -0,0,48,1,0, -0,0,4,1,0, -0,0,0,0,0, -0,0,1,6,0, -0,0,0,1,0, -0,0,3,2,0, -0,0,11,1,0, -0,0,5,2,0, -0,0,10,0,0, -0,0,0,0,0, -0,0,49,2,0, -0,0,28,2,0, -0,0,4,4,0, -0,0,10,0,0, -0,0,6,1,0, -0,0,0,0,0, -0,0,38,0,0, -0,1,8,1,0, -0,0,5,0,0, -0,0,1,0,0, -0,0,8,0,0, -0,0,3,1,0, -0,0,1,0,0, -0,0,2,2,0, -0,0,28,2,0, -0,0,10,0,0, -0,0,18,2,0, -0,0,6,4,0, -0,0,10,0,0, -0,0,0,1,0, -0,0,4,2,0, -0,0,3,1,0, -0,0,5,1,0, -0,0,11,4,0, -0,0,9,0,0, -0,0,9,0,0, -0,0,0,2,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,0,0,0, -18,0,5,1,0, -0,0,11,1,0, -0,0,2,0,0, -0,0,12,4,0, -0,0,4,3,0, -0,0,0,12,0, -0,0,0,1,0, -0,0,7,2,0, -0,0,0,0,0, -0,0,5,0,0, -0,0,31,2,0, -0,0,12,0,0, -0,0,0,0,0, -0,0,12,0,2, -0,0,10,2,0, -0,1,0,0,0, -0,0,8,3,0, -0,0,32,0,0, -0,2,5,6,0, -0,3,12,0,0, -0,0,0,3,0, -0,0,3,0,0, -0,0,3,7,0, -0,0,0,1,0, -0,0,4,4,0, -0,0,8,5,0, -0,0,5,0,0, -0,0,0,1,0, -0,1,22,0,0, -0,0,0,1,0, -0,0,15,0,0, -0,0,5,0,0, -1,0,0,2,0, -0,0,9,0,0, -0,0,0,2,0, -0,0,20,0,0, -6,0,2,2,0, -0,0,0,0,0, -0,0,5,10,0, -0,0,3,0,0, -0,0,0,2,0, -5,0,0,1,0, -0,1,0,2,0, -0,0,11,1,0, -0,1,2,1,0, -0,0,5,4,0, -0,0,0,1,0, -0,0,24,0,0, -0,0,10,2,0, -0,0,0,0,0, -0,0,4,0,0, -0,0,6,1,0, -0,0,14,1,0, -0,0,8,1,0, -0,0,0,2,0, -0,1,22,0,0, -0,0,7,1,0, -0,0,11,0,0, -0,0,6,0,0, -0,0,1,2,0, -0,1,14,1,0, -0,0,7,0,0, -0,1,8,0,0, -0,0,16,0,0, -0,0,3,2,0, -0,2,5,6,0, -0,0,13,0,0, -0,0,0,1,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,8,0,0, -0,0,0,1,0, -0,0,2,0,0, -0,0,5,0,0, -0,0,9,1,0, -0,0,23,0,0, -0,0,11,0,0, -0,0,1,3,0, -0,0,0,2,0, -0,0,1,0,0, -0,0,0,0,0, -0,0,0,1,0, -0,0,3,0,0, -0,1,4,0,0, -0,0,0,0,0, -0,0,6,2,0, -0,0,0,0,0, -0,0,7,2,0, -0,0,0,1,0, -0,2,25,1,0, -0,0,44,1,0, -0,0,4,3,0, -0,0,26,1,0, -0,0,14,0,0, -0,0,11,1,0, -0,0,14,0,0, -0,0,13,6,0, -0,0,21,0,0, -0,0,0,1,0, -1,0,10,3,0, -0,0,0,0,0, -0,0,19,0,0, -0,0,12,0,0, -0,1,15,0,0, -27,0,19,0,0, -0,0,0,1,0, -5,0,0,0,0, -0,0,1,1,0, -0,0,8,0,0, -0,3,6,4,0, -0,0,2,0,0, -0,1,18,0,0, -0,0,1,0,0, -0,0,0,3,0, -0,0,0,2,0, -0,0,5,2,0, -0,0,7,0,0, -0,0,0,8,0, -0,0,0,0,0, -0,0,24,1,0, -0,0,44,1,0, -0,0,25,1,0, -0,0,3,0,0, -0,0,0,0,0, -0,1,0,0,0, -0,0,0,0,0, -0,0,0,0,0, -0,0,0,2,0, -0,0,9,1,0, -0,0,0,2,0, -0,0,0,2,0, -0,0,6,2,0, -0,0,5,9,0, -0,0,19,0,0, -0,1,0,0,0, -0,0,0,1,0, -0,0,2,0,0, -0,0,12,2,0, -0,0,0,0,0, -0,0,0,0,0}; - -std::array ref_data = { --2.462783453866639771e+00 / ln2, --7.789351191264211494e+00 / ln2, --4.691538586043964010e+00 / ln2, --6.763732050866829049e+00 / ln2, --4.049563242290908249e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.691538586043964010e+00 / ln2, --4.160925916687072679e+00 / ln2, --1.095979992273871417e+01 / ln2, --5.861249608063488381e+00 / ln2, --6.885183121012873109e+00 / ln2, --7.184300953920424782e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.210947893307020351e+00 / ln2, --7.048892879291960512e+00 / ln2, --3.296199802569410142e+00 / ln2, --1.061406875134344041e+01 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.754337034915018023e+00 / ln2, --5.798856991358857016e+00 / ln2, --3.631360480608693209e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.511251163267971265e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.871019786565007337e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.909176526836401599e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.674700103110665417e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.278597058620684734e+00 / ln2, --5.617458030859222795e+00 / ln2, --7.223375476872481826e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.670124616416384100e+00 / ln2, --6.425466655005584116e+00 / ln2, --7.959852224170357538e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.674700103110665417e+00 / ln2, --7.223375476872481826e+00 / ln2, --5.284098860888144067e+00 / ln2, --4.642897843502046484e+00 / ln2, --4.091764045676016259e+00 / ln2, --8.098608047708514945e+00 / ln2, --4.424715454340284460e+00 / ln2, --3.949349394517413181e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.754337034915018023e+00 / ln2, --5.949336081541920507e+00 / ln2, --6.215435559384440367e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.017498482476998589e+00 / ln2, --5.553599664845023653e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --4.604168121450740614e+00 / ln2, --5.332499360388146314e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.576662416349575935e+00 / ln2, --5.284098860888144067e+00 / ln2, --7.766312407968571918e+00 / ln2, --5.332499360388146314e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.177102904471855283e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --7.021711310391386185e+00 / ln2, --7.711929296494973940e+00 / ln2, --1.278432279724004239e+01 / ln2, --1.105715580744062621e+01 / ln2, --6.694546051260094721e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.017498482476998589e+00 / ln2, --5.871019786565007337e+00 / ln2, --4.562852777492357070e+00 / ln2, --4.498412758302154479e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.152879364568431875e+00 / ln2, --7.048892879291960512e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.789351191264211494e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.691538586043964010e+00 / ln2, --6.017498482476998589e+00 / ln2, --4.754337034915018023e+00 / ln2, --5.617458030859222795e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.021711310391386185e+00 / ln2, --4.883577810848264811e+00 / ln2, --4.576662416349575935e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.498412758302154479e+00 / ln2, --3.949349394517413181e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.223992983953650970e+00 / ln2, --9.230539968036323373e+00 / ln2, --4.498412758302154479e+00 / ln2, --8.417223922976480921e+00 / ln2, --8.746627133441950974e+00 / ln2, --9.484310506563019771e+00 / ln2, --4.160925916687072679e+00 / ln2, --5.949336081541920507e+00 / ln2, --6.017498482476998589e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --1.194242396538278683e+01 / ln2, --4.841396924932839241e+00 / ln2, --9.662729593866675515e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.893167479319754598e+00 / ln2, --9.121101243974623074e+00 / ln2, --6.971660331060701488e+00 / ln2, --6.017498482476998589e+00 / ln2, --6.812113812154088954e+00 / ln2, --4.576662416349575935e+00 / ln2, --6.909735959825669127e+00 / ln2, --7.766312407968571918e+00 / ln2, --4.091764045676016259e+00 / ln2, --1.039337502338793939e+01 / ln2, --2.462783453866639771e+00 / ln2, --4.893167479319754598e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.758886612591042287e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.278432279724004239e+01 / ln2, --9.370236207688265040e+00 / ln2, --4.691538586043964010e+00 / ln2, --4.562852777492357070e+00 / ln2, --5.025989230275349939e+00 / ln2, --7.021711310391386185e+00 / ln2, --6.584033785323046395e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.919649166968065757e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.971660331060701488e+00 / ln2, --4.754337034915018023e+00 / ln2, --5.025989230275349939e+00 / ln2, --6.812113812154088954e+00 / ln2, --4.754337034915018023e+00 / ln2, --1.204137922631861990e+01 / ln2, --4.424715454340284460e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.867084829257056988e+00 / ln2, --7.413281563246960637e+00 / ln2, --6.352896081343149426e+00 / ln2, --6.121057297107224571e+00 / ln2, --4.691538586043964010e+00 / ln2, --5.621647006643879507e+00 / ln2, --9.069538553398722058e+00 / ln2, --2.462783453866639771e+00 / ln2, --8.598045803528568953e+00 / ln2, --5.754707819725457085e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.284098860888144067e+00 / ln2, --6.017498482476998589e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.210947893307020351e+00 / ln2, --7.766312407968571918e+00 / ln2, --6.006187732178176475e+00 / ln2, --6.017498482476998589e+00 / ln2, --4.498412758302154479e+00 / ln2, --4.576662416349575935e+00 / ln2, --3.949349394517413181e+00 / ln2, --4.893167479319754598e+00 / ln2, --5.332499360388146314e+00 / ln2, --7.742568993938474087e+00 / ln2, --5.949336081541920507e+00 / ln2, --9.615348029313974365e+00 / ln2, --9.583781920109638364e+00 / ln2, --4.883577810848264811e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.091764045676016259e+00 / ln2, --3.949349394517413181e+00 / ln2, --7.267062386635592119e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.841396924932839241e+00 / ln2, --8.098608047708514945e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.754707819725457085e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.691538586043964010e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.861249608063488381e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.605315052977417167e+00 / ln2, --6.584033785323046395e+00 / ln2, --6.017498482476998589e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.691538586043964010e+00 / ln2, --1.264380688290192367e+01 / ln2, --9.785577344871311922e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.641510812793480767e+00 / ln2, --6.006187732178176475e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.621647006643879507e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.424166483534085259e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.893167479319754598e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.674700103110665417e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.498412758302154479e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.406237793012392601e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.160925916687072679e+00 / ln2, --1.925486712770660702e+01 / ln2, --8.350828230729891999e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.893167479319754598e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.648035504600203538e+00 / ln2, --1.101578299844018893e+01 / ln2, --8.350828230729891999e+00 / ln2, --9.294588429854087508e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.512580640245118957e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.017498482476998589e+00 / ln2, --5.025989230275349939e+00 / ln2, --6.223992983953650970e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.998325418845404933e+00 / ln2, --9.257233588034425864e+00 / ln2, --5.536137450497251145e+00 / ln2, --9.563168690224490120e+00 / ln2, --6.006187732178176475e+00 / ln2, --7.934968049655386935e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.636130365971254719e+00 / ln2, --8.951382076635610474e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.498412758302154479e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.195119186325862337e+00 / ln2, --1.168986496391243612e+01 / ln2, --7.048892879291960512e+00 / ln2, --3.949349394517413181e+00 / ln2, --6.007365244407383287e+00 / ln2, --9.883349451013705433e+00 / ln2, --4.143181862813722027e+00 / ln2, --6.425466655005584116e+00 / ln2, --6.425466655005584116e+00 / ln2, --8.884045802498089728e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.919649166968065757e+00 / ln2, --4.498412758302154479e+00 / ln2, --5.195119186325862337e+00 / ln2, --8.777444697110189153e+00 / ln2, --6.049433957816686913e+00 / ln2, --1.061406875134344041e+01 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --6.694546051260094721e+00 / ln2, --5.193805121009943626e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.511251163267971265e+00 / ln2, --4.841396924932839241e+00 / ln2, --4.424715454340284460e+00 / ln2, --7.865295069725402044e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.947297936873974677e+00 / ln2, --4.143181862813722027e+00 / ln2, --8.245710019274113733e+00 / ln2, --7.021711310391386185e+00 / ln2, --9.442907637099850149e+00 / ln2, --5.193805121009943626e+00 / ln2, --4.562852777492357070e+00 / ln2, --5.025989230275349939e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.049563242290908249e+00 / ln2, --7.447790001659071457e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --9.224702791393450951e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.871019786565007337e+00 / ln2, --1.145387772643075230e+01 / ln2, --4.091764045676016259e+00 / ln2, --8.071909107879246648e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.231247566439284569e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.841396924932839241e+00 / ln2, --8.951382076635610474e+00 / ln2, --5.536137450497251145e+00 / ln2, --3.949349394517413181e+00 / ln2, --3.949349394517413181e+00 / ln2, --5.798856991358857016e+00 / ln2, --4.091764045676016259e+00 / ln2, --6.223992983953650970e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.105715580744062621e+01 / ln2, --7.161725488083725111e+00 / ln2, --4.160925916687072679e+00 / ln2, --9.069538553398722058e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.483355190078385455e+00 / ln2, --5.284098860888144067e+00 / ln2, --6.909735959825669127e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.754337034915018023e+00 / ln2, --4.562852777492357070e+00 / ln2, --6.909735959825669127e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.691538586043964010e+00 / ln2, --4.893167479319754598e+00 / ln2, --4.841396924932839241e+00 / ln2, --9.883349451013705433e+00 / ln2, --6.017498482476998589e+00 / ln2, --5.861249608063488381e+00 / ln2, --6.286368968884687547e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.345707246405288160e+00 / ln2, --5.284098860888144067e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.685674146241039395e+00 / ln2, --5.284098860888144067e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.907309388480081580e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.511251163267971265e+00 / ln2, --9.172628873852490372e+00 / ln2, --4.604168121450740614e+00 / ln2, --5.674889513884615155e+00 / ln2, --5.959821016291367179e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.442907637099850149e+00 / ln2, --5.754707819725457085e+00 / ln2, --4.691538586043964010e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.949336081541920507e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.498412758302154479e+00 / ln2, --5.284098860888144067e+00 / ln2, --4.841396924932839241e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.160925916687072679e+00 / ln2, --8.537479860740265991e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.909735959825669127e+00 / ln2, --9.779642293724309710e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.177102904471855283e+00 / ln2, --5.177102904471855283e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.332499360388146314e+00 / ln2, --3.949349394517413181e+00 / ln2, --1.278432279724004239e+01 / ln2, --5.685674146241039395e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.734695089071365715e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.091764045676016259e+00 / ln2, --8.847574884292626507e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.807386367050035858e+00 / ln2, --1.359735121802292568e+01 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.883577810848264811e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.604168121450740614e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --8.537479860740265991e+00 / ln2, --3.296199802569410142e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.025011173880692184e+01 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.642897843502046484e+00 / ln2, --1.098983619591661487e+01 / ln2, --1.125542566348871354e+01 / ln2, --2.046324443145273619e+00 / ln2, --5.284098860888144067e+00 / ln2, --3.631360480608693209e+00 / ln2, --1.130525701277283801e+01 / ln2, --5.861249608063488381e+00 / ln2, --4.576662416349575935e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.025989230275349939e+00 / ln2, --6.017498482476998589e+00 / ln2, --7.210947893307020351e+00 / ln2, --4.883577810848264811e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.766312407968571918e+00 / ln2, --4.754337034915018023e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.007365244407383287e+00 / ln2, --4.511251163267971265e+00 / ln2, --4.511251163267971265e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.841396924932839241e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.512580640245118957e+00 / ln2, --8.022806380334262855e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.424715454340284460e+00 / ln2, --9.370236207688265040e+00 / ln2, --9.294209431283057654e+00 / ln2, --5.617458030859222795e+00 / ln2, --1.070585939587089008e+01 / ln2, --9.670124616416384100e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.617458030859222795e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.057958593457523300e+00 / ln2, --3.949349394517413181e+00 / ln2, --4.498412758302154479e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.871019786565007337e+00 / ln2, --3.949349394517413181e+00 / ln2, --5.617458030859222795e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.048892879291960512e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.370236207688265040e+00 / ln2, --5.193805121009943626e+00 / ln2, --6.121057297107224571e+00 / ln2, --4.143181862813722027e+00 / ln2, --6.007365244407383287e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.044570027672111756e+01 / ln2, --6.352896081343149426e+00 / ln2, --5.345707246405288160e+00 / ln2, --4.160925916687072679e+00 / ln2, --5.397372105698754474e+00 / ln2, --5.025989230275349939e+00 / ln2, --6.425466655005584116e+00 / ln2, --1.094874312386789583e+01 / ln2, --3.296199802569410142e+00 / ln2, --8.807386367050035858e+00 / ln2, --5.542219003269678979e+00 / ln2, --6.458537022627602653e+00 / ln2, --4.576662416349575935e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --6.215435559384440367e+00 / ln2, --1.268608111131628036e+01 / ln2, --3.631360480608693209e+00 / ln2, --1.087984978545612869e+01 / ln2, --2.046324443145273619e+00 / ln2, --9.069538553398722058e+00 / ln2, --9.760673288736205322e+00 / ln2, --5.193805121009943626e+00 / ln2, --1.002033673403993674e+01 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.537479860740265991e+00 / ln2, --4.691538586043964010e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.184300953920424782e+00 / ln2, --5.345707246405288160e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.160925916687072679e+00 / ln2, --5.113891938530826131e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --3.631360480608693209e+00 / ln2, --9.648035504600203538e+00 / ln2, --4.160925916687072679e+00 / ln2, --5.345707246405288160e+00 / ln2, --5.621647006643879507e+00 / ln2, --4.883577810848264811e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.604168121450740614e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.949336081541920507e+00 / ln2, --3.631360480608693209e+00 / ln2, --7.517325864764372589e+00 / ln2, --5.193805121009943626e+00 / ln2, --5.871019786565007337e+00 / ln2, --7.327920672174300876e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.685674146241039395e+00 / ln2, --3.949349394517413181e+00 / ln2, --7.699896352130231492e+00 / ln2, --3.949349394517413181e+00 / ln2, --7.210947893307020351e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.425466655005584116e+00 / ln2, --1.087984978545612869e+01 / ln2, --1.194242396538278683e+01 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.017498482476998589e+00 / ln2, --7.267062386635592119e+00 / ln2, --6.327963919515099178e+00 / ln2, --3.949349394517413181e+00 / ln2, --8.951382076635610474e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.636130365971254719e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.754337034915018023e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.113891938530826131e+00 / ln2, --4.883577810848264811e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.642897843502046484e+00 / ln2, --4.998325418845404933e+00 / ln2, --5.861249608063488381e+00 / ln2, --5.193805121009943626e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --5.621647006643879507e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.536137450497251145e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.017498482476998589e+00 / ln2, --4.604168121450740614e+00 / ln2, --7.290844047540147699e+00 / ln2, --3.296199802569410142e+00 / ln2, --8.884045802498089728e+00 / ln2, --4.498412758302154479e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.883577810848264811e+00 / ln2, --5.415204418624045779e+00 / ln2, --1.021438454248509764e+01 / ln2, --5.332499360388146314e+00 / ln2, --4.642897843502046484e+00 / ln2, --4.511251163267971265e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.290844047540147699e+00 / ln2, --5.113891938530826131e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.754337034915018023e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.049563242290908249e+00 / ln2, --7.290844047540147699e+00 / ln2, --1.083865141940506760e+01 / ln2, --7.327920672174300876e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.286368968884687547e+00 / ln2, --6.674700103110665417e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.584033785323046395e+00 / ln2, --1.050516998695719195e+01 / ln2, --6.498914935067912069e+00 / ln2, --8.859835387901323855e+00 / ln2, --6.532634035752141521e+00 / ln2, --7.124880459954479939e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.517562281884773157e+00 / ln2, --1.123286076255336674e+01 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.119927210762653225e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.498412758302154479e+00 / ln2, --6.017498482476998589e+00 / ln2, --5.193805121009943626e+00 / ln2, --7.868991888563591885e+00 / ln2, --5.959821016291367179e+00 / ln2, --5.542219003269678979e+00 / ln2, --6.694546051260094721e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.286368968884687547e+00 / ln2, --5.193805121009943626e+00 / ln2, --6.152879364568431875e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.536137450497251145e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.069538553398722058e+00 / ln2, --9.852642968671261769e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.181145976660216590e+00 / ln2, --4.576662416349575935e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.511251163267971265e+00 / ln2, --5.332499360388146314e+00 / ln2, --8.657273747556139654e+00 / ln2, --1.019261621630061398e+01 / ln2, --5.397372105698754474e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.049563242290908249e+00 / ln2, --6.763732050866829049e+00 / ln2, --4.998325418845404933e+00 / ln2, --5.025989230275349939e+00 / ln2, --1.031514943090967940e+01 / ln2, --4.604168121450740614e+00 / ln2, --6.286368968884687547e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.754337034915018023e+00 / ln2, --5.617458030859222795e+00 / ln2, --5.861249608063488381e+00 / ln2, --5.177102904471855283e+00 / ln2, --7.503680464488466484e+00 / ln2, --6.121057297107224571e+00 / ln2, --9.442907637099850149e+00 / ln2, --5.177102904471855283e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.642897843502046484e+00 / ln2, --3.949349394517413181e+00 / ln2, --5.861249608063488381e+00 / ln2, --5.871019786565007337e+00 / ln2, --4.883577810848264811e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.689409517815276374e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.025159966901359709e+01 / ln2, --3.631360480608693209e+00 / ln2, --6.007365244407383287e+00 / ln2, --7.267062386635592119e+00 / ln2, --7.358997954444022938e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.483355190078385455e+00 / ln2, --7.048892879291960512e+00 / ln2, --3.949349394517413181e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.511251163267971265e+00 / ln2, --5.284098860888144067e+00 / ln2, --1.171395710922925026e+01 / ln2, --5.284098860888144067e+00 / ln2, --6.425466655005584116e+00 / ln2, --4.919649166968065757e+00 / ln2, --3.949349394517413181e+00 / ln2, --7.184300953920424782e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.798856991358857016e+00 / ln2, --4.091764045676016259e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.871019786565007337e+00 / ln2, --5.542219003269678979e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.949349394517413181e+00 / ln2, --5.284098860888144067e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.754337034915018023e+00 / ln2, --8.140218559980493040e+00 / ln2, --7.223375476872481826e+00 / ln2, --1.836307946957008141e+01 / ln2, --4.562852777492357070e+00 / ln2, --3.949349394517413181e+00 / ln2, --1.168986496391243612e+01 / ln2, --3.631360480608693209e+00 / ln2, --6.944473462017027643e+00 / ln2, --8.071909107879246648e+00 / ln2, --6.012689565822368465e+00 / ln2, --4.580662492468392522e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.067243984851346639e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.286368968884687547e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.562852777492357070e+00 / ln2, --6.424166483534085259e+00 / ln2, --6.674700103110665417e+00 / ln2, --5.861249608063488381e+00 / ln2, --3.949349394517413181e+00 / ln2, --6.720134407192276171e+00 / ln2, --5.542219003269678979e+00 / ln2, --5.113891938530826131e+00 / ln2, --7.210947893307020351e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.617690255987351833e+00 / ln2, --5.861249608063488381e+00 / ln2, --3.296199802569410142e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.893167479319754598e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.885183121012873109e+00 / ln2, --5.195119186325862337e+00 / ln2, --6.236592765249644010e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --1.143258596730222187e+01 / ln2, --2.462783453866639771e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.883577810848264811e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.919649166968065757e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.754707819725457085e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.754337034915018023e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.316943408775147262e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.861249608063488381e+00 / ln2, --1.130108731959751189e+01 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.425466655005584116e+00 / ln2, --4.143181862813722027e+00 / ln2, --6.327963919515099178e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.193805121009943626e+00 / ln2, --4.919649166968065757e+00 / ln2, --1.130108731959751189e+01 / ln2, --5.193805121009943626e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.193805121009943626e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.511251163267971265e+00 / ln2, --4.691538586043964010e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.754337034915018023e+00 / ln2, --4.893167479319754598e+00 / ln2, --1.048696560647437082e+01 / ln2, --3.296199802569410142e+00 / ln2, --6.600485884087979649e+00 / ln2, --7.021711310391386185e+00 / ln2, --6.152879364568431875e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.316943408775147262e+00 / ln2, --4.160925916687072679e+00 / ln2, --7.184300953920424782e+00 / ln2, --7.021711310391386185e+00 / ln2, --6.512580640245118957e+00 / ln2, --5.754707819725457085e+00 / ln2, --4.580662492468392522e+00 / ln2, --4.143181862813722027e+00 / ln2, --6.017498482476998589e+00 / ln2, --9.294588429854087508e+00 / ln2, --4.998325418845404933e+00 / ln2, --5.685674146241039395e+00 / ln2, --5.397372105698754474e+00 / ln2, --1.040237040920392531e+01 / ln2, --4.691538586043964010e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.511251163267971265e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.069538553398722058e+00 / ln2, --4.998325418845404933e+00 / ln2, --7.161725488083725111e+00 / ln2, --4.143181862813722027e+00 / ln2, --1.083865141940506760e+01 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.861249608063488381e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.745862952448395511e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.694095152899173229e+00 / ln2, --4.049563242290908249e+00 / ln2, --6.674700103110665417e+00 / ln2, --4.562852777492357070e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.143181862813722027e+00 / ln2, --7.289077351069391142e+00 / ln2, --4.511251163267971265e+00 / ln2, --7.119927210762653225e+00 / ln2, --4.576662416349575935e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.798856991358857016e+00 / ln2, --4.576662416349575935e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.883577810848264811e+00 / ln2, --3.296199802569410142e+00 / ln2, --8.231385546183886959e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.332499360388146314e+00 / ln2, --9.469708295055941250e+00 / ln2, --6.947297936873974677e+00 / ln2, --7.689409517815276374e+00 / ln2, --5.833531233360072399e+00 / ln2, --7.267062386635592119e+00 / ln2, --9.370236207688265040e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.949349394517413181e+00 / ln2, --7.183140534972725533e+00 / ln2, --8.319852591139634157e+00 / ln2, --4.841396924932839241e+00 / ln2, --6.584033785323046395e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.893167479319754598e+00 / ln2, --4.143181862813722027e+00 / ln2, --8.557802589052355913e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.576662416349575935e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.150475124638018443e+01 / ln2, --3.296199802569410142e+00 / ln2, --7.267062386635592119e+00 / ln2, --7.327920672174300876e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --8.812611176663798673e+00 / ln2, --5.193805121009943626e+00 / ln2, --5.923664837455273613e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.833531233360072399e+00 / ln2, --4.160925916687072679e+00 / ln2, --7.517325864764372589e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.604168121450740614e+00 / ln2, --6.694546051260094721e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.264380688290192367e+01 / ln2, --4.919649166968065757e+00 / ln2, --5.397372105698754474e+00 / ln2, --6.424166483534085259e+00 / ln2, --4.604168121450740614e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.841396924932839241e+00 / ln2, --5.542219003269678979e+00 / ln2, --4.511251163267971265e+00 / ln2, --5.397372105698754474e+00 / ln2, --6.406237793012392601e+00 / ln2, --9.760673288736205322e+00 / ln2, --4.576662416349575935e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.874321064688381000e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.195119186325862337e+00 / ln2, --1.125542566348871354e+01 / ln2, --4.511251163267971265e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --1.044570027672111756e+01 / ln2, --5.536137450497251145e+00 / ln2, --5.397372105698754474e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.754337034915018023e+00 / ln2, --4.049563242290908249e+00 / ln2, --1.264380688290192367e+01 / ln2, --4.091764045676016259e+00 / ln2, --3.949349394517413181e+00 / ln2, --6.017498482476998589e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.091764045676016259e+00 / ln2, --6.017498482476998589e+00 / ln2, --4.049563242290908249e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.160925916687072679e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --6.674700103110665417e+00 / ln2, --4.424715454340284460e+00 / ln2, --5.195119186325862337e+00 / ln2, --5.997831470194255665e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.576662416349575935e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.160925916687072679e+00 / ln2, --5.284098860888144067e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.829467623163949952e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.648035504600203538e+00 / ln2, --5.798856991358857016e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.017498482476998589e+00 / ln2, --6.512580640245118957e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.691538586043964010e+00 / ln2, --1.050516998695719195e+01 / ln2, --7.021711310391386185e+00 / ln2, --4.691538586043964010e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --7.553188966816772876e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.919649166968065757e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.604168121450740614e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.584033785323046395e+00 / ln2, --1.130525701277283801e+01 / ln2, --1.028217115906610246e+01 / ln2, --6.971660331060701488e+00 / ln2, --4.562852777492357070e+00 / ln2, --4.511251163267971265e+00 / ln2, --4.893167479319754598e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.437619382108458410e+00 / ln2, --5.542219003269678979e+00 / ln2, --9.988776888454795611e+00 / ln2, --3.949349394517413181e+00 / ln2, --8.070842469545034703e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.883577810848264811e+00 / ln2, --7.703898338055121364e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.936476480951127677e+00 / ln2, --7.299334151304765150e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.919649166968065757e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.841396924932839241e+00 / ln2, --1.268608111131628036e+01 / ln2, --4.424715454340284460e+00 / ln2, --4.998325418845404933e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.332499360388146314e+00 / ln2, --9.883349451013705433e+00 / ln2, --4.576662416349575935e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.511251163267971265e+00 / ln2, --4.691538586043964010e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.195119186325862337e+00 / ln2, --4.893167479319754598e+00 / ln2, --4.691538586043964010e+00 / ln2, --5.861249608063488381e+00 / ln2, --6.223992983953650970e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.642897843502046484e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.562852777492357070e+00 / ln2, --8.812611176663798673e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.949349394517413181e+00 / ln2, --6.067243984851346639e+00 / ln2, --8.847574884292626507e+00 / ln2, --4.642897843502046484e+00 / ln2, --5.193805121009943626e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.425466655005584116e+00 / ln2, --1.268608111131628036e+01 / ln2, --6.006187732178176475e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.959821016291367179e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.049563242290908249e+00 / ln2, --6.017498482476998589e+00 / ln2, --5.871019786565007337e+00 / ln2, --1.061406875134344041e+01 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.758886612591042287e+00 / ln2, --4.883577810848264811e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.143258596730222187e+01 / ln2, --7.800758034760048254e+00 / ln2, --5.177102904471855283e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.177102904471855283e+00 / ln2, --6.236592765249644010e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.193805121009943626e+00 / ln2, --5.861249608063488381e+00 / ln2, --4.049563242290908249e+00 / ln2, --5.195119186325862337e+00 / ln2, --4.498412758302154479e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.841396924932839241e+00 / ln2, --8.911633169851866043e+00 / ln2, --4.893167479319754598e+00 / ln2, --8.179445530167162914e+00 / ln2, --5.536137450497251145e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.049563242290908249e+00 / ln2, --6.584033785323046395e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.562852777492357070e+00 / ln2, --4.691538586043964010e+00 / ln2, --5.861249608063488381e+00 / ln2, --4.498412758302154479e+00 / ln2, --6.532634035752141521e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.017498482476998589e+00 / ln2, --1.166627883103860697e+01 / ln2, --1.030807112927032776e+01 / ln2, --4.562852777492357070e+00 / ln2, --5.798856991358857016e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.503680464488466484e+00 / ln2, --5.758886612591042287e+00 / ln2, --1.068317631220670449e+01 / ln2, --4.893167479319754598e+00 / ln2, --7.503680464488466484e+00 / ln2, --3.296199802569410142e+00 / ln2, --8.350828230729891999e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.316943408775147262e+00 / ln2, --6.512580640245118957e+00 / ln2, --3.949349394517413181e+00 / ln2, --5.754707819725457085e+00 / ln2, --5.025989230275349939e+00 / ln2, --1.015500071551313432e+01 / ln2, --4.562852777492357070e+00 / ln2, --5.332499360388146314e+00 / ln2, --5.536137450497251145e+00 / ln2, --6.720134407192276171e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.012689565822368465e+00 / ln2, --6.512580640245118957e+00 / ln2, --7.641510812793480767e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.923664837455273613e+00 / ln2, --4.754337034915018023e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.193805121009943626e+00 / ln2, --1.194242396538278683e+01 / ln2, --4.893167479319754598e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.576662416349575935e+00 / ln2, --4.754337034915018023e+00 / ln2, --8.022806380334262855e+00 / ln2, --3.296199802569410142e+00 / ln2, --8.812268409318086526e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.352896081343149426e+00 / ln2, --6.812113812154088954e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.959821016291367179e+00 / ln2, --6.286368968884687547e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.068317631220670449e+01 / ln2, --2.462783453866639771e+00 / ln2, --5.536137450497251145e+00 / ln2, --5.861249608063488381e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.152879364568431875e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.511251163267971265e+00 / ln2, --8.022806380334262855e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.617458030859222795e+00 / ln2, --4.498412758302154479e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.143181862813722027e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.919649166968065757e+00 / ln2, --1.048696560647437082e+01 / ln2, --7.689409517815276374e+00 / ln2, --9.793394681581565564e+00 / ln2, --6.067243984851346639e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --1.087984978545612869e+01 / ln2, --5.798856991358857016e+00 / ln2, --6.812113812154088954e+00 / ln2, --7.327920672174300876e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.742568993938474087e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.923664837455273613e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.584033785323046395e+00 / ln2, --6.694546051260094721e+00 / ln2, --6.971660331060701488e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.511251163267971265e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.160925916687072679e+00 / ln2, --5.113891938530826131e+00 / ln2, --5.923664837455273613e+00 / ln2, --5.621647006643879507e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.091764045676016259e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.562852777492357070e+00 / ln2, --7.545926888317382009e+00 / ln2, --1.175414779598468940e+01 / ln2, --3.296199802569410142e+00 / ln2, --7.210947893307020351e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.758886612591042287e+00 / ln2, --4.143181862813722027e+00 / ln2, --7.048892879291960512e+00 / ln2, --4.143181862813722027e+00 / ln2, --3.949349394517413181e+00 / ln2, --9.793394681581565564e+00 / ln2, --4.576662416349575935e+00 / ln2, --1.048696560647437082e+01 / ln2, --2.046324443145273619e+00 / ln2, --5.997831470194255665e+00 / ln2, --9.434248995347461531e+00 / ln2, --3.949349394517413181e+00 / ln2, --4.604168121450740614e+00 / ln2, --3.949349394517413181e+00 / ln2, --6.663698816176689910e+00 / ln2, --4.883577810848264811e+00 / ln2, --6.391839193742723246e+00 / ln2, --5.345707246405288160e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.152879364568431875e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.177102904471855283e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.357001407991552000e+00 / ln2, --8.877589121715919518e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.745862952448395511e+00 / ln2, --1.087984978545612869e+01 / ln2, --7.186698218369051538e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.258907280406040030e+01 / ln2, --4.143181862813722027e+00 / ln2, --7.720199943466562686e+00 / ln2, --9.347814457090896312e+00 / ln2, --4.919649166968065757e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.949336081541920507e+00 / ln2, --5.617458030859222795e+00 / ln2, --5.754707819725457085e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.160925916687072679e+00 / ln2, --6.944473462017027643e+00 / ln2, --4.562852777492357070e+00 / ln2, --6.745862952448395511e+00 / ln2, --4.580662492468392522e+00 / ln2, --8.245710019274113733e+00 / ln2, --5.553599664845023653e+00 / ln2, --4.576662416349575935e+00 / ln2, --1.073778889043102325e+01 / ln2, --4.998325418845404933e+00 / ln2, --5.332499360388146314e+00 / ln2, --5.177102904471855283e+00 / ln2, --5.284098860888144067e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.949336081541920507e+00 / ln2, --6.909735959825669127e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.883577810848264811e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.049563242290908249e+00 / ln2, --6.909735959825669127e+00 / ln2, --4.754337034915018023e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.049433957816686913e+00 / ln2, --8.438636990658810788e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.909176526836401599e+00 / ln2, --4.691538586043964010e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.841396924932839241e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.919649166968065757e+00 / ln2, --4.160925916687072679e+00 / ln2, --6.017498482476998589e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.406237793012392601e+00 / ln2, --4.883577810848264811e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.871019786565007337e+00 / ln2, --9.563168690224490120e+00 / ln2, --6.017498482476998589e+00 / ln2, --7.517325864764372589e+00 / ln2, --3.296199802569410142e+00 / ln2, --3.296199802569410142e+00 / ln2, --7.259851116637276114e+00 / ln2, --1.057306084326360640e+01 / ln2, --6.458537022627602653e+00 / ln2, --5.553599664845023653e+00 / ln2, --5.025989230275349939e+00 / ln2, --6.745862952448395511e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.424166483534085259e+00 / ln2, --4.919649166968065757e+00 / ln2, --1.165915831016035398e+01 / ln2, --4.160925916687072679e+00 / ln2, --4.691538586043964010e+00 / ln2, --6.812113812154088954e+00 / ln2, --6.007365244407383287e+00 / ln2, --8.598045803528568953e+00 / ln2, --5.332499360388146314e+00 / ln2, --3.949349394517413181e+00 / ln2, --5.617458030859222795e+00 / ln2, --4.604168121450740614e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.871019786565007337e+00 / ln2, --4.143181862813722027e+00 / ln2, --6.286368968884687547e+00 / ln2, --5.674889513884615155e+00 / ln2, --1.028217115906610246e+01 / ln2, --4.919649166968065757e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.113891938530826131e+00 / ln2, --3.949349394517413181e+00 / ln2, --5.861249608063488381e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.019261621630061398e+01 / ln2, --4.049563242290908249e+00 / ln2, --5.345707246405288160e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.425466655005584116e+00 / ln2, --5.284098860888144067e+00 / ln2, --4.754337034915018023e+00 / ln2, --3.949349394517413181e+00 / ln2, --6.017498482476998589e+00 / ln2, --1.000340241762609317e+01 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.691538586043964010e+00 / ln2, --4.091764045676016259e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.511251163267971265e+00 / ln2, --8.350828230729891999e+00 / ln2, --4.754337034915018023e+00 / ln2, --4.160925916687072679e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.998325418845404933e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.745862952448395511e+00 / ln2, --5.193805121009943626e+00 / ln2, --5.997831470194255665e+00 / ln2, --4.642897843502046484e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.742568993938474087e+00 / ln2, --7.881364862260915594e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.861249608063488381e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.833531233360072399e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.883577810848264811e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.871019786565007337e+00 / ln2, --6.532634035752141521e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.152114117370445001e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.867084829257056988e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.318139382317166763e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.971660331060701488e+00 / ln2, --6.006187732178176475e+00 / ln2, --1.224969357884932641e+01 / ln2, --4.919649166968065757e+00 / ln2, --3.296199802569410142e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.143181862813722027e+00 / ln2, --6.517562281884773157e+00 / ln2, --3.631360480608693209e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.949336081541920507e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.301233579505205462e+01 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.694095152899173229e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.562852777492357070e+00 / ln2, --1.143258596730222187e+01 / ln2, --4.604168121450740614e+00 / ln2, --6.352896081343149426e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.498412758302154479e+00 / ln2, --6.512580640245118957e+00 / ln2, --7.289077351069391142e+00 / ln2, --7.447790001659071457e+00 / ln2, --6.223992983953650970e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.511251163267971265e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --8.103230206446424333e+00 / ln2, --5.113891938530826131e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.758886612591042287e+00 / ln2, --2.462783453866639771e+00 / ln2, --8.437619382108458410e+00 / ln2, --7.619344887229415164e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.424715454340284460e+00 / ln2, --5.923664837455273613e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.694095152899173229e+00 / ln2, --4.143181862813722027e+00 / ln2, --1.057306084326360640e+01 / ln2, --6.463978470342545357e+00 / ln2, --1.050516998695719195e+01 / ln2, --2.046324443145273619e+00 / ln2, --8.537479860740265991e+00 / ln2, --6.909176526836401599e+00 / ln2, --7.517325864764372589e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.462783453866639771e+00 / ln2, --8.617690255987351833e+00 / ln2, --5.536137450497251145e+00 / ln2, --4.511251163267971265e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.021438454248509764e+01 / ln2, --4.576662416349575935e+00 / ln2, --4.576662416349575935e+00 / ln2, --4.511251163267971265e+00 / ln2, --4.049563242290908249e+00 / ln2, --5.332499360388146314e+00 / ln2, --5.177102904471855283e+00 / ln2, --5.542219003269678979e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.406237793012392601e+00 / ln2, --4.091764045676016259e+00 / ln2, --8.812611176663798673e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.874321064688381000e+00 / ln2, --4.580662492468392522e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.871019786565007337e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.562852777492357070e+00 / ln2, --5.674889513884615155e+00 / ln2, --5.871019786565007337e+00 / ln2, --8.181145976660216590e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.183140534972725533e+00 / ln2, --4.883577810848264811e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.515023211937145398e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.154814228758357153e+01 / ln2, --4.642897843502046484e+00 / ln2, --5.332499360388146314e+00 / ln2, --5.959821016291367179e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.498412758302154479e+00 / ln2, --4.091764045676016259e+00 / ln2, --6.971660331060701488e+00 / ln2, --5.949336081541920507e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.685674146241039395e+00 / ln2, --5.754707819725457085e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.954184282296374420e+00 / ln2, --5.113891938530826131e+00 / ln2, --4.998325418845404933e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.356251338206809542e+00 / ln2, --6.006187732178176475e+00 / ln2, --5.754707819725457085e+00 / ln2, --4.883577810848264811e+00 / ln2, --5.332499360388146314e+00 / ln2, --1.095979992273871417e+01 / ln2, --3.296199802569410142e+00 / ln2, --5.621647006643879507e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.511251163267971265e+00 / ln2, --5.113891938530826131e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.193805121009943626e+00 / ln2, --7.295589409525732094e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.193805121009943626e+00 / ln2, --5.685674146241039395e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.631360480608693209e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.833531233360072399e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.798856991358857016e+00 / ln2, --4.642897843502046484e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.883349451013705433e+00 / ln2, --4.998325418845404933e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.286368968884687547e+00 / ln2, --5.332499360388146314e+00 / ln2, --7.553188966816772876e+00 / ln2, --4.998325418845404933e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.670124616416384100e+00 / ln2, --4.754337034915018023e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.517562281884773157e+00 / ln2, --7.959852224170357538e+00 / ln2, --1.150475124638018443e+01 / ln2, --5.195119186325862337e+00 / ln2, --6.909735959825669127e+00 / ln2, --7.517325864764372589e+00 / ln2, --6.532634035752141521e+00 / ln2, --4.919649166968065757e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.425466655005584116e+00 / ln2, --6.517562281884773157e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.290844047540147699e+00 / ln2, --4.841396924932839241e+00 / ln2, --8.350828230729891999e+00 / ln2, --5.536137450497251145e+00 / ln2, --1.130525701277283801e+01 / ln2, --8.859835387901323855e+00 / ln2, --4.143181862813722027e+00 / ln2, --8.636130365971254719e+00 / ln2, --4.604168121450740614e+00 / ln2, --4.424715454340284460e+00 / ln2, --6.532634035752141521e+00 / ln2, --6.512580640245118957e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.919649166968065757e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.021438454248509764e+01 / ln2, --3.296199802569410142e+00 / ln2, --3.949349394517413181e+00 / ln2, --9.447855320106350874e+00 / ln2, --4.642897843502046484e+00 / ln2, --4.893167479319754598e+00 / ln2, --8.847574884292626507e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --6.286368968884687547e+00 / ln2, --6.694546051260094721e+00 / ln2, --1.070585939587089008e+01 / ln2, --2.046324443145273619e+00 / ln2, --1.025159966901359709e+01 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.424166483534085259e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.223992983953650970e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.104077188637425877e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.542219003269678979e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.621647006643879507e+00 / ln2, --6.694546051260094721e+00 / ln2, --6.720134407192276171e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.193805121009943626e+00 / ln2, --4.754337034915018023e+00 / ln2, --4.841396924932839241e+00 / ln2, --4.754337034915018023e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.758886612591042287e+00 / ln2, --4.511251163267971265e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.642897843502046484e+00 / ln2, --4.604168121450740614e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.021711310391386185e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.143181862813722027e+00 / ln2, --1.025011173880692184e+01 / ln2, --4.754337034915018023e+00 / ln2, --5.177102904471855283e+00 / ln2, --9.563168690224490120e+00 / ln2, --4.691538586043964010e+00 / ln2, --8.838166443014722873e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.689409517815276374e+00 / ln2, --4.143181862813722027e+00 / ln2, --6.694546051260094721e+00 / ln2, --5.553599664845023653e+00 / ln2, --4.841396924932839241e+00 / ln2, --6.971660331060701488e+00 / ln2, --2.462783453866639771e+00 / ln2, --8.859835387901323855e+00 / ln2, --4.691538586043964010e+00 / ln2, --3.949349394517413181e+00 / ln2, --5.754707819725457085e+00 / ln2, --7.000368956169869428e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.332499360388146314e+00 / ln2, --3.949349394517413181e+00 / ln2, --5.754707819725457085e+00 / ln2, --4.642897843502046484e+00 / ln2, --5.754707819725457085e+00 / ln2, --1.094874312386789583e+01 / ln2, --4.091764045676016259e+00 / ln2, --7.104077188637425877e+00 / ln2, --5.316943408775147262e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.223992983953650970e+00 / ln2, --6.223992983953650970e+00 / ln2, --4.576662416349575935e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.861249608063488381e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.012900414694919959e+01 / ln2, --2.462783453866639771e+00 / ln2, --6.663698816176689910e+00 / ln2, --4.642897843502046484e+00 / ln2, --5.758886612591042287e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.998325418845404933e+00 / ln2, --5.861249608063488381e+00 / ln2, --4.511251163267971265e+00 / ln2, --6.425466655005584116e+00 / ln2, --5.195119186325862337e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.810898878696857395e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.642897843502046484e+00 / ln2, --5.923664837455273613e+00 / ln2, --8.657273747556139654e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.022806380334262855e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.345707246405288160e+00 / ln2, --9.465543819552042493e+00 / ln2, --5.195119186325862337e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.871019786565007337e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --7.516887900787997623e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --9.172628873852490372e+00 / ln2, --9.670124616416384100e+00 / ln2, --6.121057297107224571e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.177102904471855283e+00 / ln2, --9.315078460598257948e+00 / ln2, --6.286368968884687547e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.685674146241039395e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.000368956169869428e+00 / ln2, --8.098608047708514945e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.511251163267971265e+00 / ln2, --5.345707246405288160e+00 / ln2, --8.005103642565483568e+00 / ln2, --5.861249608063488381e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.152879364568431875e+00 / ln2, --7.278597058620684734e+00 / ln2, --8.232504733803645891e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.195119186325862337e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.121057297107224571e+00 / ln2, --5.415204418624045779e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.691538586043964010e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.529197793097948121e+00 / ln2, --8.233702486883688110e+00 / ln2, --6.017498482476998589e+00 / ln2, --9.069538553398722058e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.949349394517413181e+00 / ln2, --4.754337034915018023e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.152114117370445001e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.621647006643879507e+00 / ln2, --6.584033785323046395e+00 / ln2, --3.631360480608693209e+00 / ln2, --8.382633526813590308e+00 / ln2, --5.542219003269678979e+00 / ln2, --5.113891938530826131e+00 / ln2, --1.105715580744062621e+01 / ln2, --7.184300953920424782e+00 / ln2, --6.512580640245118957e+00 / ln2, --3.949349394517413181e+00 / ln2, --6.017498482476998589e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.230539968036323373e+00 / ln2, --3.949349394517413181e+00 / ln2, --6.517562281884773157e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.290844047540147699e+00 / ln2, --7.359401430306112601e+00 / ln2, --1.264380688290192367e+01 / ln2, --8.598045803528568953e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.871019786565007337e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.195119186325862337e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.867084829257056988e+00 / ln2, --5.193805121009943626e+00 / ln2, --4.604168121450740614e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.007365244407383287e+00 / ln2, --3.631360480608693209e+00 / ln2, --7.210947893307020351e+00 / ln2, --5.284098860888144067e+00 / ln2, --5.959821016291367179e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.919649166968065757e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.231385546183886959e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.576662416349575935e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.663698816176689910e+00 / ln2, --4.143181862813722027e+00 / ln2, --6.152879364568431875e+00 / ln2, --5.177102904471855283e+00 / ln2, --7.290844047540147699e+00 / ln2, --9.852642968671261769e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --7.641510812793480767e+00 / ln2, --7.447790001659071457e+00 / ln2, --4.691538586043964010e+00 / ln2, --3.949349394517413181e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.113891938530826131e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.576662416349575935e+00 / ln2, --8.859835387901323855e+00 / ln2, --5.113891938530826131e+00 / ln2, --7.959852224170357538e+00 / ln2, --6.909735959825669127e+00 / ln2, --6.152879364568431875e+00 / ln2, --8.838166443014722873e+00 / ln2, --6.694546051260094721e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.195119186325862337e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.511251163267971265e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.091764045676016259e+00 / ln2, --9.990045079829323882e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.691538586043964010e+00 / ln2, --7.810898878696857395e+00 / ln2, --6.517562281884773157e+00 / ln2, --5.754707819725457085e+00 / ln2, --1.106006057964308731e+01 / ln2, --2.046324443145273619e+00 / ln2, --1.087984978545612869e+01 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.674700103110665417e+00 / ln2, --9.779642293724309710e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.290844047540147699e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.425466655005584116e+00 / ln2, --4.919649166968065757e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.841396924932839241e+00 / ln2, --4.576662416349575935e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.871019786565007337e+00 / ln2, --1.132541823088126165e+01 / ln2, --6.885183121012873109e+00 / ln2, --4.498412758302154479e+00 / ln2, --5.536137450497251145e+00 / ln2, --8.777444697110189153e+00 / ln2, --4.511251163267971265e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.124880459954479939e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.517325864764372589e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.071750970431373773e+01 / ln2, --3.296199802569410142e+00 / ln2, --8.350828230729891999e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.562852777492357070e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.210947893307020351e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.562852777492357070e+00 / ln2, --4.893167479319754598e+00 / ln2, --4.160925916687072679e+00 / ln2, --5.113891938530826131e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.691538586043964010e+00 / ln2, --1.025159966901359709e+01 / ln2, --2.462783453866639771e+00 / ln2, --4.883577810848264811e+00 / ln2, --4.754337034915018023e+00 / ln2, --6.223992983953650970e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.143181862813722027e+00 / ln2, --3.949349394517413181e+00 / ln2, --3.296199802569410142e+00 / ln2, --9.883349451013705433e+00 / ln2, --4.998325418845404933e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --6.745862952448395511e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.177102904471855283e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.604168121450740614e+00 / ln2, --8.179445530167162914e+00 / ln2, --5.195119186325862337e+00 / ln2, --8.071909107879246648e+00 / ln2, --6.947297936873974677e+00 / ln2, --4.691538586043964010e+00 / ln2, --4.576662416349575935e+00 / ln2, --6.812113812154088954e+00 / ln2, --4.691538586043964010e+00 / ln2, --4.754337034915018023e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --1.139296906381306052e+01 / ln2, --2.046324443145273619e+00 / ln2, --4.511251163267971265e+00 / ln2, --5.674889513884615155e+00 / ln2, --8.382633526813590308e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.327963919515099178e+00 / ln2, --9.121101243974623074e+00 / ln2, --6.425466655005584116e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.674700103110665417e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.121057297107224571e+00 / ln2, --4.754337034915018023e+00 / ln2, --4.511251163267971265e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --6.017498482476998589e+00 / ln2, --5.542219003269678979e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.462783453866639771e+00 / ln2, --9.883349451013705433e+00 / ln2, --4.604168121450740614e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.553599664845023653e+00 / ln2, --3.296199802569410142e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.758886612591042287e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.754337034915018023e+00 / ln2, --5.617458030859222795e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.160925916687072679e+00 / ln2, --7.553188966816772876e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.121057297107224571e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.091764045676016259e+00 / ln2, --8.774158714333733400e+00 / ln2, --4.049563242290908249e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.193805121009943626e+00 / ln2, --3.296199802569410142e+00 / ln2, --3.296199802569410142e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.812113812154088954e+00 / ln2, --6.971660331060701488e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.049563242290908249e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.017498482476998589e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.642897843502046484e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.025989230275349939e+00 / ln2, --6.286368968884687547e+00 / ln2, --4.562852777492357070e+00 / ln2, --6.512580640245118957e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.764755566332865122e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.998325418845404933e+00 / ln2, --3.949349394517413181e+00 / ln2, --7.766312407968571918e+00 / ln2, --9.357001407991552000e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.576662416349575935e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.195119186325862337e+00 / ln2, --4.143181862813722027e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.631360480608693209e+00 / ln2, --3.296199802569410142e+00 / ln2, --1.268608111131628036e+01 / ln2, --9.026976322186319734e+00 / ln2, --3.631360480608693209e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.598045803528568953e+00 / ln2, --5.997831470194255665e+00 / ln2, --4.160925916687072679e+00 / ln2, --7.959852224170357538e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.498412758302154479e+00 / ln2, --5.193805121009943626e+00 / ln2, --3.296199802569410142e+00 / ln2, --1.095979992273871417e+01 / ln2, --5.536137450497251145e+00 / ln2, --5.685674146241039395e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.909735959825669127e+00 / ln2, --4.580662492468392522e+00 / ln2, --5.113891938530826131e+00 / ln2, --5.415204418624045779e+00 / ln2, --4.919649166968065757e+00 / ln2, --4.883577810848264811e+00 / ln2, --4.841396924932839241e+00 / ln2, --4.576662416349575935e+00 / ln2, --4.091764045676016259e+00 / ln2, --7.356251338206809542e+00 / ln2, --1.013779020202142256e+01 / ln2, --1.090932255574468179e+01 / ln2, --5.332499360388146314e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.691538586043964010e+00 / ln2, --1.301233579505205462e+01 / ln2, --4.511251163267971265e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.098983619591661487e+01 / ln2, --1.359735121802292568e+01 / ln2, --2.046324443145273619e+00 / ln2, --1.264380688290192367e+01 / ln2, --3.631360480608693209e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.754337034915018023e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.006187732178176475e+00 / ln2, --1.025159966901359709e+01 / ln2, --8.350828230729891999e+00 / ln2, --5.025989230275349939e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.095496646895064785e+01 / ln2, --3.631360480608693209e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.143181862813722027e+00 / ln2, --1.039337502338793939e+01 / ln2, --5.415204418624045779e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --7.868991888563591885e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.332499360388146314e+00 / ln2, --9.493114258108283465e+00 / ln2, --1.194242396538278683e+01 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.754337034915018023e+00 / ln2, --8.838166443014722873e+00 / ln2, --1.171395710922925026e+01 / ln2, --4.091764045676016259e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.604168121450740614e+00 / ln2, --4.562852777492357070e+00 / ln2, --5.536137450497251145e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.691538586043964010e+00 / ln2, --3.631360480608693209e+00 / ln2, --7.210947893307020351e+00 / ln2, --5.177102904471855283e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.515023211937145398e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.604168121450740614e+00 / ln2, --7.327920672174300876e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.049563242290908249e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.959821016291367179e+00 / ln2, --4.576662416349575935e+00 / ln2, --4.580662492468392522e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.267062386635592119e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --8.746627133441950974e+00 / ln2, --5.284098860888144067e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.193805121009943626e+00 / ln2, --6.812113812154088954e+00 / ln2, --5.332499360388146314e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.358997954444022938e+00 / ln2, --3.296199802569410142e+00 / ln2, --7.048892879291960512e+00 / ln2, --7.184300953920424782e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.841396924932839241e+00 / ln2, --4.580662492468392522e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.397372105698754474e+00 / ln2, --4.893167479319754598e+00 / ln2, --1.025011173880692184e+01 / ln2, --6.954184282296374420e+00 / ln2, --6.017498482476998589e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.316943408775147262e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.017498482476998589e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.232504733803645891e+00 / ln2, --4.604168121450740614e+00 / ln2, --8.847574884292626507e+00 / ln2, --6.424166483534085259e+00 / ln2, --6.515023211937145398e+00 / ln2, --5.758886612591042287e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.662729593866675515e+00 / ln2, --7.683429021422371719e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.268608111131628036e+01 / ln2, --5.553599664845023653e+00 / ln2, --5.193805121009943626e+00 / ln2, --1.175414779598468940e+01 / ln2, --8.957187461268130590e+00 / ln2, --6.674700103110665417e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.562852777492357070e+00 / ln2, --5.923664837455273613e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.071909107879246648e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.861249608063488381e+00 / ln2, --4.919649166968065757e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.841396924932839241e+00 / ln2, --4.604168121450740614e+00 / ln2, --6.867084829257056988e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.580662492468392522e+00 / ln2, --4.754337034915018023e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.284098860888144067e+00 / ln2, --5.193805121009943626e+00 / ln2, --9.434248995347461531e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.631360480608693209e+00 / ln2, --1.005049580306630475e+01 / ln2, --8.663408750741215414e+00 / ln2, --5.542219003269678979e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.674700103110665417e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.537479860740265991e+00 / ln2, --4.893167479319754598e+00 / ln2, --8.598045803528568953e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.050516998695719195e+01 / ln2, --2.462783453866639771e+00 / ln2, --3.949349394517413181e+00 / ln2, --3.296199802569410142e+00 / ln2, --3.949349394517413181e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.674700103110665417e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.584033785323046395e+00 / ln2, --5.861249608063488381e+00 / ln2, --4.511251163267971265e+00 / ln2, --4.754337034915018023e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.085914756101938572e+01 / ln2, --4.604168121450740614e+00 / ln2, --4.604168121450740614e+00 / ln2, --4.893167479319754598e+00 / ln2, --7.183140534972725533e+00 / ln2, --6.286368968884687547e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.754707819725457085e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.143181862813722027e+00 / ln2, --8.774158714333733400e+00 / ln2, --9.026976322186319734e+00 / ln2, --6.223992983953650970e+00 / ln2, --7.119927210762653225e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.553599664845023653e+00 / ln2, --3.631360480608693209e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.498412758302154479e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.576662416349575935e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.604168121450740614e+00 / ln2, --4.580662492468392522e+00 / ln2, --5.923664837455273613e+00 / ln2, --5.923664837455273613e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.511251163267971265e+00 / ln2, --5.284098860888144067e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.049563242290908249e+00 / ln2, --6.812113812154088954e+00 / ln2, --5.177102904471855283e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.576662416349575935e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.893167479319754598e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.685674146241039395e+00 / ln2, --4.160925916687072679e+00 / ln2, --3.631360480608693209e+00 / ln2, --7.683429021422371719e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.883577810848264811e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.140218559980493040e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.210947893307020351e+00 / ln2, --1.166627883103860697e+01 / ln2, --2.462783453866639771e+00 / ln2, --5.959821016291367179e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.007365244407383287e+00 / ln2, --7.810898878696857395e+00 / ln2, --7.516887900787997623e+00 / ln2, --6.017498482476998589e+00 / ln2, --7.278597058620684734e+00 / ln2, --5.923664837455273613e+00 / ln2, --8.838166443014722873e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.006187732178176475e+00 / ln2, --3.631360480608693209e+00 / ln2, --7.503680464488466484e+00 / ln2, --6.971660331060701488e+00 / ln2, --7.184300953920424782e+00 / ln2, --3.949349394517413181e+00 / ln2, --8.022806380334262855e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.553599664845023653e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.498914935067912069e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.580662492468392522e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.425466655005584116e+00 / ln2, --5.621647006643879507e+00 / ln2, --3.949349394517413181e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.195119186325862337e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.195119186325862337e+00 / ln2, --1.057306084326360640e+01 / ln2, --3.296199802569410142e+00 / ln2, --5.332499360388146314e+00 / ln2, --6.152879364568431875e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.498412758302154479e+00 / ln2, --7.278597058620684734e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --1.039337502338793939e+01 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.458537022627602653e+00 / ln2, --4.883577810848264811e+00 / ln2, --5.861249608063488381e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.017498482476998589e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.562852777492357070e+00 / ln2, --7.290844047540147699e+00 / ln2, --6.327963919515099178e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.584033785323046395e+00 / ln2, --4.498412758302154479e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --7.564037047890797894e+00 / ln2, --4.562852777492357070e+00 / ln2, --6.424166483534085259e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.177102904471855283e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.498412758302154479e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.562852777492357070e+00 / ln2, --7.184300953920424782e+00 / ln2, --1.030807112927032776e+01 / ln2, --6.694546051260094721e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.604168121450740614e+00 / ln2, --3.296199802569410142e+00 / ln2, --1.836307946957008141e+01 / ln2, --5.923664837455273613e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.604168121450740614e+00 / ln2, --7.104077188637425877e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.919649166968065757e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.193805121009943626e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.754337034915018023e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.861249608063488381e+00 / ln2, --6.936476480951127677e+00 / ln2, --2.462783453866639771e+00 / ln2, --9.793394681581565564e+00 / ln2, --4.841396924932839241e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.517325864764372589e+00 / ln2, --7.517325864764372589e+00 / ln2, --1.269438761816860683e+01 / ln2, --8.495410644101937692e+00 / ln2, --4.580662492468392522e+00 / ln2, --5.871019786565007337e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.542219003269678979e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.286368968884687547e+00 / ln2, --7.711929296494973940e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.113891938530826131e+00 / ln2, --5.861249608063488381e+00 / ln2, --5.415204418624045779e+00 / ln2, --1.095979992273871417e+01 / ln2, --5.193805121009943626e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.143181862813722027e+00 / ln2, --3.949349394517413181e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.576662416349575935e+00 / ln2, --6.694546051260094721e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.711929296494973940e+00 / ln2, --5.754707819725457085e+00 / ln2, --3.296199802569410142e+00 / ln2, --7.184300953920424782e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.542219003269678979e+00 / ln2, --6.017498482476998589e+00 / ln2, --4.754337034915018023e+00 / ln2, --6.909176526836401599e+00 / ln2, --7.684202738748299844e+00 / ln2, --3.631360480608693209e+00 / ln2, --1.050516998695719195e+01 / ln2, --2.462783453866639771e+00 / ln2, --5.542219003269678979e+00 / ln2, --9.648035504600203538e+00 / ln2, --7.104077188637425877e+00 / ln2, --4.143181862813722027e+00 / ln2, --7.683429021422371719e+00 / ln2, --4.754337034915018023e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.442907637099850149e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --1.012900414694919959e+01 / ln2, --3.631360480608693209e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.193805121009943626e+00 / ln2, --6.532634035752141521e+00 / ln2, --6.017498482476998589e+00 / ln2, --9.404417952869394526e+00 / ln2, --1.057306084326360640e+01 / ln2, --4.049563242290908249e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --7.742568993938474087e+00 / ln2, --8.231385546183886959e+00 / ln2, --5.113891938530826131e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.278597058620684734e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.580662492468392522e+00 / ln2, --4.883577810848264811e+00 / ln2, --6.808146457075214819e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.580662492468392522e+00 / ln2, --5.025989230275349939e+00 / ln2, --6.909735959825669127e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.923664837455273613e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.160925916687072679e+00 / ln2, --6.223992983953650970e+00 / ln2, --4.498412758302154479e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.959821016291367179e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.511251163267971265e+00 / ln2, --5.195119186325862337e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.909176526836401599e+00 / ln2, --4.691538586043964010e+00 / ln2, --4.919649166968065757e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.061406875134344041e+01 / ln2, --4.160925916687072679e+00 / ln2, --4.091764045676016259e+00 / ln2, --9.579468945846944194e+00 / ln2, --6.327963919515099178e+00 / ln2, --4.754337034915018023e+00 / ln2, --6.121057297107224571e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.684202738748299844e+00 / ln2, --4.498412758302154479e+00 / ln2, --6.517562281884773157e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.745862952448395511e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.604168121450740614e+00 / ln2, --4.511251163267971265e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.944473462017027643e+00 / ln2, --7.119927210762653225e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.278597058620684734e+00 / ln2, --6.745862952448395511e+00 / ln2, --7.267062386635592119e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.576662416349575935e+00 / ln2, --4.160925916687072679e+00 / ln2, --8.319852591139634157e+00 / ln2, --1.265454555757358079e+01 / ln2, --2.046324443145273619e+00 / ln2, --5.871019786565007337e+00 / ln2, --5.758886612591042287e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.909735959825669127e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.580662492468392522e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.642897843502046484e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.959821016291367179e+00 / ln2, --4.754337034915018023e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.841396924932839241e+00 / ln2, --5.617458030859222795e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.345707246405288160e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.691538586043964010e+00 / ln2, --7.959852224170357538e+00 / ln2, --8.847574884292626507e+00 / ln2, --5.674889513884615155e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.511251163267971265e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.039337502338793939e+01 / ln2, --6.936476480951127677e+00 / ln2, --5.923664837455273613e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.949349394517413181e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.069538553398722058e+00 / ln2, --7.483355190078385455e+00 / ln2, --5.923664837455273613e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.812268409318086526e+00 / ln2, --6.909176526836401599e+00 / ln2, --4.498412758302154479e+00 / ln2, --4.424715454340284460e+00 / ln2, --6.017498482476998589e+00 / ln2, --7.720199943466562686e+00 / ln2, --7.368858813512747297e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.345707246405288160e+00 / ln2, --7.299334151304765150e+00 / ln2, --9.829467623163949952e+00 / ln2, --4.576662416349575935e+00 / ln2, --3.631360480608693209e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.397372105698754474e+00 / ln2, --5.345707246405288160e+00 / ln2, --6.223992983953650970e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.971660331060701488e+00 / ln2, --4.919649166968065757e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.021711310391386185e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.048892879291960512e+00 / ln2, --8.437619382108458410e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.742568993938474087e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.121057297107224571e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.812268409318086526e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.121057297107224571e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.345707246405288160e+00 / ln2, --4.893167479319754598e+00 / ln2, --4.642897843502046484e+00 / ln2, --5.177102904471855283e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.542219003269678979e+00 / ln2, --5.316943408775147262e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.049563242290908249e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.812113812154088954e+00 / ln2, --5.833531233360072399e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.005049580306630475e+01 / ln2, --6.223992983953650970e+00 / ln2, --4.754337034915018023e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.193805121009943626e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.959821016291367179e+00 / ln2, --4.841396924932839241e+00 / ln2, --7.684202738748299844e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.195119186325862337e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.352896081343149426e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.057958593457523300e+00 / ln2, --9.069538553398722058e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.861249608063488381e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.909735959825669127e+00 / ln2, --1.143258596730222187e+01 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --6.512580640245118957e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.463978470342545357e+00 / ln2, --6.909735959825669127e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.604168121450740614e+00 / ln2, --3.949349394517413181e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.606027863309607895e+00 / ln2, --5.195119186325862337e+00 / ln2, --5.923664837455273613e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.580662492468392522e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.143181862813722027e+00 / ln2, --9.357001407991552000e+00 / ln2, --6.971660331060701488e+00 / ln2, --1.125542566348871354e+01 / ln2, --7.119927210762653225e+00 / ln2, --4.576662416349575935e+00 / ln2, --6.532634035752141521e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.022806380334262855e+00 / ln2, --4.754337034915018023e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.007365244407383287e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.584033785323046395e+00 / ln2, --7.517325864764372589e+00 / ln2, --4.893167479319754598e+00 / ln2, --7.048892879291960512e+00 / ln2, --4.498412758302154479e+00 / ln2, --7.184300953920424782e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.007365244407383287e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --5.674889513884615155e+00 / ln2, --6.674700103110665417e+00 / ln2, --5.025989230275349939e+00 / ln2, --3.949349394517413181e+00 / ln2, --1.269438761816860683e+01 / ln2, --5.871019786565007337e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.332499360388146314e+00 / ln2, --5.861249608063488381e+00 / ln2, --8.231385546183886959e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.458537022627602653e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.580662492468392522e+00 / ln2, --6.694546051260094721e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.091764045676016259e+00 / ln2, --1.344520137693501916e+01 / ln2, --4.562852777492357070e+00 / ln2, --5.949336081541920507e+00 / ln2, --7.553188966816772876e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.048892879291960512e+00 / ln2, --9.670124616416384100e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.685674146241039395e+00 / ln2, --5.861249608063488381e+00 / ln2, --9.257233588034425864e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.152879364568431875e+00 / ln2, --9.439487004418870342e+00 / ln2, --5.177102904471855283e+00 / ln2, --5.798856991358857016e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.951382076635610474e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.195119186325862337e+00 / ln2, --6.007365244407383287e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.694546051260094721e+00 / ln2, --1.000340241762609317e+01 / ln2, --1.019261621630061398e+01 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.959821016291367179e+00 / ln2, --4.143181862813722027e+00 / ln2, --6.121057297107224571e+00 / ln2, --4.511251163267971265e+00 / ln2, --3.631360480608693209e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.923664837455273613e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --7.606027863309607895e+00 / ln2, --8.839003156104606518e+00 / ln2, --5.193805121009943626e+00 / ln2, --5.316943408775147262e+00 / ln2, --8.746627133441950974e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.113891938530826131e+00 / ln2, --4.562852777492357070e+00 / ln2, --7.048892879291960512e+00 / ln2, --6.944473462017027643e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.683429021422371719e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.284098860888144067e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.997831470194255665e+00 / ln2, --5.861249608063488381e+00 / ln2, --7.503680464488466484e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.193805121009943626e+00 / ln2, --4.049563242290908249e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.424715454340284460e+00 / ln2, --5.397372105698754474e+00 / ln2, --4.091764045676016259e+00 / ln2, --7.503680464488466484e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.699896352130231492e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.754337034915018023e+00 / ln2, --8.382633526813590308e+00 / ln2, --7.865295069725402044e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.057306084326360640e+01 / ln2, --4.883577810848264811e+00 / ln2, --5.861249608063488381e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.893167479319754598e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.424715454340284460e+00 / ln2, --6.425466655005584116e+00 / ln2, --4.049563242290908249e+00 / ln2, --5.193805121009943626e+00 / ln2, --4.998325418845404933e+00 / ln2, --4.841396924932839241e+00 / ln2, --6.674700103110665417e+00 / ln2, --5.949336081541920507e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.327963919515099178e+00 / ln2, --4.642897843502046484e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.909735959825669127e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.049563242290908249e+00 / ln2, --5.833531233360072399e+00 / ln2, --5.332499360388146314e+00 / ln2, --5.871019786565007337e+00 / ln2, --8.005103642565483568e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.694546051260094721e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.562852777492357070e+00 / ln2, --4.511251163267971265e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.406237793012392601e+00 / ln2, --7.699896352130231492e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.091764045676016259e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.580662492468392522e+00 / ln2, --4.562852777492357070e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --7.104077188637425877e+00 / ln2, --4.919649166968065757e+00 / ln2, --6.498914935067912069e+00 / ln2, --7.516887900787997623e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.576662416349575935e+00 / ln2, --5.553599664845023653e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.562852777492357070e+00 / ln2, --4.691538586043964010e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.810898878696857395e+00 / ln2, --6.971660331060701488e+00 / ln2, --7.048892879291960512e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.177102904471855283e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.959821016291367179e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.484310506563019771e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.267062386635592119e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.536137450497251145e+00 / ln2, --3.949349394517413181e+00 / ln2, --8.005103642565483568e+00 / ln2, --4.754337034915018023e+00 / ln2, --5.997831470194255665e+00 / ln2, --7.119927210762653225e+00 / ln2, --6.944473462017027643e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.703898338055121364e+00 / ln2, --6.017498482476998589e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.166627883103860697e+01 / ln2, --2.462783453866639771e+00 / ln2, --5.949336081541920507e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.068317631220670449e+01 / ln2, --5.025989230275349939e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.642897843502046484e+00 / ln2, --5.542219003269678979e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.691538586043964010e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.576662416349575935e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.685674146241039395e+00 / ln2, --5.177102904471855283e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.553599664845023653e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.657273747556139654e+00 / ln2, --3.631360480608693209e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.642897843502046484e+00 / ln2, --5.193805121009943626e+00 / ln2, --5.536137450497251145e+00 / ln2, --4.691538586043964010e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.919649166968065757e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.327963919515099178e+00 / ln2, --6.121057297107224571e+00 / ln2, --5.025989230275349939e+00 / ln2, --7.358997954444022938e+00 / ln2, --1.087984978545612869e+01 / ln2, --1.087984978545612869e+01 / ln2, --2.462783453866639771e+00 / ln2, --5.177102904471855283e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.803544138091067062e+00 / ln2, --9.793394681581565564e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.604168121450740614e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.997831470194255665e+00 / ln2, --6.674700103110665417e+00 / ln2, --4.498412758302154479e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.193805121009943626e+00 / ln2, --7.934968049655386935e+00 / ln2, --5.193805121009943626e+00 / ln2, --5.553599664845023653e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.839003156104606518e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.091764045676016259e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.604168121450740614e+00 / ln2, --8.103230206446424333e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.812113812154088954e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.025011173880692184e+01 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.919649166968065757e+00 / ln2, --6.909176526836401599e+00 / ln2, --4.580662492468392522e+00 / ln2, --5.754707819725457085e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.186698218369051538e+00 / ln2, --5.871019786565007337e+00 / ln2, --6.424166483534085259e+00 / ln2, --7.720199943466562686e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.861249608063488381e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.919649166968065757e+00 / ln2, --8.438636990658810788e+00 / ln2, --7.517325864764372589e+00 / ln2, --4.580662492468392522e+00 / ln2, --4.160925916687072679e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.997831470194255665e+00 / ln2, --5.195119186325862337e+00 / ln2, --4.604168121450740614e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.223992983953650970e+00 / ln2, --6.406237793012392601e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --8.746627133441950974e+00 / ln2, --7.210947893307020351e+00 / ln2, --6.286368968884687547e+00 / ln2, --6.458537022627602653e+00 / ln2, --4.754337034915018023e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.498412758302154479e+00 / ln2, --4.604168121450740614e+00 / ln2, --4.562852777492357070e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.406237793012392601e+00 / ln2, --9.662729593866675515e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.095496646895064785e+01 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.195119186325862337e+00 / ln2, --4.883577810848264811e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.517562281884773157e+00 / ln2, --4.604168121450740614e+00 / ln2, --4.642897843502046484e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.785577344871311922e+00 / ln2, --7.634089783838128973e+00 / ln2, --6.406237793012392601e+00 / ln2, --6.007365244407383287e+00 / ln2, --4.511251163267971265e+00 / ln2, --1.057306084326360640e+01 / ln2, --4.160925916687072679e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.113891938530826131e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.883577810848264811e+00 / ln2, --5.113891938530826131e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.923664837455273613e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.553599664845023653e+00 / ln2, --6.584033785323046395e+00 / ln2, --4.691538586043964010e+00 / ln2, --5.959821016291367179e+00 / ln2, --8.350828230729891999e+00 / ln2, --5.397372105698754474e+00 / ln2, --7.359401430306112601e+00 / ln2, --7.959852224170357538e+00 / ln2, --6.694095152899173229e+00 / ln2, --4.143181862813722027e+00 / ln2, --7.048892879291960512e+00 / ln2, --4.841396924932839241e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.013779020202142256e+01 / ln2, --4.642897843502046484e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.919649166968065757e+00 / ln2, --1.094874312386789583e+01 / ln2, --5.025989230275349939e+00 / ln2, --1.115671305913878442e+01 / ln2, --4.604168121450740614e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.867084829257056988e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.562852777492357070e+00 / ln2, --5.316943408775147262e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --7.865295069725402044e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.283998021384489974e+01 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.998325418845404933e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.841396924932839241e+00 / ln2, --6.236592765249644010e+00 / ln2, --5.871019786565007337e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.631360480608693209e+00 / ln2, --1.139296906381306052e+01 / ln2, --4.691538586043964010e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.160925916687072679e+00 / ln2, --5.397372105698754474e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.576662416349575935e+00 / ln2, --7.764755566332865122e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.397372105698754474e+00 / ln2, --5.621647006643879507e+00 / ln2, --9.988776888454795611e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --9.829467623163949952e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.617458030859222795e+00 / ln2, --7.048892879291960512e+00 / ln2, --3.296199802569410142e+00 / ln2, --7.210947893307020351e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.562852777492357070e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.113891938530826131e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.143181862813722027e+00 / ln2, --7.810898878696857395e+00 / ln2, --6.512580640245118957e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.642897843502046484e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.841396924932839241e+00 / ln2, --4.691538586043964010e+00 / ln2, --7.720199943466562686e+00 / ln2, --4.919649166968065757e+00 / ln2, --4.091764045676016259e+00 / ln2, --6.720134407192276171e+00 / ln2, --4.691538586043964010e+00 / ln2, --4.883577810848264811e+00 / ln2, --5.536137450497251145e+00 / ln2, --7.210947893307020351e+00 / ln2, --5.871019786565007337e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.617458030859222795e+00 / ln2, --3.949349394517413181e+00 / ln2, --5.193805121009943626e+00 / ln2, --3.631360480608693209e+00 / ln2, --1.057306084326360640e+01 / ln2, --4.424715454340284460e+00 / ln2, --8.877589121715919518e+00 / ln2, --8.179445530167162914e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.231247566439284569e+00 / ln2, --1.125542566348871354e+01 / ln2, --4.998325418845404933e+00 / ln2, --8.070842469545034703e+00 / ln2, --6.512580640245118957e+00 / ln2, --4.893167479319754598e+00 / ln2, --2.462783453866639771e+00 / ln2, --9.357001407991552000e+00 / ln2, --4.919649166968065757e+00 / ln2, --4.576662416349575935e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.562852777492357070e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.576662416349575935e+00 / ln2, --4.604168121450740614e+00 / ln2, --4.049563242290908249e+00 / ln2, --6.584033785323046395e+00 / ln2, --5.798856991358857016e+00 / ln2, --4.893167479319754598e+00 / ln2, --4.841396924932839241e+00 / ln2, --4.498412758302154479e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.210947893307020351e+00 / ln2, --5.177102904471855283e+00 / ln2, --6.954184282296374420e+00 / ln2, --5.754707819725457085e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.040237040920392531e+01 / ln2, --3.296199802569410142e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.642897843502046484e+00 / ln2, --8.005103642565483568e+00 / ln2, --5.025989230275349939e+00 / ln2, --1.095979992273871417e+01 / ln2, --5.193805121009943626e+00 / ln2, --6.007365244407383287e+00 / ln2, --8.245710019274113733e+00 / ln2, --4.642897843502046484e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.215435559384440367e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.424166483534085259e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.517562281884773157e+00 / ln2, --5.193805121009943626e+00 / ln2, --4.160925916687072679e+00 / ln2, --8.777444697110189153e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.604168121450740614e+00 / ln2, --5.617458030859222795e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.580662492468392522e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.800758034760048254e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.868991888563591885e+00 / ln2, --4.841396924932839241e+00 / ln2, --4.511251163267971265e+00 / ln2, --9.465543819552042493e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.691538586043964010e+00 / ln2, --5.861249608063488381e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.210947893307020351e+00 / ln2, --1.042619382222219038e+01 / ln2, --4.642897843502046484e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.893167479319754598e+00 / ln2, --5.177102904471855283e+00 / ln2, --4.091764045676016259e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.919649166968065757e+00 / ln2, --6.674700103110665417e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.604168121450740614e+00 / ln2, --1.087984978545612869e+01 / ln2, --2.046324443145273619e+00 / ln2, --5.284098860888144067e+00 / ln2, --4.424715454340284460e+00 / ln2, --1.030807112927032776e+01 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --6.121057297107224571e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.223992983953650970e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.021438454248509764e+01 / ln2, --6.517562281884773157e+00 / ln2, --4.998325418845404933e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.615348029313974365e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.763732050866829049e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.439487004418870342e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.160925916687072679e+00 / ln2, --8.812611176663798673e+00 / ln2, --5.332499360388146314e+00 / ln2, --9.907309388480081580e+00 / ln2, --5.415204418624045779e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.183140534972725533e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.048892879291960512e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.397372105698754474e+00 / ln2, --6.944473462017027643e+00 / ln2, --4.143181862813722027e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.971660331060701488e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.893167479319754598e+00 / ln2, --4.511251163267971265e+00 / ln2, --6.885160160725777523e+00 / ln2, --5.193805121009943626e+00 / ln2, --5.415204418624045779e+00 / ln2, --6.517562281884773157e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.691538586043964010e+00 / ln2, --4.580662492468392522e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.562852777492357070e+00 / ln2, --4.604168121450740614e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.621647006643879507e+00 / ln2, --6.406237793012392601e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --9.469708295055941250e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.865295069725402044e+00 / ln2, --4.498412758302154479e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.048892879291960512e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.576662416349575935e+00 / ln2, --3.631360480608693209e+00 / ln2, --1.019261621630061398e+01 / ln2, --5.177102904471855283e+00 / ln2, --6.012689565822368465e+00 / ln2, --5.284098860888144067e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.576662416349575935e+00 / ln2, --4.754337034915018023e+00 / ln2, --5.332499360388146314e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.177102904471855283e+00 / ln2, --4.883577810848264811e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.536137450497251145e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.223992983953650970e+00 / ln2, --1.194242396538278683e+01 / ln2, --4.143181862813722027e+00 / ln2, --8.812268409318086526e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.048696560647437082e+01 / ln2, --5.871019786565007337e+00 / ln2, --1.040237040920392531e+01 / ln2, --3.631360480608693209e+00 / ln2, --4.091764045676016259e+00 / ln2, --3.949349394517413181e+00 / ln2, --6.971660331060701488e+00 / ln2, --5.193805121009943626e+00 / ln2, --8.071909107879246648e+00 / ln2, --5.193805121009943626e+00 / ln2, --6.007365244407383287e+00 / ln2, --4.091764045676016259e+00 / ln2, --1.044570027672111756e+01 / ln2, --5.284098860888144067e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.458537022627602653e+00 / ln2, --4.998325418845404933e+00 / ln2, --8.859835387901323855e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.358997954444022938e+00 / ln2, --5.685674146241039395e+00 / ln2, --8.233702486883688110e+00 / ln2, --3.296199802569410142e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.424166483534085259e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.604168121450740614e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.642897843502046484e+00 / ln2, --1.278432279724004239e+01 / ln2, --9.026976322186319734e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.998325418845404933e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.631360480608693209e+00 / ln2, --7.742568993938474087e+00 / ln2, --3.949349394517413181e+00 / ln2, --1.030807112927032776e+01 / ln2, --2.046324443145273619e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.091764045676016259e+00 / ln2, --6.694546051260094721e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.160925916687072679e+00 / ln2, --8.382633526813590308e+00 / ln2, --5.861249608063488381e+00 / ln2, --1.168986496391243612e+01 / ln2, --4.883577810848264811e+00 / ln2, --7.959852224170357538e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.424166483534085259e+00 / ln2, --5.113891938530826131e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.936476480951127677e+00 / ln2, --4.498412758302154479e+00 / ln2, --6.909735959825669127e+00 / ln2, --6.006187732178176475e+00 / ln2, --5.284098860888144067e+00 / ln2, --5.617458030859222795e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --7.161725488083725111e+00 / ln2, --6.327963919515099178e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.642897843502046484e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.694095152899173229e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.754337034915018023e+00 / ln2, --1.021438454248509764e+01 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.017498482476998589e+00 / ln2, --1.090932255574468179e+01 / ln2, --5.861249608063488381e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.091764045676016259e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.893167479319754598e+00 / ln2, --1.015500071551313432e+01 / ln2, --3.631360480608693209e+00 / ln2, --7.299334151304765150e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.893167479319754598e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.106006057964308731e+01 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.883577810848264811e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.621647006643879507e+00 / ln2, --4.498412758302154479e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.017498482476998589e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.498412758302154479e+00 / ln2, --4.562852777492357070e+00 / ln2, --4.576662416349575935e+00 / ln2, --5.871019786565007337e+00 / ln2, --6.406237793012392601e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.498412758302154479e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.785577344871311922e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --3.631360480608693209e+00 / ln2, --7.048892879291960512e+00 / ln2, --4.580662492468392522e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.841396924932839241e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.754337034915018023e+00 / ln2, --4.883577810848264811e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.284098860888144067e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.299334151304765150e+00 / ln2, --4.498412758302154479e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.808146457075214819e+00 / ln2, --4.160925916687072679e+00 / ln2, --6.391839193742723246e+00 / ln2, --6.223992983953650970e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.576662416349575935e+00 / ln2, --4.091764045676016259e+00 / ln2, --9.615348029313974365e+00 / ln2, --4.580662492468392522e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.576662416349575935e+00 / ln2, --7.184300953920424782e+00 / ln2, --9.370236207688265040e+00 / ln2, --7.865295069725402044e+00 / ln2, --5.871019786565007337e+00 / ln2, --3.631360480608693209e+00 / ln2, --9.883349451013705433e+00 / ln2, --4.754337034915018023e+00 / ln2, --4.691538586043964010e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.512580640245118957e+00 / ln2, --4.841396924932839241e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.617458030859222795e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.542219003269678979e+00 / ln2, --4.143181862813722027e+00 / ln2, --8.657273747556139654e+00 / ln2, --6.720134407192276171e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.424715454340284460e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.861249608063488381e+00 / ln2, --5.861249608063488381e+00 / ln2, --4.576662416349575935e+00 / ln2, --5.553599664845023653e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.517562281884773157e+00 / ln2, --1.040237040920392531e+01 / ln2, --6.694546051260094721e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.871019786565007337e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.754337034915018023e+00 / ln2, --5.871019786565007337e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.893167479319754598e+00 / ln2, --6.121057297107224571e+00 / ln2, --7.699896352130231492e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.284098860888144067e+00 / ln2, --6.425466655005584116e+00 / ln2, --1.013779020202142256e+01 / ln2, --4.841396924932839241e+00 / ln2, --1.204137922631861990e+01 / ln2, --2.046324443145273619e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.959821016291367179e+00 / ln2, --6.498914935067912069e+00 / ln2, --6.909735959825669127e+00 / ln2, --4.143181862813722027e+00 / ln2, --1.143258596730222187e+01 / ln2, --4.576662416349575935e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.841396924932839241e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.195119186325862337e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.113891938530826131e+00 / ln2, --5.542219003269678979e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.779642293724309710e+00 / ln2, --4.919649166968065757e+00 / ln2, --5.195119186325862337e+00 / ln2, --4.511251163267971265e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.871019786565007337e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --7.358997954444022938e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.092512541773554879e+01 / ln2, --1.269438761816860683e+01 / ln2, --4.049563242290908249e+00 / ln2, --9.442907637099850149e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.113891938530826131e+00 / ln2, --4.998325418845404933e+00 / ln2, --4.576662416349575935e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.683429021422371719e+00 / ln2, --3.296199802569410142e+00 / ln2, --8.657273747556139654e+00 / ln2, --4.143181862813722027e+00 / ln2, --9.026976322186319734e+00 / ln2, --4.091764045676016259e+00 / ln2, --6.152879364568431875e+00 / ln2, --6.885183121012873109e+00 / ln2, --8.372987562155319807e+00 / ln2, --7.119927210762653225e+00 / ln2, --5.316943408775147262e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.438636990658810788e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.121057297107224571e+00 / ln2, --4.604168121450740614e+00 / ln2, --6.947297936873974677e+00 / ln2, --4.091764045676016259e+00 / ln2, --3.296199802569410142e+00 / ln2, --1.031514943090967940e+01 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.223992983953650970e+00 / ln2, --6.885160160725777523e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.683429021422371719e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.437619382108458410e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.998325418845404933e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.562852777492357070e+00 / ln2, --5.332499360388146314e+00 / ln2, --1.050516998695719195e+01 / ln2, --5.332499360388146314e+00 / ln2, --8.957187461268130590e+00 / ln2, --4.580662492468392522e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.604168121450740614e+00 / ln2, --4.883577810848264811e+00 / ln2, --4.754337034915018023e+00 / ln2, --5.861249608063488381e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.278597058620684734e+00 / ln2, --4.883577810848264811e+00 / ln2, --8.495410644101937692e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.691538586043964010e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.463978470342545357e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.562852777492357070e+00 / ln2, --3.949349394517413181e+00 / ln2, --3.631360480608693209e+00 / ln2, --1.028217115906610246e+01 / ln2, --4.754337034915018023e+00 / ln2, --8.098608047708514945e+00 / ln2, --4.580662492468392522e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.267062386635592119e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --7.108260886292240066e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.498412758302154479e+00 / ln2, --5.397372105698754474e+00 / ln2, --8.877589121715919518e+00 / ln2, --3.631360480608693209e+00 / ln2, --7.267062386635592119e+00 / ln2, --4.919649166968065757e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.511251163267971265e+00 / ln2, --4.049563242290908249e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.754707819725457085e+00 / ln2, --6.663698816176689910e+00 / ln2, --3.949349394517413181e+00 / ln2, --1.021438454248509764e+01 / ln2, --7.184300953920424782e+00 / ln2, --4.754337034915018023e+00 / ln2, --5.949336081541920507e+00 / ln2, --7.689409517815276374e+00 / ln2, --5.332499360388146314e+00 / ln2, --8.657273747556139654e+00 / ln2, --4.919649166968065757e+00 / ln2, --7.267062386635592119e+00 / ln2, --6.327963919515099178e+00 / ln2, --5.177102904471855283e+00 / ln2, --4.919649166968065757e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.424715454340284460e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.763732050866829049e+00 / ln2, --8.371748526324319428e+00 / ln2, --6.121057297107224571e+00 / ln2, --4.143181862813722027e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.893167479319754598e+00 / ln2, --8.983215916499753817e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.019261621630061398e+01 / ln2, --3.631360480608693209e+00 / ln2, --3.949349394517413181e+00 / ln2, --5.833531233360072399e+00 / ln2, --4.576662416349575935e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.073778889043102325e+01 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.139296906381306052e+01 / ln2, --8.838166443014722873e+00 / ln2, --9.615348029313974365e+00 / ln2, --4.754337034915018023e+00 / ln2, --4.580662492468392522e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.871019786565007337e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.919649166968065757e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.798856991358857016e+00 / ln2, --5.193805121009943626e+00 / ln2, --6.458537022627602653e+00 / ln2, --5.861249608063488381e+00 / ln2, --4.049563242290908249e+00 / ln2, --5.536137450497251145e+00 / ln2, --4.580662492468392522e+00 / ln2, --6.936476480951127677e+00 / ln2, --5.316943408775147262e+00 / ln2, --1.096048994255763454e+01 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.067243984851346639e+00 / ln2, --6.425466655005584116e+00 / ln2, --8.957187461268130590e+00 / ln2, --9.257233588034425864e+00 / ln2, --5.025989230275349939e+00 / ln2, --7.267062386635592119e+00 / ln2, --7.711929296494973940e+00 / ln2, --4.576662416349575935e+00 / ln2, --6.867084829257056988e+00 / ln2, --3.631360480608693209e+00 / ln2, --9.793394681581565564e+00 / ln2, --5.536137450497251145e+00 / ln2, --7.290844047540147699e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.415204418624045779e+00 / ln2, --1.264380688290192367e+01 / ln2, --5.177102904471855283e+00 / ln2, --5.542219003269678979e+00 / ln2, --4.143181862813722027e+00 / ln2, --9.230539968036323373e+00 / ln2, --4.562852777492357070e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.121057297107224571e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.406237793012392601e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.642897843502046484e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.121057297107224571e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.683429021422371719e+00 / ln2, --6.352896081343149426e+00 / ln2, --4.049563242290908249e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.371748526324319428e+00 / ln2, --8.140218559980493040e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.545926888317382009e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.284098860888144067e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.833531233360072399e+00 / ln2, --8.350828230729891999e+00 / ln2, --6.425466655005584116e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.841396924932839241e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.576662416349575935e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.562852777492357070e+00 / ln2, --6.458537022627602653e+00 / ln2, --2.462783453866639771e+00 / ln2, --9.874321064688381000e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.861249608063488381e+00 / ln2, --7.868991888563591885e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.143181862813722027e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.604168121450740614e+00 / ln2, --6.694546051260094721e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.621647006643879507e+00 / ln2, --5.861249608063488381e+00 / ln2, --6.425466655005584116e+00 / ln2, --4.754337034915018023e+00 / ln2, --3.949349394517413181e+00 / ln2, --6.584033785323046395e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --7.368858813512747297e+00 / ln2, --6.007365244407383287e+00 / ln2, --9.734695089071365715e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.883577810848264811e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.663408750741215414e+00 / ln2, --4.841396924932839241e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.000368956169869428e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.143181862813722027e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.871019786565007337e+00 / ln2, --3.949349394517413181e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.754337034915018023e+00 / ln2, --6.017498482476998589e+00 / ln2, --7.703898338055121364e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.071909107879246648e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --5.332499360388146314e+00 / ln2, --5.553599664845023653e+00 / ln2, --4.919649166968065757e+00 / ln2, --4.691538586043964010e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.691538586043964010e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.871019786565007337e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.861249608063488381e+00 / ln2, --4.562852777492357070e+00 / ln2, --9.793394681581565564e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.893167479319754598e+00 / ln2, --5.193805121009943626e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.424715454340284460e+00 / ln2, --5.025989230275349939e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.861249608063488381e+00 / ln2, --5.193805121009943626e+00 / ln2, --4.498412758302154479e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.101578299844018893e+01 / ln2, --3.631360480608693209e+00 / ln2, --7.186698218369051538e+00 / ln2, --5.536137450497251145e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.954184282296374420e+00 / ln2, --4.754337034915018023e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.812268409318086526e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.893167479319754598e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.017498482476998589e+00 / ln2, --9.357001407991552000e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.557802589052355913e+00 / ln2, --4.754337034915018023e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.841396924932839241e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.861249608063488381e+00 / ln2, --9.026976322186319734e+00 / ln2, --4.604168121450740614e+00 / ln2, --6.425466655005584116e+00 / ln2, --4.562852777492357070e+00 / ln2, --3.949349394517413181e+00 / ln2, --7.119927210762653225e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.604168121450740614e+00 / ln2, --3.631360480608693209e+00 / ln2, --7.048892879291960512e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.685674146241039395e+00 / ln2, --9.224702791393450951e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.841396924932839241e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.861249608063488381e+00 / ln2, --6.532634035752141521e+00 / ln2, --6.694546051260094721e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.049563242290908249e+00 / ln2, --5.415204418624045779e+00 / ln2, --5.685674146241039395e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.284098860888144067e+00 / ln2, --4.691538586043964010e+00 / ln2, --5.621647006643879507e+00 / ln2, --5.025989230275349939e+00 / ln2, --3.296199802569410142e+00 / ln2, --1.165915831016035398e+01 / ln2, --5.195119186325862337e+00 / ln2, --1.054482717141193682e+01 / ln2, --4.841396924932839241e+00 / ln2, --6.694095152899173229e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.642897843502046484e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.397372105698754474e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.048892879291960512e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.049563242290908249e+00 / ln2, --5.542219003269678979e+00 / ln2, --4.424715454340284460e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.397372105698754474e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.316943408775147262e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.562852777492357070e+00 / ln2, --1.095979992273871417e+01 / ln2, --5.798856991358857016e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.758886612591042287e+00 / ln2, --5.754707819725457085e+00 / ln2, --5.861249608063488381e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.636130365971254719e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.022806380334262855e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.223992983953650970e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.425466655005584116e+00 / ln2, --6.007365244407383287e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.358997954444022938e+00 / ln2, --4.424715454340284460e+00 / ln2, --7.545926888317382009e+00 / ln2, --8.447106204735684187e+00 / ln2, --6.425466655005584116e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.871019786565007337e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.425466655005584116e+00 / ln2, --6.674700103110665417e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.017498482476998589e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.871019786565007337e+00 / ln2, --4.893167479319754598e+00 / ln2, --5.542219003269678979e+00 / ln2, --5.332499360388146314e+00 / ln2, --6.152879364568431875e+00 / ln2, --5.177102904471855283e+00 / ln2, --5.195119186325862337e+00 / ln2, --5.871019786565007337e+00 / ln2, --7.619344887229415164e+00 / ln2, --4.580662492468392522e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.691538586043964010e+00 / ln2, --5.536137450497251145e+00 / ln2, --3.296199802569410142e+00 / ln2, --8.807386367050035858e+00 / ln2, --2.462783453866639771e+00 / ln2, --8.447106204735684187e+00 / ln2, --6.512580640245118957e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.919649166968065757e+00 / ln2, --5.542219003269678979e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.193805121009943626e+00 / ln2, --6.763732050866829049e+00 / ln2, --6.236592765249644010e+00 / ln2, --1.050516998695719195e+01 / ln2, --2.046324443145273619e+00 / ln2, --5.195119186325862337e+00 / ln2, --5.685674146241039395e+00 / ln2, --6.971660331060701488e+00 / ln2, --4.642897843502046484e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.069538553398722058e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.763732050866829049e+00 / ln2, --4.919649166968065757e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.415204418624045779e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.861249608063488381e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.553599664845023653e+00 / ln2, --5.113891938530826131e+00 / ln2, --9.484310506563019771e+00 / ln2, --8.022806380334262855e+00 / ln2, --5.193805121009943626e+00 / ln2, --4.091764045676016259e+00 / ln2, --6.909735959825669127e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.923664837455273613e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.919649166968065757e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.576662416349575935e+00 / ln2, --9.469708295055941250e+00 / ln2, --4.580662492468392522e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.424715454340284460e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.604168121450740614e+00 / ln2, --7.183140534972725533e+00 / ln2, --4.691538586043964010e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.458537022627602653e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --8.245710019274113733e+00 / ln2, --7.553188966816772876e+00 / ln2, --6.674700103110665417e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.193805121009943626e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.871019786565007337e+00 / ln2, --4.091764045676016259e+00 / ln2, --6.694095152899173229e+00 / ln2, --4.143181862813722027e+00 / ln2, --3.949349394517413181e+00 / ln2, --7.186698218369051538e+00 / ln2, --4.160925916687072679e+00 / ln2, --7.868991888563591885e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.121057297107224571e+00 / ln2, --6.006187732178176475e+00 / ln2, --4.160925916687072679e+00 / ln2, --5.284098860888144067e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.143181862813722027e+00 / ln2, --7.184300953920424782e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.949336081541920507e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.484310506563019771e+00 / ln2, --6.007365244407383287e+00 / ln2, --1.145387772643075230e+01 / ln2, --2.046324443145273619e+00 / ln2, --6.812113812154088954e+00 / ln2, --6.803544138091067062e+00 / ln2, --6.215435559384440367e+00 / ln2, --5.536137450497251145e+00 / ln2, --4.424715454340284460e+00 / ln2, --1.150475124638018443e+01 / ln2, --4.091764045676016259e+00 / ln2, --7.619344887229415164e+00 / ln2, --5.284098860888144067e+00 / ln2, --7.104077188637425877e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.049563242290908249e+00 / ln2, --6.763732050866829049e+00 / ln2, --7.048892879291960512e+00 / ln2, --1.031514943090967940e+01 / ln2, --3.296199802569410142e+00 / ln2, --4.841396924932839241e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.691538586043964010e+00 / ln2, --1.283998021384489974e+01 / ln2, --4.143181862813722027e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.193805121009943626e+00 / ln2, --5.923664837455273613e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.415204418624045779e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.000368956169869428e+00 / ln2, --7.048892879291960512e+00 / ln2, --7.210947893307020351e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.284098860888144067e+00 / ln2, --4.998325418845404933e+00 / ln2, --1.090932255574468179e+01 / ln2, --3.296199802569410142e+00 / ln2, --1.000340241762609317e+01 / ln2, --2.462783453866639771e+00 / ln2, --6.674700103110665417e+00 / ln2, --5.193805121009943626e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.223992983953650970e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.576662416349575935e+00 / ln2, --4.883577810848264811e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --7.000368956169869428e+00 / ln2, --4.049563242290908249e+00 / ln2, --6.944473462017027643e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.883577810848264811e+00 / ln2, --5.284098860888144067e+00 / ln2, --6.674700103110665417e+00 / ln2, --4.576662416349575935e+00 / ln2, --2.462783453866639771e+00 / ln2, --8.663408750741215414e+00 / ln2, --5.949336081541920507e+00 / ln2, --4.143181862813722027e+00 / ln2, --7.483355190078385455e+00 / ln2, --8.839003156104606518e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.332499360388146314e+00 / ln2, --5.674889513884615155e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.919649166968065757e+00 / ln2, --4.893167479319754598e+00 / ln2, --7.684202738748299844e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.861249608063488381e+00 / ln2, --6.121057297107224571e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.177102904471855283e+00 / ln2, --5.113891938530826131e+00 / ln2, --5.195119186325862337e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.143181862813722027e+00 / ln2, --7.048892879291960512e+00 / ln2, --8.071909107879246648e+00 / ln2, --5.284098860888144067e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.050516998695719195e+01 / ln2, --6.944473462017027643e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.621647006643879507e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.484916075864178175e+00 / ln2, --5.025989230275349939e+00 / ln2, --7.553188966816772876e+00 / ln2, --6.425466655005584116e+00 / ln2, --7.119927210762653225e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.617458030859222795e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.327920672174300876e+00 / ln2, --4.604168121450740614e+00 / ln2, --6.017498482476998589e+00 / ln2, --5.923664837455273613e+00 / ln2, --6.867084829257056988e+00 / ln2, --7.684202738748299844e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.893167479319754598e+00 / ln2, --4.841396924932839241e+00 / ln2, --4.143181862813722027e+00 / ln2, --7.683429021422371719e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.576662416349575935e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.327920672174300876e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.345707246405288160e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.576662416349575935e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.224969357884932641e+01 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.006187732178176475e+00 / ln2, --4.883577810848264811e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.073778889043102325e+01 / ln2, --1.301233579505205462e+01 / ln2, --4.883577810848264811e+00 / ln2, --6.674700103110665417e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.841396924932839241e+00 / ln2, --6.327963919515099178e+00 / ln2, --5.345707246405288160e+00 / ln2, --7.299334151304765150e+00 / ln2, --1.132541823088126165e+01 / ln2, --5.195119186325862337e+00 / ln2, --6.812113812154088954e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.789351191264211494e+00 / ln2, --6.425466655005584116e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.113891938530826131e+00 / ln2, --5.284098860888144067e+00 / ln2, --7.789351191264211494e+00 / ln2, --5.284098860888144067e+00 / ln2, --4.841396924932839241e+00 / ln2, --6.694546051260094721e+00 / ln2, --7.184300953920424782e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.121057297107224571e+00 / ln2, --8.847574884292626507e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.498412758302154479e+00 / ln2, --7.545926888317382009e+00 / ln2, --7.703898338055121364e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.358997954444022938e+00 / ln2, --4.562852777492357070e+00 / ln2, --5.959821016291367179e+00 / ln2, --5.861249608063488381e+00 / ln2, --6.532634035752141521e+00 / ln2, --6.584033785323046395e+00 / ln2, --3.296199802569410142e+00 / ln2, --8.617690255987351833e+00 / ln2, --6.515023211937145398e+00 / ln2, --6.006187732178176475e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.674889513884615155e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.576662416349575935e+00 / ln2, --4.091764045676016259e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.584033785323046395e+00 / ln2, --7.606027863309607895e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.691538586043964010e+00 / ln2, --6.236592765249644010e+00 / ln2, --6.720134407192276171e+00 / ln2, --8.823256313576475662e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.469708295055941250e+00 / ln2, --5.284098860888144067e+00 / ln2, --8.072732339370881860e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.576662416349575935e+00 / ln2, --5.345707246405288160e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.971660331060701488e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.959821016291367179e+00 / ln2, --1.028217115906610246e+01 / ln2, --4.893167479319754598e+00 / ln2, --4.498412758302154479e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.631360480608693209e+00 / ln2, --7.789351191264211494e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.754337034915018023e+00 / ln2, --5.113891938530826131e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.604168121450740614e+00 / ln2, --7.553188966816772876e+00 / ln2, --4.424715454340284460e+00 / ln2, --6.720134407192276171e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.604168121450740614e+00 / ln2, --5.871019786565007337e+00 / ln2, --8.812611176663798673e+00 / ln2, --3.631360480608693209e+00 / ln2, --9.465543819552042493e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.861249608063488381e+00 / ln2, --4.091764045676016259e+00 / ln2, --7.184300953920424782e+00 / ln2, --4.893167479319754598e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.483355190078385455e+00 / ln2, --6.067243984851346639e+00 / ln2, --4.893167479319754598e+00 / ln2, --3.296199802569410142e+00 / ln2, --7.959852224170357538e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.919649166968065757e+00 / ln2, --5.798856991358857016e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.415204418624045779e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.893167479319754598e+00 / ln2, --9.315078460598257948e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.091764045676016259e+00 / ln2, --3.631360480608693209e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.576662416349575935e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.909735959825669127e+00 / ln2, --9.583781920109638364e+00 / ln2, --4.604168121450740614e+00 / ln2, --7.184300953920424782e+00 / ln2, --4.580662492468392522e+00 / ln2, --6.812113812154088954e+00 / ln2, --5.542219003269678979e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.532634035752141521e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.462783453866639771e+00 / ln2, --9.907309388480081580e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.223992983953650970e+00 / ln2, --6.017498482476998589e+00 / ln2, --8.823256313576475662e+00 / ln2, --5.193805121009943626e+00 / ln2, --7.934968049655386935e+00 / ln2, --4.580662492468392522e+00 / ln2, --7.368858813512747297e+00 / ln2, --1.258907280406040030e+01 / ln2, --2.046324443145273619e+00 / ln2, --4.424715454340284460e+00 / ln2, --1.092512541773554879e+01 / ln2, --6.600485884087979649e+00 / ln2, --6.327963919515099178e+00 / ln2, --5.542219003269678979e+00 / ln2, --4.893167479319754598e+00 / ln2, --5.949336081541920507e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.691538586043964010e+00 / ln2, --7.766312407968571918e+00 / ln2, --6.954184282296374420e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.925486712770660702e+01 / ln2, --5.617458030859222795e+00 / ln2, --7.742568993938474087e+00 / ln2, --5.025989230275349939e+00 / ln2, --1.095979992273871417e+01 / ln2, --1.171395710922925026e+01 / ln2, --2.462783453866639771e+00 / ln2, --6.424166483534085259e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.022806380334262855e+00 / ln2, --9.370236207688265040e+00 / ln2, --5.177102904471855283e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.515023211937145398e+00 / ln2, --7.184300953920424782e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.833531233360072399e+00 / ln2, --6.694095152899173229e+00 / ln2, --1.278432279724004239e+01 / ln2, --4.604168121450740614e+00 / ln2, --7.048892879291960512e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.553599664845023653e+00 / ln2, --5.536137450497251145e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.332499360388146314e+00 / ln2, --1.316151932531392532e+01 / ln2, --4.143181862813722027e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.841396924932839241e+00 / ln2, --9.583781920109638364e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.576662416349575935e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.447790001659071457e+00 / ln2, --4.562852777492357070e+00 / ln2, --7.161725488083725111e+00 / ln2, --7.295589409525732094e+00 / ln2, --5.415204418624045779e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.177102904471855283e+00 / ln2, --2.462783453866639771e+00 / ln2, --9.874321064688381000e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.143181862813722027e+00 / ln2, --6.007365244407383287e+00 / ln2, --4.754337034915018023e+00 / ln2, --6.425466655005584116e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.691538586043964010e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.542219003269678979e+00 / ln2, --7.810898878696857395e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.160925916687072679e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.871019786565007337e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.691538586043964010e+00 / ln2, --7.184300953920424782e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.642897843502046484e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.498412758302154479e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.754337034915018023e+00 / ln2, --7.517325864764372589e+00 / ln2, --6.017498482476998589e+00 / ln2, --1.106006057964308731e+01 / ln2, --9.442907637099850149e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.177102904471855283e+00 / ln2, --1.094874312386789583e+01 / ln2, --7.267062386635592119e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.462783453866639771e+00 / ln2, --8.005103642565483568e+00 / ln2, --4.511251163267971265e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.049563242290908249e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.091764045676016259e+00 / ln2, --1.019261621630061398e+01 / ln2, --4.562852777492357070e+00 / ln2, --4.754337034915018023e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.424715454340284460e+00 / ln2, --1.101578299844018893e+01 / ln2, --9.121101243974623074e+00 / ln2, --4.998325418845404933e+00 / ln2, --4.562852777492357070e+00 / ln2, --4.498412758302154479e+00 / ln2, --6.674700103110665417e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.049563242290908249e+00 / ln2, --5.345707246405288160e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.511251163267971265e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.861249608063488381e+00 / ln2, --3.949349394517413181e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.619344887229415164e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --3.949349394517413181e+00 / ln2, --6.909735959825669127e+00 / ln2, --7.184300953920424782e+00 / ln2, --6.425466655005584116e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.871019786565007337e+00 / ln2, --6.017498482476998589e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.754337034915018023e+00 / ln2, --5.798856991358857016e+00 / ln2, --4.998325418845404933e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.949336081541920507e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.327963919515099178e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.604168121450740614e+00 / ln2, --1.316151932531392532e+01 / ln2, --3.631360480608693209e+00 / ln2, --6.152879364568431875e+00 / ln2, --4.893167479319754598e+00 / ln2, --4.091764045676016259e+00 / ln2, --7.021711310391386185e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.424715454340284460e+00 / ln2, --8.447106204735684187e+00 / ln2, --6.121057297107224571e+00 / ln2, --3.631360480608693209e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.604168121450740614e+00 / ln2, --4.893167479319754598e+00 / ln2, --1.019261621630061398e+01 / ln2, --5.113891938530826131e+00 / ln2, --5.997831470194255665e+00 / ln2, --1.013779020202142256e+01 / ln2, --1.098983619591661487e+01 / ln2, --5.861249608063488381e+00 / ln2, --8.839003156104606518e+00 / ln2, --5.617458030859222795e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.617458030859222795e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.909735959825669127e+00 / ln2, --9.357001407991552000e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.332499360388146314e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.177102904471855283e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.947297936873974677e+00 / ln2, --4.511251163267971265e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.883577810848264811e+00 / ln2, --7.720199943466562686e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.893167479319754598e+00 / ln2, --5.758886612591042287e+00 / ln2, --4.576662416349575935e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.841396924932839241e+00 / ln2, --3.296199802569410142e+00 / ln2, --7.764755566332865122e+00 / ln2, --8.859835387901323855e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.258907280406040030e+01 / ln2, --4.691538586043964010e+00 / ln2, --4.691538586043964010e+00 / ln2, --2.462783453866639771e+00 / ln2, --8.447106204735684187e+00 / ln2, --5.758886612591042287e+00 / ln2, --4.498412758302154479e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.415204418624045779e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.893167479319754598e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.511251163267971265e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.691538586043964010e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.483355190078385455e+00 / ln2, --5.415204418624045779e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.517325864764372589e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.327963919515099178e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.998325418845404933e+00 / ln2, --4.919649166968065757e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.204137922631861990e+01 / ln2, --6.017498482476998589e+00 / ln2, --4.604168121450740614e+00 / ln2, --7.356251338206809542e+00 / ln2, --5.345707246405288160e+00 / ln2, --7.223375476872481826e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.893167479319754598e+00 / ln2, --1.143258596730222187e+01 / ln2, --6.694546051260094721e+00 / ln2, --4.754337034915018023e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.532634035752141521e+00 / ln2, --5.332499360388146314e+00 / ln2, --6.017498482476998589e+00 / ln2, --4.576662416349575935e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.919649166968065757e+00 / ln2, --5.284098860888144067e+00 / ln2, --8.812611176663798673e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.193805121009943626e+00 / ln2, --4.498412758302154479e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.949336081541920507e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.576662416349575935e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.812268409318086526e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.936476480951127677e+00 / ln2, --8.232504733803645891e+00 / ln2, --9.662729593866675515e+00 / ln2, --6.812113812154088954e+00 / ln2, --4.883577810848264811e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.959852224170357538e+00 / ln2, --5.193805121009943626e+00 / ln2, --7.186698218369051538e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.883577810848264811e+00 / ln2, --5.177102904471855283e+00 / ln2, --5.685674146241039395e+00 / ln2, --5.536137450497251145e+00 / ln2, --7.517325864764372589e+00 / ln2, --8.746627133441950974e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.949336081541920507e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.617458030859222795e+00 / ln2, --5.195119186325862337e+00 / ln2, --3.296199802569410142e+00 / ln2, --7.186698218369051538e+00 / ln2, --8.839003156104606518e+00 / ln2, --4.919649166968065757e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.576662416349575935e+00 / ln2, --5.997831470194255665e+00 / ln2, --4.143181862813722027e+00 / ln2, --8.983215916499753817e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.316943408775147262e+00 / ln2, --4.691538586043964010e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.580662492468392522e+00 / ln2, --4.049563242290908249e+00 / ln2, --5.536137450497251145e+00 / ln2, --6.152879364568431875e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.195119186325862337e+00 / ln2, --8.557802589052355913e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.919649166968065757e+00 / ln2, --6.352896081343149426e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.113891938530826131e+00 / ln2, --4.576662416349575935e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.833531233360072399e+00 / ln2, --8.103230206446424333e+00 / ln2, --5.193805121009943626e+00 / ln2, --6.152879364568431875e+00 / ln2, --6.458537022627602653e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.529197793097948121e+00 / ln2, --6.121057297107224571e+00 / ln2, --4.604168121450740614e+00 / ln2, --5.674889513884615155e+00 / ln2, --1.115671305913878442e+01 / ln2, --2.462783453866639771e+00 / ln2, --4.883577810848264811e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.584033785323046395e+00 / ln2, --5.754707819725457085e+00 / ln2, --4.754337034915018023e+00 / ln2, --6.971660331060701488e+00 / ln2, --7.021711310391386185e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.284098860888144067e+00 / ln2, --4.919649166968065757e+00 / ln2, --1.344520137693501916e+01 / ln2, --5.758886612591042287e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.017498482476998589e+00 / ln2, --5.332499360388146314e+00 / ln2, --1.283998021384489974e+01 / ln2, --4.049563242290908249e+00 / ln2, --5.345707246405288160e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.007365244407383287e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.959852224170357538e+00 / ln2, --6.515023211937145398e+00 / ln2, --9.990045079829323882e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.542219003269678979e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.031514943090967940e+01 / ln2, --2.462783453866639771e+00 / ln2, --6.017498482476998589e+00 / ln2, --4.143181862813722027e+00 / ln2, --3.296199802569410142e+00 / ln2, --7.766312407968571918e+00 / ln2, --7.689409517815276374e+00 / ln2, --8.071909107879246648e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.883577810848264811e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.576662416349575935e+00 / ln2, --4.754337034915018023e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.511251163267971265e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.754707819725457085e+00 / ln2, --6.223992983953650970e+00 / ln2, --4.049563242290908249e+00 / ln2, --6.017498482476998589e+00 / ln2, --8.839003156104606518e+00 / ln2, --6.674700103110665417e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.657273747556139654e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.580662492468392522e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.919649166968065757e+00 / ln2, --7.447790001659071457e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.542219003269678979e+00 / ln2, --8.774158714333733400e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.959821016291367179e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.332499360388146314e+00 / ln2, --6.286368968884687547e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.841396924932839241e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.160925916687072679e+00 / ln2, --3.949349394517413181e+00 / ln2, --5.685674146241039395e+00 / ln2, --9.439487004418870342e+00 / ln2, --4.604168121450740614e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.070585939587089008e+01 / ln2, --5.861249608063488381e+00 / ln2, --5.617458030859222795e+00 / ln2, --5.113891938530826131e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.278432279724004239e+01 / ln2, --4.754337034915018023e+00 / ln2, --4.160925916687072679e+00 / ln2, --5.617458030859222795e+00 / ln2, --4.576662416349575935e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.562852777492357070e+00 / ln2, --6.584033785323046395e+00 / ln2, --5.113891938530826131e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.284098860888144067e+00 / ln2, --5.345707246405288160e+00 / ln2, --7.048892879291960512e+00 / ln2, --1.123110138025548643e+01 / ln2, --6.463978470342545357e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.332499360388146314e+00 / ln2, --8.350828230729891999e+00 / ln2, --7.327920672174300876e+00 / ln2, --1.143258596730222187e+01 / ln2, --5.332499360388146314e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.604168121450740614e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.515023211937145398e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.621647006643879507e+00 / ln2, --7.810898878696857395e+00 / ln2, --1.025011173880692184e+01 / ln2, --4.604168121450740614e+00 / ln2, --5.113891938530826131e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.871019786565007337e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.893167479319754598e+00 / ln2, --4.691538586043964010e+00 / ln2, --5.113891938530826131e+00 / ln2, --1.344520137693501916e+01 / ln2, --4.091764045676016259e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.754337034915018023e+00 / ln2, --7.161725488083725111e+00 / ln2, --4.049563242290908249e+00 / ln2, --7.356251338206809542e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --1.171395710922925026e+01 / ln2, --4.919649166968065757e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.195119186325862337e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.810898878696857395e+00 / ln2, --5.542219003269678979e+00 / ln2, --4.143181862813722027e+00 / ln2, --6.663698816176689910e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --9.829467623163949952e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --9.529197793097948121e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.150475124638018443e+01 / ln2, --5.193805121009943626e+00 / ln2, --8.605315052977417167e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.284098860888144067e+00 / ln2, --9.785577344871311922e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.057958593457523300e+00 / ln2, --7.267062386635592119e+00 / ln2, --8.371748526324319428e+00 / ln2, --1.021438454248509764e+01 / ln2, --6.067243984851346639e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.893167479319754598e+00 / ln2, --5.617458030859222795e+00 / ln2, --4.091764045676016259e+00 / ln2, --7.684202738748299844e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.484310506563019771e+00 / ln2, --5.193805121009943626e+00 / ln2, --5.025989230275349939e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.562852777492357070e+00 / ln2, --4.604168121450740614e+00 / ln2, --9.662729593866675515e+00 / ln2, --6.971660331060701488e+00 / ln2, --6.223992983953650970e+00 / ln2, --1.150475124638018443e+01 / ln2, --2.462783453866639771e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.720134407192276171e+00 / ln2, --3.631360480608693209e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.498412758302154479e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.516887900787997623e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.123110138025548643e+01 / ln2, --5.193805121009943626e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.012900414694919959e+01 / ln2, --6.327963919515099178e+00 / ln2, --3.949349394517413181e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.049563242290908249e+00 / ln2, --6.286368968884687547e+00 / ln2, --6.017498482476998589e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.424715454340284460e+00 / ln2, --3.631360480608693209e+00 / ln2, --7.564037047890797894e+00 / ln2, --4.883577810848264811e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.049563242290908249e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.604168121450740614e+00 / ln2, --4.143181862813722027e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.691538586043964010e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.861249608063488381e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --8.371748526324319428e+00 / ln2, --5.871019786565007337e+00 / ln2, --6.517562281884773157e+00 / ln2, --3.296199802569410142e+00 / ln2, --7.766312407968571918e+00 / ln2, --4.919649166968065757e+00 / ln2, --6.532634035752141521e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.576662416349575935e+00 / ln2, --6.512580640245118957e+00 / ln2, --1.283998021384489974e+01 / ln2, --4.049563242290908249e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.119927210762653225e+00 / ln2, --6.458537022627602653e+00 / ln2, --6.017498482476998589e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.025989230275349939e+00 / ln2, --8.957187461268130590e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.424166483534085259e+00 / ln2, --5.193805121009943626e+00 / ln2, --5.833531233360072399e+00 / ln2, --4.562852777492357070e+00 / ln2, --7.184300953920424782e+00 / ln2, --4.691538586043964010e+00 / ln2, --1.166627883103860697e+01 / ln2, --1.123286076255336674e+01 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.143181862813722027e+00 / ln2, --6.694546051260094721e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.562852777492357070e+00 / ln2, --1.005049580306630475e+01 / ln2, --5.542219003269678979e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.031514943090967940e+01 / ln2, --5.536137450497251145e+00 / ln2, --8.382633526813590308e+00 / ln2, --4.691538586043964010e+00 / ln2, --5.871019786565007337e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.760673288736205322e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.177102904471855283e+00 / ln2, --9.493114258108283465e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.406237793012392601e+00 / ln2, --9.670124616416384100e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.424715454340284460e+00 / ln2, --5.754707819725457085e+00 / ln2, --5.345707246405288160e+00 / ln2, --4.049563242290908249e+00 / ln2, --1.204137922631861990e+01 / ln2, --4.143181862813722027e+00 / ln2, --8.233702486883688110e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.132541823088126165e+01 / ln2, --8.245710019274113733e+00 / ln2, --6.286368968884687547e+00 / ln2, --6.017498482476998589e+00 / ln2, --4.580662492468392522e+00 / ln2, --1.031514943090967940e+01 / ln2, --2.046324443145273619e+00 / ln2, --6.007365244407383287e+00 / ln2, --4.091764045676016259e+00 / ln2, --8.098608047708514945e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.829467623163949952e+00 / ln2, --4.691538586043964010e+00 / ln2, --6.600485884087979649e+00 / ln2, --6.017498482476998589e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.424166483534085259e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.424166483534085259e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.025989230275349939e+00 / ln2, --7.684202738748299844e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.195119186325862337e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.580662492468392522e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.754707819725457085e+00 / ln2, --8.140218559980493040e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.833531233360072399e+00 / ln2, --4.919649166968065757e+00 / ln2, --5.345707246405288160e+00 / ln2, --5.861249608063488381e+00 / ln2, --5.284098860888144067e+00 / ln2, --5.861249608063488381e+00 / ln2, --1.115671305913878442e+01 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.909735959825669127e+00 / ln2, --8.447106204735684187e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.223992983953650970e+00 / ln2, --1.044570027672111756e+01 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --5.536137450497251145e+00 / ln2, --1.283998021384489974e+01 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.462783453866639771e+00 / ln2, --8.022806380334262855e+00 / ln2, --1.012394981767910984e+01 / ln2, --4.049563242290908249e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.223992983953650970e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.998325418845404933e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.576662416349575935e+00 / ln2, --5.332499360388146314e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.124880459954479939e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.515023211937145398e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.580662492468392522e+00 / ln2, --4.604168121450740614e+00 / ln2, --6.532634035752141521e+00 / ln2, --3.949349394517413181e+00 / ln2, --4.511251163267971265e+00 / ln2, --5.193805121009943626e+00 / ln2, --4.143181862813722027e+00 / ln2, --9.793394681581565564e+00 / ln2, --5.397372105698754474e+00 / ln2, --6.152879364568431875e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.424715454340284460e+00 / ln2, --7.210947893307020351e+00 / ln2, --4.562852777492357070e+00 / ln2, --7.564037047890797894e+00 / ln2, --6.017498482476998589e+00 / ln2, --4.511251163267971265e+00 / ln2, --4.143181862813722027e+00 / ln2, --7.290844047540147699e+00 / ln2, --6.017498482476998589e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.691538586043964010e+00 / ln2, --6.223992983953650970e+00 / ln2, --7.699896352130231492e+00 / ln2, --4.883577810848264811e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.580662492468392522e+00 / ln2, --4.498412758302154479e+00 / ln2, --7.259851116637276114e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.049563242290908249e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.923664837455273613e+00 / ln2, --6.517562281884773157e+00 / ln2, --6.512580640245118957e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.691538586043964010e+00 / ln2, --4.691538586043964010e+00 / ln2, --7.689409517815276374e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.604168121450740614e+00 / ln2, --5.284098860888144067e+00 / ln2, --2.462783453866639771e+00 / ln2, --9.069538553398722058e+00 / ln2, --6.663698816176689910e+00 / ln2, --5.674889513884615155e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.893167479319754598e+00 / ln2, --8.657273747556139654e+00 / ln2, --9.069538553398722058e+00 / ln2, --9.572656522993996830e+00 / ln2, --6.909735959825669127e+00 / ln2, --5.861249608063488381e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.893167479319754598e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.184300953920424782e+00 / ln2, --3.296199802569410142e+00 / ln2, --1.057306084326360640e+01 / ln2, --5.685674146241039395e+00 / ln2, --4.091764045676016259e+00 / ln2, --1.071750970431373773e+01 / ln2, --6.512580640245118957e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.685674146241039395e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.536137450497251145e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.841396924932839241e+00 / ln2, --5.754707819725457085e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.160925916687072679e+00 / ln2, --5.195119186325862337e+00 / ln2, --3.296199802569410142e+00 / ln2, --8.551979924991755411e+00 / ln2, --3.949349394517413181e+00 / ln2, --3.296199802569410142e+00 / ln2, --7.959852224170357538e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.949336081541920507e+00 / ln2, --6.867084829257056988e+00 / ln2, --5.316943408775147262e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.210947893307020351e+00 / ln2, --4.143181862813722027e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.498412758302154479e+00 / ln2, --6.017498482476998589e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.511251163267971265e+00 / ln2, --4.841396924932839241e+00 / ln2, --5.674889513884615155e+00 / ln2, --9.793394681581565564e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.223992983953650970e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.193805121009943626e+00 / ln2, --8.663408750741215414e+00 / ln2, --4.998325418845404933e+00 / ln2, --7.553188966816772876e+00 / ln2, --4.580662492468392522e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.576662416349575935e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.691538586043964010e+00 / ln2, --4.160925916687072679e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --1.836307946957008141e+01 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.959821016291367179e+00 / ln2, --7.299334151304765150e+00 / ln2, --7.295589409525732094e+00 / ln2, --4.562852777492357070e+00 / ln2, --9.442907637099850149e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.424715454340284460e+00 / ln2, --5.025989230275349939e+00 / ln2, --6.674700103110665417e+00 / ln2, --8.350828230729891999e+00 / ln2, --4.576662416349575935e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.424715454340284460e+00 / ln2, --6.121057297107224571e+00 / ln2, --9.829467623163949952e+00 / ln2, --5.553599664845023653e+00 / ln2, --6.007365244407383287e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.691538586043964010e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --6.803544138091067062e+00 / ln2, --1.301233579505205462e+01 / ln2, --1.836307946957008141e+01 / ln2, --2.046324443145273619e+00 / ln2, --4.049563242290908249e+00 / ln2, --6.512580640245118957e+00 / ln2, --5.345707246405288160e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.130108731959751189e+01 / ln2, --4.562852777492357070e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.498412758302154479e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.193805121009943626e+00 / ln2, --5.959821016291367179e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --8.605315052977417167e+00 / ln2, --4.841396924932839241e+00 / ln2, --6.512580640245118957e+00 / ln2, --4.604168121450740614e+00 / ln2, --5.949336081541920507e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.576662416349575935e+00 / ln2, --4.143181862813722027e+00 / ln2, --7.959852224170357538e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.424715454340284460e+00 / ln2, --7.290844047540147699e+00 / ln2, --5.284098860888144067e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.048892879291960512e+00 / ln2, --4.143181862813722027e+00 / ln2, --6.512580640245118957e+00 / ln2, --7.810898878696857395e+00 / ln2, --3.949349394517413181e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.267062386635592119e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.073778889043102325e+01 / ln2, --4.893167479319754598e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --7.517325864764372589e+00 / ln2, --1.054482717141193682e+01 / ln2, --3.631360480608693209e+00 / ln2, --5.861249608063488381e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.193805121009943626e+00 / ln2, --5.871019786565007337e+00 / ln2, --1.123110138025548643e+01 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.580662492468392522e+00 / ln2, --5.195119186325862337e+00 / ln2, --4.754337034915018023e+00 / ln2, --4.143181862813722027e+00 / ln2, --6.007365244407383287e+00 / ln2, --4.160925916687072679e+00 / ln2, --7.742568993938474087e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.683429021422371719e+00 / ln2, --8.551979924991755411e+00 / ln2, --9.172628873852490372e+00 / ln2, --4.841396924932839241e+00 / ln2, --4.424715454340284460e+00 / ln2, --1.115671305913878442e+01 / ln2, --2.046324443145273619e+00 / ln2, --1.095979992273871417e+01 / ln2, --5.536137450497251145e+00 / ln2, --1.025159966901359709e+01 / ln2, --7.720199943466562686e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.382633526813590308e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.042619382222219038e+01 / ln2, --2.046324443145273619e+00 / ln2, --5.617458030859222795e+00 / ln2, --1.154814228758357153e+01 / ln2, --7.703898338055121364e+00 / ln2, --4.893167479319754598e+00 / ln2, --6.947297936873974677e+00 / ln2, --4.091764045676016259e+00 / ln2, --6.694546051260094721e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.091764045676016259e+00 / ln2, --6.391839193742723246e+00 / ln2, --7.959852224170357538e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.959852224170357538e+00 / ln2, --4.580662492468392522e+00 / ln2, --6.424166483534085259e+00 / ln2, --8.495410644101937692e+00 / ln2, --5.553599664845023653e+00 / ln2, --7.021711310391386185e+00 / ln2, --1.154814228758357153e+01 / ln2, --2.046324443145273619e+00 / ln2, --5.553599664845023653e+00 / ln2, --1.359735121802292568e+01 / ln2, --2.046324443145273619e+00 / ln2, --4.754337034915018023e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.517325864764372589e+00 / ln2, --4.160925916687072679e+00 / ln2, --3.296199802569410142e+00 / ln2, --1.013779020202142256e+01 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.382633526813590308e+00 / ln2, --1.130525701277283801e+01 / ln2, --2.462783453866639771e+00 / ln2, --5.617458030859222795e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.160925916687072679e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.424166483534085259e+00 / ln2, --9.121101243974623074e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.332499360388146314e+00 / ln2, --9.447855320106350874e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.971660331060701488e+00 / ln2, --3.296199802569410142e+00 / ln2, --9.572656522993996830e+00 / ln2, --5.833531233360072399e+00 / ln2, --7.021711310391386185e+00 / ln2, --6.909735959825669127e+00 / ln2, --4.841396924932839241e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.754337034915018023e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.511251163267971265e+00 / ln2, --6.007365244407383287e+00 / ln2, --7.124880459954479939e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.758886612591042287e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.195119186325862337e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.691538586043964010e+00 / ln2, --2.462783453866639771e+00 / ln2, --8.812268409318086526e+00 / ln2, --8.957187461268130590e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.278597058620684734e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.069538553398722058e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.919649166968065757e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.542219003269678979e+00 / ln2, --5.949336081541920507e+00 / ln2, --9.907309388480081580e+00 / ln2, --1.070585939587089008e+01 / ln2, --5.861249608063488381e+00 / ln2, --4.160925916687072679e+00 / ln2, --6.694546051260094721e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.283998021384489974e+01 / ln2, --5.923664837455273613e+00 / ln2, --4.893167479319754598e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --8.537479860740265991e+00 / ln2, --1.125542566348871354e+01 / ln2, --6.007365244407383287e+00 / ln2, --9.579468945846944194e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.345707246405288160e+00 / ln2, --3.949349394517413181e+00 / ln2, --6.674700103110665417e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.584033785323046395e+00 / ln2, --7.184300953920424782e+00 / ln2, --3.949349394517413181e+00 / ln2, --6.971660331060701488e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.576662416349575935e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.193805121009943626e+00 / ln2, --5.685674146241039395e+00 / ln2, --4.511251163267971265e+00 / ln2, --9.563168690224490120e+00 / ln2, --8.746627133441950974e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.861249608063488381e+00 / ln2, --8.598045803528568953e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.562852777492357070e+00 / ln2, --7.800758034760048254e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.193805121009943626e+00 / ln2, --4.754337034915018023e+00 / ln2, --1.268608111131628036e+01 / ln2, --3.631360480608693209e+00 / ln2, --9.579468945846944194e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.641510812793480767e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.152879364568431875e+00 / ln2, --5.193805121009943626e+00 / ln2, --6.517562281884773157e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.061406875134344041e+01 / ln2, --3.949349394517413181e+00 / ln2, --4.893167479319754598e+00 / ln2, --8.233702486883688110e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.345707246405288160e+00 / ln2, --4.511251163267971265e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.685674146241039395e+00 / ln2, --5.833531233360072399e+00 / ln2, --1.014429960148050647e+01 / ln2, --5.542219003269678979e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --8.551979924991755411e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.115671305913878442e+01 / ln2, --2.046324443145273619e+00 / ln2, --6.532634035752141521e+00 / ln2, --5.415204418624045779e+00 / ln2, --4.604168121450740614e+00 / ln2, --7.278597058620684734e+00 / ln2, --5.177102904471855283e+00 / ln2, --5.025989230275349939e+00 / ln2, --3.949349394517413181e+00 / ln2, --1.061406875134344041e+01 / ln2, --6.909735959825669127e+00 / ln2, --6.121057297107224571e+00 / ln2, --6.971660331060701488e+00 / ln2, --3.296199802569410142e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.604168121450740614e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.160925916687072679e+00 / ln2, --1.044570027672111756e+01 / ln2, --4.160925916687072679e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.720134407192276171e+00 / ln2, --4.160925916687072679e+00 / ln2, --5.177102904471855283e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --5.193805121009943626e+00 / ln2, --5.542219003269678979e+00 / ln2, --4.604168121450740614e+00 / ln2, --5.345707246405288160e+00 / ln2, --4.691538586043964010e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.160925916687072679e+00 / ln2, --6.694546051260094721e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.617458030859222795e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.685674146241039395e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.683429021422371719e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.358997954444022938e+00 / ln2, --7.684202738748299844e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.493114258108283465e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.909735959825669127e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --8.812611176663798673e+00 / ln2, --8.245710019274113733e+00 / ln2, --6.515023211937145398e+00 / ln2, --6.017498482476998589e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.959852224170357538e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.512580640245118957e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.113891938530826131e+00 / ln2, --4.049563242290908249e+00 / ln2, --5.542219003269678979e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.049563242290908249e+00 / ln2, --9.852642968671261769e+00 / ln2, --4.893167479319754598e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.580662492468392522e+00 / ln2, --4.893167479319754598e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.415204418624045779e+00 / ln2, --6.867084829257056988e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.025989230275349939e+00 / ln2, --8.839003156104606518e+00 / ln2, --4.919649166968065757e+00 / ln2, --7.810898878696857395e+00 / ln2, --5.025989230275349939e+00 / ln2, --9.583781920109638364e+00 / ln2, --5.617458030859222795e+00 / ln2, --6.121057297107224571e+00 / ln2, --6.007365244407383287e+00 / ln2, --3.296199802569410142e+00 / ln2, --8.807386367050035858e+00 / ln2, --9.988776888454795611e+00 / ln2, --6.017498482476998589e+00 / ln2, --4.883577810848264811e+00 / ln2, --6.909176526836401599e+00 / ln2, --5.910272666779689210e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.483355190078385455e+00 / ln2, --8.746627133441950974e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.642897843502046484e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.406237793012392601e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.160925916687072679e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.861249608063488381e+00 / ln2, --4.580662492468392522e+00 / ln2, --4.498412758302154479e+00 / ln2, --4.424715454340284460e+00 / ln2, --1.175414779598468940e+01 / ln2, --6.720134407192276171e+00 / ln2, --7.516887900787997623e+00 / ln2, --4.091764045676016259e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.193805121009943626e+00 / ln2, --6.223992983953650970e+00 / ln2, --9.404417952869394526e+00 / ln2, --9.439487004418870342e+00 / ln2, --6.971660331060701488e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.580662492468392522e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.391839193742723246e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.600485884087979649e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.447790001659071457e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.015500071551313432e+01 / ln2, --3.296199802569410142e+00 / ln2, --4.049563242290908249e+00 / ln2, --7.810898878696857395e+00 / ln2, --4.604168121450740614e+00 / ln2, --9.434248995347461531e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.919649166968065757e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.754337034915018023e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.177102904471855283e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --8.323494738374519031e+00 / ln2, --4.160925916687072679e+00 / ln2, --8.877589121715919518e+00 / ln2, --5.195119186325862337e+00 / ln2, --3.949349394517413181e+00 / ln2, --5.923664837455273613e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.484916075864178175e+00 / ln2, --9.563168690224490120e+00 / ln2, --7.295589409525732094e+00 / ln2, --8.438636990658810788e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.345707246405288160e+00 / ln2, --5.949336081541920507e+00 / ln2, --4.424715454340284460e+00 / ln2, --7.810898878696857395e+00 / ln2, --1.105715580744062621e+01 / ln2, --4.143181862813722027e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.091764045676016259e+00 / ln2, --8.847574884292626507e+00 / ln2, --4.511251163267971265e+00 / ln2, --8.495410644101937692e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.236592765249644010e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.959821016291367179e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.841396924932839241e+00 / ln2, --7.259851116637276114e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.536137450497251145e+00 / ln2, --7.289077351069391142e+00 / ln2, --6.215435559384440367e+00 / ln2, --6.121057297107224571e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.919649166968065757e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.145387772643075230e+01 / ln2, --3.949349394517413181e+00 / ln2, --4.841396924932839241e+00 / ln2, --4.754337034915018023e+00 / ln2, --5.397372105698754474e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.345707246405288160e+00 / ln2, --5.332499360388146314e+00 / ln2, --7.766312407968571918e+00 / ln2, --4.511251163267971265e+00 / ln2, --1.171395710922925026e+01 / ln2, --8.911633169851866043e+00 / ln2, --1.090932255574468179e+01 / ln2, --5.177102904471855283e+00 / ln2, --6.007365244407383287e+00 / ln2, --5.195119186325862337e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.833531233360072399e+00 / ln2, --5.949336081541920507e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.694546051260094721e+00 / ln2, --4.143181862813722027e+00 / ln2, --1.150475124638018443e+01 / ln2, --5.332499360388146314e+00 / ln2, --9.370236207688265040e+00 / ln2, --6.006187732178176475e+00 / ln2, --5.871019786565007337e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.517562281884773157e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.017498482476998589e+00 / ln2, --6.236592765249644010e+00 / ln2, --6.885160160725777523e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.267062386635592119e+00 / ln2, --8.071909107879246648e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.754337034915018023e+00 / ln2, --4.498412758302154479e+00 / ln2, --2.462783453866639771e+00 / ln2, --9.370236207688265040e+00 / ln2, --7.124880459954479939e+00 / ln2, --4.498412758302154479e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.132541823088126165e+01 / ln2, --8.812611176663798673e+00 / ln2, --5.861249608063488381e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.909735959825669127e+00 / ln2, --7.881364862260915594e+00 / ln2, --4.049563242290908249e+00 / ln2, --7.766312407968571918e+00 / ln2, --6.215435559384440367e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.642897843502046484e+00 / ln2, --1.021438454248509764e+01 / ln2, --4.919649166968065757e+00 / ln2, --4.841396924932839241e+00 / ln2, --5.617458030859222795e+00 / ln2, --9.583781920109638364e+00 / ln2, --4.642897843502046484e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.576662416349575935e+00 / ln2, --4.511251163267971265e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.160925916687072679e+00 / ln2, --6.584033785323046395e+00 / ln2, --7.720199943466562686e+00 / ln2, --1.132541823088126165e+01 / ln2, --7.267062386635592119e+00 / ln2, --5.553599664845023653e+00 / ln2, --5.959821016291367179e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.691538586043964010e+00 / ln2, --4.091764045676016259e+00 / ln2, --6.425466655005584116e+00 / ln2, --4.576662416349575935e+00 / ln2, --6.515023211937145398e+00 / ln2, --9.760673288736205322e+00 / ln2, --7.742568993938474087e+00 / ln2, --3.631360480608693209e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.021438454248509764e+01 / ln2, --6.017498482476998589e+00 / ln2, --6.517562281884773157e+00 / ln2, --4.562852777492357070e+00 / ln2, --4.049563242290908249e+00 / ln2, --6.406237793012392601e+00 / ln2, --6.694095152899173229e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.462783453866639771e+00 / ln2, --8.072732339370881860e+00 / ln2, --4.049563242290908249e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.562852777492357070e+00 / ln2, --6.017498482476998589e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.754337034915018023e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.553599664845023653e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.161725488083725111e+00 / ln2, --6.763732050866829049e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.754337034915018023e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --7.564037047890797894e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.091764045676016259e+00 / ln2, --9.315078460598257948e+00 / ln2, --7.290844047540147699e+00 / ln2, --4.143181862813722027e+00 / ln2, --7.606027863309607895e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.893167479319754598e+00 / ln2, --5.536137450497251145e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --1.115671305913878442e+01 / ln2, --7.327920672174300876e+00 / ln2, --5.193805121009943626e+00 / ln2, --5.284098860888144067e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.183140534972725533e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.754337034915018023e+00 / ln2, --7.362920232037894586e+00 / ln2, --7.183140534972725533e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.604168121450740614e+00 / ln2, --6.498914935067912069e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.909176526836401599e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.576662416349575935e+00 / ln2, --4.091764045676016259e+00 / ln2, --7.641510812793480767e+00 / ln2, --8.179445530167162914e+00 / ln2, --1.087984978545612869e+01 / ln2, --7.210947893307020351e+00 / ln2, --6.512580640245118957e+00 / ln2, --5.553599664845023653e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.949336081541920507e+00 / ln2, --9.349236770827415555e+00 / ln2, --6.406237793012392601e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.048892879291960512e+00 / ln2, --5.861249608063488381e+00 / ln2, --6.425466655005584116e+00 / ln2, --4.642897843502046484e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.861249608063488381e+00 / ln2, --4.160925916687072679e+00 / ln2, --1.030807112927032776e+01 / ln2, --5.861249608063488381e+00 / ln2, --5.542219003269678979e+00 / ln2, --1.278432279724004239e+01 / ln2, --2.046324443145273619e+00 / ln2, --6.909735959825669127e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.998325418845404933e+00 / ln2, --8.233702486883688110e+00 / ln2, --5.193805121009943626e+00 / ln2, --5.754707819725457085e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --1.105715580744062621e+01 / ln2, --2.046324443145273619e+00 / ln2, --5.195119186325862337e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.621647006643879507e+00 / ln2, --6.909735959825669127e+00 / ln2, --3.949349394517413181e+00 / ln2, --1.130525701277283801e+01 / ln2, --5.685674146241039395e+00 / ln2, --6.532634035752141521e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.580662492468392522e+00 / ln2, --8.071909107879246648e+00 / ln2, --3.949349394517413181e+00 / ln2, --5.284098860888144067e+00 / ln2, --6.017498482476998589e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.998325418845404933e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.121057297107224571e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.150475124638018443e+01 / ln2, --3.949349394517413181e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.318139382317166763e+00 / ln2, --4.691538586043964010e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.949349394517413181e+00 / ln2, --7.119927210762653225e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.017498482476998589e+00 / ln2, --5.195119186325862337e+00 / ln2, --5.553599664845023653e+00 / ln2, --4.562852777492357070e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.883577810848264811e+00 / ln2, --4.883577810848264811e+00 / ln2, --7.210947893307020351e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.268608111131628036e+01 / ln2, --1.344520137693501916e+01 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.754337034915018023e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.841396924932839241e+00 / ln2, --5.316943408775147262e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.947297936873974677e+00 / ln2, --1.139296906381306052e+01 / ln2, --4.691538586043964010e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.087984978545612869e+01 / ln2, --2.046324443145273619e+00 / ln2, --6.152879364568431875e+00 / ln2, --7.290844047540147699e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.919649166968065757e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.316943408775147262e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.867084829257056988e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.050516998695719195e+01 / ln2, --1.014429960148050647e+01 / ln2, --2.462783453866639771e+00 / ln2, --9.347814457090896312e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.919649166968065757e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.812113812154088954e+00 / ln2, --4.691538586043964010e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.447106204735684187e+00 / ln2, --5.195119186325862337e+00 / ln2, --4.604168121450740614e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.425466655005584116e+00 / ln2, --3.631360480608693209e+00 / ln2, --8.957187461268130590e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.562852777492357070e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.511251163267971265e+00 / ln2, --1.068317631220670449e+01 / ln2, --5.193805121009943626e+00 / ln2, --6.012689565822368465e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.580662492468392522e+00 / ln2, --5.284098860888144067e+00 / ln2, --5.332499360388146314e+00 / ln2, --5.871019786565007337e+00 / ln2, --6.017498482476998589e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.925486712770660702e+01 / ln2, --3.631360480608693209e+00 / ln2, --7.104077188637425877e+00 / ln2, --7.683429021422371719e+00 / ln2, --5.861249608063488381e+00 / ln2, --5.332499360388146314e+00 / ln2, --6.745862952448395511e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.049563242290908249e+00 / ln2, --5.345707246405288160e+00 / ln2, --1.090932255574468179e+01 / ln2, --6.885160160725777523e+00 / ln2, --9.760673288736205322e+00 / ln2, --7.278597058620684734e+00 / ln2, --9.404417952869394526e+00 / ln2, --6.694546051260094721e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.493114258108283465e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.883577810848264811e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.278597058620684734e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.604168121450740614e+00 / ln2, --1.048696560647437082e+01 / ln2, --3.296199802569410142e+00 / ln2, --1.021438454248509764e+01 / ln2, --2.046324443145273619e+00 / ln2, --4.562852777492357070e+00 / ln2, --9.529197793097948121e+00 / ln2, --4.498412758302154479e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.959821016291367179e+00 / ln2, --9.907309388480081580e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.143181862813722027e+00 / ln2, --6.017498482476998589e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.415204418624045779e+00 / ln2, --5.415204418624045779e+00 / ln2, --7.021711310391386185e+00 / ln2, --5.113891938530826131e+00 / ln2, --3.296199802569410142e+00 / ln2, --7.184300953920424782e+00 / ln2, --4.604168121450740614e+00 / ln2, --8.777444697110189153e+00 / ln2, --6.512580640245118957e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.425466655005584116e+00 / ln2, --5.415204418624045779e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.231247566439284569e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.861249608063488381e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --1.269438761816860683e+01 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.345707246405288160e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.193805121009943626e+00 / ln2, --8.657273747556139654e+00 / ln2, --5.025989230275349939e+00 / ln2, --3.949349394517413181e+00 / ln2, --1.265454555757358079e+01 / ln2, --7.764755566332865122e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.113891938530826131e+00 / ln2, --5.195119186325862337e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.017498482476998589e+00 / ln2, --4.511251163267971265e+00 / ln2, --4.049563242290908249e+00 / ln2, --5.871019786565007337e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.604168121450740614e+00 / ln2, --9.294209431283057654e+00 / ln2, --5.685674146241039395e+00 / ln2, --4.562852777492357070e+00 / ln2, --6.017498482476998589e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --5.997831470194255665e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.415204418624045779e+00 / ln2, --4.143181862813722027e+00 / ln2, --7.327920672174300876e+00 / ln2, --6.007365244407383287e+00 / ln2, --4.754337034915018023e+00 / ln2, --6.327963919515099178e+00 / ln2, --5.193805121009943626e+00 / ln2, --4.691538586043964010e+00 / ln2, --6.498914935067912069e+00 / ln2, --7.699896352130231492e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.025011173880692184e+01 / ln2, --5.923664837455273613e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.685674146241039395e+00 / ln2, --5.113891938530826131e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.195119186325862337e+00 / ln2, --9.404417952869394526e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.160925916687072679e+00 / ln2, --6.406237793012392601e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.511251163267971265e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.754337034915018023e+00 / ln2, --4.160925916687072679e+00 / ln2, --6.512580640245118957e+00 / ln2, --2.462783453866639771e+00 / ln2, --9.579468945846944194e+00 / ln2, --5.345707246405288160e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.160925916687072679e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.294588429854087508e+00 / ln2, --5.332499360388146314e+00 / ln2, --3.296199802569410142e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --3.296199802569410142e+00 / ln2, --7.359401430306112601e+00 / ln2, --5.284098860888144067e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.143181862813722027e+00 / ln2, --6.017498482476998589e+00 / ln2, --5.833531233360072399e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.883577810848264811e+00 / ln2, --4.604168121450740614e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.067243984851346639e+00 / ln2, --4.143181862813722027e+00 / ln2, --1.359735121802292568e+01 / ln2, --6.600485884087979649e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.517562281884773157e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.124880459954479939e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.193805121009943626e+00 / ln2, --4.604168121450740614e+00 / ln2, --3.296199802569410142e+00 / ln2, --1.265454555757358079e+01 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.269438761816860683e+01 / ln2, --3.631360480608693209e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.025989230275349939e+00 / ln2, --6.017498482476998589e+00 / ln2, --4.754337034915018023e+00 / ln2, --6.007365244407383287e+00 / ln2, --5.861249608063488381e+00 / ln2, --1.301233579505205462e+01 / ln2, --3.631360480608693209e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.764755566332865122e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --4.424715454340284460e+00 / ln2, --9.484310506563019771e+00 / ln2, --3.949349394517413181e+00 / ln2, --6.512580640245118957e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.049563242290908249e+00 / ln2, --3.949349394517413181e+00 / ln2, --4.143181862813722027e+00 / ln2, --6.152879364568431875e+00 / ln2, --4.049563242290908249e+00 / ln2, --1.204137922631861990e+01 / ln2, --5.025989230275349939e+00 / ln2, --1.042619382222219038e+01 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.617458030859222795e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.193805121009943626e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.195119186325862337e+00 / ln2, --6.424166483534085259e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.959821016291367179e+00 / ln2, --5.959821016291367179e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.699896352130231492e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.909735959825669127e+00 / ln2, --4.498412758302154479e+00 / ln2, --1.175414779598468940e+01 / ln2, --4.754337034915018023e+00 / ln2, --4.576662416349575935e+00 / ln2, --6.017498482476998589e+00 / ln2, --8.071909107879246648e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.542219003269678979e+00 / ln2, --1.068317631220670449e+01 / ln2, --2.046324443145273619e+00 / ln2, --5.754707819725457085e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.754707819725457085e+00 / ln2, --5.861249608063488381e+00 / ln2, --6.463978470342545357e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.754707819725457085e+00 / ln2, --8.417223922976480921e+00 / ln2, --1.130108731959751189e+01 / ln2, --5.542219003269678979e+00 / ln2, --5.861249608063488381e+00 / ln2, --5.542219003269678979e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.883577810848264811e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.025989230275349939e+00 / ln2, --6.517562281884773157e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.028217115906610246e+01 / ln2, --9.465543819552042493e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.685674146241039395e+00 / ln2, --4.511251163267971265e+00 / ln2, --9.026976322186319734e+00 / ln2, --1.194242396538278683e+01 / ln2, --5.025989230275349939e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.949349394517413181e+00 / ln2, --8.022806380334262855e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.049563242290908249e+00 / ln2, --7.684202738748299844e+00 / ln2, --5.754707819725457085e+00 / ln2, --5.332499360388146314e+00 / ln2, --3.296199802569410142e+00 / ln2, --7.766312407968571918e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.648035504600203538e+00 / ln2, --5.113891938530826131e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.998325418845404933e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.580662492468392522e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.177102904471855283e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.160925916687072679e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.949336081541920507e+00 / ln2, --4.604168121450740614e+00 / ln2, --8.605315052977417167e+00 / ln2, --6.406237793012392601e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.536137450497251145e+00 / ln2, --6.954184282296374420e+00 / ln2, --5.871019786565007337e+00 / ln2, --4.604168121450740614e+00 / ln2, --4.998325418845404933e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.861249608063488381e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.397372105698754474e+00 / ln2, --4.893167479319754598e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.691538586043964010e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.284098860888144067e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.909735959825669127e+00 / ln2, --4.498412758302154479e+00 / ln2, --4.562852777492357070e+00 / ln2, --6.121057297107224571e+00 / ln2, --6.152879364568431875e+00 / ln2, --6.745862952448395511e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.674700103110665417e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.316943408775147262e+00 / ln2, --6.425466655005584116e+00 / ln2, --6.909735959825669127e+00 / ln2, --6.223992983953650970e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.113891938530826131e+00 / ln2, --6.424166483534085259e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.754707819725457085e+00 / ln2, --4.511251163267971265e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.193805121009943626e+00 / ln2, --4.160925916687072679e+00 / ln2, --6.885183121012873109e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.694546051260094721e+00 / ln2, --8.232504733803645891e+00 / ln2, --7.267062386635592119e+00 / ln2, --5.025989230275349939e+00 / ln2, --1.836307946957008141e+01 / ln2, --4.691538586043964010e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.949336081541920507e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.919649166968065757e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.553599664845023653e+00 / ln2, --6.909735959825669127e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.800758034760048254e+00 / ln2, --6.286368968884687547e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.949336081541920507e+00 / ln2, --4.049563242290908249e+00 / ln2, --7.881364862260915594e+00 / ln2, --7.503680464488466484e+00 / ln2, --8.233702486883688110e+00 / ln2, --3.631360480608693209e+00 / ln2, --9.315078460598257948e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.580662492468392522e+00 / ln2, --9.294588429854087508e+00 / ln2, --1.101578299844018893e+01 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.160925916687072679e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.861249608063488381e+00 / ln2, --6.812113812154088954e+00 / ln2, --4.841396924932839241e+00 / ln2, --1.283998021384489974e+01 / ln2, --8.447106204735684187e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.299334151304765150e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.861249608063488381e+00 / ln2, --8.847574884292626507e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.462783453866639771e+00 / ln2, --8.847574884292626507e+00 / ln2, --5.284098860888144067e+00 / ln2, --5.617458030859222795e+00 / ln2, --1.083865141940506760e+01 / ln2, --7.684202738748299844e+00 / ln2, --4.511251163267971265e+00 / ln2, --6.885183121012873109e+00 / ln2, --5.949336081541920507e+00 / ln2, --6.971660331060701488e+00 / ln2, --6.947297936873974677e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.511251163267971265e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.703898338055121364e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.754337034915018023e+00 / ln2, --7.810898878696857395e+00 / ln2, --8.233702486883688110e+00 / ln2, --6.012689565822368465e+00 / ln2, --8.350828230729891999e+00 / ln2, --1.204137922631861990e+01 / ln2, --8.350828230729891999e+00 / ln2, --5.113891938530826131e+00 / ln2, --1.061406875134344041e+01 / ln2, --7.362920232037894586e+00 / ln2, --5.536137450497251145e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.160925916687072679e+00 / ln2, --5.959821016291367179e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.316943408775147262e+00 / ln2, --7.048892879291960512e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.553599664845023653e+00 / ln2, --3.631360480608693209e+00 / ln2, --1.344520137693501916e+01 / ln2, --2.046324443145273619e+00 / ln2, --5.923664837455273613e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --8.179445530167162914e+00 / ln2, --4.576662416349575935e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.195119186325862337e+00 / ln2, --7.606027863309607895e+00 / ln2, --6.017498482476998589e+00 / ln2, --9.907309388480081580e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.998325418845404933e+00 / ln2, --4.049563242290908249e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.885183121012873109e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.576662416349575935e+00 / ln2, --9.734695089071365715e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.049563242290908249e+00 / ln2, --5.193805121009943626e+00 / ln2, --9.662729593866675515e+00 / ln2, --4.883577810848264811e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.841396924932839241e+00 / ln2, --5.193805121009943626e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.576662416349575935e+00 / ln2, --5.617458030859222795e+00 / ln2, --1.044570027672111756e+01 / ln2, --5.959821016291367179e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.345707246405288160e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.438636990658810788e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.562852777492357070e+00 / ln2, --4.160925916687072679e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.642897843502046484e+00 / ln2, --1.168986496391243612e+01 / ln2, --4.160925916687072679e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.286368968884687547e+00 / ln2, --6.406237793012392601e+00 / ln2, --1.057306084326360640e+01 / ln2, --4.049563242290908249e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.424715454340284460e+00 / ln2, --6.121057297107224571e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.562852777492357070e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.861249608063488381e+00 / ln2, --4.091764045676016259e+00 / ln2, --1.171395710922925026e+01 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.683429021422371719e+00 / ln2, --7.267062386635592119e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.997831470194255665e+00 / ln2, --7.634089783838128973e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.885160160725777523e+00 / ln2, --7.703898338055121364e+00 / ln2, --6.909176526836401599e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.511251163267971265e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.562852777492357070e+00 / ln2, --5.621647006643879507e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.553188966816772876e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.007365244407383287e+00 / ln2, --4.424715454340284460e+00 / ln2, --5.025989230275349939e+00 / ln2, --7.516887900787997623e+00 / ln2, --3.631360480608693209e+00 / ln2, --8.231385546183886959e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.812113812154088954e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.642897843502046484e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.868991888563591885e+00 / ln2, --4.091764045676016259e+00 / ln2, --6.694546051260094721e+00 / ln2, --4.143181862813722027e+00 / ln2, --7.267062386635592119e+00 / ln2, --4.604168121450740614e+00 / ln2, --4.754337034915018023e+00 / ln2, --4.576662416349575935e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.462783453866639771e+00 / ln2, --9.230539968036323373e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.005103642565483568e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.087984978545612869e+01 / ln2, --4.143181862813722027e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --8.372987562155319807e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.284098860888144067e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.562852777492357070e+00 / ln2, --4.562852777492357070e+00 / ln2, --7.289077351069391142e+00 / ln2, --5.553599664845023653e+00 / ln2, --5.397372105698754474e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --5.345707246405288160e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.511251163267971265e+00 / ln2, --5.871019786565007337e+00 / ln2, --8.181145976660216590e+00 / ln2, --4.580662492468392522e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.562852777492357070e+00 / ln2, --4.604168121450740614e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.345707246405288160e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.642897843502046484e+00 / ln2, --9.447855320106350874e+00 / ln2, --4.919649166968065757e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.865295069725402044e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.662729593866675515e+00 / ln2, --5.316943408775147262e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.798856991358857016e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.284098860888144067e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.160925916687072679e+00 / ln2, --6.512580640245118957e+00 / ln2, --7.183140534972725533e+00 / ln2, --4.754337034915018023e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --8.823256313576475662e+00 / ln2, --4.160925916687072679e+00 / ln2, --5.861249608063488381e+00 / ln2, --4.091764045676016259e+00 / ln2, --6.484916075864178175e+00 / ln2, --5.536137450497251145e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.424715454340284460e+00 / ln2, --5.284098860888144067e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.017498482476998589e+00 / ln2, --6.674700103110665417e+00 / ln2, --4.604168121450740614e+00 / ln2, --8.371748526324319428e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.833531233360072399e+00 / ln2, --1.085914756101938572e+01 / ln2, --8.103230206446424333e+00 / ln2, --4.143181862813722027e+00 / ln2, --9.563168690224490120e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.139296906381306052e+01 / ln2, --6.121057297107224571e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.397372105698754474e+00 / ln2, --7.766312407968571918e+00 / ln2, --5.284098860888144067e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.095496646895064785e+01 / ln2, --3.296199802569410142e+00 / ln2, --4.511251163267971265e+00 / ln2, --7.699896352130231492e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.447790001659071457e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.576662416349575935e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.517325864764372589e+00 / ln2, --5.553599664845023653e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.949336081541920507e+00 / ln2, --1.316151932531392532e+01 / ln2, --2.462783453866639771e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.694546051260094721e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.604168121450740614e+00 / ln2, --7.517325864764372589e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --8.636130365971254719e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.562852777492357070e+00 / ln2, --7.881364862260915594e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.542219003269678979e+00 / ln2, --7.689409517815276374e+00 / ln2, --4.424715454340284460e+00 / ln2, --6.971660331060701488e+00 / ln2, --4.893167479319754598e+00 / ln2, --7.483355190078385455e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --1.039337502338793939e+01 / ln2, --3.949349394517413181e+00 / ln2, --6.215435559384440367e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.919649166968065757e+00 / ln2, --4.691538586043964010e+00 / ln2, --6.909176526836401599e+00 / ln2, --1.094874312386789583e+01 / ln2, --6.584033785323046395e+00 / ln2, --9.883349451013705433e+00 / ln2, --5.833531233360072399e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.177102904471855283e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.092512541773554879e+01 / ln2, --8.103230206446424333e+00 / ln2, --4.143181862813722027e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.553599664845023653e+00 / ln2, --1.283998021384489974e+01 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.971660331060701488e+00 / ln2, --5.195119186325862337e+00 / ln2, --6.512580640245118957e+00 / ln2, --5.284098860888144067e+00 / ln2, --4.754337034915018023e+00 / ln2, --5.553599664845023653e+00 / ln2, --5.193805121009943626e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.885160160725777523e+00 / ln2, --7.619344887229415164e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.095496646895064785e+01 / ln2, --5.195119186325862337e+00 / ln2, --5.113891938530826131e+00 / ln2, --6.017498482476998589e+00 / ln2, --6.406237793012392601e+00 / ln2, --8.417223922976480921e+00 / ln2, --7.800758034760048254e+00 / ln2, --4.604168121450740614e+00 / ln2, --7.368858813512747297e+00 / ln2, --5.959821016291367179e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.049563242290908249e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.841396924932839241e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.909735959825669127e+00 / ln2, --7.048892879291960512e+00 / ln2, --9.349236770827415555e+00 / ln2, --7.161725488083725111e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.691538586043964010e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.576662416349575935e+00 / ln2, --4.893167479319754598e+00 / ln2, --4.754337034915018023e+00 / ln2, --5.193805121009943626e+00 / ln2, --8.812268409318086526e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.861249608063488381e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --6.745862952448395511e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.345707246405288160e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.580662492468392522e+00 / ln2, --7.290844047540147699e+00 / ln2, --6.663698816176689910e+00 / ln2, --5.345707246405288160e+00 / ln2, --6.007365244407383287e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.691538586043964010e+00 / ln2, --5.025989230275349939e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.160925916687072679e+00 / ln2, --5.621647006643879507e+00 / ln2, --7.119927210762653225e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.049563242290908249e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.754707819725457085e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.103230206446424333e+00 / ln2, --8.746627133441950974e+00 / ln2, --5.959821016291367179e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.884045802498089728e+00 / ln2, --3.949349394517413181e+00 / ln2, --7.184300953920424782e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.923664837455273613e+00 / ln2, --6.223992983953650970e+00 / ln2, --5.195119186325862337e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.807386367050035858e+00 / ln2, --5.685674146241039395e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.694546051260094721e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.925486712770660702e+01 / ln2, --4.562852777492357070e+00 / ln2, --1.048696560647437082e+01 / ln2, --7.742568993938474087e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.091764045676016259e+00 / ln2, --7.000368956169869428e+00 / ln2, --4.576662416349575935e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.959821016291367179e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.598045803528568953e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.532634035752141521e+00 / ln2, --8.495410644101937692e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.152879364568431875e+00 / ln2, --4.604168121450740614e+00 / ln2, --4.424715454340284460e+00 / ln2, --7.683429021422371719e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.923664837455273613e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.437619382108458410e+00 / ln2, --8.537479860740265991e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.332499360388146314e+00 / ln2, --6.517562281884773157e+00 / ln2, --5.910272666779689210e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.789351191264211494e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.236592765249644010e+00 / ln2, --3.631360480608693209e+00 / ln2, --9.662729593866675515e+00 / ln2, --6.006187732178176475e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.580662492468392522e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.113891938530826131e+00 / ln2, --5.997831470194255665e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.617690255987351833e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.841396924932839241e+00 / ln2, --4.691538586043964010e+00 / ln2, --7.289077351069391142e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --3.296199802569410142e+00 / ln2, --1.269438761816860683e+01 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.458537022627602653e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.049563242290908249e+00 / ln2, --5.542219003269678979e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.604168121450740614e+00 / ln2, --7.800758034760048254e+00 / ln2, --5.553599664845023653e+00 / ln2, --5.332499360388146314e+00 / ln2, --5.871019786565007337e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --7.000368956169869428e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.017498482476998589e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.184300953920424782e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.223992983953650970e+00 / ln2, --3.949349394517413181e+00 / ln2, --4.091764045676016259e+00 / ln2, --1.012394981767910984e+01 / ln2, --2.046324443145273619e+00 / ln2, --4.511251163267971265e+00 / ln2, --5.415204418624045779e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.067243984851346639e+00 / ln2, --6.463978470342545357e+00 / ln2, --4.883577810848264811e+00 / ln2, --5.195119186325862337e+00 / ln2, --5.345707246405288160e+00 / ln2, --7.368858813512747297e+00 / ln2, --5.415204418624045779e+00 / ln2, --8.071909107879246648e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.511251163267971265e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.841396924932839241e+00 / ln2, --4.498412758302154479e+00 / ln2, --7.711929296494973940e+00 / ln2, --5.415204418624045779e+00 / ln2, --3.296199802569410142e+00 / ln2, --7.223375476872481826e+00 / ln2, --7.289077351069391142e+00 / ln2, --5.685674146241039395e+00 / ln2, --3.296199802569410142e+00 / ln2, --7.119927210762653225e+00 / ln2, --8.657273747556139654e+00 / ln2, --8.350828230729891999e+00 / ln2, --6.867084829257056988e+00 / ln2, --5.193805121009943626e+00 / ln2, --4.754337034915018023e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.919649166968065757e+00 / ln2, --1.269438761816860683e+01 / ln2, --6.517562281884773157e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.267062386635592119e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.580662492468392522e+00 / ln2, --5.861249608063488381e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.604168121450740614e+00 / ln2, --4.049563242290908249e+00 / ln2, --3.296199802569410142e+00 / ln2, --9.172628873852490372e+00 / ln2, --5.861249608063488381e+00 / ln2, --6.223992983953650970e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.124880459954479939e+00 / ln2, --6.954184282296374420e+00 / ln2, --5.861249608063488381e+00 / ln2, --3.631360480608693209e+00 / ln2, --9.069538553398722058e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.691538586043964010e+00 / ln2, --8.319852591139634157e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.284098860888144067e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.498412758302154479e+00 / ln2, --3.296199802569410142e+00 / ln2, --7.742568993938474087e+00 / ln2, --5.536137450497251145e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.763732050866829049e+00 / ln2, --6.512580640245118957e+00 / ln2, --4.498412758302154479e+00 / ln2, --7.606027863309607895e+00 / ln2, --6.971660331060701488e+00 / ln2, --6.425466655005584116e+00 / ln2, --4.580662492468392522e+00 / ln2, --4.642897843502046484e+00 / ln2, --6.745862952448395511e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.841396924932839241e+00 / ln2, --6.694546051260094721e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.007365244407383287e+00 / ln2, --4.160925916687072679e+00 / ln2, --7.865295069725402044e+00 / ln2, --4.049563242290908249e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.642897843502046484e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.049563242290908249e+00 / ln2, --5.193805121009943626e+00 / ln2, --9.315078460598257948e+00 / ln2, --7.359401430306112601e+00 / ln2, --7.766312407968571918e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.368858813512747297e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --1.123286076255336674e+01 / ln2, --6.121057297107224571e+00 / ln2, --6.909735959825669127e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.754337034915018023e+00 / ln2, --4.841396924932839241e+00 / ln2, --4.424715454340284460e+00 / ln2, --5.177102904471855283e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.067243984851346639e+00 / ln2, --4.511251163267971265e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.017498482476998589e+00 / ln2, --4.160925916687072679e+00 / ln2, --1.143258596730222187e+01 / ln2, --5.025989230275349939e+00 / ln2, --5.284098860888144067e+00 / ln2, --6.694546051260094721e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.382633526813590308e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.195119186325862337e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --1.123286076255336674e+01 / ln2, --4.091764045676016259e+00 / ln2, --4.919649166968065757e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.542219003269678979e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.841396924932839241e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.847574884292626507e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.397372105698754474e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.847574884292626507e+00 / ln2, --1.344520137693501916e+01 / ln2, --5.284098860888144067e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.210947893307020351e+00 / ln2, --2.462783453866639771e+00 / ln2, --9.648035504600203538e+00 / ln2, --4.498412758302154479e+00 / ln2, --5.195119186325862337e+00 / ln2, --5.685674146241039395e+00 / ln2, --5.536137450497251145e+00 / ln2, --7.606027863309607895e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.442907637099850149e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.617458030859222795e+00 / ln2, --4.754337034915018023e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.267062386635592119e+00 / ln2, --4.893167479319754598e+00 / ln2, --9.465543819552042493e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.068317631220670449e+01 / ln2, --2.462783453866639771e+00 / ln2, --5.193805121009943626e+00 / ln2, --8.382633526813590308e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.160925916687072679e+00 / ln2, --7.161725488083725111e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --8.179445530167162914e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.998325418845404933e+00 / ln2, --5.316943408775147262e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.576662416349575935e+00 / ln2, --5.617458030859222795e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --9.257233588034425864e+00 / ln2, --4.580662492468392522e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.049563242290908249e+00 / ln2, --1.139296906381306052e+01 / ln2, --2.462783453866639771e+00 / ln2, --7.810898878696857395e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.691538586043964010e+00 / ln2, --5.542219003269678979e+00 / ln2, --5.949336081541920507e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.803544138091067062e+00 / ln2, --1.165915831016035398e+01 / ln2, --3.631360480608693209e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.923664837455273613e+00 / ln2, --5.284098860888144067e+00 / ln2, --6.812113812154088954e+00 / ln2, --5.177102904471855283e+00 / ln2, --7.881364862260915594e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.847574884292626507e+00 / ln2, --6.954184282296374420e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --1.094874312386789583e+01 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.415204418624045779e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.113891938530826131e+00 / ln2, --8.537479860740265991e+00 / ln2, --3.296199802569410142e+00 / ln2, --8.812268409318086526e+00 / ln2, --1.048696560647437082e+01 / ln2, --5.949336081541920507e+00 / ln2, --4.893167479319754598e+00 / ln2, --5.397372105698754474e+00 / ln2, --6.885160160725777523e+00 / ln2, --4.576662416349575935e+00 / ln2, --8.495410644101937692e+00 / ln2, --9.349236770827415555e+00 / ln2, --4.049563242290908249e+00 / ln2, --9.294209431283057654e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.893167479319754598e+00 / ln2, --5.536137450497251145e+00 / ln2, --4.883577810848264811e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.438636990658810788e+00 / ln2, --7.161725488083725111e+00 / ln2, --7.184300953920424782e+00 / ln2, --7.259851116637276114e+00 / ln2, --4.604168121450740614e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.542219003269678979e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.674889513884615155e+00 / ln2, --4.604168121450740614e+00 / ln2, --1.090932255574468179e+01 / ln2, --4.511251163267971265e+00 / ln2, --9.434248995347461531e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.415204418624045779e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.177102904471855283e+00 / ln2, --6.936476480951127677e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.923664837455273613e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.754707819725457085e+00 / ln2, --5.923664837455273613e+00 / ln2, --4.883577810848264811e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.847574884292626507e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.893167479319754598e+00 / ln2, --4.754337034915018023e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.998325418845404933e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.391839193742723246e+00 / ln2, --4.049563242290908249e+00 / ln2, --5.025989230275349939e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.642897843502046484e+00 / ln2, --1.015500071551313432e+01 / ln2, --5.177102904471855283e+00 / ln2, --4.498412758302154479e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.498412758302154479e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.498412758302154479e+00 / ln2, --8.557802589052355913e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.742568993938474087e+00 / ln2, --6.954184282296374420e+00 / ln2, --4.091764045676016259e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.469708295055941250e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.123110138025548643e+01 / ln2, --5.284098860888144067e+00 / ln2, --7.104077188637425877e+00 / ln2, --5.542219003269678979e+00 / ln2, --1.264380688290192367e+01 / ln2, --3.949349394517413181e+00 / ln2, --5.542219003269678979e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.947297936873974677e+00 / ln2, --1.278432279724004239e+01 / ln2, --4.562852777492357070e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.971660331060701488e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.000340241762609317e+01 / ln2, --6.517562281884773157e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.092512541773554879e+01 / ln2, --4.091764045676016259e+00 / ln2, --7.359401430306112601e+00 / ln2, --6.425466655005584116e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.562852777492357070e+00 / ln2, --5.536137450497251145e+00 / ln2, --1.025011173880692184e+01 / ln2, --1.039337502338793939e+01 / ln2, --6.517562281884773157e+00 / ln2, --4.883577810848264811e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.576662416349575935e+00 / ln2, --5.861249608063488381e+00 / ln2, --5.113891938530826131e+00 / ln2, --7.517325864764372589e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.893167479319754598e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.067243984851346639e+00 / ln2, --6.391839193742723246e+00 / ln2, --5.397372105698754474e+00 / ln2, --9.294588429854087508e+00 / ln2, --5.316943408775147262e+00 / ln2, --6.352896081343149426e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.091764045676016259e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.631360480608693209e+00 / ln2, --1.125542566348871354e+01 / ln2, --4.841396924932839241e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.959821016291367179e+00 / ln2, --1.123110138025548643e+01 / ln2, --2.046324443145273619e+00 / ln2, --4.091764045676016259e+00 / ln2, --6.424166483534085259e+00 / ln2, --6.012689565822368465e+00 / ln2, --7.108260886292240066e+00 / ln2, --4.511251163267971265e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.874321064688381000e+00 / ln2, --5.397372105698754474e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.316943408775147262e+00 / ln2, --9.760673288736205322e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.841396924932839241e+00 / ln2, --4.576662416349575935e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.113891938530826131e+00 / ln2, --7.000368956169869428e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.745862952448395511e+00 / ln2, --5.193805121009943626e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.919649166968065757e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.683429021422371719e+00 / ln2, --5.415204418624045779e+00 / ln2, --5.997831470194255665e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.160925916687072679e+00 / ln2, --7.000368956169869428e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.754337034915018023e+00 / ln2, --5.193805121009943626e+00 / ln2, --7.278597058620684734e+00 / ln2, --4.562852777492357070e+00 / ln2, --5.177102904471855283e+00 / ln2, --4.580662492468392522e+00 / ln2, --6.584033785323046395e+00 / ln2, --8.859835387901323855e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.685674146241039395e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --1.025159966901359709e+01 / ln2, --7.810898878696857395e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.267062386635592119e+00 / ln2, --1.301233579505205462e+01 / ln2, --3.631360480608693209e+00 / ln2, --4.998325418845404933e+00 / ln2, --3.296199802569410142e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.893167479319754598e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.536137450497251145e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.434248995347461531e+00 / ln2, --1.021438454248509764e+01 / ln2, --8.617690255987351833e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.909735959825669127e+00 / ln2, --1.039337502338793939e+01 / ln2, --5.617458030859222795e+00 / ln2, --6.223992983953650970e+00 / ln2, --4.841396924932839241e+00 / ln2, --4.049563242290908249e+00 / ln2, --6.885160160725777523e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.562852777492357070e+00 / ln2, --5.415204418624045779e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.861249608063488381e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.657273747556139654e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.344520137693501916e+01 / ln2, --6.327963919515099178e+00 / ln2, --8.005103642565483568e+00 / ln2, --6.327963919515099178e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --7.104077188637425877e+00 / ln2, --4.511251163267971265e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.691538586043964010e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.000368956169869428e+00 / ln2, --5.542219003269678979e+00 / ln2, --1.073778889043102325e+01 / ln2, --7.267062386635592119e+00 / ln2, --5.397372105698754474e+00 / ln2, --5.758886612591042287e+00 / ln2, --7.359401430306112601e+00 / ln2, --7.564037047890797894e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.425466655005584116e+00 / ln2, --4.049563242290908249e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.223992983953650970e+00 / ln2, --7.789351191264211494e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.798856991358857016e+00 / ln2, --5.621647006643879507e+00 / ln2, --4.883577810848264811e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.223992983953650970e+00 / ln2, --7.289077351069391142e+00 / ln2, --6.971660331060701488e+00 / ln2, --8.617690255987351833e+00 / ln2, --5.833531233360072399e+00 / ln2, --7.119927210762653225e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.617458030859222795e+00 / ln2, --4.893167479319754598e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.030807112927032776e+01 / ln2, --2.046324443145273619e+00 / ln2, --7.048892879291960512e+00 / ln2, --4.143181862813722027e+00 / ln2, --7.810898878696857395e+00 / ln2, --4.576662416349575935e+00 / ln2, --4.498412758302154479e+00 / ln2, --8.877589121715919518e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.919649166968065757e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.604168121450740614e+00 / ln2, --4.160925916687072679e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.949336081541920507e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.017498482476998589e+00 / ln2, --6.512580640245118957e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.425466655005584116e+00 / ln2, --6.017498482476998589e+00 / ln2, --5.025989230275349939e+00 / ln2, --9.493114258108283465e+00 / ln2, --4.691538586043964010e+00 / ln2, --5.113891938530826131e+00 / ln2, --8.983215916499753817e+00 / ln2, --2.462783453866639771e+00 / ln2, --9.874321064688381000e+00 / ln2, --6.674700103110665417e+00 / ln2, --4.143181862813722027e+00 / ln2, --6.694546051260094721e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.345707246405288160e+00 / ln2, --4.691538586043964010e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.562852777492357070e+00 / ln2, --5.758886612591042287e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.691538586043964010e+00 / ln2, --6.867084829257056988e+00 / ln2, --8.605315052977417167e+00 / ln2, --4.919649166968065757e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.754337034915018023e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.576662416349575935e+00 / ln2, --1.092512541773554879e+01 / ln2, --5.553599664845023653e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.951382076635610474e+00 / ln2, --3.631360480608693209e+00 / ln2, --8.657273747556139654e+00 / ln2, --4.562852777492357070e+00 / ln2, --6.425466655005584116e+00 / ln2, --3.949349394517413181e+00 / ln2, --7.742568993938474087e+00 / ln2, --7.516887900787997623e+00 / ln2, --5.284098860888144067e+00 / ln2, --5.193805121009943626e+00 / ln2, --4.160925916687072679e+00 / ln2, --6.674700103110665417e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.091764045676016259e+00 / ln2, --6.812113812154088954e+00 / ln2, --8.983215916499753817e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.944473462017027643e+00 / ln2, --2.462783453866639771e+00 / ln2, --8.774158714333733400e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.031514943090967940e+01 / ln2, --7.703898338055121364e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.847574884292626507e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.425466655005584116e+00 / ln2, --5.949336081541920507e+00 / ln2, --3.631360480608693209e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.604168121450740614e+00 / ln2, --4.424715454340284460e+00 / ln2, --5.861249608063488381e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.600485884087979649e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.049563242290908249e+00 / ln2, --1.021438454248509764e+01 / ln2, --6.017498482476998589e+00 / ln2, --1.150475124638018443e+01 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.152879364568431875e+00 / ln2, --7.289077351069391142e+00 / ln2, --5.284098860888144067e+00 / ln2, --4.576662416349575935e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --6.584033785323046395e+00 / ln2, --7.299334151304765150e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.495410644101937692e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.236592765249644010e+00 / ln2, --7.362920232037894586e+00 / ln2, --9.572656522993996830e+00 / ln2, --6.017498482476998589e+00 / ln2, --7.124880459954479939e+00 / ln2, --1.168986496391243612e+01 / ln2, --4.754337034915018023e+00 / ln2, --3.631360480608693209e+00 / ln2, --8.774158714333733400e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.108260886292240066e+00 / ln2, --5.685674146241039395e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --4.691538586043964010e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.604168121450740614e+00 / ln2, --4.576662416349575935e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.049563242290908249e+00 / ln2, --3.296199802569410142e+00 / ln2, --7.810898878696857395e+00 / ln2, --4.498412758302154479e+00 / ln2, --4.576662416349575935e+00 / ln2, --4.998325418845404933e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.352896081343149426e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.193805121009943626e+00 / ln2, --7.764755566332865122e+00 / ln2, --4.604168121450740614e+00 / ln2, --6.223992983953650970e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.424715454340284460e+00 / ln2, --5.923664837455273613e+00 / ln2, --7.278597058620684734e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.604168121450740614e+00 / ln2, --4.160925916687072679e+00 / ln2, --5.542219003269678979e+00 / ln2, --6.512580640245118957e+00 / ln2, --3.949349394517413181e+00 / ln2, --4.893167479319754598e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.006187732178176475e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.498412758302154479e+00 / ln2, --1.083865141940506760e+01 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.998325418845404933e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.685674146241039395e+00 / ln2, --5.754707819725457085e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.425466655005584116e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.286368968884687547e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.949349394517413181e+00 / ln2, --7.290844047540147699e+00 / ln2, --7.516887900787997623e+00 / ln2, --4.691538586043964010e+00 / ln2, --8.005103642565483568e+00 / ln2, --5.397372105698754474e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.049563242290908249e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.998325418845404933e+00 / ln2, --7.810898878696857395e+00 / ln2, --8.812611176663798673e+00 / ln2, --4.754337034915018023e+00 / ln2, --4.498412758302154479e+00 / ln2, --4.498412758302154479e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.720134407192276171e+00 / ln2, --7.881364862260915594e+00 / ln2, --6.017498482476998589e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.949349394517413181e+00 / ln2, --4.841396924932839241e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.798856991358857016e+00 / ln2, --5.959821016291367179e+00 / ln2, --1.316151932531392532e+01 / ln2, --9.069538553398722058e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.006187732178176475e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.720199943466562686e+00 / ln2, --4.841396924932839241e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.160925916687072679e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.553599664845023653e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.631360480608693209e+00 / ln2, --1.048696560647437082e+01 / ln2, --9.852642968671261769e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.576662416349575935e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.604168121450740614e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.536137450497251145e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.193805121009943626e+00 / ln2, --6.121057297107224571e+00 / ln2, --6.007365244407383287e+00 / ln2, --9.829467623163949952e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --6.694095152899173229e+00 / ln2, --5.193805121009943626e+00 / ln2, --7.865295069725402044e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.871019786565007337e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.359401430306112601e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.021711310391386185e+00 / ln2, --6.424166483534085259e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.130525701277283801e+01 / ln2, --4.604168121450740614e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.754337034915018023e+00 / ln2, --8.103230206446424333e+00 / ln2, --3.296199802569410142e+00 / ln2, --7.318139382317166763e+00 / ln2, --7.184300953920424782e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.054482717141193682e+01 / ln2, --6.406237793012392601e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.091764045676016259e+00 / ln2, --6.936476480951127677e+00 / ln2, --4.604168121450740614e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.413281563246960637e+00 / ln2, --9.347814457090896312e+00 / ln2, --1.068317631220670449e+01 / ln2, --4.562852777492357070e+00 / ln2, --4.580662492468392522e+00 / ln2, --8.071909107879246648e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.685674146241039395e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.998325418845404933e+00 / ln2, --5.923664837455273613e+00 / ln2, --7.327920672174300876e+00 / ln2, --7.327920672174300876e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.699896352130231492e+00 / ln2, --6.808146457075214819e+00 / ln2, --7.868991888563591885e+00 / ln2, --3.949349394517413181e+00 / ln2, --4.919649166968065757e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.498412758302154479e+00 / ln2, --5.332499360388146314e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.210947893307020351e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.177102904471855283e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.511251163267971265e+00 / ln2, --5.758886612591042287e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.462783453866639771e+00 / ln2, --8.319852591139634157e+00 / ln2, --1.268608111131628036e+01 / ln2, --6.954184282296374420e+00 / ln2, --1.143258596730222187e+01 / ln2, --4.998325418845404933e+00 / ln2, --4.604168121450740614e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.754337034915018023e+00 / ln2, --7.048892879291960512e+00 / ln2, --5.923664837455273613e+00 / ln2, --9.349236770827415555e+00 / ln2, --5.871019786565007337e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.694546051260094721e+00 / ln2, --7.362920232037894586e+00 / ln2, --9.349236770827415555e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.267062386635592119e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --8.812268409318086526e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.015500071551313432e+01 / ln2, --5.861249608063488381e+00 / ln2, --4.691538586043964010e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.861249608063488381e+00 / ln2, --5.617458030859222795e+00 / ln2, --4.562852777492357070e+00 / ln2, --7.959852224170357538e+00 / ln2, --1.359735121802292568e+01 / ln2, --8.140218559980493040e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.642897843502046484e+00 / ln2, --7.048892879291960512e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --9.793394681581565564e+00 / ln2, --7.720199943466562686e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.484916075864178175e+00 / ln2, --4.562852777492357070e+00 / ln2, --4.841396924932839241e+00 / ln2, --5.861249608063488381e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.754337034915018023e+00 / ln2, --8.812268409318086526e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.264380688290192367e+01 / ln2, --2.462783453866639771e+00 / ln2, --4.893167479319754598e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.604168121450740614e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.186698218369051538e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.498412758302154479e+00 / ln2, --7.689409517815276374e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.283998021384489974e+01 / ln2, --4.091764045676016259e+00 / ln2, --3.631360480608693209e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.893167479319754598e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.909735959825669127e+00 / ln2, --7.564037047890797894e+00 / ln2, --4.604168121450740614e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --8.877589121715919518e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.754337034915018023e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.424715454340284460e+00 / ln2, --6.909735959825669127e+00 / ln2, --1.125542566348871354e+01 / ln2, --6.517562281884773157e+00 / ln2, --7.868991888563591885e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.048696560647437082e+01 / ln2, --6.007365244407383287e+00 / ln2, --7.684202738748299844e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.186698218369051538e+00 / ln2, --7.048892879291960512e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.143181862813722027e+00 / ln2, --6.017498482476998589e+00 / ln2, --4.576662416349575935e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.691538586043964010e+00 / ln2, --4.049563242290908249e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.223992983953650970e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.113891938530826131e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.177102904471855283e+00 / ln2, --8.847574884292626507e+00 / ln2, --6.512580640245118957e+00 / ln2, --4.580662492468392522e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.017498482476998589e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --7.186698218369051538e+00 / ln2, --8.598045803528568953e+00 / ln2, --7.868991888563591885e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.923664837455273613e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.754337034915018023e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.691538586043964010e+00 / ln2, --1.087984978545612869e+01 / ln2, --5.284098860888144067e+00 / ln2, --5.536137450497251145e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.861249608063488381e+00 / ln2, --5.193805121009943626e+00 / ln2, --8.022806380334262855e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.584033785323046395e+00 / ln2, --7.358997954444022938e+00 / ln2, --1.268608111131628036e+01 / ln2, --4.160925916687072679e+00 / ln2, --5.025989230275349939e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.415204418624045779e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.193805121009943626e+00 / ln2, --4.893167479319754598e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.424715454340284460e+00 / ln2, --6.006187732178176475e+00 / ln2, --3.949349394517413181e+00 / ln2, --7.517325864764372589e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --8.884045802498089728e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.764755566332865122e+00 / ln2, --5.861249608063488381e+00 / ln2, --5.332499360388146314e+00 / ln2, --3.631360480608693209e+00 / ln2, --7.606027863309607895e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.511251163267971265e+00 / ln2, --8.495410644101937692e+00 / ln2, --3.296199802569410142e+00 / ln2, --8.598045803528568953e+00 / ln2, --4.576662416349575935e+00 / ln2, --5.195119186325862337e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.284098860888144067e+00 / ln2, --7.186698218369051538e+00 / ln2, --4.691538586043964010e+00 / ln2, --8.071909107879246648e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.283998021384489974e+01 / ln2, --3.949349394517413181e+00 / ln2, --6.694546051260094721e+00 / ln2, --4.754337034915018023e+00 / ln2, --6.236592765249644010e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.949336081541920507e+00 / ln2, --3.631360480608693209e+00 / ln2, --1.025011173880692184e+01 / ln2, --2.462783453866639771e+00 / ln2, --6.532634035752141521e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.674700103110665417e+00 / ln2, --3.949349394517413181e+00 / ln2, --6.674700103110665417e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.871019786565007337e+00 / ln2, --4.424715454340284460e+00 / ln2, --5.345707246405288160e+00 / ln2, --4.604168121450740614e+00 / ln2, --1.073778889043102325e+01 / ln2, --3.631360480608693209e+00 / ln2, --4.160925916687072679e+00 / ln2, --5.536137450497251145e+00 / ln2, --4.919649166968065757e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.798856991358857016e+00 / ln2, --8.951382076635610474e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.294588429854087508e+00 / ln2, --6.512580640245118957e+00 / ln2, --6.584033785323046395e+00 / ln2, --7.021711310391386185e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.754707819725457085e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.553599664845023653e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.694546051260094721e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.619344887229415164e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.424166483534085259e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.763732050866829049e+00 / ln2, --6.512580640245118957e+00 / ln2, --5.536137450497251145e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.070585939587089008e+01 / ln2, --5.536137450497251145e+00 / ln2, --6.006187732178176475e+00 / ln2, --4.424715454340284460e+00 / ln2, --6.694546051260094721e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.536137450497251145e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.576662416349575935e+00 / ln2, --7.703898338055121364e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.745862952448395511e+00 / ln2, --5.754707819725457085e+00 / ln2, --5.332499360388146314e+00 / ln2, --8.911633169851866043e+00 / ln2, --5.195119186325862337e+00 / ln2, --6.812113812154088954e+00 / ln2, --1.278432279724004239e+01 / ln2, --5.861249608063488381e+00 / ln2, --6.763732050866829049e+00 / ln2, --5.959821016291367179e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.498412758302154479e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --7.368858813512747297e+00 / ln2, --9.294209431283057654e+00 / ln2, --9.349236770827415555e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.511251163267971265e+00 / ln2, --1.132541823088126165e+01 / ln2, --2.462783453866639771e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.576662416349575935e+00 / ln2, --4.919649166968065757e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.511251163267971265e+00 / ln2, --4.511251163267971265e+00 / ln2, --4.424715454340284460e+00 / ln2, --5.871019786565007337e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.580662492468392522e+00 / ln2, --5.754707819725457085e+00 / ln2, --8.181145976660216590e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.072732339370881860e+00 / ln2, --3.631360480608693209e+00 / ln2, --7.789351191264211494e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.204137922631861990e+01 / ln2, --4.143181862813722027e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.458537022627602653e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.642897843502046484e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --3.949349394517413181e+00 / ln2, --5.959821016291367179e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.415204418624045779e+00 / ln2, --8.657273747556139654e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.754337034915018023e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.424715454340284460e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.754337034915018023e+00 / ln2, --4.642897843502046484e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.424166483534085259e+00 / ln2, --5.553599664845023653e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.971660331060701488e+00 / ln2, --7.766312407968571918e+00 / ln2, --4.841396924932839241e+00 / ln2, --4.841396924932839241e+00 / ln2, --6.121057297107224571e+00 / ln2, --6.017498482476998589e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.498412758302154479e+00 / ln2, --7.789351191264211494e+00 / ln2, --7.413281563246960637e+00 / ln2, --3.949349394517413181e+00 / ln2, --4.642897843502046484e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.397372105698754474e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.861249608063488381e+00 / ln2, --1.031514943090967940e+01 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.871019786565007337e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.621647006643879507e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.580662492468392522e+00 / ln2, --4.883577810848264811e+00 / ln2, --7.766312407968571918e+00 / ln2, --5.542219003269678979e+00 / ln2, --4.841396924932839241e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.236592765249644010e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.160925916687072679e+00 / ln2, --5.332499360388146314e+00 / ln2, --8.382633526813590308e+00 / ln2, --5.193805121009943626e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.049563242290908249e+00 / ln2, --5.345707246405288160e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.689409517815276374e+00 / ln2, --6.954184282296374420e+00 / ln2, --4.160925916687072679e+00 / ln2, --5.332499360388146314e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.193805121009943626e+00 / ln2, --6.909735959825669127e+00 / ln2, --7.290844047540147699e+00 / ln2, --7.048892879291960512e+00 / ln2, --3.631360480608693209e+00 / ln2, --1.087984978545612869e+01 / ln2, --6.017498482476998589e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.345707246405288160e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.871019786565007337e+00 / ln2, --6.017498482476998589e+00 / ln2, --4.883577810848264811e+00 / ln2, --4.049563242290908249e+00 / ln2, --5.195119186325862337e+00 / ln2, --4.604168121450740614e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.745862952448395511e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.224702791393450951e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.160925916687072679e+00 / ln2, --7.711929296494973940e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.067243984851346639e+00 / ln2, --6.812113812154088954e+00 / ln2, --4.143181862813722027e+00 / ln2, --6.007365244407383287e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.919649166968065757e+00 / ln2, --4.424715454340284460e+00 / ln2, --5.415204418624045779e+00 / ln2, --5.923664837455273613e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.143181862813722027e+00 / ln2, --7.048892879291960512e+00 / ln2, --7.048892879291960512e+00 / ln2, --4.576662416349575935e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.332499360388146314e+00 / ln2, --7.720199943466562686e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.745862952448395511e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.284098860888144067e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.143181862813722027e+00 / ln2, --8.847574884292626507e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.600485884087979649e+00 / ln2, --5.542219003269678979e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.195119186325862337e+00 / ln2, --5.113891938530826131e+00 / ln2, --5.617458030859222795e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --1.166627883103860697e+01 / ln2, --6.017498482476998589e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.754337034915018023e+00 / ln2, --6.909176526836401599e+00 / ln2, --7.868991888563591885e+00 / ln2, --6.512580640245118957e+00 / ln2, --7.703898338055121364e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.143181862813722027e+00 / ln2, --7.447790001659071457e+00 / ln2, --5.345707246405288160e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.553599664845023653e+00 / ln2, --5.195119186325862337e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.049563242290908249e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.836307946957008141e+01 / ln2, --8.812268409318086526e+00 / ln2, --3.631360480608693209e+00 / ln2, --7.021711310391386185e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.885183121012873109e+00 / ln2, --7.290844047540147699e+00 / ln2, --9.779642293724309710e+00 / ln2, --1.165915831016035398e+01 / ln2, --1.316151932531392532e+01 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.512580640245118957e+00 / ln2, --4.143181862813722027e+00 / ln2, --7.108260886292240066e+00 / ln2, --6.498914935067912069e+00 / ln2, --5.536137450497251145e+00 / ln2, --5.923664837455273613e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.193805121009943626e+00 / ln2, --5.536137450497251145e+00 / ln2, --4.091764045676016259e+00 / ln2, --6.231247566439284569e+00 / ln2, --7.447790001659071457e+00 / ln2, --5.871019786565007337e+00 / ln2, --4.604168121450740614e+00 / ln2, --5.754707819725457085e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.807386367050035858e+00 / ln2, --6.007365244407383287e+00 / ln2, --7.689409517815276374e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.841396924932839241e+00 / ln2, --4.424715454340284460e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.691538586043964010e+00 / ln2, --6.017498482476998589e+00 / ln2, --7.267062386635592119e+00 / ln2, --7.267062386635592119e+00 / ln2, --5.113891938530826131e+00 / ln2, --7.327920672174300876e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.017498482476998589e+00 / ln2, --6.017498482476998589e+00 / ln2, --6.425466655005584116e+00 / ln2, --5.397372105698754474e+00 / ln2, --4.754337034915018023e+00 / ln2, --7.742568993938474087e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.841396924932839241e+00 / ln2, --5.193805121009943626e+00 / ln2, --8.417223922976480921e+00 / ln2, --7.683429021422371719e+00 / ln2, --5.685674146241039395e+00 / ln2, --5.193805121009943626e+00 / ln2, --9.069538553398722058e+00 / ln2, --5.871019786565007337e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.193805121009943626e+00 / ln2, --5.553599664845023653e+00 / ln2, --4.754337034915018023e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --5.542219003269678979e+00 / ln2, --6.944473462017027643e+00 / ln2, --5.025989230275349939e+00 / ln2, --6.947297936873974677e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.998325418845404933e+00 / ln2, --4.091764045676016259e+00 / ln2, --6.944473462017027643e+00 / ln2, --6.017498482476998589e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.184300953920424782e+00 / ln2, --9.883349451013705433e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.108260886292240066e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.923664837455273613e+00 / ln2, --6.694546051260094721e+00 / ln2, --6.885183121012873109e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.284098860888144067e+00 / ln2, --5.871019786565007337e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.576662416349575935e+00 / ln2, --7.683429021422371719e+00 / ln2, --5.332499360388146314e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.284098860888144067e+00 / ln2, --5.025989230275349939e+00 / ln2, --6.971660331060701488e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.657273747556139654e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.345707246405288160e+00 / ln2, --3.296199802569410142e+00 / ln2, --3.949349394517413181e+00 / ln2, --6.584033785323046395e+00 / ln2, --2.462783453866639771e+00 / ln2, --8.807386367050035858e+00 / ln2, --4.604168121450740614e+00 / ln2, --5.617458030859222795e+00 / ln2, --5.997831470194255665e+00 / ln2, --5.674889513884615155e+00 / ln2, --5.113891938530826131e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --8.605315052977417167e+00 / ln2, --4.576662416349575935e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.694546051260094721e+00 / ln2, --5.754707819725457085e+00 / ln2, --1.092512541773554879e+01 / ln2, --6.909735959825669127e+00 / ln2, --5.754707819725457085e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.498412758302154479e+00 / ln2, --6.017498482476998589e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.224969357884932641e+01 / ln2, --5.025989230275349939e+00 / ln2, --5.195119186325862337e+00 / ln2, --1.054482717141193682e+01 / ln2, --7.104077188637425877e+00 / ln2, --6.017498482476998589e+00 / ln2, --5.754707819725457085e+00 / ln2, --5.193805121009943626e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.949336081541920507e+00 / ln2, --3.949349394517413181e+00 / ln2, --4.562852777492357070e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.694095152899173229e+00 / ln2, --4.754337034915018023e+00 / ln2, --4.049563242290908249e+00 / ln2, --5.113891938530826131e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.720199943466562686e+00 / ln2, --6.947297936873974677e+00 / ln2, --7.021711310391386185e+00 / ln2, --4.691538586043964010e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.352896081343149426e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.284098860888144067e+00 / ln2, --4.893167479319754598e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.841396924932839241e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.754337034915018023e+00 / ln2, --4.576662416349575935e+00 / ln2, --5.193805121009943626e+00 / ln2, --8.071909107879246648e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.397372105698754474e+00 / ln2, --4.511251163267971265e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.512580640245118957e+00 / ln2, --2.462783453866639771e+00 / ln2, --8.382633526813590308e+00 / ln2, --5.798856991358857016e+00 / ln2, --9.990045079829323882e+00 / ln2, --3.949349394517413181e+00 / ln2, --6.584033785323046395e+00 / ln2, --6.532634035752141521e+00 / ln2, --7.048892879291960512e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.424166483534085259e+00 / ln2, --4.642897843502046484e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.576662416349575935e+00 / ln2, --1.040237040920392531e+01 / ln2, --3.631360480608693209e+00 / ln2, --5.025989230275349939e+00 / ln2, --9.026976322186319734e+00 / ln2, --5.415204418624045779e+00 / ln2, --5.177102904471855283e+00 / ln2, --7.564037047890797894e+00 / ln2, --5.316943408775147262e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.919649166968065757e+00 / ln2, --7.699896352130231492e+00 / ln2, --6.352896081343149426e+00 / ln2, --7.606027863309607895e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.536137450497251145e+00 / ln2, --5.542219003269678979e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --8.957187461268130590e+00 / ln2, --8.071909107879246648e+00 / ln2, --3.296199802569410142e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --1.040237040920392531e+01 / ln2, --5.959821016291367179e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.998325418845404933e+00 / ln2, --5.195119186325862337e+00 / ln2, --5.284098860888144067e+00 / ln2, --8.839003156104606518e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.152879364568431875e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.553599664845023653e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.694546051260094721e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.997831470194255665e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.685674146241039395e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.580662492468392522e+00 / ln2, --4.604168121450740614e+00 / ln2, --7.358997954444022938e+00 / ln2, --5.193805121009943626e+00 / ln2, --9.224702791393450951e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.542219003269678979e+00 / ln2, --2.462783453866639771e+00 / ln2, --9.442907637099850149e+00 / ln2, --4.562852777492357070e+00 / ln2, --7.766312407968571918e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.893167479319754598e+00 / ln2, --5.553599664845023653e+00 / ln2, --1.070585939587089008e+01 / ln2, --4.642897843502046484e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.332499360388146314e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.073778889043102325e+01 / ln2, --5.332499360388146314e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.833531233360072399e+00 / ln2, --7.124880459954479939e+00 / ln2, --5.345707246405288160e+00 / ln2, --3.296199802569410142e+00 / ln2, --8.350828230729891999e+00 / ln2, --6.909176526836401599e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.424715454340284460e+00 / ln2, --5.871019786565007337e+00 / ln2, --5.195119186325862337e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.511251163267971265e+00 / ln2, --4.160925916687072679e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.754337034915018023e+00 / ln2, --5.284098860888144067e+00 / ln2, --4.424715454340284460e+00 / ln2, --7.048892879291960512e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.096048994255763454e+01 / ln2, --6.909735959825669127e+00 / ln2, --4.754337034915018023e+00 / ln2, --4.576662416349575935e+00 / ln2, --4.091764045676016259e+00 / ln2, --6.720134407192276171e+00 / ln2, --9.172628873852490372e+00 / ln2, --4.562852777492357070e+00 / ln2, --6.425466655005584116e+00 / ln2, --5.959821016291367179e+00 / ln2, --4.883577810848264811e+00 / ln2, --4.576662416349575935e+00 / ln2, --4.754337034915018023e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.498412758302154479e+00 / ln2, --7.048892879291960512e+00 / ln2, --6.327963919515099178e+00 / ln2, --6.352896081343149426e+00 / ln2, --6.936476480951127677e+00 / ln2, --8.911633169851866043e+00 / ln2, --3.949349394517413181e+00 / ln2, --4.754337034915018023e+00 / ln2, --6.517562281884773157e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.562852777492357070e+00 / ln2, --6.017498482476998589e+00 / ln2, --4.919649166968065757e+00 / ln2, --6.885183121012873109e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.576662416349575935e+00 / ln2, --5.553599664845023653e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.812611176663798673e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.536137450497251145e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.971660331060701488e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --9.357001407991552000e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.017498482476998589e+00 / ln2, --4.562852777492357070e+00 / ln2, --4.998325418845404933e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.415204418624045779e+00 / ln2, --9.230539968036323373e+00 / ln2, --5.316943408775147262e+00 / ln2, --5.113891938530826131e+00 / ln2, --4.562852777492357070e+00 / ln2, --3.631360480608693209e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.152114117370445001e+00 / ln2, --5.674889513884615155e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.745862952448395511e+00 / ln2, --4.160925916687072679e+00 / ln2, --8.181145976660216590e+00 / ln2, --5.871019786565007337e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.754337034915018023e+00 / ln2, --4.580662492468392522e+00 / ln2, --1.030807112927032776e+01 / ln2, --6.532634035752141521e+00 / ln2, --3.296199802569410142e+00 / ln2, --8.438636990658810788e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.215435559384440367e+00 / ln2, --5.195119186325862337e+00 / ln2, --4.498412758302154479e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.536137450497251145e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.754337034915018023e+00 / ln2, --4.143181862813722027e+00 / ln2, --1.061406875134344041e+01 / ln2, --6.694546051260094721e+00 / ln2, --3.296199802569410142e+00 / ln2, --1.925486712770660702e+01 / ln2, --2.046324443145273619e+00 / ln2, --7.048892879291960512e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.699896352130231492e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.115671305913878442e+01 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --1.344520137693501916e+01 / ln2, --6.517562281884773157e+00 / ln2, --5.415204418624045779e+00 / ln2, --1.105715580744062621e+01 / ln2, --2.046324443145273619e+00 / ln2, --4.160925916687072679e+00 / ln2, --6.152879364568431875e+00 / ln2, --4.091764045676016259e+00 / ln2, --6.720134407192276171e+00 / ln2, --4.498412758302154479e+00 / ln2, --4.754337034915018023e+00 / ln2, --8.245710019274113733e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.091764045676016259e+00 / ln2, --1.012900414694919959e+01 / ln2, --5.959821016291367179e+00 / ln2, --7.048892879291960512e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.048892879291960512e+00 / ln2, --8.323494738374519031e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.006187732178176475e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.264380688290192367e+01 / ln2, --2.046324443145273619e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.621647006643879507e+00 / ln2, --5.923664837455273613e+00 / ln2, --7.021711310391386185e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.754337034915018023e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.580662492468392522e+00 / ln2, --6.498914935067912069e+00 / ln2, --6.007365244407383287e+00 / ln2, --6.286368968884687547e+00 / ln2, --4.049563242290908249e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.143181862813722027e+00 / ln2, --9.404417952869394526e+00 / ln2, --4.754337034915018023e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.184300953920424782e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.600485884087979649e+00 / ln2, --6.808146457075214819e+00 / ln2, --4.691538586043964010e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.944473462017027643e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.318139382317166763e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.923664837455273613e+00 / ln2, --5.345707246405288160e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.812113812154088954e+00 / ln2, --7.119927210762653225e+00 / ln2, --5.542219003269678979e+00 / ln2, --4.049563242290908249e+00 / ln2, --6.936476480951127677e+00 / ln2, --5.959821016291367179e+00 / ln2, --6.885183121012873109e+00 / ln2, --4.498412758302154479e+00 / ln2, --4.049563242290908249e+00 / ln2, --8.371748526324319428e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.949349394517413181e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.971660331060701488e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.017498482476998589e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.434248995347461531e+00 / ln2, --2.462783453866639771e+00 / ln2, --8.371748526324319428e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.512580640245118957e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.949349394517413181e+00 / ln2, --5.871019786565007337e+00 / ln2, --1.301233579505205462e+01 / ln2, --7.289077351069391142e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.359401430306112601e+00 / ln2, --1.130108731959751189e+01 / ln2, --4.424715454340284460e+00 / ln2, --3.949349394517413181e+00 / ln2, --3.949349394517413181e+00 / ln2, --6.512580640245118957e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.542219003269678979e+00 / ln2, --7.359401430306112601e+00 / ln2, --7.358997954444022938e+00 / ln2, --6.584033785323046395e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.861249608063488381e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.028217115906610246e+01 / ln2, --5.685674146241039395e+00 / ln2, --6.947297936873974677e+00 / ln2, --8.070842469545034703e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.284098860888144067e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.893167479319754598e+00 / ln2, --8.098608047708514945e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.438636990658810788e+00 / ln2, --4.998325418845404933e+00 / ln2, --5.949336081541920507e+00 / ln2, --5.553599664845023653e+00 / ln2, --7.553188966816772876e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.691538586043964010e+00 / ln2, --4.919649166968065757e+00 / ln2, --6.885183121012873109e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.067243984851346639e+00 / ln2, --3.631360480608693209e+00 / ln2, --8.983215916499753817e+00 / ln2, --4.754337034915018023e+00 / ln2, --7.048892879291960512e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.223992983953650970e+00 / ln2, --5.025989230275349939e+00 / ln2, --6.885183121012873109e+00 / ln2, --4.424715454340284460e+00 / ln2, --5.415204418624045779e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.327920672174300876e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.184300953920424782e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.091764045676016259e+00 / ln2, --7.742568993938474087e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.584033785323046395e+00 / ln2, --4.883577810848264811e+00 / ln2, --5.910272666779689210e+00 / ln2, --4.580662492468392522e+00 / ln2, --7.184300953920424782e+00 / ln2, --6.517562281884773157e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.909176526836401599e+00 / ln2, --5.621647006643879507e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.617458030859222795e+00 / ln2, --5.798856991358857016e+00 / ln2, --4.562852777492357070e+00 / ln2, --7.290844047540147699e+00 / ln2, --5.316943408775147262e+00 / ln2, --6.944473462017027643e+00 / ln2, --4.604168121450740614e+00 / ln2, --3.949349394517413181e+00 / ln2, --5.798856991358857016e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.883577810848264811e+00 / ln2, --5.025989230275349939e+00 / ln2, --7.289077351069391142e+00 / ln2, --1.258907280406040030e+01 / ln2, --3.949349394517413181e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.517562281884773157e+00 / ln2, --4.498412758302154479e+00 / ln2, --4.604168121450740614e+00 / ln2, --6.600485884087979649e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.812113812154088954e+00 / ln2, --5.177102904471855283e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.576662416349575935e+00 / ln2, --6.049433957816686913e+00 / ln2, --5.674889513884615155e+00 / ln2, --9.349236770827415555e+00 / ln2, --5.754707819725457085e+00 / ln2, --7.368858813512747297e+00 / ln2, --1.344520137693501916e+01 / ln2, --6.215435559384440367e+00 / ln2, --6.425466655005584116e+00 / ln2, --7.184300953920424782e+00 / ln2, --6.152879364568431875e+00 / ln2, --5.025989230275349939e+00 / ln2, --1.083865141940506760e+01 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.604168121450740614e+00 / ln2, --6.498914935067912069e+00 / ln2, --5.536137450497251145e+00 / ln2, --7.959852224170357538e+00 / ln2, --1.359735121802292568e+01 / ln2, --6.223992983953650970e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.160925916687072679e+00 / ln2, --7.295589409525732094e+00 / ln2, --6.017498482476998589e+00 / ln2, --5.923664837455273613e+00 / ln2, --6.763732050866829049e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.631360480608693209e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.674700103110665417e+00 / ln2, --7.048892879291960512e+00 / ln2, --4.562852777492357070e+00 / ln2, --3.949349394517413181e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.919649166968065757e+00 / ln2, --5.861249608063488381e+00 / ln2, --9.069538553398722058e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.617458030859222795e+00 / ln2, --5.113891938530826131e+00 / ln2, --4.604168121450740614e+00 / ln2, --5.195119186325862337e+00 / ln2, --5.833531233360072399e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.495410644101937692e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.177102904471855283e+00 / ln2, --4.160925916687072679e+00 / ln2, --3.631360480608693209e+00 / ln2, --9.579468945846944194e+00 / ln2, --5.959821016291367179e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --6.515023211937145398e+00 / ln2, --4.049563242290908249e+00 / ln2, --1.105715580744062621e+01 / ln2, --8.005103642565483568e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.095979992273871417e+01 / ln2, --4.580662492468392522e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --9.315078460598257948e+00 / ln2, --4.049563242290908249e+00 / ln2, --7.517325864764372589e+00 / ln2, --4.642897843502046484e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.195119186325862337e+00 / ln2, --4.511251163267971265e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.316943408775147262e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.327963919515099178e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.893167479319754598e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.057306084326360640e+01 / ln2, --7.289077351069391142e+00 / ln2, --3.949349394517413181e+00 / ln2, --4.049563242290908249e+00 / ln2, --7.289077351069391142e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.143181862813722027e+00 / ln2, --6.936476480951127677e+00 / ln2, --5.871019786565007337e+00 / ln2, --5.332499360388146314e+00 / ln2, --7.764755566332865122e+00 / ln2, --1.278432279724004239e+01 / ln2, --2.046324443145273619e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.424715454340284460e+00 / ln2, --5.861249608063488381e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.345707246405288160e+00 / ln2, --5.536137450497251145e+00 / ln2, --8.812268409318086526e+00 / ln2, --4.143181862813722027e+00 / ln2, --8.777444697110189153e+00 / ln2, --6.463978470342545357e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.372987562155319807e+00 / ln2, --7.048892879291960512e+00 / ln2, --7.295589409525732094e+00 / ln2, --5.542219003269678979e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.998325418845404933e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.699896352130231492e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.893167479319754598e+00 / ln2, --6.012689565822368465e+00 / ln2, --5.536137450497251145e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.415204418624045779e+00 / ln2, --3.949349394517413181e+00 / ln2, --7.810898878696857395e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.919649166968065757e+00 / ln2, --4.841396924932839241e+00 / ln2, --4.642897843502046484e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.223992983953650970e+00 / ln2, --6.909735959825669127e+00 / ln2, --5.617458030859222795e+00 / ln2, --3.949349394517413181e+00 / ln2, --6.012689565822368465e+00 / ln2, --8.957187461268130590e+00 / ln2, --5.193805121009943626e+00 / ln2, --4.754337034915018023e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.861249608063488381e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --4.049563242290908249e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.621647006643879507e+00 / ln2, --7.299334151304765150e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.193805121009943626e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.642897843502046484e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.949349394517413181e+00 / ln2, --5.542219003269678979e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.223992983953650970e+00 / ln2, --6.512580640245118957e+00 / ln2, --4.049563242290908249e+00 / ln2, --9.734695089071365715e+00 / ln2, --4.883577810848264811e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.562852777492357070e+00 / ln2, --5.536137450497251145e+00 / ln2, --4.604168121450740614e+00 / ln2, --6.406237793012392601e+00 / ln2, --4.642897843502046484e+00 / ln2, --4.919649166968065757e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.841396924932839241e+00 / ln2, --1.123286076255336674e+01 / ln2, --9.563168690224490120e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.580662492468392522e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.259851116637276114e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.072732339370881860e+00 / ln2, --1.130108731959751189e+01 / ln2, --6.515023211937145398e+00 / ln2, --3.631360480608693209e+00 / ln2, --1.139296906381306052e+01 / ln2, --7.359401430306112601e+00 / ln2, --4.919649166968065757e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.883577810848264811e+00 / ln2, --5.284098860888144067e+00 / ln2, --3.949349394517413181e+00 / ln2, --4.754337034915018023e+00 / ln2, --5.861249608063488381e+00 / ln2, --1.150475124638018443e+01 / ln2, --2.462783453866639771e+00 / ln2, --4.049563242290908249e+00 / ln2, --3.949349394517413181e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.327963919515099178e+00 / ln2, --8.951382076635610474e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.498412758302154479e+00 / ln2, --6.517562281884773157e+00 / ln2, --5.871019786565007337e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.345707246405288160e+00 / ln2, --1.085914756101938572e+01 / ln2, --1.115671305913878442e+01 / ln2, --6.954184282296374420e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.774158714333733400e+00 / ln2, --5.113891938530826131e+00 / ln2, --5.177102904471855283e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.286368968884687547e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.604168121450740614e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.691538586043964010e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --1.042619382222219038e+01 / ln2, --9.224702791393450951e+00 / ln2, --6.007365244407383287e+00 / ln2, --3.631360480608693209e+00 / ln2, --8.022806380334262855e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --9.852642968671261769e+00 / ln2, --3.631360480608693209e+00 / ln2, --1.115671305913878442e+01 / ln2, --6.517562281884773157e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.893167479319754598e+00 / ln2, --6.484916075864178175e+00 / ln2, --3.631360480608693209e+00 / ln2, --6.067243984851346639e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.861249608063488381e+00 / ln2, --4.091764045676016259e+00 / ln2, --3.949349394517413181e+00 / ln2, --8.495410644101937692e+00 / ln2, --5.284098860888144067e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.584033785323046395e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.049563242290908249e+00 / ln2, --6.498914935067912069e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.576662416349575935e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.674700103110665417e+00 / ln2, --5.833531233360072399e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.049563242290908249e+00 / ln2, --6.406237793012392601e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.049563242290908249e+00 / ln2, --7.789351191264211494e+00 / ln2, --7.124880459954479939e+00 / ln2, --6.463978470342545357e+00 / ln2, --5.617458030859222795e+00 / ln2, --9.529197793097948121e+00 / ln2, --4.091764045676016259e+00 / ln2, --8.657273747556139654e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.810898878696857395e+00 / ln2, --4.091764045676016259e+00 / ln2, --8.231385546183886959e+00 / ln2, --6.909176526836401599e+00 / ln2, --1.269438761816860683e+01 / ln2, --1.106006057964308731e+01 / ln2, --6.517562281884773157e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.358997954444022938e+00 / ln2, --7.183140534972725533e+00 / ln2, --1.130525701277283801e+01 / ln2, --5.959821016291367179e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.025011173880692184e+01 / ln2, --5.193805121009943626e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.025159966901359709e+01 / ln2, --5.025989230275349939e+00 / ln2, --1.057306084326360640e+01 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.754707819725457085e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.498412758302154479e+00 / ln2, --4.604168121450740614e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.223992983953650970e+00 / ln2, --1.836307946957008141e+01 / ln2, --2.046324443145273619e+00 / ln2, --5.316943408775147262e+00 / ln2, --4.511251163267971265e+00 / ln2, --6.971660331060701488e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.498412758302154479e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.562852777492357070e+00 / ln2, --6.231247566439284569e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.119927210762653225e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.919649166968065757e+00 / ln2, --4.604168121450740614e+00 / ln2, --5.195119186325862337e+00 / ln2, --6.017498482476998589e+00 / ln2, --5.025989230275349939e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.576662416349575935e+00 / ln2, --9.465543819552042493e+00 / ln2, --5.861249608063488381e+00 / ln2, --8.746627133441950974e+00 / ln2, --4.919649166968065757e+00 / ln2, --5.871019786565007337e+00 / ln2, --5.397372105698754474e+00 / ln2, --6.007365244407383287e+00 / ln2, --6.391839193742723246e+00 / ln2, --5.193805121009943626e+00 / ln2, --9.465543819552042493e+00 / ln2, --4.511251163267971265e+00 / ln2, --1.145387772643075230e+01 / ln2, --7.720199943466562686e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.193805121009943626e+00 / ln2, --7.186698218369051538e+00 / ln2, --8.245710019274113733e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.604168121450740614e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.332499360388146314e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.267062386635592119e+00 / ln2, --1.025159966901359709e+01 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.774158714333733400e+00 / ln2, --6.532634035752141521e+00 / ln2, --5.861249608063488381e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.883349451013705433e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.177102904471855283e+00 / ln2, --4.604168121450740614e+00 / ln2, --8.663408750741215414e+00 / ln2, --8.350828230729891999e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --8.774158714333733400e+00 / ln2, --3.296199802569410142e+00 / ln2, --3.296199802569410142e+00 / ln2, --7.766312407968571918e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.284098860888144067e+00 / ln2, --4.841396924932839241e+00 / ln2, --4.160925916687072679e+00 / ln2, --5.284098860888144067e+00 / ln2, --4.998325418845404933e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.604168121450740614e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.165915831016035398e+01 / ln2, --5.193805121009943626e+00 / ln2, --9.785577344871311922e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.469708295055941250e+00 / ln2, --7.789351191264211494e+00 / ln2, --4.642897843502046484e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.604168121450740614e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.998325418845404933e+00 / ln2, --8.551979924991755411e+00 / ln2, --9.026976322186319734e+00 / ln2, --9.447855320106350874e+00 / ln2, --5.113891938530826131e+00 / ln2, --1.087984978545612869e+01 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.576662416349575935e+00 / ln2, --6.458537022627602653e+00 / ln2, --7.641510812793480767e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.919649166968065757e+00 / ln2, --1.054482717141193682e+01 / ln2, --4.562852777492357070e+00 / ln2, --9.439487004418870342e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.685674146241039395e+00 / ln2, --4.091764045676016259e+00 / ln2, --6.763732050866829049e+00 / ln2, --5.923664837455273613e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.049563242290908249e+00 / ln2, --5.754707819725457085e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.689409517815276374e+00 / ln2, --4.604168121450740614e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.841396924932839241e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.425466655005584116e+00 / ln2, --3.631360480608693209e+00 / ln2, --8.777444697110189153e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --4.604168121450740614e+00 / ln2, --4.160925916687072679e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.415204418624045779e+00 / ln2, --4.642897843502046484e+00 / ln2, --7.564037047890797894e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.143181862813722027e+00 / ln2, --3.949349394517413181e+00 / ln2, --7.057958593457523300e+00 / ln2, --7.210947893307020351e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.562852777492357070e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.091764045676016259e+00 / ln2, --6.017498482476998589e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.580662492468392522e+00 / ln2, --8.812268409318086526e+00 / ln2, --7.184300953920424782e+00 / ln2, --5.345707246405288160e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.152879364568431875e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.049563242290908249e+00 / ln2, --5.674889513884615155e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.562852777492357070e+00 / ln2, --4.604168121450740614e+00 / ln2, --4.893167479319754598e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --7.362920232037894586e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.258907280406040030e+01 / ln2, --7.210947893307020351e+00 / ln2, --6.909176526836401599e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.615348029313974365e+00 / ln2, --3.949349394517413181e+00 / ln2, --9.760673288736205322e+00 / ln2, --8.495410644101937692e+00 / ln2, --9.484310506563019771e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.515023211937145398e+00 / ln2, --1.014429960148050647e+01 / ln2, --1.125542566348871354e+01 / ln2, --3.949349394517413181e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.049433957816686913e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.160925916687072679e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.193805121009943626e+00 / ln2, --5.542219003269678979e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --5.025989230275349939e+00 / ln2, --7.119927210762653225e+00 / ln2, --5.959821016291367179e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.604168121450740614e+00 / ln2, --4.841396924932839241e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.327963919515099178e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.425466655005584116e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.691538586043964010e+00 / ln2, --6.236592765249644010e+00 / ln2, --3.296199802569410142e+00 / ln2, --9.465543819552042493e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.833531233360072399e+00 / ln2, --6.954184282296374420e+00 / ln2, --6.017498482476998589e+00 / ln2, --8.072732339370881860e+00 / ln2, --3.296199802569410142e+00 / ln2, --1.028217115906610246e+01 / ln2, --2.462783453866639771e+00 / ln2, --7.742568993938474087e+00 / ln2, --6.007365244407383287e+00 / ln2, --8.636130365971254719e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.104077188637425877e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.631360480608693209e+00 / ln2, --1.019261621630061398e+01 / ln2, --1.130525701277283801e+01 / ln2, --4.498412758302154479e+00 / ln2, --6.971660331060701488e+00 / ln2, --7.359401430306112601e+00 / ln2, --8.951382076635610474e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.580662492468392522e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.054482717141193682e+01 / ln2, --4.424715454340284460e+00 / ln2, --4.919649166968065757e+00 / ln2, --6.017498482476998589e+00 / ln2, --1.061406875134344041e+01 / ln2, --2.462783453866639771e+00 / ln2, --6.812113812154088954e+00 / ln2, --7.800758034760048254e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.193805121009943626e+00 / ln2, --5.685674146241039395e+00 / ln2, --1.025159966901359709e+01 / ln2, --4.424715454340284460e+00 / ln2, --5.959821016291367179e+00 / ln2, --9.484310506563019771e+00 / ln2, --1.258907280406040030e+01 / ln2, --9.529197793097948121e+00 / ln2, --4.424715454340284460e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.576662416349575935e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --8.232504733803645891e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.184300953920424782e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.424715454340284460e+00 / ln2, --5.542219003269678979e+00 / ln2, --6.223992983953650970e+00 / ln2, --9.779642293724309710e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.553599664845023653e+00 / ln2, --5.177102904471855283e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.998325418845404933e+00 / ln2, --5.284098860888144067e+00 / ln2, --4.883577810848264811e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.562852777492357070e+00 / ln2, --4.919649166968065757e+00 / ln2, --3.949349394517413181e+00 / ln2, --6.885183121012873109e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --7.684202738748299844e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.833531233360072399e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --9.579468945846944194e+00 / ln2, --1.050516998695719195e+01 / ln2, --4.562852777492357070e+00 / ln2, --3.296199802569410142e+00 / ln2, --6.152879364568431875e+00 / ln2, --5.113891938530826131e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.332499360388146314e+00 / ln2, --5.193805121009943626e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.861249608063488381e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.923664837455273613e+00 / ln2, --7.483355190078385455e+00 / ln2, --3.296199802569410142e+00 / ln2, --8.911633169851866043e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.193805121009943626e+00 / ln2, --8.233702486883688110e+00 / ln2, --5.113891938530826131e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.642897843502046484e+00 / ln2, --6.971660331060701488e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.861249608063488381e+00 / ln2, --6.600485884087979649e+00 / ln2, --5.542219003269678979e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.284098860888144067e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.267062386635592119e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.754707819725457085e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.562852777492357070e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.195119186325862337e+00 / ln2, --6.406237793012392601e+00 / ln2, --2.462783453866639771e+00 / ln2, --8.884045802498089728e+00 / ln2, --5.193805121009943626e+00 / ln2, --4.049563242290908249e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.007365244407383287e+00 / ln2, --4.883577810848264811e+00 / ln2, --6.424166483534085259e+00 / ln2, --8.812268409318086526e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.584033785323046395e+00 / ln2, --4.562852777492357070e+00 / ln2, --4.691538586043964010e+00 / ln2, --6.663698816176689910e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.091764045676016259e+00 / ln2, --6.971660331060701488e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.754707819725457085e+00 / ln2, --5.621647006643879507e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --5.758886612591042287e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.327963919515099178e+00 / ln2, --4.754337034915018023e+00 / ln2, --5.345707246405288160e+00 / ln2, --4.604168121450740614e+00 / ln2, --4.841396924932839241e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.893167479319754598e+00 / ln2, --2.046324443145273619e+00 / ln2, --7.368858813512747297e+00 / ln2, --5.871019786565007337e+00 / ln2, --4.143181862813722027e+00 / ln2, --5.959821016291367179e+00 / ln2, --4.998325418845404933e+00 / ln2, --4.576662416349575935e+00 / ln2, --5.177102904471855283e+00 / ln2, --7.184300953920424782e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.893167479319754598e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.576662416349575935e+00 / ln2, --4.691538586043964010e+00 / ln2, --4.091764045676016259e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.694546051260094721e+00 / ln2, --1.092512541773554879e+01 / ln2, --4.754337034915018023e+00 / ln2, --7.290844047540147699e+00 / ln2, --5.871019786565007337e+00 / ln2, --6.327963919515099178e+00 / ln2, --9.785577344871311922e+00 / ln2, --4.604168121450740614e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.121057297107224571e+00 / ln2, --4.424715454340284460e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.691538586043964010e+00 / ln2, --4.091764045676016259e+00 / ln2, --7.720199943466562686e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.883577810848264811e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.893167479319754598e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.949349394517413181e+00 / ln2, --7.119927210762653225e+00 / ln2, --8.071909107879246648e+00 / ln2, --4.691538586043964010e+00 / ln2, --2.462783453866639771e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.177102904471855283e+00 / ln2, --6.512580640245118957e+00 / ln2, --4.580662492468392522e+00 / ln2, --3.949349394517413181e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.183140534972725533e+00 / ln2, --5.861249608063488381e+00 / ln2, --6.017498482476998589e+00 / ln2, --4.424715454340284460e+00 / ln2, --5.758886612591042287e+00 / ln2, --4.143181862813722027e+00 / ln2, --4.091764045676016259e+00 / ln2, --5.332499360388146314e+00 / ln2, --4.893167479319754598e+00 / ln2, --9.648035504600203538e+00 / ln2, --6.286368968884687547e+00 / ln2, --5.025989230275349939e+00 / ln2, --7.517325864764372589e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.551979924991755411e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.397372105698754474e+00 / ln2, --5.177102904471855283e+00 / ln2, --5.415204418624045779e+00 / ln2, --4.893167479319754598e+00 / ln2, --2.046324443145273619e+00 / ln2, --8.839003156104606518e+00 / ln2, --7.359401430306112601e+00 / ln2, --7.210947893307020351e+00 / ln2, --4.893167479319754598e+00 / ln2, --5.025989230275349939e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.694546051260094721e+00 / ln2, --7.483355190078385455e+00 / ln2, --4.160925916687072679e+00 / ln2, --3.631360480608693209e+00 / ln2, --4.691538586043964010e+00 / ln2, --4.562852777492357070e+00 / ln2, --3.631360480608693209e+00 / ln2, --5.345707246405288160e+00 / ln2, --7.359401430306112601e+00 / ln2, --4.893167479319754598e+00 / ln2, --7.289077351069391142e+00 / ln2, --7.210947893307020351e+00 / ln2, --4.893167479319754598e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.861249608063488381e+00 / ln2, --4.562852777492357070e+00 / ln2, --4.580662492468392522e+00 / ln2, --7.362920232037894586e+00 / ln2, --4.576662416349575935e+00 / ln2, --4.576662416349575935e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.070585939587089008e+01 / ln2, --5.177102904471855283e+00 / ln2, --4.091764045676016259e+00 / ln2, --7.810898878696857395e+00 / ln2, --6.512580640245118957e+00 / ln2, --7.699896352130231492e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.754707819725457085e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.160925916687072679e+00 / ln2, --8.233702486883688110e+00 / ln2, --5.195119186325862337e+00 / ln2, --2.046324443145273619e+00 / ln2, --1.132541823088126165e+01 / ln2, --6.152879364568431875e+00 / ln2, --4.424715454340284460e+00 / ln2, --6.600485884087979649e+00 / ln2, --6.909735959825669127e+00 / ln2, --1.278432279724004239e+01 / ln2, --9.648035504600203538e+00 / ln2, --3.949349394517413181e+00 / ln2, --4.143181862813722027e+00 / ln2, --8.005103642565483568e+00 / ln2, --2.462783453866639771e+00 / ln2, --7.210947893307020351e+00 / ln2, --8.179445530167162914e+00 / ln2, --4.160925916687072679e+00 / ln2, --2.462783453866639771e+00 / ln2, --8.140218559980493040e+00 / ln2, --2.462783453866639771e+00 / ln2, --5.193805121009943626e+00 / ln2, --4.160925916687072679e+00 / ln2, --7.641510812793480767e+00 / ln2, --4.576662416349575935e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.332499360388146314e+00 / ln2, --1.175414779598468940e+01 / ln2, --2.046324443145273619e+00 / ln2, --8.617690255987351833e+00 / ln2, --4.143181862813722027e+00 / ln2, --3.296199802569410142e+00 / ln2, --7.683429021422371719e+00 / ln2, --5.674889513884615155e+00 / ln2, --5.177102904471855283e+00 / ln2, --6.885160160725777523e+00 / ln2, --6.763732050866829049e+00 / ln2, --2.462783453866639771e+00 / ln2, --6.017498482476998589e+00 / ln2, --6.152879364568431875e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.604168121450740614e+00 / ln2, --5.025989230275349939e+00 / ln2, --5.959821016291367179e+00 / ln2, --5.113891938530826131e+00 / ln2, --3.296199802569410142e+00 / ln2, --8.140218559980493040e+00 / ln2, --4.919649166968065757e+00 / ln2, --4.754337034915018023e+00 / ln2, --4.604168121450740614e+00 / ln2, --4.883577810848264811e+00 / ln2, --7.959852224170357538e+00 / ln2, --4.498412758302154479e+00 / ln2, --7.057958593457523300e+00 / ln2, --5.332499360388146314e+00 / ln2, --5.397372105698754474e+00 / ln2, --1.278432279724004239e+01 / ln2, --5.193805121009943626e+00 / ln2, --2.462783453866639771e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.691538586043964010e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.091764045676016259e+00 / ln2, --4.160925916687072679e+00 / ln2, --4.998325418845404933e+00 / ln2, --5.923664837455273613e+00 / ln2, --4.754337034915018023e+00 / ln2, --5.536137450497251145e+00 / ln2, --3.296199802569410142e+00 / ln2, --3.631360480608693209e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.143181862813722027e+00 / ln2, --6.971660331060701488e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.861249608063488381e+00 / ln2, --2.046324443145273619e+00 / ln2, --5.754707819725457085e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.012900414694919959e+01 / ln2, --8.098608047708514945e+00 / ln2, --6.512580640245118957e+00 / ln2, --6.885183121012873109e+00 / ln2, --5.284098860888144067e+00 / ln2, --5.177102904471855283e+00 / ln2, --5.284098860888144067e+00 / ln2, --8.447106204735684187e+00 / ln2, --5.617458030859222795e+00 / ln2, --2.462783453866639771e+00 / ln2, --1.115671305913878442e+01 / ln2, --2.046324443145273619e+00 / ln2, --5.553599664845023653e+00 / ln2, --5.195119186325862337e+00 / ln2, --7.186698218369051538e+00 / ln2, --1.106006057964308731e+01 / ln2, --2.462783453866639771e+00 / ln2, --7.267062386635592119e+00 / ln2, --4.049563242290908249e+00 / ln2, --4.691538586043964010e+00 / ln2, --1.165915831016035398e+01 / ln2, --4.091764045676016259e+00 / ln2, --7.689409517815276374e+00 / ln2, --3.631360480608693209e+00 / ln2, --3.949349394517413181e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.415204418624045779e+00 / ln2, --4.498412758302154479e+00 / ln2, --6.720134407192276171e+00 / ln2, --2.046324443145273619e+00 / ln2, --6.674700103110665417e+00 / ln2, --8.098608047708514945e+00 / ln2, --6.584033785323046395e+00 / ln2, --4.143181862813722027e+00 / ln2, --2.046324443145273619e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2, --3.296199802569410142e+00 / ln2, --4.998325418845404933e+00 / ln2, --3.296199802569410142e+00 / ln2, --3.296199802569410142e+00 / ln2, --5.861249608063488381e+00 / ln2, --8.838166443014722873e+00 / ln2, --5.553599664845023653e+00 / ln2, --4.424715454340284460e+00 / ln2, --2.462783453866639771e+00 / ln2, --4.091764045676016259e+00 / ln2, --6.458537022627602653e+00 / ln2, --2.046324443145273619e+00 / ln2, --2.046324443145273619e+00 / ln2}; diff --git a/fpga_spn/toolchain-rv32.cmake b/fpga_spn/toolchain-rv32.cmake deleted file mode 100644 index bd5ee3b..0000000 --- a/fpga_spn/toolchain-rv32.cmake +++ /dev/null @@ -1,33 +0,0 @@ -set(CMAKE_SYSTEM_NAME Linux) -set(CMAKE_SYSTEM_VERSION 1) -set(CMAKE_SYSTEM_PROCESSOR riscv) - -set(TOOLCHAIN_DIR /opt/riscv/tools) -set(ARCHITECTURE riscv64-unknown-elf) - -set(CMAKE_C_COMPILER ${ARCHITECTURE}-gcc -set(CMAKE_CXX_COMPILER ${ARCHITECTURE}-g++ -set(RISCV_LINUX_SYSROOT /opt/riscv/tools CACHE PATH "RISC-V cross compilation system root") # search path for the cross compile toolchain - -set(CMAKE_CXX_FLAGS "" CACHE STRING "c++ flags") -set(CMAKE_C_FLAGS "" CACHE STRING "c flags") -set(CMAKE_SHARED_LINKER_FLAGS "" CACHE STRING "shared linker flags") -set(CMAKE_MODULE_LINKER_FLAGS "" CACHE STRING "module linker flags") -set(CMAKE_EXE_LINKER_FLAGS "" CACHE STRING "executable linker flags") - -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=rv32imac -mabi=ilp32") -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=rv32imac -mabi=ilp32") -#set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}") -#set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}") -set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -march=rv32imac -mabi=ilp32") - -set(COMPILER_IS_RV32 "1") #flags for the CMakeList.txt -#add_definitions(-D_ARM_TEGRA3) # C/C++ preprocessor macro, which will be used in many many files - -set(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN_DIR}/${ARCHITECTURE}) - -include_directories(${TOOLCHAIN_DIR}/${ARCHITECTURE}/include) - -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) \ No newline at end of file diff --git a/raven/.cproject b/raven/.cproject deleted file mode 100644 index 1135715..0000000 --- a/raven/.cproject +++ /dev/null @@ -1,235 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - make - - all - true - true - true - - - make - - clean - true - true - true - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/raven/.project b/raven/.project deleted file mode 100644 index b930e99..0000000 --- a/raven/.project +++ /dev/null @@ -1,28 +0,0 @@ - - - hello_raven - - - bsp - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - clean,full,incremental, - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - full,incremental, - - - - - - org.eclipse.cdt.core.cnature - org.eclipse.cdt.core.ccnature - org.eclipse.cdt.managedbuilder.core.managedBuildNature - org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - - diff --git a/raven/Makefile b/raven/Makefile deleted file mode 100644 index 44033b3..0000000 --- a/raven/Makefile +++ /dev/null @@ -1,28 +0,0 @@ - -TARGET = hello_raven -C_SRCS = $(wildcard src/*.c) $(BSP_BASE)/drivers/fe300prci/fe300prci_driver.c $(BSP_BASE)/drivers/plic/plic_driver.c -CXX_SRCS = $(wildcard src/*.cpp) -HEADERS = $(wildcard src/*.h) -CFLAGS = -g -fno-builtin-printf -DUSE_PLIC -I./src -CXXFLAGS = -fno-use-cxa-atexit -LDFLAGS = -Wl,--wrap=printf -LDFLAGS += -g -lstdc++ -fno-use-cxa-atexit -march=$(RISCV_ARCH) -mabi=$(RISCV_ABI) -mcmodel=medany - - -BOARD=freedom-e300-hifive1 -LINK_TARGET=flash -RISCV_ARCH=rv32imac -RISCV_ABI=ilp32 - -TOOL_DIR=/opt/shared/riscv/tools/Ubuntu/riscv64-unknown-elf-gcc-8.3.0-2020.04.1-x86_64-linux-ubuntu14/bin - -BSP_BASE = ./bsp -include $(BSP_BASE)/env/common.mk - -.PHONY: all -all: $(TARGET).dump - -$(TARGET).dump: $(TARGET) - $(TOOL_DIR)/$(TRIPLET)-objdump -d -S -C $< > $@ - - diff --git a/raven/bsp/drivers/clic/clic_driver.c b/raven/bsp/drivers/clic/clic_driver.c deleted file mode 100644 index 0612e58..0000000 --- a/raven/bsp/drivers/clic/clic_driver.c +++ /dev/null @@ -1,163 +0,0 @@ -// See LICENSE for license details. - -#include "sifive/devices/clic.h" -#include "clic/clic_driver.h" -#include "platform.h" -#include "encoding.h" -#include - - -void volatile_memzero(uint8_t * base, unsigned int size) { - volatile uint8_t * ptr; - for (ptr = base; ptr < (base + size); ptr++){ - *ptr = 0; - } -} - -// Note that there are no assertions or bounds checking on these -// parameter values. -void clic_init ( - clic_instance_t * this_clic, - uintptr_t hart_addr, - interrupt_function_ptr_t* vect_table, - interrupt_function_ptr_t default_handler, - uint32_t num_irq, - uint32_t num_config_bits - ) -{ - this_clic->hart_addr= hart_addr; - this_clic->vect_table= vect_table; - this_clic->num_config_bits= num_config_bits; - - //initialize vector table - for(int i=0;i++;ivect_table[i] = default_handler; - } - - //set base vectors - write_csr(mtvt, vect_table); - - - //clear all interrupt enables and pending - volatile_memzero((uint8_t*)(this_clic->hart_addr+CLIC_INTIE), num_irq); - volatile_memzero((uint8_t*)(this_clic->hart_addr+CLIC_INTIP), num_irq); - - //clear nlbits and nvbits; all interrupts trap to level 15 - *(volatile uint8_t*)(this_clic->hart_addr+CLIC_CFG)=0; - -} - -void clic_install_handler (clic_instance_t * this_clic, uint32_t source, interrupt_function_ptr_t handler) { - this_clic->vect_table[source] = handler; -} - -void clic_enable_interrupt (clic_instance_t * this_clic, uint32_t source) { - *(volatile uint8_t*)(this_clic->hart_addr+CLIC_INTIE+source) = 1; -} - -void clic_disable_interrupt (clic_instance_t * this_clic, uint32_t source){ - *(volatile uint8_t*)(this_clic->hart_addr+CLIC_INTIE+source) = 0; -} - -void clic_set_pending(clic_instance_t * this_clic, uint32_t source){ - *(volatile uint8_t*)(this_clic->hart_addr+CLIC_INTIP+source) = 1; -} - -void clic_clear_pending(clic_instance_t * this_clic, uint32_t source){ - *(volatile uint8_t*)(this_clic->hart_addr+CLIC_INTIP+source) = 0; -} - -void clic_set_intcfg (clic_instance_t * this_clic, uint32_t source, uint32_t intcfg){ - *(volatile uint8_t*)(this_clic->hart_addr+CLIC_INTCFG+source) = intcfg; -} - -uint8_t clic_get_intcfg (clic_instance_t * this_clic, uint32_t source){ - return *(volatile uint8_t*)(this_clic->hart_addr+CLIC_INTCFG+source); -} - -void clic_set_cliccfg (clic_instance_t * this_clic, uint32_t cfg){ - *(volatile uint8_t*)(this_clic->hart_addr+CLIC_CFG) = cfg; -} - -uint8_t clic_get_cliccfg (clic_instance_t * this_clic){ - return *(volatile uint8_t*)(this_clic->hart_addr+CLIC_CFG); -} - -//sets an interrupt level based encoding of nmbits, nlbits -uint8_t clic_set_int_level( clic_instance_t * this_clic, uint32_t source, uint8_t level) { - //extract nlbits - uint8_t nlbits = clic_get_cliccfg(this_clic); - nlbits = (nlbits >>1) & 0x7; - - //shift level right to mask off unused bits - level = level>>((this_clic->num_config_bits)-nlbits); //plus this_clic->nmbits which is always 0 for now. - //shift level into correct bit position - level = level << (8-this_clic->num_config_bits) + (this_clic->num_config_bits - nlbits); - - //write to clicintcfg - uint8_t current_intcfg = clic_get_intcfg(this_clic, source); - clic_set_intcfg(this_clic, source, (current_intcfg | level)); - - return level; -} - -//gets an interrupt level based encoding of nmbits, nlbits -uint8_t clic_get_int_level( clic_instance_t * this_clic, uint32_t source) { - uint8_t level; - level = clic_get_intcfg(this_clic, source); - - //extract nlbits - uint8_t nlbits = clic_get_cliccfg(this_clic); - nlbits = (nlbits >>1) & 0x7; - - //shift level - level = level >> (8-(this_clic->num_config_bits)); - - //shift level right to mask off priority bits - level = level>>(this_clic->num_config_bits-nlbits); //this_clic->nmbits which is always 0 for now. - - return level; -} - -//sets an interrupt priority based encoding of nmbits, nlbits -uint8_t clic_set_int_priority( clic_instance_t * this_clic, uint32_t source, uint8_t priority) { - //priority bits = num_config_bits - nlbits - //extract nlbits - uint8_t nlbits = clic_get_cliccfg(this_clic); - nlbits = (nlbits >>1) & 0x7; - - uint8_t priority_bits = this_clic->num_config_bits-nlbits; - if(priority_bits = 0) { - //no bits to set - return 0; - } - //mask off unused bits - priority = priority >> (8-priority_bits); - //shift into the correct bit position - priority = priority << (8-(this_clic->num_config_bits)); - - //write to clicintcfg - uint8_t current_intcfg = clic_get_intcfg(this_clic, source); - clic_set_intcfg(this_clic, source, (current_intcfg | priority)); - return current_intcfg; -} - -//gets an interrupt priority based encoding of nmbits, nlbits -uint8_t clic_get_int_priority( clic_instance_t * this_clic, uint32_t source) { - uint8_t priority; - priority = clic_get_intcfg(this_clic, source); - - //extract nlbits - uint8_t nlbits = clic_get_cliccfg(this_clic); - nlbits = (nlbits >>1) & 0x7; - - //shift left to mask off level bits - priority = priority << nlbits; - - //shift priority - priority = priority >> (8-((this_clic->num_config_bits)+nlbits)); - - return priority; -} - - diff --git a/raven/bsp/drivers/clic/clic_driver.h b/raven/bsp/drivers/clic/clic_driver.h deleted file mode 100644 index 27c34c2..0000000 --- a/raven/bsp/drivers/clic/clic_driver.h +++ /dev/null @@ -1,44 +0,0 @@ -// See LICENSE file for licence details - -#ifndef PLIC_DRIVER_H -#define PLIC_DRIVER_H - - -__BEGIN_DECLS - -#include "platform.h" - -typedef void (*interrupt_function_ptr_t) (void); - -typedef struct __clic_instance_t -{ - uintptr_t hart_addr; - interrupt_function_ptr_t* vect_table; - uint32_t num_config_bits; - uint32_t num_sources; -} clic_instance_t; - -// Note that there are no assertions or bounds checking on these -// parameter values. -void clic_init (clic_instance_t * this_clic, uintptr_t hart_addr, interrupt_function_ptr_t* vect_table, interrupt_function_ptr_t default_handler, uint32_t num_irq,uint32_t num_config_bits); -void clic_install_handler (clic_instance_t * this_clic, uint32_t source, interrupt_function_ptr_t handler); -void clic_enable_interrupt (clic_instance_t * this_clic, uint32_t source); -void clic_disable_interrupt (clic_instance_t * this_clic, uint32_t source); -void clic_set_pending(clic_instance_t * this_clic, uint32_t source); -void clic_clear_pending(clic_instance_t * this_clic, uint32_t source); -void clic_set_intcfg (clic_instance_t * this_clic, uint32_t source, uint32_t intcfg); -uint8_t clic_get_intcfg (clic_instance_t * this_clic, uint32_t source); -void clic_set_cliccfg (clic_instance_t * this_clic, uint32_t cfg); -uint8_t clic_get_cliccfg (clic_instance_t * this_clic); -//sets an interrupt level based encoding of nmbits, nlbits -uint8_t clic_set_int_level( clic_instance_t * this_clic, uint32_t source, uint8_t level); -//get an interrupt level based encoding of nmbits, nlbits -uint8_t clic_get_int_level( clic_instance_t * this_clic, uint32_t source); -//sets an interrupt priority based encoding of nmbits, nlbits -uint8_t clic_set_int_priority( clic_instance_t * this_clic, uint32_t source, uint8_t priority); -//sets an interrupt priority based encoding of nmbits, nlbits -uint8_t clic_get_int_priority( clic_instance_t * this_clic, uint32_t source); - -__END_DECLS - -#endif diff --git a/raven/bsp/drivers/fe300prci/fe300prci_driver.c b/raven/bsp/drivers/fe300prci/fe300prci_driver.c deleted file mode 100644 index 8eeaafc..0000000 --- a/raven/bsp/drivers/fe300prci/fe300prci_driver.c +++ /dev/null @@ -1,252 +0,0 @@ -// See LICENSE file for license details - -#include "platform.h" - -#ifdef PRCI_CTRL_ADDR -#include "fe300prci/fe300prci_driver.h" -#include - -#define rdmcycle(x) { \ - uint32_t lo, hi, hi2; \ - __asm__ __volatile__ ("1:\n\t" \ - "csrr %0, mcycleh\n\t" \ - "csrr %1, mcycle\n\t" \ - "csrr %2, mcycleh\n\t" \ - "bne %0, %2, 1b\n\t" \ - : "=r" (hi), "=r" (lo), "=r" (hi2)) ; \ - *(x) = lo | ((uint64_t) hi << 32); \ - } - -uint32_t PRCI_measure_mcycle_freq(uint32_t mtime_ticks, uint32_t mtime_freq) -{ - - uint32_t start_mtime = CLINT_REG(CLINT_MTIME); - uint32_t end_mtime = start_mtime + mtime_ticks + 1; - - // Make sure we won't get rollover. - while (end_mtime < start_mtime){ - start_mtime = CLINT_REG(CLINT_MTIME); - end_mtime = start_mtime + mtime_ticks + 1; - } - - // Don't start measuring until mtime edge. - uint32_t tmp = start_mtime; - do { - start_mtime = CLINT_REG(CLINT_MTIME); - } while (start_mtime == tmp); - - uint64_t start_mcycle; - rdmcycle(&start_mcycle); - - while (CLINT_REG(CLINT_MTIME) < end_mtime) ; - - uint64_t end_mcycle; - rdmcycle(&end_mcycle); - uint32_t difference = (uint32_t) (end_mcycle - start_mcycle); - - uint64_t freq = ((uint64_t) difference * mtime_freq) / mtime_ticks; - return (uint32_t) freq & 0xFFFFFFFF; - -} - - -void PRCI_use_hfrosc(int div, int trim) -{ - // Make sure the HFROSC is running at its default setting - // It is OK to change this even if we are running off of it. - - PRCI_REG(PRCI_HFROSCCFG) = (ROSC_DIV(div) | ROSC_TRIM(trim) | ROSC_EN(1)); - - while ((PRCI_REG(PRCI_HFROSCCFG) & ROSC_RDY(1)) == 0); - - PRCI_REG(PRCI_PLLCFG) &= ~PLL_SEL(1); -} - -void PRCI_use_pll(int refsel, int bypass, - int r, int f, int q, int finaldiv, - int hfroscdiv, int hfrosctrim) -{ - // Ensure that we aren't running off the PLL before we mess with it. - if (PRCI_REG(PRCI_PLLCFG) & PLL_SEL(1)) { - // Make sure the HFROSC is running at its default setting - PRCI_use_hfrosc(4, 16); - } - - // Set PLL Source to be HFXOSC if desired. - uint32_t config_value = 0; - - config_value |= PLL_REFSEL(refsel); - - if (bypass) { - // Bypass - config_value |= PLL_BYPASS(1); - - PRCI_REG(PRCI_PLLCFG) = config_value; - - // If we don't have an HFXTAL, this doesn't really matter. - // Set our Final output divide to divide-by-1: - PRCI_REG(PRCI_PLLDIV) = (PLL_FINAL_DIV_BY_1(1) | PLL_FINAL_DIV(0)); - } else { - - // To overclock, use the hfrosc - if (hfrosctrim >= 0 && hfroscdiv >= 0) { - PRCI_use_hfrosc(hfroscdiv, hfrosctrim); - } - - // Set DIV Settings for PLL - - // (Legal values of f_REF are 6-48MHz) - - // Set DIVR to divide-by-2 to get 8MHz frequency - // (legal values of f_R are 6-12 MHz) - - config_value |= PLL_BYPASS(1); - config_value |= PLL_R(r); - - // Set DIVF to get 512Mhz frequncy - // There is an implied multiply-by-2, 16Mhz. - // So need to write 32-1 - // (legal values of f_F are 384-768 MHz) - config_value |= PLL_F(f); - - // Set DIVQ to divide-by-2 to get 256 MHz frequency - // (legal values of f_Q are 50-400Mhz) - config_value |= PLL_Q(q); - - // Set our Final output divide to divide-by-1: - if (finaldiv == 1){ - PRCI_REG(PRCI_PLLDIV) = (PLL_FINAL_DIV_BY_1(1) | PLL_FINAL_DIV(0)); - } else { - PRCI_REG(PRCI_PLLDIV) = (PLL_FINAL_DIV(finaldiv-1)); - } - - PRCI_REG(PRCI_PLLCFG) = config_value; - - // Un-Bypass the PLL. - PRCI_REG(PRCI_PLLCFG) &= ~PLL_BYPASS(1); - - // Wait for PLL Lock - // Note that the Lock signal can be glitchy. - // Need to wait 100 us - // RTC is running at 32kHz. - // So wait 4 ticks of RTC. - uint32_t now = CLINT_REG(CLINT_MTIME); - while (CLINT_REG(CLINT_MTIME) - now < 4) ; - - // Now it is safe to check for PLL Lock - while ((PRCI_REG(PRCI_PLLCFG) & PLL_LOCK(1)) == 0); - - } - - // Switch over to PLL Clock source - PRCI_REG(PRCI_PLLCFG) |= PLL_SEL(1); - - // If we're running off HFXOSC, turn off the HFROSC to - // save power. - if (refsel) { - PRCI_REG(PRCI_HFROSCCFG) &= ~ROSC_EN(1); - } - -} - -void PRCI_use_default_clocks() -{ - // Turn off the LFROSC - AON_REG(AON_LFROSC) &= ~ROSC_EN(1); - - // Use HFROSC - PRCI_use_hfrosc(4, 16); -} - -void PRCI_use_hfxosc(uint32_t finaldiv) -{ - - PRCI_use_pll(1, // Use HFXTAL - 1, // Bypass = 1 - 0, // PLL settings don't matter - 0, // PLL settings don't matter - 0, // PLL settings don't matter - finaldiv, - -1, - -1); -} - -// This is a generic function, which -// doesn't span the entire range of HFROSC settings. -// It only adjusts the trim, which can span a hundred MHz or so. -// This function does not check the legality of the PLL settings -// at all, and it is quite possible to configure invalid PLL settings -// this way. -// It returns the actual measured CPU frequency. - -uint32_t PRCI_set_hfrosctrim_for_f_cpu(uint32_t f_cpu, PRCI_freq_target target ) -{ - - uint32_t hfrosctrim = 0; - uint32_t hfroscdiv = 4; - uint32_t prev_trim = 0; - - // In this function we use PLL settings which - // will give us a 32x multiplier from the output - // of the HFROSC source to the output of the - // PLL. We first measure our HFROSC to get the - // right trim, then finally use it as the PLL source. - // We should really check here that the f_cpu - // requested is something in the limit of the PLL. For - // now that is up to the user. - - // This will undershoot for frequencies not divisible by 16. - uint32_t desired_hfrosc_freq = (f_cpu/ 16); - - PRCI_use_hfrosc(hfroscdiv, hfrosctrim); - - // Ignore the first run (for icache reasons) - uint32_t cpu_freq = PRCI_measure_mcycle_freq(3000, RTC_FREQ); - - cpu_freq = PRCI_measure_mcycle_freq(3000, RTC_FREQ); - uint32_t prev_freq = cpu_freq; - - while ((cpu_freq < desired_hfrosc_freq) && (hfrosctrim < 0x1F)){ - prev_trim = hfrosctrim; - prev_freq = cpu_freq; - hfrosctrim ++; - PRCI_use_hfrosc(hfroscdiv, hfrosctrim); - cpu_freq = PRCI_measure_mcycle_freq(3000, RTC_FREQ); - } - - // We couldn't go low enough - if (prev_freq > desired_hfrosc_freq){ - PRCI_use_pll(0, 0, 1, 31, 1, 1, hfroscdiv, prev_trim); - cpu_freq = PRCI_measure_mcycle_freq(1000, RTC_FREQ); - return cpu_freq; - } - - // We couldn't go high enough - if (cpu_freq < desired_hfrosc_freq){ - PRCI_use_pll(0, 0, 1, 31, 1, 1, hfroscdiv, prev_trim); - cpu_freq = PRCI_measure_mcycle_freq(1000, RTC_FREQ); - return cpu_freq; - } - - // Check for over/undershoot - switch(target) { - case(PRCI_FREQ_CLOSEST): - if ((desired_hfrosc_freq - prev_freq) < (cpu_freq - desired_hfrosc_freq)) { - PRCI_use_pll(0, 0, 1, 31, 1, 1, hfroscdiv, prev_trim); - } else { - PRCI_use_pll(0, 0, 1, 31, 1, 1, hfroscdiv, hfrosctrim); - } - break; - case(PRCI_FREQ_UNDERSHOOT): - PRCI_use_pll(0, 0, 1, 31, 1, 1, hfroscdiv, prev_trim); - break; - default: - PRCI_use_pll(0, 0, 1, 31, 1, 1, hfroscdiv, hfrosctrim); - } - - cpu_freq = PRCI_measure_mcycle_freq(1000, RTC_FREQ); - return cpu_freq; - -} - -#endif diff --git a/raven/bsp/drivers/fe300prci/fe300prci_driver.h b/raven/bsp/drivers/fe300prci/fe300prci_driver.h deleted file mode 100644 index 7100f46..0000000 --- a/raven/bsp/drivers/fe300prci/fe300prci_driver.h +++ /dev/null @@ -1,79 +0,0 @@ -// See LICENSE file for license details - -#ifndef _FE300PRCI_DRIVER_H_ -#define _FE300PRCI_DRIVER_H_ - -__BEGIN_DECLS - -#include - -typedef enum prci_freq_target { - - PRCI_FREQ_OVERSHOOT, - PRCI_FREQ_CLOSEST, - PRCI_FREQ_UNDERSHOOT - -} PRCI_freq_target; - -/* Measure and return the approximate frequency of the - * CPU, as given by measuring the mcycle counter against - * the mtime ticks. - */ -uint32_t PRCI_measure_mcycle_freq(uint32_t mtime_ticks, uint32_t mtime_freq); - -/* Safely switch over to the HFROSC using the given div - * and trim settings. - */ -void PRCI_use_hfrosc(int div, int trim); - -/* Safely switch over to the 16MHz HFXOSC, - * applying the finaldiv clock divider (1 is the lowest - * legal value). - */ -void PRCI_use_hfxosc(uint32_t finaldiv); - -/* Safely switch over to the PLL using the given - * settings. - * - * Note that not all combinations of the inputs are actually - * legal, and this function does not check for their - * legality ("safely" means that this function won't turn off - * or glitch the clock the CPU is actually running off, but - * doesn't protect against you making it too fast or slow.) - */ - -void PRCI_use_pll(int refsel, int bypass, - int r, int f, int q, int finaldiv, - int hfroscdiv, int hfrosctrim); - -/* Use the default clocks configured at reset. - * This is ~16Mhz HFROSC and turns off the LFROSC - * (on the current FE310 Dev Platforms, an external LFROSC is - * used as it is more power efficient). - */ -void PRCI_use_default_clocks(); - -/* This routine will adjust the HFROSC trim - * while using HFROSC as the clock source, - * measure the resulting frequency, then - * use it as the PLL clock source, - * in an attempt to get over, under, or close to the - * requested frequency. It returns the actual measured - * frequency. - * - * Note that the requested frequency must be within the - * range supported by the PLL so not all values are - * achievable with this function, and not all - * are guaranteed to actually work. The PLL - * is rated higher than the hardware. - * - * There is no check on the desired f_cpu frequency, it - * is up to the user to specify something reasonable. - */ - -uint32_t PRCI_set_hfrosctrim_for_f_cpu(uint32_t f_cpu, PRCI_freq_target target); - -__END_DECLS - -#endif - diff --git a/raven/bsp/drivers/plic/plic_driver.c b/raven/bsp/drivers/plic/plic_driver.c deleted file mode 100644 index 4f41bda..0000000 --- a/raven/bsp/drivers/plic/plic_driver.c +++ /dev/null @@ -1,122 +0,0 @@ -// See LICENSE for license details. - -#include "sifive/devices/plic.h" -#include "plic/plic_driver.h" -#include "platform.h" -#include "encoding.h" -#include - - -// Note that there are no assertions or bounds checking on these -// parameter values. - -void volatile_memzero(uint8_t * base, unsigned int size) -{ - volatile uint8_t * ptr; - for (ptr = base; ptr < (base + size); ptr++){ - *ptr = 0; - } -} - -void PLIC_init ( - plic_instance_t * this_plic, - uintptr_t base_addr, - uint32_t num_sources, - uint32_t num_priorities, - uint32_t target_hartid - ) -{ - - this_plic->base_addr = base_addr; - this_plic->num_sources = num_sources; - this_plic->num_priorities = num_priorities; - this_plic->target_hartid = target_hartid; - - // Disable all interrupts (don't assume that these registers are reset). - volatile_memzero((uint8_t*) (this_plic->base_addr + - PLIC_ENABLE_OFFSET + - (this_plic->target_hartid << PLIC_ENABLE_SHIFT_PER_TARGET)), - (num_sources + 8) / 8); - - // Set all priorities to 0 (equal priority -- don't assume that these are reset). - volatile_memzero ((uint8_t *)(this_plic->base_addr + - PLIC_PRIORITY_OFFSET), - (num_sources + 1) << PLIC_PRIORITY_SHIFT_PER_SOURCE); - - // Set the threshold to 0. - volatile plic_threshold* threshold = (plic_threshold*) - (this_plic->base_addr + - PLIC_THRESHOLD_OFFSET + - (this_plic->target_hartid << PLIC_THRESHOLD_SHIFT_PER_TARGET)); - - *threshold = 0; - -} - -void PLIC_set_threshold (plic_instance_t * this_plic, - plic_threshold threshold){ - - volatile plic_threshold* threshold_ptr = (plic_threshold*) (this_plic->base_addr + - PLIC_THRESHOLD_OFFSET + - (this_plic->target_hartid << PLIC_THRESHOLD_SHIFT_PER_TARGET)); - - *threshold_ptr = threshold; - -} - - -void PLIC_enable_interrupt (plic_instance_t * this_plic, plic_source source){ - - volatile uint8_t * current_ptr = (volatile uint8_t *)(this_plic->base_addr + - PLIC_ENABLE_OFFSET + - (this_plic->target_hartid << PLIC_ENABLE_SHIFT_PER_TARGET) + - (source >> 3)); - uint8_t current = *current_ptr; - current = current | ( 1 << (source & 0x7)); - *current_ptr = current; - -} - -void PLIC_disable_interrupt (plic_instance_t * this_plic, plic_source source){ - - volatile uint8_t * current_ptr = (volatile uint8_t *) (this_plic->base_addr + - PLIC_ENABLE_OFFSET + - (this_plic->target_hartid << PLIC_ENABLE_SHIFT_PER_TARGET) + - (source >> 3)); - uint8_t current = *current_ptr; - current = current & ~(( 1 << (source & 0x7))); - *current_ptr = current; - -} - -void PLIC_set_priority (plic_instance_t * this_plic, plic_source source, plic_priority priority){ - - if (this_plic->num_priorities > 0) { - volatile plic_priority * priority_ptr = (volatile plic_priority *) - (this_plic->base_addr + - PLIC_PRIORITY_OFFSET + - (source << PLIC_PRIORITY_SHIFT_PER_SOURCE)); - *priority_ptr = priority; - } -} - -plic_source PLIC_claim_interrupt(plic_instance_t * this_plic){ - - volatile plic_source * claim_addr = (volatile plic_source * ) - (this_plic->base_addr + - PLIC_CLAIM_OFFSET + - (this_plic->target_hartid << PLIC_CLAIM_SHIFT_PER_TARGET)); - - return *claim_addr; - -} - -void PLIC_complete_interrupt(plic_instance_t * this_plic, plic_source source){ - - volatile plic_source * claim_addr = (volatile plic_source *) (this_plic->base_addr + - PLIC_CLAIM_OFFSET + - (this_plic->target_hartid << PLIC_CLAIM_SHIFT_PER_TARGET)); - *claim_addr = source; - -} - diff --git a/raven/bsp/drivers/plic/plic_driver.h b/raven/bsp/drivers/plic/plic_driver.h deleted file mode 100644 index f7201ee..0000000 --- a/raven/bsp/drivers/plic/plic_driver.h +++ /dev/null @@ -1,52 +0,0 @@ -// See LICENSE file for licence details - -#ifndef PLIC_DRIVER_H -#define PLIC_DRIVER_H - - -__BEGIN_DECLS - -#include "platform.h" - -typedef struct __plic_instance_t -{ - uintptr_t base_addr; - - uint32_t num_sources; - uint32_t num_priorities; - uint32_t target_hartid; -} plic_instance_t; - -typedef uint32_t plic_source; -typedef uint32_t plic_priority; -typedef uint32_t plic_threshold; - -void PLIC_init ( - plic_instance_t * this_plic, - uintptr_t base_addr, - uint32_t num_sources, - uint32_t num_priorities, - uint32_t target_hartid - ); - -void PLIC_set_threshold (plic_instance_t * this_plic, - plic_threshold threshold); - -void PLIC_enable_interrupt (plic_instance_t * this_plic, - plic_source source); - -void PLIC_disable_interrupt (plic_instance_t * this_plic, - plic_source source); - -void PLIC_set_priority (plic_instance_t * this_plic, - plic_source source, - plic_priority priority); - -plic_source PLIC_claim_interrupt(plic_instance_t * this_plic); - -void PLIC_complete_interrupt(plic_instance_t * this_plic, - plic_source source); - -__END_DECLS - -#endif diff --git a/raven/bsp/env/common.mk b/raven/bsp/env/common.mk deleted file mode 100644 index 0ca2c70..0000000 --- a/raven/bsp/env/common.mk +++ /dev/null @@ -1,66 +0,0 @@ -# See LICENSE for license details. - -ifndef _SIFIVE_MK_COMMON -_SIFIVE_MK_COMMON := # defined - -.PHONY: all -all: $(TARGET) - -include $(BSP_BASE)/libwrap/libwrap.mk - -ENV_DIR = $(BSP_BASE)/env -PLATFORM_DIR = $(ENV_DIR)/$(BOARD) - -ASM_SRCS += $(ENV_DIR)/start.S -ASM_SRCS += $(ENV_DIR)/entry.S -C_SRCS += $(PLATFORM_DIR)/init.c - -LINKER_SCRIPT := $(PLATFORM_DIR)/$(LINK_TARGET).lds - -INCLUDES += -I$(BSP_BASE)/include -INCLUDES += -I$(BSP_BASE)/drivers/ -INCLUDES += -I$(ENV_DIR) -INCLUDES += -I$(PLATFORM_DIR) - -TOOL_DIR ?= $(BSP_BASE)/../toolchain/bin - -LDFLAGS += -T $(LINKER_SCRIPT) -nostartfiles -LDFLAGS += -L$(ENV_DIR) --specs=nano.specs - -ASM_OBJS := $(ASM_SRCS:.S=.o) -C_OBJS := $(C_SRCS:.c=.o) -CXX_OBJS := $(CXX_SRCS:.cpp=.o) - -LINK_OBJS += $(ASM_OBJS) $(C_OBJS) $(CXX_OBJS) -LINK_DEPS += $(LINKER_SCRIPT) - -CLEAN_OBJS += $(TARGET) $(LINK_OBJS) - -CFLAGS += -march=$(RISCV_ARCH) -CFLAGS += -mabi=$(RISCV_ABI) -CFLAGS += -mcmodel=medany - -TRIPLET?=riscv64-unknown-elf -CXX=$(TOOL_DIR)/$(TRIPLET)-c++ -CC=$(TOOL_DIR)/$(TRIPLET)-gcc -LD=$(TOOL_DIR)/$(TRIPLET)-gcc -AR=$(TOOL_DIR)/$(TRIPLET)-ar - - -$(TARGET): $(LINK_OBJS) $(LINK_DEPS) - $(LD) $(LINK_OBJS) $(LDFLAGS) $(LIBWRAP) -o $@ - -$(ASM_OBJS): %.o: %.S $(HEADERS) - $(CC) $(CFLAGS) $(INCLUDES) -c -o $@ $< - -$(C_OBJS): %.o: %.c $(HEADERS) - $(CC) $(CFLAGS) $(INCLUDES) -include sys/cdefs.h -c -o $@ $< - -$(CXX_OBJS): %.o: %.cpp $(HEADERS) - $(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) -include sys/cdefs.h -c -o $@ $< - -.PHONY: clean -clean: - rm -f $(CLEAN_OBJS) $(LIBWRAP) - -endif # _SIFIVE_MK_COMMON diff --git a/raven/bsp/env/coreip-e2-arty/flash.lds b/raven/bsp/env/coreip-e2-arty/flash.lds deleted file mode 100644 index 2d5eb01..0000000 --- a/raven/bsp/env/coreip-e2-arty/flash.lds +++ /dev/null @@ -1,161 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - flash (rxai!w) : ORIGIN = 0x40400000, LENGTH = 512M - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 64K -} - -PHDRS -{ - flash PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 2K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >flash AT>flash :flash - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >flash AT>flash :flash - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >flash AT>flash :flash - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - .rodata : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - } >flash AT>flash :flash - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >flash AT>flash :flash - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >flash AT>flash :flash - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >flash AT>flash :flash - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >flash AT>flash :flash - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >flash AT>flash :flash - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >flash AT>flash :flash - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>flash :ram_init - - .data : - { - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>flash :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack ORIGIN(ram) + LENGTH(ram) - __stack_size : - { - PROVIDE( _heap_end = . ); - . = __stack_size; - PROVIDE( _sp = . ); - } >ram AT>ram :ram -} diff --git a/raven/bsp/env/coreip-e2-arty/init.c b/raven/bsp/env/coreip-e2-arty/init.c deleted file mode 100644 index 3a4c77c..0000000 --- a/raven/bsp/env/coreip-e2-arty/init.c +++ /dev/null @@ -1,98 +0,0 @@ -//See LICENSE for license details. -#include -#include -#include - -#include "platform.h" -#include "encoding.h" - -#define CPU_FREQ 32000000 -#define XSTR(x) #x -#define STR(x) XSTR(x) - -extern int main(int argc, char** argv); - -unsigned long get_cpu_freq() -{ - return CPU_FREQ; -} - -unsigned long get_timer_freq() -{ - return get_cpu_freq(); -} - -uint64_t get_timer_value() -{ -#if __riscv_xlen == 32 - while (1) { - uint32_t hi = read_csr(mcycleh); - uint32_t lo = read_csr(mcycle); - if (hi == read_csr(mcycleh)) - return ((uint64_t)hi << 32) | lo; - } -#else - return read_csr(mcycle); -#endif -} - -static void uart_init(size_t baud_rate) -{ - UART0_REG(UART_REG_DIV) = (get_cpu_freq() ) / baud_rate - 1; - UART0_REG(UART_REG_TXCTRL) |= UART_TXEN; -} - - -typedef void (*interrupt_function_ptr_t) (void); -interrupt_function_ptr_t localISR[CLIC_NUM_INTERRUPTS] __attribute__((aligned(64))); - - -void trap_entry(void) __attribute__((interrupt, aligned(64))); -void trap_entry(void) -{ - unsigned long mcause = read_csr(mcause); - unsigned long mepc = read_csr(mepc); - if (mcause & MCAUSE_INT) { - localISR[mcause & MCAUSE_CAUSE] (); - } else { - while(1); - } -} - -#ifdef CLIC_DIRECT -#else -void default_handler(void)__attribute__((interrupt));; -#endif -void default_handler(void) -{ - puts("default handler\n"); - while(1); -} - -void _init() -{ -#ifndef NO_INIT - uart_init(115200); - - puts("core freq at " STR(CPU_FREQ) " Hz\n"); - -//initialize vector table - int i=0; - while(iflash AT>flash :flash - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >flash AT>flash :flash - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >flash AT>flash :flash - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >flash AT>flash :flash - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >flash AT>flash :flash - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >flash AT>flash :flash - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >flash AT>flash :flash - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >flash AT>flash :flash - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >flash AT>flash :flash - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>flash :ram_init - - .data : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>flash :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack ORIGIN(ram) + LENGTH(ram) - __stack_size : - { - PROVIDE( _heap_end = . ); - . = __stack_size; - PROVIDE( _sp = . ); - } >ram AT>ram :ram -} diff --git a/raven/bsp/env/coreip-e2-arty/tim.lds b/raven/bsp/env/coreip-e2-arty/tim.lds deleted file mode 100644 index 7dfb36b..0000000 --- a/raven/bsp/env/coreip-e2-arty/tim.lds +++ /dev/null @@ -1,161 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 64K -} - -PHDRS -{ - ram PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 1K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >ram AT>ram :ram - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >ram AT>ram :ram - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >ram AT>ram :ram - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - .rodata : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - } >ram AT>ram :ram - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >ram AT>ram :ram - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >ram AT>ram :ram - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >ram AT>ram :ram - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >ram AT>ram :ram - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >ram AT>ram :ram - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >ram AT>ram :ram - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>ram :ram_init - - .data : - { - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>ram :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack : - { - . = ALIGN(8); - . += __stack_size; - PROVIDE( _sp = . ); - PROVIDE( _heap_end = . ); - } >ram AT>ram :ram -} diff --git a/raven/bsp/env/coreplexip-arty.h b/raven/bsp/env/coreplexip-arty.h deleted file mode 100644 index eedcaa5..0000000 --- a/raven/bsp/env/coreplexip-arty.h +++ /dev/null @@ -1,102 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_COREPLEXIP_ARTY_H -#define _SIFIVE_COREPLEXIP_ARTY_H - -#include - -/**************************************************************************** - * GPIO Connections - *****************************************************************************/ - -// These are the GPIO bit offsets for the directly driven -// RGB LEDs on the Freedom Exx Coreplex IP Evaluation Arty FPGA Dev Kit. -// Additional RGB LEDs are driven by the 3 PWM outputs. - -#define RED_LED_OFFSET 0 -#define GREEN_LED_OFFSET 1 -#define BLUE_LED_OFFSET 2 - -// Switch 3 is used as a GPIO input. (Switch 0 is used to set -// the reset vector, the other switches are unused). - -#define SW_3_OFFSET 3 - -// These are the buttons which are mapped as inputs. - -#define HAS_BOARD_BUTTONS - -#define BUTTON_0_OFFSET 4 -#define BUTTON_1_OFFSET 5 -#define BUTTON_2_OFFSET 6 -#define BUTTON_3_OFFSET 7 - -// These are the bit offsets for the different GPIO pins -// mapped onto the PMOD A header. - -#define JA_0_OFFSET 8 -#define JA_1_OFFSET 9 -#define JA_2_OFFSET 10 -#define JA_3_OFFSET 11 -#define JA_4_OFFSET 12 -#define JA_5_OFFSET 13 -#define JA_6_OFFSET 14 -#define JA_7_OFFSET 15 - -// The below gives a mapping between global interrupt -// sources and their number. Note that on the coreplex -// deliverable, the io_global_interrupts go directly into -// the PLIC. The evaluation image on the FPGA mimics a -// system with peripheral devices which are driving the -// global interrupt lines. -// So, on this image, in order to get an interrupt from -// e.g. pressing BUTTON_0: -// 1) Steps which are external to the delivery coreplex: -// a) The corresponding GPIO pin must be configured as in input -// b) The "interrupt on fall" bit must be set for the GPIO pin -// 2) Steps which would also need to be performed for the delivery coreplex: -// a) The corresponding global interrupt, priority, and threshold must be configured in the PLIC. -// b) The external interrupt bit must be enabled in MSTATUS -// c) Interrupts must be enabled globally in the core. - -// Any of the above GPIO pins can be used as global interrupt -// sources by adding their offset to the INT_GPIO_BASE. -// For example, the buttons are shown here: - -#define INT_DEVICE_BUTTON_0 (GPIO_INT_BASE + BUTTON_0_OFFSET) -#define INT_DEVICE_BUTTON_1 (GPIO_INT_BASE + BUTTON_1_OFFSET) -#define INT_DEVICE_BUTTON_2 (GPIO_INT_BASE + BUTTON_2_OFFSET) -#define INT_DEVICE_BUTTON_3 (GPIO_INT_BASE + BUTTON_3_OFFSET) - -// In addition, the Switches are mapped directly to -// the PLIC (without going through the GPIO Peripheral). - -#define INT_EXT_DEVICE_SW_0 (EXTERNAL_INT_BASE + 0) -#define INT_EXT_DEVICE_SW_1 (EXTERNAL_INT_BASE + 1) -#define INT_EXT_DEVICE_SW_2 (EXTERNAL_INT_BASE + 2) -#define INT_EXT_DEVICE_SW_3 (EXTERNAL_INT_BASE + 3) - -// This gives the mapping from inputs to LOCAL interrupts. - -#define LOCAL_INT_SW_0 0 -#define LOCAL_INT_SW_1 1 -#define LOCAL_INT_SW_2 2 -#define LOCAL_INT_SW_3 3 -#define LOCAL_INT_BTN_0 4 -#define LOCAL_INT_BTN_1 5 -#define LOCAL_INT_BTN_2 6 -#define LOCAL_INT_BTN_3 7 -#define LOCAL_INT_JA_0 8 -#define LOCAL_INT_JA_1 9 -#define LOCAL_INT_JA_2 10 -#define LOCAL_INT_JA_3 11 -#define LOCAL_INT_JA_4 12 -#define LOCAL_INT_JA_5 13 -#define LOCAL_INT_JA_6 14 -#define LOCAL_INT_JA_7 15 - -#define RTC_FREQ 32768 - -void write_hex(int fd, unsigned long int hex); - -#endif /* _SIFIVE_COREPLEXIP_ARTY_H */ diff --git a/raven/bsp/env/coreplexip-e31-arty/dhrystone.lds b/raven/bsp/env/coreplexip-e31-arty/dhrystone.lds deleted file mode 100644 index 8f6527b..0000000 --- a/raven/bsp/env/coreplexip-e31-arty/dhrystone.lds +++ /dev/null @@ -1,157 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - flash (rxai!w) : ORIGIN = 0x40400000, LENGTH = 512M - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K -} - -PHDRS -{ - flash PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 1K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >flash AT>flash :flash - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >flash AT>flash :flash - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >flash AT>flash :flash - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >flash AT>flash :flash - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >flash AT>flash :flash - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >flash AT>flash :flash - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >flash AT>flash :flash - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >flash AT>flash :flash - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >flash AT>flash :flash - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>flash :ram_init - - .data : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>flash :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack ORIGIN(ram) + LENGTH(ram) - __stack_size : - { - PROVIDE( _heap_end = . ); - . = __stack_size; - PROVIDE( _sp = . ); - } >ram AT>ram :ram -} diff --git a/raven/bsp/env/coreplexip-e31-arty/flash.lds b/raven/bsp/env/coreplexip-e31-arty/flash.lds deleted file mode 100644 index 590c5b6..0000000 --- a/raven/bsp/env/coreplexip-e31-arty/flash.lds +++ /dev/null @@ -1,161 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - flash (rxai!w) : ORIGIN = 0x40400000, LENGTH = 512M - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K -} - -PHDRS -{ - flash PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 2K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >flash AT>flash :flash - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >flash AT>flash :flash - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >flash AT>flash :flash - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - .rodata : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - } >flash AT>flash :flash - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >flash AT>flash :flash - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >flash AT>flash :flash - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >flash AT>flash :flash - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >flash AT>flash :flash - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >flash AT>flash :flash - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >flash AT>flash :flash - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>flash :ram_init - - .data : - { - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>flash :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack ORIGIN(ram) + LENGTH(ram) - __stack_size : - { - PROVIDE( _heap_end = . ); - . = __stack_size; - PROVIDE( _sp = . ); - } >ram AT>ram :ram -} diff --git a/raven/bsp/env/coreplexip-e31-arty/init.c b/raven/bsp/env/coreplexip-e31-arty/init.c deleted file mode 100644 index 1f8b679..0000000 --- a/raven/bsp/env/coreplexip-e31-arty/init.c +++ /dev/null @@ -1,122 +0,0 @@ -//See LICENSE for license details. -#include -#include -#include - -#include "platform.h" -#include "encoding.h" - -#define CPU_FREQ 65000000 -#define XSTR(x) #x -#define STR(x) XSTR(x) - -#ifndef VECT_IRQ - #define TRAP_ENTRY trap_entry -#else - #define TRAP_ENTRY vtrap_entry -#endif - -extern int main(int argc, char** argv); -extern void TRAP_ENTRY(); - -unsigned long get_cpu_freq() -{ - return CPU_FREQ; -} - -unsigned long get_timer_freq() -{ - return get_cpu_freq(); -} - -uint64_t get_timer_value() -{ -#if __riscv_xlen == 32 - while (1) { - uint32_t hi = read_csr(mcycleh); - uint32_t lo = read_csr(mcycle); - if (hi == read_csr(mcycleh)) - return ((uint64_t)hi << 32) | lo; - } -#else - return read_csr(mcycle); -#endif -} - -static void uart_init(size_t baud_rate) -{ - UART0_REG(UART_REG_DIV) = (get_cpu_freq() / 2) / baud_rate - 1; - UART0_REG(UART_REG_TXCTRL) |= UART_TXEN; -} - - -#ifdef USE_PLIC -extern void handle_m_ext_interrupt(); -#endif - -#ifdef USE_M_TIME -extern void handle_m_time_interrupt(); -#endif - -#ifdef USE_LOCAL_ISR -typedef void (*my_interrupt_function_ptr_t) (void); -extern my_interrupt_function_ptr_t localISR[]; -#endif - -#ifndef VECT_IRQ -uintptr_t handle_trap(uintptr_t mcause, uintptr_t epc) __attribute__((noinline)); -uintptr_t handle_trap(uintptr_t mcause, uintptr_t epc) -{ - if (0){ -#ifdef USE_PLIC - // External Machine-Level interrupt from PLIC - } else if ((mcause & MCAUSE_INT) && ((mcause & MCAUSE_CAUSE) == IRQ_M_EXT)) { - handle_m_ext_interrupt(); -#endif -#ifdef USE_M_TIME - // External Machine-Level interrupt from PLIC - } else if ((mcause & MCAUSE_INT) && ((mcause & MCAUSE_CAUSE) == IRQ_M_TIMER)){ - handle_m_time_interrupt(); -#endif -#ifdef USE_LOCAL_ISR - } else if (mcause & MCAUSE_INT) { - localISR[mcause & MCAUSE_CAUSE] (); -#endif - } - else { - write(1, "Unhandled Trap:\n", 16); - _exit(1 + mcause); - } - return epc; -} -#endif - -#ifdef USE_CLIC -void trap_entry(void) __attribute__((interrupt("SiFive-CLIC-preemptible"), aligned(64))); -void trap_entry(void) -{ - unsigned long mcause = read_csr(mcause); - unsigned long mepc = read_csr(mepc); - handle_trap(mcause, mepc); -} -#endif - -void _init() -{ - #ifndef NO_INIT - uart_init(115200); - - puts("core freq at " STR(CPU_FREQ) " Hz\n"); - -#ifdef USE_CLIC - write_csr(mtvec, ((unsigned long)&trap_entry | MTVEC_CLIC)); -#else - write_csr(mtvec, ((unsigned long)&TRAP_ENTRY | MTVEC_VECTORED)); -#endif - - #endif -} - -void _fini() -{ -} diff --git a/raven/bsp/env/coreplexip-e31-arty/openocd.cfg b/raven/bsp/env/coreplexip-e31-arty/openocd.cfg deleted file mode 100644 index 0481a72..0000000 --- a/raven/bsp/env/coreplexip-e31-arty/openocd.cfg +++ /dev/null @@ -1,31 +0,0 @@ -# JTAG adapter setup -adapter_khz 10000 - -interface ftdi -ftdi_device_desc "Olimex OpenOCD JTAG ARM-USB-TINY-H" -ftdi_vid_pid 0x15ba 0x002a - -ftdi_layout_init 0x0808 0x0a1b -ftdi_layout_signal nSRST -oe 0x0200 -#ftdi_layout_signal nTRST -data 0x0100 -oe 0x0100 -ftdi_layout_signal LED -data 0x0800 - -set _CHIPNAME riscv -jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x20000001 - -set _TARGETNAME $_CHIPNAME.cpu - -target create $_TARGETNAME.0 riscv -chain-position $_TARGETNAME -$_TARGETNAME.0 configure -work-area-phys 0x80000000 -work-area-size 10000 -work-area-backup 1 - -# Un-comment these two flash lines if you have a SPI flash and want to write -# it. -flash bank spi0 fespi 0x40000000 0 0 0 $_TARGETNAME.0 0x20004000 -init -if {[ info exists pulse_srst]} { - ftdi_set_signal nSRST 0 - ftdi_set_signal nSRST z -} -halt -#flash protect 0 64 last off -echo "Ready for Remote Connections" diff --git a/raven/bsp/env/coreplexip-e31-arty/platform.h b/raven/bsp/env/coreplexip-e31-arty/platform.h deleted file mode 100644 index 6fa79ea..0000000 --- a/raven/bsp/env/coreplexip-e31-arty/platform.h +++ /dev/null @@ -1,100 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_PLATFORM_H -#define _SIFIVE_PLATFORM_H - -// Some things missing from the official encoding.h - -#if __riscv_xlen == 32 -#define MCAUSE_INT 0x80000000UL -#define MCAUSE_CAUSE 0x000003FFUL -#else -#define MCAUSE_INT 0x8000000000000000UL -#define MCAUSE_CAUSE 0x00000000000003FFUL -#endif - -#ifdef VECT_IRQ - #define MTVEC_VECTORED 0x01 -#else - #define MTVEC_VECTORED 0x00 -#endif -#define MTVEC_CLIC 0x02 -#define IRQ_M_LOCAL 16 -#define MIP_MLIP(x) (1 << (IRQ_M_LOCAL + x)) - -#include "sifive/const.h" -#include "sifive/devices/clint.h" -#include "sifive/devices/gpio.h" -#include "sifive/devices/plic.h" -#include "sifive/devices/pwm.h" -#include "sifive/devices/spi.h" -#include "sifive/devices/uart.h" - -/**************************************************************************** - * Platform definitions - *****************************************************************************/ - -// Memory map -#define CLINT_CTRL_ADDR _AC(0x02000000,UL) -#define GPIO_CTRL_ADDR _AC(0x20002000,UL) -#define PLIC_CTRL_ADDR _AC(0x0C000000,UL) -#define PWM0_CTRL_ADDR _AC(0x20005000,UL) -#define RAM_MEM_ADDR _AC(0x80000000,UL) -#define RAM_MEM_SIZE _AC(0x10000,UL) -#define SPI0_CTRL_ADDR _AC(0x20004000,UL) -#define SPI0_MEM_ADDR _AC(0x40000000,UL) -#define SPI0_MEM_SIZE _AC(0x20000000,UL) -#define TESTBENCH_MEM_ADDR _AC(0x20000000,UL) -#define TESTBENCH_MEM_SIZE _AC(0x10000000,UL) -#define TRAPVEC_TABLE_CTRL_ADDR _AC(0x00001010,UL) -#define UART0_CTRL_ADDR _AC(0x20000000,UL) - -// IOF masks - -// Interrupt numbers -#define RESERVED_INT_BASE 0 -#define UART0_INT_BASE 1 -#define EXTERNAL_INT_BASE 2 -#define SPI0_INT_BASE 6 -#define GPIO_INT_BASE 7 -#define PWM0_INT_BASE 23 - -// Helper functions -#define _REG64(p, i) (*(volatile uint64_t *)((p) + (i))) -#define _REG32(p, i) (*(volatile uint32_t *)((p) + (i))) -#define _REG16(p, i) (*(volatile uint16_t *)((p) + (i))) -// Bulk set bits in `reg` to either 0 or 1. -// E.g. SET_BITS(MY_REG, 0x00000007, 0) would generate MY_REG &= ~0x7 -// E.g. SET_BITS(MY_REG, 0x00000007, 1) would generate MY_REG |= 0x7 -#define SET_BITS(reg, mask, value) if ((value) == 0) { (reg) &= ~(mask); } else { (reg) |= (mask); } -#define CLINT_REG(offset) _REG32(CLINT_CTRL_ADDR, offset) -#define GPIO_REG(offset) _REG32(GPIO_CTRL_ADDR, offset) -#define PLIC_REG(offset) _REG32(PLIC_CTRL_ADDR, offset) -#define PWM0_REG(offset) _REG32(PWM0_CTRL_ADDR, offset) -#define SPI0_REG(offset) _REG32(SPI0_CTRL_ADDR, offset) -#define TRAPVEC_TABLE_REG(offset) _REG32(TRAPVEC_TABLE_CTRL_ADDR, offset) -#define UART0_REG(offset) _REG32(UART0_CTRL_ADDR, offset) -#define CLINT_REG64(offset) _REG64(CLINT_CTRL_ADDR, offset) -#define GPIO_REG64(offset) _REG64(GPIO_CTRL_ADDR, offset) -#define PLIC_REG64(offset) _REG64(PLIC_CTRL_ADDR, offset) -#define PWM0_REG64(offset) _REG64(PWM0_CTRL_ADDR, offset) -#define SPI0_REG64(offset) _REG64(SPI0_CTRL_ADDR, offset) -#define TRAPVEC_TABLE_REG64(offset) _REG64(TRAPVEC_TABLE_CTRL_ADDR, offset) -#define UART0_REG64(offset) _REG64(UART0_CTRL_ADDR, offset) - -// Misc - -#define NUM_GPIO 16 - -#define PLIC_NUM_INTERRUPTS 28 -#define PLIC_NUM_PRIORITIES 7 - -#define HAS_BOARD_BUTTONS - -#include "coreplexip-arty.h" - -unsigned long get_cpu_freq(void); -unsigned long get_timer_freq(void); -uint64_t get_timer_value(void); - -#endif /* _SIFIVE_PLATFORM_H */ diff --git a/raven/bsp/env/coreplexip-e31-arty/scratchpad.lds b/raven/bsp/env/coreplexip-e31-arty/scratchpad.lds deleted file mode 100644 index 7887c13..0000000 --- a/raven/bsp/env/coreplexip-e31-arty/scratchpad.lds +++ /dev/null @@ -1,161 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K -} - -PHDRS -{ - ram PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 1K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >ram AT>ram :ram - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >ram AT>ram :ram - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >ram AT>ram :ram - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - .rodata : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - } >ram AT>ram :ram - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >ram AT>ram :ram - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >ram AT>ram :ram - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >ram AT>ram :ram - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >ram AT>ram :ram - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >ram AT>ram :ram - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >ram AT>ram :ram - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>ram :ram_init - - .data : - { - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>ram :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack : - { - . = ALIGN(8); - . += __stack_size; - PROVIDE( _sp = . ); - PROVIDE( _heap_end = . ); - } >ram AT>ram :ram -} diff --git a/raven/bsp/env/coreplexip-e31-arty/settings.mk b/raven/bsp/env/coreplexip-e31-arty/settings.mk deleted file mode 100644 index 230fccc..0000000 --- a/raven/bsp/env/coreplexip-e31-arty/settings.mk +++ /dev/null @@ -1,3 +0,0 @@ -# Describes the CPU on this board to the rest of the SDK. -RISCV_ARCH := rv32imac -RISCV_ABI := ilp32 diff --git a/raven/bsp/env/coreplexip-e51-arty/dhrystone.lds b/raven/bsp/env/coreplexip-e51-arty/dhrystone.lds deleted file mode 100644 index 8f6527b..0000000 --- a/raven/bsp/env/coreplexip-e51-arty/dhrystone.lds +++ /dev/null @@ -1,157 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - flash (rxai!w) : ORIGIN = 0x40400000, LENGTH = 512M - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K -} - -PHDRS -{ - flash PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 1K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >flash AT>flash :flash - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >flash AT>flash :flash - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >flash AT>flash :flash - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >flash AT>flash :flash - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >flash AT>flash :flash - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >flash AT>flash :flash - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >flash AT>flash :flash - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >flash AT>flash :flash - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >flash AT>flash :flash - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>flash :ram_init - - .data : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>flash :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack ORIGIN(ram) + LENGTH(ram) - __stack_size : - { - PROVIDE( _heap_end = . ); - . = __stack_size; - PROVIDE( _sp = . ); - } >ram AT>ram :ram -} diff --git a/raven/bsp/env/coreplexip-e51-arty/flash.lds b/raven/bsp/env/coreplexip-e51-arty/flash.lds deleted file mode 100644 index 590c5b6..0000000 --- a/raven/bsp/env/coreplexip-e51-arty/flash.lds +++ /dev/null @@ -1,161 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - flash (rxai!w) : ORIGIN = 0x40400000, LENGTH = 512M - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K -} - -PHDRS -{ - flash PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 2K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >flash AT>flash :flash - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >flash AT>flash :flash - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >flash AT>flash :flash - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - .rodata : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - } >flash AT>flash :flash - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >flash AT>flash :flash - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >flash AT>flash :flash - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >flash AT>flash :flash - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >flash AT>flash :flash - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >flash AT>flash :flash - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >flash AT>flash :flash - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>flash :ram_init - - .data : - { - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>flash :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack ORIGIN(ram) + LENGTH(ram) - __stack_size : - { - PROVIDE( _heap_end = . ); - . = __stack_size; - PROVIDE( _sp = . ); - } >ram AT>ram :ram -} diff --git a/raven/bsp/env/coreplexip-e51-arty/init.c b/raven/bsp/env/coreplexip-e51-arty/init.c deleted file mode 100644 index 1f8b679..0000000 --- a/raven/bsp/env/coreplexip-e51-arty/init.c +++ /dev/null @@ -1,122 +0,0 @@ -//See LICENSE for license details. -#include -#include -#include - -#include "platform.h" -#include "encoding.h" - -#define CPU_FREQ 65000000 -#define XSTR(x) #x -#define STR(x) XSTR(x) - -#ifndef VECT_IRQ - #define TRAP_ENTRY trap_entry -#else - #define TRAP_ENTRY vtrap_entry -#endif - -extern int main(int argc, char** argv); -extern void TRAP_ENTRY(); - -unsigned long get_cpu_freq() -{ - return CPU_FREQ; -} - -unsigned long get_timer_freq() -{ - return get_cpu_freq(); -} - -uint64_t get_timer_value() -{ -#if __riscv_xlen == 32 - while (1) { - uint32_t hi = read_csr(mcycleh); - uint32_t lo = read_csr(mcycle); - if (hi == read_csr(mcycleh)) - return ((uint64_t)hi << 32) | lo; - } -#else - return read_csr(mcycle); -#endif -} - -static void uart_init(size_t baud_rate) -{ - UART0_REG(UART_REG_DIV) = (get_cpu_freq() / 2) / baud_rate - 1; - UART0_REG(UART_REG_TXCTRL) |= UART_TXEN; -} - - -#ifdef USE_PLIC -extern void handle_m_ext_interrupt(); -#endif - -#ifdef USE_M_TIME -extern void handle_m_time_interrupt(); -#endif - -#ifdef USE_LOCAL_ISR -typedef void (*my_interrupt_function_ptr_t) (void); -extern my_interrupt_function_ptr_t localISR[]; -#endif - -#ifndef VECT_IRQ -uintptr_t handle_trap(uintptr_t mcause, uintptr_t epc) __attribute__((noinline)); -uintptr_t handle_trap(uintptr_t mcause, uintptr_t epc) -{ - if (0){ -#ifdef USE_PLIC - // External Machine-Level interrupt from PLIC - } else if ((mcause & MCAUSE_INT) && ((mcause & MCAUSE_CAUSE) == IRQ_M_EXT)) { - handle_m_ext_interrupt(); -#endif -#ifdef USE_M_TIME - // External Machine-Level interrupt from PLIC - } else if ((mcause & MCAUSE_INT) && ((mcause & MCAUSE_CAUSE) == IRQ_M_TIMER)){ - handle_m_time_interrupt(); -#endif -#ifdef USE_LOCAL_ISR - } else if (mcause & MCAUSE_INT) { - localISR[mcause & MCAUSE_CAUSE] (); -#endif - } - else { - write(1, "Unhandled Trap:\n", 16); - _exit(1 + mcause); - } - return epc; -} -#endif - -#ifdef USE_CLIC -void trap_entry(void) __attribute__((interrupt("SiFive-CLIC-preemptible"), aligned(64))); -void trap_entry(void) -{ - unsigned long mcause = read_csr(mcause); - unsigned long mepc = read_csr(mepc); - handle_trap(mcause, mepc); -} -#endif - -void _init() -{ - #ifndef NO_INIT - uart_init(115200); - - puts("core freq at " STR(CPU_FREQ) " Hz\n"); - -#ifdef USE_CLIC - write_csr(mtvec, ((unsigned long)&trap_entry | MTVEC_CLIC)); -#else - write_csr(mtvec, ((unsigned long)&TRAP_ENTRY | MTVEC_VECTORED)); -#endif - - #endif -} - -void _fini() -{ -} diff --git a/raven/bsp/env/coreplexip-e51-arty/openocd.cfg b/raven/bsp/env/coreplexip-e51-arty/openocd.cfg deleted file mode 100644 index 0481a72..0000000 --- a/raven/bsp/env/coreplexip-e51-arty/openocd.cfg +++ /dev/null @@ -1,31 +0,0 @@ -# JTAG adapter setup -adapter_khz 10000 - -interface ftdi -ftdi_device_desc "Olimex OpenOCD JTAG ARM-USB-TINY-H" -ftdi_vid_pid 0x15ba 0x002a - -ftdi_layout_init 0x0808 0x0a1b -ftdi_layout_signal nSRST -oe 0x0200 -#ftdi_layout_signal nTRST -data 0x0100 -oe 0x0100 -ftdi_layout_signal LED -data 0x0800 - -set _CHIPNAME riscv -jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x20000001 - -set _TARGETNAME $_CHIPNAME.cpu - -target create $_TARGETNAME.0 riscv -chain-position $_TARGETNAME -$_TARGETNAME.0 configure -work-area-phys 0x80000000 -work-area-size 10000 -work-area-backup 1 - -# Un-comment these two flash lines if you have a SPI flash and want to write -# it. -flash bank spi0 fespi 0x40000000 0 0 0 $_TARGETNAME.0 0x20004000 -init -if {[ info exists pulse_srst]} { - ftdi_set_signal nSRST 0 - ftdi_set_signal nSRST z -} -halt -#flash protect 0 64 last off -echo "Ready for Remote Connections" diff --git a/raven/bsp/env/coreplexip-e51-arty/platform.h b/raven/bsp/env/coreplexip-e51-arty/platform.h deleted file mode 100644 index 6fa79ea..0000000 --- a/raven/bsp/env/coreplexip-e51-arty/platform.h +++ /dev/null @@ -1,100 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_PLATFORM_H -#define _SIFIVE_PLATFORM_H - -// Some things missing from the official encoding.h - -#if __riscv_xlen == 32 -#define MCAUSE_INT 0x80000000UL -#define MCAUSE_CAUSE 0x000003FFUL -#else -#define MCAUSE_INT 0x8000000000000000UL -#define MCAUSE_CAUSE 0x00000000000003FFUL -#endif - -#ifdef VECT_IRQ - #define MTVEC_VECTORED 0x01 -#else - #define MTVEC_VECTORED 0x00 -#endif -#define MTVEC_CLIC 0x02 -#define IRQ_M_LOCAL 16 -#define MIP_MLIP(x) (1 << (IRQ_M_LOCAL + x)) - -#include "sifive/const.h" -#include "sifive/devices/clint.h" -#include "sifive/devices/gpio.h" -#include "sifive/devices/plic.h" -#include "sifive/devices/pwm.h" -#include "sifive/devices/spi.h" -#include "sifive/devices/uart.h" - -/**************************************************************************** - * Platform definitions - *****************************************************************************/ - -// Memory map -#define CLINT_CTRL_ADDR _AC(0x02000000,UL) -#define GPIO_CTRL_ADDR _AC(0x20002000,UL) -#define PLIC_CTRL_ADDR _AC(0x0C000000,UL) -#define PWM0_CTRL_ADDR _AC(0x20005000,UL) -#define RAM_MEM_ADDR _AC(0x80000000,UL) -#define RAM_MEM_SIZE _AC(0x10000,UL) -#define SPI0_CTRL_ADDR _AC(0x20004000,UL) -#define SPI0_MEM_ADDR _AC(0x40000000,UL) -#define SPI0_MEM_SIZE _AC(0x20000000,UL) -#define TESTBENCH_MEM_ADDR _AC(0x20000000,UL) -#define TESTBENCH_MEM_SIZE _AC(0x10000000,UL) -#define TRAPVEC_TABLE_CTRL_ADDR _AC(0x00001010,UL) -#define UART0_CTRL_ADDR _AC(0x20000000,UL) - -// IOF masks - -// Interrupt numbers -#define RESERVED_INT_BASE 0 -#define UART0_INT_BASE 1 -#define EXTERNAL_INT_BASE 2 -#define SPI0_INT_BASE 6 -#define GPIO_INT_BASE 7 -#define PWM0_INT_BASE 23 - -// Helper functions -#define _REG64(p, i) (*(volatile uint64_t *)((p) + (i))) -#define _REG32(p, i) (*(volatile uint32_t *)((p) + (i))) -#define _REG16(p, i) (*(volatile uint16_t *)((p) + (i))) -// Bulk set bits in `reg` to either 0 or 1. -// E.g. SET_BITS(MY_REG, 0x00000007, 0) would generate MY_REG &= ~0x7 -// E.g. SET_BITS(MY_REG, 0x00000007, 1) would generate MY_REG |= 0x7 -#define SET_BITS(reg, mask, value) if ((value) == 0) { (reg) &= ~(mask); } else { (reg) |= (mask); } -#define CLINT_REG(offset) _REG32(CLINT_CTRL_ADDR, offset) -#define GPIO_REG(offset) _REG32(GPIO_CTRL_ADDR, offset) -#define PLIC_REG(offset) _REG32(PLIC_CTRL_ADDR, offset) -#define PWM0_REG(offset) _REG32(PWM0_CTRL_ADDR, offset) -#define SPI0_REG(offset) _REG32(SPI0_CTRL_ADDR, offset) -#define TRAPVEC_TABLE_REG(offset) _REG32(TRAPVEC_TABLE_CTRL_ADDR, offset) -#define UART0_REG(offset) _REG32(UART0_CTRL_ADDR, offset) -#define CLINT_REG64(offset) _REG64(CLINT_CTRL_ADDR, offset) -#define GPIO_REG64(offset) _REG64(GPIO_CTRL_ADDR, offset) -#define PLIC_REG64(offset) _REG64(PLIC_CTRL_ADDR, offset) -#define PWM0_REG64(offset) _REG64(PWM0_CTRL_ADDR, offset) -#define SPI0_REG64(offset) _REG64(SPI0_CTRL_ADDR, offset) -#define TRAPVEC_TABLE_REG64(offset) _REG64(TRAPVEC_TABLE_CTRL_ADDR, offset) -#define UART0_REG64(offset) _REG64(UART0_CTRL_ADDR, offset) - -// Misc - -#define NUM_GPIO 16 - -#define PLIC_NUM_INTERRUPTS 28 -#define PLIC_NUM_PRIORITIES 7 - -#define HAS_BOARD_BUTTONS - -#include "coreplexip-arty.h" - -unsigned long get_cpu_freq(void); -unsigned long get_timer_freq(void); -uint64_t get_timer_value(void); - -#endif /* _SIFIVE_PLATFORM_H */ diff --git a/raven/bsp/env/coreplexip-e51-arty/scratchpad.lds b/raven/bsp/env/coreplexip-e51-arty/scratchpad.lds deleted file mode 100644 index 7887c13..0000000 --- a/raven/bsp/env/coreplexip-e51-arty/scratchpad.lds +++ /dev/null @@ -1,161 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K -} - -PHDRS -{ - ram PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 1K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >ram AT>ram :ram - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >ram AT>ram :ram - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >ram AT>ram :ram - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - .rodata : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - } >ram AT>ram :ram - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >ram AT>ram :ram - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >ram AT>ram :ram - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >ram AT>ram :ram - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >ram AT>ram :ram - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >ram AT>ram :ram - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >ram AT>ram :ram - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>ram :ram_init - - .data : - { - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>ram :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack : - { - . = ALIGN(8); - . += __stack_size; - PROVIDE( _sp = . ); - PROVIDE( _heap_end = . ); - } >ram AT>ram :ram -} diff --git a/raven/bsp/env/coreplexip-e51-arty/settings.mk b/raven/bsp/env/coreplexip-e51-arty/settings.mk deleted file mode 100644 index 96aea84..0000000 --- a/raven/bsp/env/coreplexip-e51-arty/settings.mk +++ /dev/null @@ -1,3 +0,0 @@ -# Describes the CPU on this board to the rest of the SDK. -RISCV_ARCH := rv64imac -RISCV_ABI := lp64 diff --git a/raven/bsp/env/encoding.h b/raven/bsp/env/encoding.h deleted file mode 100644 index 35e0f9f..0000000 --- a/raven/bsp/env/encoding.h +++ /dev/null @@ -1,1313 +0,0 @@ -// See LICENSE for license details. - -#ifndef RISCV_CSR_ENCODING_H -#define RISCV_CSR_ENCODING_H - -#define MSTATUS_UIE 0x00000001 -#define MSTATUS_SIE 0x00000002 -#define MSTATUS_HIE 0x00000004 -#define MSTATUS_MIE 0x00000008 -#define MSTATUS_UPIE 0x00000010 -#define MSTATUS_SPIE 0x00000020 -#define MSTATUS_HPIE 0x00000040 -#define MSTATUS_MPIE 0x00000080 -#define MSTATUS_SPP 0x00000100 -#define MSTATUS_HPP 0x00000600 -#define MSTATUS_MPP 0x00001800 -#define MSTATUS_FS 0x00006000 -#define MSTATUS_XS 0x00018000 -#define MSTATUS_MPRV 0x00020000 -#define MSTATUS_PUM 0x00040000 -#define MSTATUS_MXR 0x00080000 -#define MSTATUS_VM 0x1F000000 -#define MSTATUS32_SD 0x80000000 -#define MSTATUS64_SD 0x8000000000000000 - -#define SSTATUS_UIE 0x00000001 -#define SSTATUS_SIE 0x00000002 -#define SSTATUS_UPIE 0x00000010 -#define SSTATUS_SPIE 0x00000020 -#define SSTATUS_SPP 0x00000100 -#define SSTATUS_FS 0x00006000 -#define SSTATUS_XS 0x00018000 -#define SSTATUS_PUM 0x00040000 -#define SSTATUS32_SD 0x80000000 -#define SSTATUS64_SD 0x8000000000000000 - -#define DCSR_XDEBUGVER (3U<<30) -#define DCSR_NDRESET (1<<29) -#define DCSR_FULLRESET (1<<28) -#define DCSR_EBREAKM (1<<15) -#define DCSR_EBREAKH (1<<14) -#define DCSR_EBREAKS (1<<13) -#define DCSR_EBREAKU (1<<12) -#define DCSR_STOPCYCLE (1<<10) -#define DCSR_STOPTIME (1<<9) -#define DCSR_CAUSE (7<<6) -#define DCSR_DEBUGINT (1<<5) -#define DCSR_HALT (1<<3) -#define DCSR_STEP (1<<2) -#define DCSR_PRV (3<<0) - -#define DCSR_CAUSE_NONE 0 -#define DCSR_CAUSE_SWBP 1 -#define DCSR_CAUSE_HWBP 2 -#define DCSR_CAUSE_DEBUGINT 3 -#define DCSR_CAUSE_STEP 4 -#define DCSR_CAUSE_HALT 5 - -#define MCONTROL_TYPE(xlen) (0xfULL<<((xlen)-4)) -#define MCONTROL_DMODE(xlen) (1ULL<<((xlen)-5)) -#define MCONTROL_MASKMAX(xlen) (0x3fULL<<((xlen)-11)) - -#define MCONTROL_SELECT (1<<19) -#define MCONTROL_TIMING (1<<18) -#define MCONTROL_ACTION (0x3f<<12) -#define MCONTROL_CHAIN (1<<11) -#define MCONTROL_MATCH (0xf<<7) -#define MCONTROL_M (1<<6) -#define MCONTROL_H (1<<5) -#define MCONTROL_S (1<<4) -#define MCONTROL_U (1<<3) -#define MCONTROL_EXECUTE (1<<2) -#define MCONTROL_STORE (1<<1) -#define MCONTROL_LOAD (1<<0) - -#define MCONTROL_TYPE_NONE 0 -#define MCONTROL_TYPE_MATCH 2 - -#define MCONTROL_ACTION_DEBUG_EXCEPTION 0 -#define MCONTROL_ACTION_DEBUG_MODE 1 -#define MCONTROL_ACTION_TRACE_START 2 -#define MCONTROL_ACTION_TRACE_STOP 3 -#define MCONTROL_ACTION_TRACE_EMIT 4 - -#define MCONTROL_MATCH_EQUAL 0 -#define MCONTROL_MATCH_NAPOT 1 -#define MCONTROL_MATCH_GE 2 -#define MCONTROL_MATCH_LT 3 -#define MCONTROL_MATCH_MASK_LOW 4 -#define MCONTROL_MATCH_MASK_HIGH 5 - -#define MIP_SSIP (1 << IRQ_S_SOFT) -#define MIP_HSIP (1 << IRQ_H_SOFT) -#define MIP_MSIP (1 << IRQ_M_SOFT) -#define MIP_STIP (1 << IRQ_S_TIMER) -#define MIP_HTIP (1 << IRQ_H_TIMER) -#define MIP_MTIP (1 << IRQ_M_TIMER) -#define MIP_SEIP (1 << IRQ_S_EXT) -#define MIP_HEIP (1 << IRQ_H_EXT) -#define MIP_MEIP (1 << IRQ_M_EXT) - -#define SIP_SSIP MIP_SSIP -#define SIP_STIP MIP_STIP - -#define PRV_U 0 -#define PRV_S 1 -#define PRV_H 2 -#define PRV_M 3 - -#define VM_MBARE 0 -#define VM_MBB 1 -#define VM_MBBID 2 -#define VM_SV32 8 -#define VM_SV39 9 -#define VM_SV48 10 - -#define IRQ_S_SOFT 1 -#define IRQ_H_SOFT 2 -#define IRQ_M_SOFT 3 -#define IRQ_S_TIMER 5 -#define IRQ_H_TIMER 6 -#define IRQ_M_TIMER 7 -#define IRQ_S_EXT 9 -#define IRQ_H_EXT 10 -#define IRQ_M_EXT 11 -#define IRQ_COP 12 -#define IRQ_HOST 13 - -#define DEFAULT_RSTVEC 0x00001000 -#define DEFAULT_NMIVEC 0x00001004 -#define DEFAULT_MTVEC 0x00001010 -#define CONFIG_STRING_ADDR 0x0000100C -#define EXT_IO_BASE 0x40000000 -#define DRAM_BASE 0x80000000 - -// page table entry (PTE) fields -#define PTE_V 0x001 // Valid -#define PTE_R 0x002 // Read -#define PTE_W 0x004 // Write -#define PTE_X 0x008 // Execute -#define PTE_U 0x010 // User -#define PTE_G 0x020 // Global -#define PTE_A 0x040 // Accessed -#define PTE_D 0x080 // Dirty -#define PTE_SOFT 0x300 // Reserved for Software - -#define PTE_PPN_SHIFT 10 - -#define PTE_TABLE(PTE) (((PTE) & (PTE_V | PTE_R | PTE_W | PTE_X)) == PTE_V) - -#ifdef __riscv - -#ifdef __riscv64 -# define MSTATUS_SD MSTATUS64_SD -# define SSTATUS_SD SSTATUS64_SD -# define RISCV_PGLEVEL_BITS 9 -#else -# define MSTATUS_SD MSTATUS32_SD -# define SSTATUS_SD SSTATUS32_SD -# define RISCV_PGLEVEL_BITS 10 -#endif -#define RISCV_PGSHIFT 12 -#define RISCV_PGSIZE (1 << RISCV_PGSHIFT) - -#ifndef __ASSEMBLER__ - -#ifdef __GNUC__ - -#define read_csr(reg) ({ unsigned long __tmp; \ - asm volatile ("csrr %0, " #reg : "=r"(__tmp)); \ - __tmp; }) - -#define write_csr(reg, val) ({ \ - if (__builtin_constant_p(val) && (unsigned long)(val) < 32) \ - asm volatile ("csrw " #reg ", %0" :: "i"(val)); \ - else \ - asm volatile ("csrw " #reg ", %0" :: "r"(val)); }) - -#define swap_csr(reg, val) ({ unsigned long __tmp; \ - if (__builtin_constant_p(val) && (unsigned long)(val) < 32) \ - asm volatile ("csrrw %0, " #reg ", %1" : "=r"(__tmp) : "i"(val)); \ - else \ - asm volatile ("csrrw %0, " #reg ", %1" : "=r"(__tmp) : "r"(val)); \ - __tmp; }) - -#define set_csr(reg, bit) ({ unsigned long __tmp; \ - if (__builtin_constant_p(bit) && (unsigned long)(bit) < 32) \ - asm volatile ("csrrs %0, " #reg ", %1" : "=r"(__tmp) : "i"(bit)); \ - else \ - asm volatile ("csrrs %0, " #reg ", %1" : "=r"(__tmp) : "r"(bit)); \ - __tmp; }) - -#define clear_csr(reg, bit) ({ unsigned long __tmp; \ - if (__builtin_constant_p(bit) && (unsigned long)(bit) < 32) \ - asm volatile ("csrrc %0, " #reg ", %1" : "=r"(__tmp) : "i"(bit)); \ - else \ - asm volatile ("csrrc %0, " #reg ", %1" : "=r"(__tmp) : "r"(bit)); \ - __tmp; }) - -#define rdtime() read_csr(time) -#define rdcycle() read_csr(cycle) -#define rdinstret() read_csr(instret) - -#endif - -#endif - -#endif - -#endif -/* Automatically generated by parse-opcodes */ -#ifndef RISCV_ENCODING_H -#define RISCV_ENCODING_H -#define MATCH_BEQ 0x63 -#define MASK_BEQ 0x707f -#define MATCH_BNE 0x1063 -#define MASK_BNE 0x707f -#define MATCH_BLT 0x4063 -#define MASK_BLT 0x707f -#define MATCH_BGE 0x5063 -#define MASK_BGE 0x707f -#define MATCH_BLTU 0x6063 -#define MASK_BLTU 0x707f -#define MATCH_BGEU 0x7063 -#define MASK_BGEU 0x707f -#define MATCH_JALR 0x67 -#define MASK_JALR 0x707f -#define MATCH_JAL 0x6f -#define MASK_JAL 0x7f -#define MATCH_LUI 0x37 -#define MASK_LUI 0x7f -#define MATCH_AUIPC 0x17 -#define MASK_AUIPC 0x7f -#define MATCH_ADDI 0x13 -#define MASK_ADDI 0x707f -#define MATCH_SLLI 0x1013 -#define MASK_SLLI 0xfc00707f -#define MATCH_SLTI 0x2013 -#define MASK_SLTI 0x707f -#define MATCH_SLTIU 0x3013 -#define MASK_SLTIU 0x707f -#define MATCH_XORI 0x4013 -#define MASK_XORI 0x707f -#define MATCH_SRLI 0x5013 -#define MASK_SRLI 0xfc00707f -#define MATCH_SRAI 0x40005013 -#define MASK_SRAI 0xfc00707f -#define MATCH_ORI 0x6013 -#define MASK_ORI 0x707f -#define MATCH_ANDI 0x7013 -#define MASK_ANDI 0x707f -#define MATCH_ADD 0x33 -#define MASK_ADD 0xfe00707f -#define MATCH_SUB 0x40000033 -#define MASK_SUB 0xfe00707f -#define MATCH_SLL 0x1033 -#define MASK_SLL 0xfe00707f -#define MATCH_SLT 0x2033 -#define MASK_SLT 0xfe00707f -#define MATCH_SLTU 0x3033 -#define MASK_SLTU 0xfe00707f -#define MATCH_XOR 0x4033 -#define MASK_XOR 0xfe00707f -#define MATCH_SRL 0x5033 -#define MASK_SRL 0xfe00707f -#define MATCH_SRA 0x40005033 -#define MASK_SRA 0xfe00707f -#define MATCH_OR 0x6033 -#define MASK_OR 0xfe00707f -#define MATCH_AND 0x7033 -#define MASK_AND 0xfe00707f -#define MATCH_ADDIW 0x1b -#define MASK_ADDIW 0x707f -#define MATCH_SLLIW 0x101b -#define MASK_SLLIW 0xfe00707f -#define MATCH_SRLIW 0x501b -#define MASK_SRLIW 0xfe00707f -#define MATCH_SRAIW 0x4000501b -#define MASK_SRAIW 0xfe00707f -#define MATCH_ADDW 0x3b -#define MASK_ADDW 0xfe00707f -#define MATCH_SUBW 0x4000003b -#define MASK_SUBW 0xfe00707f -#define MATCH_SLLW 0x103b -#define MASK_SLLW 0xfe00707f -#define MATCH_SRLW 0x503b -#define MASK_SRLW 0xfe00707f -#define MATCH_SRAW 0x4000503b -#define MASK_SRAW 0xfe00707f -#define MATCH_LB 0x3 -#define MASK_LB 0x707f -#define MATCH_LH 0x1003 -#define MASK_LH 0x707f -#define MATCH_LW 0x2003 -#define MASK_LW 0x707f -#define MATCH_LD 0x3003 -#define MASK_LD 0x707f -#define MATCH_LBU 0x4003 -#define MASK_LBU 0x707f -#define MATCH_LHU 0x5003 -#define MASK_LHU 0x707f -#define MATCH_LWU 0x6003 -#define MASK_LWU 0x707f -#define MATCH_SB 0x23 -#define MASK_SB 0x707f -#define MATCH_SH 0x1023 -#define MASK_SH 0x707f -#define MATCH_SW 0x2023 -#define MASK_SW 0x707f -#define MATCH_SD 0x3023 -#define MASK_SD 0x707f -#define MATCH_FENCE 0xf -#define MASK_FENCE 0x707f -#define MATCH_FENCE_I 0x100f -#define MASK_FENCE_I 0x707f -#define MATCH_MUL 0x2000033 -#define MASK_MUL 0xfe00707f -#define MATCH_MULH 0x2001033 -#define MASK_MULH 0xfe00707f -#define MATCH_MULHSU 0x2002033 -#define MASK_MULHSU 0xfe00707f -#define MATCH_MULHU 0x2003033 -#define MASK_MULHU 0xfe00707f -#define MATCH_DIV 0x2004033 -#define MASK_DIV 0xfe00707f -#define MATCH_DIVU 0x2005033 -#define MASK_DIVU 0xfe00707f -#define MATCH_REM 0x2006033 -#define MASK_REM 0xfe00707f -#define MATCH_REMU 0x2007033 -#define MASK_REMU 0xfe00707f -#define MATCH_MULW 0x200003b -#define MASK_MULW 0xfe00707f -#define MATCH_DIVW 0x200403b -#define MASK_DIVW 0xfe00707f -#define MATCH_DIVUW 0x200503b -#define MASK_DIVUW 0xfe00707f -#define MATCH_REMW 0x200603b -#define MASK_REMW 0xfe00707f -#define MATCH_REMUW 0x200703b -#define MASK_REMUW 0xfe00707f -#define MATCH_AMOADD_W 0x202f -#define MASK_AMOADD_W 0xf800707f -#define MATCH_AMOXOR_W 0x2000202f -#define MASK_AMOXOR_W 0xf800707f -#define MATCH_AMOOR_W 0x4000202f -#define MASK_AMOOR_W 0xf800707f -#define MATCH_AMOAND_W 0x6000202f -#define MASK_AMOAND_W 0xf800707f -#define MATCH_AMOMIN_W 0x8000202f -#define MASK_AMOMIN_W 0xf800707f -#define MATCH_AMOMAX_W 0xa000202f -#define MASK_AMOMAX_W 0xf800707f -#define MATCH_AMOMINU_W 0xc000202f -#define MASK_AMOMINU_W 0xf800707f -#define MATCH_AMOMAXU_W 0xe000202f -#define MASK_AMOMAXU_W 0xf800707f -#define MATCH_AMOSWAP_W 0x800202f -#define MASK_AMOSWAP_W 0xf800707f -#define MATCH_LR_W 0x1000202f -#define MASK_LR_W 0xf9f0707f -#define MATCH_SC_W 0x1800202f -#define MASK_SC_W 0xf800707f -#define MATCH_AMOADD_D 0x302f -#define MASK_AMOADD_D 0xf800707f -#define MATCH_AMOXOR_D 0x2000302f -#define MASK_AMOXOR_D 0xf800707f -#define MATCH_AMOOR_D 0x4000302f -#define MASK_AMOOR_D 0xf800707f -#define MATCH_AMOAND_D 0x6000302f -#define MASK_AMOAND_D 0xf800707f -#define MATCH_AMOMIN_D 0x8000302f -#define MASK_AMOMIN_D 0xf800707f -#define MATCH_AMOMAX_D 0xa000302f -#define MASK_AMOMAX_D 0xf800707f -#define MATCH_AMOMINU_D 0xc000302f -#define MASK_AMOMINU_D 0xf800707f -#define MATCH_AMOMAXU_D 0xe000302f -#define MASK_AMOMAXU_D 0xf800707f -#define MATCH_AMOSWAP_D 0x800302f -#define MASK_AMOSWAP_D 0xf800707f -#define MATCH_LR_D 0x1000302f -#define MASK_LR_D 0xf9f0707f -#define MATCH_SC_D 0x1800302f -#define MASK_SC_D 0xf800707f -#define MATCH_ECALL 0x73 -#define MASK_ECALL 0xffffffff -#define MATCH_EBREAK 0x100073 -#define MASK_EBREAK 0xffffffff -#define MATCH_URET 0x200073 -#define MASK_URET 0xffffffff -#define MATCH_SRET 0x10200073 -#define MASK_SRET 0xffffffff -#define MATCH_HRET 0x20200073 -#define MASK_HRET 0xffffffff -#define MATCH_MRET 0x30200073 -#define MASK_MRET 0xffffffff -#define MATCH_DRET 0x7b200073 -#define MASK_DRET 0xffffffff -#define MATCH_SFENCE_VM 0x10400073 -#define MASK_SFENCE_VM 0xfff07fff -#define MATCH_WFI 0x10500073 -#define MASK_WFI 0xffffffff -#define MATCH_CSRRW 0x1073 -#define MASK_CSRRW 0x707f -#define MATCH_CSRRS 0x2073 -#define MASK_CSRRS 0x707f -#define MATCH_CSRRC 0x3073 -#define MASK_CSRRC 0x707f -#define MATCH_CSRRWI 0x5073 -#define MASK_CSRRWI 0x707f -#define MATCH_CSRRSI 0x6073 -#define MASK_CSRRSI 0x707f -#define MATCH_CSRRCI 0x7073 -#define MASK_CSRRCI 0x707f -#define MATCH_FADD_S 0x53 -#define MASK_FADD_S 0xfe00007f -#define MATCH_FSUB_S 0x8000053 -#define MASK_FSUB_S 0xfe00007f -#define MATCH_FMUL_S 0x10000053 -#define MASK_FMUL_S 0xfe00007f -#define MATCH_FDIV_S 0x18000053 -#define MASK_FDIV_S 0xfe00007f -#define MATCH_FSGNJ_S 0x20000053 -#define MASK_FSGNJ_S 0xfe00707f -#define MATCH_FSGNJN_S 0x20001053 -#define MASK_FSGNJN_S 0xfe00707f -#define MATCH_FSGNJX_S 0x20002053 -#define MASK_FSGNJX_S 0xfe00707f -#define MATCH_FMIN_S 0x28000053 -#define MASK_FMIN_S 0xfe00707f -#define MATCH_FMAX_S 0x28001053 -#define MASK_FMAX_S 0xfe00707f -#define MATCH_FSQRT_S 0x58000053 -#define MASK_FSQRT_S 0xfff0007f -#define MATCH_FADD_D 0x2000053 -#define MASK_FADD_D 0xfe00007f -#define MATCH_FSUB_D 0xa000053 -#define MASK_FSUB_D 0xfe00007f -#define MATCH_FMUL_D 0x12000053 -#define MASK_FMUL_D 0xfe00007f -#define MATCH_FDIV_D 0x1a000053 -#define MASK_FDIV_D 0xfe00007f -#define MATCH_FSGNJ_D 0x22000053 -#define MASK_FSGNJ_D 0xfe00707f -#define MATCH_FSGNJN_D 0x22001053 -#define MASK_FSGNJN_D 0xfe00707f -#define MATCH_FSGNJX_D 0x22002053 -#define MASK_FSGNJX_D 0xfe00707f -#define MATCH_FMIN_D 0x2a000053 -#define MASK_FMIN_D 0xfe00707f -#define MATCH_FMAX_D 0x2a001053 -#define MASK_FMAX_D 0xfe00707f -#define MATCH_FCVT_S_D 0x40100053 -#define MASK_FCVT_S_D 0xfff0007f -#define MATCH_FCVT_D_S 0x42000053 -#define MASK_FCVT_D_S 0xfff0007f -#define MATCH_FSQRT_D 0x5a000053 -#define MASK_FSQRT_D 0xfff0007f -#define MATCH_FLE_S 0xa0000053 -#define MASK_FLE_S 0xfe00707f -#define MATCH_FLT_S 0xa0001053 -#define MASK_FLT_S 0xfe00707f -#define MATCH_FEQ_S 0xa0002053 -#define MASK_FEQ_S 0xfe00707f -#define MATCH_FLE_D 0xa2000053 -#define MASK_FLE_D 0xfe00707f -#define MATCH_FLT_D 0xa2001053 -#define MASK_FLT_D 0xfe00707f -#define MATCH_FEQ_D 0xa2002053 -#define MASK_FEQ_D 0xfe00707f -#define MATCH_FCVT_W_S 0xc0000053 -#define MASK_FCVT_W_S 0xfff0007f -#define MATCH_FCVT_WU_S 0xc0100053 -#define MASK_FCVT_WU_S 0xfff0007f -#define MATCH_FCVT_L_S 0xc0200053 -#define MASK_FCVT_L_S 0xfff0007f -#define MATCH_FCVT_LU_S 0xc0300053 -#define MASK_FCVT_LU_S 0xfff0007f -#define MATCH_FMV_X_S 0xe0000053 -#define MASK_FMV_X_S 0xfff0707f -#define MATCH_FCLASS_S 0xe0001053 -#define MASK_FCLASS_S 0xfff0707f -#define MATCH_FCVT_W_D 0xc2000053 -#define MASK_FCVT_W_D 0xfff0007f -#define MATCH_FCVT_WU_D 0xc2100053 -#define MASK_FCVT_WU_D 0xfff0007f -#define MATCH_FCVT_L_D 0xc2200053 -#define MASK_FCVT_L_D 0xfff0007f -#define MATCH_FCVT_LU_D 0xc2300053 -#define MASK_FCVT_LU_D 0xfff0007f -#define MATCH_FMV_X_D 0xe2000053 -#define MASK_FMV_X_D 0xfff0707f -#define MATCH_FCLASS_D 0xe2001053 -#define MASK_FCLASS_D 0xfff0707f -#define MATCH_FCVT_S_W 0xd0000053 -#define MASK_FCVT_S_W 0xfff0007f -#define MATCH_FCVT_S_WU 0xd0100053 -#define MASK_FCVT_S_WU 0xfff0007f -#define MATCH_FCVT_S_L 0xd0200053 -#define MASK_FCVT_S_L 0xfff0007f -#define MATCH_FCVT_S_LU 0xd0300053 -#define MASK_FCVT_S_LU 0xfff0007f -#define MATCH_FMV_S_X 0xf0000053 -#define MASK_FMV_S_X 0xfff0707f -#define MATCH_FCVT_D_W 0xd2000053 -#define MASK_FCVT_D_W 0xfff0007f -#define MATCH_FCVT_D_WU 0xd2100053 -#define MASK_FCVT_D_WU 0xfff0007f -#define MATCH_FCVT_D_L 0xd2200053 -#define MASK_FCVT_D_L 0xfff0007f -#define MATCH_FCVT_D_LU 0xd2300053 -#define MASK_FCVT_D_LU 0xfff0007f -#define MATCH_FMV_D_X 0xf2000053 -#define MASK_FMV_D_X 0xfff0707f -#define MATCH_FLW 0x2007 -#define MASK_FLW 0x707f -#define MATCH_FLD 0x3007 -#define MASK_FLD 0x707f -#define MATCH_FSW 0x2027 -#define MASK_FSW 0x707f -#define MATCH_FSD 0x3027 -#define MASK_FSD 0x707f -#define MATCH_FMADD_S 0x43 -#define MASK_FMADD_S 0x600007f -#define MATCH_FMSUB_S 0x47 -#define MASK_FMSUB_S 0x600007f -#define MATCH_FNMSUB_S 0x4b -#define MASK_FNMSUB_S 0x600007f -#define MATCH_FNMADD_S 0x4f -#define MASK_FNMADD_S 0x600007f -#define MATCH_FMADD_D 0x2000043 -#define MASK_FMADD_D 0x600007f -#define MATCH_FMSUB_D 0x2000047 -#define MASK_FMSUB_D 0x600007f -#define MATCH_FNMSUB_D 0x200004b -#define MASK_FNMSUB_D 0x600007f -#define MATCH_FNMADD_D 0x200004f -#define MASK_FNMADD_D 0x600007f -#define MATCH_C_NOP 0x1 -#define MASK_C_NOP 0xffff -#define MATCH_C_ADDI16SP 0x6101 -#define MASK_C_ADDI16SP 0xef83 -#define MATCH_C_JR 0x8002 -#define MASK_C_JR 0xf07f -#define MATCH_C_JALR 0x9002 -#define MASK_C_JALR 0xf07f -#define MATCH_C_EBREAK 0x9002 -#define MASK_C_EBREAK 0xffff -#define MATCH_C_LD 0x6000 -#define MASK_C_LD 0xe003 -#define MATCH_C_SD 0xe000 -#define MASK_C_SD 0xe003 -#define MATCH_C_ADDIW 0x2001 -#define MASK_C_ADDIW 0xe003 -#define MATCH_C_LDSP 0x6002 -#define MASK_C_LDSP 0xe003 -#define MATCH_C_SDSP 0xe002 -#define MASK_C_SDSP 0xe003 -#define MATCH_C_ADDI4SPN 0x0 -#define MASK_C_ADDI4SPN 0xe003 -#define MATCH_C_FLD 0x2000 -#define MASK_C_FLD 0xe003 -#define MATCH_C_LW 0x4000 -#define MASK_C_LW 0xe003 -#define MATCH_C_FLW 0x6000 -#define MASK_C_FLW 0xe003 -#define MATCH_C_FSD 0xa000 -#define MASK_C_FSD 0xe003 -#define MATCH_C_SW 0xc000 -#define MASK_C_SW 0xe003 -#define MATCH_C_FSW 0xe000 -#define MASK_C_FSW 0xe003 -#define MATCH_C_ADDI 0x1 -#define MASK_C_ADDI 0xe003 -#define MATCH_C_JAL 0x2001 -#define MASK_C_JAL 0xe003 -#define MATCH_C_LI 0x4001 -#define MASK_C_LI 0xe003 -#define MATCH_C_LUI 0x6001 -#define MASK_C_LUI 0xe003 -#define MATCH_C_SRLI 0x8001 -#define MASK_C_SRLI 0xec03 -#define MATCH_C_SRAI 0x8401 -#define MASK_C_SRAI 0xec03 -#define MATCH_C_ANDI 0x8801 -#define MASK_C_ANDI 0xec03 -#define MATCH_C_SUB 0x8c01 -#define MASK_C_SUB 0xfc63 -#define MATCH_C_XOR 0x8c21 -#define MASK_C_XOR 0xfc63 -#define MATCH_C_OR 0x8c41 -#define MASK_C_OR 0xfc63 -#define MATCH_C_AND 0x8c61 -#define MASK_C_AND 0xfc63 -#define MATCH_C_SUBW 0x9c01 -#define MASK_C_SUBW 0xfc63 -#define MATCH_C_ADDW 0x9c21 -#define MASK_C_ADDW 0xfc63 -#define MATCH_C_J 0xa001 -#define MASK_C_J 0xe003 -#define MATCH_C_BEQZ 0xc001 -#define MASK_C_BEQZ 0xe003 -#define MATCH_C_BNEZ 0xe001 -#define MASK_C_BNEZ 0xe003 -#define MATCH_C_SLLI 0x2 -#define MASK_C_SLLI 0xe003 -#define MATCH_C_FLDSP 0x2002 -#define MASK_C_FLDSP 0xe003 -#define MATCH_C_LWSP 0x4002 -#define MASK_C_LWSP 0xe003 -#define MATCH_C_FLWSP 0x6002 -#define MASK_C_FLWSP 0xe003 -#define MATCH_C_MV 0x8002 -#define MASK_C_MV 0xf003 -#define MATCH_C_ADD 0x9002 -#define MASK_C_ADD 0xf003 -#define MATCH_C_FSDSP 0xa002 -#define MASK_C_FSDSP 0xe003 -#define MATCH_C_SWSP 0xc002 -#define MASK_C_SWSP 0xe003 -#define MATCH_C_FSWSP 0xe002 -#define MASK_C_FSWSP 0xe003 -#define MATCH_CUSTOM0 0xb -#define MASK_CUSTOM0 0x707f -#define MATCH_CUSTOM0_RS1 0x200b -#define MASK_CUSTOM0_RS1 0x707f -#define MATCH_CUSTOM0_RS1_RS2 0x300b -#define MASK_CUSTOM0_RS1_RS2 0x707f -#define MATCH_CUSTOM0_RD 0x400b -#define MASK_CUSTOM0_RD 0x707f -#define MATCH_CUSTOM0_RD_RS1 0x600b -#define MASK_CUSTOM0_RD_RS1 0x707f -#define MATCH_CUSTOM0_RD_RS1_RS2 0x700b -#define MASK_CUSTOM0_RD_RS1_RS2 0x707f -#define MATCH_CUSTOM1 0x2b -#define MASK_CUSTOM1 0x707f -#define MATCH_CUSTOM1_RS1 0x202b -#define MASK_CUSTOM1_RS1 0x707f -#define MATCH_CUSTOM1_RS1_RS2 0x302b -#define MASK_CUSTOM1_RS1_RS2 0x707f -#define MATCH_CUSTOM1_RD 0x402b -#define MASK_CUSTOM1_RD 0x707f -#define MATCH_CUSTOM1_RD_RS1 0x602b -#define MASK_CUSTOM1_RD_RS1 0x707f -#define MATCH_CUSTOM1_RD_RS1_RS2 0x702b -#define MASK_CUSTOM1_RD_RS1_RS2 0x707f -#define MATCH_CUSTOM2 0x5b -#define MASK_CUSTOM2 0x707f -#define MATCH_CUSTOM2_RS1 0x205b -#define MASK_CUSTOM2_RS1 0x707f -#define MATCH_CUSTOM2_RS1_RS2 0x305b -#define MASK_CUSTOM2_RS1_RS2 0x707f -#define MATCH_CUSTOM2_RD 0x405b -#define MASK_CUSTOM2_RD 0x707f -#define MATCH_CUSTOM2_RD_RS1 0x605b -#define MASK_CUSTOM2_RD_RS1 0x707f -#define MATCH_CUSTOM2_RD_RS1_RS2 0x705b -#define MASK_CUSTOM2_RD_RS1_RS2 0x707f -#define MATCH_CUSTOM3 0x7b -#define MASK_CUSTOM3 0x707f -#define MATCH_CUSTOM3_RS1 0x207b -#define MASK_CUSTOM3_RS1 0x707f -#define MATCH_CUSTOM3_RS1_RS2 0x307b -#define MASK_CUSTOM3_RS1_RS2 0x707f -#define MATCH_CUSTOM3_RD 0x407b -#define MASK_CUSTOM3_RD 0x707f -#define MATCH_CUSTOM3_RD_RS1 0x607b -#define MASK_CUSTOM3_RD_RS1 0x707f -#define MATCH_CUSTOM3_RD_RS1_RS2 0x707b -#define MASK_CUSTOM3_RD_RS1_RS2 0x707f -#define CSR_FFLAGS 0x1 -#define CSR_FRM 0x2 -#define CSR_FCSR 0x3 -#define CSR_CYCLE 0xc00 -#define CSR_TIME 0xc01 -#define CSR_INSTRET 0xc02 -#define CSR_HPMCOUNTER3 0xc03 -#define CSR_HPMCOUNTER4 0xc04 -#define CSR_HPMCOUNTER5 0xc05 -#define CSR_HPMCOUNTER6 0xc06 -#define CSR_HPMCOUNTER7 0xc07 -#define CSR_HPMCOUNTER8 0xc08 -#define CSR_HPMCOUNTER9 0xc09 -#define CSR_HPMCOUNTER10 0xc0a -#define CSR_HPMCOUNTER11 0xc0b -#define CSR_HPMCOUNTER12 0xc0c -#define CSR_HPMCOUNTER13 0xc0d -#define CSR_HPMCOUNTER14 0xc0e -#define CSR_HPMCOUNTER15 0xc0f -#define CSR_HPMCOUNTER16 0xc10 -#define CSR_HPMCOUNTER17 0xc11 -#define CSR_HPMCOUNTER18 0xc12 -#define CSR_HPMCOUNTER19 0xc13 -#define CSR_HPMCOUNTER20 0xc14 -#define CSR_HPMCOUNTER21 0xc15 -#define CSR_HPMCOUNTER22 0xc16 -#define CSR_HPMCOUNTER23 0xc17 -#define CSR_HPMCOUNTER24 0xc18 -#define CSR_HPMCOUNTER25 0xc19 -#define CSR_HPMCOUNTER26 0xc1a -#define CSR_HPMCOUNTER27 0xc1b -#define CSR_HPMCOUNTER28 0xc1c -#define CSR_HPMCOUNTER29 0xc1d -#define CSR_HPMCOUNTER30 0xc1e -#define CSR_HPMCOUNTER31 0xc1f -#define CSR_SSTATUS 0x100 -#define CSR_SIE 0x104 -#define CSR_STVEC 0x105 -#define CSR_SSCRATCH 0x140 -#define CSR_SEPC 0x141 -#define CSR_SCAUSE 0x142 -#define CSR_SBADADDR 0x143 -#define CSR_SIP 0x144 -#define CSR_SPTBR 0x180 -#define CSR_MSTATUS 0x300 -#define CSR_MISA 0x301 -#define CSR_MEDELEG 0x302 -#define CSR_MIDELEG 0x303 -#define CSR_MIE 0x304 -#define CSR_MTVEC 0x305 -#define CSR_MSCRATCH 0x340 -#define CSR_MEPC 0x341 -#define CSR_MCAUSE 0x342 -#define CSR_MBADADDR 0x343 -#define CSR_MIP 0x344 -#define CSR_TSELECT 0x7a0 -#define CSR_TDATA1 0x7a1 -#define CSR_TDATA2 0x7a2 -#define CSR_TDATA3 0x7a3 -#define CSR_DCSR 0x7b0 -#define CSR_DPC 0x7b1 -#define CSR_DSCRATCH 0x7b2 -#define CSR_MCYCLE 0xb00 -#define CSR_MINSTRET 0xb02 -#define CSR_MHPMCOUNTER3 0xb03 -#define CSR_MHPMCOUNTER4 0xb04 -#define CSR_MHPMCOUNTER5 0xb05 -#define CSR_MHPMCOUNTER6 0xb06 -#define CSR_MHPMCOUNTER7 0xb07 -#define CSR_MHPMCOUNTER8 0xb08 -#define CSR_MHPMCOUNTER9 0xb09 -#define CSR_MHPMCOUNTER10 0xb0a -#define CSR_MHPMCOUNTER11 0xb0b -#define CSR_MHPMCOUNTER12 0xb0c -#define CSR_MHPMCOUNTER13 0xb0d -#define CSR_MHPMCOUNTER14 0xb0e -#define CSR_MHPMCOUNTER15 0xb0f -#define CSR_MHPMCOUNTER16 0xb10 -#define CSR_MHPMCOUNTER17 0xb11 -#define CSR_MHPMCOUNTER18 0xb12 -#define CSR_MHPMCOUNTER19 0xb13 -#define CSR_MHPMCOUNTER20 0xb14 -#define CSR_MHPMCOUNTER21 0xb15 -#define CSR_MHPMCOUNTER22 0xb16 -#define CSR_MHPMCOUNTER23 0xb17 -#define CSR_MHPMCOUNTER24 0xb18 -#define CSR_MHPMCOUNTER25 0xb19 -#define CSR_MHPMCOUNTER26 0xb1a -#define CSR_MHPMCOUNTER27 0xb1b -#define CSR_MHPMCOUNTER28 0xb1c -#define CSR_MHPMCOUNTER29 0xb1d -#define CSR_MHPMCOUNTER30 0xb1e -#define CSR_MHPMCOUNTER31 0xb1f -#define CSR_MUCOUNTEREN 0x320 -#define CSR_MSCOUNTEREN 0x321 -#define CSR_MHPMEVENT3 0x323 -#define CSR_MHPMEVENT4 0x324 -#define CSR_MHPMEVENT5 0x325 -#define CSR_MHPMEVENT6 0x326 -#define CSR_MHPMEVENT7 0x327 -#define CSR_MHPMEVENT8 0x328 -#define CSR_MHPMEVENT9 0x329 -#define CSR_MHPMEVENT10 0x32a -#define CSR_MHPMEVENT11 0x32b -#define CSR_MHPMEVENT12 0x32c -#define CSR_MHPMEVENT13 0x32d -#define CSR_MHPMEVENT14 0x32e -#define CSR_MHPMEVENT15 0x32f -#define CSR_MHPMEVENT16 0x330 -#define CSR_MHPMEVENT17 0x331 -#define CSR_MHPMEVENT18 0x332 -#define CSR_MHPMEVENT19 0x333 -#define CSR_MHPMEVENT20 0x334 -#define CSR_MHPMEVENT21 0x335 -#define CSR_MHPMEVENT22 0x336 -#define CSR_MHPMEVENT23 0x337 -#define CSR_MHPMEVENT24 0x338 -#define CSR_MHPMEVENT25 0x339 -#define CSR_MHPMEVENT26 0x33a -#define CSR_MHPMEVENT27 0x33b -#define CSR_MHPMEVENT28 0x33c -#define CSR_MHPMEVENT29 0x33d -#define CSR_MHPMEVENT30 0x33e -#define CSR_MHPMEVENT31 0x33f -#define CSR_MVENDORID 0xf11 -#define CSR_MARCHID 0xf12 -#define CSR_MIMPID 0xf13 -#define CSR_MHARTID 0xf14 -#define CSR_CYCLEH 0xc80 -#define CSR_TIMEH 0xc81 -#define CSR_INSTRETH 0xc82 -#define CSR_HPMCOUNTER3H 0xc83 -#define CSR_HPMCOUNTER4H 0xc84 -#define CSR_HPMCOUNTER5H 0xc85 -#define CSR_HPMCOUNTER6H 0xc86 -#define CSR_HPMCOUNTER7H 0xc87 -#define CSR_HPMCOUNTER8H 0xc88 -#define CSR_HPMCOUNTER9H 0xc89 -#define CSR_HPMCOUNTER10H 0xc8a -#define CSR_HPMCOUNTER11H 0xc8b -#define CSR_HPMCOUNTER12H 0xc8c -#define CSR_HPMCOUNTER13H 0xc8d -#define CSR_HPMCOUNTER14H 0xc8e -#define CSR_HPMCOUNTER15H 0xc8f -#define CSR_HPMCOUNTER16H 0xc90 -#define CSR_HPMCOUNTER17H 0xc91 -#define CSR_HPMCOUNTER18H 0xc92 -#define CSR_HPMCOUNTER19H 0xc93 -#define CSR_HPMCOUNTER20H 0xc94 -#define CSR_HPMCOUNTER21H 0xc95 -#define CSR_HPMCOUNTER22H 0xc96 -#define CSR_HPMCOUNTER23H 0xc97 -#define CSR_HPMCOUNTER24H 0xc98 -#define CSR_HPMCOUNTER25H 0xc99 -#define CSR_HPMCOUNTER26H 0xc9a -#define CSR_HPMCOUNTER27H 0xc9b -#define CSR_HPMCOUNTER28H 0xc9c -#define CSR_HPMCOUNTER29H 0xc9d -#define CSR_HPMCOUNTER30H 0xc9e -#define CSR_HPMCOUNTER31H 0xc9f -#define CSR_MCYCLEH 0xb80 -#define CSR_MINSTRETH 0xb82 -#define CSR_MHPMCOUNTER3H 0xb83 -#define CSR_MHPMCOUNTER4H 0xb84 -#define CSR_MHPMCOUNTER5H 0xb85 -#define CSR_MHPMCOUNTER6H 0xb86 -#define CSR_MHPMCOUNTER7H 0xb87 -#define CSR_MHPMCOUNTER8H 0xb88 -#define CSR_MHPMCOUNTER9H 0xb89 -#define CSR_MHPMCOUNTER10H 0xb8a -#define CSR_MHPMCOUNTER11H 0xb8b -#define CSR_MHPMCOUNTER12H 0xb8c -#define CSR_MHPMCOUNTER13H 0xb8d -#define CSR_MHPMCOUNTER14H 0xb8e -#define CSR_MHPMCOUNTER15H 0xb8f -#define CSR_MHPMCOUNTER16H 0xb90 -#define CSR_MHPMCOUNTER17H 0xb91 -#define CSR_MHPMCOUNTER18H 0xb92 -#define CSR_MHPMCOUNTER19H 0xb93 -#define CSR_MHPMCOUNTER20H 0xb94 -#define CSR_MHPMCOUNTER21H 0xb95 -#define CSR_MHPMCOUNTER22H 0xb96 -#define CSR_MHPMCOUNTER23H 0xb97 -#define CSR_MHPMCOUNTER24H 0xb98 -#define CSR_MHPMCOUNTER25H 0xb99 -#define CSR_MHPMCOUNTER26H 0xb9a -#define CSR_MHPMCOUNTER27H 0xb9b -#define CSR_MHPMCOUNTER28H 0xb9c -#define CSR_MHPMCOUNTER29H 0xb9d -#define CSR_MHPMCOUNTER30H 0xb9e -#define CSR_MHPMCOUNTER31H 0xb9f -#define CAUSE_MISALIGNED_FETCH 0x0 -#define CAUSE_FAULT_FETCH 0x1 -#define CAUSE_ILLEGAL_INSTRUCTION 0x2 -#define CAUSE_BREAKPOINT 0x3 -#define CAUSE_MISALIGNED_LOAD 0x4 -#define CAUSE_FAULT_LOAD 0x5 -#define CAUSE_MISALIGNED_STORE 0x6 -#define CAUSE_FAULT_STORE 0x7 -#define CAUSE_USER_ECALL 0x8 -#define CAUSE_SUPERVISOR_ECALL 0x9 -#define CAUSE_HYPERVISOR_ECALL 0xa -#define CAUSE_MACHINE_ECALL 0xb -#endif -#ifdef DECLARE_INSN -DECLARE_INSN(beq, MATCH_BEQ, MASK_BEQ) -DECLARE_INSN(bne, MATCH_BNE, MASK_BNE) -DECLARE_INSN(blt, MATCH_BLT, MASK_BLT) -DECLARE_INSN(bge, MATCH_BGE, MASK_BGE) -DECLARE_INSN(bltu, MATCH_BLTU, MASK_BLTU) -DECLARE_INSN(bgeu, MATCH_BGEU, MASK_BGEU) -DECLARE_INSN(jalr, MATCH_JALR, MASK_JALR) -DECLARE_INSN(jal, MATCH_JAL, MASK_JAL) -DECLARE_INSN(lui, MATCH_LUI, MASK_LUI) -DECLARE_INSN(auipc, MATCH_AUIPC, MASK_AUIPC) -DECLARE_INSN(addi, MATCH_ADDI, MASK_ADDI) -DECLARE_INSN(slli, MATCH_SLLI, MASK_SLLI) -DECLARE_INSN(slti, MATCH_SLTI, MASK_SLTI) -DECLARE_INSN(sltiu, MATCH_SLTIU, MASK_SLTIU) -DECLARE_INSN(xori, MATCH_XORI, MASK_XORI) -DECLARE_INSN(srli, MATCH_SRLI, MASK_SRLI) -DECLARE_INSN(srai, MATCH_SRAI, MASK_SRAI) -DECLARE_INSN(ori, MATCH_ORI, MASK_ORI) -DECLARE_INSN(andi, MATCH_ANDI, MASK_ANDI) -DECLARE_INSN(add, MATCH_ADD, MASK_ADD) -DECLARE_INSN(sub, MATCH_SUB, MASK_SUB) -DECLARE_INSN(sll, MATCH_SLL, MASK_SLL) -DECLARE_INSN(slt, MATCH_SLT, MASK_SLT) -DECLARE_INSN(sltu, MATCH_SLTU, MASK_SLTU) -DECLARE_INSN(xor, MATCH_XOR, MASK_XOR) -DECLARE_INSN(srl, MATCH_SRL, MASK_SRL) -DECLARE_INSN(sra, MATCH_SRA, MASK_SRA) -DECLARE_INSN(or, MATCH_OR, MASK_OR) -DECLARE_INSN(and, MATCH_AND, MASK_AND) -DECLARE_INSN(addiw, MATCH_ADDIW, MASK_ADDIW) -DECLARE_INSN(slliw, MATCH_SLLIW, MASK_SLLIW) -DECLARE_INSN(srliw, MATCH_SRLIW, MASK_SRLIW) -DECLARE_INSN(sraiw, MATCH_SRAIW, MASK_SRAIW) -DECLARE_INSN(addw, MATCH_ADDW, MASK_ADDW) -DECLARE_INSN(subw, MATCH_SUBW, MASK_SUBW) -DECLARE_INSN(sllw, MATCH_SLLW, MASK_SLLW) -DECLARE_INSN(srlw, MATCH_SRLW, MASK_SRLW) -DECLARE_INSN(sraw, MATCH_SRAW, MASK_SRAW) -DECLARE_INSN(lb, MATCH_LB, MASK_LB) -DECLARE_INSN(lh, MATCH_LH, MASK_LH) -DECLARE_INSN(lw, MATCH_LW, MASK_LW) -DECLARE_INSN(ld, MATCH_LD, MASK_LD) -DECLARE_INSN(lbu, MATCH_LBU, MASK_LBU) -DECLARE_INSN(lhu, MATCH_LHU, MASK_LHU) -DECLARE_INSN(lwu, MATCH_LWU, MASK_LWU) -DECLARE_INSN(sb, MATCH_SB, MASK_SB) -DECLARE_INSN(sh, MATCH_SH, MASK_SH) -DECLARE_INSN(sw, MATCH_SW, MASK_SW) -DECLARE_INSN(sd, MATCH_SD, MASK_SD) -DECLARE_INSN(fence, MATCH_FENCE, MASK_FENCE) -DECLARE_INSN(fence_i, MATCH_FENCE_I, MASK_FENCE_I) -DECLARE_INSN(mul, MATCH_MUL, MASK_MUL) -DECLARE_INSN(mulh, MATCH_MULH, MASK_MULH) -DECLARE_INSN(mulhsu, MATCH_MULHSU, MASK_MULHSU) -DECLARE_INSN(mulhu, MATCH_MULHU, MASK_MULHU) -DECLARE_INSN(div, MATCH_DIV, MASK_DIV) -DECLARE_INSN(divu, MATCH_DIVU, MASK_DIVU) -DECLARE_INSN(rem, MATCH_REM, MASK_REM) -DECLARE_INSN(remu, MATCH_REMU, MASK_REMU) -DECLARE_INSN(mulw, MATCH_MULW, MASK_MULW) -DECLARE_INSN(divw, MATCH_DIVW, MASK_DIVW) -DECLARE_INSN(divuw, MATCH_DIVUW, MASK_DIVUW) -DECLARE_INSN(remw, MATCH_REMW, MASK_REMW) -DECLARE_INSN(remuw, MATCH_REMUW, MASK_REMUW) -DECLARE_INSN(amoadd_w, MATCH_AMOADD_W, MASK_AMOADD_W) -DECLARE_INSN(amoxor_w, MATCH_AMOXOR_W, MASK_AMOXOR_W) -DECLARE_INSN(amoor_w, MATCH_AMOOR_W, MASK_AMOOR_W) -DECLARE_INSN(amoand_w, MATCH_AMOAND_W, MASK_AMOAND_W) -DECLARE_INSN(amomin_w, MATCH_AMOMIN_W, MASK_AMOMIN_W) -DECLARE_INSN(amomax_w, MATCH_AMOMAX_W, MASK_AMOMAX_W) -DECLARE_INSN(amominu_w, MATCH_AMOMINU_W, MASK_AMOMINU_W) -DECLARE_INSN(amomaxu_w, MATCH_AMOMAXU_W, MASK_AMOMAXU_W) -DECLARE_INSN(amoswap_w, MATCH_AMOSWAP_W, MASK_AMOSWAP_W) -DECLARE_INSN(lr_w, MATCH_LR_W, MASK_LR_W) -DECLARE_INSN(sc_w, MATCH_SC_W, MASK_SC_W) -DECLARE_INSN(amoadd_d, MATCH_AMOADD_D, MASK_AMOADD_D) -DECLARE_INSN(amoxor_d, MATCH_AMOXOR_D, MASK_AMOXOR_D) -DECLARE_INSN(amoor_d, MATCH_AMOOR_D, MASK_AMOOR_D) -DECLARE_INSN(amoand_d, MATCH_AMOAND_D, MASK_AMOAND_D) -DECLARE_INSN(amomin_d, MATCH_AMOMIN_D, MASK_AMOMIN_D) -DECLARE_INSN(amomax_d, MATCH_AMOMAX_D, MASK_AMOMAX_D) -DECLARE_INSN(amominu_d, MATCH_AMOMINU_D, MASK_AMOMINU_D) -DECLARE_INSN(amomaxu_d, MATCH_AMOMAXU_D, MASK_AMOMAXU_D) -DECLARE_INSN(amoswap_d, MATCH_AMOSWAP_D, MASK_AMOSWAP_D) -DECLARE_INSN(lr_d, MATCH_LR_D, MASK_LR_D) -DECLARE_INSN(sc_d, MATCH_SC_D, MASK_SC_D) -DECLARE_INSN(ecall, MATCH_ECALL, MASK_ECALL) -DECLARE_INSN(ebreak, MATCH_EBREAK, MASK_EBREAK) -DECLARE_INSN(uret, MATCH_URET, MASK_URET) -DECLARE_INSN(sret, MATCH_SRET, MASK_SRET) -DECLARE_INSN(hret, MATCH_HRET, MASK_HRET) -DECLARE_INSN(mret, MATCH_MRET, MASK_MRET) -DECLARE_INSN(dret, MATCH_DRET, MASK_DRET) -DECLARE_INSN(sfence_vm, MATCH_SFENCE_VM, MASK_SFENCE_VM) -DECLARE_INSN(wfi, MATCH_WFI, MASK_WFI) -DECLARE_INSN(csrrw, MATCH_CSRRW, MASK_CSRRW) -DECLARE_INSN(csrrs, MATCH_CSRRS, MASK_CSRRS) -DECLARE_INSN(csrrc, MATCH_CSRRC, MASK_CSRRC) -DECLARE_INSN(csrrwi, MATCH_CSRRWI, MASK_CSRRWI) -DECLARE_INSN(csrrsi, MATCH_CSRRSI, MASK_CSRRSI) -DECLARE_INSN(csrrci, MATCH_CSRRCI, MASK_CSRRCI) -DECLARE_INSN(fadd_s, MATCH_FADD_S, MASK_FADD_S) -DECLARE_INSN(fsub_s, MATCH_FSUB_S, MASK_FSUB_S) -DECLARE_INSN(fmul_s, MATCH_FMUL_S, MASK_FMUL_S) -DECLARE_INSN(fdiv_s, MATCH_FDIV_S, MASK_FDIV_S) -DECLARE_INSN(fsgnj_s, MATCH_FSGNJ_S, MASK_FSGNJ_S) -DECLARE_INSN(fsgnjn_s, MATCH_FSGNJN_S, MASK_FSGNJN_S) -DECLARE_INSN(fsgnjx_s, MATCH_FSGNJX_S, MASK_FSGNJX_S) -DECLARE_INSN(fmin_s, MATCH_FMIN_S, MASK_FMIN_S) -DECLARE_INSN(fmax_s, MATCH_FMAX_S, MASK_FMAX_S) -DECLARE_INSN(fsqrt_s, MATCH_FSQRT_S, MASK_FSQRT_S) -DECLARE_INSN(fadd_d, MATCH_FADD_D, MASK_FADD_D) -DECLARE_INSN(fsub_d, MATCH_FSUB_D, MASK_FSUB_D) -DECLARE_INSN(fmul_d, MATCH_FMUL_D, MASK_FMUL_D) -DECLARE_INSN(fdiv_d, MATCH_FDIV_D, MASK_FDIV_D) -DECLARE_INSN(fsgnj_d, MATCH_FSGNJ_D, MASK_FSGNJ_D) -DECLARE_INSN(fsgnjn_d, MATCH_FSGNJN_D, MASK_FSGNJN_D) -DECLARE_INSN(fsgnjx_d, MATCH_FSGNJX_D, MASK_FSGNJX_D) -DECLARE_INSN(fmin_d, MATCH_FMIN_D, MASK_FMIN_D) -DECLARE_INSN(fmax_d, MATCH_FMAX_D, MASK_FMAX_D) -DECLARE_INSN(fcvt_s_d, MATCH_FCVT_S_D, MASK_FCVT_S_D) -DECLARE_INSN(fcvt_d_s, MATCH_FCVT_D_S, MASK_FCVT_D_S) -DECLARE_INSN(fsqrt_d, MATCH_FSQRT_D, MASK_FSQRT_D) -DECLARE_INSN(fle_s, MATCH_FLE_S, MASK_FLE_S) -DECLARE_INSN(flt_s, MATCH_FLT_S, MASK_FLT_S) -DECLARE_INSN(feq_s, MATCH_FEQ_S, MASK_FEQ_S) -DECLARE_INSN(fle_d, MATCH_FLE_D, MASK_FLE_D) -DECLARE_INSN(flt_d, MATCH_FLT_D, MASK_FLT_D) -DECLARE_INSN(feq_d, MATCH_FEQ_D, MASK_FEQ_D) -DECLARE_INSN(fcvt_w_s, MATCH_FCVT_W_S, MASK_FCVT_W_S) -DECLARE_INSN(fcvt_wu_s, MATCH_FCVT_WU_S, MASK_FCVT_WU_S) -DECLARE_INSN(fcvt_l_s, MATCH_FCVT_L_S, MASK_FCVT_L_S) -DECLARE_INSN(fcvt_lu_s, MATCH_FCVT_LU_S, MASK_FCVT_LU_S) -DECLARE_INSN(fmv_x_s, MATCH_FMV_X_S, MASK_FMV_X_S) -DECLARE_INSN(fclass_s, MATCH_FCLASS_S, MASK_FCLASS_S) -DECLARE_INSN(fcvt_w_d, MATCH_FCVT_W_D, MASK_FCVT_W_D) -DECLARE_INSN(fcvt_wu_d, MATCH_FCVT_WU_D, MASK_FCVT_WU_D) -DECLARE_INSN(fcvt_l_d, MATCH_FCVT_L_D, MASK_FCVT_L_D) -DECLARE_INSN(fcvt_lu_d, MATCH_FCVT_LU_D, MASK_FCVT_LU_D) -DECLARE_INSN(fmv_x_d, MATCH_FMV_X_D, MASK_FMV_X_D) -DECLARE_INSN(fclass_d, MATCH_FCLASS_D, MASK_FCLASS_D) -DECLARE_INSN(fcvt_s_w, MATCH_FCVT_S_W, MASK_FCVT_S_W) -DECLARE_INSN(fcvt_s_wu, MATCH_FCVT_S_WU, MASK_FCVT_S_WU) -DECLARE_INSN(fcvt_s_l, MATCH_FCVT_S_L, MASK_FCVT_S_L) -DECLARE_INSN(fcvt_s_lu, MATCH_FCVT_S_LU, MASK_FCVT_S_LU) -DECLARE_INSN(fmv_s_x, MATCH_FMV_S_X, MASK_FMV_S_X) -DECLARE_INSN(fcvt_d_w, MATCH_FCVT_D_W, MASK_FCVT_D_W) -DECLARE_INSN(fcvt_d_wu, MATCH_FCVT_D_WU, MASK_FCVT_D_WU) -DECLARE_INSN(fcvt_d_l, MATCH_FCVT_D_L, MASK_FCVT_D_L) -DECLARE_INSN(fcvt_d_lu, MATCH_FCVT_D_LU, MASK_FCVT_D_LU) -DECLARE_INSN(fmv_d_x, MATCH_FMV_D_X, MASK_FMV_D_X) -DECLARE_INSN(flw, MATCH_FLW, MASK_FLW) -DECLARE_INSN(fld, MATCH_FLD, MASK_FLD) -DECLARE_INSN(fsw, MATCH_FSW, MASK_FSW) -DECLARE_INSN(fsd, MATCH_FSD, MASK_FSD) -DECLARE_INSN(fmadd_s, MATCH_FMADD_S, MASK_FMADD_S) -DECLARE_INSN(fmsub_s, MATCH_FMSUB_S, MASK_FMSUB_S) -DECLARE_INSN(fnmsub_s, MATCH_FNMSUB_S, MASK_FNMSUB_S) -DECLARE_INSN(fnmadd_s, MATCH_FNMADD_S, MASK_FNMADD_S) -DECLARE_INSN(fmadd_d, MATCH_FMADD_D, MASK_FMADD_D) -DECLARE_INSN(fmsub_d, MATCH_FMSUB_D, MASK_FMSUB_D) -DECLARE_INSN(fnmsub_d, MATCH_FNMSUB_D, MASK_FNMSUB_D) -DECLARE_INSN(fnmadd_d, MATCH_FNMADD_D, MASK_FNMADD_D) -DECLARE_INSN(c_nop, MATCH_C_NOP, MASK_C_NOP) -DECLARE_INSN(c_addi16sp, MATCH_C_ADDI16SP, MASK_C_ADDI16SP) -DECLARE_INSN(c_jr, MATCH_C_JR, MASK_C_JR) -DECLARE_INSN(c_jalr, MATCH_C_JALR, MASK_C_JALR) -DECLARE_INSN(c_ebreak, MATCH_C_EBREAK, MASK_C_EBREAK) -DECLARE_INSN(c_ld, MATCH_C_LD, MASK_C_LD) -DECLARE_INSN(c_sd, MATCH_C_SD, MASK_C_SD) -DECLARE_INSN(c_addiw, MATCH_C_ADDIW, MASK_C_ADDIW) -DECLARE_INSN(c_ldsp, MATCH_C_LDSP, MASK_C_LDSP) -DECLARE_INSN(c_sdsp, MATCH_C_SDSP, MASK_C_SDSP) -DECLARE_INSN(c_addi4spn, MATCH_C_ADDI4SPN, MASK_C_ADDI4SPN) -DECLARE_INSN(c_fld, MATCH_C_FLD, MASK_C_FLD) -DECLARE_INSN(c_lw, MATCH_C_LW, MASK_C_LW) -DECLARE_INSN(c_flw, MATCH_C_FLW, MASK_C_FLW) -DECLARE_INSN(c_fsd, MATCH_C_FSD, MASK_C_FSD) -DECLARE_INSN(c_sw, MATCH_C_SW, MASK_C_SW) -DECLARE_INSN(c_fsw, MATCH_C_FSW, MASK_C_FSW) -DECLARE_INSN(c_addi, MATCH_C_ADDI, MASK_C_ADDI) -DECLARE_INSN(c_jal, MATCH_C_JAL, MASK_C_JAL) -DECLARE_INSN(c_li, MATCH_C_LI, MASK_C_LI) -DECLARE_INSN(c_lui, MATCH_C_LUI, MASK_C_LUI) -DECLARE_INSN(c_srli, MATCH_C_SRLI, MASK_C_SRLI) -DECLARE_INSN(c_srai, MATCH_C_SRAI, MASK_C_SRAI) -DECLARE_INSN(c_andi, MATCH_C_ANDI, MASK_C_ANDI) -DECLARE_INSN(c_sub, MATCH_C_SUB, MASK_C_SUB) -DECLARE_INSN(c_xor, MATCH_C_XOR, MASK_C_XOR) -DECLARE_INSN(c_or, MATCH_C_OR, MASK_C_OR) -DECLARE_INSN(c_and, MATCH_C_AND, MASK_C_AND) -DECLARE_INSN(c_subw, MATCH_C_SUBW, MASK_C_SUBW) -DECLARE_INSN(c_addw, MATCH_C_ADDW, MASK_C_ADDW) -DECLARE_INSN(c_j, MATCH_C_J, MASK_C_J) -DECLARE_INSN(c_beqz, MATCH_C_BEQZ, MASK_C_BEQZ) -DECLARE_INSN(c_bnez, MATCH_C_BNEZ, MASK_C_BNEZ) -DECLARE_INSN(c_slli, MATCH_C_SLLI, MASK_C_SLLI) -DECLARE_INSN(c_fldsp, MATCH_C_FLDSP, MASK_C_FLDSP) -DECLARE_INSN(c_lwsp, MATCH_C_LWSP, MASK_C_LWSP) -DECLARE_INSN(c_flwsp, MATCH_C_FLWSP, MASK_C_FLWSP) -DECLARE_INSN(c_mv, MATCH_C_MV, MASK_C_MV) -DECLARE_INSN(c_add, MATCH_C_ADD, MASK_C_ADD) -DECLARE_INSN(c_fsdsp, MATCH_C_FSDSP, MASK_C_FSDSP) -DECLARE_INSN(c_swsp, MATCH_C_SWSP, MASK_C_SWSP) -DECLARE_INSN(c_fswsp, MATCH_C_FSWSP, MASK_C_FSWSP) -DECLARE_INSN(custom0, MATCH_CUSTOM0, MASK_CUSTOM0) -DECLARE_INSN(custom0_rs1, MATCH_CUSTOM0_RS1, MASK_CUSTOM0_RS1) -DECLARE_INSN(custom0_rs1_rs2, MATCH_CUSTOM0_RS1_RS2, MASK_CUSTOM0_RS1_RS2) -DECLARE_INSN(custom0_rd, MATCH_CUSTOM0_RD, MASK_CUSTOM0_RD) -DECLARE_INSN(custom0_rd_rs1, MATCH_CUSTOM0_RD_RS1, MASK_CUSTOM0_RD_RS1) -DECLARE_INSN(custom0_rd_rs1_rs2, MATCH_CUSTOM0_RD_RS1_RS2, MASK_CUSTOM0_RD_RS1_RS2) -DECLARE_INSN(custom1, MATCH_CUSTOM1, MASK_CUSTOM1) -DECLARE_INSN(custom1_rs1, MATCH_CUSTOM1_RS1, MASK_CUSTOM1_RS1) -DECLARE_INSN(custom1_rs1_rs2, MATCH_CUSTOM1_RS1_RS2, MASK_CUSTOM1_RS1_RS2) -DECLARE_INSN(custom1_rd, MATCH_CUSTOM1_RD, MASK_CUSTOM1_RD) -DECLARE_INSN(custom1_rd_rs1, MATCH_CUSTOM1_RD_RS1, MASK_CUSTOM1_RD_RS1) -DECLARE_INSN(custom1_rd_rs1_rs2, MATCH_CUSTOM1_RD_RS1_RS2, MASK_CUSTOM1_RD_RS1_RS2) -DECLARE_INSN(custom2, MATCH_CUSTOM2, MASK_CUSTOM2) -DECLARE_INSN(custom2_rs1, MATCH_CUSTOM2_RS1, MASK_CUSTOM2_RS1) -DECLARE_INSN(custom2_rs1_rs2, MATCH_CUSTOM2_RS1_RS2, MASK_CUSTOM2_RS1_RS2) -DECLARE_INSN(custom2_rd, MATCH_CUSTOM2_RD, MASK_CUSTOM2_RD) -DECLARE_INSN(custom2_rd_rs1, MATCH_CUSTOM2_RD_RS1, MASK_CUSTOM2_RD_RS1) -DECLARE_INSN(custom2_rd_rs1_rs2, MATCH_CUSTOM2_RD_RS1_RS2, MASK_CUSTOM2_RD_RS1_RS2) -DECLARE_INSN(custom3, MATCH_CUSTOM3, MASK_CUSTOM3) -DECLARE_INSN(custom3_rs1, MATCH_CUSTOM3_RS1, MASK_CUSTOM3_RS1) -DECLARE_INSN(custom3_rs1_rs2, MATCH_CUSTOM3_RS1_RS2, MASK_CUSTOM3_RS1_RS2) -DECLARE_INSN(custom3_rd, MATCH_CUSTOM3_RD, MASK_CUSTOM3_RD) -DECLARE_INSN(custom3_rd_rs1, MATCH_CUSTOM3_RD_RS1, MASK_CUSTOM3_RD_RS1) -DECLARE_INSN(custom3_rd_rs1_rs2, MATCH_CUSTOM3_RD_RS1_RS2, MASK_CUSTOM3_RD_RS1_RS2) -#endif -#ifdef DECLARE_CSR -DECLARE_CSR(fflags, CSR_FFLAGS) -DECLARE_CSR(frm, CSR_FRM) -DECLARE_CSR(fcsr, CSR_FCSR) -DECLARE_CSR(cycle, CSR_CYCLE) -DECLARE_CSR(time, CSR_TIME) -DECLARE_CSR(instret, CSR_INSTRET) -DECLARE_CSR(hpmcounter3, CSR_HPMCOUNTER3) -DECLARE_CSR(hpmcounter4, CSR_HPMCOUNTER4) -DECLARE_CSR(hpmcounter5, CSR_HPMCOUNTER5) -DECLARE_CSR(hpmcounter6, CSR_HPMCOUNTER6) -DECLARE_CSR(hpmcounter7, CSR_HPMCOUNTER7) -DECLARE_CSR(hpmcounter8, CSR_HPMCOUNTER8) -DECLARE_CSR(hpmcounter9, CSR_HPMCOUNTER9) -DECLARE_CSR(hpmcounter10, CSR_HPMCOUNTER10) -DECLARE_CSR(hpmcounter11, CSR_HPMCOUNTER11) -DECLARE_CSR(hpmcounter12, CSR_HPMCOUNTER12) -DECLARE_CSR(hpmcounter13, CSR_HPMCOUNTER13) -DECLARE_CSR(hpmcounter14, CSR_HPMCOUNTER14) -DECLARE_CSR(hpmcounter15, CSR_HPMCOUNTER15) -DECLARE_CSR(hpmcounter16, CSR_HPMCOUNTER16) -DECLARE_CSR(hpmcounter17, CSR_HPMCOUNTER17) -DECLARE_CSR(hpmcounter18, CSR_HPMCOUNTER18) -DECLARE_CSR(hpmcounter19, CSR_HPMCOUNTER19) -DECLARE_CSR(hpmcounter20, CSR_HPMCOUNTER20) -DECLARE_CSR(hpmcounter21, CSR_HPMCOUNTER21) -DECLARE_CSR(hpmcounter22, CSR_HPMCOUNTER22) -DECLARE_CSR(hpmcounter23, CSR_HPMCOUNTER23) -DECLARE_CSR(hpmcounter24, CSR_HPMCOUNTER24) -DECLARE_CSR(hpmcounter25, CSR_HPMCOUNTER25) -DECLARE_CSR(hpmcounter26, CSR_HPMCOUNTER26) -DECLARE_CSR(hpmcounter27, CSR_HPMCOUNTER27) -DECLARE_CSR(hpmcounter28, CSR_HPMCOUNTER28) -DECLARE_CSR(hpmcounter29, CSR_HPMCOUNTER29) -DECLARE_CSR(hpmcounter30, CSR_HPMCOUNTER30) -DECLARE_CSR(hpmcounter31, CSR_HPMCOUNTER31) -DECLARE_CSR(sstatus, CSR_SSTATUS) -DECLARE_CSR(sie, CSR_SIE) -DECLARE_CSR(stvec, CSR_STVEC) -DECLARE_CSR(sscratch, CSR_SSCRATCH) -DECLARE_CSR(sepc, CSR_SEPC) -DECLARE_CSR(scause, CSR_SCAUSE) -DECLARE_CSR(sbadaddr, CSR_SBADADDR) -DECLARE_CSR(sip, CSR_SIP) -DECLARE_CSR(sptbr, CSR_SPTBR) -DECLARE_CSR(mstatus, CSR_MSTATUS) -DECLARE_CSR(misa, CSR_MISA) -DECLARE_CSR(medeleg, CSR_MEDELEG) -DECLARE_CSR(mideleg, CSR_MIDELEG) -DECLARE_CSR(mie, CSR_MIE) -DECLARE_CSR(mtvec, CSR_MTVEC) -DECLARE_CSR(mscratch, CSR_MSCRATCH) -DECLARE_CSR(mepc, CSR_MEPC) -DECLARE_CSR(mcause, CSR_MCAUSE) -DECLARE_CSR(mbadaddr, CSR_MBADADDR) -DECLARE_CSR(mip, CSR_MIP) -DECLARE_CSR(tselect, CSR_TSELECT) -DECLARE_CSR(tdata1, CSR_TDATA1) -DECLARE_CSR(tdata2, CSR_TDATA2) -DECLARE_CSR(tdata3, CSR_TDATA3) -DECLARE_CSR(dcsr, CSR_DCSR) -DECLARE_CSR(dpc, CSR_DPC) -DECLARE_CSR(dscratch, CSR_DSCRATCH) -DECLARE_CSR(mcycle, CSR_MCYCLE) -DECLARE_CSR(minstret, CSR_MINSTRET) -DECLARE_CSR(mhpmcounter3, CSR_MHPMCOUNTER3) -DECLARE_CSR(mhpmcounter4, CSR_MHPMCOUNTER4) -DECLARE_CSR(mhpmcounter5, CSR_MHPMCOUNTER5) -DECLARE_CSR(mhpmcounter6, CSR_MHPMCOUNTER6) -DECLARE_CSR(mhpmcounter7, CSR_MHPMCOUNTER7) -DECLARE_CSR(mhpmcounter8, CSR_MHPMCOUNTER8) -DECLARE_CSR(mhpmcounter9, CSR_MHPMCOUNTER9) -DECLARE_CSR(mhpmcounter10, CSR_MHPMCOUNTER10) -DECLARE_CSR(mhpmcounter11, CSR_MHPMCOUNTER11) -DECLARE_CSR(mhpmcounter12, CSR_MHPMCOUNTER12) -DECLARE_CSR(mhpmcounter13, CSR_MHPMCOUNTER13) -DECLARE_CSR(mhpmcounter14, CSR_MHPMCOUNTER14) -DECLARE_CSR(mhpmcounter15, CSR_MHPMCOUNTER15) -DECLARE_CSR(mhpmcounter16, CSR_MHPMCOUNTER16) -DECLARE_CSR(mhpmcounter17, CSR_MHPMCOUNTER17) -DECLARE_CSR(mhpmcounter18, CSR_MHPMCOUNTER18) -DECLARE_CSR(mhpmcounter19, CSR_MHPMCOUNTER19) -DECLARE_CSR(mhpmcounter20, CSR_MHPMCOUNTER20) -DECLARE_CSR(mhpmcounter21, CSR_MHPMCOUNTER21) -DECLARE_CSR(mhpmcounter22, CSR_MHPMCOUNTER22) -DECLARE_CSR(mhpmcounter23, CSR_MHPMCOUNTER23) -DECLARE_CSR(mhpmcounter24, CSR_MHPMCOUNTER24) -DECLARE_CSR(mhpmcounter25, CSR_MHPMCOUNTER25) -DECLARE_CSR(mhpmcounter26, CSR_MHPMCOUNTER26) -DECLARE_CSR(mhpmcounter27, CSR_MHPMCOUNTER27) -DECLARE_CSR(mhpmcounter28, CSR_MHPMCOUNTER28) -DECLARE_CSR(mhpmcounter29, CSR_MHPMCOUNTER29) -DECLARE_CSR(mhpmcounter30, CSR_MHPMCOUNTER30) -DECLARE_CSR(mhpmcounter31, CSR_MHPMCOUNTER31) -DECLARE_CSR(mucounteren, CSR_MUCOUNTEREN) -DECLARE_CSR(mscounteren, CSR_MSCOUNTEREN) -DECLARE_CSR(mhpmevent3, CSR_MHPMEVENT3) -DECLARE_CSR(mhpmevent4, CSR_MHPMEVENT4) -DECLARE_CSR(mhpmevent5, CSR_MHPMEVENT5) -DECLARE_CSR(mhpmevent6, CSR_MHPMEVENT6) -DECLARE_CSR(mhpmevent7, CSR_MHPMEVENT7) -DECLARE_CSR(mhpmevent8, CSR_MHPMEVENT8) -DECLARE_CSR(mhpmevent9, CSR_MHPMEVENT9) -DECLARE_CSR(mhpmevent10, CSR_MHPMEVENT10) -DECLARE_CSR(mhpmevent11, CSR_MHPMEVENT11) -DECLARE_CSR(mhpmevent12, CSR_MHPMEVENT12) -DECLARE_CSR(mhpmevent13, CSR_MHPMEVENT13) -DECLARE_CSR(mhpmevent14, CSR_MHPMEVENT14) -DECLARE_CSR(mhpmevent15, CSR_MHPMEVENT15) -DECLARE_CSR(mhpmevent16, CSR_MHPMEVENT16) -DECLARE_CSR(mhpmevent17, CSR_MHPMEVENT17) -DECLARE_CSR(mhpmevent18, CSR_MHPMEVENT18) -DECLARE_CSR(mhpmevent19, CSR_MHPMEVENT19) -DECLARE_CSR(mhpmevent20, CSR_MHPMEVENT20) -DECLARE_CSR(mhpmevent21, CSR_MHPMEVENT21) -DECLARE_CSR(mhpmevent22, CSR_MHPMEVENT22) -DECLARE_CSR(mhpmevent23, CSR_MHPMEVENT23) -DECLARE_CSR(mhpmevent24, CSR_MHPMEVENT24) -DECLARE_CSR(mhpmevent25, CSR_MHPMEVENT25) -DECLARE_CSR(mhpmevent26, CSR_MHPMEVENT26) -DECLARE_CSR(mhpmevent27, CSR_MHPMEVENT27) -DECLARE_CSR(mhpmevent28, CSR_MHPMEVENT28) -DECLARE_CSR(mhpmevent29, CSR_MHPMEVENT29) -DECLARE_CSR(mhpmevent30, CSR_MHPMEVENT30) -DECLARE_CSR(mhpmevent31, CSR_MHPMEVENT31) -DECLARE_CSR(mvendorid, CSR_MVENDORID) -DECLARE_CSR(marchid, CSR_MARCHID) -DECLARE_CSR(mimpid, CSR_MIMPID) -DECLARE_CSR(mhartid, CSR_MHARTID) -DECLARE_CSR(cycleh, CSR_CYCLEH) -DECLARE_CSR(timeh, CSR_TIMEH) -DECLARE_CSR(instreth, CSR_INSTRETH) -DECLARE_CSR(hpmcounter3h, CSR_HPMCOUNTER3H) -DECLARE_CSR(hpmcounter4h, CSR_HPMCOUNTER4H) -DECLARE_CSR(hpmcounter5h, CSR_HPMCOUNTER5H) -DECLARE_CSR(hpmcounter6h, CSR_HPMCOUNTER6H) -DECLARE_CSR(hpmcounter7h, CSR_HPMCOUNTER7H) -DECLARE_CSR(hpmcounter8h, CSR_HPMCOUNTER8H) -DECLARE_CSR(hpmcounter9h, CSR_HPMCOUNTER9H) -DECLARE_CSR(hpmcounter10h, CSR_HPMCOUNTER10H) -DECLARE_CSR(hpmcounter11h, CSR_HPMCOUNTER11H) -DECLARE_CSR(hpmcounter12h, CSR_HPMCOUNTER12H) -DECLARE_CSR(hpmcounter13h, CSR_HPMCOUNTER13H) -DECLARE_CSR(hpmcounter14h, CSR_HPMCOUNTER14H) -DECLARE_CSR(hpmcounter15h, CSR_HPMCOUNTER15H) -DECLARE_CSR(hpmcounter16h, CSR_HPMCOUNTER16H) -DECLARE_CSR(hpmcounter17h, CSR_HPMCOUNTER17H) -DECLARE_CSR(hpmcounter18h, CSR_HPMCOUNTER18H) -DECLARE_CSR(hpmcounter19h, CSR_HPMCOUNTER19H) -DECLARE_CSR(hpmcounter20h, CSR_HPMCOUNTER20H) -DECLARE_CSR(hpmcounter21h, CSR_HPMCOUNTER21H) -DECLARE_CSR(hpmcounter22h, CSR_HPMCOUNTER22H) -DECLARE_CSR(hpmcounter23h, CSR_HPMCOUNTER23H) -DECLARE_CSR(hpmcounter24h, CSR_HPMCOUNTER24H) -DECLARE_CSR(hpmcounter25h, CSR_HPMCOUNTER25H) -DECLARE_CSR(hpmcounter26h, CSR_HPMCOUNTER26H) -DECLARE_CSR(hpmcounter27h, CSR_HPMCOUNTER27H) -DECLARE_CSR(hpmcounter28h, CSR_HPMCOUNTER28H) -DECLARE_CSR(hpmcounter29h, CSR_HPMCOUNTER29H) -DECLARE_CSR(hpmcounter30h, CSR_HPMCOUNTER30H) -DECLARE_CSR(hpmcounter31h, CSR_HPMCOUNTER31H) -DECLARE_CSR(mcycleh, CSR_MCYCLEH) -DECLARE_CSR(minstreth, CSR_MINSTRETH) -DECLARE_CSR(mhpmcounter3h, CSR_MHPMCOUNTER3H) -DECLARE_CSR(mhpmcounter4h, CSR_MHPMCOUNTER4H) -DECLARE_CSR(mhpmcounter5h, CSR_MHPMCOUNTER5H) -DECLARE_CSR(mhpmcounter6h, CSR_MHPMCOUNTER6H) -DECLARE_CSR(mhpmcounter7h, CSR_MHPMCOUNTER7H) -DECLARE_CSR(mhpmcounter8h, CSR_MHPMCOUNTER8H) -DECLARE_CSR(mhpmcounter9h, CSR_MHPMCOUNTER9H) -DECLARE_CSR(mhpmcounter10h, CSR_MHPMCOUNTER10H) -DECLARE_CSR(mhpmcounter11h, CSR_MHPMCOUNTER11H) -DECLARE_CSR(mhpmcounter12h, CSR_MHPMCOUNTER12H) -DECLARE_CSR(mhpmcounter13h, CSR_MHPMCOUNTER13H) -DECLARE_CSR(mhpmcounter14h, CSR_MHPMCOUNTER14H) -DECLARE_CSR(mhpmcounter15h, CSR_MHPMCOUNTER15H) -DECLARE_CSR(mhpmcounter16h, CSR_MHPMCOUNTER16H) -DECLARE_CSR(mhpmcounter17h, CSR_MHPMCOUNTER17H) -DECLARE_CSR(mhpmcounter18h, CSR_MHPMCOUNTER18H) -DECLARE_CSR(mhpmcounter19h, CSR_MHPMCOUNTER19H) -DECLARE_CSR(mhpmcounter20h, CSR_MHPMCOUNTER20H) -DECLARE_CSR(mhpmcounter21h, CSR_MHPMCOUNTER21H) -DECLARE_CSR(mhpmcounter22h, CSR_MHPMCOUNTER22H) -DECLARE_CSR(mhpmcounter23h, CSR_MHPMCOUNTER23H) -DECLARE_CSR(mhpmcounter24h, CSR_MHPMCOUNTER24H) -DECLARE_CSR(mhpmcounter25h, CSR_MHPMCOUNTER25H) -DECLARE_CSR(mhpmcounter26h, CSR_MHPMCOUNTER26H) -DECLARE_CSR(mhpmcounter27h, CSR_MHPMCOUNTER27H) -DECLARE_CSR(mhpmcounter28h, CSR_MHPMCOUNTER28H) -DECLARE_CSR(mhpmcounter29h, CSR_MHPMCOUNTER29H) -DECLARE_CSR(mhpmcounter30h, CSR_MHPMCOUNTER30H) -DECLARE_CSR(mhpmcounter31h, CSR_MHPMCOUNTER31H) -#endif -#ifdef DECLARE_CAUSE -DECLARE_CAUSE("misaligned fetch", CAUSE_MISALIGNED_FETCH) -DECLARE_CAUSE("fault fetch", CAUSE_FAULT_FETCH) -DECLARE_CAUSE("illegal instruction", CAUSE_ILLEGAL_INSTRUCTION) -DECLARE_CAUSE("breakpoint", CAUSE_BREAKPOINT) -DECLARE_CAUSE("misaligned load", CAUSE_MISALIGNED_LOAD) -DECLARE_CAUSE("fault load", CAUSE_FAULT_LOAD) -DECLARE_CAUSE("misaligned store", CAUSE_MISALIGNED_STORE) -DECLARE_CAUSE("fault store", CAUSE_FAULT_STORE) -DECLARE_CAUSE("user_ecall", CAUSE_USER_ECALL) -DECLARE_CAUSE("supervisor_ecall", CAUSE_SUPERVISOR_ECALL) -DECLARE_CAUSE("hypervisor_ecall", CAUSE_HYPERVISOR_ECALL) -DECLARE_CAUSE("machine_ecall", CAUSE_MACHINE_ECALL) -#endif diff --git a/raven/bsp/env/entry.S b/raven/bsp/env/entry.S deleted file mode 100644 index 261b2a4..0000000 --- a/raven/bsp/env/entry.S +++ /dev/null @@ -1,98 +0,0 @@ -// See LICENSE for license details - -#ifndef ENTRY_S -#define ENTRY_S - -#include "encoding.h" -#include "sifive/bits.h" - - .section .text.entry - .align 2 - .weak trap_entry - .global trap_entry -trap_entry: - addi sp, sp, -32*REGBYTES - - STORE x1, 1*REGBYTES(sp) - STORE x2, 2*REGBYTES(sp) - STORE x3, 3*REGBYTES(sp) - STORE x4, 4*REGBYTES(sp) - STORE x5, 5*REGBYTES(sp) - STORE x6, 6*REGBYTES(sp) - STORE x7, 7*REGBYTES(sp) - STORE x8, 8*REGBYTES(sp) - STORE x9, 9*REGBYTES(sp) - STORE x10, 10*REGBYTES(sp) - STORE x11, 11*REGBYTES(sp) - STORE x12, 12*REGBYTES(sp) - STORE x13, 13*REGBYTES(sp) - STORE x14, 14*REGBYTES(sp) - STORE x15, 15*REGBYTES(sp) - STORE x16, 16*REGBYTES(sp) - STORE x17, 17*REGBYTES(sp) - STORE x18, 18*REGBYTES(sp) - STORE x19, 19*REGBYTES(sp) - STORE x20, 20*REGBYTES(sp) - STORE x21, 21*REGBYTES(sp) - STORE x22, 22*REGBYTES(sp) - STORE x23, 23*REGBYTES(sp) - STORE x24, 24*REGBYTES(sp) - STORE x25, 25*REGBYTES(sp) - STORE x26, 26*REGBYTES(sp) - STORE x27, 27*REGBYTES(sp) - STORE x28, 28*REGBYTES(sp) - STORE x29, 29*REGBYTES(sp) - STORE x30, 30*REGBYTES(sp) - STORE x31, 31*REGBYTES(sp) - - csrr a0, mcause - csrr a1, mepc - mv a2, sp - call handle_trap - csrw mepc, a0 - - # Remain in M-mode after mret - li t0, MSTATUS_MPP - csrs mstatus, t0 - - LOAD x1, 1*REGBYTES(sp) - LOAD x2, 2*REGBYTES(sp) - LOAD x3, 3*REGBYTES(sp) - LOAD x4, 4*REGBYTES(sp) - LOAD x5, 5*REGBYTES(sp) - LOAD x6, 6*REGBYTES(sp) - LOAD x7, 7*REGBYTES(sp) - LOAD x8, 8*REGBYTES(sp) - LOAD x9, 9*REGBYTES(sp) - LOAD x10, 10*REGBYTES(sp) - LOAD x11, 11*REGBYTES(sp) - LOAD x12, 12*REGBYTES(sp) - LOAD x13, 13*REGBYTES(sp) - LOAD x14, 14*REGBYTES(sp) - LOAD x15, 15*REGBYTES(sp) - LOAD x16, 16*REGBYTES(sp) - LOAD x17, 17*REGBYTES(sp) - LOAD x18, 18*REGBYTES(sp) - LOAD x19, 19*REGBYTES(sp) - LOAD x20, 20*REGBYTES(sp) - LOAD x21, 21*REGBYTES(sp) - LOAD x22, 22*REGBYTES(sp) - LOAD x23, 23*REGBYTES(sp) - LOAD x24, 24*REGBYTES(sp) - LOAD x25, 25*REGBYTES(sp) - LOAD x26, 26*REGBYTES(sp) - LOAD x27, 27*REGBYTES(sp) - LOAD x28, 28*REGBYTES(sp) - LOAD x29, 29*REGBYTES(sp) - LOAD x30, 30*REGBYTES(sp) - LOAD x31, 31*REGBYTES(sp) - - addi sp, sp, 32*REGBYTES - mret - -.weak handle_trap -handle_trap: -1: - j 1b - -#endif diff --git a/raven/bsp/env/freedom-e300-arty/flash.lds b/raven/bsp/env/freedom-e300-arty/flash.lds deleted file mode 100644 index 6b37141..0000000 --- a/raven/bsp/env/freedom-e300-arty/flash.lds +++ /dev/null @@ -1,161 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - flash (rxai!w) : ORIGIN = 0x20400000, LENGTH = 512M - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K -} - -PHDRS -{ - flash PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 2K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >flash AT>flash :flash - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >flash AT>flash :flash - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >flash AT>flash :flash - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - .rodata : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - } >flash AT>flash :flash - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >flash AT>flash :flash - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >flash AT>flash :flash - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >flash AT>flash :flash - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >flash AT>flash :flash - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >flash AT>flash :flash - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >flash AT>flash :flash - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>flash :ram_init - - .data : - { - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>flash :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack ORIGIN(ram) + LENGTH(ram) - __stack_size : - { - PROVIDE( _heap_end = . ); - . = __stack_size; - PROVIDE( _sp = . ); - } >ram AT>ram :ram -} diff --git a/raven/bsp/env/freedom-e300-arty/init.c b/raven/bsp/env/freedom-e300-arty/init.c deleted file mode 100644 index a6f4b39..0000000 --- a/raven/bsp/env/freedom-e300-arty/init.c +++ /dev/null @@ -1,87 +0,0 @@ -//See LICENSE for license details. -#include -#include -#include - -#include "platform.h" -#include "encoding.h" - -extern int main(int argc, char** argv); -extern void trap_entry(); - -static unsigned long get_cpu_freq() -{ - return 65000000; -} - -unsigned long get_timer_freq() -{ - return get_cpu_freq(); -} - -uint64_t get_timer_value() -{ -#if __riscv_xlen == 32 - while (1) { - uint32_t hi = read_csr(mcycleh); - uint32_t lo = read_csr(mcycle); - if (hi == read_csr(mcycleh)) - return ((uint64_t)hi << 32) | lo; - } -#else - return read_csr(mcycle); -#endif -} - -static void uart_init(size_t baud_rate) -{ - GPIO_REG(GPIO_IOF_SEL) &= ~IOF0_UART0_MASK; - GPIO_REG(GPIO_IOF_EN) |= IOF0_UART0_MASK; - UART0_REG(UART_REG_DIV) = get_cpu_freq() / baud_rate - 1; - UART0_REG(UART_REG_TXCTRL) |= UART_TXEN; -} - - -#ifdef USE_PLIC -extern void handle_m_ext_interrupt(); -#endif - -#ifdef USE_M_TIME -extern void handle_m_time_interrupt(); -#endif - -uintptr_t handle_trap(uintptr_t mcause, uintptr_t epc) -{ - if (0){ -#ifdef USE_PLIC - // External Machine-Level interrupt from PLIC - } else if ((mcause & MCAUSE_INT) && ((mcause & MCAUSE_CAUSE) == IRQ_M_EXT)) { - handle_m_ext_interrupt(); -#endif -#ifdef USE_M_TIME - // External Machine-Level interrupt from PLIC - } else if ((mcause & MCAUSE_INT) && ((mcause & MCAUSE_CAUSE) == IRQ_M_TIMER)){ - handle_m_time_interrupt(); -#endif - } - else { - write(1, "Unhandled Trap:\n", 16); - _exit(1 + mcause); - } - return epc; -} - -void _init() -{ - #ifndef NO_INIT - uart_init(115200); - - printf("core freq at %d Hz\n", get_cpu_freq()); - - write_csr(mtvec, &trap_entry); - #endif -} - -void _fini() -{ -} diff --git a/raven/bsp/env/freedom-e300-arty/openocd.cfg b/raven/bsp/env/freedom-e300-arty/openocd.cfg deleted file mode 100644 index f4b28ed..0000000 --- a/raven/bsp/env/freedom-e300-arty/openocd.cfg +++ /dev/null @@ -1,30 +0,0 @@ -adapter_khz 10000 - -#source [find interface/ftdi/olimex-arm-usb-tiny-h.cfg] - -interface ftdi -ftdi_device_desc "Olimex OpenOCD JTAG ARM-USB-TINY-H" -ftdi_vid_pid 0x15ba 0x002a - -ftdi_layout_init 0x0808 0x0a1b -ftdi_layout_signal nSRST -oe 0x0200 -ftdi_layout_signal nTRST -data 0x0100 -oe 0x0100 -ftdi_layout_signal LED -data 0x0800 -# - -set _CHIPNAME riscv -jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x10e31913 - -set _TARGETNAME $_CHIPNAME.cpu -target create $_TARGETNAME riscv -chain-position $_TARGETNAME -$_TARGETNAME configure -work-area-phys 0x80000000 -work-area-size 10000 -work-area-backup 1 - -flash bank my_first_flash fespi 0x20000000 0 0 0 $_TARGETNAME -init -#reset -if {[ info exists pulse_srst]} { - ftdi_set_signal nSRST 0 - ftdi_set_signal nSRST z -} -halt -#flash protect 0 64 last off diff --git a/raven/bsp/env/freedom-e300-arty/platform.h b/raven/bsp/env/freedom-e300-arty/platform.h deleted file mode 100644 index 8ff7ae6..0000000 --- a/raven/bsp/env/freedom-e300-arty/platform.h +++ /dev/null @@ -1,124 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_PLATFORM_H -#define _SIFIVE_PLATFORM_H - -// Some things missing from the official encoding.h -#define MCAUSE_INT 0x80000000 -#define MCAUSE_CAUSE 0x7FFFFFFF - -#include "sifive/const.h" -#include "sifive/devices/aon.h" -#include "sifive/devices/clint.h" -#include "sifive/devices/gpio.h" -#include "sifive/devices/plic.h" -#include "sifive/devices/pwm.h" -#include "sifive/devices/spi.h" -#include "sifive/devices/uart.h" - -/**************************************************************************** - * Platform definitions - *****************************************************************************/ - -#define TRAPVEC_TABLE_CTRL_ADDR _AC(0x00001010,UL) -#define CLINT_CTRL_ADDR _AC(0x02000000,UL) -#define PLIC_CTRL_ADDR _AC(0x0C000000,UL) -#define AON_CTRL_ADDR _AC(0x10000000,UL) -#define GPIO_CTRL_ADDR _AC(0x10012000,UL) -#define UART0_CTRL_ADDR _AC(0x10013000,UL) -#define SPI0_CTRL_ADDR _AC(0x10014000,UL) -#define PWM0_CTRL_ADDR _AC(0x10015000,UL) -#define UART1_CTRL_ADDR _AC(0x10023000,UL) -#define SPI1_CTRL_ADDR _AC(0x10024000,UL) -#define PWM1_CTRL_ADDR _AC(0x10025000,UL) -#define SPI2_CTRL_ADDR _AC(0x10034000,UL) -#define PWM2_CTRL_ADDR _AC(0x10035000,UL) -#define SPI0_MMAP_ADDR _AC(0x20000000,UL) -#define MEM_CTRL_ADDR _AC(0x80000000,UL) - -// IOF Mappings -#define IOF0_SPI1_MASK _AC(0x000007FC,UL) -#define SPI11_NUM_SS (4) -#define IOF_SPI1_SS0 (2u) -#define IOF_SPI1_SS1 (8u) -#define IOF_SPI1_SS2 (9u) -#define IOF_SPI1_SS3 (10u) -#define IOF_SPI1_MOSI (3u) -#define IOF_SPI1_MISO (4u) -#define IOF_SPI1_SCK (5u) -#define IOF_SPI1_DQ0 (3u) -#define IOF_SPI1_DQ1 (4u) -#define IOF_SPI1_DQ2 (6u) -#define IOF_SPI1_DQ3 (7u) - -#define IOF0_SPI2_MASK _AC(0xFC000000,UL) -#define SPI2_NUM_SS (1) -#define IOF_SPI2_SS0 (26u) -#define IOF_SPI2_MOSI (27u) -#define IOF_SPI2_MISO (28u) -#define IOF_SPI2_SCK (29u) -#define IOF_SPI2_DQ0 (27u) -#define IOF_SPI2_DQ1 (28u) -#define IOF_SPI2_DQ2 (30u) -#define IOF_SPI2_DQ3 (31u) - -#define IOF0_UART0_MASK _AC(0x00030000, UL) -#define IOF_UART0_RX (16u) -#define IOF_UART0_TX (17u) - -#define IOF0_UART1_MASK _AC(0x03000000, UL) -#define IOF_UART1_RX (24u) -#define IOF_UART1_TX (25u) - -#define IOF1_PWM0_MASK _AC(0x0000000F, UL) -#define IOF1_PWM1_MASK _AC(0x00780000, UL) -#define IOF1_PWM2_MASK _AC(0x00003C00, UL) - -// Interrupt Numbers -#define INT_RESERVED 0 -#define INT_WDOGCMP 1 -#define INT_RTCCMP 2 -#define INT_UART0_BASE 3 -#define INT_UART1_BASE 4 -#define INT_SPI0_BASE 5 -#define INT_SPI1_BASE 6 -#define INT_SPI2_BASE 7 -#define INT_GPIO_BASE 8 -#define INT_PWM0_BASE 40 -#define INT_PWM1_BASE 44 -#define INT_PWM2_BASE 48 - -// Helper functions -#define _REG32(p, i) (*(volatile uint32_t *) ((p) + (i))) -#define _REG32P(p, i) ((volatile uint32_t *) ((p) + (i))) -#define AON_REG(offset) _REG32(AON_CTRL_ADDR, offset) -#define CLINT_REG(offset) _REG32(CLINT_CTRL_ADDR, offset) -#define GPIO_REG(offset) _REG32(GPIO_CTRL_ADDR, offset) -#define OTP_REG(offset) _REG32(OTP_CTRL_ADDR, offset) -#define PLIC_REG(offset) _REG32(PLIC_CTRL_ADDR, offset) -#define PWM0_REG(offset) _REG32(PWM0_CTRL_ADDR, offset) -#define PWM1_REG(offset) _REG32(PWM1_CTRL_ADDR, offset) -#define PWM2_REG(offset) _REG32(PWM2_CTRL_ADDR, offset) -#define SPI0_REG(offset) _REG32(SPI0_CTRL_ADDR, offset) -#define SPI1_REG(offset) _REG32(SPI1_CTRL_ADDR, offset) -#define SPI2_REG(offset) _REG32(SPI2_CTRL_ADDR, offset) -#define UART0_REG(offset) _REG32(UART0_CTRL_ADDR, offset) -#define UART1_REG(offset) _REG32(UART1_CTRL_ADDR, offset) - -// Misc - -#include - - -#define NUM_GPIO 32 - -#define PLIC_NUM_INTERRUPTS 52 -#define PLIC_NUM_PRIORITIES 7 - -#define HAS_BOARD_BUTTONS -#include "hifive1.h" - -unsigned long get_timer_freq(void); -uint64_t get_timer_value(void); - -#endif /* _SIFIVE_PLATFORM_H */ diff --git a/raven/bsp/env/freedom-e300-arty/settings.mk b/raven/bsp/env/freedom-e300-arty/settings.mk deleted file mode 100644 index 230fccc..0000000 --- a/raven/bsp/env/freedom-e300-arty/settings.mk +++ /dev/null @@ -1,3 +0,0 @@ -# Describes the CPU on this board to the rest of the SDK. -RISCV_ARCH := rv32imac -RISCV_ABI := ilp32 diff --git a/raven/bsp/env/freedom-e300-hifive1/dhrystone.lds b/raven/bsp/env/freedom-e300-hifive1/dhrystone.lds deleted file mode 100644 index cc9cd9b..0000000 --- a/raven/bsp/env/freedom-e300-hifive1/dhrystone.lds +++ /dev/null @@ -1,157 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - flash (rxai!w) : ORIGIN = 0x20400000, LENGTH = 512M - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K -} - -PHDRS -{ - flash PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 2K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >flash AT>flash :flash - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >flash AT>flash :flash - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >flash AT>flash :flash - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >flash AT>flash :flash - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >flash AT>flash :flash - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >flash AT>flash :flash - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >flash AT>flash :flash - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >flash AT>flash :flash - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >flash AT>flash :flash - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>flash :ram_init - - .data : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>flash :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack ORIGIN(ram) + LENGTH(ram) - __stack_size : - { - PROVIDE( _heap_end = . ); - . = __stack_size; - PROVIDE( _sp = . ); - } >ram AT>ram :ram -} diff --git a/raven/bsp/env/freedom-e300-hifive1/flash.lds b/raven/bsp/env/freedom-e300-hifive1/flash.lds deleted file mode 100644 index 6b37141..0000000 --- a/raven/bsp/env/freedom-e300-hifive1/flash.lds +++ /dev/null @@ -1,161 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - flash (rxai!w) : ORIGIN = 0x20400000, LENGTH = 512M - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K -} - -PHDRS -{ - flash PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 2K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >flash AT>flash :flash - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >flash AT>flash :flash - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >flash AT>flash :flash - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - .rodata : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - } >flash AT>flash :flash - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >flash AT>flash :flash - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >flash AT>flash :flash - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >flash AT>flash :flash - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >flash AT>flash :flash - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >flash AT>flash :flash - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >flash AT>flash :flash - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>flash :ram_init - - .data : - { - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>flash :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack ORIGIN(ram) + LENGTH(ram) - __stack_size : - { - PROVIDE( _heap_end = . ); - . = __stack_size; - PROVIDE( _sp = . ); - } >ram AT>ram :ram -} diff --git a/raven/bsp/env/freedom-e300-hifive1/init.c b/raven/bsp/env/freedom-e300-hifive1/init.c deleted file mode 100644 index 621a6e2..0000000 --- a/raven/bsp/env/freedom-e300-hifive1/init.c +++ /dev/null @@ -1,238 +0,0 @@ -#include -#include -#include - -#include "platform.h" -#include "encoding.h" - -extern int main(int argc, char** argv); -extern void trap_entry(); - -static unsigned long mtime_lo(void) -{ - return *(volatile unsigned long *)(CLINT_CTRL_ADDR + CLINT_MTIME); -} - -#ifdef __riscv32 - -static uint32_t mtime_hi(void) -{ - return *(volatile uint32_t *)(CLINT_CTRL_ADDR + CLINT_MTIME + 4); -} - -uint64_t get_timer_value() -{ - while (1) { - uint32_t hi = mtime_hi(); - uint32_t lo = mtime_lo(); - if (hi == mtime_hi()) - return ((uint64_t)hi << 32) | lo; - } -} - -#else /* __riscv32 */ - -uint64_t get_timer_value() -{ - return mtime_lo(); -} - -#endif - -unsigned long get_timer_freq() -{ - return 32768; -} - -static void use_hfrosc(int div, int trim) -{ - // Make sure the HFROSC is running at its default setting - PRCI_REG(PRCI_HFROSCCFG) = (ROSC_DIV(div) | ROSC_TRIM(trim) | ROSC_EN(1)); - while ((PRCI_REG(PRCI_HFROSCCFG) & ROSC_RDY(1)) == 0) ; - PRCI_REG(PRCI_PLLCFG) &= ~PLL_SEL(1); -} - -static void use_pll(int refsel, int bypass, int r, int f, int q) -{ - // Ensure that we aren't running off the PLL before we mess with it. - if (PRCI_REG(PRCI_PLLCFG) & PLL_SEL(1)) { - // Make sure the HFROSC is running at its default setting - use_hfrosc(4, 16); - } - - // Set PLL Source to be HFXOSC if available. - uint32_t config_value = 0; - - config_value |= PLL_REFSEL(refsel); - - if (bypass) { - // Bypass - config_value |= PLL_BYPASS(1); - - PRCI_REG(PRCI_PLLCFG) = config_value; - - // If we don't have an HFXTAL, this doesn't really matter. - // Set our Final output divide to divide-by-1: - PRCI_REG(PRCI_PLLDIV) = (PLL_FINAL_DIV_BY_1(1) | PLL_FINAL_DIV(0)); - } else { - // In case we are executing from QSPI, - // (which is quite likely) we need to - // set the QSPI clock divider appropriately - // before boosting the clock frequency. - - // Div = f_sck/2 - SPI0_REG(SPI_REG_SCKDIV) = 8; - - // Set DIV Settings for PLL - // Both HFROSC and HFXOSC are modeled as ideal - // 16MHz sources (assuming dividers are set properly for - // HFROSC). - // (Legal values of f_REF are 6-48MHz) - - // Set DIVR to divide-by-2 to get 8MHz frequency - // (legal values of f_R are 6-12 MHz) - - config_value |= PLL_BYPASS(1); - config_value |= PLL_R(r); - - // Set DIVF to get 512Mhz frequncy - // There is an implied multiply-by-2, 16Mhz. - // So need to write 32-1 - // (legal values of f_F are 384-768 MHz) - config_value |= PLL_F(f); - - // Set DIVQ to divide-by-2 to get 256 MHz frequency - // (legal values of f_Q are 50-400Mhz) - config_value |= PLL_Q(q); - - // Set our Final output divide to divide-by-1: - PRCI_REG(PRCI_PLLDIV) = (PLL_FINAL_DIV_BY_1(1) | PLL_FINAL_DIV(0)); - - PRCI_REG(PRCI_PLLCFG) = config_value; - - // Un-Bypass the PLL. - PRCI_REG(PRCI_PLLCFG) &= ~PLL_BYPASS(1); - - // Wait for PLL Lock - // Note that the Lock signal can be glitchy. - // Need to wait 100 us - // RTC is running at 32kHz. - // So wait 4 ticks of RTC. - uint32_t now = mtime_lo(); - while (mtime_lo() - now < 4) ; - - // Now it is safe to check for PLL Lock - while ((PRCI_REG(PRCI_PLLCFG) & PLL_LOCK(1)) == 0) ; - } - - // Switch over to PLL Clock source - PRCI_REG(PRCI_PLLCFG) |= PLL_SEL(1); -} - -static void use_default_clocks() -{ - // Turn off the LFROSC - AON_REG(AON_LFROSC) &= ~ROSC_EN(1); - - // Use HFROSC - use_hfrosc(4, 16); -} - -static unsigned long __attribute__((noinline)) measure_cpu_freq(size_t n) -{ - unsigned long start_mtime, delta_mtime; - unsigned long mtime_freq = get_timer_freq(); - - // Don't start measuruing until we see an mtime tick - unsigned long tmp = mtime_lo(); - do { - start_mtime = mtime_lo(); - } while (start_mtime == tmp); - - unsigned long start_mcycle = read_csr(mcycle); - - do { - delta_mtime = mtime_lo() - start_mtime; - } while (delta_mtime < n); - - unsigned long delta_mcycle = read_csr(mcycle) - start_mcycle; - - return (delta_mcycle / delta_mtime) * mtime_freq - + ((delta_mcycle % delta_mtime) * mtime_freq) / delta_mtime; -} - -unsigned long get_cpu_freq() -{ - static uint32_t cpu_freq; - - if (!cpu_freq) { - // warm up I$ - measure_cpu_freq(1); - // measure for real - cpu_freq = measure_cpu_freq(10); - } - - return cpu_freq; -} - -static void uart_init(size_t baud_rate) -{ - GPIO_REG(GPIO_IOF_SEL) &= ~IOF0_UART0_MASK; - GPIO_REG(GPIO_IOF_EN) |= IOF0_UART0_MASK; - UART0_REG(UART_REG_DIV) = get_cpu_freq() / baud_rate - 1; - UART0_REG(UART_REG_TXCTRL) |= UART_TXEN; -} - - - -#ifdef USE_PLIC -extern void handle_m_ext_interrupt(); -#endif - -#ifdef USE_M_TIME -extern void handle_m_time_interrupt(); -#endif - -uintptr_t handle_trap(uintptr_t mcause, uintptr_t epc) -{ - if (0){ -#ifdef USE_PLIC - // External Machine-Level interrupt from PLIC - } else if ((mcause & MCAUSE_INT) && ((mcause & MCAUSE_CAUSE) == IRQ_M_EXT)) { - handle_m_ext_interrupt(); -#endif -#ifdef USE_M_TIME - // External Machine-Level interrupt from PLIC - } else if ((mcause & MCAUSE_INT) && ((mcause & MCAUSE_CAUSE) == IRQ_M_TIMER)){ - handle_m_time_interrupt(); -#endif - } - else { - write(1, "trap\n", 5); - _exit(1 + mcause); - } - return epc; -} - -void _init() -{ - - #ifndef NO_INIT - use_default_clocks(); - use_pll(0, 0, 1, 31, 1); - uart_init(115200); - - printf("core freq at %d Hz\n", get_cpu_freq()); - - write_csr(mtvec, &trap_entry); - if (read_csr(misa) & (1 << ('F' - 'A'))) { // if F extension is present - write_csr(mstatus, MSTATUS_FS); // allow FPU instructions without trapping - write_csr(fcsr, 0); // initialize rounding mode, undefined at reset - } - #endif - -} - -void _fini() -{ -} diff --git a/raven/bsp/env/freedom-e300-hifive1/openocd.cfg b/raven/bsp/env/freedom-e300-hifive1/openocd.cfg deleted file mode 100644 index b531e9c..0000000 --- a/raven/bsp/env/freedom-e300-hifive1/openocd.cfg +++ /dev/null @@ -1,34 +0,0 @@ -adapter_khz 10000 - -interface ftdi -ftdi_device_desc "Dual RS232-HS" -ftdi_vid_pid 0x0403 0x6010 - -ftdi_layout_init 0x0008 0x001b -ftdi_layout_signal nSRST -oe 0x0020 -data 0x0020 - -#Reset Stretcher logic on FE310 is ~1 second long -#This doesn't apply if you use -# ftdi_set_signal, but still good to document -#adapter_nsrst_delay 1500 - -set _CHIPNAME riscv -jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x10e31913 - -set _TARGETNAME $_CHIPNAME.cpu -target create $_TARGETNAME riscv -chain-position $_TARGETNAME -$_TARGETNAME configure -work-area-phys 0x80000000 -work-area-size 10000 -work-area-backup 1 - -flash bank onboard_spi_flash fespi 0x20000000 0 0 0 $_TARGETNAME -init -#reset -- This type of reset is not implemented yet -if {[ info exists pulse_srst]} { - ftdi_set_signal nSRST 0 - ftdi_set_signal nSRST z - #Wait for the reset stretcher - #It will work without this, but - #will incur lots of delays for later commands. - sleep 1500 -} -halt -#flash protect 0 64 last off diff --git a/raven/bsp/env/freedom-e300-hifive1/platform.h b/raven/bsp/env/freedom-e300-hifive1/platform.h deleted file mode 100644 index 806fcfc..0000000 --- a/raven/bsp/env/freedom-e300-hifive1/platform.h +++ /dev/null @@ -1,133 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_PLATFORM_H -#define _SIFIVE_PLATFORM_H - -// Some things missing from the official encoding.h -#define MCAUSE_INT 0x80000000 -#define MCAUSE_CAUSE 0x7FFFFFFF - -#include "sifive/const.h" -#include "sifive/devices/aon.h" -#include "sifive/devices/clint.h" -#include "sifive/devices/gpio.h" -#include "sifive/devices/otp.h" -#include "sifive/devices/plic.h" -#include "sifive/devices/prci.h" -#include "sifive/devices/pwm.h" -#include "sifive/devices/spi.h" -#include "sifive/devices/uart.h" - -/**************************************************************************** - * Platform definitions - *****************************************************************************/ - -// Memory map -#define MASKROM_MEM_ADDR _AC(0x00001000,UL) -#define TRAPVEC_TABLE_CTRL_ADDR _AC(0x00001010,UL) -#define OTP_MEM_ADDR _AC(0x00020000,UL) -#define CLINT_CTRL_ADDR _AC(0x02000000,UL) -#define PLIC_CTRL_ADDR _AC(0x0C000000,UL) -#define AON_CTRL_ADDR _AC(0x10000000,UL) -#define PRCI_CTRL_ADDR _AC(0x10008000,UL) -#define OTP_CTRL_ADDR _AC(0x10010000,UL) -#define GPIO_CTRL_ADDR _AC(0x10012000,UL) -#define UART0_CTRL_ADDR _AC(0x10013000,UL) -#define SPI0_CTRL_ADDR _AC(0x10014000,UL) -#define PWM0_CTRL_ADDR _AC(0x10015000,UL) -#define UART1_CTRL_ADDR _AC(0x10023000,UL) -#define SPI1_CTRL_ADDR _AC(0x10024000,UL) -#define PWM1_CTRL_ADDR _AC(0x10025000,UL) -#define SPI2_CTRL_ADDR _AC(0x10034000,UL) -#define PWM2_CTRL_ADDR _AC(0x10035000,UL) -#define SPI0_MEM_ADDR _AC(0x20000000,UL) -#define MEM_CTRL_ADDR _AC(0x80000000,UL) - -// IOF masks -#define IOF0_SPI1_MASK _AC(0x000007FC,UL) -#define SPI11_NUM_SS (4) -#define IOF_SPI1_SS0 (2u) -#define IOF_SPI1_SS1 (8u) -#define IOF_SPI1_SS2 (9u) -#define IOF_SPI1_SS3 (10u) -#define IOF_SPI1_MOSI (3u) -#define IOF_SPI1_MISO (4u) -#define IOF_SPI1_SCK (5u) -#define IOF_SPI1_DQ0 (3u) -#define IOF_SPI1_DQ1 (4u) -#define IOF_SPI1_DQ2 (6u) -#define IOF_SPI1_DQ3 (7u) - -#define IOF0_SPI2_MASK _AC(0xFC000000,UL) -#define SPI2_NUM_SS (1) -#define IOF_SPI2_SS0 (26u) -#define IOF_SPI2_MOSI (27u) -#define IOF_SPI2_MISO (28u) -#define IOF_SPI2_SCK (29u) -#define IOF_SPI2_DQ0 (27u) -#define IOF_SPI2_DQ1 (28u) -#define IOF_SPI2_DQ2 (30u) -#define IOF_SPI2_DQ3 (31u) - -//#define IOF0_I2C_MASK _AC(0x00003000,UL) - -#define IOF0_UART0_MASK _AC(0x00030000, UL) -#define IOF_UART0_RX (16u) -#define IOF_UART0_TX (17u) - -#define IOF0_UART1_MASK _AC(0x03000000, UL) -#define IOF_UART1_RX (24u) -#define IOF_UART1_TX (25u) - -#define IOF1_PWM0_MASK _AC(0x0000000F, UL) -#define IOF1_PWM1_MASK _AC(0x00780000, UL) -#define IOF1_PWM2_MASK _AC(0x00003C00, UL) - -// Interrupt numbers -#define INT_RESERVED 0 -#define INT_WDOGCMP 1 -#define INT_RTCCMP 2 -#define INT_UART0_BASE 3 -#define INT_UART1_BASE 4 -#define INT_SPI0_BASE 5 -#define INT_SPI1_BASE 6 -#define INT_SPI2_BASE 7 -#define INT_GPIO_BASE 8 -#define INT_PWM0_BASE 40 -#define INT_PWM1_BASE 44 -#define INT_PWM2_BASE 48 - -// Helper functions -#define _REG32(p, i) (*(volatile uint32_t *) ((p) + (i))) -#define _REG32P(p, i) ((volatile uint32_t *) ((p) + (i))) -#define AON_REG(offset) _REG32(AON_CTRL_ADDR, offset) -#define CLINT_REG(offset) _REG32(CLINT_CTRL_ADDR, offset) -#define GPIO_REG(offset) _REG32(GPIO_CTRL_ADDR, offset) -#define OTP_REG(offset) _REG32(OTP_CTRL_ADDR, offset) -#define PLIC_REG(offset) _REG32(PLIC_CTRL_ADDR, offset) -#define PRCI_REG(offset) _REG32(PRCI_CTRL_ADDR, offset) -#define PWM0_REG(offset) _REG32(PWM0_CTRL_ADDR, offset) -#define PWM1_REG(offset) _REG32(PWM1_CTRL_ADDR, offset) -#define PWM2_REG(offset) _REG32(PWM2_CTRL_ADDR, offset) -#define SPI0_REG(offset) _REG32(SPI0_CTRL_ADDR, offset) -#define SPI1_REG(offset) _REG32(SPI1_CTRL_ADDR, offset) -#define SPI2_REG(offset) _REG32(SPI2_CTRL_ADDR, offset) -#define UART0_REG(offset) _REG32(UART0_CTRL_ADDR, offset) -#define UART1_REG(offset) _REG32(UART1_CTRL_ADDR, offset) - -// Misc - -#include - -#define NUM_GPIO 32 - -#define PLIC_NUM_INTERRUPTS 52 -#define PLIC_NUM_PRIORITIES 7 - -#include "hifive1.h" - -unsigned long get_cpu_freq(void); -unsigned long get_timer_freq(void); -uint64_t get_timer_value(void); - -#endif /* _SIFIVE_PLATFORM_H */ diff --git a/raven/bsp/env/freedom-e300-hifive1/settings.mk b/raven/bsp/env/freedom-e300-hifive1/settings.mk deleted file mode 100644 index 230fccc..0000000 --- a/raven/bsp/env/freedom-e300-hifive1/settings.mk +++ /dev/null @@ -1,3 +0,0 @@ -# Describes the CPU on this board to the rest of the SDK. -RISCV_ARCH := rv32imac -RISCV_ABI := ilp32 diff --git a/raven/bsp/env/hifive1.h b/raven/bsp/env/hifive1.h deleted file mode 100644 index 0db2f0f..0000000 --- a/raven/bsp/env/hifive1.h +++ /dev/null @@ -1,81 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_HIFIVE1_H -#define _SIFIVE_HIFIVE1_H - -#include - -/**************************************************************************** - * GPIO Connections - *****************************************************************************/ - -// These are the GPIO bit offsets for the RGB LED on HiFive1 Board. -// These are also mapped to RGB LEDs on the Freedom E300 Arty -// FPGA -// Dev Kit. - -#define RED_LED_OFFSET 22 -#define GREEN_LED_OFFSET 19 -#define BLUE_LED_OFFSET 21 - -// These are the GPIO bit offsets for the differen digital pins -// on the headers for both the HiFive1 Board and the Freedom E300 Arty FPGA Dev Kit. -#define PIN_0_OFFSET 16 -#define PIN_1_OFFSET 17 -#define PIN_2_OFFSET 18 -#define PIN_3_OFFSET 19 -#define PIN_4_OFFSET 20 -#define PIN_5_OFFSET 21 -#define PIN_6_OFFSET 22 -#define PIN_7_OFFSET 23 -#define PIN_8_OFFSET 0 -#define PIN_9_OFFSET 1 -#define PIN_10_OFFSET 2 -#define PIN_11_OFFSET 3 -#define PIN_12_OFFSET 4 -#define PIN_13_OFFSET 5 -//#define PIN_14_OFFSET 8 //This pin is not connected on either board. -#define PIN_15_OFFSET 9 -#define PIN_16_OFFSET 10 -#define PIN_17_OFFSET 11 -#define PIN_18_OFFSET 12 -#define PIN_19_OFFSET 13 - -// These are *PIN* numbers, not -// GPIO Offset Numbers. -#define PIN_SPI1_SCK (13u) -#define PIN_SPI1_MISO (12u) -#define PIN_SPI1_MOSI (11u) -#define PIN_SPI1_SS0 (10u) -#define PIN_SPI1_SS1 (14u) -#define PIN_SPI1_SS2 (15u) -#define PIN_SPI1_SS3 (16u) - -#define SS_PIN_TO_CS_ID(x) \ - ((x==PIN_SPI1_SS0 ? 0 : \ - (x==PIN_SPI1_SS1 ? 1 : \ - (x==PIN_SPI1_SS2 ? 2 : \ - (x==PIN_SPI1_SS3 ? 3 : \ - -1))))) - - -// These buttons are present only on the Freedom E300 Arty Dev Kit. -#ifdef HAS_BOARD_BUTTONS -#define BUTTON_0_OFFSET 15 -#define BUTTON_1_OFFSET 30 -#define BUTTON_2_OFFSET 31 - -#define INT_DEVICE_BUTTON_0 (INT_GPIO_BASE + BUTTON_0_OFFSET) -#define INT_DEVICE_BUTTON_1 (INT_GPIO_BASE + BUTTON_1_OFFSET) -#define INT_DEVICE_BUTTON_2 (INT_GPIO_BASE + BUTTON_2_OFFSET) - -#endif - -#define HAS_HFXOSC 1 -#define HAS_LFROSC_BYPASS 1 - -#define RTC_FREQ 32768 - -void write_hex(int fd, unsigned long int hex); - -#endif /* _SIFIVE_HIFIVE1_H */ diff --git a/raven/bsp/env/start.S b/raven/bsp/env/start.S deleted file mode 100644 index 4e9f665..0000000 --- a/raven/bsp/env/start.S +++ /dev/null @@ -1,111 +0,0 @@ -// See LICENSE for license details. -#include - -/* This is defined in sifive/platform.h, but that can't be included from - * assembly. */ -#define CLINT_CTRL_ADDR 0x02000000 - - .section .init - .globl _start - .type _start,@function - -_start: - .cfi_startproc - .cfi_undefined ra -.option push -.option norelax - la gp, __global_pointer$ -.option pop - la sp, _sp - -#if defined(ENABLE_SMP) - smp_pause(t0, t1) -#endif - - /* Load data section */ - la a0, _data_lma - la a1, _data - la a2, _edata - bgeu a1, a2, 2f -1: - lw t0, (a0) - sw t0, (a1) - addi a0, a0, 4 - addi a1, a1, 4 - bltu a1, a2, 1b -2: - - /* Clear bss section */ - la a0, __bss_start - la a1, _end - bgeu a0, a1, 2f -1: - sw zero, (a0) - addi a0, a0, 4 - bltu a0, a1, 1b -2: - - /* Call global constructors */ - la a0, __libc_fini_array - call atexit - call __libc_init_array - -#ifndef __riscv_float_abi_soft - /* Enable FPU */ - li t0, MSTATUS_FS - csrs mstatus, t0 - csrr t1, mstatus - and t1, t1, t0 - beqz t1, 1f - fssr x0 -1: -#endif - -#if defined(ENABLE_SMP) - smp_resume(t0, t1) - - csrr a0, mhartid - bnez a0, 2f -#endif - - auipc ra, 0 - addi sp, sp, -16 -#if __riscv_xlen == 32 - sw ra, 8(sp) -#else - sd ra, 8(sp) -#endif - - /* argc = argv = 0 */ - li a0, 0 - li a1, 0 - call main - tail exit -1: - j 1b - -#if defined(ENABLE_SMP) -2: - la t0, trap_entry - csrw mtvec, t0 - - csrr a0, mhartid - la t1, _sp - slli t0, a0, 10 - sub sp, t1, t0 - - auipc ra, 0 - addi sp, sp, -16 -#if __riscv_xlen == 32 - sw ra, 8(sp) -#else - sd ra, 8(sp) -#endif - - call secondary_main - tail exit - -1: - j 1b -#endif - .cfi_endproc diff --git a/raven/bsp/env/ventry.S b/raven/bsp/env/ventry.S deleted file mode 100644 index 5c82c48..0000000 --- a/raven/bsp/env/ventry.S +++ /dev/null @@ -1,288 +0,0 @@ -// See LICENSE for license details - -#ifndef VENTRY_S -#define VENTRY_S - -#include "encoding.h" -#include "sifive/bits.h" - -#only save caller registers -.macro TRAP_ENTRY - addi sp, sp, -16*REGBYTES - - STORE x1, 0*REGBYTES(sp) - STORE x5, 1*REGBYTES(sp) - STORE x6, 2*REGBYTES(sp) - STORE x7, 3*REGBYTES(sp) - STORE x10, 4*REGBYTES(sp) - STORE x11, 5*REGBYTES(sp) - STORE x12, 6*REGBYTES(sp) - STORE x13, 7*REGBYTES(sp) - STORE x14, 8*REGBYTES(sp) - STORE x15, 9*REGBYTES(sp) - STORE x16, 10*REGBYTES(sp) - STORE x17, 11*REGBYTES(sp) - STORE x28, 12*REGBYTES(sp) - STORE x29, 13*REGBYTES(sp) - STORE x30, 14*REGBYTES(sp) - STORE x31, 15*REGBYTES(sp) -.endm - -#restore caller registers -.macro TRAP_EXIT -# Remain in M-mode after mret - li t0, MSTATUS_MPP - csrs mstatus, t0 - - LOAD x1, 0*REGBYTES(sp) - LOAD x5, 1*REGBYTES(sp) - LOAD x6, 2*REGBYTES(sp) - LOAD x7, 3*REGBYTES(sp) - LOAD x10, 4*REGBYTES(sp) - LOAD x11, 5*REGBYTES(sp) - LOAD x12, 6*REGBYTES(sp) - LOAD x13, 7*REGBYTES(sp) - LOAD x14, 8*REGBYTES(sp) - LOAD x15, 9*REGBYTES(sp) - LOAD x16, 10*REGBYTES(sp) - LOAD x17, 11*REGBYTES(sp) - LOAD x28, 12*REGBYTES(sp) - LOAD x29, 13*REGBYTES(sp) - LOAD x30, 14*REGBYTES(sp) - LOAD x31, 15*REGBYTES(sp) - - addi sp, sp, 16*REGBYTES - mret -.endm - - - -#Vector table for E31/E51 - - .section .text.entry - .align 8 - .global vtrap_entry -vtrap_entry: - j sync_trap - .align 2 - j reserved - .align 2 - j reserved - .align 2 - j vmsi_Handler - .align 2 - j reserved - .align 2 - j reserved - .align 2 - j reserved - .align 2 - j vmti_Handler - .align 2 - j reserved - .align 2 - j reserved - .align 2 - j reserved - .align 2 - j vmei_Handler - .align 2 - j reserved - .align 2 - j reserved - .align 2 - j reserved - .align 2 - j reserved - .align 2 - j vlip_Handler0 - .align 2 - j vlip_Handler1 - .align 2 - j vlip_Handler2 - .align 2 - j vlip_Handler3 - .align 2 - j vlip_Handler4 - .align 2 - j vlip_Handler5 - .align 2 - j vlip_Handler6 - .align 2 - j vlip_Handler7 - .align 2 - j vlip_Handler8 - .align 2 - j vlip_Handler9 - .align 2 - j vlip_Handler10 - .align 2 - j vlip_Handler11 - .align 2 - j vlip_Handler12 - .align 2 - j vlip_Handler13 - .align 2 - j vlip_Handler14 - .align 2 - j vlip_Handler15 - -#synchronous trap -sync_trap: - TRAP_ENTRY - jal handle_sync_trap - TRAP_EXIT - -#Machine Software Interrupt -vmsi_Handler: - TRAP_ENTRY - jal reserved - TRAP_EXIT - -#Machine Timer Interrupt -vmti_Handler: - TRAP_ENTRY - jal handle_m_time_interrupt - TRAP_EXIT - -#Machine External Interrupt -vmei_Handler: - TRAP_ENTRY - jal handle_m_external_interrupt - TRAP_EXIT - -#LIP0 -vlip_Handler0: - TRAP_ENTRY - jal handle_local_interrupt0 - TRAP_EXIT - -#LIP1 -vlip_Handler1: - TRAP_ENTRY - jal handle_local_interrupt1 - TRAP_EXIT - -#LIP2 -vlip_Handler2: - TRAP_ENTRY - jal handle_local_interrupt2 - TRAP_EXIT - -#LIP3 -vlip_Handler3: - TRAP_ENTRY - jal handle_local_interrupt3 - TRAP_EXIT - -#LIP4 -vlip_Handler4: - TRAP_ENTRY - jal handle_local_interrupt4 - TRAP_EXIT - -#LIP5 -vlip_Handler5: - TRAP_ENTRY - jal handle_local_interrupt5 - TRAP_EXIT - -#LIP6 -vlip_Handler6: - TRAP_ENTRY - jal handle_local_interrupt6 - TRAP_EXIT - -#LIP7 -vlip_Handler7: - TRAP_ENTRY - jal handle_local_interrupt7 - TRAP_EXIT - -#LIP8 -vlip_Handler8: - TRAP_ENTRY - jal handle_local_interrupt8 - TRAP_EXIT - -#LIP9 -vlip_Handler9: - TRAP_ENTRY - jal handle_local_interrupt9 - TRAP_EXIT - -#LIP10 -vlip_Handler10: - TRAP_ENTRY - jal handle_local_interrupt10 - TRAP_EXIT - -#LIP11 -vlip_Handler11: - TRAP_ENTRY - jal handle_local_interrupt11 - TRAP_EXIT - -#LIP12 -vlip_Handler12: - TRAP_ENTRY - jal handle_local_interrupt12 - TRAP_EXIT - -#LIP13 -vlip_Handler13: - TRAP_ENTRY - jal handle_local_interrupt13 - TRAP_EXIT - -#LIP14 -vlip_Handler14: - TRAP_ENTRY - jal handle_local_interrupt14 - TRAP_EXIT - -#LIP15 -vlip_Handler15: - TRAP_ENTRY - jal handle_local_interrupt15 - TRAP_EXIT - -#unimplemented ISRs trap here -.weak reserved -reserved: -.weak handle_local_interrupt0 -handle_local_interrupt0: -.weak handle_local_interrupt1 -handle_local_interrupt1: -.weak handle_local_interrupt2 -handle_local_interrupt2: -.weak handle_local_interrupt3 -handle_local_interrupt3: -.weak handle_local_interrupt4 -handle_local_interrupt4: -.weak handle_local_interrupt5 -handle_local_interrupt5: -.weak handle_local_interrupt6 -handle_local_interrupt6: -.weak handle_local_interrupt7 -handle_local_interrupt7: -.weak handle_local_interrupt8 -handle_local_interrupt8: -.weak handle_local_interrupt9 -handle_local_interrupt9: -.weak handle_local_interrupt10 -handle_local_interrupt10: -.weak handle_local_interrupt11 -handle_local_interrupt11: -.weak handle_local_interrupt12 -handle_local_interrupt12: -.weak handle_local_interrupt13 -handle_local_interrupt13: -.weak handle_local_interrupt14 -handle_local_interrupt14: -.weak handle_local_interrupt15 -handle_local_interrupt15: -1: - j 1b - -#endif diff --git a/raven/bsp/include/sifive/bits.h b/raven/bsp/include/sifive/bits.h deleted file mode 100644 index bfe656f..0000000 --- a/raven/bsp/include/sifive/bits.h +++ /dev/null @@ -1,36 +0,0 @@ -// See LICENSE for license details. -#ifndef _RISCV_BITS_H -#define _RISCV_BITS_H - -#define likely(x) __builtin_expect((x), 1) -#define unlikely(x) __builtin_expect((x), 0) - -#define ROUNDUP(a, b) ((((a)-1)/(b)+1)*(b)) -#define ROUNDDOWN(a, b) ((a)/(b)*(b)) - -#define MAX(a, b) ((a) > (b) ? (a) : (b)) -#define MIN(a, b) ((a) < (b) ? (a) : (b)) -#define CLAMP(a, lo, hi) MIN(MAX(a, lo), hi) - -#define EXTRACT_FIELD(val, which) (((val) & (which)) / ((which) & ~((which)-1))) -#define INSERT_FIELD(val, which, fieldval) (((val) & ~(which)) | ((fieldval) * ((which) & ~((which)-1)))) - -#define STR(x) XSTR(x) -#define XSTR(x) #x - -#if __riscv_xlen == 64 -# define SLL32 sllw -# define STORE sd -# define LOAD ld -# define LWU lwu -# define LOG_REGBYTES 3 -#else -# define SLL32 sll -# define STORE sw -# define LOAD lw -# define LWU lw -# define LOG_REGBYTES 2 -#endif -#define REGBYTES (1 << LOG_REGBYTES) - -#endif diff --git a/raven/bsp/include/sifive/const.h b/raven/bsp/include/sifive/const.h deleted file mode 100644 index 8dcffbb..0000000 --- a/raven/bsp/include/sifive/const.h +++ /dev/null @@ -1,18 +0,0 @@ -// See LICENSE for license details. -/* Derived from */ - -#ifndef _SIFIVE_CONST_H -#define _SIFIVE_CONST_H - -#ifdef __ASSEMBLER__ -#define _AC(X,Y) X -#define _AT(T,X) X -#else -#define _AC(X,Y) (X##Y) -#define _AT(T,X) ((T)(X)) -#endif /* !__ASSEMBLER__*/ - -#define _BITUL(x) (_AC(1,UL) << (x)) -#define _BITULL(x) (_AC(1,ULL) << (x)) - -#endif /* _SIFIVE_CONST_H */ diff --git a/raven/bsp/include/sifive/devices/aon.h b/raven/bsp/include/sifive/devices/aon.h deleted file mode 100644 index 63f1db3..0000000 --- a/raven/bsp/include/sifive/devices/aon.h +++ /dev/null @@ -1,88 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_AON_H -#define _SIFIVE_AON_H - -/* Register offsets */ - -#define AON_WDOGCFG 0x000 -#define AON_WDOGCOUNT 0x008 -#define AON_WDOGS 0x010 -#define AON_WDOGFEED 0x018 -#define AON_WDOGKEY 0x01C -#define AON_WDOGCMP 0x020 - -#define AON_RTCCFG 0x040 -#define AON_RTCLO 0x048 -#define AON_RTCHI 0x04C -#define AON_RTCS 0x050 -#define AON_RTCCMP 0x060 - -#define AON_BACKUP0 0x080 -#define AON_BACKUP1 0x084 -#define AON_BACKUP2 0x088 -#define AON_BACKUP3 0x08C -#define AON_BACKUP4 0x090 -#define AON_BACKUP5 0x094 -#define AON_BACKUP6 0x098 -#define AON_BACKUP7 0x09C -#define AON_BACKUP8 0x0A0 -#define AON_BACKUP9 0x0A4 -#define AON_BACKUP10 0x0A8 -#define AON_BACKUP11 0x0AC -#define AON_BACKUP12 0x0B0 -#define AON_BACKUP13 0x0B4 -#define AON_BACKUP14 0x0B8 -#define AON_BACKUP15 0x0BC - -#define AON_PMUWAKEUPI0 0x100 -#define AON_PMUWAKEUPI1 0x104 -#define AON_PMUWAKEUPI2 0x108 -#define AON_PMUWAKEUPI3 0x10C -#define AON_PMUWAKEUPI4 0x110 -#define AON_PMUWAKEUPI5 0x114 -#define AON_PMUWAKEUPI6 0x118 -#define AON_PMUWAKEUPI7 0x11C -#define AON_PMUSLEEPI0 0x120 -#define AON_PMUSLEEPI1 0x124 -#define AON_PMUSLEEPI2 0x128 -#define AON_PMUSLEEPI3 0x12C -#define AON_PMUSLEEPI4 0x130 -#define AON_PMUSLEEPI5 0x134 -#define AON_PMUSLEEPI6 0x138 -#define AON_PMUSLEEPI7 0x13C -#define AON_PMUIE 0x140 -#define AON_PMUCAUSE 0x144 -#define AON_PMUSLEEP 0x148 -#define AON_PMUKEY 0x14C - -#define AON_LFROSC 0x070 -/* Constants */ - -#define AON_WDOGKEY_VALUE 0x51F15E -#define AON_WDOGFEED_VALUE 0xD09F00D - -#define AON_WDOGCFG_SCALE 0x0000000F -#define AON_WDOGCFG_RSTEN 0x00000100 -#define AON_WDOGCFG_ZEROCMP 0x00000200 -#define AON_WDOGCFG_ENALWAYS 0x00001000 -#define AON_WDOGCFG_ENCOREAWAKE 0x00002000 -#define AON_WDOGCFG_CMPIP 0x10000000 - -#define AON_RTCCFG_SCALE 0x0000000F -#define AON_RTCCFG_ENALWAYS 0x00001000 -#define AON_RTCCFG_CMPIP 0x10000000 - -#define AON_WAKEUPCAUSE_RESET 0x00 -#define AON_WAKEUPCAUSE_RTC 0x01 -#define AON_WAKEUPCAUSE_DWAKEUP 0x02 -#define AON_WAKEUPCAUSE_AWAKEUP 0x03 - -#define AON_RESETCAUSE_POWERON 0x0000 -#define AON_RESETCAUSE_EXTERNAL 0x0100 -#define AON_RESETCAUSE_WATCHDOG 0x0200 - -#define AON_PMUCAUSE_WAKEUPCAUSE 0x00FF -#define AON_PMUCAUSE_RESETCAUSE 0xFF00 - -#endif /* _SIFIVE_AON_H */ diff --git a/raven/bsp/include/sifive/devices/clic.h b/raven/bsp/include/sifive/devices/clic.h deleted file mode 100644 index e8dc2df..0000000 --- a/raven/bsp/include/sifive/devices/clic.h +++ /dev/null @@ -1,30 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_CLIC_H -#define _SIFIVE_CLIC_H - -#define CLIC_HART0 0x00800000 -#define CLIC_MSIP 0x0000 -#define CLIC_MSIP_size 0x4 -#define CLIC_MTIMECMP 0x4000 -#define CLIC_MTIMECMP_size 0x8 -#define CLIC_MTIME 0xBFF8 -#define CLIC_MTIME_size 0x8 - -#define CLIC_INTIP 0x000 -#define CLIC_INTIE 0x400 -#define CLIC_INTCFG 0x800 -#define CLIC_CFG 0xc00 - -// These interrupt IDs are consistent across old and new mtvec modes -#define SSIPID 1 -#define MSIPID 3 -#define STIPID 5 -#define MTIPID 7 -#define SEIPID 9 -#define MEIPID 11 -#define CSIPID 12 -#define LOCALINTIDBASE 16 - - -#endif /* _SIFIVE_CLIC_H */ diff --git a/raven/bsp/include/sifive/devices/clint.h b/raven/bsp/include/sifive/devices/clint.h deleted file mode 100644 index cd3e0c7..0000000 --- a/raven/bsp/include/sifive/devices/clint.h +++ /dev/null @@ -1,14 +0,0 @@ -// See LICENSE for license details - -#ifndef _SIFIVE_CLINT_H -#define _SIFIVE_CLINT_H - - -#define CLINT_MSIP 0x0000 -#define CLINT_MSIP_size 0x4 -#define CLINT_MTIMECMP 0x4000 -#define CLINT_MTIMECMP_size 0x8 -#define CLINT_MTIME 0xBFF8 -#define CLINT_MTIME_size 0x8 - -#endif /* _SIFIVE_CLINT_H */ diff --git a/raven/bsp/include/sifive/devices/gpio.h b/raven/bsp/include/sifive/devices/gpio.h deleted file mode 100644 index f7f0acb..0000000 --- a/raven/bsp/include/sifive/devices/gpio.h +++ /dev/null @@ -1,24 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_GPIO_H -#define _SIFIVE_GPIO_H - -#define GPIO_INPUT_VAL (0x00) -#define GPIO_INPUT_EN (0x04) -#define GPIO_OUTPUT_EN (0x08) -#define GPIO_OUTPUT_VAL (0x0C) -#define GPIO_PULLUP_EN (0x10) -#define GPIO_DRIVE (0x14) -#define GPIO_RISE_IE (0x18) -#define GPIO_RISE_IP (0x1C) -#define GPIO_FALL_IE (0x20) -#define GPIO_FALL_IP (0x24) -#define GPIO_HIGH_IE (0x28) -#define GPIO_HIGH_IP (0x2C) -#define GPIO_LOW_IE (0x30) -#define GPIO_LOW_IP (0x34) -#define GPIO_IOF_EN (0x38) -#define GPIO_IOF_SEL (0x3C) -#define GPIO_OUTPUT_XOR (0x40) - -#endif /* _SIFIVE_GPIO_H */ diff --git a/raven/bsp/include/sifive/devices/otp.h b/raven/bsp/include/sifive/devices/otp.h deleted file mode 100644 index 93833e2..0000000 --- a/raven/bsp/include/sifive/devices/otp.h +++ /dev/null @@ -1,23 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_OTP_H -#define _SIFIVE_OTP_H - -/* Register offsets */ - -#define OTP_LOCK 0x00 -#define OTP_CK 0x04 -#define OTP_OE 0x08 -#define OTP_SEL 0x0C -#define OTP_WE 0x10 -#define OTP_MR 0x14 -#define OTP_MRR 0x18 -#define OTP_MPP 0x1C -#define OTP_VRREN 0x20 -#define OTP_VPPEN 0x24 -#define OTP_A 0x28 -#define OTP_D 0x2C -#define OTP_Q 0x30 -#define OTP_READ_TIMINGS 0x34 - -#endif diff --git a/raven/bsp/include/sifive/devices/plic.h b/raven/bsp/include/sifive/devices/plic.h deleted file mode 100644 index e1ca5d6..0000000 --- a/raven/bsp/include/sifive/devices/plic.h +++ /dev/null @@ -1,31 +0,0 @@ -// See LICENSE for license details. - -#ifndef PLIC_H -#define PLIC_H - -#include - -// 32 bits per source -#define PLIC_PRIORITY_OFFSET _AC(0x0000,UL) -#define PLIC_PRIORITY_SHIFT_PER_SOURCE 2 -// 1 bit per source (1 address) -#define PLIC_PENDING_OFFSET _AC(0x1000,UL) -#define PLIC_PENDING_SHIFT_PER_SOURCE 0 - -//0x80 per target -#define PLIC_ENABLE_OFFSET _AC(0x2000,UL) -#define PLIC_ENABLE_SHIFT_PER_TARGET 7 - - -#define PLIC_THRESHOLD_OFFSET _AC(0x200000,UL) -#define PLIC_CLAIM_OFFSET _AC(0x200004,UL) -#define PLIC_THRESHOLD_SHIFT_PER_TARGET 12 -#define PLIC_CLAIM_SHIFT_PER_TARGET 12 - -#define PLIC_MAX_SOURCE 1023 -#define PLIC_SOURCE_MASK 0x3FF - -#define PLIC_MAX_TARGET 15871 -#define PLIC_TARGET_MASK 0x3FFF - -#endif /* PLIC_H */ diff --git a/raven/bsp/include/sifive/devices/prci.h b/raven/bsp/include/sifive/devices/prci.h deleted file mode 100644 index 1a3de58..0000000 --- a/raven/bsp/include/sifive/devices/prci.h +++ /dev/null @@ -1,56 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_PRCI_H -#define _SIFIVE_PRCI_H - -/* Register offsets */ - -#define PRCI_HFROSCCFG (0x0000) -#define PRCI_HFXOSCCFG (0x0004) -#define PRCI_PLLCFG (0x0008) -#define PRCI_PLLDIV (0x000C) -#define PRCI_PROCMONCFG (0x00F0) - -/* Fields */ -#define ROSC_DIV(x) (((x) & 0x2F) << 0 ) -#define ROSC_TRIM(x) (((x) & 0x1F) << 16) -#define ROSC_EN(x) (((x) & 0x1 ) << 30) -#define ROSC_RDY(x) (((x) & 0x1 ) << 31) - -#define XOSC_EN(x) (((x) & 0x1) << 30) -#define XOSC_RDY(x) (((x) & 0x1) << 31) - -#define PLL_R(x) (((x) & 0x7) << 0) -// single reserved bit for F LSB. -#define PLL_F(x) (((x) & 0x3F) << 4) -#define PLL_Q(x) (((x) & 0x3) << 10) -#define PLL_SEL(x) (((x) & 0x1) << 16) -#define PLL_REFSEL(x) (((x) & 0x1) << 17) -#define PLL_BYPASS(x) (((x) & 0x1) << 18) -#define PLL_LOCK(x) (((x) & 0x1) << 31) - -#define PLL_R_default 0x1 -#define PLL_F_default 0x1F -#define PLL_Q_default 0x3 - -#define PLL_REFSEL_HFROSC 0x0 -#define PLL_REFSEL_HFXOSC 0x1 - -#define PLL_SEL_HFROSC 0x0 -#define PLL_SEL_PLL 0x1 - -#define PLL_FINAL_DIV(x) (((x) & 0x3F) << 0) -#define PLL_FINAL_DIV_BY_1(x) (((x) & 0x1 ) << 8) - -#define PROCMON_DIV(x) (((x) & 0x1F) << 0) -#define PROCMON_TRIM(x) (((x) & 0x1F) << 8) -#define PROCMON_EN(x) (((x) & 0x1) << 16) -#define PROCMON_SEL(x) (((x) & 0x3) << 24) -#define PROCMON_NT_EN(x) (((x) & 0x1) << 28) - -#define PROCMON_SEL_HFCLK 0 -#define PROCMON_SEL_HFXOSCIN 1 -#define PROCMON_SEL_PLLOUTDIV 2 -#define PROCMON_SEL_PROCMON 3 - -#endif // _SIFIVE_PRCI_H diff --git a/raven/bsp/include/sifive/devices/pwm.h b/raven/bsp/include/sifive/devices/pwm.h deleted file mode 100644 index 067889a..0000000 --- a/raven/bsp/include/sifive/devices/pwm.h +++ /dev/null @@ -1,37 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_PWM_H -#define _SIFIVE_PWM_H - -/* Register offsets */ - -#define PWM_CFG 0x00 -#define PWM_COUNT 0x08 -#define PWM_S 0x10 -#define PWM_CMP0 0x20 -#define PWM_CMP1 0x24 -#define PWM_CMP2 0x28 -#define PWM_CMP3 0x2C - -/* Constants */ - -#define PWM_CFG_SCALE 0x0000000F -#define PWM_CFG_STICKY 0x00000100 -#define PWM_CFG_ZEROCMP 0x00000200 -#define PWM_CFG_DEGLITCH 0x00000400 -#define PWM_CFG_ENALWAYS 0x00001000 -#define PWM_CFG_ONESHOT 0x00002000 -#define PWM_CFG_CMP0CENTER 0x00010000 -#define PWM_CFG_CMP1CENTER 0x00020000 -#define PWM_CFG_CMP2CENTER 0x00040000 -#define PWM_CFG_CMP3CENTER 0x00080000 -#define PWM_CFG_CMP0GANG 0x01000000 -#define PWM_CFG_CMP1GANG 0x02000000 -#define PWM_CFG_CMP2GANG 0x04000000 -#define PWM_CFG_CMP3GANG 0x08000000 -#define PWM_CFG_CMP0IP 0x10000000 -#define PWM_CFG_CMP1IP 0x20000000 -#define PWM_CFG_CMP2IP 0x40000000 -#define PWM_CFG_CMP3IP 0x80000000 - -#endif /* _SIFIVE_PWM_H */ diff --git a/raven/bsp/include/sifive/devices/spi.h b/raven/bsp/include/sifive/devices/spi.h deleted file mode 100644 index 80ef345..0000000 --- a/raven/bsp/include/sifive/devices/spi.h +++ /dev/null @@ -1,80 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_SPI_H -#define _SIFIVE_SPI_H - -/* Register offsets */ - -#define SPI_REG_SCKDIV 0x00 -#define SPI_REG_SCKMODE 0x04 -#define SPI_REG_CSID 0x10 -#define SPI_REG_CSDEF 0x14 -#define SPI_REG_CSMODE 0x18 - -#define SPI_REG_DCSSCK 0x28 -#define SPI_REG_DSCKCS 0x2a -#define SPI_REG_DINTERCS 0x2c -#define SPI_REG_DINTERXFR 0x2e - -#define SPI_REG_FMT 0x40 -#define SPI_REG_TXFIFO 0x48 -#define SPI_REG_RXFIFO 0x4c -#define SPI_REG_TXCTRL 0x50 -#define SPI_REG_RXCTRL 0x54 - -#define SPI_REG_FCTRL 0x60 -#define SPI_REG_FFMT 0x64 - -#define SPI_REG_IE 0x70 -#define SPI_REG_IP 0x74 - -/* Fields */ - -#define SPI_SCK_PHA 0x1 -#define SPI_SCK_POL 0x2 - -#define SPI_FMT_PROTO(x) ((x) & 0x3) -#define SPI_FMT_ENDIAN(x) (((x) & 0x1) << 2) -#define SPI_FMT_DIR(x) (((x) & 0x1) << 3) -#define SPI_FMT_LEN(x) (((x) & 0xf) << 16) - -/* TXCTRL register */ -#define SPI_TXWM(x) ((x) & 0xffff) -/* RXCTRL register */ -#define SPI_RXWM(x) ((x) & 0xffff) - -#define SPI_IP_TXWM 0x1 -#define SPI_IP_RXWM 0x2 - -#define SPI_FCTRL_EN 0x1 - -#define SPI_INSN_CMD_EN 0x1 -#define SPI_INSN_ADDR_LEN(x) (((x) & 0x7) << 1) -#define SPI_INSN_PAD_CNT(x) (((x) & 0xf) << 4) -#define SPI_INSN_CMD_PROTO(x) (((x) & 0x3) << 8) -#define SPI_INSN_ADDR_PROTO(x) (((x) & 0x3) << 10) -#define SPI_INSN_DATA_PROTO(x) (((x) & 0x3) << 12) -#define SPI_INSN_CMD_CODE(x) (((x) & 0xff) << 16) -#define SPI_INSN_PAD_CODE(x) (((x) & 0xff) << 24) - -#define SPI_TXFIFO_FULL (1 << 31) -#define SPI_RXFIFO_EMPTY (1 << 31) - -/* Values */ - -#define SPI_CSMODE_AUTO 0 -#define SPI_CSMODE_HOLD 2 -#define SPI_CSMODE_OFF 3 - -#define SPI_DIR_RX 0 -#define SPI_DIR_TX 1 - -#define SPI_PROTO_S 0 -#define SPI_PROTO_D 1 -#define SPI_PROTO_Q 2 - -#define SPI_ENDIAN_MSB 0 -#define SPI_ENDIAN_LSB 1 - - -#endif /* _SIFIVE_SPI_H */ diff --git a/raven/bsp/include/sifive/devices/uart.h b/raven/bsp/include/sifive/devices/uart.h deleted file mode 100644 index 71bea6f..0000000 --- a/raven/bsp/include/sifive/devices/uart.h +++ /dev/null @@ -1,27 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_UART_H -#define _SIFIVE_UART_H - -/* Register offsets */ -#define UART_REG_TXFIFO 0x00 -#define UART_REG_RXFIFO 0x04 -#define UART_REG_TXCTRL 0x08 -#define UART_REG_RXCTRL 0x0c -#define UART_REG_IE 0x10 -#define UART_REG_IP 0x14 -#define UART_REG_DIV 0x18 - -/* TXCTRL register */ -#define UART_TXEN 0x1 -#define UART_TXWM(x) (((x) & 0xffff) << 16) - -/* RXCTRL register */ -#define UART_RXEN 0x1 -#define UART_RXWM(x) (((x) & 0xffff) << 16) - -/* IP register */ -#define UART_IP_TXWM 0x1 -#define UART_IP_RXWM 0x2 - -#endif /* _SIFIVE_UART_H */ diff --git a/raven/bsp/include/sifive/sections.h b/raven/bsp/include/sifive/sections.h deleted file mode 100644 index 6e1f051..0000000 --- a/raven/bsp/include/sifive/sections.h +++ /dev/null @@ -1,17 +0,0 @@ -// See LICENSE for license details. -#ifndef _SECTIONS_H -#define _SECTIONS_H - -extern unsigned char _rom[]; -extern unsigned char _rom_end[]; - -extern unsigned char _ram[]; -extern unsigned char _ram_end[]; - -extern unsigned char _ftext[]; -extern unsigned char _etext[]; -extern unsigned char _fbss[]; -extern unsigned char _ebss[]; -extern unsigned char _end[]; - -#endif /* _SECTIONS_H */ diff --git a/raven/bsp/include/sifive/smp.h b/raven/bsp/include/sifive/smp.h deleted file mode 100644 index 8e34388..0000000 --- a/raven/bsp/include/sifive/smp.h +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef SIFIVE_SMP -#define SIFIVE_SMP - -// The maximum number of HARTs this code supports -#ifndef MAX_HARTS -#define MAX_HARTS 32 -#endif -#define CLINT_END_HART_IPI CLINT_CTRL_ADDR + (MAX_HARTS*4) - -// The hart that non-SMP tests should run on -#ifndef NONSMP_HART -#define NONSMP_HART 0 -#endif - -/* If your test cannot handle multiple-threads, use this: - * smp_disable(reg1) - */ -#define smp_disable(reg1, reg2) \ - csrr reg1, mhartid ;\ - li reg2, NONSMP_HART ;\ - beq reg1, reg2, hart0_entry ;\ -42: ;\ - wfi ;\ - j 42b ;\ -hart0_entry: - -/* If your test needs to temporarily block multiple-threads, do this: - * smp_pause(reg1, reg2) - * ... single-threaded work ... - * smp_resume(reg1, reg2) - * ... multi-threaded work ... - */ - -#define smp_pause(reg1, reg2) \ - li reg2, 0x8 ;\ - csrw mie, reg2 ;\ - csrr reg2, mhartid ;\ - bnez reg2, 42f - -#define smp_resume(reg1, reg2) \ - li reg1, CLINT_CTRL_ADDR ;\ -41: ;\ - li reg2, 1 ;\ - sw reg2, 0(reg1) ;\ - addi reg1, reg1, 4 ;\ - li reg2, CLINT_END_HART_IPI ;\ - blt reg1, reg2, 41b ;\ -42: ;\ - wfi ;\ - csrr reg2, mip ;\ - andi reg2, reg2, 0x8 ;\ - beqz reg2, 42b ;\ - li reg1, CLINT_CTRL_ADDR ;\ - csrr reg2, mhartid ;\ - slli reg2, reg2, 2 ;\ - add reg2, reg2, reg1 ;\ - sw zero, 0(reg2) ;\ -41: ;\ - lw reg2, 0(reg1) ;\ - bnez reg2, 41b ;\ - addi reg1, reg1, 4 ;\ - li reg2, CLINT_END_HART_IPI ;\ - blt reg1, reg2, 41b - -#endif diff --git a/raven/bsp/libwrap/libwrap.mk b/raven/bsp/libwrap/libwrap.mk deleted file mode 100644 index 71bba3d..0000000 --- a/raven/bsp/libwrap/libwrap.mk +++ /dev/null @@ -1,56 +0,0 @@ -# See LICENSE for license details. - -ifndef _SIFIVE_MK_LIBWRAP -_SIFIVE_MK_LIBWRAP := # defined - -LIBWRAP_DIR := $(dir $(lastword $(MAKEFILE_LIST))) -LIBWRAP_DIR := $(LIBWRAP_DIR:/=) - -LIBWRAP_SRCS := \ - stdlib/malloc.c \ - sys/open.c \ - sys/lseek.c \ - sys/read.c \ - sys/write.c \ - sys/fstat.c \ - sys/stat.c \ - sys/close.c \ - sys/link.c \ - sys/unlink.c \ - sys/execve.c \ - sys/fork.c \ - sys/getpid.c \ - sys/kill.c \ - sys/wait.c \ - sys/isatty.c \ - sys/times.c \ - sys/sbrk.c \ - sys/_exit.c \ - sys/puts.c \ - misc/write_hex.c - -LIBWRAP_SRCS := $(foreach f,$(LIBWRAP_SRCS),$(LIBWRAP_DIR)/$(f)) -LIBWRAP_OBJS := $(LIBWRAP_SRCS:.c=.o) - -LIBWRAP_SYMS := malloc free \ - open lseek read write fstat stat close link unlink \ - execve fork getpid kill wait \ - isatty times sbrk _exit puts - -LIBWRAP := libwrap.a - -LINK_DEPS += $(LIBWRAP) - -LDFLAGS += $(foreach s,$(LIBWRAP_SYMS),-Wl,--wrap=$(s)) -LDFLAGS += $(foreach s,$(LIBWRAP_SYMS),-Wl,--wrap=_$(s)) -LDFLAGS += -L. -Wl,--start-group -lwrap -lc -Wl,--end-group - -CLEAN_OBJS += $(LIBWRAP_OBJS) - -$(LIBWRAP_OBJS): %.o: %.c $(HEADERS) - $(CC) $(CFLAGS) $(INCLUDES) -c -o $@ $< - -$(LIBWRAP): $(LIBWRAP_OBJS) - $(AR) rcs $@ $^ - -endif # _SIFIVE_MK_LIBWRAP diff --git a/raven/bsp/libwrap/misc/write_hex.c b/raven/bsp/libwrap/misc/write_hex.c deleted file mode 100644 index a35ad7a..0000000 --- a/raven/bsp/libwrap/misc/write_hex.c +++ /dev/null @@ -1,19 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include -#include "platform.h" - -void write_hex(int fd, unsigned long int hex) -{ - uint8_t ii; - uint8_t jj; - char towrite; - write(fd , "0x", 2); - for (ii = sizeof(unsigned long int) * 2 ; ii > 0; ii--) { - jj = ii - 1; - uint8_t digit = ((hex & (0xF << (jj*4))) >> (jj*4)); - towrite = digit < 0xA ? ('0' + digit) : ('A' + (digit - 0xA)); - write(fd, &towrite, 1); - } -} diff --git a/raven/bsp/libwrap/stdlib/malloc.c b/raven/bsp/libwrap/stdlib/malloc.c deleted file mode 100644 index 8f4f432..0000000 --- a/raven/bsp/libwrap/stdlib/malloc.c +++ /dev/null @@ -1,17 +0,0 @@ -/* See LICENSE for license details. */ - -/* These functions are intended for embedded RV32 systems and are - obviously incorrect in general. */ - -void* __wrap_malloc(unsigned long sz) -{ - extern void* sbrk(long); - void* res = sbrk(sz); - if ((long)res == -1) - return 0; - return res; -} - -void __wrap_free(void* ptr) -{ -} diff --git a/raven/bsp/libwrap/sys/_exit.c b/raven/bsp/libwrap/sys/_exit.c deleted file mode 100644 index 011464f..0000000 --- a/raven/bsp/libwrap/sys/_exit.c +++ /dev/null @@ -1,17 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "platform.h" -#include "weak_under_alias.h" - -void __wrap_exit(int code) -{ - const char message[] = "\nProgam has exited with code:"; - - write(STDERR_FILENO, message, sizeof(message) - 1); - write_hex(STDERR_FILENO, code); - write(STDERR_FILENO, "\n", 1); - - for (;;); -} -weak_under_alias(exit); diff --git a/raven/bsp/libwrap/sys/close.c b/raven/bsp/libwrap/sys/close.c deleted file mode 100644 index 199fe51..0000000 --- a/raven/bsp/libwrap/sys/close.c +++ /dev/null @@ -1,11 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "stub.h" -#include "weak_under_alias.h" - -int __wrap_close(int fd) -{ - return _stub(EBADF); -} -weak_under_alias(close); diff --git a/raven/bsp/libwrap/sys/execve.c b/raven/bsp/libwrap/sys/execve.c deleted file mode 100644 index f7be25a..0000000 --- a/raven/bsp/libwrap/sys/execve.c +++ /dev/null @@ -1,11 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "stub.h" -#include "weak_under_alias.h" - -int __wrap_execve(const char* name, char* const argv[], char* const env[]) -{ - return _stub(ENOMEM); -} -weak_under_alias(execve); diff --git a/raven/bsp/libwrap/sys/fork.c b/raven/bsp/libwrap/sys/fork.c deleted file mode 100644 index 13a3e65..0000000 --- a/raven/bsp/libwrap/sys/fork.c +++ /dev/null @@ -1,9 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "stub.h" - -int fork(void) -{ - return _stub(EAGAIN); -} diff --git a/raven/bsp/libwrap/sys/fstat.c b/raven/bsp/libwrap/sys/fstat.c deleted file mode 100644 index ff82bf9..0000000 --- a/raven/bsp/libwrap/sys/fstat.c +++ /dev/null @@ -1,18 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include -#include -#include "stub.h" -#include "weak_under_alias.h" - -int __wrap_fstat(int fd, struct stat* st) -{ - if (isatty(fd)) { - st->st_mode = S_IFCHR; - return 0; - } - - return _stub(EBADF); -} -weak_under_alias(fstat); diff --git a/raven/bsp/libwrap/sys/getpid.c b/raven/bsp/libwrap/sys/getpid.c deleted file mode 100644 index 195fbec..0000000 --- a/raven/bsp/libwrap/sys/getpid.c +++ /dev/null @@ -1,8 +0,0 @@ -/* See LICENSE of license details. */ -#include "weak_under_alias.h" - -int __wrap_getpid(void) -{ - return 1; -} -weak_under_alias(getpid); diff --git a/raven/bsp/libwrap/sys/isatty.c b/raven/bsp/libwrap/sys/isatty.c deleted file mode 100644 index 7bb82ab..0000000 --- a/raven/bsp/libwrap/sys/isatty.c +++ /dev/null @@ -1,13 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "weak_under_alias.h" - -int __wrap_isatty(int fd) -{ - if (fd == STDOUT_FILENO || fd == STDERR_FILENO) - return 1; - - return 0; -} -weak_under_alias(isatty); diff --git a/raven/bsp/libwrap/sys/kill.c b/raven/bsp/libwrap/sys/kill.c deleted file mode 100644 index 18b9bd4..0000000 --- a/raven/bsp/libwrap/sys/kill.c +++ /dev/null @@ -1,11 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "stub.h" -#include "weak_under_alias.h" - -int __wrap_kill(int pid, int sig) -{ - return _stub(EINVAL); -} -weak_under_alias(kill); diff --git a/raven/bsp/libwrap/sys/link.c b/raven/bsp/libwrap/sys/link.c deleted file mode 100644 index 0cad551..0000000 --- a/raven/bsp/libwrap/sys/link.c +++ /dev/null @@ -1,11 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "stub.h" -#include "weak_under_alias.h" - -int __wrap_link(const char *old_name, const char *new_name) -{ - return _stub(EMLINK); -} -weak_under_alias(link); diff --git a/raven/bsp/libwrap/sys/lseek.c b/raven/bsp/libwrap/sys/lseek.c deleted file mode 100644 index 4131449..0000000 --- a/raven/bsp/libwrap/sys/lseek.c +++ /dev/null @@ -1,16 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include -#include -#include "stub.h" -#include "weak_under_alias.h" - -off_t __wrap_lseek(int fd, off_t ptr, int dir) -{ - if (isatty(fd)) - return 0; - - return _stub(EBADF); -} -weak_under_alias(lseek); diff --git a/raven/bsp/libwrap/sys/open.c b/raven/bsp/libwrap/sys/open.c deleted file mode 100644 index c61415a..0000000 --- a/raven/bsp/libwrap/sys/open.c +++ /dev/null @@ -1,11 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "stub.h" -#include "weak_under_alias.h" - -int __wrap_open(const char* name, int flags, int mode) -{ - return _stub(ENOENT); -} -weak_under_alias(open); diff --git a/raven/bsp/libwrap/sys/openat.c b/raven/bsp/libwrap/sys/openat.c deleted file mode 100644 index 227c956..0000000 --- a/raven/bsp/libwrap/sys/openat.c +++ /dev/null @@ -1,11 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "stub.h" -#include "weak_under_alias.h" - -int __wrap_openat(int dirfd, const char* name, int flags, int mode) -{ - return _stub(ENOENT); -} -weak_under_alias(openat); diff --git a/raven/bsp/libwrap/sys/puts.c b/raven/bsp/libwrap/sys/puts.c deleted file mode 100644 index 50d6437..0000000 --- a/raven/bsp/libwrap/sys/puts.c +++ /dev/null @@ -1,28 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include -#include -#include - -#include "platform.h" -#include "stub.h" -#include "weak_under_alias.h" - -int __wrap_puts(const char *s) -{ - while (*s != '\0') { - while (UART0_REG(UART_REG_TXFIFO) & 0x80000000) ; - UART0_REG(UART_REG_TXFIFO) = *s; - - if (*s == '\n') { - while (UART0_REG(UART_REG_TXFIFO) & 0x80000000) ; - UART0_REG(UART_REG_TXFIFO) = '\r'; - } - - ++s; - } - - return 0; -} -weak_under_alias(puts); diff --git a/raven/bsp/libwrap/sys/read.c b/raven/bsp/libwrap/sys/read.c deleted file mode 100644 index 3226cdb..0000000 --- a/raven/bsp/libwrap/sys/read.c +++ /dev/null @@ -1,32 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include -#include -#include - -#include "platform.h" -#include "stub.h" -#include "weak_under_alias.h" - -ssize_t __wrap_read(int fd, void* ptr, size_t len) -{ - uint8_t * current = (uint8_t *)ptr; - volatile uint32_t * uart_rx = (uint32_t *)(UART0_CTRL_ADDR + UART_REG_RXFIFO); - volatile uint8_t * uart_rx_cnt = (uint8_t *)(UART0_CTRL_ADDR + UART_REG_RXCTRL + 2); - - ssize_t result = 0; - - if (isatty(fd)) { - for (current = (uint8_t *)ptr; - (current < ((uint8_t *)ptr) + len) && (*uart_rx_cnt > 0); - current ++) { - *current = *uart_rx; - result++; - } - return result; - } - - return _stub(EBADF); -} -weak_under_alias(read); diff --git a/raven/bsp/libwrap/sys/sbrk.c b/raven/bsp/libwrap/sys/sbrk.c deleted file mode 100644 index 12170b4..0000000 --- a/raven/bsp/libwrap/sys/sbrk.c +++ /dev/null @@ -1,18 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "weak_under_alias.h" - -void *__wrap_sbrk(ptrdiff_t incr) -{ - extern char _end[]; - extern char _heap_end[]; - static char *curbrk = _end; - - if ((curbrk + incr < _end) || (curbrk + incr > _heap_end)) - return NULL - 1; - - curbrk += incr; - return curbrk - incr; -} -weak_under_alias(sbrk); diff --git a/raven/bsp/libwrap/sys/stat.c b/raven/bsp/libwrap/sys/stat.c deleted file mode 100644 index 1576ca1..0000000 --- a/raven/bsp/libwrap/sys/stat.c +++ /dev/null @@ -1,12 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include -#include "stub.h" -#include "weak_under_alias.h" - -int __wrap_stat(const char* file, struct stat* st) -{ - return _stub(EACCES); -} -weak_under_alias(stat); diff --git a/raven/bsp/libwrap/sys/stub.h b/raven/bsp/libwrap/sys/stub.h deleted file mode 100644 index fb5e5be..0000000 --- a/raven/bsp/libwrap/sys/stub.h +++ /dev/null @@ -1,10 +0,0 @@ -/* See LICENSE of license details. */ -#ifndef _SIFIVE_SYS_STUB_H -#define _SIFIVE_SYS_STUB_H - -static inline int _stub(int err) -{ - return -1; -} - -#endif /* _SIFIVE_SYS_STUB_H */ diff --git a/raven/bsp/libwrap/sys/times.c b/raven/bsp/libwrap/sys/times.c deleted file mode 100644 index 55969a7..0000000 --- a/raven/bsp/libwrap/sys/times.c +++ /dev/null @@ -1,12 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include -#include "stub.h" -#include "weak_under_alias.h" - -clock_t __wrap_times(struct tms* buf) -{ - return _stub(EACCES); -} -weak_under_alias(times); diff --git a/raven/bsp/libwrap/sys/unlink.c b/raven/bsp/libwrap/sys/unlink.c deleted file mode 100644 index 09f4da7..0000000 --- a/raven/bsp/libwrap/sys/unlink.c +++ /dev/null @@ -1,11 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "stub.h" -#include "weak_under_alias.h" - -int __wrap_unlink(const char* name) -{ - return _stub(ENOENT); -} -weak_under_alias(unlink); diff --git a/raven/bsp/libwrap/sys/wait.c b/raven/bsp/libwrap/sys/wait.c deleted file mode 100644 index ea3225b..0000000 --- a/raven/bsp/libwrap/sys/wait.c +++ /dev/null @@ -1,9 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "stub.h" - -int wait(int* status) -{ - return _stub(ECHILD); -} diff --git a/raven/bsp/libwrap/sys/weak_under_alias.h b/raven/bsp/libwrap/sys/weak_under_alias.h deleted file mode 100644 index 7629353..0000000 --- a/raven/bsp/libwrap/sys/weak_under_alias.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef _BSP_LIBWRAP_WEAK_UNDER_ALIAS_H -#define _BSP_LIBWRAP_WEAK_UNDER_ALIAS_H - -#define weak_under_alias(name) \ - extern __typeof (__wrap_##name) __wrap__##name __attribute__ ((weak, alias ("__wrap_"#name))) - -#endif diff --git a/raven/bsp/libwrap/sys/write.c b/raven/bsp/libwrap/sys/write.c deleted file mode 100644 index b1e9a7e..0000000 --- a/raven/bsp/libwrap/sys/write.c +++ /dev/null @@ -1,31 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include -#include -#include - -#include "platform.h" -#include "stub.h" -#include "weak_under_alias.h" - -ssize_t __wrap_write(int fd, const void* ptr, size_t len) -{ - const uint8_t * current = (const char *)ptr; - - if (isatty(fd)) { - for (size_t jj = 0; jj < len; jj++) { - while (UART0_REG(UART_REG_TXFIFO) & 0x80000000) ; - UART0_REG(UART_REG_TXFIFO) = current[jj]; - - if (current[jj] == '\n') { - while (UART0_REG(UART_REG_TXFIFO) & 0x80000000) ; - UART0_REG(UART_REG_TXFIFO) = '\r'; - } - } - return len; - } - - return _stub(EBADF); -} -weak_under_alias(write); diff --git a/raven/hello_raven b/raven/hello_raven deleted file mode 100755 index 27d4b39..0000000 Binary files a/raven/hello_raven and /dev/null differ diff --git a/raven/src/bsp.h b/raven/src/bsp.h deleted file mode 100644 index f04f4f4..0000000 --- a/raven/src/bsp.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * bsp.h - * - * Created on: 30.07.2018 - * Author: eyck - */ - -#ifndef BSP_H_ -#define BSP_H_ - -#ifdef __cplusplus -extern "C" { -#endif -#include -#include -#include -extern void trap_entry(); -#ifdef __cplusplus -} -#endif - -#endif /* BSP_H_ */ diff --git a/raven/src/delay.c b/raven/src/delay.c deleted file mode 100644 index 24070b4..0000000 --- a/raven/src/delay.c +++ /dev/null @@ -1,123 +0,0 @@ -/* - * delay.c - * - * Created on: 30.07.2018 - * Author: eyck - */ - -#include "delay.h" - -#define rdmcycle(x) { \ - uint32_t lo, hi, hi2; \ - __asm__ __volatile__ ("1:\n\t" \ - "csrr %0, mcycleh\n\t" \ - "csrr %1, mcycle\n\t" \ - "csrr %2, mcycleh\n\t" \ - "bne %0, %2, 1b\n\t" \ - : "=r" (hi), "=r" (lo), "=r" (hi2)) ; \ - *(x) = lo | ((uint64_t) hi << 32); \ - } - -typedef struct { - uint32_t n; - uint32_t mult; - uint32_t shift; -} int_inverse ; - -int_inverse f_cpu_1000_inv; -int_inverse f_cpu_1000000_inv; - -uint32_t F_CPU=1000000; - -void calc_inv(uint32_t n, int_inverse * res){ - uint32_t one = ~0; - uint32_t d = one/n; - uint32_t r = one%n + 1; - if (r >= n) ++d; - if (d == 0) --d; - uint32_t shift = 0; - while ((d & 0x80000000) == 0){ - d <<= 1; - ++shift; - } - res->n = n; - res->mult = d; - res->shift = shift; -} - -uint32_t divide32_using_inverse(uint32_t n, int_inverse *inv){ - uint32_t d = (uint32_t)(((uint64_t)n * inv->mult) >> 32); - d >>= inv->shift; - if (n - d*inv->n >= inv->n) ++d; - return d; -} - -// Almost full-range 64/32 divide. -// If divisor-1 has i bits, then the answer is exact for n of up to 64-i bits -// e.g. for divisors up to a million, n can have up to 45 bits -// On RV32IM with divide32_using_inverse inlines this uses 5 multiplies, -// 33 instructions, zero branches, 3 loads, 0 stores. -uint64_t divide64_using_inverse(uint64_t n, int_inverse *inv){ - uint32_t preshift = (31 - inv->shift) & 31; - uint64_t d = (uint64_t)divide32_using_inverse(n >> preshift, inv) << preshift; - uint32_t r = n - d * inv->n; - d += divide32_using_inverse(r, inv); - return d; -} - - -uint32_t millis(){ - uint64_t x; - rdmcycle(&x); - x = divide64_using_inverse(x, &f_cpu_1000_inv); - return((uint32_t) (x & 0xFFFFFFFF)); -} - -uint32_t micros(void){ - uint64_t x; - rdmcycle(&x); - // For Power-of-two MHz F_CPU, - // this compiles into a simple shift, - // and is faster than the general solution. -#if F_CPU==16000000 - x = x / (F_CPU / 1000000); -#else -#if F_CPU==256000000 - x = x / (F_CPU / 1000000); -#else - x = divide64_using_inverse(x, &f_cpu_1000000_inv); -#endif -#endif - return((uint32_t) (x & 0xFFFFFFFF)); -} - - -void delayMS(uint32_t dwMs){ - uint64_t current, later; - rdmcycle(¤t); - later = current + dwMs * (F_CPU/1000); - if (later > current){ // usual case - while (later > current) - rdmcycle(¤t); - } else { // wrap. Though this is unlikely to be hit w/ 64-bit mcycle - while (later < current) - rdmcycle(¤t); - while (current < later) - rdmcycle(¤t); - } -} - -void delayUS(uint32_t dwUs){ - uint64_t current, later; - rdmcycle(¤t); - later = current + dwUs * (F_CPU/1000000); - if (later > current){ // usual case - while (later > current) - rdmcycle(¤t); - } else {// wrap. Though this is unlikely to be hit w/ 64-bit mcycle - while (later < current) - rdmcycle(¤t); - while (current < later) - rdmcycle(¤t); - } -} diff --git a/raven/src/delay.h b/raven/src/delay.h deleted file mode 100644 index 36ce098..0000000 --- a/raven/src/delay.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * delay.h - * - * Created on: 30.07.2018 - * Author: eyck - */ - -#ifndef DELAY_H_ -#define DELAY_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif -extern uint32_t F_CPU; - -void delayMS(uint32_t dwMs); -void delayUS(uint32_t dwUs); - -#ifdef __cplusplus -} -#endif - -#endif /* DELAY_H_ */ diff --git a/raven/src/hello_raven.cpp b/raven/src/hello_raven.cpp deleted file mode 100644 index baac273..0000000 --- a/raven/src/hello_raven.cpp +++ /dev/null @@ -1,115 +0,0 @@ -#include "hello_raven.h" -#include "delay.h" -#include "bsp.h" -#include "plic/plic_driver.h" - -#include -#include -#include - -#define IOF_ENABLE_TERMINAL (0x30000) - - -typedef void (*function_ptr_t) (void); -//! Instance data for the PLIC. -plic_instance_t g_plic; -std::array g_ext_interrupt_handlers; - - -char * end = (char *)0x80001000; // TODO: end supposed to be a RAM section according to the linker file falsh.lds, but for some reason it's not initialized - -/*! \brief external interrupt handler - * - * routes the peripheral interrupts to the the respective handler - * - */ -extern "C" void handle_m_ext_interrupt() { - plic_source int_num = PLIC_claim_interrupt(&g_plic); - if ((int_num >=1 ) && (int_num < PLIC_NUM_INTERRUPTS)) - g_ext_interrupt_handlers[int_num](); - else - exit(1 + (uintptr_t) int_num); - PLIC_complete_interrupt(&g_plic, int_num); -} -/*! \brief dummy interrupt handler - * - */ -void no_interrupt_handler (void) {}; -/*! \brief configure the per-interrupt handler - * - */ -void configure_irq(size_t irq_num, function_ptr_t handler, unsigned char prio=1) { - g_ext_interrupt_handlers[irq_num] = handler; - // Priority must be set > 0 to trigger the interrupt. - PLIC_set_priority(&g_plic, irq_num, prio); - // Have to enable the interrupt both at the GPIO level, and at the PLIC level. - PLIC_enable_interrupt(&g_plic, irq_num); -} - -static void msi_interrupt_handler(){ - int * local_mem_base = (int *) end; - int hartid = read_csr(mhartid); - - int val_a = *local_mem_base; - int val_b = *(local_mem_base+1); - int sum = val_a + val_b; - *(local_mem_base+100) = sum; - if (sum == 0xF) - printf("HW thread ID %d: sum of A+B=0x%x\n", hartid, sum); - else { - printf("HW thread ID %d: sum of A+B is not 0x%x. Test FAILED!!!\n", hartid, sum); - } -} - -/*!\brief initializes platform - * - */ -void platform_init(){ - // UART init section TODO: clarify how to get the functions from init.c? - GPIO_REG(GPIO_IOF_SEL) &= ~IOF0_UART0_MASK; - GPIO_REG(GPIO_IOF_EN) |= IOF0_UART0_MASK; - UART0_REG(UART_REG_TXCTRL) |= UART_TXEN; - - F_CPU=PRCI_measure_mcycle_freq(20, RTC_FREQ); - printf("core freq at %d Hz\n", F_CPU); - // initialie interupt & trap handling - write_csr(mtvec, &trap_entry); - - PLIC_init(&g_plic, PLIC_CTRL_ADDR, PLIC_NUM_INTERRUPTS, PLIC_NUM_PRIORITIES, 0); - // Disable the machine & timer interrupts until setup is done. - clear_csr(mie, MIP_MEIP); - clear_csr(mie, MIP_MTIP); - for (auto& h:g_ext_interrupt_handlers) h=no_interrupt_handler; - configure_irq(1, msi_interrupt_handler); - // Enable interrupts in general. - set_csr(mstatus, MSTATUS_MIE); - // Enable the Machine-External bit in MIE - set_csr(mie, MIP_MEIP); -} - -/*! \brief main function - * - */ -int main() { - volatile int * target_mem_base = (int *)(end + 0x10000000); - int * local_mem_base = (int *) end; - int * plic_b_pending = (int *)(0xC0000000+PLIC_PENDING_OFFSET); - - int hartid = read_csr(mhartid); - - platform_init(); - - if (hartid == 0) { - int val_a = 5; - int val_b = 0xA; - *target_mem_base = val_a; - *(target_mem_base+1) = val_b; - *(plic_b_pending) = 2; - printf("HW thread ID %d: write value A=0x%x and value B=0x%x to thread 1\n", hartid, val_a, val_b); - } - - delayUS(100); - - printf("End of execution"); - return 0; -} diff --git a/raven/src/hello_raven.h b/raven/src/hello_raven.h deleted file mode 100644 index f19e20f..0000000 --- a/raven/src/hello_raven.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef HELLO_RAVEN_H_ -#define HELLO_RAVEN_H_ - -extern "C" void handle_m_ext_interrupt(); - -#endif /* HELLO_RAVEN_H_ */ diff --git a/raven/src/io/gpio.h b/raven/src/io/gpio.h deleted file mode 100644 index 466f2d2..0000000 --- a/raven/src/io/gpio.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - * gpio.h - * - * Created on: 29.07.2018 - * Author: eyck - */ - -#ifndef GPIO_H_ -#define GPIO_H_ - -#include -#include - -template -class gpio_regs { -public: - static inline uint32_t& value_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_INPUT_VAL); - } - - static inline uint32_t& input_en_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_INPUT_EN); - } - - static inline uint32_t& output_en_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_OUTPUT_EN); - } - - static inline uint32_t& port_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_OUTPUT_VAL); - } - - static inline uint32_t& pue_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_PULLUP_EN); - } - - static inline uint32_t& ds_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_DRIVE); - } - - static inline uint32_t& rise_ie_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_RISE_IE); - } - - static inline uint32_t& rise_ip_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_RISE_IP); - } - - static inline uint32_t& fall_ie_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_FALL_IE); - } - - static inline uint32_t& fall_ip_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_FALL_IP); - } - - static inline uint32_t& high_ie_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_HIGH_IE); - } - - static inline uint32_t& high_ip_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_HIGH_IP); - } - - static inline uint32_t& low_ie_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_LOW_IE); - } - - static inline uint32_t& low_ip_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_LOW_IP); - } - - static inline uint32_t& iof_en_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_IOF_EN); - } - - static inline uint32_t& iof_sel_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_IOF_SEL); - } - - static inline uint32_t& out_xor_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_OUTPUT_XOR); - } - -}; - - - -#endif /* GPIO_H_ */ diff --git a/raven/src/io/pwm.h b/raven/src/io/pwm.h deleted file mode 100644 index 2aab61b..0000000 --- a/raven/src/io/pwm.h +++ /dev/null @@ -1,122 +0,0 @@ -/* - * pwm.h - * - * Created on: 29.07.2018 - * Author: eyck - */ - -#ifndef PWM_H_ -#define PWM_H_ - -#include -#include "util/bit_field.h" -#include -#include - -template -class pwm_regs { -public: - BEGIN_BF_DECL(pwmcfg_t, uint32_t); - BF_FIELD(scale, 0, 4); - BF_FIELD(sticky, 8, 1); - BF_FIELD(zerocmp, 9, 1); - BF_FIELD(deglitch, 10, 1); - BF_FIELD(enalways, 12, 1); - BF_FIELD(enoneshot, 13, 1); - BF_FIELD(cmp0center, 16, 1); - BF_FIELD(cmp1center, 17, 1); - BF_FIELD(cmp2center, 18, 1); - BF_FIELD(cmp3center, 19, 1); - BF_FIELD(cmp0gang, 24, 1); - BF_FIELD(cmp1gang, 25, 1); - BF_FIELD(cmp2gang, 26, 1); - BF_FIELD(cmp3gang, 27, 1); - BF_FIELD(cmp0ip, 28, 1); - BF_FIELD(cmp1ip, 29, 1); - BF_FIELD(cmp2ip, 30, 1); - BF_FIELD(cmp3ip, 31, 1); - END_BF_DECL(); - - BEGIN_BF_DECL(pwms_t, uint32_t); - BF_FIELD(s, 0, 16); - END_BF_DECL() r_pwms; - - BEGIN_BF_DECL(pwmcmp0_t, uint32_t); - BF_FIELD(cmp0, 0, 16); - END_BF_DECL() r_pwmcmp0; - - BEGIN_BF_DECL(pwmcmp1_t, uint32_t); - BF_FIELD(cmp0, 0, 16); - END_BF_DECL() r_pwmcmp1; - - BEGIN_BF_DECL(pwmcmp2_t, uint32_t); - BF_FIELD(cmp0, 0, 16); - END_BF_DECL() r_pwmcmp2; - - BEGIN_BF_DECL(pwmcmp3_t, uint32_t); - BF_FIELD(cmp0, 0, 16); - END_BF_DECL() r_pwmcmp3; - - static inline pwmcfg_t& cfg_reg(){ - return *reinterpret_cast(BASE_ADDR+PWM_CFG); - } - - static inline uint32_t& count_reg(){ - return *reinterpret_cast(BASE_ADDR+PWM_COUNT); - } - - static inline pwms_t& s_reg(){ - return *reinterpret_cast(BASE_ADDR+PWM_S); - } - - static inline pwmcmp0_t& cmp0_reg(){ - return *reinterpret_cast(BASE_ADDR+PWM_CMP0); - } - - static inline pwmcmp1_t& cmp1_reg(){ - return *reinterpret_cast(BASE_ADDR+PWM_CMP1); - } - - static inline pwmcmp2_t& cmp2_reg(){ - return *reinterpret_cast(BASE_ADDR+PWM_CMP2); - } - - static inline pwmcmp3_t& cmp3_reg(){ - return *reinterpret_cast(BASE_ADDR+PWM_CMP3); - } - - static inline bool oneshot_delay(long delay_us){ - auto scaling_factor=0; - while(delay_us/(1< std::numeric_limits::max()){ - scaling_factor++; - } - cfg_reg()=0; - count_reg()=0; - cfg_reg().scale=4+scaling_factor; // divide by 16 so we get 1us per pwm clock - cmp0_reg().cmp0 = delay_us/(1< -#include "util/bit_field.h" -#include -#include - -template -class spi_regs { -public: - // storage declarations - BEGIN_BF_DECL(sckdiv_t, uint32_t); - BF_FIELD(div, 0, 12); - END_BF_DECL(); - - BEGIN_BF_DECL(sckmode_t, uint32_t); - BF_FIELD(pha, 0, 1); - BF_FIELD(pol, 1, 1); - END_BF_DECL(); - - uint32_t r_csid; - - uint32_t r_csdef; - - BEGIN_BF_DECL(csmode_t, uint32_t); - BF_FIELD(mode, 0, 2); - END_BF_DECL(); - - BEGIN_BF_DECL(delay0_t, uint32_t); - BF_FIELD(cssck, 0, 8); - BF_FIELD(sckcs, 16, 8); - END_BF_DECL(); - - BEGIN_BF_DECL(delay1_t, uint32_t); - BF_FIELD(intercs, 0, 16); - BF_FIELD(interxfr, 16, 8); - END_BF_DECL(); - - BEGIN_BF_DECL(fmt_t, uint32_t); - BF_FIELD(proto, 0, 2); - BF_FIELD(endian, 2, 1); - BF_FIELD(dir, 3, 1); - BF_FIELD(len, 16, 4); - END_BF_DECL(); - - BEGIN_BF_DECL(txdata_t, uint32_t); - BF_FIELD(data, 0, 8); - BF_FIELD(full, 31, 1); - END_BF_DECL() r_txdata; - - BEGIN_BF_DECL(rxdata_t, uint32_t); - BF_FIELD(data, 0, 8); - BF_FIELD(empty, 31, 1); - END_BF_DECL(); - - BEGIN_BF_DECL(txmark_t, uint32_t); - BF_FIELD(txmark, 0, 3); - END_BF_DECL(); - - BEGIN_BF_DECL(rxmark_t, uint32_t); - BF_FIELD(rxmark, 0, 3); - END_BF_DECL(); - - BEGIN_BF_DECL(fctrl_t, uint32_t); - BF_FIELD(en, 0, 1); - END_BF_DECL(); - - BEGIN_BF_DECL(ffmt_t, uint32_t); - BF_FIELD(cmd_en, 0, 1); - BF_FIELD(addr_len, 1, 2); - BF_FIELD(pad_cnt, 3, 4); - BF_FIELD(cmd_proto, 7, 2); - BF_FIELD(addr_proto, 9, 2); - BF_FIELD(data_proto, 11, 2); - BF_FIELD(cmd_code, 16, 8); - BF_FIELD(pad_code, 24, 8); - END_BF_DECL(); - - BEGIN_BF_DECL(ie_t, uint32_t); - BF_FIELD(txwm, 0, 1); - BF_FIELD(rxwm, 1, 1); - END_BF_DECL(); - - BEGIN_BF_DECL(ip_t, uint32_t); - BF_FIELD(txwm, 0, 1); - BF_FIELD(rxwm, 1, 1); - END_BF_DECL(); - - static inline sckdiv_t& sckdiv_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_SCKDIV); - } - - static inline sckmode_t& sckmode_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_SCKMODE); - } - - static inline uint32_t& csid_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_CSID); - } - - static inline uint32_t& csdef_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_CSDEF); - } - - static inline csmode_t& csmode_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_CSMODE); - } - - static inline delay0_t& dcssck_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_DCSSCK); - } - - static inline uint32_t& dsckcs_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_DSCKCS); - } - - static inline delay1_t& dintercs_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_DINTERCS); - } - - static inline uint32_t& dinterxfr_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_DINTERXFR); - } - - static inline fmt_t& fmt_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_FMT); - } - - static inline txdata_t& txfifo_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_TXFIFO); - } - - static inline rxdata_t& rxfifo_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_RXFIFO); - } - - static inline txmark_t& txctrl_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_TXCTRL); - } - - static inline rxmark_t& rxctrl_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_RXCTRL); - } - - static inline fctrl_t& fctrl_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_FCTRL); - } - - static inline ffmt_t& ffmt_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_FFMT); - } - - static inline ie_t& ie_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_IE); - } - - static inline ip_t& ip_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_IP); - } - - template - static bool transfer(std::array& bytes){ - csmode_reg().mode=2; // HOLD mode - rxctrl_reg().rxmark=bytes.size()-1; // trigger irq if more than 2 bytes are received; - ie_reg().rxwm=1; - // write data bytes - for(size_t i=0; i -#include "util/bit_field.h" -#include - -template -class uart_regs { -public: - BEGIN_BF_DECL(txdata_t, uint32_t); - BF_FIELD(data, 0, 8); - BF_FIELD(full, 31, 1); - END_BF_DECL() ; - - BEGIN_BF_DECL(rxdata_t, uint32_t); - BF_FIELD(data, 0, 8); - BF_FIELD(empty, 31, 1); - END_BF_DECL(); - - BEGIN_BF_DECL(txctrl_t, uint32_t); - BF_FIELD(txen, 0, 1); - BF_FIELD(nstop, 1, 1); - BF_FIELD(txcnt, 16, 3); - END_BF_DECL(); - - BEGIN_BF_DECL(rxctrl_t, uint32_t); - BF_FIELD(rxen, 0, 1); - BF_FIELD(rxcnt, 16, 3); - END_BF_DECL(); - - BEGIN_BF_DECL(ie_t, uint32_t); - BF_FIELD(txwm, 0, 1); - BF_FIELD(rxwm, 1, 1); - END_BF_DECL(); - - BEGIN_BF_DECL(ip_t, uint32_t); - BF_FIELD(txwm, 0, 1); - BF_FIELD(rxwm, 1, 1); - END_BF_DECL(); - - BEGIN_BF_DECL(div_t, uint32_t); - BF_FIELD(div, 0, 16); - END_BF_DECL(); - - static inline txdata_t& txdata_reg(){ - return *reinterpret_cast(BASE_ADDR+UART_REG_TXFIFO); - } - - static inline rxdata_t& rxdata_reg(){ - return *reinterpret_cast(BASE_ADDR+UART_REG_RXFIFO); - } - - static inline txctrl_t& txctrl_reg(){ - return *reinterpret_cast(BASE_ADDR+UART_REG_TXCTRL); - } - - static inline rxctrl_t& rxctrl_reg(){ - return *reinterpret_cast(BASE_ADDR+UART_REG_RXCTRL); - } - - static inline ie_t& ie_reg(){ - return *reinterpret_cast(BASE_ADDR+UART_REG_IE); - } - - static inline ip_t& ip_reg(){ - return *reinterpret_cast(BASE_ADDR+UART_REG_IP); - } - - static inline div_t& div_reg(){ - return *reinterpret_cast(BASE_ADDR+UART_REG_DIV); - } - -}; - -#endif /* SPI_H_ */ diff --git a/raven/src/util/bit_field.h b/raven/src/util/bit_field.h deleted file mode 100644 index d4aff48..0000000 --- a/raven/src/util/bit_field.h +++ /dev/null @@ -1,179 +0,0 @@ -/*--------------------------------------------------------- -Copyright (c) 2015 Jeff Preshing - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgement in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. ----------------------------------------------------------*/ - -#ifndef BIT_FIELD_H_ -#define BIT_FIELD_H_ - -#ifndef __CPP11OM_BITFIELD_H__ -#define __CPP11OM_BITFIELD_H__ - -#include - -//--------------------------------------------------------- -// BitFieldMember<>: Used internally by ADD_BITFIELD_MEMBER macro. -// All members are public to simplify compliance with sections 9.0.7 and -// 9.5.1 of the C++11 standard, thereby avoiding undefined behavior. -//--------------------------------------------------------- -template struct BitFieldMember { - T value; - - static_assert(Offset + Bits <= (int)sizeof(T) * 8, "Member exceeds bitfield boundaries"); - static_assert(Bits < (int)sizeof(T) * 8, "Can't fill entire bitfield with one member"); - - static const T Maximum = (T(1) << Bits) - 1; - static const T Mask = Maximum << Offset; - T maximum() const { return Maximum; } - T one() const { return T(1) << Offset; } - - operator T() const { return (value >> Offset) & Maximum; } - - BitFieldMember &operator=(T v) { - assert(v <= Maximum); // v must fit inside the bitfield member - value = (value & ~Mask) | (v << Offset); - return *this; - } - - BitFieldMember &operator+=(T v) { - assert(T(*this) + v <= Maximum); // result must fit inside the bitfield member - value += v << Offset; - return *this; - } - - BitFieldMember &operator-=(T v) { - assert(T(*this) >= v); // result must not underflow - value -= v << Offset; - return *this; - } - - BitFieldMember &operator++() { return *this += 1; } - BitFieldMember operator++(int) { // postfix form - BitFieldMember tmp(*this); - operator++(); - return tmp; - } - BitFieldMember &operator--() { return *this -= 1; } - BitFieldMember operator--(int) { // postfix form - BitFieldMember tmp(*this); - operator--(); - return tmp; - } -}; - -//--------------------------------------------------------- -// BitFieldArray<>: Used internally by ADD_BITFIELD_ARRAY macro. -// All members are public to simplify compliance with sections 9.0.7 and -// 9.5.1 of the C++11 standard, thereby avoiding undefined behavior. -//--------------------------------------------------------- -template class BitFieldArray { -public: - T value; - - static_assert(BaseOffset + BitsPerItem * NumItems <= (int)sizeof(T) * 8, "Array exceeds bitfield boundaries"); - static_assert(BitsPerItem < (int)sizeof(T) * 8, "Can't fill entire bitfield with one array element"); - - static const T Maximum = (T(1) << BitsPerItem) - 1; - T maximum() const { return Maximum; } - int numItems() const { return NumItems; } - - class Element { - private: - T &value; - int offset; - - public: - Element(T &value, int offset) - : value(value) - , offset(offset) {} - T mask() const { return Maximum << offset; } - - operator T() const { return (value >> offset) & Maximum; } - - Element &operator=(T v) { - assert(v <= Maximum); // v must fit inside the bitfield member - value = (value & ~mask()) | (v << offset); - return *this; - } - - Element &operator+=(T v) { - assert(T(*this) + v <= Maximum); // result must fit inside the bitfield member - value += v << offset; - return *this; - } - - Element &operator-=(T v) { - assert(T(*this) >= v); // result must not underflow - value -= v << offset; - return *this; - } - - Element &operator++() { return *this += 1; } - Element operator++(int) { // postfix form - Element tmp(*this); - operator++(); - return tmp; - } - Element &operator--() { return *this -= 1; } - Element operator--(int) { // postfix form - Element tmp(*this); - operator--(); - return tmp; - } - }; - - Element operator[](int i) { - assert(i >= 0 && i < NumItems); // array index must be in range - return Element(value, BaseOffset + BitsPerItem * i); - } - - const Element operator[](int i) const { - assert(i >= 0 && i < NumItems); // array index must be in range - return Element(value, BaseOffset + BitsPerItem * i); - } -}; - -//--------------------------------------------------------- -// Bitfield definition macros. -// All members are public to simplify compliance with sections 9.0.7 and -// 9.5.1 of the C++11 standard, thereby avoiding undefined behavior. -//--------------------------------------------------------- -#define BEGIN_BF_DECL(typeName, T) \ - union typeName { \ - struct Wrapper { \ - T value; \ - }; \ - Wrapper flat; \ - typeName(T v = 0) { flat.value = v; } \ - typeName &operator=(T v) { \ - flat.value = v; \ - return *this; \ - } \ - operator T &() { return flat.value; } \ - operator T() const { return flat.value; } \ - using StorageType = T; - -#define BF_FIELD(memberName, offset, bits) BitFieldMember memberName; - -#define BF_ARRAY(memberName, offset, bits, numItems) BitFieldArray memberName; - -#define END_BF_DECL() } - -#endif // __CPP11OM_BITFIELD_H__ - -#endif /* BIT_FIELD_H_ */ diff --git a/raven/src/wrap_printf.c b/raven/src/wrap_printf.c deleted file mode 100644 index af23b1a..0000000 --- a/raven/src/wrap_printf.c +++ /dev/null @@ -1,271 +0,0 @@ -/* The functions in this file are only meant to support Dhrystone on an - * embedded RV32 system and are obviously incorrect in general. */ - -#include -#include -#include -#include -#include -#include - -#undef putchar -int putchar(int ch) -{ - return write(STDOUT_FILENO, &ch, 1) == 1 ? ch : -1; -} - -static void sprintf_putch(int ch, void** data) -{ - char** pstr = (char**)data; - **pstr = ch; - (*pstr)++; -} - -static unsigned long getuint(va_list *ap, int lflag) -{ - if (lflag) - return va_arg(*ap, unsigned long); - else - return va_arg(*ap, unsigned int); -} - -static long getint(va_list *ap, int lflag) -{ - if (lflag) - return va_arg(*ap, long); - else - return va_arg(*ap, int); -} - -static inline void printnum(void (*putch)(int, void**), void **putdat, - unsigned long num, unsigned base, int width, int padc) -{ - unsigned digs[sizeof(num)*8]; - int pos = 0; - - while (1) - { - digs[pos++] = num % base; - if (num < base) - break; - num /= base; - } - - while (width-- > pos) - putch(padc, putdat); - - while (pos-- > 0) - putch(digs[pos] + (digs[pos] >= 10 ? 'a' - 10 : '0'), putdat); -} - -static inline void print_double(void (*putch)(int, void**), void **putdat, - double num, int width, int prec) -{ - union { - double d; - uint64_t u; - } u; - u.d = num; - - if (u.u & (1ULL << 63)) { - putch('-', putdat); - u.u &= ~(1ULL << 63); - } - - for (int i = 0; i < prec; i++) - u.d *= 10; - - char buf[32], *pbuf = buf; - printnum(sprintf_putch, (void**)&pbuf, (unsigned long)u.d, 10, 0, 0); - if (prec > 0) { - for (int i = 0; i < prec; i++) { - pbuf[-i] = pbuf[-i-1]; - } - pbuf[-prec] = '.'; - pbuf++; - } - - for (char* p = buf; p < pbuf; p++) - putch(*p, putdat); -} - -static void vprintfmt(void (*putch)(int, void**), void **putdat, const char *fmt, va_list ap) -{ - register const char* p; - const char* last_fmt; - register int ch, err; - unsigned long num; - int base, lflag, width, precision, altflag; - char padc; - - while (1) { - while ((ch = *(unsigned char *) fmt) != '%') { - if (ch == '\0') - return; - fmt++; - putch(ch, putdat); - } - fmt++; - - // Process a %-escape sequence - last_fmt = fmt; - padc = ' '; - width = -1; - precision = -1; - lflag = 0; - altflag = 0; - reswitch: - switch (ch = *(unsigned char *) fmt++) { - - // flag to pad on the right - case '-': - padc = '-'; - goto reswitch; - - // flag to pad with 0's instead of spaces - case '0': - padc = '0'; - goto reswitch; - - // width field - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - for (precision = 0; ; ++fmt) { - precision = precision * 10 + ch - '0'; - ch = *fmt; - if (ch < '0' || ch > '9') - break; - } - goto process_precision; - - case '*': - precision = va_arg(ap, int); - goto process_precision; - - case '.': - if (width < 0) - width = 0; - goto reswitch; - - case '#': - altflag = 1; - goto reswitch; - - process_precision: - if (width < 0) - width = precision, precision = -1; - goto reswitch; - - // long flag - case 'l': - if (lflag) - goto bad; - goto reswitch; - - // character - case 'c': - putch(va_arg(ap, int), putdat); - break; - - // double - case 'f': - print_double(putch, putdat, va_arg(ap, double), width, precision); - break; - - // string - case 's': - if ((p = va_arg(ap, char *)) == NULL) - p = "(null)"; - if (width > 0 && padc != '-') - for (width -= strnlen(p, precision); width > 0; width--) - putch(padc, putdat); - for (; (ch = *p) != '\0' && (precision < 0 || --precision >= 0); width--) { - putch(ch, putdat); - p++; - } - for (; width > 0; width--) - putch(' ', putdat); - break; - - // (signed) decimal - case 'd': - num = getint(&ap, lflag); - if ((long) num < 0) { - putch('-', putdat); - num = -(long) num; - } - base = 10; - goto signed_number; - - // unsigned decimal - case 'u': - base = 10; - goto unsigned_number; - - // (unsigned) octal - case 'o': - // should do something with padding so it's always 3 octits - base = 8; - goto unsigned_number; - - // pointer - case 'p': - lflag = 1; - putch('0', putdat); - putch('x', putdat); - /* fall through to 'x' */ - - // (unsigned) hexadecimal - case 'x': - base = 16; - unsigned_number: - num = getuint(&ap, lflag); - signed_number: - printnum(putch, putdat, num, base, width, padc); - break; - - // escaped '%' character - case '%': - putch(ch, putdat); - break; - - // unrecognized escape sequence - just print it literally - default: - bad: - putch('%', putdat); - fmt = last_fmt; - break; - } - } -} - -int __wrap_printf(const char* fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - - vprintfmt((void*)putchar, 0, fmt, ap); - - va_end(ap); - return 0; // incorrect return value, but who cares, anyway? -} - -int __wrap_sprintf(char* str, const char* fmt, ...) -{ - va_list ap; - char* str0 = str; - va_start(ap, fmt); - - vprintfmt(sprintf_putch, (void**)&str, fmt, ap); - *str = 0; - - va_end(ap); - return str - str0; -} diff --git a/raven/toolchain-rv32.cmake b/raven/toolchain-rv32.cmake deleted file mode 100644 index bd5ee3b..0000000 --- a/raven/toolchain-rv32.cmake +++ /dev/null @@ -1,33 +0,0 @@ -set(CMAKE_SYSTEM_NAME Linux) -set(CMAKE_SYSTEM_VERSION 1) -set(CMAKE_SYSTEM_PROCESSOR riscv) - -set(TOOLCHAIN_DIR /opt/riscv/tools) -set(ARCHITECTURE riscv64-unknown-elf) - -set(CMAKE_C_COMPILER ${ARCHITECTURE}-gcc -set(CMAKE_CXX_COMPILER ${ARCHITECTURE}-g++ -set(RISCV_LINUX_SYSROOT /opt/riscv/tools CACHE PATH "RISC-V cross compilation system root") # search path for the cross compile toolchain - -set(CMAKE_CXX_FLAGS "" CACHE STRING "c++ flags") -set(CMAKE_C_FLAGS "" CACHE STRING "c flags") -set(CMAKE_SHARED_LINKER_FLAGS "" CACHE STRING "shared linker flags") -set(CMAKE_MODULE_LINKER_FLAGS "" CACHE STRING "module linker flags") -set(CMAKE_EXE_LINKER_FLAGS "" CACHE STRING "executable linker flags") - -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=rv32imac -mabi=ilp32") -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=rv32imac -mabi=ilp32") -#set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}") -#set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}") -set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -march=rv32imac -mabi=ilp32") - -set(COMPILER_IS_RV32 "1") #flags for the CMakeList.txt -#add_definitions(-D_ARM_TEGRA3) # C/C++ preprocessor macro, which will be used in many many files - -set(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN_DIR}/${ARCHITECTURE}) - -include_directories(${TOOLCHAIN_DIR}/${ARCHITECTURE}/include) - -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) \ No newline at end of file diff --git a/raven_spn/.cproject b/raven_spn/.cproject deleted file mode 100644 index 1135715..0000000 --- a/raven_spn/.cproject +++ /dev/null @@ -1,235 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - make - - all - true - true - true - - - make - - clean - true - true - true - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/raven_spn/Makefile b/raven_spn/Makefile deleted file mode 100644 index ad85959..0000000 --- a/raven_spn/Makefile +++ /dev/null @@ -1,27 +0,0 @@ - -TARGET = raven_spn -C_SRCS = $(wildcard src/*.c) $(BSP_BASE)/drivers/fe300prci/fe300prci_driver.c $(BSP_BASE)/drivers/plic/plic_driver.c -CXX_SRCS = $(wildcard src/*.cpp) -HEADERS = $(wildcard src/*.h) -CFLAGS = -g -fno-builtin-printf -DUSE_PLIC -I./src -CXXFLAGS = -fno-use-cxa-atexit -LDFLAGS += -g -lstdc++ -fno-use-cxa-atexit -march=$(RISCV_ARCH) -mabi=$(RISCV_ABI) -mcmodel=medany - - -BOARD=freedom-e300-hifive1 -LINK_TARGET=flash -RISCV_ARCH=rv32imac -RISCV_ABI=ilp32 - -TOOL_DIR=/opt/shared/riscv/tools/Ubuntu/riscv64-unknown-elf-gcc-8.3.0-2020.04.1-x86_64-linux-ubuntu14/bin - -BSP_BASE = ./bsp -include $(BSP_BASE)/env/common.mk - -.PHONY: all -all: $(TARGET).dump - -$(TARGET).dump: $(TARGET) - $(TOOL_DIR)/$(TRIPLET)-objdump -d -S -C $< > $@ - - diff --git a/raven_spn/bsp/drivers/clic/clic_driver.c b/raven_spn/bsp/drivers/clic/clic_driver.c deleted file mode 100644 index 0612e58..0000000 --- a/raven_spn/bsp/drivers/clic/clic_driver.c +++ /dev/null @@ -1,163 +0,0 @@ -// See LICENSE for license details. - -#include "sifive/devices/clic.h" -#include "clic/clic_driver.h" -#include "platform.h" -#include "encoding.h" -#include - - -void volatile_memzero(uint8_t * base, unsigned int size) { - volatile uint8_t * ptr; - for (ptr = base; ptr < (base + size); ptr++){ - *ptr = 0; - } -} - -// Note that there are no assertions or bounds checking on these -// parameter values. -void clic_init ( - clic_instance_t * this_clic, - uintptr_t hart_addr, - interrupt_function_ptr_t* vect_table, - interrupt_function_ptr_t default_handler, - uint32_t num_irq, - uint32_t num_config_bits - ) -{ - this_clic->hart_addr= hart_addr; - this_clic->vect_table= vect_table; - this_clic->num_config_bits= num_config_bits; - - //initialize vector table - for(int i=0;i++;ivect_table[i] = default_handler; - } - - //set base vectors - write_csr(mtvt, vect_table); - - - //clear all interrupt enables and pending - volatile_memzero((uint8_t*)(this_clic->hart_addr+CLIC_INTIE), num_irq); - volatile_memzero((uint8_t*)(this_clic->hart_addr+CLIC_INTIP), num_irq); - - //clear nlbits and nvbits; all interrupts trap to level 15 - *(volatile uint8_t*)(this_clic->hart_addr+CLIC_CFG)=0; - -} - -void clic_install_handler (clic_instance_t * this_clic, uint32_t source, interrupt_function_ptr_t handler) { - this_clic->vect_table[source] = handler; -} - -void clic_enable_interrupt (clic_instance_t * this_clic, uint32_t source) { - *(volatile uint8_t*)(this_clic->hart_addr+CLIC_INTIE+source) = 1; -} - -void clic_disable_interrupt (clic_instance_t * this_clic, uint32_t source){ - *(volatile uint8_t*)(this_clic->hart_addr+CLIC_INTIE+source) = 0; -} - -void clic_set_pending(clic_instance_t * this_clic, uint32_t source){ - *(volatile uint8_t*)(this_clic->hart_addr+CLIC_INTIP+source) = 1; -} - -void clic_clear_pending(clic_instance_t * this_clic, uint32_t source){ - *(volatile uint8_t*)(this_clic->hart_addr+CLIC_INTIP+source) = 0; -} - -void clic_set_intcfg (clic_instance_t * this_clic, uint32_t source, uint32_t intcfg){ - *(volatile uint8_t*)(this_clic->hart_addr+CLIC_INTCFG+source) = intcfg; -} - -uint8_t clic_get_intcfg (clic_instance_t * this_clic, uint32_t source){ - return *(volatile uint8_t*)(this_clic->hart_addr+CLIC_INTCFG+source); -} - -void clic_set_cliccfg (clic_instance_t * this_clic, uint32_t cfg){ - *(volatile uint8_t*)(this_clic->hart_addr+CLIC_CFG) = cfg; -} - -uint8_t clic_get_cliccfg (clic_instance_t * this_clic){ - return *(volatile uint8_t*)(this_clic->hart_addr+CLIC_CFG); -} - -//sets an interrupt level based encoding of nmbits, nlbits -uint8_t clic_set_int_level( clic_instance_t * this_clic, uint32_t source, uint8_t level) { - //extract nlbits - uint8_t nlbits = clic_get_cliccfg(this_clic); - nlbits = (nlbits >>1) & 0x7; - - //shift level right to mask off unused bits - level = level>>((this_clic->num_config_bits)-nlbits); //plus this_clic->nmbits which is always 0 for now. - //shift level into correct bit position - level = level << (8-this_clic->num_config_bits) + (this_clic->num_config_bits - nlbits); - - //write to clicintcfg - uint8_t current_intcfg = clic_get_intcfg(this_clic, source); - clic_set_intcfg(this_clic, source, (current_intcfg | level)); - - return level; -} - -//gets an interrupt level based encoding of nmbits, nlbits -uint8_t clic_get_int_level( clic_instance_t * this_clic, uint32_t source) { - uint8_t level; - level = clic_get_intcfg(this_clic, source); - - //extract nlbits - uint8_t nlbits = clic_get_cliccfg(this_clic); - nlbits = (nlbits >>1) & 0x7; - - //shift level - level = level >> (8-(this_clic->num_config_bits)); - - //shift level right to mask off priority bits - level = level>>(this_clic->num_config_bits-nlbits); //this_clic->nmbits which is always 0 for now. - - return level; -} - -//sets an interrupt priority based encoding of nmbits, nlbits -uint8_t clic_set_int_priority( clic_instance_t * this_clic, uint32_t source, uint8_t priority) { - //priority bits = num_config_bits - nlbits - //extract nlbits - uint8_t nlbits = clic_get_cliccfg(this_clic); - nlbits = (nlbits >>1) & 0x7; - - uint8_t priority_bits = this_clic->num_config_bits-nlbits; - if(priority_bits = 0) { - //no bits to set - return 0; - } - //mask off unused bits - priority = priority >> (8-priority_bits); - //shift into the correct bit position - priority = priority << (8-(this_clic->num_config_bits)); - - //write to clicintcfg - uint8_t current_intcfg = clic_get_intcfg(this_clic, source); - clic_set_intcfg(this_clic, source, (current_intcfg | priority)); - return current_intcfg; -} - -//gets an interrupt priority based encoding of nmbits, nlbits -uint8_t clic_get_int_priority( clic_instance_t * this_clic, uint32_t source) { - uint8_t priority; - priority = clic_get_intcfg(this_clic, source); - - //extract nlbits - uint8_t nlbits = clic_get_cliccfg(this_clic); - nlbits = (nlbits >>1) & 0x7; - - //shift left to mask off level bits - priority = priority << nlbits; - - //shift priority - priority = priority >> (8-((this_clic->num_config_bits)+nlbits)); - - return priority; -} - - diff --git a/raven_spn/bsp/drivers/clic/clic_driver.h b/raven_spn/bsp/drivers/clic/clic_driver.h deleted file mode 100644 index 27c34c2..0000000 --- a/raven_spn/bsp/drivers/clic/clic_driver.h +++ /dev/null @@ -1,44 +0,0 @@ -// See LICENSE file for licence details - -#ifndef PLIC_DRIVER_H -#define PLIC_DRIVER_H - - -__BEGIN_DECLS - -#include "platform.h" - -typedef void (*interrupt_function_ptr_t) (void); - -typedef struct __clic_instance_t -{ - uintptr_t hart_addr; - interrupt_function_ptr_t* vect_table; - uint32_t num_config_bits; - uint32_t num_sources; -} clic_instance_t; - -// Note that there are no assertions or bounds checking on these -// parameter values. -void clic_init (clic_instance_t * this_clic, uintptr_t hart_addr, interrupt_function_ptr_t* vect_table, interrupt_function_ptr_t default_handler, uint32_t num_irq,uint32_t num_config_bits); -void clic_install_handler (clic_instance_t * this_clic, uint32_t source, interrupt_function_ptr_t handler); -void clic_enable_interrupt (clic_instance_t * this_clic, uint32_t source); -void clic_disable_interrupt (clic_instance_t * this_clic, uint32_t source); -void clic_set_pending(clic_instance_t * this_clic, uint32_t source); -void clic_clear_pending(clic_instance_t * this_clic, uint32_t source); -void clic_set_intcfg (clic_instance_t * this_clic, uint32_t source, uint32_t intcfg); -uint8_t clic_get_intcfg (clic_instance_t * this_clic, uint32_t source); -void clic_set_cliccfg (clic_instance_t * this_clic, uint32_t cfg); -uint8_t clic_get_cliccfg (clic_instance_t * this_clic); -//sets an interrupt level based encoding of nmbits, nlbits -uint8_t clic_set_int_level( clic_instance_t * this_clic, uint32_t source, uint8_t level); -//get an interrupt level based encoding of nmbits, nlbits -uint8_t clic_get_int_level( clic_instance_t * this_clic, uint32_t source); -//sets an interrupt priority based encoding of nmbits, nlbits -uint8_t clic_set_int_priority( clic_instance_t * this_clic, uint32_t source, uint8_t priority); -//sets an interrupt priority based encoding of nmbits, nlbits -uint8_t clic_get_int_priority( clic_instance_t * this_clic, uint32_t source); - -__END_DECLS - -#endif diff --git a/raven_spn/bsp/drivers/fe300prci/fe300prci_driver.c b/raven_spn/bsp/drivers/fe300prci/fe300prci_driver.c deleted file mode 100644 index 8eeaafc..0000000 --- a/raven_spn/bsp/drivers/fe300prci/fe300prci_driver.c +++ /dev/null @@ -1,252 +0,0 @@ -// See LICENSE file for license details - -#include "platform.h" - -#ifdef PRCI_CTRL_ADDR -#include "fe300prci/fe300prci_driver.h" -#include - -#define rdmcycle(x) { \ - uint32_t lo, hi, hi2; \ - __asm__ __volatile__ ("1:\n\t" \ - "csrr %0, mcycleh\n\t" \ - "csrr %1, mcycle\n\t" \ - "csrr %2, mcycleh\n\t" \ - "bne %0, %2, 1b\n\t" \ - : "=r" (hi), "=r" (lo), "=r" (hi2)) ; \ - *(x) = lo | ((uint64_t) hi << 32); \ - } - -uint32_t PRCI_measure_mcycle_freq(uint32_t mtime_ticks, uint32_t mtime_freq) -{ - - uint32_t start_mtime = CLINT_REG(CLINT_MTIME); - uint32_t end_mtime = start_mtime + mtime_ticks + 1; - - // Make sure we won't get rollover. - while (end_mtime < start_mtime){ - start_mtime = CLINT_REG(CLINT_MTIME); - end_mtime = start_mtime + mtime_ticks + 1; - } - - // Don't start measuring until mtime edge. - uint32_t tmp = start_mtime; - do { - start_mtime = CLINT_REG(CLINT_MTIME); - } while (start_mtime == tmp); - - uint64_t start_mcycle; - rdmcycle(&start_mcycle); - - while (CLINT_REG(CLINT_MTIME) < end_mtime) ; - - uint64_t end_mcycle; - rdmcycle(&end_mcycle); - uint32_t difference = (uint32_t) (end_mcycle - start_mcycle); - - uint64_t freq = ((uint64_t) difference * mtime_freq) / mtime_ticks; - return (uint32_t) freq & 0xFFFFFFFF; - -} - - -void PRCI_use_hfrosc(int div, int trim) -{ - // Make sure the HFROSC is running at its default setting - // It is OK to change this even if we are running off of it. - - PRCI_REG(PRCI_HFROSCCFG) = (ROSC_DIV(div) | ROSC_TRIM(trim) | ROSC_EN(1)); - - while ((PRCI_REG(PRCI_HFROSCCFG) & ROSC_RDY(1)) == 0); - - PRCI_REG(PRCI_PLLCFG) &= ~PLL_SEL(1); -} - -void PRCI_use_pll(int refsel, int bypass, - int r, int f, int q, int finaldiv, - int hfroscdiv, int hfrosctrim) -{ - // Ensure that we aren't running off the PLL before we mess with it. - if (PRCI_REG(PRCI_PLLCFG) & PLL_SEL(1)) { - // Make sure the HFROSC is running at its default setting - PRCI_use_hfrosc(4, 16); - } - - // Set PLL Source to be HFXOSC if desired. - uint32_t config_value = 0; - - config_value |= PLL_REFSEL(refsel); - - if (bypass) { - // Bypass - config_value |= PLL_BYPASS(1); - - PRCI_REG(PRCI_PLLCFG) = config_value; - - // If we don't have an HFXTAL, this doesn't really matter. - // Set our Final output divide to divide-by-1: - PRCI_REG(PRCI_PLLDIV) = (PLL_FINAL_DIV_BY_1(1) | PLL_FINAL_DIV(0)); - } else { - - // To overclock, use the hfrosc - if (hfrosctrim >= 0 && hfroscdiv >= 0) { - PRCI_use_hfrosc(hfroscdiv, hfrosctrim); - } - - // Set DIV Settings for PLL - - // (Legal values of f_REF are 6-48MHz) - - // Set DIVR to divide-by-2 to get 8MHz frequency - // (legal values of f_R are 6-12 MHz) - - config_value |= PLL_BYPASS(1); - config_value |= PLL_R(r); - - // Set DIVF to get 512Mhz frequncy - // There is an implied multiply-by-2, 16Mhz. - // So need to write 32-1 - // (legal values of f_F are 384-768 MHz) - config_value |= PLL_F(f); - - // Set DIVQ to divide-by-2 to get 256 MHz frequency - // (legal values of f_Q are 50-400Mhz) - config_value |= PLL_Q(q); - - // Set our Final output divide to divide-by-1: - if (finaldiv == 1){ - PRCI_REG(PRCI_PLLDIV) = (PLL_FINAL_DIV_BY_1(1) | PLL_FINAL_DIV(0)); - } else { - PRCI_REG(PRCI_PLLDIV) = (PLL_FINAL_DIV(finaldiv-1)); - } - - PRCI_REG(PRCI_PLLCFG) = config_value; - - // Un-Bypass the PLL. - PRCI_REG(PRCI_PLLCFG) &= ~PLL_BYPASS(1); - - // Wait for PLL Lock - // Note that the Lock signal can be glitchy. - // Need to wait 100 us - // RTC is running at 32kHz. - // So wait 4 ticks of RTC. - uint32_t now = CLINT_REG(CLINT_MTIME); - while (CLINT_REG(CLINT_MTIME) - now < 4) ; - - // Now it is safe to check for PLL Lock - while ((PRCI_REG(PRCI_PLLCFG) & PLL_LOCK(1)) == 0); - - } - - // Switch over to PLL Clock source - PRCI_REG(PRCI_PLLCFG) |= PLL_SEL(1); - - // If we're running off HFXOSC, turn off the HFROSC to - // save power. - if (refsel) { - PRCI_REG(PRCI_HFROSCCFG) &= ~ROSC_EN(1); - } - -} - -void PRCI_use_default_clocks() -{ - // Turn off the LFROSC - AON_REG(AON_LFROSC) &= ~ROSC_EN(1); - - // Use HFROSC - PRCI_use_hfrosc(4, 16); -} - -void PRCI_use_hfxosc(uint32_t finaldiv) -{ - - PRCI_use_pll(1, // Use HFXTAL - 1, // Bypass = 1 - 0, // PLL settings don't matter - 0, // PLL settings don't matter - 0, // PLL settings don't matter - finaldiv, - -1, - -1); -} - -// This is a generic function, which -// doesn't span the entire range of HFROSC settings. -// It only adjusts the trim, which can span a hundred MHz or so. -// This function does not check the legality of the PLL settings -// at all, and it is quite possible to configure invalid PLL settings -// this way. -// It returns the actual measured CPU frequency. - -uint32_t PRCI_set_hfrosctrim_for_f_cpu(uint32_t f_cpu, PRCI_freq_target target ) -{ - - uint32_t hfrosctrim = 0; - uint32_t hfroscdiv = 4; - uint32_t prev_trim = 0; - - // In this function we use PLL settings which - // will give us a 32x multiplier from the output - // of the HFROSC source to the output of the - // PLL. We first measure our HFROSC to get the - // right trim, then finally use it as the PLL source. - // We should really check here that the f_cpu - // requested is something in the limit of the PLL. For - // now that is up to the user. - - // This will undershoot for frequencies not divisible by 16. - uint32_t desired_hfrosc_freq = (f_cpu/ 16); - - PRCI_use_hfrosc(hfroscdiv, hfrosctrim); - - // Ignore the first run (for icache reasons) - uint32_t cpu_freq = PRCI_measure_mcycle_freq(3000, RTC_FREQ); - - cpu_freq = PRCI_measure_mcycle_freq(3000, RTC_FREQ); - uint32_t prev_freq = cpu_freq; - - while ((cpu_freq < desired_hfrosc_freq) && (hfrosctrim < 0x1F)){ - prev_trim = hfrosctrim; - prev_freq = cpu_freq; - hfrosctrim ++; - PRCI_use_hfrosc(hfroscdiv, hfrosctrim); - cpu_freq = PRCI_measure_mcycle_freq(3000, RTC_FREQ); - } - - // We couldn't go low enough - if (prev_freq > desired_hfrosc_freq){ - PRCI_use_pll(0, 0, 1, 31, 1, 1, hfroscdiv, prev_trim); - cpu_freq = PRCI_measure_mcycle_freq(1000, RTC_FREQ); - return cpu_freq; - } - - // We couldn't go high enough - if (cpu_freq < desired_hfrosc_freq){ - PRCI_use_pll(0, 0, 1, 31, 1, 1, hfroscdiv, prev_trim); - cpu_freq = PRCI_measure_mcycle_freq(1000, RTC_FREQ); - return cpu_freq; - } - - // Check for over/undershoot - switch(target) { - case(PRCI_FREQ_CLOSEST): - if ((desired_hfrosc_freq - prev_freq) < (cpu_freq - desired_hfrosc_freq)) { - PRCI_use_pll(0, 0, 1, 31, 1, 1, hfroscdiv, prev_trim); - } else { - PRCI_use_pll(0, 0, 1, 31, 1, 1, hfroscdiv, hfrosctrim); - } - break; - case(PRCI_FREQ_UNDERSHOOT): - PRCI_use_pll(0, 0, 1, 31, 1, 1, hfroscdiv, prev_trim); - break; - default: - PRCI_use_pll(0, 0, 1, 31, 1, 1, hfroscdiv, hfrosctrim); - } - - cpu_freq = PRCI_measure_mcycle_freq(1000, RTC_FREQ); - return cpu_freq; - -} - -#endif diff --git a/raven_spn/bsp/drivers/fe300prci/fe300prci_driver.h b/raven_spn/bsp/drivers/fe300prci/fe300prci_driver.h deleted file mode 100644 index 7100f46..0000000 --- a/raven_spn/bsp/drivers/fe300prci/fe300prci_driver.h +++ /dev/null @@ -1,79 +0,0 @@ -// See LICENSE file for license details - -#ifndef _FE300PRCI_DRIVER_H_ -#define _FE300PRCI_DRIVER_H_ - -__BEGIN_DECLS - -#include - -typedef enum prci_freq_target { - - PRCI_FREQ_OVERSHOOT, - PRCI_FREQ_CLOSEST, - PRCI_FREQ_UNDERSHOOT - -} PRCI_freq_target; - -/* Measure and return the approximate frequency of the - * CPU, as given by measuring the mcycle counter against - * the mtime ticks. - */ -uint32_t PRCI_measure_mcycle_freq(uint32_t mtime_ticks, uint32_t mtime_freq); - -/* Safely switch over to the HFROSC using the given div - * and trim settings. - */ -void PRCI_use_hfrosc(int div, int trim); - -/* Safely switch over to the 16MHz HFXOSC, - * applying the finaldiv clock divider (1 is the lowest - * legal value). - */ -void PRCI_use_hfxosc(uint32_t finaldiv); - -/* Safely switch over to the PLL using the given - * settings. - * - * Note that not all combinations of the inputs are actually - * legal, and this function does not check for their - * legality ("safely" means that this function won't turn off - * or glitch the clock the CPU is actually running off, but - * doesn't protect against you making it too fast or slow.) - */ - -void PRCI_use_pll(int refsel, int bypass, - int r, int f, int q, int finaldiv, - int hfroscdiv, int hfrosctrim); - -/* Use the default clocks configured at reset. - * This is ~16Mhz HFROSC and turns off the LFROSC - * (on the current FE310 Dev Platforms, an external LFROSC is - * used as it is more power efficient). - */ -void PRCI_use_default_clocks(); - -/* This routine will adjust the HFROSC trim - * while using HFROSC as the clock source, - * measure the resulting frequency, then - * use it as the PLL clock source, - * in an attempt to get over, under, or close to the - * requested frequency. It returns the actual measured - * frequency. - * - * Note that the requested frequency must be within the - * range supported by the PLL so not all values are - * achievable with this function, and not all - * are guaranteed to actually work. The PLL - * is rated higher than the hardware. - * - * There is no check on the desired f_cpu frequency, it - * is up to the user to specify something reasonable. - */ - -uint32_t PRCI_set_hfrosctrim_for_f_cpu(uint32_t f_cpu, PRCI_freq_target target); - -__END_DECLS - -#endif - diff --git a/raven_spn/bsp/drivers/plic/plic_driver.c b/raven_spn/bsp/drivers/plic/plic_driver.c deleted file mode 100644 index 4f41bda..0000000 --- a/raven_spn/bsp/drivers/plic/plic_driver.c +++ /dev/null @@ -1,122 +0,0 @@ -// See LICENSE for license details. - -#include "sifive/devices/plic.h" -#include "plic/plic_driver.h" -#include "platform.h" -#include "encoding.h" -#include - - -// Note that there are no assertions or bounds checking on these -// parameter values. - -void volatile_memzero(uint8_t * base, unsigned int size) -{ - volatile uint8_t * ptr; - for (ptr = base; ptr < (base + size); ptr++){ - *ptr = 0; - } -} - -void PLIC_init ( - plic_instance_t * this_plic, - uintptr_t base_addr, - uint32_t num_sources, - uint32_t num_priorities, - uint32_t target_hartid - ) -{ - - this_plic->base_addr = base_addr; - this_plic->num_sources = num_sources; - this_plic->num_priorities = num_priorities; - this_plic->target_hartid = target_hartid; - - // Disable all interrupts (don't assume that these registers are reset). - volatile_memzero((uint8_t*) (this_plic->base_addr + - PLIC_ENABLE_OFFSET + - (this_plic->target_hartid << PLIC_ENABLE_SHIFT_PER_TARGET)), - (num_sources + 8) / 8); - - // Set all priorities to 0 (equal priority -- don't assume that these are reset). - volatile_memzero ((uint8_t *)(this_plic->base_addr + - PLIC_PRIORITY_OFFSET), - (num_sources + 1) << PLIC_PRIORITY_SHIFT_PER_SOURCE); - - // Set the threshold to 0. - volatile plic_threshold* threshold = (plic_threshold*) - (this_plic->base_addr + - PLIC_THRESHOLD_OFFSET + - (this_plic->target_hartid << PLIC_THRESHOLD_SHIFT_PER_TARGET)); - - *threshold = 0; - -} - -void PLIC_set_threshold (plic_instance_t * this_plic, - plic_threshold threshold){ - - volatile plic_threshold* threshold_ptr = (plic_threshold*) (this_plic->base_addr + - PLIC_THRESHOLD_OFFSET + - (this_plic->target_hartid << PLIC_THRESHOLD_SHIFT_PER_TARGET)); - - *threshold_ptr = threshold; - -} - - -void PLIC_enable_interrupt (plic_instance_t * this_plic, plic_source source){ - - volatile uint8_t * current_ptr = (volatile uint8_t *)(this_plic->base_addr + - PLIC_ENABLE_OFFSET + - (this_plic->target_hartid << PLIC_ENABLE_SHIFT_PER_TARGET) + - (source >> 3)); - uint8_t current = *current_ptr; - current = current | ( 1 << (source & 0x7)); - *current_ptr = current; - -} - -void PLIC_disable_interrupt (plic_instance_t * this_plic, plic_source source){ - - volatile uint8_t * current_ptr = (volatile uint8_t *) (this_plic->base_addr + - PLIC_ENABLE_OFFSET + - (this_plic->target_hartid << PLIC_ENABLE_SHIFT_PER_TARGET) + - (source >> 3)); - uint8_t current = *current_ptr; - current = current & ~(( 1 << (source & 0x7))); - *current_ptr = current; - -} - -void PLIC_set_priority (plic_instance_t * this_plic, plic_source source, plic_priority priority){ - - if (this_plic->num_priorities > 0) { - volatile plic_priority * priority_ptr = (volatile plic_priority *) - (this_plic->base_addr + - PLIC_PRIORITY_OFFSET + - (source << PLIC_PRIORITY_SHIFT_PER_SOURCE)); - *priority_ptr = priority; - } -} - -plic_source PLIC_claim_interrupt(plic_instance_t * this_plic){ - - volatile plic_source * claim_addr = (volatile plic_source * ) - (this_plic->base_addr + - PLIC_CLAIM_OFFSET + - (this_plic->target_hartid << PLIC_CLAIM_SHIFT_PER_TARGET)); - - return *claim_addr; - -} - -void PLIC_complete_interrupt(plic_instance_t * this_plic, plic_source source){ - - volatile plic_source * claim_addr = (volatile plic_source *) (this_plic->base_addr + - PLIC_CLAIM_OFFSET + - (this_plic->target_hartid << PLIC_CLAIM_SHIFT_PER_TARGET)); - *claim_addr = source; - -} - diff --git a/raven_spn/bsp/drivers/plic/plic_driver.h b/raven_spn/bsp/drivers/plic/plic_driver.h deleted file mode 100644 index f7201ee..0000000 --- a/raven_spn/bsp/drivers/plic/plic_driver.h +++ /dev/null @@ -1,52 +0,0 @@ -// See LICENSE file for licence details - -#ifndef PLIC_DRIVER_H -#define PLIC_DRIVER_H - - -__BEGIN_DECLS - -#include "platform.h" - -typedef struct __plic_instance_t -{ - uintptr_t base_addr; - - uint32_t num_sources; - uint32_t num_priorities; - uint32_t target_hartid; -} plic_instance_t; - -typedef uint32_t plic_source; -typedef uint32_t plic_priority; -typedef uint32_t plic_threshold; - -void PLIC_init ( - plic_instance_t * this_plic, - uintptr_t base_addr, - uint32_t num_sources, - uint32_t num_priorities, - uint32_t target_hartid - ); - -void PLIC_set_threshold (plic_instance_t * this_plic, - plic_threshold threshold); - -void PLIC_enable_interrupt (plic_instance_t * this_plic, - plic_source source); - -void PLIC_disable_interrupt (plic_instance_t * this_plic, - plic_source source); - -void PLIC_set_priority (plic_instance_t * this_plic, - plic_source source, - plic_priority priority); - -plic_source PLIC_claim_interrupt(plic_instance_t * this_plic); - -void PLIC_complete_interrupt(plic_instance_t * this_plic, - plic_source source); - -__END_DECLS - -#endif diff --git a/raven_spn/bsp/env/common.mk b/raven_spn/bsp/env/common.mk deleted file mode 100644 index 0ca2c70..0000000 --- a/raven_spn/bsp/env/common.mk +++ /dev/null @@ -1,66 +0,0 @@ -# See LICENSE for license details. - -ifndef _SIFIVE_MK_COMMON -_SIFIVE_MK_COMMON := # defined - -.PHONY: all -all: $(TARGET) - -include $(BSP_BASE)/libwrap/libwrap.mk - -ENV_DIR = $(BSP_BASE)/env -PLATFORM_DIR = $(ENV_DIR)/$(BOARD) - -ASM_SRCS += $(ENV_DIR)/start.S -ASM_SRCS += $(ENV_DIR)/entry.S -C_SRCS += $(PLATFORM_DIR)/init.c - -LINKER_SCRIPT := $(PLATFORM_DIR)/$(LINK_TARGET).lds - -INCLUDES += -I$(BSP_BASE)/include -INCLUDES += -I$(BSP_BASE)/drivers/ -INCLUDES += -I$(ENV_DIR) -INCLUDES += -I$(PLATFORM_DIR) - -TOOL_DIR ?= $(BSP_BASE)/../toolchain/bin - -LDFLAGS += -T $(LINKER_SCRIPT) -nostartfiles -LDFLAGS += -L$(ENV_DIR) --specs=nano.specs - -ASM_OBJS := $(ASM_SRCS:.S=.o) -C_OBJS := $(C_SRCS:.c=.o) -CXX_OBJS := $(CXX_SRCS:.cpp=.o) - -LINK_OBJS += $(ASM_OBJS) $(C_OBJS) $(CXX_OBJS) -LINK_DEPS += $(LINKER_SCRIPT) - -CLEAN_OBJS += $(TARGET) $(LINK_OBJS) - -CFLAGS += -march=$(RISCV_ARCH) -CFLAGS += -mabi=$(RISCV_ABI) -CFLAGS += -mcmodel=medany - -TRIPLET?=riscv64-unknown-elf -CXX=$(TOOL_DIR)/$(TRIPLET)-c++ -CC=$(TOOL_DIR)/$(TRIPLET)-gcc -LD=$(TOOL_DIR)/$(TRIPLET)-gcc -AR=$(TOOL_DIR)/$(TRIPLET)-ar - - -$(TARGET): $(LINK_OBJS) $(LINK_DEPS) - $(LD) $(LINK_OBJS) $(LDFLAGS) $(LIBWRAP) -o $@ - -$(ASM_OBJS): %.o: %.S $(HEADERS) - $(CC) $(CFLAGS) $(INCLUDES) -c -o $@ $< - -$(C_OBJS): %.o: %.c $(HEADERS) - $(CC) $(CFLAGS) $(INCLUDES) -include sys/cdefs.h -c -o $@ $< - -$(CXX_OBJS): %.o: %.cpp $(HEADERS) - $(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) -include sys/cdefs.h -c -o $@ $< - -.PHONY: clean -clean: - rm -f $(CLEAN_OBJS) $(LIBWRAP) - -endif # _SIFIVE_MK_COMMON diff --git a/raven_spn/bsp/env/coreip-e2-arty/flash.lds b/raven_spn/bsp/env/coreip-e2-arty/flash.lds deleted file mode 100644 index 2d5eb01..0000000 --- a/raven_spn/bsp/env/coreip-e2-arty/flash.lds +++ /dev/null @@ -1,161 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - flash (rxai!w) : ORIGIN = 0x40400000, LENGTH = 512M - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 64K -} - -PHDRS -{ - flash PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 2K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >flash AT>flash :flash - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >flash AT>flash :flash - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >flash AT>flash :flash - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - .rodata : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - } >flash AT>flash :flash - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >flash AT>flash :flash - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >flash AT>flash :flash - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >flash AT>flash :flash - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >flash AT>flash :flash - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >flash AT>flash :flash - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >flash AT>flash :flash - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>flash :ram_init - - .data : - { - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>flash :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack ORIGIN(ram) + LENGTH(ram) - __stack_size : - { - PROVIDE( _heap_end = . ); - . = __stack_size; - PROVIDE( _sp = . ); - } >ram AT>ram :ram -} diff --git a/raven_spn/bsp/env/coreip-e2-arty/init.c b/raven_spn/bsp/env/coreip-e2-arty/init.c deleted file mode 100644 index 3a4c77c..0000000 --- a/raven_spn/bsp/env/coreip-e2-arty/init.c +++ /dev/null @@ -1,98 +0,0 @@ -//See LICENSE for license details. -#include -#include -#include - -#include "platform.h" -#include "encoding.h" - -#define CPU_FREQ 32000000 -#define XSTR(x) #x -#define STR(x) XSTR(x) - -extern int main(int argc, char** argv); - -unsigned long get_cpu_freq() -{ - return CPU_FREQ; -} - -unsigned long get_timer_freq() -{ - return get_cpu_freq(); -} - -uint64_t get_timer_value() -{ -#if __riscv_xlen == 32 - while (1) { - uint32_t hi = read_csr(mcycleh); - uint32_t lo = read_csr(mcycle); - if (hi == read_csr(mcycleh)) - return ((uint64_t)hi << 32) | lo; - } -#else - return read_csr(mcycle); -#endif -} - -static void uart_init(size_t baud_rate) -{ - UART0_REG(UART_REG_DIV) = (get_cpu_freq() ) / baud_rate - 1; - UART0_REG(UART_REG_TXCTRL) |= UART_TXEN; -} - - -typedef void (*interrupt_function_ptr_t) (void); -interrupt_function_ptr_t localISR[CLIC_NUM_INTERRUPTS] __attribute__((aligned(64))); - - -void trap_entry(void) __attribute__((interrupt, aligned(64))); -void trap_entry(void) -{ - unsigned long mcause = read_csr(mcause); - unsigned long mepc = read_csr(mepc); - if (mcause & MCAUSE_INT) { - localISR[mcause & MCAUSE_CAUSE] (); - } else { - while(1); - } -} - -#ifdef CLIC_DIRECT -#else -void default_handler(void)__attribute__((interrupt));; -#endif -void default_handler(void) -{ - puts("default handler\n"); - while(1); -} - -void _init() -{ -#ifndef NO_INIT - uart_init(115200); - - puts("core freq at " STR(CPU_FREQ) " Hz\n"); - -//initialize vector table - int i=0; - while(iflash AT>flash :flash - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >flash AT>flash :flash - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >flash AT>flash :flash - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >flash AT>flash :flash - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >flash AT>flash :flash - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >flash AT>flash :flash - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >flash AT>flash :flash - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >flash AT>flash :flash - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >flash AT>flash :flash - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>flash :ram_init - - .data : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>flash :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack ORIGIN(ram) + LENGTH(ram) - __stack_size : - { - PROVIDE( _heap_end = . ); - . = __stack_size; - PROVIDE( _sp = . ); - } >ram AT>ram :ram -} diff --git a/raven_spn/bsp/env/coreip-e2-arty/tim.lds b/raven_spn/bsp/env/coreip-e2-arty/tim.lds deleted file mode 100644 index 7dfb36b..0000000 --- a/raven_spn/bsp/env/coreip-e2-arty/tim.lds +++ /dev/null @@ -1,161 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 64K -} - -PHDRS -{ - ram PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 1K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >ram AT>ram :ram - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >ram AT>ram :ram - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >ram AT>ram :ram - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - .rodata : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - } >ram AT>ram :ram - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >ram AT>ram :ram - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >ram AT>ram :ram - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >ram AT>ram :ram - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >ram AT>ram :ram - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >ram AT>ram :ram - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >ram AT>ram :ram - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>ram :ram_init - - .data : - { - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>ram :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack : - { - . = ALIGN(8); - . += __stack_size; - PROVIDE( _sp = . ); - PROVIDE( _heap_end = . ); - } >ram AT>ram :ram -} diff --git a/raven_spn/bsp/env/coreplexip-arty.h b/raven_spn/bsp/env/coreplexip-arty.h deleted file mode 100644 index eedcaa5..0000000 --- a/raven_spn/bsp/env/coreplexip-arty.h +++ /dev/null @@ -1,102 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_COREPLEXIP_ARTY_H -#define _SIFIVE_COREPLEXIP_ARTY_H - -#include - -/**************************************************************************** - * GPIO Connections - *****************************************************************************/ - -// These are the GPIO bit offsets for the directly driven -// RGB LEDs on the Freedom Exx Coreplex IP Evaluation Arty FPGA Dev Kit. -// Additional RGB LEDs are driven by the 3 PWM outputs. - -#define RED_LED_OFFSET 0 -#define GREEN_LED_OFFSET 1 -#define BLUE_LED_OFFSET 2 - -// Switch 3 is used as a GPIO input. (Switch 0 is used to set -// the reset vector, the other switches are unused). - -#define SW_3_OFFSET 3 - -// These are the buttons which are mapped as inputs. - -#define HAS_BOARD_BUTTONS - -#define BUTTON_0_OFFSET 4 -#define BUTTON_1_OFFSET 5 -#define BUTTON_2_OFFSET 6 -#define BUTTON_3_OFFSET 7 - -// These are the bit offsets for the different GPIO pins -// mapped onto the PMOD A header. - -#define JA_0_OFFSET 8 -#define JA_1_OFFSET 9 -#define JA_2_OFFSET 10 -#define JA_3_OFFSET 11 -#define JA_4_OFFSET 12 -#define JA_5_OFFSET 13 -#define JA_6_OFFSET 14 -#define JA_7_OFFSET 15 - -// The below gives a mapping between global interrupt -// sources and their number. Note that on the coreplex -// deliverable, the io_global_interrupts go directly into -// the PLIC. The evaluation image on the FPGA mimics a -// system with peripheral devices which are driving the -// global interrupt lines. -// So, on this image, in order to get an interrupt from -// e.g. pressing BUTTON_0: -// 1) Steps which are external to the delivery coreplex: -// a) The corresponding GPIO pin must be configured as in input -// b) The "interrupt on fall" bit must be set for the GPIO pin -// 2) Steps which would also need to be performed for the delivery coreplex: -// a) The corresponding global interrupt, priority, and threshold must be configured in the PLIC. -// b) The external interrupt bit must be enabled in MSTATUS -// c) Interrupts must be enabled globally in the core. - -// Any of the above GPIO pins can be used as global interrupt -// sources by adding their offset to the INT_GPIO_BASE. -// For example, the buttons are shown here: - -#define INT_DEVICE_BUTTON_0 (GPIO_INT_BASE + BUTTON_0_OFFSET) -#define INT_DEVICE_BUTTON_1 (GPIO_INT_BASE + BUTTON_1_OFFSET) -#define INT_DEVICE_BUTTON_2 (GPIO_INT_BASE + BUTTON_2_OFFSET) -#define INT_DEVICE_BUTTON_3 (GPIO_INT_BASE + BUTTON_3_OFFSET) - -// In addition, the Switches are mapped directly to -// the PLIC (without going through the GPIO Peripheral). - -#define INT_EXT_DEVICE_SW_0 (EXTERNAL_INT_BASE + 0) -#define INT_EXT_DEVICE_SW_1 (EXTERNAL_INT_BASE + 1) -#define INT_EXT_DEVICE_SW_2 (EXTERNAL_INT_BASE + 2) -#define INT_EXT_DEVICE_SW_3 (EXTERNAL_INT_BASE + 3) - -// This gives the mapping from inputs to LOCAL interrupts. - -#define LOCAL_INT_SW_0 0 -#define LOCAL_INT_SW_1 1 -#define LOCAL_INT_SW_2 2 -#define LOCAL_INT_SW_3 3 -#define LOCAL_INT_BTN_0 4 -#define LOCAL_INT_BTN_1 5 -#define LOCAL_INT_BTN_2 6 -#define LOCAL_INT_BTN_3 7 -#define LOCAL_INT_JA_0 8 -#define LOCAL_INT_JA_1 9 -#define LOCAL_INT_JA_2 10 -#define LOCAL_INT_JA_3 11 -#define LOCAL_INT_JA_4 12 -#define LOCAL_INT_JA_5 13 -#define LOCAL_INT_JA_6 14 -#define LOCAL_INT_JA_7 15 - -#define RTC_FREQ 32768 - -void write_hex(int fd, unsigned long int hex); - -#endif /* _SIFIVE_COREPLEXIP_ARTY_H */ diff --git a/raven_spn/bsp/env/coreplexip-e31-arty/dhrystone.lds b/raven_spn/bsp/env/coreplexip-e31-arty/dhrystone.lds deleted file mode 100644 index 8f6527b..0000000 --- a/raven_spn/bsp/env/coreplexip-e31-arty/dhrystone.lds +++ /dev/null @@ -1,157 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - flash (rxai!w) : ORIGIN = 0x40400000, LENGTH = 512M - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K -} - -PHDRS -{ - flash PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 1K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >flash AT>flash :flash - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >flash AT>flash :flash - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >flash AT>flash :flash - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >flash AT>flash :flash - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >flash AT>flash :flash - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >flash AT>flash :flash - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >flash AT>flash :flash - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >flash AT>flash :flash - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >flash AT>flash :flash - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>flash :ram_init - - .data : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>flash :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack ORIGIN(ram) + LENGTH(ram) - __stack_size : - { - PROVIDE( _heap_end = . ); - . = __stack_size; - PROVIDE( _sp = . ); - } >ram AT>ram :ram -} diff --git a/raven_spn/bsp/env/coreplexip-e31-arty/flash.lds b/raven_spn/bsp/env/coreplexip-e31-arty/flash.lds deleted file mode 100644 index 590c5b6..0000000 --- a/raven_spn/bsp/env/coreplexip-e31-arty/flash.lds +++ /dev/null @@ -1,161 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - flash (rxai!w) : ORIGIN = 0x40400000, LENGTH = 512M - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K -} - -PHDRS -{ - flash PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 2K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >flash AT>flash :flash - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >flash AT>flash :flash - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >flash AT>flash :flash - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - .rodata : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - } >flash AT>flash :flash - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >flash AT>flash :flash - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >flash AT>flash :flash - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >flash AT>flash :flash - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >flash AT>flash :flash - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >flash AT>flash :flash - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >flash AT>flash :flash - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>flash :ram_init - - .data : - { - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>flash :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack ORIGIN(ram) + LENGTH(ram) - __stack_size : - { - PROVIDE( _heap_end = . ); - . = __stack_size; - PROVIDE( _sp = . ); - } >ram AT>ram :ram -} diff --git a/raven_spn/bsp/env/coreplexip-e31-arty/init.c b/raven_spn/bsp/env/coreplexip-e31-arty/init.c deleted file mode 100644 index 1f8b679..0000000 --- a/raven_spn/bsp/env/coreplexip-e31-arty/init.c +++ /dev/null @@ -1,122 +0,0 @@ -//See LICENSE for license details. -#include -#include -#include - -#include "platform.h" -#include "encoding.h" - -#define CPU_FREQ 65000000 -#define XSTR(x) #x -#define STR(x) XSTR(x) - -#ifndef VECT_IRQ - #define TRAP_ENTRY trap_entry -#else - #define TRAP_ENTRY vtrap_entry -#endif - -extern int main(int argc, char** argv); -extern void TRAP_ENTRY(); - -unsigned long get_cpu_freq() -{ - return CPU_FREQ; -} - -unsigned long get_timer_freq() -{ - return get_cpu_freq(); -} - -uint64_t get_timer_value() -{ -#if __riscv_xlen == 32 - while (1) { - uint32_t hi = read_csr(mcycleh); - uint32_t lo = read_csr(mcycle); - if (hi == read_csr(mcycleh)) - return ((uint64_t)hi << 32) | lo; - } -#else - return read_csr(mcycle); -#endif -} - -static void uart_init(size_t baud_rate) -{ - UART0_REG(UART_REG_DIV) = (get_cpu_freq() / 2) / baud_rate - 1; - UART0_REG(UART_REG_TXCTRL) |= UART_TXEN; -} - - -#ifdef USE_PLIC -extern void handle_m_ext_interrupt(); -#endif - -#ifdef USE_M_TIME -extern void handle_m_time_interrupt(); -#endif - -#ifdef USE_LOCAL_ISR -typedef void (*my_interrupt_function_ptr_t) (void); -extern my_interrupt_function_ptr_t localISR[]; -#endif - -#ifndef VECT_IRQ -uintptr_t handle_trap(uintptr_t mcause, uintptr_t epc) __attribute__((noinline)); -uintptr_t handle_trap(uintptr_t mcause, uintptr_t epc) -{ - if (0){ -#ifdef USE_PLIC - // External Machine-Level interrupt from PLIC - } else if ((mcause & MCAUSE_INT) && ((mcause & MCAUSE_CAUSE) == IRQ_M_EXT)) { - handle_m_ext_interrupt(); -#endif -#ifdef USE_M_TIME - // External Machine-Level interrupt from PLIC - } else if ((mcause & MCAUSE_INT) && ((mcause & MCAUSE_CAUSE) == IRQ_M_TIMER)){ - handle_m_time_interrupt(); -#endif -#ifdef USE_LOCAL_ISR - } else if (mcause & MCAUSE_INT) { - localISR[mcause & MCAUSE_CAUSE] (); -#endif - } - else { - write(1, "Unhandled Trap:\n", 16); - _exit(1 + mcause); - } - return epc; -} -#endif - -#ifdef USE_CLIC -void trap_entry(void) __attribute__((interrupt("SiFive-CLIC-preemptible"), aligned(64))); -void trap_entry(void) -{ - unsigned long mcause = read_csr(mcause); - unsigned long mepc = read_csr(mepc); - handle_trap(mcause, mepc); -} -#endif - -void _init() -{ - #ifndef NO_INIT - uart_init(115200); - - puts("core freq at " STR(CPU_FREQ) " Hz\n"); - -#ifdef USE_CLIC - write_csr(mtvec, ((unsigned long)&trap_entry | MTVEC_CLIC)); -#else - write_csr(mtvec, ((unsigned long)&TRAP_ENTRY | MTVEC_VECTORED)); -#endif - - #endif -} - -void _fini() -{ -} diff --git a/raven_spn/bsp/env/coreplexip-e31-arty/openocd.cfg b/raven_spn/bsp/env/coreplexip-e31-arty/openocd.cfg deleted file mode 100644 index 0481a72..0000000 --- a/raven_spn/bsp/env/coreplexip-e31-arty/openocd.cfg +++ /dev/null @@ -1,31 +0,0 @@ -# JTAG adapter setup -adapter_khz 10000 - -interface ftdi -ftdi_device_desc "Olimex OpenOCD JTAG ARM-USB-TINY-H" -ftdi_vid_pid 0x15ba 0x002a - -ftdi_layout_init 0x0808 0x0a1b -ftdi_layout_signal nSRST -oe 0x0200 -#ftdi_layout_signal nTRST -data 0x0100 -oe 0x0100 -ftdi_layout_signal LED -data 0x0800 - -set _CHIPNAME riscv -jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x20000001 - -set _TARGETNAME $_CHIPNAME.cpu - -target create $_TARGETNAME.0 riscv -chain-position $_TARGETNAME -$_TARGETNAME.0 configure -work-area-phys 0x80000000 -work-area-size 10000 -work-area-backup 1 - -# Un-comment these two flash lines if you have a SPI flash and want to write -# it. -flash bank spi0 fespi 0x40000000 0 0 0 $_TARGETNAME.0 0x20004000 -init -if {[ info exists pulse_srst]} { - ftdi_set_signal nSRST 0 - ftdi_set_signal nSRST z -} -halt -#flash protect 0 64 last off -echo "Ready for Remote Connections" diff --git a/raven_spn/bsp/env/coreplexip-e31-arty/platform.h b/raven_spn/bsp/env/coreplexip-e31-arty/platform.h deleted file mode 100644 index 6fa79ea..0000000 --- a/raven_spn/bsp/env/coreplexip-e31-arty/platform.h +++ /dev/null @@ -1,100 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_PLATFORM_H -#define _SIFIVE_PLATFORM_H - -// Some things missing from the official encoding.h - -#if __riscv_xlen == 32 -#define MCAUSE_INT 0x80000000UL -#define MCAUSE_CAUSE 0x000003FFUL -#else -#define MCAUSE_INT 0x8000000000000000UL -#define MCAUSE_CAUSE 0x00000000000003FFUL -#endif - -#ifdef VECT_IRQ - #define MTVEC_VECTORED 0x01 -#else - #define MTVEC_VECTORED 0x00 -#endif -#define MTVEC_CLIC 0x02 -#define IRQ_M_LOCAL 16 -#define MIP_MLIP(x) (1 << (IRQ_M_LOCAL + x)) - -#include "sifive/const.h" -#include "sifive/devices/clint.h" -#include "sifive/devices/gpio.h" -#include "sifive/devices/plic.h" -#include "sifive/devices/pwm.h" -#include "sifive/devices/spi.h" -#include "sifive/devices/uart.h" - -/**************************************************************************** - * Platform definitions - *****************************************************************************/ - -// Memory map -#define CLINT_CTRL_ADDR _AC(0x02000000,UL) -#define GPIO_CTRL_ADDR _AC(0x20002000,UL) -#define PLIC_CTRL_ADDR _AC(0x0C000000,UL) -#define PWM0_CTRL_ADDR _AC(0x20005000,UL) -#define RAM_MEM_ADDR _AC(0x80000000,UL) -#define RAM_MEM_SIZE _AC(0x10000,UL) -#define SPI0_CTRL_ADDR _AC(0x20004000,UL) -#define SPI0_MEM_ADDR _AC(0x40000000,UL) -#define SPI0_MEM_SIZE _AC(0x20000000,UL) -#define TESTBENCH_MEM_ADDR _AC(0x20000000,UL) -#define TESTBENCH_MEM_SIZE _AC(0x10000000,UL) -#define TRAPVEC_TABLE_CTRL_ADDR _AC(0x00001010,UL) -#define UART0_CTRL_ADDR _AC(0x20000000,UL) - -// IOF masks - -// Interrupt numbers -#define RESERVED_INT_BASE 0 -#define UART0_INT_BASE 1 -#define EXTERNAL_INT_BASE 2 -#define SPI0_INT_BASE 6 -#define GPIO_INT_BASE 7 -#define PWM0_INT_BASE 23 - -// Helper functions -#define _REG64(p, i) (*(volatile uint64_t *)((p) + (i))) -#define _REG32(p, i) (*(volatile uint32_t *)((p) + (i))) -#define _REG16(p, i) (*(volatile uint16_t *)((p) + (i))) -// Bulk set bits in `reg` to either 0 or 1. -// E.g. SET_BITS(MY_REG, 0x00000007, 0) would generate MY_REG &= ~0x7 -// E.g. SET_BITS(MY_REG, 0x00000007, 1) would generate MY_REG |= 0x7 -#define SET_BITS(reg, mask, value) if ((value) == 0) { (reg) &= ~(mask); } else { (reg) |= (mask); } -#define CLINT_REG(offset) _REG32(CLINT_CTRL_ADDR, offset) -#define GPIO_REG(offset) _REG32(GPIO_CTRL_ADDR, offset) -#define PLIC_REG(offset) _REG32(PLIC_CTRL_ADDR, offset) -#define PWM0_REG(offset) _REG32(PWM0_CTRL_ADDR, offset) -#define SPI0_REG(offset) _REG32(SPI0_CTRL_ADDR, offset) -#define TRAPVEC_TABLE_REG(offset) _REG32(TRAPVEC_TABLE_CTRL_ADDR, offset) -#define UART0_REG(offset) _REG32(UART0_CTRL_ADDR, offset) -#define CLINT_REG64(offset) _REG64(CLINT_CTRL_ADDR, offset) -#define GPIO_REG64(offset) _REG64(GPIO_CTRL_ADDR, offset) -#define PLIC_REG64(offset) _REG64(PLIC_CTRL_ADDR, offset) -#define PWM0_REG64(offset) _REG64(PWM0_CTRL_ADDR, offset) -#define SPI0_REG64(offset) _REG64(SPI0_CTRL_ADDR, offset) -#define TRAPVEC_TABLE_REG64(offset) _REG64(TRAPVEC_TABLE_CTRL_ADDR, offset) -#define UART0_REG64(offset) _REG64(UART0_CTRL_ADDR, offset) - -// Misc - -#define NUM_GPIO 16 - -#define PLIC_NUM_INTERRUPTS 28 -#define PLIC_NUM_PRIORITIES 7 - -#define HAS_BOARD_BUTTONS - -#include "coreplexip-arty.h" - -unsigned long get_cpu_freq(void); -unsigned long get_timer_freq(void); -uint64_t get_timer_value(void); - -#endif /* _SIFIVE_PLATFORM_H */ diff --git a/raven_spn/bsp/env/coreplexip-e31-arty/scratchpad.lds b/raven_spn/bsp/env/coreplexip-e31-arty/scratchpad.lds deleted file mode 100644 index 7887c13..0000000 --- a/raven_spn/bsp/env/coreplexip-e31-arty/scratchpad.lds +++ /dev/null @@ -1,161 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K -} - -PHDRS -{ - ram PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 1K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >ram AT>ram :ram - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >ram AT>ram :ram - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >ram AT>ram :ram - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - .rodata : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - } >ram AT>ram :ram - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >ram AT>ram :ram - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >ram AT>ram :ram - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >ram AT>ram :ram - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >ram AT>ram :ram - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >ram AT>ram :ram - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >ram AT>ram :ram - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>ram :ram_init - - .data : - { - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>ram :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack : - { - . = ALIGN(8); - . += __stack_size; - PROVIDE( _sp = . ); - PROVIDE( _heap_end = . ); - } >ram AT>ram :ram -} diff --git a/raven_spn/bsp/env/coreplexip-e31-arty/settings.mk b/raven_spn/bsp/env/coreplexip-e31-arty/settings.mk deleted file mode 100644 index 230fccc..0000000 --- a/raven_spn/bsp/env/coreplexip-e31-arty/settings.mk +++ /dev/null @@ -1,3 +0,0 @@ -# Describes the CPU on this board to the rest of the SDK. -RISCV_ARCH := rv32imac -RISCV_ABI := ilp32 diff --git a/raven_spn/bsp/env/coreplexip-e51-arty/dhrystone.lds b/raven_spn/bsp/env/coreplexip-e51-arty/dhrystone.lds deleted file mode 100644 index 8f6527b..0000000 --- a/raven_spn/bsp/env/coreplexip-e51-arty/dhrystone.lds +++ /dev/null @@ -1,157 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - flash (rxai!w) : ORIGIN = 0x40400000, LENGTH = 512M - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K -} - -PHDRS -{ - flash PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 1K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >flash AT>flash :flash - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >flash AT>flash :flash - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >flash AT>flash :flash - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >flash AT>flash :flash - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >flash AT>flash :flash - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >flash AT>flash :flash - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >flash AT>flash :flash - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >flash AT>flash :flash - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >flash AT>flash :flash - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>flash :ram_init - - .data : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>flash :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack ORIGIN(ram) + LENGTH(ram) - __stack_size : - { - PROVIDE( _heap_end = . ); - . = __stack_size; - PROVIDE( _sp = . ); - } >ram AT>ram :ram -} diff --git a/raven_spn/bsp/env/coreplexip-e51-arty/flash.lds b/raven_spn/bsp/env/coreplexip-e51-arty/flash.lds deleted file mode 100644 index 590c5b6..0000000 --- a/raven_spn/bsp/env/coreplexip-e51-arty/flash.lds +++ /dev/null @@ -1,161 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - flash (rxai!w) : ORIGIN = 0x40400000, LENGTH = 512M - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K -} - -PHDRS -{ - flash PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 2K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >flash AT>flash :flash - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >flash AT>flash :flash - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >flash AT>flash :flash - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - .rodata : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - } >flash AT>flash :flash - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >flash AT>flash :flash - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >flash AT>flash :flash - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >flash AT>flash :flash - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >flash AT>flash :flash - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >flash AT>flash :flash - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >flash AT>flash :flash - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>flash :ram_init - - .data : - { - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>flash :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack ORIGIN(ram) + LENGTH(ram) - __stack_size : - { - PROVIDE( _heap_end = . ); - . = __stack_size; - PROVIDE( _sp = . ); - } >ram AT>ram :ram -} diff --git a/raven_spn/bsp/env/coreplexip-e51-arty/init.c b/raven_spn/bsp/env/coreplexip-e51-arty/init.c deleted file mode 100644 index 1f8b679..0000000 --- a/raven_spn/bsp/env/coreplexip-e51-arty/init.c +++ /dev/null @@ -1,122 +0,0 @@ -//See LICENSE for license details. -#include -#include -#include - -#include "platform.h" -#include "encoding.h" - -#define CPU_FREQ 65000000 -#define XSTR(x) #x -#define STR(x) XSTR(x) - -#ifndef VECT_IRQ - #define TRAP_ENTRY trap_entry -#else - #define TRAP_ENTRY vtrap_entry -#endif - -extern int main(int argc, char** argv); -extern void TRAP_ENTRY(); - -unsigned long get_cpu_freq() -{ - return CPU_FREQ; -} - -unsigned long get_timer_freq() -{ - return get_cpu_freq(); -} - -uint64_t get_timer_value() -{ -#if __riscv_xlen == 32 - while (1) { - uint32_t hi = read_csr(mcycleh); - uint32_t lo = read_csr(mcycle); - if (hi == read_csr(mcycleh)) - return ((uint64_t)hi << 32) | lo; - } -#else - return read_csr(mcycle); -#endif -} - -static void uart_init(size_t baud_rate) -{ - UART0_REG(UART_REG_DIV) = (get_cpu_freq() / 2) / baud_rate - 1; - UART0_REG(UART_REG_TXCTRL) |= UART_TXEN; -} - - -#ifdef USE_PLIC -extern void handle_m_ext_interrupt(); -#endif - -#ifdef USE_M_TIME -extern void handle_m_time_interrupt(); -#endif - -#ifdef USE_LOCAL_ISR -typedef void (*my_interrupt_function_ptr_t) (void); -extern my_interrupt_function_ptr_t localISR[]; -#endif - -#ifndef VECT_IRQ -uintptr_t handle_trap(uintptr_t mcause, uintptr_t epc) __attribute__((noinline)); -uintptr_t handle_trap(uintptr_t mcause, uintptr_t epc) -{ - if (0){ -#ifdef USE_PLIC - // External Machine-Level interrupt from PLIC - } else if ((mcause & MCAUSE_INT) && ((mcause & MCAUSE_CAUSE) == IRQ_M_EXT)) { - handle_m_ext_interrupt(); -#endif -#ifdef USE_M_TIME - // External Machine-Level interrupt from PLIC - } else if ((mcause & MCAUSE_INT) && ((mcause & MCAUSE_CAUSE) == IRQ_M_TIMER)){ - handle_m_time_interrupt(); -#endif -#ifdef USE_LOCAL_ISR - } else if (mcause & MCAUSE_INT) { - localISR[mcause & MCAUSE_CAUSE] (); -#endif - } - else { - write(1, "Unhandled Trap:\n", 16); - _exit(1 + mcause); - } - return epc; -} -#endif - -#ifdef USE_CLIC -void trap_entry(void) __attribute__((interrupt("SiFive-CLIC-preemptible"), aligned(64))); -void trap_entry(void) -{ - unsigned long mcause = read_csr(mcause); - unsigned long mepc = read_csr(mepc); - handle_trap(mcause, mepc); -} -#endif - -void _init() -{ - #ifndef NO_INIT - uart_init(115200); - - puts("core freq at " STR(CPU_FREQ) " Hz\n"); - -#ifdef USE_CLIC - write_csr(mtvec, ((unsigned long)&trap_entry | MTVEC_CLIC)); -#else - write_csr(mtvec, ((unsigned long)&TRAP_ENTRY | MTVEC_VECTORED)); -#endif - - #endif -} - -void _fini() -{ -} diff --git a/raven_spn/bsp/env/coreplexip-e51-arty/openocd.cfg b/raven_spn/bsp/env/coreplexip-e51-arty/openocd.cfg deleted file mode 100644 index 0481a72..0000000 --- a/raven_spn/bsp/env/coreplexip-e51-arty/openocd.cfg +++ /dev/null @@ -1,31 +0,0 @@ -# JTAG adapter setup -adapter_khz 10000 - -interface ftdi -ftdi_device_desc "Olimex OpenOCD JTAG ARM-USB-TINY-H" -ftdi_vid_pid 0x15ba 0x002a - -ftdi_layout_init 0x0808 0x0a1b -ftdi_layout_signal nSRST -oe 0x0200 -#ftdi_layout_signal nTRST -data 0x0100 -oe 0x0100 -ftdi_layout_signal LED -data 0x0800 - -set _CHIPNAME riscv -jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x20000001 - -set _TARGETNAME $_CHIPNAME.cpu - -target create $_TARGETNAME.0 riscv -chain-position $_TARGETNAME -$_TARGETNAME.0 configure -work-area-phys 0x80000000 -work-area-size 10000 -work-area-backup 1 - -# Un-comment these two flash lines if you have a SPI flash and want to write -# it. -flash bank spi0 fespi 0x40000000 0 0 0 $_TARGETNAME.0 0x20004000 -init -if {[ info exists pulse_srst]} { - ftdi_set_signal nSRST 0 - ftdi_set_signal nSRST z -} -halt -#flash protect 0 64 last off -echo "Ready for Remote Connections" diff --git a/raven_spn/bsp/env/coreplexip-e51-arty/platform.h b/raven_spn/bsp/env/coreplexip-e51-arty/platform.h deleted file mode 100644 index 6fa79ea..0000000 --- a/raven_spn/bsp/env/coreplexip-e51-arty/platform.h +++ /dev/null @@ -1,100 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_PLATFORM_H -#define _SIFIVE_PLATFORM_H - -// Some things missing from the official encoding.h - -#if __riscv_xlen == 32 -#define MCAUSE_INT 0x80000000UL -#define MCAUSE_CAUSE 0x000003FFUL -#else -#define MCAUSE_INT 0x8000000000000000UL -#define MCAUSE_CAUSE 0x00000000000003FFUL -#endif - -#ifdef VECT_IRQ - #define MTVEC_VECTORED 0x01 -#else - #define MTVEC_VECTORED 0x00 -#endif -#define MTVEC_CLIC 0x02 -#define IRQ_M_LOCAL 16 -#define MIP_MLIP(x) (1 << (IRQ_M_LOCAL + x)) - -#include "sifive/const.h" -#include "sifive/devices/clint.h" -#include "sifive/devices/gpio.h" -#include "sifive/devices/plic.h" -#include "sifive/devices/pwm.h" -#include "sifive/devices/spi.h" -#include "sifive/devices/uart.h" - -/**************************************************************************** - * Platform definitions - *****************************************************************************/ - -// Memory map -#define CLINT_CTRL_ADDR _AC(0x02000000,UL) -#define GPIO_CTRL_ADDR _AC(0x20002000,UL) -#define PLIC_CTRL_ADDR _AC(0x0C000000,UL) -#define PWM0_CTRL_ADDR _AC(0x20005000,UL) -#define RAM_MEM_ADDR _AC(0x80000000,UL) -#define RAM_MEM_SIZE _AC(0x10000,UL) -#define SPI0_CTRL_ADDR _AC(0x20004000,UL) -#define SPI0_MEM_ADDR _AC(0x40000000,UL) -#define SPI0_MEM_SIZE _AC(0x20000000,UL) -#define TESTBENCH_MEM_ADDR _AC(0x20000000,UL) -#define TESTBENCH_MEM_SIZE _AC(0x10000000,UL) -#define TRAPVEC_TABLE_CTRL_ADDR _AC(0x00001010,UL) -#define UART0_CTRL_ADDR _AC(0x20000000,UL) - -// IOF masks - -// Interrupt numbers -#define RESERVED_INT_BASE 0 -#define UART0_INT_BASE 1 -#define EXTERNAL_INT_BASE 2 -#define SPI0_INT_BASE 6 -#define GPIO_INT_BASE 7 -#define PWM0_INT_BASE 23 - -// Helper functions -#define _REG64(p, i) (*(volatile uint64_t *)((p) + (i))) -#define _REG32(p, i) (*(volatile uint32_t *)((p) + (i))) -#define _REG16(p, i) (*(volatile uint16_t *)((p) + (i))) -// Bulk set bits in `reg` to either 0 or 1. -// E.g. SET_BITS(MY_REG, 0x00000007, 0) would generate MY_REG &= ~0x7 -// E.g. SET_BITS(MY_REG, 0x00000007, 1) would generate MY_REG |= 0x7 -#define SET_BITS(reg, mask, value) if ((value) == 0) { (reg) &= ~(mask); } else { (reg) |= (mask); } -#define CLINT_REG(offset) _REG32(CLINT_CTRL_ADDR, offset) -#define GPIO_REG(offset) _REG32(GPIO_CTRL_ADDR, offset) -#define PLIC_REG(offset) _REG32(PLIC_CTRL_ADDR, offset) -#define PWM0_REG(offset) _REG32(PWM0_CTRL_ADDR, offset) -#define SPI0_REG(offset) _REG32(SPI0_CTRL_ADDR, offset) -#define TRAPVEC_TABLE_REG(offset) _REG32(TRAPVEC_TABLE_CTRL_ADDR, offset) -#define UART0_REG(offset) _REG32(UART0_CTRL_ADDR, offset) -#define CLINT_REG64(offset) _REG64(CLINT_CTRL_ADDR, offset) -#define GPIO_REG64(offset) _REG64(GPIO_CTRL_ADDR, offset) -#define PLIC_REG64(offset) _REG64(PLIC_CTRL_ADDR, offset) -#define PWM0_REG64(offset) _REG64(PWM0_CTRL_ADDR, offset) -#define SPI0_REG64(offset) _REG64(SPI0_CTRL_ADDR, offset) -#define TRAPVEC_TABLE_REG64(offset) _REG64(TRAPVEC_TABLE_CTRL_ADDR, offset) -#define UART0_REG64(offset) _REG64(UART0_CTRL_ADDR, offset) - -// Misc - -#define NUM_GPIO 16 - -#define PLIC_NUM_INTERRUPTS 28 -#define PLIC_NUM_PRIORITIES 7 - -#define HAS_BOARD_BUTTONS - -#include "coreplexip-arty.h" - -unsigned long get_cpu_freq(void); -unsigned long get_timer_freq(void); -uint64_t get_timer_value(void); - -#endif /* _SIFIVE_PLATFORM_H */ diff --git a/raven_spn/bsp/env/coreplexip-e51-arty/scratchpad.lds b/raven_spn/bsp/env/coreplexip-e51-arty/scratchpad.lds deleted file mode 100644 index 7887c13..0000000 --- a/raven_spn/bsp/env/coreplexip-e51-arty/scratchpad.lds +++ /dev/null @@ -1,161 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K -} - -PHDRS -{ - ram PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 1K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >ram AT>ram :ram - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >ram AT>ram :ram - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >ram AT>ram :ram - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - .rodata : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - } >ram AT>ram :ram - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >ram AT>ram :ram - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >ram AT>ram :ram - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >ram AT>ram :ram - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >ram AT>ram :ram - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >ram AT>ram :ram - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >ram AT>ram :ram - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>ram :ram_init - - .data : - { - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>ram :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack : - { - . = ALIGN(8); - . += __stack_size; - PROVIDE( _sp = . ); - PROVIDE( _heap_end = . ); - } >ram AT>ram :ram -} diff --git a/raven_spn/bsp/env/coreplexip-e51-arty/settings.mk b/raven_spn/bsp/env/coreplexip-e51-arty/settings.mk deleted file mode 100644 index 96aea84..0000000 --- a/raven_spn/bsp/env/coreplexip-e51-arty/settings.mk +++ /dev/null @@ -1,3 +0,0 @@ -# Describes the CPU on this board to the rest of the SDK. -RISCV_ARCH := rv64imac -RISCV_ABI := lp64 diff --git a/raven_spn/bsp/env/encoding.h b/raven_spn/bsp/env/encoding.h deleted file mode 100644 index 35e0f9f..0000000 --- a/raven_spn/bsp/env/encoding.h +++ /dev/null @@ -1,1313 +0,0 @@ -// See LICENSE for license details. - -#ifndef RISCV_CSR_ENCODING_H -#define RISCV_CSR_ENCODING_H - -#define MSTATUS_UIE 0x00000001 -#define MSTATUS_SIE 0x00000002 -#define MSTATUS_HIE 0x00000004 -#define MSTATUS_MIE 0x00000008 -#define MSTATUS_UPIE 0x00000010 -#define MSTATUS_SPIE 0x00000020 -#define MSTATUS_HPIE 0x00000040 -#define MSTATUS_MPIE 0x00000080 -#define MSTATUS_SPP 0x00000100 -#define MSTATUS_HPP 0x00000600 -#define MSTATUS_MPP 0x00001800 -#define MSTATUS_FS 0x00006000 -#define MSTATUS_XS 0x00018000 -#define MSTATUS_MPRV 0x00020000 -#define MSTATUS_PUM 0x00040000 -#define MSTATUS_MXR 0x00080000 -#define MSTATUS_VM 0x1F000000 -#define MSTATUS32_SD 0x80000000 -#define MSTATUS64_SD 0x8000000000000000 - -#define SSTATUS_UIE 0x00000001 -#define SSTATUS_SIE 0x00000002 -#define SSTATUS_UPIE 0x00000010 -#define SSTATUS_SPIE 0x00000020 -#define SSTATUS_SPP 0x00000100 -#define SSTATUS_FS 0x00006000 -#define SSTATUS_XS 0x00018000 -#define SSTATUS_PUM 0x00040000 -#define SSTATUS32_SD 0x80000000 -#define SSTATUS64_SD 0x8000000000000000 - -#define DCSR_XDEBUGVER (3U<<30) -#define DCSR_NDRESET (1<<29) -#define DCSR_FULLRESET (1<<28) -#define DCSR_EBREAKM (1<<15) -#define DCSR_EBREAKH (1<<14) -#define DCSR_EBREAKS (1<<13) -#define DCSR_EBREAKU (1<<12) -#define DCSR_STOPCYCLE (1<<10) -#define DCSR_STOPTIME (1<<9) -#define DCSR_CAUSE (7<<6) -#define DCSR_DEBUGINT (1<<5) -#define DCSR_HALT (1<<3) -#define DCSR_STEP (1<<2) -#define DCSR_PRV (3<<0) - -#define DCSR_CAUSE_NONE 0 -#define DCSR_CAUSE_SWBP 1 -#define DCSR_CAUSE_HWBP 2 -#define DCSR_CAUSE_DEBUGINT 3 -#define DCSR_CAUSE_STEP 4 -#define DCSR_CAUSE_HALT 5 - -#define MCONTROL_TYPE(xlen) (0xfULL<<((xlen)-4)) -#define MCONTROL_DMODE(xlen) (1ULL<<((xlen)-5)) -#define MCONTROL_MASKMAX(xlen) (0x3fULL<<((xlen)-11)) - -#define MCONTROL_SELECT (1<<19) -#define MCONTROL_TIMING (1<<18) -#define MCONTROL_ACTION (0x3f<<12) -#define MCONTROL_CHAIN (1<<11) -#define MCONTROL_MATCH (0xf<<7) -#define MCONTROL_M (1<<6) -#define MCONTROL_H (1<<5) -#define MCONTROL_S (1<<4) -#define MCONTROL_U (1<<3) -#define MCONTROL_EXECUTE (1<<2) -#define MCONTROL_STORE (1<<1) -#define MCONTROL_LOAD (1<<0) - -#define MCONTROL_TYPE_NONE 0 -#define MCONTROL_TYPE_MATCH 2 - -#define MCONTROL_ACTION_DEBUG_EXCEPTION 0 -#define MCONTROL_ACTION_DEBUG_MODE 1 -#define MCONTROL_ACTION_TRACE_START 2 -#define MCONTROL_ACTION_TRACE_STOP 3 -#define MCONTROL_ACTION_TRACE_EMIT 4 - -#define MCONTROL_MATCH_EQUAL 0 -#define MCONTROL_MATCH_NAPOT 1 -#define MCONTROL_MATCH_GE 2 -#define MCONTROL_MATCH_LT 3 -#define MCONTROL_MATCH_MASK_LOW 4 -#define MCONTROL_MATCH_MASK_HIGH 5 - -#define MIP_SSIP (1 << IRQ_S_SOFT) -#define MIP_HSIP (1 << IRQ_H_SOFT) -#define MIP_MSIP (1 << IRQ_M_SOFT) -#define MIP_STIP (1 << IRQ_S_TIMER) -#define MIP_HTIP (1 << IRQ_H_TIMER) -#define MIP_MTIP (1 << IRQ_M_TIMER) -#define MIP_SEIP (1 << IRQ_S_EXT) -#define MIP_HEIP (1 << IRQ_H_EXT) -#define MIP_MEIP (1 << IRQ_M_EXT) - -#define SIP_SSIP MIP_SSIP -#define SIP_STIP MIP_STIP - -#define PRV_U 0 -#define PRV_S 1 -#define PRV_H 2 -#define PRV_M 3 - -#define VM_MBARE 0 -#define VM_MBB 1 -#define VM_MBBID 2 -#define VM_SV32 8 -#define VM_SV39 9 -#define VM_SV48 10 - -#define IRQ_S_SOFT 1 -#define IRQ_H_SOFT 2 -#define IRQ_M_SOFT 3 -#define IRQ_S_TIMER 5 -#define IRQ_H_TIMER 6 -#define IRQ_M_TIMER 7 -#define IRQ_S_EXT 9 -#define IRQ_H_EXT 10 -#define IRQ_M_EXT 11 -#define IRQ_COP 12 -#define IRQ_HOST 13 - -#define DEFAULT_RSTVEC 0x00001000 -#define DEFAULT_NMIVEC 0x00001004 -#define DEFAULT_MTVEC 0x00001010 -#define CONFIG_STRING_ADDR 0x0000100C -#define EXT_IO_BASE 0x40000000 -#define DRAM_BASE 0x80000000 - -// page table entry (PTE) fields -#define PTE_V 0x001 // Valid -#define PTE_R 0x002 // Read -#define PTE_W 0x004 // Write -#define PTE_X 0x008 // Execute -#define PTE_U 0x010 // User -#define PTE_G 0x020 // Global -#define PTE_A 0x040 // Accessed -#define PTE_D 0x080 // Dirty -#define PTE_SOFT 0x300 // Reserved for Software - -#define PTE_PPN_SHIFT 10 - -#define PTE_TABLE(PTE) (((PTE) & (PTE_V | PTE_R | PTE_W | PTE_X)) == PTE_V) - -#ifdef __riscv - -#ifdef __riscv64 -# define MSTATUS_SD MSTATUS64_SD -# define SSTATUS_SD SSTATUS64_SD -# define RISCV_PGLEVEL_BITS 9 -#else -# define MSTATUS_SD MSTATUS32_SD -# define SSTATUS_SD SSTATUS32_SD -# define RISCV_PGLEVEL_BITS 10 -#endif -#define RISCV_PGSHIFT 12 -#define RISCV_PGSIZE (1 << RISCV_PGSHIFT) - -#ifndef __ASSEMBLER__ - -#ifdef __GNUC__ - -#define read_csr(reg) ({ unsigned long __tmp; \ - asm volatile ("csrr %0, " #reg : "=r"(__tmp)); \ - __tmp; }) - -#define write_csr(reg, val) ({ \ - if (__builtin_constant_p(val) && (unsigned long)(val) < 32) \ - asm volatile ("csrw " #reg ", %0" :: "i"(val)); \ - else \ - asm volatile ("csrw " #reg ", %0" :: "r"(val)); }) - -#define swap_csr(reg, val) ({ unsigned long __tmp; \ - if (__builtin_constant_p(val) && (unsigned long)(val) < 32) \ - asm volatile ("csrrw %0, " #reg ", %1" : "=r"(__tmp) : "i"(val)); \ - else \ - asm volatile ("csrrw %0, " #reg ", %1" : "=r"(__tmp) : "r"(val)); \ - __tmp; }) - -#define set_csr(reg, bit) ({ unsigned long __tmp; \ - if (__builtin_constant_p(bit) && (unsigned long)(bit) < 32) \ - asm volatile ("csrrs %0, " #reg ", %1" : "=r"(__tmp) : "i"(bit)); \ - else \ - asm volatile ("csrrs %0, " #reg ", %1" : "=r"(__tmp) : "r"(bit)); \ - __tmp; }) - -#define clear_csr(reg, bit) ({ unsigned long __tmp; \ - if (__builtin_constant_p(bit) && (unsigned long)(bit) < 32) \ - asm volatile ("csrrc %0, " #reg ", %1" : "=r"(__tmp) : "i"(bit)); \ - else \ - asm volatile ("csrrc %0, " #reg ", %1" : "=r"(__tmp) : "r"(bit)); \ - __tmp; }) - -#define rdtime() read_csr(time) -#define rdcycle() read_csr(cycle) -#define rdinstret() read_csr(instret) - -#endif - -#endif - -#endif - -#endif -/* Automatically generated by parse-opcodes */ -#ifndef RISCV_ENCODING_H -#define RISCV_ENCODING_H -#define MATCH_BEQ 0x63 -#define MASK_BEQ 0x707f -#define MATCH_BNE 0x1063 -#define MASK_BNE 0x707f -#define MATCH_BLT 0x4063 -#define MASK_BLT 0x707f -#define MATCH_BGE 0x5063 -#define MASK_BGE 0x707f -#define MATCH_BLTU 0x6063 -#define MASK_BLTU 0x707f -#define MATCH_BGEU 0x7063 -#define MASK_BGEU 0x707f -#define MATCH_JALR 0x67 -#define MASK_JALR 0x707f -#define MATCH_JAL 0x6f -#define MASK_JAL 0x7f -#define MATCH_LUI 0x37 -#define MASK_LUI 0x7f -#define MATCH_AUIPC 0x17 -#define MASK_AUIPC 0x7f -#define MATCH_ADDI 0x13 -#define MASK_ADDI 0x707f -#define MATCH_SLLI 0x1013 -#define MASK_SLLI 0xfc00707f -#define MATCH_SLTI 0x2013 -#define MASK_SLTI 0x707f -#define MATCH_SLTIU 0x3013 -#define MASK_SLTIU 0x707f -#define MATCH_XORI 0x4013 -#define MASK_XORI 0x707f -#define MATCH_SRLI 0x5013 -#define MASK_SRLI 0xfc00707f -#define MATCH_SRAI 0x40005013 -#define MASK_SRAI 0xfc00707f -#define MATCH_ORI 0x6013 -#define MASK_ORI 0x707f -#define MATCH_ANDI 0x7013 -#define MASK_ANDI 0x707f -#define MATCH_ADD 0x33 -#define MASK_ADD 0xfe00707f -#define MATCH_SUB 0x40000033 -#define MASK_SUB 0xfe00707f -#define MATCH_SLL 0x1033 -#define MASK_SLL 0xfe00707f -#define MATCH_SLT 0x2033 -#define MASK_SLT 0xfe00707f -#define MATCH_SLTU 0x3033 -#define MASK_SLTU 0xfe00707f -#define MATCH_XOR 0x4033 -#define MASK_XOR 0xfe00707f -#define MATCH_SRL 0x5033 -#define MASK_SRL 0xfe00707f -#define MATCH_SRA 0x40005033 -#define MASK_SRA 0xfe00707f -#define MATCH_OR 0x6033 -#define MASK_OR 0xfe00707f -#define MATCH_AND 0x7033 -#define MASK_AND 0xfe00707f -#define MATCH_ADDIW 0x1b -#define MASK_ADDIW 0x707f -#define MATCH_SLLIW 0x101b -#define MASK_SLLIW 0xfe00707f -#define MATCH_SRLIW 0x501b -#define MASK_SRLIW 0xfe00707f -#define MATCH_SRAIW 0x4000501b -#define MASK_SRAIW 0xfe00707f -#define MATCH_ADDW 0x3b -#define MASK_ADDW 0xfe00707f -#define MATCH_SUBW 0x4000003b -#define MASK_SUBW 0xfe00707f -#define MATCH_SLLW 0x103b -#define MASK_SLLW 0xfe00707f -#define MATCH_SRLW 0x503b -#define MASK_SRLW 0xfe00707f -#define MATCH_SRAW 0x4000503b -#define MASK_SRAW 0xfe00707f -#define MATCH_LB 0x3 -#define MASK_LB 0x707f -#define MATCH_LH 0x1003 -#define MASK_LH 0x707f -#define MATCH_LW 0x2003 -#define MASK_LW 0x707f -#define MATCH_LD 0x3003 -#define MASK_LD 0x707f -#define MATCH_LBU 0x4003 -#define MASK_LBU 0x707f -#define MATCH_LHU 0x5003 -#define MASK_LHU 0x707f -#define MATCH_LWU 0x6003 -#define MASK_LWU 0x707f -#define MATCH_SB 0x23 -#define MASK_SB 0x707f -#define MATCH_SH 0x1023 -#define MASK_SH 0x707f -#define MATCH_SW 0x2023 -#define MASK_SW 0x707f -#define MATCH_SD 0x3023 -#define MASK_SD 0x707f -#define MATCH_FENCE 0xf -#define MASK_FENCE 0x707f -#define MATCH_FENCE_I 0x100f -#define MASK_FENCE_I 0x707f -#define MATCH_MUL 0x2000033 -#define MASK_MUL 0xfe00707f -#define MATCH_MULH 0x2001033 -#define MASK_MULH 0xfe00707f -#define MATCH_MULHSU 0x2002033 -#define MASK_MULHSU 0xfe00707f -#define MATCH_MULHU 0x2003033 -#define MASK_MULHU 0xfe00707f -#define MATCH_DIV 0x2004033 -#define MASK_DIV 0xfe00707f -#define MATCH_DIVU 0x2005033 -#define MASK_DIVU 0xfe00707f -#define MATCH_REM 0x2006033 -#define MASK_REM 0xfe00707f -#define MATCH_REMU 0x2007033 -#define MASK_REMU 0xfe00707f -#define MATCH_MULW 0x200003b -#define MASK_MULW 0xfe00707f -#define MATCH_DIVW 0x200403b -#define MASK_DIVW 0xfe00707f -#define MATCH_DIVUW 0x200503b -#define MASK_DIVUW 0xfe00707f -#define MATCH_REMW 0x200603b -#define MASK_REMW 0xfe00707f -#define MATCH_REMUW 0x200703b -#define MASK_REMUW 0xfe00707f -#define MATCH_AMOADD_W 0x202f -#define MASK_AMOADD_W 0xf800707f -#define MATCH_AMOXOR_W 0x2000202f -#define MASK_AMOXOR_W 0xf800707f -#define MATCH_AMOOR_W 0x4000202f -#define MASK_AMOOR_W 0xf800707f -#define MATCH_AMOAND_W 0x6000202f -#define MASK_AMOAND_W 0xf800707f -#define MATCH_AMOMIN_W 0x8000202f -#define MASK_AMOMIN_W 0xf800707f -#define MATCH_AMOMAX_W 0xa000202f -#define MASK_AMOMAX_W 0xf800707f -#define MATCH_AMOMINU_W 0xc000202f -#define MASK_AMOMINU_W 0xf800707f -#define MATCH_AMOMAXU_W 0xe000202f -#define MASK_AMOMAXU_W 0xf800707f -#define MATCH_AMOSWAP_W 0x800202f -#define MASK_AMOSWAP_W 0xf800707f -#define MATCH_LR_W 0x1000202f -#define MASK_LR_W 0xf9f0707f -#define MATCH_SC_W 0x1800202f -#define MASK_SC_W 0xf800707f -#define MATCH_AMOADD_D 0x302f -#define MASK_AMOADD_D 0xf800707f -#define MATCH_AMOXOR_D 0x2000302f -#define MASK_AMOXOR_D 0xf800707f -#define MATCH_AMOOR_D 0x4000302f -#define MASK_AMOOR_D 0xf800707f -#define MATCH_AMOAND_D 0x6000302f -#define MASK_AMOAND_D 0xf800707f -#define MATCH_AMOMIN_D 0x8000302f -#define MASK_AMOMIN_D 0xf800707f -#define MATCH_AMOMAX_D 0xa000302f -#define MASK_AMOMAX_D 0xf800707f -#define MATCH_AMOMINU_D 0xc000302f -#define MASK_AMOMINU_D 0xf800707f -#define MATCH_AMOMAXU_D 0xe000302f -#define MASK_AMOMAXU_D 0xf800707f -#define MATCH_AMOSWAP_D 0x800302f -#define MASK_AMOSWAP_D 0xf800707f -#define MATCH_LR_D 0x1000302f -#define MASK_LR_D 0xf9f0707f -#define MATCH_SC_D 0x1800302f -#define MASK_SC_D 0xf800707f -#define MATCH_ECALL 0x73 -#define MASK_ECALL 0xffffffff -#define MATCH_EBREAK 0x100073 -#define MASK_EBREAK 0xffffffff -#define MATCH_URET 0x200073 -#define MASK_URET 0xffffffff -#define MATCH_SRET 0x10200073 -#define MASK_SRET 0xffffffff -#define MATCH_HRET 0x20200073 -#define MASK_HRET 0xffffffff -#define MATCH_MRET 0x30200073 -#define MASK_MRET 0xffffffff -#define MATCH_DRET 0x7b200073 -#define MASK_DRET 0xffffffff -#define MATCH_SFENCE_VM 0x10400073 -#define MASK_SFENCE_VM 0xfff07fff -#define MATCH_WFI 0x10500073 -#define MASK_WFI 0xffffffff -#define MATCH_CSRRW 0x1073 -#define MASK_CSRRW 0x707f -#define MATCH_CSRRS 0x2073 -#define MASK_CSRRS 0x707f -#define MATCH_CSRRC 0x3073 -#define MASK_CSRRC 0x707f -#define MATCH_CSRRWI 0x5073 -#define MASK_CSRRWI 0x707f -#define MATCH_CSRRSI 0x6073 -#define MASK_CSRRSI 0x707f -#define MATCH_CSRRCI 0x7073 -#define MASK_CSRRCI 0x707f -#define MATCH_FADD_S 0x53 -#define MASK_FADD_S 0xfe00007f -#define MATCH_FSUB_S 0x8000053 -#define MASK_FSUB_S 0xfe00007f -#define MATCH_FMUL_S 0x10000053 -#define MASK_FMUL_S 0xfe00007f -#define MATCH_FDIV_S 0x18000053 -#define MASK_FDIV_S 0xfe00007f -#define MATCH_FSGNJ_S 0x20000053 -#define MASK_FSGNJ_S 0xfe00707f -#define MATCH_FSGNJN_S 0x20001053 -#define MASK_FSGNJN_S 0xfe00707f -#define MATCH_FSGNJX_S 0x20002053 -#define MASK_FSGNJX_S 0xfe00707f -#define MATCH_FMIN_S 0x28000053 -#define MASK_FMIN_S 0xfe00707f -#define MATCH_FMAX_S 0x28001053 -#define MASK_FMAX_S 0xfe00707f -#define MATCH_FSQRT_S 0x58000053 -#define MASK_FSQRT_S 0xfff0007f -#define MATCH_FADD_D 0x2000053 -#define MASK_FADD_D 0xfe00007f -#define MATCH_FSUB_D 0xa000053 -#define MASK_FSUB_D 0xfe00007f -#define MATCH_FMUL_D 0x12000053 -#define MASK_FMUL_D 0xfe00007f -#define MATCH_FDIV_D 0x1a000053 -#define MASK_FDIV_D 0xfe00007f -#define MATCH_FSGNJ_D 0x22000053 -#define MASK_FSGNJ_D 0xfe00707f -#define MATCH_FSGNJN_D 0x22001053 -#define MASK_FSGNJN_D 0xfe00707f -#define MATCH_FSGNJX_D 0x22002053 -#define MASK_FSGNJX_D 0xfe00707f -#define MATCH_FMIN_D 0x2a000053 -#define MASK_FMIN_D 0xfe00707f -#define MATCH_FMAX_D 0x2a001053 -#define MASK_FMAX_D 0xfe00707f -#define MATCH_FCVT_S_D 0x40100053 -#define MASK_FCVT_S_D 0xfff0007f -#define MATCH_FCVT_D_S 0x42000053 -#define MASK_FCVT_D_S 0xfff0007f -#define MATCH_FSQRT_D 0x5a000053 -#define MASK_FSQRT_D 0xfff0007f -#define MATCH_FLE_S 0xa0000053 -#define MASK_FLE_S 0xfe00707f -#define MATCH_FLT_S 0xa0001053 -#define MASK_FLT_S 0xfe00707f -#define MATCH_FEQ_S 0xa0002053 -#define MASK_FEQ_S 0xfe00707f -#define MATCH_FLE_D 0xa2000053 -#define MASK_FLE_D 0xfe00707f -#define MATCH_FLT_D 0xa2001053 -#define MASK_FLT_D 0xfe00707f -#define MATCH_FEQ_D 0xa2002053 -#define MASK_FEQ_D 0xfe00707f -#define MATCH_FCVT_W_S 0xc0000053 -#define MASK_FCVT_W_S 0xfff0007f -#define MATCH_FCVT_WU_S 0xc0100053 -#define MASK_FCVT_WU_S 0xfff0007f -#define MATCH_FCVT_L_S 0xc0200053 -#define MASK_FCVT_L_S 0xfff0007f -#define MATCH_FCVT_LU_S 0xc0300053 -#define MASK_FCVT_LU_S 0xfff0007f -#define MATCH_FMV_X_S 0xe0000053 -#define MASK_FMV_X_S 0xfff0707f -#define MATCH_FCLASS_S 0xe0001053 -#define MASK_FCLASS_S 0xfff0707f -#define MATCH_FCVT_W_D 0xc2000053 -#define MASK_FCVT_W_D 0xfff0007f -#define MATCH_FCVT_WU_D 0xc2100053 -#define MASK_FCVT_WU_D 0xfff0007f -#define MATCH_FCVT_L_D 0xc2200053 -#define MASK_FCVT_L_D 0xfff0007f -#define MATCH_FCVT_LU_D 0xc2300053 -#define MASK_FCVT_LU_D 0xfff0007f -#define MATCH_FMV_X_D 0xe2000053 -#define MASK_FMV_X_D 0xfff0707f -#define MATCH_FCLASS_D 0xe2001053 -#define MASK_FCLASS_D 0xfff0707f -#define MATCH_FCVT_S_W 0xd0000053 -#define MASK_FCVT_S_W 0xfff0007f -#define MATCH_FCVT_S_WU 0xd0100053 -#define MASK_FCVT_S_WU 0xfff0007f -#define MATCH_FCVT_S_L 0xd0200053 -#define MASK_FCVT_S_L 0xfff0007f -#define MATCH_FCVT_S_LU 0xd0300053 -#define MASK_FCVT_S_LU 0xfff0007f -#define MATCH_FMV_S_X 0xf0000053 -#define MASK_FMV_S_X 0xfff0707f -#define MATCH_FCVT_D_W 0xd2000053 -#define MASK_FCVT_D_W 0xfff0007f -#define MATCH_FCVT_D_WU 0xd2100053 -#define MASK_FCVT_D_WU 0xfff0007f -#define MATCH_FCVT_D_L 0xd2200053 -#define MASK_FCVT_D_L 0xfff0007f -#define MATCH_FCVT_D_LU 0xd2300053 -#define MASK_FCVT_D_LU 0xfff0007f -#define MATCH_FMV_D_X 0xf2000053 -#define MASK_FMV_D_X 0xfff0707f -#define MATCH_FLW 0x2007 -#define MASK_FLW 0x707f -#define MATCH_FLD 0x3007 -#define MASK_FLD 0x707f -#define MATCH_FSW 0x2027 -#define MASK_FSW 0x707f -#define MATCH_FSD 0x3027 -#define MASK_FSD 0x707f -#define MATCH_FMADD_S 0x43 -#define MASK_FMADD_S 0x600007f -#define MATCH_FMSUB_S 0x47 -#define MASK_FMSUB_S 0x600007f -#define MATCH_FNMSUB_S 0x4b -#define MASK_FNMSUB_S 0x600007f -#define MATCH_FNMADD_S 0x4f -#define MASK_FNMADD_S 0x600007f -#define MATCH_FMADD_D 0x2000043 -#define MASK_FMADD_D 0x600007f -#define MATCH_FMSUB_D 0x2000047 -#define MASK_FMSUB_D 0x600007f -#define MATCH_FNMSUB_D 0x200004b -#define MASK_FNMSUB_D 0x600007f -#define MATCH_FNMADD_D 0x200004f -#define MASK_FNMADD_D 0x600007f -#define MATCH_C_NOP 0x1 -#define MASK_C_NOP 0xffff -#define MATCH_C_ADDI16SP 0x6101 -#define MASK_C_ADDI16SP 0xef83 -#define MATCH_C_JR 0x8002 -#define MASK_C_JR 0xf07f -#define MATCH_C_JALR 0x9002 -#define MASK_C_JALR 0xf07f -#define MATCH_C_EBREAK 0x9002 -#define MASK_C_EBREAK 0xffff -#define MATCH_C_LD 0x6000 -#define MASK_C_LD 0xe003 -#define MATCH_C_SD 0xe000 -#define MASK_C_SD 0xe003 -#define MATCH_C_ADDIW 0x2001 -#define MASK_C_ADDIW 0xe003 -#define MATCH_C_LDSP 0x6002 -#define MASK_C_LDSP 0xe003 -#define MATCH_C_SDSP 0xe002 -#define MASK_C_SDSP 0xe003 -#define MATCH_C_ADDI4SPN 0x0 -#define MASK_C_ADDI4SPN 0xe003 -#define MATCH_C_FLD 0x2000 -#define MASK_C_FLD 0xe003 -#define MATCH_C_LW 0x4000 -#define MASK_C_LW 0xe003 -#define MATCH_C_FLW 0x6000 -#define MASK_C_FLW 0xe003 -#define MATCH_C_FSD 0xa000 -#define MASK_C_FSD 0xe003 -#define MATCH_C_SW 0xc000 -#define MASK_C_SW 0xe003 -#define MATCH_C_FSW 0xe000 -#define MASK_C_FSW 0xe003 -#define MATCH_C_ADDI 0x1 -#define MASK_C_ADDI 0xe003 -#define MATCH_C_JAL 0x2001 -#define MASK_C_JAL 0xe003 -#define MATCH_C_LI 0x4001 -#define MASK_C_LI 0xe003 -#define MATCH_C_LUI 0x6001 -#define MASK_C_LUI 0xe003 -#define MATCH_C_SRLI 0x8001 -#define MASK_C_SRLI 0xec03 -#define MATCH_C_SRAI 0x8401 -#define MASK_C_SRAI 0xec03 -#define MATCH_C_ANDI 0x8801 -#define MASK_C_ANDI 0xec03 -#define MATCH_C_SUB 0x8c01 -#define MASK_C_SUB 0xfc63 -#define MATCH_C_XOR 0x8c21 -#define MASK_C_XOR 0xfc63 -#define MATCH_C_OR 0x8c41 -#define MASK_C_OR 0xfc63 -#define MATCH_C_AND 0x8c61 -#define MASK_C_AND 0xfc63 -#define MATCH_C_SUBW 0x9c01 -#define MASK_C_SUBW 0xfc63 -#define MATCH_C_ADDW 0x9c21 -#define MASK_C_ADDW 0xfc63 -#define MATCH_C_J 0xa001 -#define MASK_C_J 0xe003 -#define MATCH_C_BEQZ 0xc001 -#define MASK_C_BEQZ 0xe003 -#define MATCH_C_BNEZ 0xe001 -#define MASK_C_BNEZ 0xe003 -#define MATCH_C_SLLI 0x2 -#define MASK_C_SLLI 0xe003 -#define MATCH_C_FLDSP 0x2002 -#define MASK_C_FLDSP 0xe003 -#define MATCH_C_LWSP 0x4002 -#define MASK_C_LWSP 0xe003 -#define MATCH_C_FLWSP 0x6002 -#define MASK_C_FLWSP 0xe003 -#define MATCH_C_MV 0x8002 -#define MASK_C_MV 0xf003 -#define MATCH_C_ADD 0x9002 -#define MASK_C_ADD 0xf003 -#define MATCH_C_FSDSP 0xa002 -#define MASK_C_FSDSP 0xe003 -#define MATCH_C_SWSP 0xc002 -#define MASK_C_SWSP 0xe003 -#define MATCH_C_FSWSP 0xe002 -#define MASK_C_FSWSP 0xe003 -#define MATCH_CUSTOM0 0xb -#define MASK_CUSTOM0 0x707f -#define MATCH_CUSTOM0_RS1 0x200b -#define MASK_CUSTOM0_RS1 0x707f -#define MATCH_CUSTOM0_RS1_RS2 0x300b -#define MASK_CUSTOM0_RS1_RS2 0x707f -#define MATCH_CUSTOM0_RD 0x400b -#define MASK_CUSTOM0_RD 0x707f -#define MATCH_CUSTOM0_RD_RS1 0x600b -#define MASK_CUSTOM0_RD_RS1 0x707f -#define MATCH_CUSTOM0_RD_RS1_RS2 0x700b -#define MASK_CUSTOM0_RD_RS1_RS2 0x707f -#define MATCH_CUSTOM1 0x2b -#define MASK_CUSTOM1 0x707f -#define MATCH_CUSTOM1_RS1 0x202b -#define MASK_CUSTOM1_RS1 0x707f -#define MATCH_CUSTOM1_RS1_RS2 0x302b -#define MASK_CUSTOM1_RS1_RS2 0x707f -#define MATCH_CUSTOM1_RD 0x402b -#define MASK_CUSTOM1_RD 0x707f -#define MATCH_CUSTOM1_RD_RS1 0x602b -#define MASK_CUSTOM1_RD_RS1 0x707f -#define MATCH_CUSTOM1_RD_RS1_RS2 0x702b -#define MASK_CUSTOM1_RD_RS1_RS2 0x707f -#define MATCH_CUSTOM2 0x5b -#define MASK_CUSTOM2 0x707f -#define MATCH_CUSTOM2_RS1 0x205b -#define MASK_CUSTOM2_RS1 0x707f -#define MATCH_CUSTOM2_RS1_RS2 0x305b -#define MASK_CUSTOM2_RS1_RS2 0x707f -#define MATCH_CUSTOM2_RD 0x405b -#define MASK_CUSTOM2_RD 0x707f -#define MATCH_CUSTOM2_RD_RS1 0x605b -#define MASK_CUSTOM2_RD_RS1 0x707f -#define MATCH_CUSTOM2_RD_RS1_RS2 0x705b -#define MASK_CUSTOM2_RD_RS1_RS2 0x707f -#define MATCH_CUSTOM3 0x7b -#define MASK_CUSTOM3 0x707f -#define MATCH_CUSTOM3_RS1 0x207b -#define MASK_CUSTOM3_RS1 0x707f -#define MATCH_CUSTOM3_RS1_RS2 0x307b -#define MASK_CUSTOM3_RS1_RS2 0x707f -#define MATCH_CUSTOM3_RD 0x407b -#define MASK_CUSTOM3_RD 0x707f -#define MATCH_CUSTOM3_RD_RS1 0x607b -#define MASK_CUSTOM3_RD_RS1 0x707f -#define MATCH_CUSTOM3_RD_RS1_RS2 0x707b -#define MASK_CUSTOM3_RD_RS1_RS2 0x707f -#define CSR_FFLAGS 0x1 -#define CSR_FRM 0x2 -#define CSR_FCSR 0x3 -#define CSR_CYCLE 0xc00 -#define CSR_TIME 0xc01 -#define CSR_INSTRET 0xc02 -#define CSR_HPMCOUNTER3 0xc03 -#define CSR_HPMCOUNTER4 0xc04 -#define CSR_HPMCOUNTER5 0xc05 -#define CSR_HPMCOUNTER6 0xc06 -#define CSR_HPMCOUNTER7 0xc07 -#define CSR_HPMCOUNTER8 0xc08 -#define CSR_HPMCOUNTER9 0xc09 -#define CSR_HPMCOUNTER10 0xc0a -#define CSR_HPMCOUNTER11 0xc0b -#define CSR_HPMCOUNTER12 0xc0c -#define CSR_HPMCOUNTER13 0xc0d -#define CSR_HPMCOUNTER14 0xc0e -#define CSR_HPMCOUNTER15 0xc0f -#define CSR_HPMCOUNTER16 0xc10 -#define CSR_HPMCOUNTER17 0xc11 -#define CSR_HPMCOUNTER18 0xc12 -#define CSR_HPMCOUNTER19 0xc13 -#define CSR_HPMCOUNTER20 0xc14 -#define CSR_HPMCOUNTER21 0xc15 -#define CSR_HPMCOUNTER22 0xc16 -#define CSR_HPMCOUNTER23 0xc17 -#define CSR_HPMCOUNTER24 0xc18 -#define CSR_HPMCOUNTER25 0xc19 -#define CSR_HPMCOUNTER26 0xc1a -#define CSR_HPMCOUNTER27 0xc1b -#define CSR_HPMCOUNTER28 0xc1c -#define CSR_HPMCOUNTER29 0xc1d -#define CSR_HPMCOUNTER30 0xc1e -#define CSR_HPMCOUNTER31 0xc1f -#define CSR_SSTATUS 0x100 -#define CSR_SIE 0x104 -#define CSR_STVEC 0x105 -#define CSR_SSCRATCH 0x140 -#define CSR_SEPC 0x141 -#define CSR_SCAUSE 0x142 -#define CSR_SBADADDR 0x143 -#define CSR_SIP 0x144 -#define CSR_SPTBR 0x180 -#define CSR_MSTATUS 0x300 -#define CSR_MISA 0x301 -#define CSR_MEDELEG 0x302 -#define CSR_MIDELEG 0x303 -#define CSR_MIE 0x304 -#define CSR_MTVEC 0x305 -#define CSR_MSCRATCH 0x340 -#define CSR_MEPC 0x341 -#define CSR_MCAUSE 0x342 -#define CSR_MBADADDR 0x343 -#define CSR_MIP 0x344 -#define CSR_TSELECT 0x7a0 -#define CSR_TDATA1 0x7a1 -#define CSR_TDATA2 0x7a2 -#define CSR_TDATA3 0x7a3 -#define CSR_DCSR 0x7b0 -#define CSR_DPC 0x7b1 -#define CSR_DSCRATCH 0x7b2 -#define CSR_MCYCLE 0xb00 -#define CSR_MINSTRET 0xb02 -#define CSR_MHPMCOUNTER3 0xb03 -#define CSR_MHPMCOUNTER4 0xb04 -#define CSR_MHPMCOUNTER5 0xb05 -#define CSR_MHPMCOUNTER6 0xb06 -#define CSR_MHPMCOUNTER7 0xb07 -#define CSR_MHPMCOUNTER8 0xb08 -#define CSR_MHPMCOUNTER9 0xb09 -#define CSR_MHPMCOUNTER10 0xb0a -#define CSR_MHPMCOUNTER11 0xb0b -#define CSR_MHPMCOUNTER12 0xb0c -#define CSR_MHPMCOUNTER13 0xb0d -#define CSR_MHPMCOUNTER14 0xb0e -#define CSR_MHPMCOUNTER15 0xb0f -#define CSR_MHPMCOUNTER16 0xb10 -#define CSR_MHPMCOUNTER17 0xb11 -#define CSR_MHPMCOUNTER18 0xb12 -#define CSR_MHPMCOUNTER19 0xb13 -#define CSR_MHPMCOUNTER20 0xb14 -#define CSR_MHPMCOUNTER21 0xb15 -#define CSR_MHPMCOUNTER22 0xb16 -#define CSR_MHPMCOUNTER23 0xb17 -#define CSR_MHPMCOUNTER24 0xb18 -#define CSR_MHPMCOUNTER25 0xb19 -#define CSR_MHPMCOUNTER26 0xb1a -#define CSR_MHPMCOUNTER27 0xb1b -#define CSR_MHPMCOUNTER28 0xb1c -#define CSR_MHPMCOUNTER29 0xb1d -#define CSR_MHPMCOUNTER30 0xb1e -#define CSR_MHPMCOUNTER31 0xb1f -#define CSR_MUCOUNTEREN 0x320 -#define CSR_MSCOUNTEREN 0x321 -#define CSR_MHPMEVENT3 0x323 -#define CSR_MHPMEVENT4 0x324 -#define CSR_MHPMEVENT5 0x325 -#define CSR_MHPMEVENT6 0x326 -#define CSR_MHPMEVENT7 0x327 -#define CSR_MHPMEVENT8 0x328 -#define CSR_MHPMEVENT9 0x329 -#define CSR_MHPMEVENT10 0x32a -#define CSR_MHPMEVENT11 0x32b -#define CSR_MHPMEVENT12 0x32c -#define CSR_MHPMEVENT13 0x32d -#define CSR_MHPMEVENT14 0x32e -#define CSR_MHPMEVENT15 0x32f -#define CSR_MHPMEVENT16 0x330 -#define CSR_MHPMEVENT17 0x331 -#define CSR_MHPMEVENT18 0x332 -#define CSR_MHPMEVENT19 0x333 -#define CSR_MHPMEVENT20 0x334 -#define CSR_MHPMEVENT21 0x335 -#define CSR_MHPMEVENT22 0x336 -#define CSR_MHPMEVENT23 0x337 -#define CSR_MHPMEVENT24 0x338 -#define CSR_MHPMEVENT25 0x339 -#define CSR_MHPMEVENT26 0x33a -#define CSR_MHPMEVENT27 0x33b -#define CSR_MHPMEVENT28 0x33c -#define CSR_MHPMEVENT29 0x33d -#define CSR_MHPMEVENT30 0x33e -#define CSR_MHPMEVENT31 0x33f -#define CSR_MVENDORID 0xf11 -#define CSR_MARCHID 0xf12 -#define CSR_MIMPID 0xf13 -#define CSR_MHARTID 0xf14 -#define CSR_CYCLEH 0xc80 -#define CSR_TIMEH 0xc81 -#define CSR_INSTRETH 0xc82 -#define CSR_HPMCOUNTER3H 0xc83 -#define CSR_HPMCOUNTER4H 0xc84 -#define CSR_HPMCOUNTER5H 0xc85 -#define CSR_HPMCOUNTER6H 0xc86 -#define CSR_HPMCOUNTER7H 0xc87 -#define CSR_HPMCOUNTER8H 0xc88 -#define CSR_HPMCOUNTER9H 0xc89 -#define CSR_HPMCOUNTER10H 0xc8a -#define CSR_HPMCOUNTER11H 0xc8b -#define CSR_HPMCOUNTER12H 0xc8c -#define CSR_HPMCOUNTER13H 0xc8d -#define CSR_HPMCOUNTER14H 0xc8e -#define CSR_HPMCOUNTER15H 0xc8f -#define CSR_HPMCOUNTER16H 0xc90 -#define CSR_HPMCOUNTER17H 0xc91 -#define CSR_HPMCOUNTER18H 0xc92 -#define CSR_HPMCOUNTER19H 0xc93 -#define CSR_HPMCOUNTER20H 0xc94 -#define CSR_HPMCOUNTER21H 0xc95 -#define CSR_HPMCOUNTER22H 0xc96 -#define CSR_HPMCOUNTER23H 0xc97 -#define CSR_HPMCOUNTER24H 0xc98 -#define CSR_HPMCOUNTER25H 0xc99 -#define CSR_HPMCOUNTER26H 0xc9a -#define CSR_HPMCOUNTER27H 0xc9b -#define CSR_HPMCOUNTER28H 0xc9c -#define CSR_HPMCOUNTER29H 0xc9d -#define CSR_HPMCOUNTER30H 0xc9e -#define CSR_HPMCOUNTER31H 0xc9f -#define CSR_MCYCLEH 0xb80 -#define CSR_MINSTRETH 0xb82 -#define CSR_MHPMCOUNTER3H 0xb83 -#define CSR_MHPMCOUNTER4H 0xb84 -#define CSR_MHPMCOUNTER5H 0xb85 -#define CSR_MHPMCOUNTER6H 0xb86 -#define CSR_MHPMCOUNTER7H 0xb87 -#define CSR_MHPMCOUNTER8H 0xb88 -#define CSR_MHPMCOUNTER9H 0xb89 -#define CSR_MHPMCOUNTER10H 0xb8a -#define CSR_MHPMCOUNTER11H 0xb8b -#define CSR_MHPMCOUNTER12H 0xb8c -#define CSR_MHPMCOUNTER13H 0xb8d -#define CSR_MHPMCOUNTER14H 0xb8e -#define CSR_MHPMCOUNTER15H 0xb8f -#define CSR_MHPMCOUNTER16H 0xb90 -#define CSR_MHPMCOUNTER17H 0xb91 -#define CSR_MHPMCOUNTER18H 0xb92 -#define CSR_MHPMCOUNTER19H 0xb93 -#define CSR_MHPMCOUNTER20H 0xb94 -#define CSR_MHPMCOUNTER21H 0xb95 -#define CSR_MHPMCOUNTER22H 0xb96 -#define CSR_MHPMCOUNTER23H 0xb97 -#define CSR_MHPMCOUNTER24H 0xb98 -#define CSR_MHPMCOUNTER25H 0xb99 -#define CSR_MHPMCOUNTER26H 0xb9a -#define CSR_MHPMCOUNTER27H 0xb9b -#define CSR_MHPMCOUNTER28H 0xb9c -#define CSR_MHPMCOUNTER29H 0xb9d -#define CSR_MHPMCOUNTER30H 0xb9e -#define CSR_MHPMCOUNTER31H 0xb9f -#define CAUSE_MISALIGNED_FETCH 0x0 -#define CAUSE_FAULT_FETCH 0x1 -#define CAUSE_ILLEGAL_INSTRUCTION 0x2 -#define CAUSE_BREAKPOINT 0x3 -#define CAUSE_MISALIGNED_LOAD 0x4 -#define CAUSE_FAULT_LOAD 0x5 -#define CAUSE_MISALIGNED_STORE 0x6 -#define CAUSE_FAULT_STORE 0x7 -#define CAUSE_USER_ECALL 0x8 -#define CAUSE_SUPERVISOR_ECALL 0x9 -#define CAUSE_HYPERVISOR_ECALL 0xa -#define CAUSE_MACHINE_ECALL 0xb -#endif -#ifdef DECLARE_INSN -DECLARE_INSN(beq, MATCH_BEQ, MASK_BEQ) -DECLARE_INSN(bne, MATCH_BNE, MASK_BNE) -DECLARE_INSN(blt, MATCH_BLT, MASK_BLT) -DECLARE_INSN(bge, MATCH_BGE, MASK_BGE) -DECLARE_INSN(bltu, MATCH_BLTU, MASK_BLTU) -DECLARE_INSN(bgeu, MATCH_BGEU, MASK_BGEU) -DECLARE_INSN(jalr, MATCH_JALR, MASK_JALR) -DECLARE_INSN(jal, MATCH_JAL, MASK_JAL) -DECLARE_INSN(lui, MATCH_LUI, MASK_LUI) -DECLARE_INSN(auipc, MATCH_AUIPC, MASK_AUIPC) -DECLARE_INSN(addi, MATCH_ADDI, MASK_ADDI) -DECLARE_INSN(slli, MATCH_SLLI, MASK_SLLI) -DECLARE_INSN(slti, MATCH_SLTI, MASK_SLTI) -DECLARE_INSN(sltiu, MATCH_SLTIU, MASK_SLTIU) -DECLARE_INSN(xori, MATCH_XORI, MASK_XORI) -DECLARE_INSN(srli, MATCH_SRLI, MASK_SRLI) -DECLARE_INSN(srai, MATCH_SRAI, MASK_SRAI) -DECLARE_INSN(ori, MATCH_ORI, MASK_ORI) -DECLARE_INSN(andi, MATCH_ANDI, MASK_ANDI) -DECLARE_INSN(add, MATCH_ADD, MASK_ADD) -DECLARE_INSN(sub, MATCH_SUB, MASK_SUB) -DECLARE_INSN(sll, MATCH_SLL, MASK_SLL) -DECLARE_INSN(slt, MATCH_SLT, MASK_SLT) -DECLARE_INSN(sltu, MATCH_SLTU, MASK_SLTU) -DECLARE_INSN(xor, MATCH_XOR, MASK_XOR) -DECLARE_INSN(srl, MATCH_SRL, MASK_SRL) -DECLARE_INSN(sra, MATCH_SRA, MASK_SRA) -DECLARE_INSN(or, MATCH_OR, MASK_OR) -DECLARE_INSN(and, MATCH_AND, MASK_AND) -DECLARE_INSN(addiw, MATCH_ADDIW, MASK_ADDIW) -DECLARE_INSN(slliw, MATCH_SLLIW, MASK_SLLIW) -DECLARE_INSN(srliw, MATCH_SRLIW, MASK_SRLIW) -DECLARE_INSN(sraiw, MATCH_SRAIW, MASK_SRAIW) -DECLARE_INSN(addw, MATCH_ADDW, MASK_ADDW) -DECLARE_INSN(subw, MATCH_SUBW, MASK_SUBW) -DECLARE_INSN(sllw, MATCH_SLLW, MASK_SLLW) -DECLARE_INSN(srlw, MATCH_SRLW, MASK_SRLW) -DECLARE_INSN(sraw, MATCH_SRAW, MASK_SRAW) -DECLARE_INSN(lb, MATCH_LB, MASK_LB) -DECLARE_INSN(lh, MATCH_LH, MASK_LH) -DECLARE_INSN(lw, MATCH_LW, MASK_LW) -DECLARE_INSN(ld, MATCH_LD, MASK_LD) -DECLARE_INSN(lbu, MATCH_LBU, MASK_LBU) -DECLARE_INSN(lhu, MATCH_LHU, MASK_LHU) -DECLARE_INSN(lwu, MATCH_LWU, MASK_LWU) -DECLARE_INSN(sb, MATCH_SB, MASK_SB) -DECLARE_INSN(sh, MATCH_SH, MASK_SH) -DECLARE_INSN(sw, MATCH_SW, MASK_SW) -DECLARE_INSN(sd, MATCH_SD, MASK_SD) -DECLARE_INSN(fence, MATCH_FENCE, MASK_FENCE) -DECLARE_INSN(fence_i, MATCH_FENCE_I, MASK_FENCE_I) -DECLARE_INSN(mul, MATCH_MUL, MASK_MUL) -DECLARE_INSN(mulh, MATCH_MULH, MASK_MULH) -DECLARE_INSN(mulhsu, MATCH_MULHSU, MASK_MULHSU) -DECLARE_INSN(mulhu, MATCH_MULHU, MASK_MULHU) -DECLARE_INSN(div, MATCH_DIV, MASK_DIV) -DECLARE_INSN(divu, MATCH_DIVU, MASK_DIVU) -DECLARE_INSN(rem, MATCH_REM, MASK_REM) -DECLARE_INSN(remu, MATCH_REMU, MASK_REMU) -DECLARE_INSN(mulw, MATCH_MULW, MASK_MULW) -DECLARE_INSN(divw, MATCH_DIVW, MASK_DIVW) -DECLARE_INSN(divuw, MATCH_DIVUW, MASK_DIVUW) -DECLARE_INSN(remw, MATCH_REMW, MASK_REMW) -DECLARE_INSN(remuw, MATCH_REMUW, MASK_REMUW) -DECLARE_INSN(amoadd_w, MATCH_AMOADD_W, MASK_AMOADD_W) -DECLARE_INSN(amoxor_w, MATCH_AMOXOR_W, MASK_AMOXOR_W) -DECLARE_INSN(amoor_w, MATCH_AMOOR_W, MASK_AMOOR_W) -DECLARE_INSN(amoand_w, MATCH_AMOAND_W, MASK_AMOAND_W) -DECLARE_INSN(amomin_w, MATCH_AMOMIN_W, MASK_AMOMIN_W) -DECLARE_INSN(amomax_w, MATCH_AMOMAX_W, MASK_AMOMAX_W) -DECLARE_INSN(amominu_w, MATCH_AMOMINU_W, MASK_AMOMINU_W) -DECLARE_INSN(amomaxu_w, MATCH_AMOMAXU_W, MASK_AMOMAXU_W) -DECLARE_INSN(amoswap_w, MATCH_AMOSWAP_W, MASK_AMOSWAP_W) -DECLARE_INSN(lr_w, MATCH_LR_W, MASK_LR_W) -DECLARE_INSN(sc_w, MATCH_SC_W, MASK_SC_W) -DECLARE_INSN(amoadd_d, MATCH_AMOADD_D, MASK_AMOADD_D) -DECLARE_INSN(amoxor_d, MATCH_AMOXOR_D, MASK_AMOXOR_D) -DECLARE_INSN(amoor_d, MATCH_AMOOR_D, MASK_AMOOR_D) -DECLARE_INSN(amoand_d, MATCH_AMOAND_D, MASK_AMOAND_D) -DECLARE_INSN(amomin_d, MATCH_AMOMIN_D, MASK_AMOMIN_D) -DECLARE_INSN(amomax_d, MATCH_AMOMAX_D, MASK_AMOMAX_D) -DECLARE_INSN(amominu_d, MATCH_AMOMINU_D, MASK_AMOMINU_D) -DECLARE_INSN(amomaxu_d, MATCH_AMOMAXU_D, MASK_AMOMAXU_D) -DECLARE_INSN(amoswap_d, MATCH_AMOSWAP_D, MASK_AMOSWAP_D) -DECLARE_INSN(lr_d, MATCH_LR_D, MASK_LR_D) -DECLARE_INSN(sc_d, MATCH_SC_D, MASK_SC_D) -DECLARE_INSN(ecall, MATCH_ECALL, MASK_ECALL) -DECLARE_INSN(ebreak, MATCH_EBREAK, MASK_EBREAK) -DECLARE_INSN(uret, MATCH_URET, MASK_URET) -DECLARE_INSN(sret, MATCH_SRET, MASK_SRET) -DECLARE_INSN(hret, MATCH_HRET, MASK_HRET) -DECLARE_INSN(mret, MATCH_MRET, MASK_MRET) -DECLARE_INSN(dret, MATCH_DRET, MASK_DRET) -DECLARE_INSN(sfence_vm, MATCH_SFENCE_VM, MASK_SFENCE_VM) -DECLARE_INSN(wfi, MATCH_WFI, MASK_WFI) -DECLARE_INSN(csrrw, MATCH_CSRRW, MASK_CSRRW) -DECLARE_INSN(csrrs, MATCH_CSRRS, MASK_CSRRS) -DECLARE_INSN(csrrc, MATCH_CSRRC, MASK_CSRRC) -DECLARE_INSN(csrrwi, MATCH_CSRRWI, MASK_CSRRWI) -DECLARE_INSN(csrrsi, MATCH_CSRRSI, MASK_CSRRSI) -DECLARE_INSN(csrrci, MATCH_CSRRCI, MASK_CSRRCI) -DECLARE_INSN(fadd_s, MATCH_FADD_S, MASK_FADD_S) -DECLARE_INSN(fsub_s, MATCH_FSUB_S, MASK_FSUB_S) -DECLARE_INSN(fmul_s, MATCH_FMUL_S, MASK_FMUL_S) -DECLARE_INSN(fdiv_s, MATCH_FDIV_S, MASK_FDIV_S) -DECLARE_INSN(fsgnj_s, MATCH_FSGNJ_S, MASK_FSGNJ_S) -DECLARE_INSN(fsgnjn_s, MATCH_FSGNJN_S, MASK_FSGNJN_S) -DECLARE_INSN(fsgnjx_s, MATCH_FSGNJX_S, MASK_FSGNJX_S) -DECLARE_INSN(fmin_s, MATCH_FMIN_S, MASK_FMIN_S) -DECLARE_INSN(fmax_s, MATCH_FMAX_S, MASK_FMAX_S) -DECLARE_INSN(fsqrt_s, MATCH_FSQRT_S, MASK_FSQRT_S) -DECLARE_INSN(fadd_d, MATCH_FADD_D, MASK_FADD_D) -DECLARE_INSN(fsub_d, MATCH_FSUB_D, MASK_FSUB_D) -DECLARE_INSN(fmul_d, MATCH_FMUL_D, MASK_FMUL_D) -DECLARE_INSN(fdiv_d, MATCH_FDIV_D, MASK_FDIV_D) -DECLARE_INSN(fsgnj_d, MATCH_FSGNJ_D, MASK_FSGNJ_D) -DECLARE_INSN(fsgnjn_d, MATCH_FSGNJN_D, MASK_FSGNJN_D) -DECLARE_INSN(fsgnjx_d, MATCH_FSGNJX_D, MASK_FSGNJX_D) -DECLARE_INSN(fmin_d, MATCH_FMIN_D, MASK_FMIN_D) -DECLARE_INSN(fmax_d, MATCH_FMAX_D, MASK_FMAX_D) -DECLARE_INSN(fcvt_s_d, MATCH_FCVT_S_D, MASK_FCVT_S_D) -DECLARE_INSN(fcvt_d_s, MATCH_FCVT_D_S, MASK_FCVT_D_S) -DECLARE_INSN(fsqrt_d, MATCH_FSQRT_D, MASK_FSQRT_D) -DECLARE_INSN(fle_s, MATCH_FLE_S, MASK_FLE_S) -DECLARE_INSN(flt_s, MATCH_FLT_S, MASK_FLT_S) -DECLARE_INSN(feq_s, MATCH_FEQ_S, MASK_FEQ_S) -DECLARE_INSN(fle_d, MATCH_FLE_D, MASK_FLE_D) -DECLARE_INSN(flt_d, MATCH_FLT_D, MASK_FLT_D) -DECLARE_INSN(feq_d, MATCH_FEQ_D, MASK_FEQ_D) -DECLARE_INSN(fcvt_w_s, MATCH_FCVT_W_S, MASK_FCVT_W_S) -DECLARE_INSN(fcvt_wu_s, MATCH_FCVT_WU_S, MASK_FCVT_WU_S) -DECLARE_INSN(fcvt_l_s, MATCH_FCVT_L_S, MASK_FCVT_L_S) -DECLARE_INSN(fcvt_lu_s, MATCH_FCVT_LU_S, MASK_FCVT_LU_S) -DECLARE_INSN(fmv_x_s, MATCH_FMV_X_S, MASK_FMV_X_S) -DECLARE_INSN(fclass_s, MATCH_FCLASS_S, MASK_FCLASS_S) -DECLARE_INSN(fcvt_w_d, MATCH_FCVT_W_D, MASK_FCVT_W_D) -DECLARE_INSN(fcvt_wu_d, MATCH_FCVT_WU_D, MASK_FCVT_WU_D) -DECLARE_INSN(fcvt_l_d, MATCH_FCVT_L_D, MASK_FCVT_L_D) -DECLARE_INSN(fcvt_lu_d, MATCH_FCVT_LU_D, MASK_FCVT_LU_D) -DECLARE_INSN(fmv_x_d, MATCH_FMV_X_D, MASK_FMV_X_D) -DECLARE_INSN(fclass_d, MATCH_FCLASS_D, MASK_FCLASS_D) -DECLARE_INSN(fcvt_s_w, MATCH_FCVT_S_W, MASK_FCVT_S_W) -DECLARE_INSN(fcvt_s_wu, MATCH_FCVT_S_WU, MASK_FCVT_S_WU) -DECLARE_INSN(fcvt_s_l, MATCH_FCVT_S_L, MASK_FCVT_S_L) -DECLARE_INSN(fcvt_s_lu, MATCH_FCVT_S_LU, MASK_FCVT_S_LU) -DECLARE_INSN(fmv_s_x, MATCH_FMV_S_X, MASK_FMV_S_X) -DECLARE_INSN(fcvt_d_w, MATCH_FCVT_D_W, MASK_FCVT_D_W) -DECLARE_INSN(fcvt_d_wu, MATCH_FCVT_D_WU, MASK_FCVT_D_WU) -DECLARE_INSN(fcvt_d_l, MATCH_FCVT_D_L, MASK_FCVT_D_L) -DECLARE_INSN(fcvt_d_lu, MATCH_FCVT_D_LU, MASK_FCVT_D_LU) -DECLARE_INSN(fmv_d_x, MATCH_FMV_D_X, MASK_FMV_D_X) -DECLARE_INSN(flw, MATCH_FLW, MASK_FLW) -DECLARE_INSN(fld, MATCH_FLD, MASK_FLD) -DECLARE_INSN(fsw, MATCH_FSW, MASK_FSW) -DECLARE_INSN(fsd, MATCH_FSD, MASK_FSD) -DECLARE_INSN(fmadd_s, MATCH_FMADD_S, MASK_FMADD_S) -DECLARE_INSN(fmsub_s, MATCH_FMSUB_S, MASK_FMSUB_S) -DECLARE_INSN(fnmsub_s, MATCH_FNMSUB_S, MASK_FNMSUB_S) -DECLARE_INSN(fnmadd_s, MATCH_FNMADD_S, MASK_FNMADD_S) -DECLARE_INSN(fmadd_d, MATCH_FMADD_D, MASK_FMADD_D) -DECLARE_INSN(fmsub_d, MATCH_FMSUB_D, MASK_FMSUB_D) -DECLARE_INSN(fnmsub_d, MATCH_FNMSUB_D, MASK_FNMSUB_D) -DECLARE_INSN(fnmadd_d, MATCH_FNMADD_D, MASK_FNMADD_D) -DECLARE_INSN(c_nop, MATCH_C_NOP, MASK_C_NOP) -DECLARE_INSN(c_addi16sp, MATCH_C_ADDI16SP, MASK_C_ADDI16SP) -DECLARE_INSN(c_jr, MATCH_C_JR, MASK_C_JR) -DECLARE_INSN(c_jalr, MATCH_C_JALR, MASK_C_JALR) -DECLARE_INSN(c_ebreak, MATCH_C_EBREAK, MASK_C_EBREAK) -DECLARE_INSN(c_ld, MATCH_C_LD, MASK_C_LD) -DECLARE_INSN(c_sd, MATCH_C_SD, MASK_C_SD) -DECLARE_INSN(c_addiw, MATCH_C_ADDIW, MASK_C_ADDIW) -DECLARE_INSN(c_ldsp, MATCH_C_LDSP, MASK_C_LDSP) -DECLARE_INSN(c_sdsp, MATCH_C_SDSP, MASK_C_SDSP) -DECLARE_INSN(c_addi4spn, MATCH_C_ADDI4SPN, MASK_C_ADDI4SPN) -DECLARE_INSN(c_fld, MATCH_C_FLD, MASK_C_FLD) -DECLARE_INSN(c_lw, MATCH_C_LW, MASK_C_LW) -DECLARE_INSN(c_flw, MATCH_C_FLW, MASK_C_FLW) -DECLARE_INSN(c_fsd, MATCH_C_FSD, MASK_C_FSD) -DECLARE_INSN(c_sw, MATCH_C_SW, MASK_C_SW) -DECLARE_INSN(c_fsw, MATCH_C_FSW, MASK_C_FSW) -DECLARE_INSN(c_addi, MATCH_C_ADDI, MASK_C_ADDI) -DECLARE_INSN(c_jal, MATCH_C_JAL, MASK_C_JAL) -DECLARE_INSN(c_li, MATCH_C_LI, MASK_C_LI) -DECLARE_INSN(c_lui, MATCH_C_LUI, MASK_C_LUI) -DECLARE_INSN(c_srli, MATCH_C_SRLI, MASK_C_SRLI) -DECLARE_INSN(c_srai, MATCH_C_SRAI, MASK_C_SRAI) -DECLARE_INSN(c_andi, MATCH_C_ANDI, MASK_C_ANDI) -DECLARE_INSN(c_sub, MATCH_C_SUB, MASK_C_SUB) -DECLARE_INSN(c_xor, MATCH_C_XOR, MASK_C_XOR) -DECLARE_INSN(c_or, MATCH_C_OR, MASK_C_OR) -DECLARE_INSN(c_and, MATCH_C_AND, MASK_C_AND) -DECLARE_INSN(c_subw, MATCH_C_SUBW, MASK_C_SUBW) -DECLARE_INSN(c_addw, MATCH_C_ADDW, MASK_C_ADDW) -DECLARE_INSN(c_j, MATCH_C_J, MASK_C_J) -DECLARE_INSN(c_beqz, MATCH_C_BEQZ, MASK_C_BEQZ) -DECLARE_INSN(c_bnez, MATCH_C_BNEZ, MASK_C_BNEZ) -DECLARE_INSN(c_slli, MATCH_C_SLLI, MASK_C_SLLI) -DECLARE_INSN(c_fldsp, MATCH_C_FLDSP, MASK_C_FLDSP) -DECLARE_INSN(c_lwsp, MATCH_C_LWSP, MASK_C_LWSP) -DECLARE_INSN(c_flwsp, MATCH_C_FLWSP, MASK_C_FLWSP) -DECLARE_INSN(c_mv, MATCH_C_MV, MASK_C_MV) -DECLARE_INSN(c_add, MATCH_C_ADD, MASK_C_ADD) -DECLARE_INSN(c_fsdsp, MATCH_C_FSDSP, MASK_C_FSDSP) -DECLARE_INSN(c_swsp, MATCH_C_SWSP, MASK_C_SWSP) -DECLARE_INSN(c_fswsp, MATCH_C_FSWSP, MASK_C_FSWSP) -DECLARE_INSN(custom0, MATCH_CUSTOM0, MASK_CUSTOM0) -DECLARE_INSN(custom0_rs1, MATCH_CUSTOM0_RS1, MASK_CUSTOM0_RS1) -DECLARE_INSN(custom0_rs1_rs2, MATCH_CUSTOM0_RS1_RS2, MASK_CUSTOM0_RS1_RS2) -DECLARE_INSN(custom0_rd, MATCH_CUSTOM0_RD, MASK_CUSTOM0_RD) -DECLARE_INSN(custom0_rd_rs1, MATCH_CUSTOM0_RD_RS1, MASK_CUSTOM0_RD_RS1) -DECLARE_INSN(custom0_rd_rs1_rs2, MATCH_CUSTOM0_RD_RS1_RS2, MASK_CUSTOM0_RD_RS1_RS2) -DECLARE_INSN(custom1, MATCH_CUSTOM1, MASK_CUSTOM1) -DECLARE_INSN(custom1_rs1, MATCH_CUSTOM1_RS1, MASK_CUSTOM1_RS1) -DECLARE_INSN(custom1_rs1_rs2, MATCH_CUSTOM1_RS1_RS2, MASK_CUSTOM1_RS1_RS2) -DECLARE_INSN(custom1_rd, MATCH_CUSTOM1_RD, MASK_CUSTOM1_RD) -DECLARE_INSN(custom1_rd_rs1, MATCH_CUSTOM1_RD_RS1, MASK_CUSTOM1_RD_RS1) -DECLARE_INSN(custom1_rd_rs1_rs2, MATCH_CUSTOM1_RD_RS1_RS2, MASK_CUSTOM1_RD_RS1_RS2) -DECLARE_INSN(custom2, MATCH_CUSTOM2, MASK_CUSTOM2) -DECLARE_INSN(custom2_rs1, MATCH_CUSTOM2_RS1, MASK_CUSTOM2_RS1) -DECLARE_INSN(custom2_rs1_rs2, MATCH_CUSTOM2_RS1_RS2, MASK_CUSTOM2_RS1_RS2) -DECLARE_INSN(custom2_rd, MATCH_CUSTOM2_RD, MASK_CUSTOM2_RD) -DECLARE_INSN(custom2_rd_rs1, MATCH_CUSTOM2_RD_RS1, MASK_CUSTOM2_RD_RS1) -DECLARE_INSN(custom2_rd_rs1_rs2, MATCH_CUSTOM2_RD_RS1_RS2, MASK_CUSTOM2_RD_RS1_RS2) -DECLARE_INSN(custom3, MATCH_CUSTOM3, MASK_CUSTOM3) -DECLARE_INSN(custom3_rs1, MATCH_CUSTOM3_RS1, MASK_CUSTOM3_RS1) -DECLARE_INSN(custom3_rs1_rs2, MATCH_CUSTOM3_RS1_RS2, MASK_CUSTOM3_RS1_RS2) -DECLARE_INSN(custom3_rd, MATCH_CUSTOM3_RD, MASK_CUSTOM3_RD) -DECLARE_INSN(custom3_rd_rs1, MATCH_CUSTOM3_RD_RS1, MASK_CUSTOM3_RD_RS1) -DECLARE_INSN(custom3_rd_rs1_rs2, MATCH_CUSTOM3_RD_RS1_RS2, MASK_CUSTOM3_RD_RS1_RS2) -#endif -#ifdef DECLARE_CSR -DECLARE_CSR(fflags, CSR_FFLAGS) -DECLARE_CSR(frm, CSR_FRM) -DECLARE_CSR(fcsr, CSR_FCSR) -DECLARE_CSR(cycle, CSR_CYCLE) -DECLARE_CSR(time, CSR_TIME) -DECLARE_CSR(instret, CSR_INSTRET) -DECLARE_CSR(hpmcounter3, CSR_HPMCOUNTER3) -DECLARE_CSR(hpmcounter4, CSR_HPMCOUNTER4) -DECLARE_CSR(hpmcounter5, CSR_HPMCOUNTER5) -DECLARE_CSR(hpmcounter6, CSR_HPMCOUNTER6) -DECLARE_CSR(hpmcounter7, CSR_HPMCOUNTER7) -DECLARE_CSR(hpmcounter8, CSR_HPMCOUNTER8) -DECLARE_CSR(hpmcounter9, CSR_HPMCOUNTER9) -DECLARE_CSR(hpmcounter10, CSR_HPMCOUNTER10) -DECLARE_CSR(hpmcounter11, CSR_HPMCOUNTER11) -DECLARE_CSR(hpmcounter12, CSR_HPMCOUNTER12) -DECLARE_CSR(hpmcounter13, CSR_HPMCOUNTER13) -DECLARE_CSR(hpmcounter14, CSR_HPMCOUNTER14) -DECLARE_CSR(hpmcounter15, CSR_HPMCOUNTER15) -DECLARE_CSR(hpmcounter16, CSR_HPMCOUNTER16) -DECLARE_CSR(hpmcounter17, CSR_HPMCOUNTER17) -DECLARE_CSR(hpmcounter18, CSR_HPMCOUNTER18) -DECLARE_CSR(hpmcounter19, CSR_HPMCOUNTER19) -DECLARE_CSR(hpmcounter20, CSR_HPMCOUNTER20) -DECLARE_CSR(hpmcounter21, CSR_HPMCOUNTER21) -DECLARE_CSR(hpmcounter22, CSR_HPMCOUNTER22) -DECLARE_CSR(hpmcounter23, CSR_HPMCOUNTER23) -DECLARE_CSR(hpmcounter24, CSR_HPMCOUNTER24) -DECLARE_CSR(hpmcounter25, CSR_HPMCOUNTER25) -DECLARE_CSR(hpmcounter26, CSR_HPMCOUNTER26) -DECLARE_CSR(hpmcounter27, CSR_HPMCOUNTER27) -DECLARE_CSR(hpmcounter28, CSR_HPMCOUNTER28) -DECLARE_CSR(hpmcounter29, CSR_HPMCOUNTER29) -DECLARE_CSR(hpmcounter30, CSR_HPMCOUNTER30) -DECLARE_CSR(hpmcounter31, CSR_HPMCOUNTER31) -DECLARE_CSR(sstatus, CSR_SSTATUS) -DECLARE_CSR(sie, CSR_SIE) -DECLARE_CSR(stvec, CSR_STVEC) -DECLARE_CSR(sscratch, CSR_SSCRATCH) -DECLARE_CSR(sepc, CSR_SEPC) -DECLARE_CSR(scause, CSR_SCAUSE) -DECLARE_CSR(sbadaddr, CSR_SBADADDR) -DECLARE_CSR(sip, CSR_SIP) -DECLARE_CSR(sptbr, CSR_SPTBR) -DECLARE_CSR(mstatus, CSR_MSTATUS) -DECLARE_CSR(misa, CSR_MISA) -DECLARE_CSR(medeleg, CSR_MEDELEG) -DECLARE_CSR(mideleg, CSR_MIDELEG) -DECLARE_CSR(mie, CSR_MIE) -DECLARE_CSR(mtvec, CSR_MTVEC) -DECLARE_CSR(mscratch, CSR_MSCRATCH) -DECLARE_CSR(mepc, CSR_MEPC) -DECLARE_CSR(mcause, CSR_MCAUSE) -DECLARE_CSR(mbadaddr, CSR_MBADADDR) -DECLARE_CSR(mip, CSR_MIP) -DECLARE_CSR(tselect, CSR_TSELECT) -DECLARE_CSR(tdata1, CSR_TDATA1) -DECLARE_CSR(tdata2, CSR_TDATA2) -DECLARE_CSR(tdata3, CSR_TDATA3) -DECLARE_CSR(dcsr, CSR_DCSR) -DECLARE_CSR(dpc, CSR_DPC) -DECLARE_CSR(dscratch, CSR_DSCRATCH) -DECLARE_CSR(mcycle, CSR_MCYCLE) -DECLARE_CSR(minstret, CSR_MINSTRET) -DECLARE_CSR(mhpmcounter3, CSR_MHPMCOUNTER3) -DECLARE_CSR(mhpmcounter4, CSR_MHPMCOUNTER4) -DECLARE_CSR(mhpmcounter5, CSR_MHPMCOUNTER5) -DECLARE_CSR(mhpmcounter6, CSR_MHPMCOUNTER6) -DECLARE_CSR(mhpmcounter7, CSR_MHPMCOUNTER7) -DECLARE_CSR(mhpmcounter8, CSR_MHPMCOUNTER8) -DECLARE_CSR(mhpmcounter9, CSR_MHPMCOUNTER9) -DECLARE_CSR(mhpmcounter10, CSR_MHPMCOUNTER10) -DECLARE_CSR(mhpmcounter11, CSR_MHPMCOUNTER11) -DECLARE_CSR(mhpmcounter12, CSR_MHPMCOUNTER12) -DECLARE_CSR(mhpmcounter13, CSR_MHPMCOUNTER13) -DECLARE_CSR(mhpmcounter14, CSR_MHPMCOUNTER14) -DECLARE_CSR(mhpmcounter15, CSR_MHPMCOUNTER15) -DECLARE_CSR(mhpmcounter16, CSR_MHPMCOUNTER16) -DECLARE_CSR(mhpmcounter17, CSR_MHPMCOUNTER17) -DECLARE_CSR(mhpmcounter18, CSR_MHPMCOUNTER18) -DECLARE_CSR(mhpmcounter19, CSR_MHPMCOUNTER19) -DECLARE_CSR(mhpmcounter20, CSR_MHPMCOUNTER20) -DECLARE_CSR(mhpmcounter21, CSR_MHPMCOUNTER21) -DECLARE_CSR(mhpmcounter22, CSR_MHPMCOUNTER22) -DECLARE_CSR(mhpmcounter23, CSR_MHPMCOUNTER23) -DECLARE_CSR(mhpmcounter24, CSR_MHPMCOUNTER24) -DECLARE_CSR(mhpmcounter25, CSR_MHPMCOUNTER25) -DECLARE_CSR(mhpmcounter26, CSR_MHPMCOUNTER26) -DECLARE_CSR(mhpmcounter27, CSR_MHPMCOUNTER27) -DECLARE_CSR(mhpmcounter28, CSR_MHPMCOUNTER28) -DECLARE_CSR(mhpmcounter29, CSR_MHPMCOUNTER29) -DECLARE_CSR(mhpmcounter30, CSR_MHPMCOUNTER30) -DECLARE_CSR(mhpmcounter31, CSR_MHPMCOUNTER31) -DECLARE_CSR(mucounteren, CSR_MUCOUNTEREN) -DECLARE_CSR(mscounteren, CSR_MSCOUNTEREN) -DECLARE_CSR(mhpmevent3, CSR_MHPMEVENT3) -DECLARE_CSR(mhpmevent4, CSR_MHPMEVENT4) -DECLARE_CSR(mhpmevent5, CSR_MHPMEVENT5) -DECLARE_CSR(mhpmevent6, CSR_MHPMEVENT6) -DECLARE_CSR(mhpmevent7, CSR_MHPMEVENT7) -DECLARE_CSR(mhpmevent8, CSR_MHPMEVENT8) -DECLARE_CSR(mhpmevent9, CSR_MHPMEVENT9) -DECLARE_CSR(mhpmevent10, CSR_MHPMEVENT10) -DECLARE_CSR(mhpmevent11, CSR_MHPMEVENT11) -DECLARE_CSR(mhpmevent12, CSR_MHPMEVENT12) -DECLARE_CSR(mhpmevent13, CSR_MHPMEVENT13) -DECLARE_CSR(mhpmevent14, CSR_MHPMEVENT14) -DECLARE_CSR(mhpmevent15, CSR_MHPMEVENT15) -DECLARE_CSR(mhpmevent16, CSR_MHPMEVENT16) -DECLARE_CSR(mhpmevent17, CSR_MHPMEVENT17) -DECLARE_CSR(mhpmevent18, CSR_MHPMEVENT18) -DECLARE_CSR(mhpmevent19, CSR_MHPMEVENT19) -DECLARE_CSR(mhpmevent20, CSR_MHPMEVENT20) -DECLARE_CSR(mhpmevent21, CSR_MHPMEVENT21) -DECLARE_CSR(mhpmevent22, CSR_MHPMEVENT22) -DECLARE_CSR(mhpmevent23, CSR_MHPMEVENT23) -DECLARE_CSR(mhpmevent24, CSR_MHPMEVENT24) -DECLARE_CSR(mhpmevent25, CSR_MHPMEVENT25) -DECLARE_CSR(mhpmevent26, CSR_MHPMEVENT26) -DECLARE_CSR(mhpmevent27, CSR_MHPMEVENT27) -DECLARE_CSR(mhpmevent28, CSR_MHPMEVENT28) -DECLARE_CSR(mhpmevent29, CSR_MHPMEVENT29) -DECLARE_CSR(mhpmevent30, CSR_MHPMEVENT30) -DECLARE_CSR(mhpmevent31, CSR_MHPMEVENT31) -DECLARE_CSR(mvendorid, CSR_MVENDORID) -DECLARE_CSR(marchid, CSR_MARCHID) -DECLARE_CSR(mimpid, CSR_MIMPID) -DECLARE_CSR(mhartid, CSR_MHARTID) -DECLARE_CSR(cycleh, CSR_CYCLEH) -DECLARE_CSR(timeh, CSR_TIMEH) -DECLARE_CSR(instreth, CSR_INSTRETH) -DECLARE_CSR(hpmcounter3h, CSR_HPMCOUNTER3H) -DECLARE_CSR(hpmcounter4h, CSR_HPMCOUNTER4H) -DECLARE_CSR(hpmcounter5h, CSR_HPMCOUNTER5H) -DECLARE_CSR(hpmcounter6h, CSR_HPMCOUNTER6H) -DECLARE_CSR(hpmcounter7h, CSR_HPMCOUNTER7H) -DECLARE_CSR(hpmcounter8h, CSR_HPMCOUNTER8H) -DECLARE_CSR(hpmcounter9h, CSR_HPMCOUNTER9H) -DECLARE_CSR(hpmcounter10h, CSR_HPMCOUNTER10H) -DECLARE_CSR(hpmcounter11h, CSR_HPMCOUNTER11H) -DECLARE_CSR(hpmcounter12h, CSR_HPMCOUNTER12H) -DECLARE_CSR(hpmcounter13h, CSR_HPMCOUNTER13H) -DECLARE_CSR(hpmcounter14h, CSR_HPMCOUNTER14H) -DECLARE_CSR(hpmcounter15h, CSR_HPMCOUNTER15H) -DECLARE_CSR(hpmcounter16h, CSR_HPMCOUNTER16H) -DECLARE_CSR(hpmcounter17h, CSR_HPMCOUNTER17H) -DECLARE_CSR(hpmcounter18h, CSR_HPMCOUNTER18H) -DECLARE_CSR(hpmcounter19h, CSR_HPMCOUNTER19H) -DECLARE_CSR(hpmcounter20h, CSR_HPMCOUNTER20H) -DECLARE_CSR(hpmcounter21h, CSR_HPMCOUNTER21H) -DECLARE_CSR(hpmcounter22h, CSR_HPMCOUNTER22H) -DECLARE_CSR(hpmcounter23h, CSR_HPMCOUNTER23H) -DECLARE_CSR(hpmcounter24h, CSR_HPMCOUNTER24H) -DECLARE_CSR(hpmcounter25h, CSR_HPMCOUNTER25H) -DECLARE_CSR(hpmcounter26h, CSR_HPMCOUNTER26H) -DECLARE_CSR(hpmcounter27h, CSR_HPMCOUNTER27H) -DECLARE_CSR(hpmcounter28h, CSR_HPMCOUNTER28H) -DECLARE_CSR(hpmcounter29h, CSR_HPMCOUNTER29H) -DECLARE_CSR(hpmcounter30h, CSR_HPMCOUNTER30H) -DECLARE_CSR(hpmcounter31h, CSR_HPMCOUNTER31H) -DECLARE_CSR(mcycleh, CSR_MCYCLEH) -DECLARE_CSR(minstreth, CSR_MINSTRETH) -DECLARE_CSR(mhpmcounter3h, CSR_MHPMCOUNTER3H) -DECLARE_CSR(mhpmcounter4h, CSR_MHPMCOUNTER4H) -DECLARE_CSR(mhpmcounter5h, CSR_MHPMCOUNTER5H) -DECLARE_CSR(mhpmcounter6h, CSR_MHPMCOUNTER6H) -DECLARE_CSR(mhpmcounter7h, CSR_MHPMCOUNTER7H) -DECLARE_CSR(mhpmcounter8h, CSR_MHPMCOUNTER8H) -DECLARE_CSR(mhpmcounter9h, CSR_MHPMCOUNTER9H) -DECLARE_CSR(mhpmcounter10h, CSR_MHPMCOUNTER10H) -DECLARE_CSR(mhpmcounter11h, CSR_MHPMCOUNTER11H) -DECLARE_CSR(mhpmcounter12h, CSR_MHPMCOUNTER12H) -DECLARE_CSR(mhpmcounter13h, CSR_MHPMCOUNTER13H) -DECLARE_CSR(mhpmcounter14h, CSR_MHPMCOUNTER14H) -DECLARE_CSR(mhpmcounter15h, CSR_MHPMCOUNTER15H) -DECLARE_CSR(mhpmcounter16h, CSR_MHPMCOUNTER16H) -DECLARE_CSR(mhpmcounter17h, CSR_MHPMCOUNTER17H) -DECLARE_CSR(mhpmcounter18h, CSR_MHPMCOUNTER18H) -DECLARE_CSR(mhpmcounter19h, CSR_MHPMCOUNTER19H) -DECLARE_CSR(mhpmcounter20h, CSR_MHPMCOUNTER20H) -DECLARE_CSR(mhpmcounter21h, CSR_MHPMCOUNTER21H) -DECLARE_CSR(mhpmcounter22h, CSR_MHPMCOUNTER22H) -DECLARE_CSR(mhpmcounter23h, CSR_MHPMCOUNTER23H) -DECLARE_CSR(mhpmcounter24h, CSR_MHPMCOUNTER24H) -DECLARE_CSR(mhpmcounter25h, CSR_MHPMCOUNTER25H) -DECLARE_CSR(mhpmcounter26h, CSR_MHPMCOUNTER26H) -DECLARE_CSR(mhpmcounter27h, CSR_MHPMCOUNTER27H) -DECLARE_CSR(mhpmcounter28h, CSR_MHPMCOUNTER28H) -DECLARE_CSR(mhpmcounter29h, CSR_MHPMCOUNTER29H) -DECLARE_CSR(mhpmcounter30h, CSR_MHPMCOUNTER30H) -DECLARE_CSR(mhpmcounter31h, CSR_MHPMCOUNTER31H) -#endif -#ifdef DECLARE_CAUSE -DECLARE_CAUSE("misaligned fetch", CAUSE_MISALIGNED_FETCH) -DECLARE_CAUSE("fault fetch", CAUSE_FAULT_FETCH) -DECLARE_CAUSE("illegal instruction", CAUSE_ILLEGAL_INSTRUCTION) -DECLARE_CAUSE("breakpoint", CAUSE_BREAKPOINT) -DECLARE_CAUSE("misaligned load", CAUSE_MISALIGNED_LOAD) -DECLARE_CAUSE("fault load", CAUSE_FAULT_LOAD) -DECLARE_CAUSE("misaligned store", CAUSE_MISALIGNED_STORE) -DECLARE_CAUSE("fault store", CAUSE_FAULT_STORE) -DECLARE_CAUSE("user_ecall", CAUSE_USER_ECALL) -DECLARE_CAUSE("supervisor_ecall", CAUSE_SUPERVISOR_ECALL) -DECLARE_CAUSE("hypervisor_ecall", CAUSE_HYPERVISOR_ECALL) -DECLARE_CAUSE("machine_ecall", CAUSE_MACHINE_ECALL) -#endif diff --git a/raven_spn/bsp/env/entry.S b/raven_spn/bsp/env/entry.S deleted file mode 100644 index 261b2a4..0000000 --- a/raven_spn/bsp/env/entry.S +++ /dev/null @@ -1,98 +0,0 @@ -// See LICENSE for license details - -#ifndef ENTRY_S -#define ENTRY_S - -#include "encoding.h" -#include "sifive/bits.h" - - .section .text.entry - .align 2 - .weak trap_entry - .global trap_entry -trap_entry: - addi sp, sp, -32*REGBYTES - - STORE x1, 1*REGBYTES(sp) - STORE x2, 2*REGBYTES(sp) - STORE x3, 3*REGBYTES(sp) - STORE x4, 4*REGBYTES(sp) - STORE x5, 5*REGBYTES(sp) - STORE x6, 6*REGBYTES(sp) - STORE x7, 7*REGBYTES(sp) - STORE x8, 8*REGBYTES(sp) - STORE x9, 9*REGBYTES(sp) - STORE x10, 10*REGBYTES(sp) - STORE x11, 11*REGBYTES(sp) - STORE x12, 12*REGBYTES(sp) - STORE x13, 13*REGBYTES(sp) - STORE x14, 14*REGBYTES(sp) - STORE x15, 15*REGBYTES(sp) - STORE x16, 16*REGBYTES(sp) - STORE x17, 17*REGBYTES(sp) - STORE x18, 18*REGBYTES(sp) - STORE x19, 19*REGBYTES(sp) - STORE x20, 20*REGBYTES(sp) - STORE x21, 21*REGBYTES(sp) - STORE x22, 22*REGBYTES(sp) - STORE x23, 23*REGBYTES(sp) - STORE x24, 24*REGBYTES(sp) - STORE x25, 25*REGBYTES(sp) - STORE x26, 26*REGBYTES(sp) - STORE x27, 27*REGBYTES(sp) - STORE x28, 28*REGBYTES(sp) - STORE x29, 29*REGBYTES(sp) - STORE x30, 30*REGBYTES(sp) - STORE x31, 31*REGBYTES(sp) - - csrr a0, mcause - csrr a1, mepc - mv a2, sp - call handle_trap - csrw mepc, a0 - - # Remain in M-mode after mret - li t0, MSTATUS_MPP - csrs mstatus, t0 - - LOAD x1, 1*REGBYTES(sp) - LOAD x2, 2*REGBYTES(sp) - LOAD x3, 3*REGBYTES(sp) - LOAD x4, 4*REGBYTES(sp) - LOAD x5, 5*REGBYTES(sp) - LOAD x6, 6*REGBYTES(sp) - LOAD x7, 7*REGBYTES(sp) - LOAD x8, 8*REGBYTES(sp) - LOAD x9, 9*REGBYTES(sp) - LOAD x10, 10*REGBYTES(sp) - LOAD x11, 11*REGBYTES(sp) - LOAD x12, 12*REGBYTES(sp) - LOAD x13, 13*REGBYTES(sp) - LOAD x14, 14*REGBYTES(sp) - LOAD x15, 15*REGBYTES(sp) - LOAD x16, 16*REGBYTES(sp) - LOAD x17, 17*REGBYTES(sp) - LOAD x18, 18*REGBYTES(sp) - LOAD x19, 19*REGBYTES(sp) - LOAD x20, 20*REGBYTES(sp) - LOAD x21, 21*REGBYTES(sp) - LOAD x22, 22*REGBYTES(sp) - LOAD x23, 23*REGBYTES(sp) - LOAD x24, 24*REGBYTES(sp) - LOAD x25, 25*REGBYTES(sp) - LOAD x26, 26*REGBYTES(sp) - LOAD x27, 27*REGBYTES(sp) - LOAD x28, 28*REGBYTES(sp) - LOAD x29, 29*REGBYTES(sp) - LOAD x30, 30*REGBYTES(sp) - LOAD x31, 31*REGBYTES(sp) - - addi sp, sp, 32*REGBYTES - mret - -.weak handle_trap -handle_trap: -1: - j 1b - -#endif diff --git a/raven_spn/bsp/env/freedom-e300-arty/flash.lds b/raven_spn/bsp/env/freedom-e300-arty/flash.lds deleted file mode 100644 index 6b37141..0000000 --- a/raven_spn/bsp/env/freedom-e300-arty/flash.lds +++ /dev/null @@ -1,161 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - flash (rxai!w) : ORIGIN = 0x20400000, LENGTH = 512M - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K -} - -PHDRS -{ - flash PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 2K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >flash AT>flash :flash - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >flash AT>flash :flash - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >flash AT>flash :flash - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - .rodata : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - } >flash AT>flash :flash - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >flash AT>flash :flash - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >flash AT>flash :flash - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >flash AT>flash :flash - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >flash AT>flash :flash - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >flash AT>flash :flash - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >flash AT>flash :flash - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>flash :ram_init - - .data : - { - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>flash :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack ORIGIN(ram) + LENGTH(ram) - __stack_size : - { - PROVIDE( _heap_end = . ); - . = __stack_size; - PROVIDE( _sp = . ); - } >ram AT>ram :ram -} diff --git a/raven_spn/bsp/env/freedom-e300-arty/init.c b/raven_spn/bsp/env/freedom-e300-arty/init.c deleted file mode 100644 index a6f4b39..0000000 --- a/raven_spn/bsp/env/freedom-e300-arty/init.c +++ /dev/null @@ -1,87 +0,0 @@ -//See LICENSE for license details. -#include -#include -#include - -#include "platform.h" -#include "encoding.h" - -extern int main(int argc, char** argv); -extern void trap_entry(); - -static unsigned long get_cpu_freq() -{ - return 65000000; -} - -unsigned long get_timer_freq() -{ - return get_cpu_freq(); -} - -uint64_t get_timer_value() -{ -#if __riscv_xlen == 32 - while (1) { - uint32_t hi = read_csr(mcycleh); - uint32_t lo = read_csr(mcycle); - if (hi == read_csr(mcycleh)) - return ((uint64_t)hi << 32) | lo; - } -#else - return read_csr(mcycle); -#endif -} - -static void uart_init(size_t baud_rate) -{ - GPIO_REG(GPIO_IOF_SEL) &= ~IOF0_UART0_MASK; - GPIO_REG(GPIO_IOF_EN) |= IOF0_UART0_MASK; - UART0_REG(UART_REG_DIV) = get_cpu_freq() / baud_rate - 1; - UART0_REG(UART_REG_TXCTRL) |= UART_TXEN; -} - - -#ifdef USE_PLIC -extern void handle_m_ext_interrupt(); -#endif - -#ifdef USE_M_TIME -extern void handle_m_time_interrupt(); -#endif - -uintptr_t handle_trap(uintptr_t mcause, uintptr_t epc) -{ - if (0){ -#ifdef USE_PLIC - // External Machine-Level interrupt from PLIC - } else if ((mcause & MCAUSE_INT) && ((mcause & MCAUSE_CAUSE) == IRQ_M_EXT)) { - handle_m_ext_interrupt(); -#endif -#ifdef USE_M_TIME - // External Machine-Level interrupt from PLIC - } else if ((mcause & MCAUSE_INT) && ((mcause & MCAUSE_CAUSE) == IRQ_M_TIMER)){ - handle_m_time_interrupt(); -#endif - } - else { - write(1, "Unhandled Trap:\n", 16); - _exit(1 + mcause); - } - return epc; -} - -void _init() -{ - #ifndef NO_INIT - uart_init(115200); - - printf("core freq at %d Hz\n", get_cpu_freq()); - - write_csr(mtvec, &trap_entry); - #endif -} - -void _fini() -{ -} diff --git a/raven_spn/bsp/env/freedom-e300-arty/openocd.cfg b/raven_spn/bsp/env/freedom-e300-arty/openocd.cfg deleted file mode 100644 index f4b28ed..0000000 --- a/raven_spn/bsp/env/freedom-e300-arty/openocd.cfg +++ /dev/null @@ -1,30 +0,0 @@ -adapter_khz 10000 - -#source [find interface/ftdi/olimex-arm-usb-tiny-h.cfg] - -interface ftdi -ftdi_device_desc "Olimex OpenOCD JTAG ARM-USB-TINY-H" -ftdi_vid_pid 0x15ba 0x002a - -ftdi_layout_init 0x0808 0x0a1b -ftdi_layout_signal nSRST -oe 0x0200 -ftdi_layout_signal nTRST -data 0x0100 -oe 0x0100 -ftdi_layout_signal LED -data 0x0800 -# - -set _CHIPNAME riscv -jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x10e31913 - -set _TARGETNAME $_CHIPNAME.cpu -target create $_TARGETNAME riscv -chain-position $_TARGETNAME -$_TARGETNAME configure -work-area-phys 0x80000000 -work-area-size 10000 -work-area-backup 1 - -flash bank my_first_flash fespi 0x20000000 0 0 0 $_TARGETNAME -init -#reset -if {[ info exists pulse_srst]} { - ftdi_set_signal nSRST 0 - ftdi_set_signal nSRST z -} -halt -#flash protect 0 64 last off diff --git a/raven_spn/bsp/env/freedom-e300-arty/platform.h b/raven_spn/bsp/env/freedom-e300-arty/platform.h deleted file mode 100644 index 8ff7ae6..0000000 --- a/raven_spn/bsp/env/freedom-e300-arty/platform.h +++ /dev/null @@ -1,124 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_PLATFORM_H -#define _SIFIVE_PLATFORM_H - -// Some things missing from the official encoding.h -#define MCAUSE_INT 0x80000000 -#define MCAUSE_CAUSE 0x7FFFFFFF - -#include "sifive/const.h" -#include "sifive/devices/aon.h" -#include "sifive/devices/clint.h" -#include "sifive/devices/gpio.h" -#include "sifive/devices/plic.h" -#include "sifive/devices/pwm.h" -#include "sifive/devices/spi.h" -#include "sifive/devices/uart.h" - -/**************************************************************************** - * Platform definitions - *****************************************************************************/ - -#define TRAPVEC_TABLE_CTRL_ADDR _AC(0x00001010,UL) -#define CLINT_CTRL_ADDR _AC(0x02000000,UL) -#define PLIC_CTRL_ADDR _AC(0x0C000000,UL) -#define AON_CTRL_ADDR _AC(0x10000000,UL) -#define GPIO_CTRL_ADDR _AC(0x10012000,UL) -#define UART0_CTRL_ADDR _AC(0x10013000,UL) -#define SPI0_CTRL_ADDR _AC(0x10014000,UL) -#define PWM0_CTRL_ADDR _AC(0x10015000,UL) -#define UART1_CTRL_ADDR _AC(0x10023000,UL) -#define SPI1_CTRL_ADDR _AC(0x10024000,UL) -#define PWM1_CTRL_ADDR _AC(0x10025000,UL) -#define SPI2_CTRL_ADDR _AC(0x10034000,UL) -#define PWM2_CTRL_ADDR _AC(0x10035000,UL) -#define SPI0_MMAP_ADDR _AC(0x20000000,UL) -#define MEM_CTRL_ADDR _AC(0x80000000,UL) - -// IOF Mappings -#define IOF0_SPI1_MASK _AC(0x000007FC,UL) -#define SPI11_NUM_SS (4) -#define IOF_SPI1_SS0 (2u) -#define IOF_SPI1_SS1 (8u) -#define IOF_SPI1_SS2 (9u) -#define IOF_SPI1_SS3 (10u) -#define IOF_SPI1_MOSI (3u) -#define IOF_SPI1_MISO (4u) -#define IOF_SPI1_SCK (5u) -#define IOF_SPI1_DQ0 (3u) -#define IOF_SPI1_DQ1 (4u) -#define IOF_SPI1_DQ2 (6u) -#define IOF_SPI1_DQ3 (7u) - -#define IOF0_SPI2_MASK _AC(0xFC000000,UL) -#define SPI2_NUM_SS (1) -#define IOF_SPI2_SS0 (26u) -#define IOF_SPI2_MOSI (27u) -#define IOF_SPI2_MISO (28u) -#define IOF_SPI2_SCK (29u) -#define IOF_SPI2_DQ0 (27u) -#define IOF_SPI2_DQ1 (28u) -#define IOF_SPI2_DQ2 (30u) -#define IOF_SPI2_DQ3 (31u) - -#define IOF0_UART0_MASK _AC(0x00030000, UL) -#define IOF_UART0_RX (16u) -#define IOF_UART0_TX (17u) - -#define IOF0_UART1_MASK _AC(0x03000000, UL) -#define IOF_UART1_RX (24u) -#define IOF_UART1_TX (25u) - -#define IOF1_PWM0_MASK _AC(0x0000000F, UL) -#define IOF1_PWM1_MASK _AC(0x00780000, UL) -#define IOF1_PWM2_MASK _AC(0x00003C00, UL) - -// Interrupt Numbers -#define INT_RESERVED 0 -#define INT_WDOGCMP 1 -#define INT_RTCCMP 2 -#define INT_UART0_BASE 3 -#define INT_UART1_BASE 4 -#define INT_SPI0_BASE 5 -#define INT_SPI1_BASE 6 -#define INT_SPI2_BASE 7 -#define INT_GPIO_BASE 8 -#define INT_PWM0_BASE 40 -#define INT_PWM1_BASE 44 -#define INT_PWM2_BASE 48 - -// Helper functions -#define _REG32(p, i) (*(volatile uint32_t *) ((p) + (i))) -#define _REG32P(p, i) ((volatile uint32_t *) ((p) + (i))) -#define AON_REG(offset) _REG32(AON_CTRL_ADDR, offset) -#define CLINT_REG(offset) _REG32(CLINT_CTRL_ADDR, offset) -#define GPIO_REG(offset) _REG32(GPIO_CTRL_ADDR, offset) -#define OTP_REG(offset) _REG32(OTP_CTRL_ADDR, offset) -#define PLIC_REG(offset) _REG32(PLIC_CTRL_ADDR, offset) -#define PWM0_REG(offset) _REG32(PWM0_CTRL_ADDR, offset) -#define PWM1_REG(offset) _REG32(PWM1_CTRL_ADDR, offset) -#define PWM2_REG(offset) _REG32(PWM2_CTRL_ADDR, offset) -#define SPI0_REG(offset) _REG32(SPI0_CTRL_ADDR, offset) -#define SPI1_REG(offset) _REG32(SPI1_CTRL_ADDR, offset) -#define SPI2_REG(offset) _REG32(SPI2_CTRL_ADDR, offset) -#define UART0_REG(offset) _REG32(UART0_CTRL_ADDR, offset) -#define UART1_REG(offset) _REG32(UART1_CTRL_ADDR, offset) - -// Misc - -#include - - -#define NUM_GPIO 32 - -#define PLIC_NUM_INTERRUPTS 52 -#define PLIC_NUM_PRIORITIES 7 - -#define HAS_BOARD_BUTTONS -#include "hifive1.h" - -unsigned long get_timer_freq(void); -uint64_t get_timer_value(void); - -#endif /* _SIFIVE_PLATFORM_H */ diff --git a/raven_spn/bsp/env/freedom-e300-arty/settings.mk b/raven_spn/bsp/env/freedom-e300-arty/settings.mk deleted file mode 100644 index 230fccc..0000000 --- a/raven_spn/bsp/env/freedom-e300-arty/settings.mk +++ /dev/null @@ -1,3 +0,0 @@ -# Describes the CPU on this board to the rest of the SDK. -RISCV_ARCH := rv32imac -RISCV_ABI := ilp32 diff --git a/raven_spn/bsp/env/freedom-e300-hifive1/dhrystone.lds b/raven_spn/bsp/env/freedom-e300-hifive1/dhrystone.lds deleted file mode 100644 index cc9cd9b..0000000 --- a/raven_spn/bsp/env/freedom-e300-hifive1/dhrystone.lds +++ /dev/null @@ -1,157 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - flash (rxai!w) : ORIGIN = 0x20400000, LENGTH = 512M - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 16K -} - -PHDRS -{ - flash PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 2K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >flash AT>flash :flash - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >flash AT>flash :flash - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >flash AT>flash :flash - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >flash AT>flash :flash - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >flash AT>flash :flash - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >flash AT>flash :flash - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >flash AT>flash :flash - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >flash AT>flash :flash - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >flash AT>flash :flash - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>flash :ram_init - - .data : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>flash :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack ORIGIN(ram) + LENGTH(ram) - __stack_size : - { - PROVIDE( _heap_end = . ); - . = __stack_size; - PROVIDE( _sp = . ); - } >ram AT>ram :ram -} diff --git a/raven_spn/bsp/env/freedom-e300-hifive1/flash.lds b/raven_spn/bsp/env/freedom-e300-hifive1/flash.lds deleted file mode 100644 index 22f90c6..0000000 --- a/raven_spn/bsp/env/freedom-e300-hifive1/flash.lds +++ /dev/null @@ -1,166 +0,0 @@ -OUTPUT_ARCH( "riscv" ) - -ENTRY( _start ) - -MEMORY -{ - flash (rxai!w) : ORIGIN = 0x20400000, LENGTH = 512M - ram (wxa!ri) : ORIGIN = 0x80000000, LENGTH = 512K -} - -PHDRS -{ - flash PT_LOAD; - ram_init PT_LOAD; - ram PT_NULL; -} - -SECTIONS -{ - __stack_size = DEFINED(__stack_size) ? __stack_size : 2K; - - .init : - { - KEEP (*(SORT_NONE(.init))) - } >flash AT>flash :flash - - .text : - { - *(.text.unlikely .text.unlikely.*) - *(.text.startup .text.startup.*) - *(.text .text.*) - *(.gnu.linkonce.t.*) - } >flash AT>flash :flash - - .fini : - { - KEEP (*(SORT_NONE(.fini))) - } >flash AT>flash :flash - - PROVIDE (__etext = .); - PROVIDE (_etext = .); - PROVIDE (etext = .); - - .rodata : - { - *(.rdata) - *(.rodata .rodata.*) - *(.gnu.linkonce.r.*) - } >flash AT>flash :flash - - . = ALIGN(4); - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >flash AT>flash :flash - - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) - KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) - PROVIDE_HIDDEN (__init_array_end = .); - } >flash AT>flash :flash - - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) - KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >flash AT>flash :flash - - .ctors : - { - /* gcc uses crtbegin.o to find the start of - the constructors, so we make sure it is - first. Because this is a wildcard, it - doesn't matter if the user does not - actually link against crtbegin.o; the - linker won't look for a file to match a - wildcard. The wildcard also means that it - doesn't matter which directory crtbegin.o - is in. */ - KEEP (*crtbegin.o(.ctors)) - KEEP (*crtbegin?.o(.ctors)) - /* We don't want to include the .ctor section from - the crtend.o file until after the sorted ctors. - The .ctor section from the crtend file contains the - end of ctors marker and it must be last */ - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) - KEEP (*(SORT(.ctors.*))) - KEEP (*(.ctors)) - } >flash AT>flash :flash - - .dtors : - { - KEEP (*crtbegin.o(.dtors)) - KEEP (*crtbegin?.o(.dtors)) - KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) - KEEP (*(SORT(.dtors.*))) - KEEP (*(.dtors)) - } >flash AT>flash :flash - - .except : - { - *(.gcc_except_table.*) - } >flash AT>flash :flash - - .lalign : - { - . = ALIGN(4); - PROVIDE( _data_lma = . ); - } >flash AT>flash :flash - - .dalign : - { - . = ALIGN(4); - PROVIDE( _data = . ); - } >ram AT>flash :ram_init - - .data : - { - *(.data .data.*) - *(.gnu.linkonce.d.*) - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - *(.sdata .sdata.*) - *(.gnu.linkonce.s.*) - . = ALIGN(8); - *(.srodata.cst16) - *(.srodata.cst8) - *(.srodata.cst4) - *(.srodata.cst2) - *(.srodata .srodata.*) - } >ram AT>flash :ram_init - - . = ALIGN(4); - PROVIDE( _edata = . ); - PROVIDE( edata = . ); - - PROVIDE( _fbss = . ); - PROVIDE( __bss_start = . ); - .bss : - { - *(.sbss*) - *(.gnu.linkonce.sb.*) - *(.bss .bss.*) - *(.gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(4); - } >ram AT>ram :ram - - . = ALIGN(8); - PROVIDE( _end = . ); - PROVIDE( end = . ); - - .stack ORIGIN(ram) + LENGTH(ram) - __stack_size : - { - PROVIDE( _heap_end = . ); - . = __stack_size; - PROVIDE( _sp = . ); - } >ram AT>ram :ram -} diff --git a/raven_spn/bsp/env/freedom-e300-hifive1/init.c b/raven_spn/bsp/env/freedom-e300-hifive1/init.c deleted file mode 100644 index 621a6e2..0000000 --- a/raven_spn/bsp/env/freedom-e300-hifive1/init.c +++ /dev/null @@ -1,238 +0,0 @@ -#include -#include -#include - -#include "platform.h" -#include "encoding.h" - -extern int main(int argc, char** argv); -extern void trap_entry(); - -static unsigned long mtime_lo(void) -{ - return *(volatile unsigned long *)(CLINT_CTRL_ADDR + CLINT_MTIME); -} - -#ifdef __riscv32 - -static uint32_t mtime_hi(void) -{ - return *(volatile uint32_t *)(CLINT_CTRL_ADDR + CLINT_MTIME + 4); -} - -uint64_t get_timer_value() -{ - while (1) { - uint32_t hi = mtime_hi(); - uint32_t lo = mtime_lo(); - if (hi == mtime_hi()) - return ((uint64_t)hi << 32) | lo; - } -} - -#else /* __riscv32 */ - -uint64_t get_timer_value() -{ - return mtime_lo(); -} - -#endif - -unsigned long get_timer_freq() -{ - return 32768; -} - -static void use_hfrosc(int div, int trim) -{ - // Make sure the HFROSC is running at its default setting - PRCI_REG(PRCI_HFROSCCFG) = (ROSC_DIV(div) | ROSC_TRIM(trim) | ROSC_EN(1)); - while ((PRCI_REG(PRCI_HFROSCCFG) & ROSC_RDY(1)) == 0) ; - PRCI_REG(PRCI_PLLCFG) &= ~PLL_SEL(1); -} - -static void use_pll(int refsel, int bypass, int r, int f, int q) -{ - // Ensure that we aren't running off the PLL before we mess with it. - if (PRCI_REG(PRCI_PLLCFG) & PLL_SEL(1)) { - // Make sure the HFROSC is running at its default setting - use_hfrosc(4, 16); - } - - // Set PLL Source to be HFXOSC if available. - uint32_t config_value = 0; - - config_value |= PLL_REFSEL(refsel); - - if (bypass) { - // Bypass - config_value |= PLL_BYPASS(1); - - PRCI_REG(PRCI_PLLCFG) = config_value; - - // If we don't have an HFXTAL, this doesn't really matter. - // Set our Final output divide to divide-by-1: - PRCI_REG(PRCI_PLLDIV) = (PLL_FINAL_DIV_BY_1(1) | PLL_FINAL_DIV(0)); - } else { - // In case we are executing from QSPI, - // (which is quite likely) we need to - // set the QSPI clock divider appropriately - // before boosting the clock frequency. - - // Div = f_sck/2 - SPI0_REG(SPI_REG_SCKDIV) = 8; - - // Set DIV Settings for PLL - // Both HFROSC and HFXOSC are modeled as ideal - // 16MHz sources (assuming dividers are set properly for - // HFROSC). - // (Legal values of f_REF are 6-48MHz) - - // Set DIVR to divide-by-2 to get 8MHz frequency - // (legal values of f_R are 6-12 MHz) - - config_value |= PLL_BYPASS(1); - config_value |= PLL_R(r); - - // Set DIVF to get 512Mhz frequncy - // There is an implied multiply-by-2, 16Mhz. - // So need to write 32-1 - // (legal values of f_F are 384-768 MHz) - config_value |= PLL_F(f); - - // Set DIVQ to divide-by-2 to get 256 MHz frequency - // (legal values of f_Q are 50-400Mhz) - config_value |= PLL_Q(q); - - // Set our Final output divide to divide-by-1: - PRCI_REG(PRCI_PLLDIV) = (PLL_FINAL_DIV_BY_1(1) | PLL_FINAL_DIV(0)); - - PRCI_REG(PRCI_PLLCFG) = config_value; - - // Un-Bypass the PLL. - PRCI_REG(PRCI_PLLCFG) &= ~PLL_BYPASS(1); - - // Wait for PLL Lock - // Note that the Lock signal can be glitchy. - // Need to wait 100 us - // RTC is running at 32kHz. - // So wait 4 ticks of RTC. - uint32_t now = mtime_lo(); - while (mtime_lo() - now < 4) ; - - // Now it is safe to check for PLL Lock - while ((PRCI_REG(PRCI_PLLCFG) & PLL_LOCK(1)) == 0) ; - } - - // Switch over to PLL Clock source - PRCI_REG(PRCI_PLLCFG) |= PLL_SEL(1); -} - -static void use_default_clocks() -{ - // Turn off the LFROSC - AON_REG(AON_LFROSC) &= ~ROSC_EN(1); - - // Use HFROSC - use_hfrosc(4, 16); -} - -static unsigned long __attribute__((noinline)) measure_cpu_freq(size_t n) -{ - unsigned long start_mtime, delta_mtime; - unsigned long mtime_freq = get_timer_freq(); - - // Don't start measuruing until we see an mtime tick - unsigned long tmp = mtime_lo(); - do { - start_mtime = mtime_lo(); - } while (start_mtime == tmp); - - unsigned long start_mcycle = read_csr(mcycle); - - do { - delta_mtime = mtime_lo() - start_mtime; - } while (delta_mtime < n); - - unsigned long delta_mcycle = read_csr(mcycle) - start_mcycle; - - return (delta_mcycle / delta_mtime) * mtime_freq - + ((delta_mcycle % delta_mtime) * mtime_freq) / delta_mtime; -} - -unsigned long get_cpu_freq() -{ - static uint32_t cpu_freq; - - if (!cpu_freq) { - // warm up I$ - measure_cpu_freq(1); - // measure for real - cpu_freq = measure_cpu_freq(10); - } - - return cpu_freq; -} - -static void uart_init(size_t baud_rate) -{ - GPIO_REG(GPIO_IOF_SEL) &= ~IOF0_UART0_MASK; - GPIO_REG(GPIO_IOF_EN) |= IOF0_UART0_MASK; - UART0_REG(UART_REG_DIV) = get_cpu_freq() / baud_rate - 1; - UART0_REG(UART_REG_TXCTRL) |= UART_TXEN; -} - - - -#ifdef USE_PLIC -extern void handle_m_ext_interrupt(); -#endif - -#ifdef USE_M_TIME -extern void handle_m_time_interrupt(); -#endif - -uintptr_t handle_trap(uintptr_t mcause, uintptr_t epc) -{ - if (0){ -#ifdef USE_PLIC - // External Machine-Level interrupt from PLIC - } else if ((mcause & MCAUSE_INT) && ((mcause & MCAUSE_CAUSE) == IRQ_M_EXT)) { - handle_m_ext_interrupt(); -#endif -#ifdef USE_M_TIME - // External Machine-Level interrupt from PLIC - } else if ((mcause & MCAUSE_INT) && ((mcause & MCAUSE_CAUSE) == IRQ_M_TIMER)){ - handle_m_time_interrupt(); -#endif - } - else { - write(1, "trap\n", 5); - _exit(1 + mcause); - } - return epc; -} - -void _init() -{ - - #ifndef NO_INIT - use_default_clocks(); - use_pll(0, 0, 1, 31, 1); - uart_init(115200); - - printf("core freq at %d Hz\n", get_cpu_freq()); - - write_csr(mtvec, &trap_entry); - if (read_csr(misa) & (1 << ('F' - 'A'))) { // if F extension is present - write_csr(mstatus, MSTATUS_FS); // allow FPU instructions without trapping - write_csr(fcsr, 0); // initialize rounding mode, undefined at reset - } - #endif - -} - -void _fini() -{ -} diff --git a/raven_spn/bsp/env/freedom-e300-hifive1/openocd.cfg b/raven_spn/bsp/env/freedom-e300-hifive1/openocd.cfg deleted file mode 100644 index b531e9c..0000000 --- a/raven_spn/bsp/env/freedom-e300-hifive1/openocd.cfg +++ /dev/null @@ -1,34 +0,0 @@ -adapter_khz 10000 - -interface ftdi -ftdi_device_desc "Dual RS232-HS" -ftdi_vid_pid 0x0403 0x6010 - -ftdi_layout_init 0x0008 0x001b -ftdi_layout_signal nSRST -oe 0x0020 -data 0x0020 - -#Reset Stretcher logic on FE310 is ~1 second long -#This doesn't apply if you use -# ftdi_set_signal, but still good to document -#adapter_nsrst_delay 1500 - -set _CHIPNAME riscv -jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x10e31913 - -set _TARGETNAME $_CHIPNAME.cpu -target create $_TARGETNAME riscv -chain-position $_TARGETNAME -$_TARGETNAME configure -work-area-phys 0x80000000 -work-area-size 10000 -work-area-backup 1 - -flash bank onboard_spi_flash fespi 0x20000000 0 0 0 $_TARGETNAME -init -#reset -- This type of reset is not implemented yet -if {[ info exists pulse_srst]} { - ftdi_set_signal nSRST 0 - ftdi_set_signal nSRST z - #Wait for the reset stretcher - #It will work without this, but - #will incur lots of delays for later commands. - sleep 1500 -} -halt -#flash protect 0 64 last off diff --git a/raven_spn/bsp/env/freedom-e300-hifive1/platform.h b/raven_spn/bsp/env/freedom-e300-hifive1/platform.h deleted file mode 100644 index 806fcfc..0000000 --- a/raven_spn/bsp/env/freedom-e300-hifive1/platform.h +++ /dev/null @@ -1,133 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_PLATFORM_H -#define _SIFIVE_PLATFORM_H - -// Some things missing from the official encoding.h -#define MCAUSE_INT 0x80000000 -#define MCAUSE_CAUSE 0x7FFFFFFF - -#include "sifive/const.h" -#include "sifive/devices/aon.h" -#include "sifive/devices/clint.h" -#include "sifive/devices/gpio.h" -#include "sifive/devices/otp.h" -#include "sifive/devices/plic.h" -#include "sifive/devices/prci.h" -#include "sifive/devices/pwm.h" -#include "sifive/devices/spi.h" -#include "sifive/devices/uart.h" - -/**************************************************************************** - * Platform definitions - *****************************************************************************/ - -// Memory map -#define MASKROM_MEM_ADDR _AC(0x00001000,UL) -#define TRAPVEC_TABLE_CTRL_ADDR _AC(0x00001010,UL) -#define OTP_MEM_ADDR _AC(0x00020000,UL) -#define CLINT_CTRL_ADDR _AC(0x02000000,UL) -#define PLIC_CTRL_ADDR _AC(0x0C000000,UL) -#define AON_CTRL_ADDR _AC(0x10000000,UL) -#define PRCI_CTRL_ADDR _AC(0x10008000,UL) -#define OTP_CTRL_ADDR _AC(0x10010000,UL) -#define GPIO_CTRL_ADDR _AC(0x10012000,UL) -#define UART0_CTRL_ADDR _AC(0x10013000,UL) -#define SPI0_CTRL_ADDR _AC(0x10014000,UL) -#define PWM0_CTRL_ADDR _AC(0x10015000,UL) -#define UART1_CTRL_ADDR _AC(0x10023000,UL) -#define SPI1_CTRL_ADDR _AC(0x10024000,UL) -#define PWM1_CTRL_ADDR _AC(0x10025000,UL) -#define SPI2_CTRL_ADDR _AC(0x10034000,UL) -#define PWM2_CTRL_ADDR _AC(0x10035000,UL) -#define SPI0_MEM_ADDR _AC(0x20000000,UL) -#define MEM_CTRL_ADDR _AC(0x80000000,UL) - -// IOF masks -#define IOF0_SPI1_MASK _AC(0x000007FC,UL) -#define SPI11_NUM_SS (4) -#define IOF_SPI1_SS0 (2u) -#define IOF_SPI1_SS1 (8u) -#define IOF_SPI1_SS2 (9u) -#define IOF_SPI1_SS3 (10u) -#define IOF_SPI1_MOSI (3u) -#define IOF_SPI1_MISO (4u) -#define IOF_SPI1_SCK (5u) -#define IOF_SPI1_DQ0 (3u) -#define IOF_SPI1_DQ1 (4u) -#define IOF_SPI1_DQ2 (6u) -#define IOF_SPI1_DQ3 (7u) - -#define IOF0_SPI2_MASK _AC(0xFC000000,UL) -#define SPI2_NUM_SS (1) -#define IOF_SPI2_SS0 (26u) -#define IOF_SPI2_MOSI (27u) -#define IOF_SPI2_MISO (28u) -#define IOF_SPI2_SCK (29u) -#define IOF_SPI2_DQ0 (27u) -#define IOF_SPI2_DQ1 (28u) -#define IOF_SPI2_DQ2 (30u) -#define IOF_SPI2_DQ3 (31u) - -//#define IOF0_I2C_MASK _AC(0x00003000,UL) - -#define IOF0_UART0_MASK _AC(0x00030000, UL) -#define IOF_UART0_RX (16u) -#define IOF_UART0_TX (17u) - -#define IOF0_UART1_MASK _AC(0x03000000, UL) -#define IOF_UART1_RX (24u) -#define IOF_UART1_TX (25u) - -#define IOF1_PWM0_MASK _AC(0x0000000F, UL) -#define IOF1_PWM1_MASK _AC(0x00780000, UL) -#define IOF1_PWM2_MASK _AC(0x00003C00, UL) - -// Interrupt numbers -#define INT_RESERVED 0 -#define INT_WDOGCMP 1 -#define INT_RTCCMP 2 -#define INT_UART0_BASE 3 -#define INT_UART1_BASE 4 -#define INT_SPI0_BASE 5 -#define INT_SPI1_BASE 6 -#define INT_SPI2_BASE 7 -#define INT_GPIO_BASE 8 -#define INT_PWM0_BASE 40 -#define INT_PWM1_BASE 44 -#define INT_PWM2_BASE 48 - -// Helper functions -#define _REG32(p, i) (*(volatile uint32_t *) ((p) + (i))) -#define _REG32P(p, i) ((volatile uint32_t *) ((p) + (i))) -#define AON_REG(offset) _REG32(AON_CTRL_ADDR, offset) -#define CLINT_REG(offset) _REG32(CLINT_CTRL_ADDR, offset) -#define GPIO_REG(offset) _REG32(GPIO_CTRL_ADDR, offset) -#define OTP_REG(offset) _REG32(OTP_CTRL_ADDR, offset) -#define PLIC_REG(offset) _REG32(PLIC_CTRL_ADDR, offset) -#define PRCI_REG(offset) _REG32(PRCI_CTRL_ADDR, offset) -#define PWM0_REG(offset) _REG32(PWM0_CTRL_ADDR, offset) -#define PWM1_REG(offset) _REG32(PWM1_CTRL_ADDR, offset) -#define PWM2_REG(offset) _REG32(PWM2_CTRL_ADDR, offset) -#define SPI0_REG(offset) _REG32(SPI0_CTRL_ADDR, offset) -#define SPI1_REG(offset) _REG32(SPI1_CTRL_ADDR, offset) -#define SPI2_REG(offset) _REG32(SPI2_CTRL_ADDR, offset) -#define UART0_REG(offset) _REG32(UART0_CTRL_ADDR, offset) -#define UART1_REG(offset) _REG32(UART1_CTRL_ADDR, offset) - -// Misc - -#include - -#define NUM_GPIO 32 - -#define PLIC_NUM_INTERRUPTS 52 -#define PLIC_NUM_PRIORITIES 7 - -#include "hifive1.h" - -unsigned long get_cpu_freq(void); -unsigned long get_timer_freq(void); -uint64_t get_timer_value(void); - -#endif /* _SIFIVE_PLATFORM_H */ diff --git a/raven_spn/bsp/env/freedom-e300-hifive1/settings.mk b/raven_spn/bsp/env/freedom-e300-hifive1/settings.mk deleted file mode 100644 index 230fccc..0000000 --- a/raven_spn/bsp/env/freedom-e300-hifive1/settings.mk +++ /dev/null @@ -1,3 +0,0 @@ -# Describes the CPU on this board to the rest of the SDK. -RISCV_ARCH := rv32imac -RISCV_ABI := ilp32 diff --git a/raven_spn/bsp/env/hifive1.h b/raven_spn/bsp/env/hifive1.h deleted file mode 100644 index 0db2f0f..0000000 --- a/raven_spn/bsp/env/hifive1.h +++ /dev/null @@ -1,81 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_HIFIVE1_H -#define _SIFIVE_HIFIVE1_H - -#include - -/**************************************************************************** - * GPIO Connections - *****************************************************************************/ - -// These are the GPIO bit offsets for the RGB LED on HiFive1 Board. -// These are also mapped to RGB LEDs on the Freedom E300 Arty -// FPGA -// Dev Kit. - -#define RED_LED_OFFSET 22 -#define GREEN_LED_OFFSET 19 -#define BLUE_LED_OFFSET 21 - -// These are the GPIO bit offsets for the differen digital pins -// on the headers for both the HiFive1 Board and the Freedom E300 Arty FPGA Dev Kit. -#define PIN_0_OFFSET 16 -#define PIN_1_OFFSET 17 -#define PIN_2_OFFSET 18 -#define PIN_3_OFFSET 19 -#define PIN_4_OFFSET 20 -#define PIN_5_OFFSET 21 -#define PIN_6_OFFSET 22 -#define PIN_7_OFFSET 23 -#define PIN_8_OFFSET 0 -#define PIN_9_OFFSET 1 -#define PIN_10_OFFSET 2 -#define PIN_11_OFFSET 3 -#define PIN_12_OFFSET 4 -#define PIN_13_OFFSET 5 -//#define PIN_14_OFFSET 8 //This pin is not connected on either board. -#define PIN_15_OFFSET 9 -#define PIN_16_OFFSET 10 -#define PIN_17_OFFSET 11 -#define PIN_18_OFFSET 12 -#define PIN_19_OFFSET 13 - -// These are *PIN* numbers, not -// GPIO Offset Numbers. -#define PIN_SPI1_SCK (13u) -#define PIN_SPI1_MISO (12u) -#define PIN_SPI1_MOSI (11u) -#define PIN_SPI1_SS0 (10u) -#define PIN_SPI1_SS1 (14u) -#define PIN_SPI1_SS2 (15u) -#define PIN_SPI1_SS3 (16u) - -#define SS_PIN_TO_CS_ID(x) \ - ((x==PIN_SPI1_SS0 ? 0 : \ - (x==PIN_SPI1_SS1 ? 1 : \ - (x==PIN_SPI1_SS2 ? 2 : \ - (x==PIN_SPI1_SS3 ? 3 : \ - -1))))) - - -// These buttons are present only on the Freedom E300 Arty Dev Kit. -#ifdef HAS_BOARD_BUTTONS -#define BUTTON_0_OFFSET 15 -#define BUTTON_1_OFFSET 30 -#define BUTTON_2_OFFSET 31 - -#define INT_DEVICE_BUTTON_0 (INT_GPIO_BASE + BUTTON_0_OFFSET) -#define INT_DEVICE_BUTTON_1 (INT_GPIO_BASE + BUTTON_1_OFFSET) -#define INT_DEVICE_BUTTON_2 (INT_GPIO_BASE + BUTTON_2_OFFSET) - -#endif - -#define HAS_HFXOSC 1 -#define HAS_LFROSC_BYPASS 1 - -#define RTC_FREQ 32768 - -void write_hex(int fd, unsigned long int hex); - -#endif /* _SIFIVE_HIFIVE1_H */ diff --git a/raven_spn/bsp/env/start.S b/raven_spn/bsp/env/start.S deleted file mode 100644 index 4e9f665..0000000 --- a/raven_spn/bsp/env/start.S +++ /dev/null @@ -1,111 +0,0 @@ -// See LICENSE for license details. -#include - -/* This is defined in sifive/platform.h, but that can't be included from - * assembly. */ -#define CLINT_CTRL_ADDR 0x02000000 - - .section .init - .globl _start - .type _start,@function - -_start: - .cfi_startproc - .cfi_undefined ra -.option push -.option norelax - la gp, __global_pointer$ -.option pop - la sp, _sp - -#if defined(ENABLE_SMP) - smp_pause(t0, t1) -#endif - - /* Load data section */ - la a0, _data_lma - la a1, _data - la a2, _edata - bgeu a1, a2, 2f -1: - lw t0, (a0) - sw t0, (a1) - addi a0, a0, 4 - addi a1, a1, 4 - bltu a1, a2, 1b -2: - - /* Clear bss section */ - la a0, __bss_start - la a1, _end - bgeu a0, a1, 2f -1: - sw zero, (a0) - addi a0, a0, 4 - bltu a0, a1, 1b -2: - - /* Call global constructors */ - la a0, __libc_fini_array - call atexit - call __libc_init_array - -#ifndef __riscv_float_abi_soft - /* Enable FPU */ - li t0, MSTATUS_FS - csrs mstatus, t0 - csrr t1, mstatus - and t1, t1, t0 - beqz t1, 1f - fssr x0 -1: -#endif - -#if defined(ENABLE_SMP) - smp_resume(t0, t1) - - csrr a0, mhartid - bnez a0, 2f -#endif - - auipc ra, 0 - addi sp, sp, -16 -#if __riscv_xlen == 32 - sw ra, 8(sp) -#else - sd ra, 8(sp) -#endif - - /* argc = argv = 0 */ - li a0, 0 - li a1, 0 - call main - tail exit -1: - j 1b - -#if defined(ENABLE_SMP) -2: - la t0, trap_entry - csrw mtvec, t0 - - csrr a0, mhartid - la t1, _sp - slli t0, a0, 10 - sub sp, t1, t0 - - auipc ra, 0 - addi sp, sp, -16 -#if __riscv_xlen == 32 - sw ra, 8(sp) -#else - sd ra, 8(sp) -#endif - - call secondary_main - tail exit - -1: - j 1b -#endif - .cfi_endproc diff --git a/raven_spn/bsp/env/ventry.S b/raven_spn/bsp/env/ventry.S deleted file mode 100644 index 5c82c48..0000000 --- a/raven_spn/bsp/env/ventry.S +++ /dev/null @@ -1,288 +0,0 @@ -// See LICENSE for license details - -#ifndef VENTRY_S -#define VENTRY_S - -#include "encoding.h" -#include "sifive/bits.h" - -#only save caller registers -.macro TRAP_ENTRY - addi sp, sp, -16*REGBYTES - - STORE x1, 0*REGBYTES(sp) - STORE x5, 1*REGBYTES(sp) - STORE x6, 2*REGBYTES(sp) - STORE x7, 3*REGBYTES(sp) - STORE x10, 4*REGBYTES(sp) - STORE x11, 5*REGBYTES(sp) - STORE x12, 6*REGBYTES(sp) - STORE x13, 7*REGBYTES(sp) - STORE x14, 8*REGBYTES(sp) - STORE x15, 9*REGBYTES(sp) - STORE x16, 10*REGBYTES(sp) - STORE x17, 11*REGBYTES(sp) - STORE x28, 12*REGBYTES(sp) - STORE x29, 13*REGBYTES(sp) - STORE x30, 14*REGBYTES(sp) - STORE x31, 15*REGBYTES(sp) -.endm - -#restore caller registers -.macro TRAP_EXIT -# Remain in M-mode after mret - li t0, MSTATUS_MPP - csrs mstatus, t0 - - LOAD x1, 0*REGBYTES(sp) - LOAD x5, 1*REGBYTES(sp) - LOAD x6, 2*REGBYTES(sp) - LOAD x7, 3*REGBYTES(sp) - LOAD x10, 4*REGBYTES(sp) - LOAD x11, 5*REGBYTES(sp) - LOAD x12, 6*REGBYTES(sp) - LOAD x13, 7*REGBYTES(sp) - LOAD x14, 8*REGBYTES(sp) - LOAD x15, 9*REGBYTES(sp) - LOAD x16, 10*REGBYTES(sp) - LOAD x17, 11*REGBYTES(sp) - LOAD x28, 12*REGBYTES(sp) - LOAD x29, 13*REGBYTES(sp) - LOAD x30, 14*REGBYTES(sp) - LOAD x31, 15*REGBYTES(sp) - - addi sp, sp, 16*REGBYTES - mret -.endm - - - -#Vector table for E31/E51 - - .section .text.entry - .align 8 - .global vtrap_entry -vtrap_entry: - j sync_trap - .align 2 - j reserved - .align 2 - j reserved - .align 2 - j vmsi_Handler - .align 2 - j reserved - .align 2 - j reserved - .align 2 - j reserved - .align 2 - j vmti_Handler - .align 2 - j reserved - .align 2 - j reserved - .align 2 - j reserved - .align 2 - j vmei_Handler - .align 2 - j reserved - .align 2 - j reserved - .align 2 - j reserved - .align 2 - j reserved - .align 2 - j vlip_Handler0 - .align 2 - j vlip_Handler1 - .align 2 - j vlip_Handler2 - .align 2 - j vlip_Handler3 - .align 2 - j vlip_Handler4 - .align 2 - j vlip_Handler5 - .align 2 - j vlip_Handler6 - .align 2 - j vlip_Handler7 - .align 2 - j vlip_Handler8 - .align 2 - j vlip_Handler9 - .align 2 - j vlip_Handler10 - .align 2 - j vlip_Handler11 - .align 2 - j vlip_Handler12 - .align 2 - j vlip_Handler13 - .align 2 - j vlip_Handler14 - .align 2 - j vlip_Handler15 - -#synchronous trap -sync_trap: - TRAP_ENTRY - jal handle_sync_trap - TRAP_EXIT - -#Machine Software Interrupt -vmsi_Handler: - TRAP_ENTRY - jal reserved - TRAP_EXIT - -#Machine Timer Interrupt -vmti_Handler: - TRAP_ENTRY - jal handle_m_time_interrupt - TRAP_EXIT - -#Machine External Interrupt -vmei_Handler: - TRAP_ENTRY - jal handle_m_external_interrupt - TRAP_EXIT - -#LIP0 -vlip_Handler0: - TRAP_ENTRY - jal handle_local_interrupt0 - TRAP_EXIT - -#LIP1 -vlip_Handler1: - TRAP_ENTRY - jal handle_local_interrupt1 - TRAP_EXIT - -#LIP2 -vlip_Handler2: - TRAP_ENTRY - jal handle_local_interrupt2 - TRAP_EXIT - -#LIP3 -vlip_Handler3: - TRAP_ENTRY - jal handle_local_interrupt3 - TRAP_EXIT - -#LIP4 -vlip_Handler4: - TRAP_ENTRY - jal handle_local_interrupt4 - TRAP_EXIT - -#LIP5 -vlip_Handler5: - TRAP_ENTRY - jal handle_local_interrupt5 - TRAP_EXIT - -#LIP6 -vlip_Handler6: - TRAP_ENTRY - jal handle_local_interrupt6 - TRAP_EXIT - -#LIP7 -vlip_Handler7: - TRAP_ENTRY - jal handle_local_interrupt7 - TRAP_EXIT - -#LIP8 -vlip_Handler8: - TRAP_ENTRY - jal handle_local_interrupt8 - TRAP_EXIT - -#LIP9 -vlip_Handler9: - TRAP_ENTRY - jal handle_local_interrupt9 - TRAP_EXIT - -#LIP10 -vlip_Handler10: - TRAP_ENTRY - jal handle_local_interrupt10 - TRAP_EXIT - -#LIP11 -vlip_Handler11: - TRAP_ENTRY - jal handle_local_interrupt11 - TRAP_EXIT - -#LIP12 -vlip_Handler12: - TRAP_ENTRY - jal handle_local_interrupt12 - TRAP_EXIT - -#LIP13 -vlip_Handler13: - TRAP_ENTRY - jal handle_local_interrupt13 - TRAP_EXIT - -#LIP14 -vlip_Handler14: - TRAP_ENTRY - jal handle_local_interrupt14 - TRAP_EXIT - -#LIP15 -vlip_Handler15: - TRAP_ENTRY - jal handle_local_interrupt15 - TRAP_EXIT - -#unimplemented ISRs trap here -.weak reserved -reserved: -.weak handle_local_interrupt0 -handle_local_interrupt0: -.weak handle_local_interrupt1 -handle_local_interrupt1: -.weak handle_local_interrupt2 -handle_local_interrupt2: -.weak handle_local_interrupt3 -handle_local_interrupt3: -.weak handle_local_interrupt4 -handle_local_interrupt4: -.weak handle_local_interrupt5 -handle_local_interrupt5: -.weak handle_local_interrupt6 -handle_local_interrupt6: -.weak handle_local_interrupt7 -handle_local_interrupt7: -.weak handle_local_interrupt8 -handle_local_interrupt8: -.weak handle_local_interrupt9 -handle_local_interrupt9: -.weak handle_local_interrupt10 -handle_local_interrupt10: -.weak handle_local_interrupt11 -handle_local_interrupt11: -.weak handle_local_interrupt12 -handle_local_interrupt12: -.weak handle_local_interrupt13 -handle_local_interrupt13: -.weak handle_local_interrupt14 -handle_local_interrupt14: -.weak handle_local_interrupt15 -handle_local_interrupt15: -1: - j 1b - -#endif diff --git a/raven_spn/bsp/include/sifive/bits.h b/raven_spn/bsp/include/sifive/bits.h deleted file mode 100644 index bfe656f..0000000 --- a/raven_spn/bsp/include/sifive/bits.h +++ /dev/null @@ -1,36 +0,0 @@ -// See LICENSE for license details. -#ifndef _RISCV_BITS_H -#define _RISCV_BITS_H - -#define likely(x) __builtin_expect((x), 1) -#define unlikely(x) __builtin_expect((x), 0) - -#define ROUNDUP(a, b) ((((a)-1)/(b)+1)*(b)) -#define ROUNDDOWN(a, b) ((a)/(b)*(b)) - -#define MAX(a, b) ((a) > (b) ? (a) : (b)) -#define MIN(a, b) ((a) < (b) ? (a) : (b)) -#define CLAMP(a, lo, hi) MIN(MAX(a, lo), hi) - -#define EXTRACT_FIELD(val, which) (((val) & (which)) / ((which) & ~((which)-1))) -#define INSERT_FIELD(val, which, fieldval) (((val) & ~(which)) | ((fieldval) * ((which) & ~((which)-1)))) - -#define STR(x) XSTR(x) -#define XSTR(x) #x - -#if __riscv_xlen == 64 -# define SLL32 sllw -# define STORE sd -# define LOAD ld -# define LWU lwu -# define LOG_REGBYTES 3 -#else -# define SLL32 sll -# define STORE sw -# define LOAD lw -# define LWU lw -# define LOG_REGBYTES 2 -#endif -#define REGBYTES (1 << LOG_REGBYTES) - -#endif diff --git a/raven_spn/bsp/include/sifive/const.h b/raven_spn/bsp/include/sifive/const.h deleted file mode 100644 index 8dcffbb..0000000 --- a/raven_spn/bsp/include/sifive/const.h +++ /dev/null @@ -1,18 +0,0 @@ -// See LICENSE for license details. -/* Derived from */ - -#ifndef _SIFIVE_CONST_H -#define _SIFIVE_CONST_H - -#ifdef __ASSEMBLER__ -#define _AC(X,Y) X -#define _AT(T,X) X -#else -#define _AC(X,Y) (X##Y) -#define _AT(T,X) ((T)(X)) -#endif /* !__ASSEMBLER__*/ - -#define _BITUL(x) (_AC(1,UL) << (x)) -#define _BITULL(x) (_AC(1,ULL) << (x)) - -#endif /* _SIFIVE_CONST_H */ diff --git a/raven_spn/bsp/include/sifive/devices/aon.h b/raven_spn/bsp/include/sifive/devices/aon.h deleted file mode 100644 index 63f1db3..0000000 --- a/raven_spn/bsp/include/sifive/devices/aon.h +++ /dev/null @@ -1,88 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_AON_H -#define _SIFIVE_AON_H - -/* Register offsets */ - -#define AON_WDOGCFG 0x000 -#define AON_WDOGCOUNT 0x008 -#define AON_WDOGS 0x010 -#define AON_WDOGFEED 0x018 -#define AON_WDOGKEY 0x01C -#define AON_WDOGCMP 0x020 - -#define AON_RTCCFG 0x040 -#define AON_RTCLO 0x048 -#define AON_RTCHI 0x04C -#define AON_RTCS 0x050 -#define AON_RTCCMP 0x060 - -#define AON_BACKUP0 0x080 -#define AON_BACKUP1 0x084 -#define AON_BACKUP2 0x088 -#define AON_BACKUP3 0x08C -#define AON_BACKUP4 0x090 -#define AON_BACKUP5 0x094 -#define AON_BACKUP6 0x098 -#define AON_BACKUP7 0x09C -#define AON_BACKUP8 0x0A0 -#define AON_BACKUP9 0x0A4 -#define AON_BACKUP10 0x0A8 -#define AON_BACKUP11 0x0AC -#define AON_BACKUP12 0x0B0 -#define AON_BACKUP13 0x0B4 -#define AON_BACKUP14 0x0B8 -#define AON_BACKUP15 0x0BC - -#define AON_PMUWAKEUPI0 0x100 -#define AON_PMUWAKEUPI1 0x104 -#define AON_PMUWAKEUPI2 0x108 -#define AON_PMUWAKEUPI3 0x10C -#define AON_PMUWAKEUPI4 0x110 -#define AON_PMUWAKEUPI5 0x114 -#define AON_PMUWAKEUPI6 0x118 -#define AON_PMUWAKEUPI7 0x11C -#define AON_PMUSLEEPI0 0x120 -#define AON_PMUSLEEPI1 0x124 -#define AON_PMUSLEEPI2 0x128 -#define AON_PMUSLEEPI3 0x12C -#define AON_PMUSLEEPI4 0x130 -#define AON_PMUSLEEPI5 0x134 -#define AON_PMUSLEEPI6 0x138 -#define AON_PMUSLEEPI7 0x13C -#define AON_PMUIE 0x140 -#define AON_PMUCAUSE 0x144 -#define AON_PMUSLEEP 0x148 -#define AON_PMUKEY 0x14C - -#define AON_LFROSC 0x070 -/* Constants */ - -#define AON_WDOGKEY_VALUE 0x51F15E -#define AON_WDOGFEED_VALUE 0xD09F00D - -#define AON_WDOGCFG_SCALE 0x0000000F -#define AON_WDOGCFG_RSTEN 0x00000100 -#define AON_WDOGCFG_ZEROCMP 0x00000200 -#define AON_WDOGCFG_ENALWAYS 0x00001000 -#define AON_WDOGCFG_ENCOREAWAKE 0x00002000 -#define AON_WDOGCFG_CMPIP 0x10000000 - -#define AON_RTCCFG_SCALE 0x0000000F -#define AON_RTCCFG_ENALWAYS 0x00001000 -#define AON_RTCCFG_CMPIP 0x10000000 - -#define AON_WAKEUPCAUSE_RESET 0x00 -#define AON_WAKEUPCAUSE_RTC 0x01 -#define AON_WAKEUPCAUSE_DWAKEUP 0x02 -#define AON_WAKEUPCAUSE_AWAKEUP 0x03 - -#define AON_RESETCAUSE_POWERON 0x0000 -#define AON_RESETCAUSE_EXTERNAL 0x0100 -#define AON_RESETCAUSE_WATCHDOG 0x0200 - -#define AON_PMUCAUSE_WAKEUPCAUSE 0x00FF -#define AON_PMUCAUSE_RESETCAUSE 0xFF00 - -#endif /* _SIFIVE_AON_H */ diff --git a/raven_spn/bsp/include/sifive/devices/clic.h b/raven_spn/bsp/include/sifive/devices/clic.h deleted file mode 100644 index e8dc2df..0000000 --- a/raven_spn/bsp/include/sifive/devices/clic.h +++ /dev/null @@ -1,30 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_CLIC_H -#define _SIFIVE_CLIC_H - -#define CLIC_HART0 0x00800000 -#define CLIC_MSIP 0x0000 -#define CLIC_MSIP_size 0x4 -#define CLIC_MTIMECMP 0x4000 -#define CLIC_MTIMECMP_size 0x8 -#define CLIC_MTIME 0xBFF8 -#define CLIC_MTIME_size 0x8 - -#define CLIC_INTIP 0x000 -#define CLIC_INTIE 0x400 -#define CLIC_INTCFG 0x800 -#define CLIC_CFG 0xc00 - -// These interrupt IDs are consistent across old and new mtvec modes -#define SSIPID 1 -#define MSIPID 3 -#define STIPID 5 -#define MTIPID 7 -#define SEIPID 9 -#define MEIPID 11 -#define CSIPID 12 -#define LOCALINTIDBASE 16 - - -#endif /* _SIFIVE_CLIC_H */ diff --git a/raven_spn/bsp/include/sifive/devices/clint.h b/raven_spn/bsp/include/sifive/devices/clint.h deleted file mode 100644 index cd3e0c7..0000000 --- a/raven_spn/bsp/include/sifive/devices/clint.h +++ /dev/null @@ -1,14 +0,0 @@ -// See LICENSE for license details - -#ifndef _SIFIVE_CLINT_H -#define _SIFIVE_CLINT_H - - -#define CLINT_MSIP 0x0000 -#define CLINT_MSIP_size 0x4 -#define CLINT_MTIMECMP 0x4000 -#define CLINT_MTIMECMP_size 0x8 -#define CLINT_MTIME 0xBFF8 -#define CLINT_MTIME_size 0x8 - -#endif /* _SIFIVE_CLINT_H */ diff --git a/raven_spn/bsp/include/sifive/devices/gpio.h b/raven_spn/bsp/include/sifive/devices/gpio.h deleted file mode 100644 index f7f0acb..0000000 --- a/raven_spn/bsp/include/sifive/devices/gpio.h +++ /dev/null @@ -1,24 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_GPIO_H -#define _SIFIVE_GPIO_H - -#define GPIO_INPUT_VAL (0x00) -#define GPIO_INPUT_EN (0x04) -#define GPIO_OUTPUT_EN (0x08) -#define GPIO_OUTPUT_VAL (0x0C) -#define GPIO_PULLUP_EN (0x10) -#define GPIO_DRIVE (0x14) -#define GPIO_RISE_IE (0x18) -#define GPIO_RISE_IP (0x1C) -#define GPIO_FALL_IE (0x20) -#define GPIO_FALL_IP (0x24) -#define GPIO_HIGH_IE (0x28) -#define GPIO_HIGH_IP (0x2C) -#define GPIO_LOW_IE (0x30) -#define GPIO_LOW_IP (0x34) -#define GPIO_IOF_EN (0x38) -#define GPIO_IOF_SEL (0x3C) -#define GPIO_OUTPUT_XOR (0x40) - -#endif /* _SIFIVE_GPIO_H */ diff --git a/raven_spn/bsp/include/sifive/devices/otp.h b/raven_spn/bsp/include/sifive/devices/otp.h deleted file mode 100644 index 93833e2..0000000 --- a/raven_spn/bsp/include/sifive/devices/otp.h +++ /dev/null @@ -1,23 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_OTP_H -#define _SIFIVE_OTP_H - -/* Register offsets */ - -#define OTP_LOCK 0x00 -#define OTP_CK 0x04 -#define OTP_OE 0x08 -#define OTP_SEL 0x0C -#define OTP_WE 0x10 -#define OTP_MR 0x14 -#define OTP_MRR 0x18 -#define OTP_MPP 0x1C -#define OTP_VRREN 0x20 -#define OTP_VPPEN 0x24 -#define OTP_A 0x28 -#define OTP_D 0x2C -#define OTP_Q 0x30 -#define OTP_READ_TIMINGS 0x34 - -#endif diff --git a/raven_spn/bsp/include/sifive/devices/plic.h b/raven_spn/bsp/include/sifive/devices/plic.h deleted file mode 100644 index e1ca5d6..0000000 --- a/raven_spn/bsp/include/sifive/devices/plic.h +++ /dev/null @@ -1,31 +0,0 @@ -// See LICENSE for license details. - -#ifndef PLIC_H -#define PLIC_H - -#include - -// 32 bits per source -#define PLIC_PRIORITY_OFFSET _AC(0x0000,UL) -#define PLIC_PRIORITY_SHIFT_PER_SOURCE 2 -// 1 bit per source (1 address) -#define PLIC_PENDING_OFFSET _AC(0x1000,UL) -#define PLIC_PENDING_SHIFT_PER_SOURCE 0 - -//0x80 per target -#define PLIC_ENABLE_OFFSET _AC(0x2000,UL) -#define PLIC_ENABLE_SHIFT_PER_TARGET 7 - - -#define PLIC_THRESHOLD_OFFSET _AC(0x200000,UL) -#define PLIC_CLAIM_OFFSET _AC(0x200004,UL) -#define PLIC_THRESHOLD_SHIFT_PER_TARGET 12 -#define PLIC_CLAIM_SHIFT_PER_TARGET 12 - -#define PLIC_MAX_SOURCE 1023 -#define PLIC_SOURCE_MASK 0x3FF - -#define PLIC_MAX_TARGET 15871 -#define PLIC_TARGET_MASK 0x3FFF - -#endif /* PLIC_H */ diff --git a/raven_spn/bsp/include/sifive/devices/prci.h b/raven_spn/bsp/include/sifive/devices/prci.h deleted file mode 100644 index 1a3de58..0000000 --- a/raven_spn/bsp/include/sifive/devices/prci.h +++ /dev/null @@ -1,56 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_PRCI_H -#define _SIFIVE_PRCI_H - -/* Register offsets */ - -#define PRCI_HFROSCCFG (0x0000) -#define PRCI_HFXOSCCFG (0x0004) -#define PRCI_PLLCFG (0x0008) -#define PRCI_PLLDIV (0x000C) -#define PRCI_PROCMONCFG (0x00F0) - -/* Fields */ -#define ROSC_DIV(x) (((x) & 0x2F) << 0 ) -#define ROSC_TRIM(x) (((x) & 0x1F) << 16) -#define ROSC_EN(x) (((x) & 0x1 ) << 30) -#define ROSC_RDY(x) (((x) & 0x1 ) << 31) - -#define XOSC_EN(x) (((x) & 0x1) << 30) -#define XOSC_RDY(x) (((x) & 0x1) << 31) - -#define PLL_R(x) (((x) & 0x7) << 0) -// single reserved bit for F LSB. -#define PLL_F(x) (((x) & 0x3F) << 4) -#define PLL_Q(x) (((x) & 0x3) << 10) -#define PLL_SEL(x) (((x) & 0x1) << 16) -#define PLL_REFSEL(x) (((x) & 0x1) << 17) -#define PLL_BYPASS(x) (((x) & 0x1) << 18) -#define PLL_LOCK(x) (((x) & 0x1) << 31) - -#define PLL_R_default 0x1 -#define PLL_F_default 0x1F -#define PLL_Q_default 0x3 - -#define PLL_REFSEL_HFROSC 0x0 -#define PLL_REFSEL_HFXOSC 0x1 - -#define PLL_SEL_HFROSC 0x0 -#define PLL_SEL_PLL 0x1 - -#define PLL_FINAL_DIV(x) (((x) & 0x3F) << 0) -#define PLL_FINAL_DIV_BY_1(x) (((x) & 0x1 ) << 8) - -#define PROCMON_DIV(x) (((x) & 0x1F) << 0) -#define PROCMON_TRIM(x) (((x) & 0x1F) << 8) -#define PROCMON_EN(x) (((x) & 0x1) << 16) -#define PROCMON_SEL(x) (((x) & 0x3) << 24) -#define PROCMON_NT_EN(x) (((x) & 0x1) << 28) - -#define PROCMON_SEL_HFCLK 0 -#define PROCMON_SEL_HFXOSCIN 1 -#define PROCMON_SEL_PLLOUTDIV 2 -#define PROCMON_SEL_PROCMON 3 - -#endif // _SIFIVE_PRCI_H diff --git a/raven_spn/bsp/include/sifive/devices/pwm.h b/raven_spn/bsp/include/sifive/devices/pwm.h deleted file mode 100644 index 067889a..0000000 --- a/raven_spn/bsp/include/sifive/devices/pwm.h +++ /dev/null @@ -1,37 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_PWM_H -#define _SIFIVE_PWM_H - -/* Register offsets */ - -#define PWM_CFG 0x00 -#define PWM_COUNT 0x08 -#define PWM_S 0x10 -#define PWM_CMP0 0x20 -#define PWM_CMP1 0x24 -#define PWM_CMP2 0x28 -#define PWM_CMP3 0x2C - -/* Constants */ - -#define PWM_CFG_SCALE 0x0000000F -#define PWM_CFG_STICKY 0x00000100 -#define PWM_CFG_ZEROCMP 0x00000200 -#define PWM_CFG_DEGLITCH 0x00000400 -#define PWM_CFG_ENALWAYS 0x00001000 -#define PWM_CFG_ONESHOT 0x00002000 -#define PWM_CFG_CMP0CENTER 0x00010000 -#define PWM_CFG_CMP1CENTER 0x00020000 -#define PWM_CFG_CMP2CENTER 0x00040000 -#define PWM_CFG_CMP3CENTER 0x00080000 -#define PWM_CFG_CMP0GANG 0x01000000 -#define PWM_CFG_CMP1GANG 0x02000000 -#define PWM_CFG_CMP2GANG 0x04000000 -#define PWM_CFG_CMP3GANG 0x08000000 -#define PWM_CFG_CMP0IP 0x10000000 -#define PWM_CFG_CMP1IP 0x20000000 -#define PWM_CFG_CMP2IP 0x40000000 -#define PWM_CFG_CMP3IP 0x80000000 - -#endif /* _SIFIVE_PWM_H */ diff --git a/raven_spn/bsp/include/sifive/devices/spi.h b/raven_spn/bsp/include/sifive/devices/spi.h deleted file mode 100644 index 80ef345..0000000 --- a/raven_spn/bsp/include/sifive/devices/spi.h +++ /dev/null @@ -1,80 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_SPI_H -#define _SIFIVE_SPI_H - -/* Register offsets */ - -#define SPI_REG_SCKDIV 0x00 -#define SPI_REG_SCKMODE 0x04 -#define SPI_REG_CSID 0x10 -#define SPI_REG_CSDEF 0x14 -#define SPI_REG_CSMODE 0x18 - -#define SPI_REG_DCSSCK 0x28 -#define SPI_REG_DSCKCS 0x2a -#define SPI_REG_DINTERCS 0x2c -#define SPI_REG_DINTERXFR 0x2e - -#define SPI_REG_FMT 0x40 -#define SPI_REG_TXFIFO 0x48 -#define SPI_REG_RXFIFO 0x4c -#define SPI_REG_TXCTRL 0x50 -#define SPI_REG_RXCTRL 0x54 - -#define SPI_REG_FCTRL 0x60 -#define SPI_REG_FFMT 0x64 - -#define SPI_REG_IE 0x70 -#define SPI_REG_IP 0x74 - -/* Fields */ - -#define SPI_SCK_PHA 0x1 -#define SPI_SCK_POL 0x2 - -#define SPI_FMT_PROTO(x) ((x) & 0x3) -#define SPI_FMT_ENDIAN(x) (((x) & 0x1) << 2) -#define SPI_FMT_DIR(x) (((x) & 0x1) << 3) -#define SPI_FMT_LEN(x) (((x) & 0xf) << 16) - -/* TXCTRL register */ -#define SPI_TXWM(x) ((x) & 0xffff) -/* RXCTRL register */ -#define SPI_RXWM(x) ((x) & 0xffff) - -#define SPI_IP_TXWM 0x1 -#define SPI_IP_RXWM 0x2 - -#define SPI_FCTRL_EN 0x1 - -#define SPI_INSN_CMD_EN 0x1 -#define SPI_INSN_ADDR_LEN(x) (((x) & 0x7) << 1) -#define SPI_INSN_PAD_CNT(x) (((x) & 0xf) << 4) -#define SPI_INSN_CMD_PROTO(x) (((x) & 0x3) << 8) -#define SPI_INSN_ADDR_PROTO(x) (((x) & 0x3) << 10) -#define SPI_INSN_DATA_PROTO(x) (((x) & 0x3) << 12) -#define SPI_INSN_CMD_CODE(x) (((x) & 0xff) << 16) -#define SPI_INSN_PAD_CODE(x) (((x) & 0xff) << 24) - -#define SPI_TXFIFO_FULL (1 << 31) -#define SPI_RXFIFO_EMPTY (1 << 31) - -/* Values */ - -#define SPI_CSMODE_AUTO 0 -#define SPI_CSMODE_HOLD 2 -#define SPI_CSMODE_OFF 3 - -#define SPI_DIR_RX 0 -#define SPI_DIR_TX 1 - -#define SPI_PROTO_S 0 -#define SPI_PROTO_D 1 -#define SPI_PROTO_Q 2 - -#define SPI_ENDIAN_MSB 0 -#define SPI_ENDIAN_LSB 1 - - -#endif /* _SIFIVE_SPI_H */ diff --git a/raven_spn/bsp/include/sifive/devices/uart.h b/raven_spn/bsp/include/sifive/devices/uart.h deleted file mode 100644 index 71bea6f..0000000 --- a/raven_spn/bsp/include/sifive/devices/uart.h +++ /dev/null @@ -1,27 +0,0 @@ -// See LICENSE for license details. - -#ifndef _SIFIVE_UART_H -#define _SIFIVE_UART_H - -/* Register offsets */ -#define UART_REG_TXFIFO 0x00 -#define UART_REG_RXFIFO 0x04 -#define UART_REG_TXCTRL 0x08 -#define UART_REG_RXCTRL 0x0c -#define UART_REG_IE 0x10 -#define UART_REG_IP 0x14 -#define UART_REG_DIV 0x18 - -/* TXCTRL register */ -#define UART_TXEN 0x1 -#define UART_TXWM(x) (((x) & 0xffff) << 16) - -/* RXCTRL register */ -#define UART_RXEN 0x1 -#define UART_RXWM(x) (((x) & 0xffff) << 16) - -/* IP register */ -#define UART_IP_TXWM 0x1 -#define UART_IP_RXWM 0x2 - -#endif /* _SIFIVE_UART_H */ diff --git a/raven_spn/bsp/include/sifive/sections.h b/raven_spn/bsp/include/sifive/sections.h deleted file mode 100644 index 6e1f051..0000000 --- a/raven_spn/bsp/include/sifive/sections.h +++ /dev/null @@ -1,17 +0,0 @@ -// See LICENSE for license details. -#ifndef _SECTIONS_H -#define _SECTIONS_H - -extern unsigned char _rom[]; -extern unsigned char _rom_end[]; - -extern unsigned char _ram[]; -extern unsigned char _ram_end[]; - -extern unsigned char _ftext[]; -extern unsigned char _etext[]; -extern unsigned char _fbss[]; -extern unsigned char _ebss[]; -extern unsigned char _end[]; - -#endif /* _SECTIONS_H */ diff --git a/raven_spn/bsp/include/sifive/smp.h b/raven_spn/bsp/include/sifive/smp.h deleted file mode 100644 index 8e34388..0000000 --- a/raven_spn/bsp/include/sifive/smp.h +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef SIFIVE_SMP -#define SIFIVE_SMP - -// The maximum number of HARTs this code supports -#ifndef MAX_HARTS -#define MAX_HARTS 32 -#endif -#define CLINT_END_HART_IPI CLINT_CTRL_ADDR + (MAX_HARTS*4) - -// The hart that non-SMP tests should run on -#ifndef NONSMP_HART -#define NONSMP_HART 0 -#endif - -/* If your test cannot handle multiple-threads, use this: - * smp_disable(reg1) - */ -#define smp_disable(reg1, reg2) \ - csrr reg1, mhartid ;\ - li reg2, NONSMP_HART ;\ - beq reg1, reg2, hart0_entry ;\ -42: ;\ - wfi ;\ - j 42b ;\ -hart0_entry: - -/* If your test needs to temporarily block multiple-threads, do this: - * smp_pause(reg1, reg2) - * ... single-threaded work ... - * smp_resume(reg1, reg2) - * ... multi-threaded work ... - */ - -#define smp_pause(reg1, reg2) \ - li reg2, 0x8 ;\ - csrw mie, reg2 ;\ - csrr reg2, mhartid ;\ - bnez reg2, 42f - -#define smp_resume(reg1, reg2) \ - li reg1, CLINT_CTRL_ADDR ;\ -41: ;\ - li reg2, 1 ;\ - sw reg2, 0(reg1) ;\ - addi reg1, reg1, 4 ;\ - li reg2, CLINT_END_HART_IPI ;\ - blt reg1, reg2, 41b ;\ -42: ;\ - wfi ;\ - csrr reg2, mip ;\ - andi reg2, reg2, 0x8 ;\ - beqz reg2, 42b ;\ - li reg1, CLINT_CTRL_ADDR ;\ - csrr reg2, mhartid ;\ - slli reg2, reg2, 2 ;\ - add reg2, reg2, reg1 ;\ - sw zero, 0(reg2) ;\ -41: ;\ - lw reg2, 0(reg1) ;\ - bnez reg2, 41b ;\ - addi reg1, reg1, 4 ;\ - li reg2, CLINT_END_HART_IPI ;\ - blt reg1, reg2, 41b - -#endif diff --git a/raven_spn/bsp/libwrap/libwrap.mk b/raven_spn/bsp/libwrap/libwrap.mk deleted file mode 100644 index 71bba3d..0000000 --- a/raven_spn/bsp/libwrap/libwrap.mk +++ /dev/null @@ -1,56 +0,0 @@ -# See LICENSE for license details. - -ifndef _SIFIVE_MK_LIBWRAP -_SIFIVE_MK_LIBWRAP := # defined - -LIBWRAP_DIR := $(dir $(lastword $(MAKEFILE_LIST))) -LIBWRAP_DIR := $(LIBWRAP_DIR:/=) - -LIBWRAP_SRCS := \ - stdlib/malloc.c \ - sys/open.c \ - sys/lseek.c \ - sys/read.c \ - sys/write.c \ - sys/fstat.c \ - sys/stat.c \ - sys/close.c \ - sys/link.c \ - sys/unlink.c \ - sys/execve.c \ - sys/fork.c \ - sys/getpid.c \ - sys/kill.c \ - sys/wait.c \ - sys/isatty.c \ - sys/times.c \ - sys/sbrk.c \ - sys/_exit.c \ - sys/puts.c \ - misc/write_hex.c - -LIBWRAP_SRCS := $(foreach f,$(LIBWRAP_SRCS),$(LIBWRAP_DIR)/$(f)) -LIBWRAP_OBJS := $(LIBWRAP_SRCS:.c=.o) - -LIBWRAP_SYMS := malloc free \ - open lseek read write fstat stat close link unlink \ - execve fork getpid kill wait \ - isatty times sbrk _exit puts - -LIBWRAP := libwrap.a - -LINK_DEPS += $(LIBWRAP) - -LDFLAGS += $(foreach s,$(LIBWRAP_SYMS),-Wl,--wrap=$(s)) -LDFLAGS += $(foreach s,$(LIBWRAP_SYMS),-Wl,--wrap=_$(s)) -LDFLAGS += -L. -Wl,--start-group -lwrap -lc -Wl,--end-group - -CLEAN_OBJS += $(LIBWRAP_OBJS) - -$(LIBWRAP_OBJS): %.o: %.c $(HEADERS) - $(CC) $(CFLAGS) $(INCLUDES) -c -o $@ $< - -$(LIBWRAP): $(LIBWRAP_OBJS) - $(AR) rcs $@ $^ - -endif # _SIFIVE_MK_LIBWRAP diff --git a/raven_spn/bsp/libwrap/misc/write_hex.c b/raven_spn/bsp/libwrap/misc/write_hex.c deleted file mode 100644 index a35ad7a..0000000 --- a/raven_spn/bsp/libwrap/misc/write_hex.c +++ /dev/null @@ -1,19 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include -#include "platform.h" - -void write_hex(int fd, unsigned long int hex) -{ - uint8_t ii; - uint8_t jj; - char towrite; - write(fd , "0x", 2); - for (ii = sizeof(unsigned long int) * 2 ; ii > 0; ii--) { - jj = ii - 1; - uint8_t digit = ((hex & (0xF << (jj*4))) >> (jj*4)); - towrite = digit < 0xA ? ('0' + digit) : ('A' + (digit - 0xA)); - write(fd, &towrite, 1); - } -} diff --git a/raven_spn/bsp/libwrap/stdlib/malloc.c b/raven_spn/bsp/libwrap/stdlib/malloc.c deleted file mode 100644 index 8f4f432..0000000 --- a/raven_spn/bsp/libwrap/stdlib/malloc.c +++ /dev/null @@ -1,17 +0,0 @@ -/* See LICENSE for license details. */ - -/* These functions are intended for embedded RV32 systems and are - obviously incorrect in general. */ - -void* __wrap_malloc(unsigned long sz) -{ - extern void* sbrk(long); - void* res = sbrk(sz); - if ((long)res == -1) - return 0; - return res; -} - -void __wrap_free(void* ptr) -{ -} diff --git a/raven_spn/bsp/libwrap/sys/_exit.c b/raven_spn/bsp/libwrap/sys/_exit.c deleted file mode 100644 index 011464f..0000000 --- a/raven_spn/bsp/libwrap/sys/_exit.c +++ /dev/null @@ -1,17 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "platform.h" -#include "weak_under_alias.h" - -void __wrap_exit(int code) -{ - const char message[] = "\nProgam has exited with code:"; - - write(STDERR_FILENO, message, sizeof(message) - 1); - write_hex(STDERR_FILENO, code); - write(STDERR_FILENO, "\n", 1); - - for (;;); -} -weak_under_alias(exit); diff --git a/raven_spn/bsp/libwrap/sys/close.c b/raven_spn/bsp/libwrap/sys/close.c deleted file mode 100644 index 199fe51..0000000 --- a/raven_spn/bsp/libwrap/sys/close.c +++ /dev/null @@ -1,11 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "stub.h" -#include "weak_under_alias.h" - -int __wrap_close(int fd) -{ - return _stub(EBADF); -} -weak_under_alias(close); diff --git a/raven_spn/bsp/libwrap/sys/execve.c b/raven_spn/bsp/libwrap/sys/execve.c deleted file mode 100644 index f7be25a..0000000 --- a/raven_spn/bsp/libwrap/sys/execve.c +++ /dev/null @@ -1,11 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "stub.h" -#include "weak_under_alias.h" - -int __wrap_execve(const char* name, char* const argv[], char* const env[]) -{ - return _stub(ENOMEM); -} -weak_under_alias(execve); diff --git a/raven_spn/bsp/libwrap/sys/fork.c b/raven_spn/bsp/libwrap/sys/fork.c deleted file mode 100644 index 13a3e65..0000000 --- a/raven_spn/bsp/libwrap/sys/fork.c +++ /dev/null @@ -1,9 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "stub.h" - -int fork(void) -{ - return _stub(EAGAIN); -} diff --git a/raven_spn/bsp/libwrap/sys/fstat.c b/raven_spn/bsp/libwrap/sys/fstat.c deleted file mode 100644 index ff82bf9..0000000 --- a/raven_spn/bsp/libwrap/sys/fstat.c +++ /dev/null @@ -1,18 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include -#include -#include "stub.h" -#include "weak_under_alias.h" - -int __wrap_fstat(int fd, struct stat* st) -{ - if (isatty(fd)) { - st->st_mode = S_IFCHR; - return 0; - } - - return _stub(EBADF); -} -weak_under_alias(fstat); diff --git a/raven_spn/bsp/libwrap/sys/getpid.c b/raven_spn/bsp/libwrap/sys/getpid.c deleted file mode 100644 index 195fbec..0000000 --- a/raven_spn/bsp/libwrap/sys/getpid.c +++ /dev/null @@ -1,8 +0,0 @@ -/* See LICENSE of license details. */ -#include "weak_under_alias.h" - -int __wrap_getpid(void) -{ - return 1; -} -weak_under_alias(getpid); diff --git a/raven_spn/bsp/libwrap/sys/isatty.c b/raven_spn/bsp/libwrap/sys/isatty.c deleted file mode 100644 index 7bb82ab..0000000 --- a/raven_spn/bsp/libwrap/sys/isatty.c +++ /dev/null @@ -1,13 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "weak_under_alias.h" - -int __wrap_isatty(int fd) -{ - if (fd == STDOUT_FILENO || fd == STDERR_FILENO) - return 1; - - return 0; -} -weak_under_alias(isatty); diff --git a/raven_spn/bsp/libwrap/sys/kill.c b/raven_spn/bsp/libwrap/sys/kill.c deleted file mode 100644 index 18b9bd4..0000000 --- a/raven_spn/bsp/libwrap/sys/kill.c +++ /dev/null @@ -1,11 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "stub.h" -#include "weak_under_alias.h" - -int __wrap_kill(int pid, int sig) -{ - return _stub(EINVAL); -} -weak_under_alias(kill); diff --git a/raven_spn/bsp/libwrap/sys/link.c b/raven_spn/bsp/libwrap/sys/link.c deleted file mode 100644 index 0cad551..0000000 --- a/raven_spn/bsp/libwrap/sys/link.c +++ /dev/null @@ -1,11 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "stub.h" -#include "weak_under_alias.h" - -int __wrap_link(const char *old_name, const char *new_name) -{ - return _stub(EMLINK); -} -weak_under_alias(link); diff --git a/raven_spn/bsp/libwrap/sys/lseek.c b/raven_spn/bsp/libwrap/sys/lseek.c deleted file mode 100644 index 4131449..0000000 --- a/raven_spn/bsp/libwrap/sys/lseek.c +++ /dev/null @@ -1,16 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include -#include -#include "stub.h" -#include "weak_under_alias.h" - -off_t __wrap_lseek(int fd, off_t ptr, int dir) -{ - if (isatty(fd)) - return 0; - - return _stub(EBADF); -} -weak_under_alias(lseek); diff --git a/raven_spn/bsp/libwrap/sys/open.c b/raven_spn/bsp/libwrap/sys/open.c deleted file mode 100644 index c61415a..0000000 --- a/raven_spn/bsp/libwrap/sys/open.c +++ /dev/null @@ -1,11 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "stub.h" -#include "weak_under_alias.h" - -int __wrap_open(const char* name, int flags, int mode) -{ - return _stub(ENOENT); -} -weak_under_alias(open); diff --git a/raven_spn/bsp/libwrap/sys/openat.c b/raven_spn/bsp/libwrap/sys/openat.c deleted file mode 100644 index 227c956..0000000 --- a/raven_spn/bsp/libwrap/sys/openat.c +++ /dev/null @@ -1,11 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "stub.h" -#include "weak_under_alias.h" - -int __wrap_openat(int dirfd, const char* name, int flags, int mode) -{ - return _stub(ENOENT); -} -weak_under_alias(openat); diff --git a/raven_spn/bsp/libwrap/sys/puts.c b/raven_spn/bsp/libwrap/sys/puts.c deleted file mode 100644 index 50d6437..0000000 --- a/raven_spn/bsp/libwrap/sys/puts.c +++ /dev/null @@ -1,28 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include -#include -#include - -#include "platform.h" -#include "stub.h" -#include "weak_under_alias.h" - -int __wrap_puts(const char *s) -{ - while (*s != '\0') { - while (UART0_REG(UART_REG_TXFIFO) & 0x80000000) ; - UART0_REG(UART_REG_TXFIFO) = *s; - - if (*s == '\n') { - while (UART0_REG(UART_REG_TXFIFO) & 0x80000000) ; - UART0_REG(UART_REG_TXFIFO) = '\r'; - } - - ++s; - } - - return 0; -} -weak_under_alias(puts); diff --git a/raven_spn/bsp/libwrap/sys/read.c b/raven_spn/bsp/libwrap/sys/read.c deleted file mode 100644 index 3226cdb..0000000 --- a/raven_spn/bsp/libwrap/sys/read.c +++ /dev/null @@ -1,32 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include -#include -#include - -#include "platform.h" -#include "stub.h" -#include "weak_under_alias.h" - -ssize_t __wrap_read(int fd, void* ptr, size_t len) -{ - uint8_t * current = (uint8_t *)ptr; - volatile uint32_t * uart_rx = (uint32_t *)(UART0_CTRL_ADDR + UART_REG_RXFIFO); - volatile uint8_t * uart_rx_cnt = (uint8_t *)(UART0_CTRL_ADDR + UART_REG_RXCTRL + 2); - - ssize_t result = 0; - - if (isatty(fd)) { - for (current = (uint8_t *)ptr; - (current < ((uint8_t *)ptr) + len) && (*uart_rx_cnt > 0); - current ++) { - *current = *uart_rx; - result++; - } - return result; - } - - return _stub(EBADF); -} -weak_under_alias(read); diff --git a/raven_spn/bsp/libwrap/sys/sbrk.c b/raven_spn/bsp/libwrap/sys/sbrk.c deleted file mode 100644 index 12170b4..0000000 --- a/raven_spn/bsp/libwrap/sys/sbrk.c +++ /dev/null @@ -1,18 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "weak_under_alias.h" - -void *__wrap_sbrk(ptrdiff_t incr) -{ - extern char _end[]; - extern char _heap_end[]; - static char *curbrk = _end; - - if ((curbrk + incr < _end) || (curbrk + incr > _heap_end)) - return NULL - 1; - - curbrk += incr; - return curbrk - incr; -} -weak_under_alias(sbrk); diff --git a/raven_spn/bsp/libwrap/sys/stat.c b/raven_spn/bsp/libwrap/sys/stat.c deleted file mode 100644 index 1576ca1..0000000 --- a/raven_spn/bsp/libwrap/sys/stat.c +++ /dev/null @@ -1,12 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include -#include "stub.h" -#include "weak_under_alias.h" - -int __wrap_stat(const char* file, struct stat* st) -{ - return _stub(EACCES); -} -weak_under_alias(stat); diff --git a/raven_spn/bsp/libwrap/sys/stub.h b/raven_spn/bsp/libwrap/sys/stub.h deleted file mode 100644 index fb5e5be..0000000 --- a/raven_spn/bsp/libwrap/sys/stub.h +++ /dev/null @@ -1,10 +0,0 @@ -/* See LICENSE of license details. */ -#ifndef _SIFIVE_SYS_STUB_H -#define _SIFIVE_SYS_STUB_H - -static inline int _stub(int err) -{ - return -1; -} - -#endif /* _SIFIVE_SYS_STUB_H */ diff --git a/raven_spn/bsp/libwrap/sys/times.c b/raven_spn/bsp/libwrap/sys/times.c deleted file mode 100644 index 55969a7..0000000 --- a/raven_spn/bsp/libwrap/sys/times.c +++ /dev/null @@ -1,12 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include -#include "stub.h" -#include "weak_under_alias.h" - -clock_t __wrap_times(struct tms* buf) -{ - return _stub(EACCES); -} -weak_under_alias(times); diff --git a/raven_spn/bsp/libwrap/sys/unlink.c b/raven_spn/bsp/libwrap/sys/unlink.c deleted file mode 100644 index 09f4da7..0000000 --- a/raven_spn/bsp/libwrap/sys/unlink.c +++ /dev/null @@ -1,11 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "stub.h" -#include "weak_under_alias.h" - -int __wrap_unlink(const char* name) -{ - return _stub(ENOENT); -} -weak_under_alias(unlink); diff --git a/raven_spn/bsp/libwrap/sys/wait.c b/raven_spn/bsp/libwrap/sys/wait.c deleted file mode 100644 index ea3225b..0000000 --- a/raven_spn/bsp/libwrap/sys/wait.c +++ /dev/null @@ -1,9 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include "stub.h" - -int wait(int* status) -{ - return _stub(ECHILD); -} diff --git a/raven_spn/bsp/libwrap/sys/weak_under_alias.h b/raven_spn/bsp/libwrap/sys/weak_under_alias.h deleted file mode 100644 index 7629353..0000000 --- a/raven_spn/bsp/libwrap/sys/weak_under_alias.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef _BSP_LIBWRAP_WEAK_UNDER_ALIAS_H -#define _BSP_LIBWRAP_WEAK_UNDER_ALIAS_H - -#define weak_under_alias(name) \ - extern __typeof (__wrap_##name) __wrap__##name __attribute__ ((weak, alias ("__wrap_"#name))) - -#endif diff --git a/raven_spn/bsp/libwrap/sys/write.c b/raven_spn/bsp/libwrap/sys/write.c deleted file mode 100644 index b1e9a7e..0000000 --- a/raven_spn/bsp/libwrap/sys/write.c +++ /dev/null @@ -1,31 +0,0 @@ -/* See LICENSE of license details. */ - -#include -#include -#include -#include - -#include "platform.h" -#include "stub.h" -#include "weak_under_alias.h" - -ssize_t __wrap_write(int fd, const void* ptr, size_t len) -{ - const uint8_t * current = (const char *)ptr; - - if (isatty(fd)) { - for (size_t jj = 0; jj < len; jj++) { - while (UART0_REG(UART_REG_TXFIFO) & 0x80000000) ; - UART0_REG(UART_REG_TXFIFO) = current[jj]; - - if (current[jj] == '\n') { - while (UART0_REG(UART_REG_TXFIFO) & 0x80000000) ; - UART0_REG(UART_REG_TXFIFO) = '\r'; - } - } - return len; - } - - return _stub(EBADF); -} -weak_under_alias(write); diff --git a/raven_spn/raven_spn b/raven_spn/raven_spn deleted file mode 100755 index cb16d40..0000000 Binary files a/raven_spn/raven_spn and /dev/null differ diff --git a/raven_spn/src/bsp.h b/raven_spn/src/bsp.h deleted file mode 100644 index f04f4f4..0000000 --- a/raven_spn/src/bsp.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * bsp.h - * - * Created on: 30.07.2018 - * Author: eyck - */ - -#ifndef BSP_H_ -#define BSP_H_ - -#ifdef __cplusplus -extern "C" { -#endif -#include -#include -#include -extern void trap_entry(); -#ifdef __cplusplus -} -#endif - -#endif /* BSP_H_ */ diff --git a/raven_spn/src/delay.c b/raven_spn/src/delay.c deleted file mode 100644 index 24070b4..0000000 --- a/raven_spn/src/delay.c +++ /dev/null @@ -1,123 +0,0 @@ -/* - * delay.c - * - * Created on: 30.07.2018 - * Author: eyck - */ - -#include "delay.h" - -#define rdmcycle(x) { \ - uint32_t lo, hi, hi2; \ - __asm__ __volatile__ ("1:\n\t" \ - "csrr %0, mcycleh\n\t" \ - "csrr %1, mcycle\n\t" \ - "csrr %2, mcycleh\n\t" \ - "bne %0, %2, 1b\n\t" \ - : "=r" (hi), "=r" (lo), "=r" (hi2)) ; \ - *(x) = lo | ((uint64_t) hi << 32); \ - } - -typedef struct { - uint32_t n; - uint32_t mult; - uint32_t shift; -} int_inverse ; - -int_inverse f_cpu_1000_inv; -int_inverse f_cpu_1000000_inv; - -uint32_t F_CPU=1000000; - -void calc_inv(uint32_t n, int_inverse * res){ - uint32_t one = ~0; - uint32_t d = one/n; - uint32_t r = one%n + 1; - if (r >= n) ++d; - if (d == 0) --d; - uint32_t shift = 0; - while ((d & 0x80000000) == 0){ - d <<= 1; - ++shift; - } - res->n = n; - res->mult = d; - res->shift = shift; -} - -uint32_t divide32_using_inverse(uint32_t n, int_inverse *inv){ - uint32_t d = (uint32_t)(((uint64_t)n * inv->mult) >> 32); - d >>= inv->shift; - if (n - d*inv->n >= inv->n) ++d; - return d; -} - -// Almost full-range 64/32 divide. -// If divisor-1 has i bits, then the answer is exact for n of up to 64-i bits -// e.g. for divisors up to a million, n can have up to 45 bits -// On RV32IM with divide32_using_inverse inlines this uses 5 multiplies, -// 33 instructions, zero branches, 3 loads, 0 stores. -uint64_t divide64_using_inverse(uint64_t n, int_inverse *inv){ - uint32_t preshift = (31 - inv->shift) & 31; - uint64_t d = (uint64_t)divide32_using_inverse(n >> preshift, inv) << preshift; - uint32_t r = n - d * inv->n; - d += divide32_using_inverse(r, inv); - return d; -} - - -uint32_t millis(){ - uint64_t x; - rdmcycle(&x); - x = divide64_using_inverse(x, &f_cpu_1000_inv); - return((uint32_t) (x & 0xFFFFFFFF)); -} - -uint32_t micros(void){ - uint64_t x; - rdmcycle(&x); - // For Power-of-two MHz F_CPU, - // this compiles into a simple shift, - // and is faster than the general solution. -#if F_CPU==16000000 - x = x / (F_CPU / 1000000); -#else -#if F_CPU==256000000 - x = x / (F_CPU / 1000000); -#else - x = divide64_using_inverse(x, &f_cpu_1000000_inv); -#endif -#endif - return((uint32_t) (x & 0xFFFFFFFF)); -} - - -void delayMS(uint32_t dwMs){ - uint64_t current, later; - rdmcycle(¤t); - later = current + dwMs * (F_CPU/1000); - if (later > current){ // usual case - while (later > current) - rdmcycle(¤t); - } else { // wrap. Though this is unlikely to be hit w/ 64-bit mcycle - while (later < current) - rdmcycle(¤t); - while (current < later) - rdmcycle(¤t); - } -} - -void delayUS(uint32_t dwUs){ - uint64_t current, later; - rdmcycle(¤t); - later = current + dwUs * (F_CPU/1000000); - if (later > current){ // usual case - while (later > current) - rdmcycle(¤t); - } else {// wrap. Though this is unlikely to be hit w/ 64-bit mcycle - while (later < current) - rdmcycle(¤t); - while (current < later) - rdmcycle(¤t); - } -} diff --git a/raven_spn/src/delay.h b/raven_spn/src/delay.h deleted file mode 100644 index 36ce098..0000000 --- a/raven_spn/src/delay.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * delay.h - * - * Created on: 30.07.2018 - * Author: eyck - */ - -#ifndef DELAY_H_ -#define DELAY_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif -extern uint32_t F_CPU; - -void delayMS(uint32_t dwMs); -void delayUS(uint32_t dwUs); - -#ifdef __cplusplus -} -#endif - -#endif /* DELAY_H_ */ diff --git a/raven_spn/src/init.h b/raven_spn/src/init.h deleted file mode 100644 index 1982cf5..0000000 --- a/raven_spn/src/init.h +++ /dev/null @@ -1,109 +0,0 @@ -#ifndef SRC_INIT_H_ -#define SRC_INIT_H_ - -#include -#include - -#include "delay.h" -#include "bsp.h" -#include "plic/plic_driver.h" - -typedef void (*function_ptr_t) (void); -//! Instance data for the PLIC. -plic_instance_t g_plic; -std::array g_ext_interrupt_handlers; -volatile bool spn1_hw_interrupt{true}; -volatile bool spn2_hw_interrupt{true}; - - -/*! \brief external interrupt handler - * - * routes the peripheral interrupts to the the respective handler - * - */ -extern "C" void handle_m_ext_interrupt() { - plic_source int_num = PLIC_claim_interrupt(&g_plic); - if ((int_num >=1 ) && (int_num < PLIC_NUM_INTERRUPTS)) - g_ext_interrupt_handlers[int_num](); - else - exit(1 + (uintptr_t) int_num); - PLIC_complete_interrupt(&g_plic, int_num); -} -/*! \brief dummy interrupt handler - * - */ -void no_interrupt_handler (void) {}; -/*! \brief configure the per-interrupt handler - * - */ -void configure_irq(size_t irq_num, function_ptr_t handler, unsigned char prio=1) { - g_ext_interrupt_handlers[irq_num] = handler; - // Priority must be set > 0 to trigger the interrupt. - PLIC_set_priority(&g_plic, irq_num, prio); - // Have to enable the interrupt both at the GPIO level, and at the PLIC level. - PLIC_enable_interrupt(&g_plic, irq_num); -} - -void wait_for_spn1_interrupt() { - // This is a time critical part. It must be ensured that no interrupt is processed between flag checking and wfi. - // Disable interrupts and wait a few more clocks for the instruction to take effect before checking the flag. - asm volatile ("csrrc x0, mie, %0; nop; nop" : : "r"(MIP_MEIP)); - while(spn1_hw_interrupt) { - // Enable interrupts and immediately enter wfi. - asm volatile ("csrrs x0, mie, %0; wfi; nop" : : "r"(MIP_MEIP)); - // Disable interrupts again before examine the flag value. - asm volatile ("csrrc x0, mie, %0; nop; nop" : : "r"(MIP_MEIP)); - } - spn1_hw_interrupt=true; - set_csr(mie, MIP_MEIP); -} - -void wait_for_spn2_interrupt() { - asm volatile ("csrrc x0, mie, %0; nop; nop" : : "r"(MIP_MEIP)); - while(spn2_hw_interrupt) { - asm volatile ("csrrs x0, mie, %0; wfi; nop" : : "r"(MIP_MEIP)); - asm volatile ("csrrc x0, mie, %0; nop; nop" : : "r"(MIP_MEIP)); - } - spn2_hw_interrupt=true; - set_csr(mie, MIP_MEIP); -} - -void wait_for_spn_interrupts() { - asm volatile ("csrrc x0, mie, %0; nop; nop" : : "r"(MIP_MEIP)); - while(spn1_hw_interrupt || spn2_hw_interrupt) { - asm volatile ("csrrs x0, mie, %0; wfi; nop" : : "r"(MIP_MEIP)); - asm volatile ("csrrc x0, mie, %0; nop; nop" : : "r"(MIP_MEIP)); - } - spn1_hw_interrupt=true; - spn2_hw_interrupt=true; - set_csr(mie, MIP_MEIP); -} - -/*!\brief initializes platform - * - */ -void platform_init(){ - // UART init section TODO: clarify how to get the functions from init.c? - GPIO_REG(GPIO_IOF_SEL) &= ~IOF0_UART0_MASK; - GPIO_REG(GPIO_IOF_EN) |= IOF0_UART0_MASK; - UART0_REG(UART_REG_TXCTRL) |= UART_TXEN; - - F_CPU=PRCI_measure_mcycle_freq(20, RTC_FREQ); - printf("core freq at %d Hz\n", F_CPU); - // initialie interupt & trap handling - write_csr(mtvec, &trap_entry); - - PLIC_init(&g_plic, PLIC_CTRL_ADDR, PLIC_NUM_INTERRUPTS, PLIC_NUM_PRIORITIES, 0); - // Disable the machine & timer interrupts until setup is done. - clear_csr(mie, MIP_MEIP); - clear_csr(mie, MIP_MTIP); - for (auto& h:g_ext_interrupt_handlers) h=no_interrupt_handler; - // Enable interrupts in general. - set_csr(mstatus, MSTATUS_MIE); - // Enable the Machine-External bit in MIE - set_csr(mie, MIP_MEIP); - - //hw_interrupt = false; -} - -#endif /* SRC_INIT_H_ */ diff --git a/raven_spn/src/io/gpio.h b/raven_spn/src/io/gpio.h deleted file mode 100644 index 466f2d2..0000000 --- a/raven_spn/src/io/gpio.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - * gpio.h - * - * Created on: 29.07.2018 - * Author: eyck - */ - -#ifndef GPIO_H_ -#define GPIO_H_ - -#include -#include - -template -class gpio_regs { -public: - static inline uint32_t& value_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_INPUT_VAL); - } - - static inline uint32_t& input_en_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_INPUT_EN); - } - - static inline uint32_t& output_en_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_OUTPUT_EN); - } - - static inline uint32_t& port_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_OUTPUT_VAL); - } - - static inline uint32_t& pue_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_PULLUP_EN); - } - - static inline uint32_t& ds_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_DRIVE); - } - - static inline uint32_t& rise_ie_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_RISE_IE); - } - - static inline uint32_t& rise_ip_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_RISE_IP); - } - - static inline uint32_t& fall_ie_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_FALL_IE); - } - - static inline uint32_t& fall_ip_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_FALL_IP); - } - - static inline uint32_t& high_ie_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_HIGH_IE); - } - - static inline uint32_t& high_ip_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_HIGH_IP); - } - - static inline uint32_t& low_ie_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_LOW_IE); - } - - static inline uint32_t& low_ip_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_LOW_IP); - } - - static inline uint32_t& iof_en_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_IOF_EN); - } - - static inline uint32_t& iof_sel_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_IOF_SEL); - } - - static inline uint32_t& out_xor_reg(){ - return *reinterpret_cast(BASE_ADDR+GPIO_OUTPUT_XOR); - } - -}; - - - -#endif /* GPIO_H_ */ diff --git a/raven_spn/src/io/pwm.h b/raven_spn/src/io/pwm.h deleted file mode 100644 index 2aab61b..0000000 --- a/raven_spn/src/io/pwm.h +++ /dev/null @@ -1,122 +0,0 @@ -/* - * pwm.h - * - * Created on: 29.07.2018 - * Author: eyck - */ - -#ifndef PWM_H_ -#define PWM_H_ - -#include -#include "util/bit_field.h" -#include -#include - -template -class pwm_regs { -public: - BEGIN_BF_DECL(pwmcfg_t, uint32_t); - BF_FIELD(scale, 0, 4); - BF_FIELD(sticky, 8, 1); - BF_FIELD(zerocmp, 9, 1); - BF_FIELD(deglitch, 10, 1); - BF_FIELD(enalways, 12, 1); - BF_FIELD(enoneshot, 13, 1); - BF_FIELD(cmp0center, 16, 1); - BF_FIELD(cmp1center, 17, 1); - BF_FIELD(cmp2center, 18, 1); - BF_FIELD(cmp3center, 19, 1); - BF_FIELD(cmp0gang, 24, 1); - BF_FIELD(cmp1gang, 25, 1); - BF_FIELD(cmp2gang, 26, 1); - BF_FIELD(cmp3gang, 27, 1); - BF_FIELD(cmp0ip, 28, 1); - BF_FIELD(cmp1ip, 29, 1); - BF_FIELD(cmp2ip, 30, 1); - BF_FIELD(cmp3ip, 31, 1); - END_BF_DECL(); - - BEGIN_BF_DECL(pwms_t, uint32_t); - BF_FIELD(s, 0, 16); - END_BF_DECL() r_pwms; - - BEGIN_BF_DECL(pwmcmp0_t, uint32_t); - BF_FIELD(cmp0, 0, 16); - END_BF_DECL() r_pwmcmp0; - - BEGIN_BF_DECL(pwmcmp1_t, uint32_t); - BF_FIELD(cmp0, 0, 16); - END_BF_DECL() r_pwmcmp1; - - BEGIN_BF_DECL(pwmcmp2_t, uint32_t); - BF_FIELD(cmp0, 0, 16); - END_BF_DECL() r_pwmcmp2; - - BEGIN_BF_DECL(pwmcmp3_t, uint32_t); - BF_FIELD(cmp0, 0, 16); - END_BF_DECL() r_pwmcmp3; - - static inline pwmcfg_t& cfg_reg(){ - return *reinterpret_cast(BASE_ADDR+PWM_CFG); - } - - static inline uint32_t& count_reg(){ - return *reinterpret_cast(BASE_ADDR+PWM_COUNT); - } - - static inline pwms_t& s_reg(){ - return *reinterpret_cast(BASE_ADDR+PWM_S); - } - - static inline pwmcmp0_t& cmp0_reg(){ - return *reinterpret_cast(BASE_ADDR+PWM_CMP0); - } - - static inline pwmcmp1_t& cmp1_reg(){ - return *reinterpret_cast(BASE_ADDR+PWM_CMP1); - } - - static inline pwmcmp2_t& cmp2_reg(){ - return *reinterpret_cast(BASE_ADDR+PWM_CMP2); - } - - static inline pwmcmp3_t& cmp3_reg(){ - return *reinterpret_cast(BASE_ADDR+PWM_CMP3); - } - - static inline bool oneshot_delay(long delay_us){ - auto scaling_factor=0; - while(delay_us/(1< std::numeric_limits::max()){ - scaling_factor++; - } - cfg_reg()=0; - count_reg()=0; - cfg_reg().scale=4+scaling_factor; // divide by 16 so we get 1us per pwm clock - cmp0_reg().cmp0 = delay_us/(1< -#include "util/bit_field.h" -#include -#include - -template -class spi_regs { -public: - // storage declarations - BEGIN_BF_DECL(sckdiv_t, uint32_t); - BF_FIELD(div, 0, 12); - END_BF_DECL(); - - BEGIN_BF_DECL(sckmode_t, uint32_t); - BF_FIELD(pha, 0, 1); - BF_FIELD(pol, 1, 1); - END_BF_DECL(); - - uint32_t r_csid; - - uint32_t r_csdef; - - BEGIN_BF_DECL(csmode_t, uint32_t); - BF_FIELD(mode, 0, 2); - END_BF_DECL(); - - BEGIN_BF_DECL(delay0_t, uint32_t); - BF_FIELD(cssck, 0, 8); - BF_FIELD(sckcs, 16, 8); - END_BF_DECL(); - - BEGIN_BF_DECL(delay1_t, uint32_t); - BF_FIELD(intercs, 0, 16); - BF_FIELD(interxfr, 16, 8); - END_BF_DECL(); - - BEGIN_BF_DECL(fmt_t, uint32_t); - BF_FIELD(proto, 0, 2); - BF_FIELD(endian, 2, 1); - BF_FIELD(dir, 3, 1); - BF_FIELD(len, 16, 4); - END_BF_DECL(); - - BEGIN_BF_DECL(txdata_t, uint32_t); - BF_FIELD(data, 0, 8); - BF_FIELD(full, 31, 1); - END_BF_DECL() r_txdata; - - BEGIN_BF_DECL(rxdata_t, uint32_t); - BF_FIELD(data, 0, 8); - BF_FIELD(empty, 31, 1); - END_BF_DECL(); - - BEGIN_BF_DECL(txmark_t, uint32_t); - BF_FIELD(txmark, 0, 3); - END_BF_DECL(); - - BEGIN_BF_DECL(rxmark_t, uint32_t); - BF_FIELD(rxmark, 0, 3); - END_BF_DECL(); - - BEGIN_BF_DECL(fctrl_t, uint32_t); - BF_FIELD(en, 0, 1); - END_BF_DECL(); - - BEGIN_BF_DECL(ffmt_t, uint32_t); - BF_FIELD(cmd_en, 0, 1); - BF_FIELD(addr_len, 1, 2); - BF_FIELD(pad_cnt, 3, 4); - BF_FIELD(cmd_proto, 7, 2); - BF_FIELD(addr_proto, 9, 2); - BF_FIELD(data_proto, 11, 2); - BF_FIELD(cmd_code, 16, 8); - BF_FIELD(pad_code, 24, 8); - END_BF_DECL(); - - BEGIN_BF_DECL(ie_t, uint32_t); - BF_FIELD(txwm, 0, 1); - BF_FIELD(rxwm, 1, 1); - END_BF_DECL(); - - BEGIN_BF_DECL(ip_t, uint32_t); - BF_FIELD(txwm, 0, 1); - BF_FIELD(rxwm, 1, 1); - END_BF_DECL(); - - static inline sckdiv_t& sckdiv_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_SCKDIV); - } - - static inline sckmode_t& sckmode_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_SCKMODE); - } - - static inline uint32_t& csid_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_CSID); - } - - static inline uint32_t& csdef_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_CSDEF); - } - - static inline csmode_t& csmode_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_CSMODE); - } - - static inline delay0_t& dcssck_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_DCSSCK); - } - - static inline uint32_t& dsckcs_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_DSCKCS); - } - - static inline delay1_t& dintercs_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_DINTERCS); - } - - static inline uint32_t& dinterxfr_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_DINTERXFR); - } - - static inline fmt_t& fmt_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_FMT); - } - - static inline txdata_t& txfifo_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_TXFIFO); - } - - static inline rxdata_t& rxfifo_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_RXFIFO); - } - - static inline txmark_t& txctrl_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_TXCTRL); - } - - static inline rxmark_t& rxctrl_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_RXCTRL); - } - - static inline fctrl_t& fctrl_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_FCTRL); - } - - static inline ffmt_t& ffmt_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_FFMT); - } - - static inline ie_t& ie_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_IE); - } - - static inline ip_t& ip_reg(){ - return *reinterpret_cast(BASE_ADDR+SPI_REG_IP); - } - - template - static bool transfer(std::array& bytes){ - csmode_reg().mode=2; // HOLD mode - rxctrl_reg().rxmark=bytes.size()-1; // trigger irq if more than 2 bytes are received; - ie_reg().rxwm=1; - // write data bytes - for(size_t i=0; i -#include "util/bit_field.h" -#include - -template -class uart_regs { -public: - BEGIN_BF_DECL(txdata_t, uint32_t); - BF_FIELD(data, 0, 8); - BF_FIELD(full, 31, 1); - END_BF_DECL() ; - - BEGIN_BF_DECL(rxdata_t, uint32_t); - BF_FIELD(data, 0, 8); - BF_FIELD(empty, 31, 1); - END_BF_DECL(); - - BEGIN_BF_DECL(txctrl_t, uint32_t); - BF_FIELD(txen, 0, 1); - BF_FIELD(nstop, 1, 1); - BF_FIELD(txcnt, 16, 3); - END_BF_DECL(); - - BEGIN_BF_DECL(rxctrl_t, uint32_t); - BF_FIELD(rxen, 0, 1); - BF_FIELD(rxcnt, 16, 3); - END_BF_DECL(); - - BEGIN_BF_DECL(ie_t, uint32_t); - BF_FIELD(txwm, 0, 1); - BF_FIELD(rxwm, 1, 1); - END_BF_DECL(); - - BEGIN_BF_DECL(ip_t, uint32_t); - BF_FIELD(txwm, 0, 1); - BF_FIELD(rxwm, 1, 1); - END_BF_DECL(); - - BEGIN_BF_DECL(div_t, uint32_t); - BF_FIELD(div, 0, 16); - END_BF_DECL(); - - static inline txdata_t& txdata_reg(){ - return *reinterpret_cast(BASE_ADDR+UART_REG_TXFIFO); - } - - static inline rxdata_t& rxdata_reg(){ - return *reinterpret_cast(BASE_ADDR+UART_REG_RXFIFO); - } - - static inline txctrl_t& txctrl_reg(){ - return *reinterpret_cast(BASE_ADDR+UART_REG_TXCTRL); - } - - static inline rxctrl_t& rxctrl_reg(){ - return *reinterpret_cast(BASE_ADDR+UART_REG_RXCTRL); - } - - static inline ie_t& ie_reg(){ - return *reinterpret_cast(BASE_ADDR+UART_REG_IE); - } - - static inline ip_t& ip_reg(){ - return *reinterpret_cast(BASE_ADDR+UART_REG_IP); - } - - static inline div_t& div_reg(){ - return *reinterpret_cast(BASE_ADDR+UART_REG_DIV); - } - -}; - -#endif /* SPI_H_ */ diff --git a/raven_spn/src/raven_spn.cpp b/raven_spn/src/raven_spn.cpp deleted file mode 100644 index e23b5ab..0000000 --- a/raven_spn/src/raven_spn.cpp +++ /dev/null @@ -1,149 +0,0 @@ -#include "raven_spn.h" -#include "spn_regs.h" -#include "init.h" -#include "spn_checker_regs.h" - -using spn_1 = spn_regs<0x90000000>; -using spn_2 = spn_regs<0xC0000000>; -using spn_checker = spn_checker_regs<0x10040000>; - -void run_xspn1(int in_addr, int out_addr, int num_samples, int in_beats, int out_beats) { - spn_1::mode_reg() = 0; - spn_1::input_length_reg() = num_samples; // each sample consists of 5 uint8 values - spn_1::input_addr_reg() = in_addr; - spn_1::output_addr_reg() = out_addr; - spn_1::num_of_in_beats_reg() = in_beats; // Number of AXI4 burst beats needed to load all input data - spn_1::num_of_out_beats_reg() = out_beats; // Number of AXI4 burst beats needed to store all result data - asm volatile ("csrrc x0, mie, %0; nop; nop" : : "r"(MIP_MEIP)); // Disable interrupts - printf("Starting first XSPN instance\n"); - asm volatile ("csrrs x0, mie, %0; nop" : : "r"(MIP_MEIP)); // Enable interrupts - spn_1::start_reg() = 1; -} - -void run_xspn2(int in_addr, int out_addr, int num_samples, int in_beats, int out_beats) { - spn_2::mode_reg() = 0; - spn_2::input_length_reg() = num_samples; // each sample consists of 5 uint8 values - spn_2::input_addr_reg() = in_addr; - spn_2::output_addr_reg() = out_addr; - spn_2::num_of_in_beats_reg() = in_beats; // Number of AXI4 burst beats needed to load all input data - spn_2::num_of_out_beats_reg() = out_beats; // Number of AXI4 burst beats needed to store all result data - asm volatile ("csrrc x0, mie, %0; nop; nop" : : "r"(MIP_MEIP)); // Disable interrupts - printf("Starting second XSPN instance\n"); - asm volatile ("csrrs x0, mie, %0; nop" : : "r"(MIP_MEIP)); // Enable interrupts - spn_2::start_reg() = 1; -} - -static void spn1_interrupt_handler(){ - spn1_hw_interrupt = false; - spn_1::interrupt_reg() = 1; -} - -static void spn2_interrupt_handler(){ - spn2_hw_interrupt = false; - spn_2::interrupt_reg() = 1; -} -/*! \brief main function - * - */ -int main() { - - - platform_init(); - configure_irq(2, spn1_interrupt_handler); - configure_irq(22, spn2_interrupt_handler); - - - uint32_t xspn_count = spn_checker::xspn_count_reg(); - uint32_t batch_size = spn_checker::batch_size_reg(); - uint32_t iterations = spn_checker::num_iterations_reg(); - - printf("XSPN COUNT: %d\n", xspn_count); - if (xspn_count < 1 || xspn_count > 2) { - printf("ERROR: invalid XSPN COUNT"); - return 1; - } - printf("BATCH SIZE: %d\n", batch_size); - printf("ITERATIONS: %d\n", iterations); - - - - int in_addr = 0x30000000; // place input samples in the SPI memory - int out_addr1 = 0x3C000000; - int out_addr2 = 0x3E000000; - - spn_1::mode_reg() = 1; - spn_1::start_reg() = 1; - wait_for_spn1_interrupt(); - uint32_t readout = spn_1::readout_reg(); - printf("READOUT first HW instance:0x%x\n", readout); - - if (xspn_count == 2) { - spn_2::mode_reg() = 1; - spn_2::start_reg() = 1; - wait_for_spn2_interrupt(); - uint32_t readout2 = spn_2::readout_reg(); - printf("READOUT second HW instance:0x%x\n", readout2); - } - - uint32_t axi_bytes = readout; - axi_bytes = axi_bytes & 0xff; - axi_bytes = 1 << axi_bytes; - - printf("AXI Bytes: %d\n", axi_bytes); - - uint32_t sample_bytes = readout; - sample_bytes = sample_bytes >> 16; - sample_bytes = sample_bytes / 8; - printf("Sample Bytes: %d\n", sample_bytes); - - uint32_t result_bytes = 8; - printf("Result Bytes: %d\n", result_bytes); - - uint32_t in_bytes = batch_size * sample_bytes; - uint32_t out_bytes = batch_size * result_bytes; - - uint32_t total_in = in_bytes * iterations; - - if (total_in > (out_addr1 - in_addr)) { - printf("ERROR: input data requires %d bytes, only %d bytes available\n", total_in, out_addr1 - in_addr); - return 1; - } - if (out_bytes > (out_addr2 - out_addr1)) { - printf("ERROR: output data requires %d bytes, only %d bytes available\n", out_bytes, out_addr2 - out_addr1); - return 1; - } - - - uint32_t in_beats = in_bytes / axi_bytes; - if (in_beats * axi_bytes < batch_size * sample_bytes) in_beats++; - uint32_t out_beats = out_bytes / axi_bytes; - if (out_beats * axi_bytes < batch_size * result_bytes) out_beats++; - - uint32_t current_in_addr = in_addr; - - // inject SPN input data - spn_checker::input_addr_reg() = current_in_addr; - spn_checker::num_input_samples_reg() = sample_bytes * batch_size * iterations; - spn_checker::start_data_trans_reg() = 1; - spn_checker::output_addr_reg() = out_addr1; - if (xspn_count == 2) { - spn_checker::output_addr2_reg() = out_addr2; - } - for (int k = 0; k < iterations*batch_size; k+=batch_size) { - run_xspn1(current_in_addr, out_addr1, batch_size, in_beats, out_beats); - if (xspn_count == 2) { - run_xspn2(current_in_addr, out_addr2, batch_size, in_beats, out_beats); - wait_for_spn_interrupts(); - } else { - wait_for_spn1_interrupt(); - } - printf("XSPN finished\n"); - spn_checker::offset_reg() = k; - spn_checker::length_reg() = batch_size; - spn_checker::start_result_check_reg() = 1; - - current_in_addr += batch_size * sample_bytes; // 5 bytes in each sample (NIPS5) - } - - return 0; -} diff --git a/raven_spn/src/raven_spn.h b/raven_spn/src/raven_spn.h deleted file mode 100644 index 14ff1a8..0000000 --- a/raven_spn/src/raven_spn.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef RAVEN_SPN_H_ -#define RAVEN_SPN_H_ - -extern "C" void handle_m_ext_interrupt(); - -#endif /* RAVEN_SPN_H_ */ diff --git a/raven_spn/src/spn_checker_regs.h b/raven_spn/src/spn_checker_regs.h deleted file mode 100644 index ff9e250..0000000 --- a/raven_spn/src/spn_checker_regs.h +++ /dev/null @@ -1,125 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Copyright (C) 2017, MINRES Technologies GmbH -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// 3. Neither the name of the copyright holder nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// -// Created on: Thu Oct 01 15:45:55 CEST 2020 -// * spn_regs.h Author: -// -//////////////////////////////////////////////////////////////////////////////// -#pragma once - -#include -#include - -#define SPN_CNTL_REG_START_RESULT_CHECK 0x00 -#define SPN_CNTL_REG_OFFSET 0x10 -#define SPN_CNTL_REG_LENGTH 0x20 -#define SPN_CNTL_REG_OUTPUT_ADDR 0x30 -#define SPN_CNTL_REG_INPUT_ADDR 0x40 -#define SPN_CNTL_REG_NUM_INPUT_SAMPLES 0x50 -#define SPN_CNTL_REG_START_DATA_TRANS 0x60 -#define SPN_CNTL_REG_OUTPUT_ADDR2 0x70 -#define SPN_CNTL_REG_XSPN_COUNT 0x80 -#define SPN_CNTL_REG_BATCH_SIZE 0x90 -#define SPN_CNTL_REG_NUM_ITERATIONS 0xA0 - -template -class spn_checker_regs { -public: - // storage declarations -// BEGIN_BF_DECL(start_t, uint32_t); -// BF_FIELD(start, 0, 1); -// END_BF_DECL() r_start; - uint32_t r_start_result_check; - - uint32_t r_offset; - - uint32_t r_length; - - uint32_t r_output_addr; - - uint32_t r_output_addr2; - - uint32_t r_input_addr; - - uint32_t r_num_input_samples; - - uint32_t r_start_data_trans; - - uint32_t r_xspn_count; - - uint32_t r_batch_size; - - uint32_t r_num_iterations; - - static inline uint32_t& start_result_check_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_CNTL_REG_START_RESULT_CHECK); - } - - static inline uint32_t & offset_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_CNTL_REG_OFFSET); - } - - static inline uint32_t & length_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_CNTL_REG_LENGTH); - } - - static inline uint32_t & output_addr_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_CNTL_REG_OUTPUT_ADDR); - } - - static inline uint32_t & output_addr2_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_CNTL_REG_OUTPUT_ADDR2); - } - - static inline uint32_t & input_addr_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_CNTL_REG_INPUT_ADDR); - } - - static inline uint32_t & num_input_samples_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_CNTL_REG_NUM_INPUT_SAMPLES); - } - - static inline uint32_t& start_data_trans_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_CNTL_REG_START_DATA_TRANS); - } - - static inline uint32_t& xspn_count_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_CNTL_REG_XSPN_COUNT); - } - - static inline uint32_t& batch_size_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_CNTL_REG_BATCH_SIZE); - } - - static inline uint32_t& num_iterations_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_CNTL_REG_NUM_ITERATIONS); - } - -}; diff --git a/raven_spn/src/spn_regs.h b/raven_spn/src/spn_regs.h deleted file mode 100644 index a733586..0000000 --- a/raven_spn/src/spn_regs.h +++ /dev/null @@ -1,116 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Copyright (C) 2017, MINRES Technologies GmbH -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// 3. Neither the name of the copyright holder nor the names of its contributors -// may be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// -// Created on: Thu Oct 01 15:45:55 CEST 2020 -// * spn_regs.h Author: -// -//////////////////////////////////////////////////////////////////////////////// - -#ifndef _SPN_REGS_H_ -#define _SPN_REGS_H_ - -#include -#include - -#define SPN_REG_START 0x00 -#define SPN_REG_READOUT 0x10 -#define SPN_REG_MODE 0x20 -#define SPN_REG_INPUT_LENGTH 0x30 -#define SPN_REG_INPUT_ADDR 0x40 -#define SPN_REG_OUTPUT_ADDR 0x50 -#define SPN_REG_NUM_OF_INPUT_BEATS 0x60 -#define SPN_REG_NUM_OF_OUTPUT_BEATS 0x70 -#define SPN_REG_INTERRUPT 0x0C - -template -class spn_regs { -public: - // storage declarations -// BEGIN_BF_DECL(start_t, uint32_t); -// BF_FIELD(start, 0, 1); -// END_BF_DECL() r_start; - uint32_t r_start; - - uint32_t r_readout; - - uint32_t r_mode; - - uint32_t r_input_length; - - uint32_t r_input_addr; - - uint32_t r_output_addr; - - uint32_t r_num_of_input_beats; - - uint32_t r_num_of_output_beats; - -// static inline start_t& start_reg(){ -// return *reinterpret_cast(BASE_ADDR+SPN_REG_START); -// } - static inline uint32_t& start_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_REG_START); - } - - static inline uint32_t & readout_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_REG_READOUT); - } - - static inline uint32_t & mode_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_REG_MODE); - } - - static inline uint32_t & input_length_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_REG_INPUT_LENGTH); - } - - static inline uint32_t & input_addr_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_REG_INPUT_ADDR); - } - - static inline uint32_t & output_addr_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_REG_OUTPUT_ADDR); - } - - static inline uint32_t & num_of_in_beats_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_REG_NUM_OF_INPUT_BEATS); - } - - static inline uint32_t & num_of_out_beats_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_REG_NUM_OF_OUTPUT_BEATS); - } - - static inline uint32_t & interrupt_reg(){ - return *reinterpret_cast(BASE_ADDR+SPN_REG_INTERRUPT); - } - -}; - -#endif // _SPN_REGS_H_ diff --git a/raven_spn/src/util/bit_field.h b/raven_spn/src/util/bit_field.h deleted file mode 100644 index d4aff48..0000000 --- a/raven_spn/src/util/bit_field.h +++ /dev/null @@ -1,179 +0,0 @@ -/*--------------------------------------------------------- -Copyright (c) 2015 Jeff Preshing - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgement in the product documentation would be - appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. ----------------------------------------------------------*/ - -#ifndef BIT_FIELD_H_ -#define BIT_FIELD_H_ - -#ifndef __CPP11OM_BITFIELD_H__ -#define __CPP11OM_BITFIELD_H__ - -#include - -//--------------------------------------------------------- -// BitFieldMember<>: Used internally by ADD_BITFIELD_MEMBER macro. -// All members are public to simplify compliance with sections 9.0.7 and -// 9.5.1 of the C++11 standard, thereby avoiding undefined behavior. -//--------------------------------------------------------- -template struct BitFieldMember { - T value; - - static_assert(Offset + Bits <= (int)sizeof(T) * 8, "Member exceeds bitfield boundaries"); - static_assert(Bits < (int)sizeof(T) * 8, "Can't fill entire bitfield with one member"); - - static const T Maximum = (T(1) << Bits) - 1; - static const T Mask = Maximum << Offset; - T maximum() const { return Maximum; } - T one() const { return T(1) << Offset; } - - operator T() const { return (value >> Offset) & Maximum; } - - BitFieldMember &operator=(T v) { - assert(v <= Maximum); // v must fit inside the bitfield member - value = (value & ~Mask) | (v << Offset); - return *this; - } - - BitFieldMember &operator+=(T v) { - assert(T(*this) + v <= Maximum); // result must fit inside the bitfield member - value += v << Offset; - return *this; - } - - BitFieldMember &operator-=(T v) { - assert(T(*this) >= v); // result must not underflow - value -= v << Offset; - return *this; - } - - BitFieldMember &operator++() { return *this += 1; } - BitFieldMember operator++(int) { // postfix form - BitFieldMember tmp(*this); - operator++(); - return tmp; - } - BitFieldMember &operator--() { return *this -= 1; } - BitFieldMember operator--(int) { // postfix form - BitFieldMember tmp(*this); - operator--(); - return tmp; - } -}; - -//--------------------------------------------------------- -// BitFieldArray<>: Used internally by ADD_BITFIELD_ARRAY macro. -// All members are public to simplify compliance with sections 9.0.7 and -// 9.5.1 of the C++11 standard, thereby avoiding undefined behavior. -//--------------------------------------------------------- -template class BitFieldArray { -public: - T value; - - static_assert(BaseOffset + BitsPerItem * NumItems <= (int)sizeof(T) * 8, "Array exceeds bitfield boundaries"); - static_assert(BitsPerItem < (int)sizeof(T) * 8, "Can't fill entire bitfield with one array element"); - - static const T Maximum = (T(1) << BitsPerItem) - 1; - T maximum() const { return Maximum; } - int numItems() const { return NumItems; } - - class Element { - private: - T &value; - int offset; - - public: - Element(T &value, int offset) - : value(value) - , offset(offset) {} - T mask() const { return Maximum << offset; } - - operator T() const { return (value >> offset) & Maximum; } - - Element &operator=(T v) { - assert(v <= Maximum); // v must fit inside the bitfield member - value = (value & ~mask()) | (v << offset); - return *this; - } - - Element &operator+=(T v) { - assert(T(*this) + v <= Maximum); // result must fit inside the bitfield member - value += v << offset; - return *this; - } - - Element &operator-=(T v) { - assert(T(*this) >= v); // result must not underflow - value -= v << offset; - return *this; - } - - Element &operator++() { return *this += 1; } - Element operator++(int) { // postfix form - Element tmp(*this); - operator++(); - return tmp; - } - Element &operator--() { return *this -= 1; } - Element operator--(int) { // postfix form - Element tmp(*this); - operator--(); - return tmp; - } - }; - - Element operator[](int i) { - assert(i >= 0 && i < NumItems); // array index must be in range - return Element(value, BaseOffset + BitsPerItem * i); - } - - const Element operator[](int i) const { - assert(i >= 0 && i < NumItems); // array index must be in range - return Element(value, BaseOffset + BitsPerItem * i); - } -}; - -//--------------------------------------------------------- -// Bitfield definition macros. -// All members are public to simplify compliance with sections 9.0.7 and -// 9.5.1 of the C++11 standard, thereby avoiding undefined behavior. -//--------------------------------------------------------- -#define BEGIN_BF_DECL(typeName, T) \ - union typeName { \ - struct Wrapper { \ - T value; \ - }; \ - Wrapper flat; \ - typeName(T v = 0) { flat.value = v; } \ - typeName &operator=(T v) { \ - flat.value = v; \ - return *this; \ - } \ - operator T &() { return flat.value; } \ - operator T() const { return flat.value; } \ - using StorageType = T; - -#define BF_FIELD(memberName, offset, bits) BitFieldMember memberName; - -#define BF_ARRAY(memberName, offset, bits, numItems) BitFieldArray memberName; - -#define END_BF_DECL() } - -#endif // __CPP11OM_BITFIELD_H__ - -#endif /* BIT_FIELD_H_ */ diff --git a/raven_spn/toolchain-rv32.cmake b/raven_spn/toolchain-rv32.cmake deleted file mode 100644 index bd5ee3b..0000000 --- a/raven_spn/toolchain-rv32.cmake +++ /dev/null @@ -1,33 +0,0 @@ -set(CMAKE_SYSTEM_NAME Linux) -set(CMAKE_SYSTEM_VERSION 1) -set(CMAKE_SYSTEM_PROCESSOR riscv) - -set(TOOLCHAIN_DIR /opt/riscv/tools) -set(ARCHITECTURE riscv64-unknown-elf) - -set(CMAKE_C_COMPILER ${ARCHITECTURE}-gcc -set(CMAKE_CXX_COMPILER ${ARCHITECTURE}-g++ -set(RISCV_LINUX_SYSROOT /opt/riscv/tools CACHE PATH "RISC-V cross compilation system root") # search path for the cross compile toolchain - -set(CMAKE_CXX_FLAGS "" CACHE STRING "c++ flags") -set(CMAKE_C_FLAGS "" CACHE STRING "c flags") -set(CMAKE_SHARED_LINKER_FLAGS "" CACHE STRING "shared linker flags") -set(CMAKE_MODULE_LINKER_FLAGS "" CACHE STRING "module linker flags") -set(CMAKE_EXE_LINKER_FLAGS "" CACHE STRING "executable linker flags") - -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=rv32imac -mabi=ilp32") -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=rv32imac -mabi=ilp32") -#set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}") -#set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}") -set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -march=rv32imac -mabi=ilp32") - -set(COMPILER_IS_RV32 "1") #flags for the CMakeList.txt -#add_definitions(-D_ARM_TEGRA3) # C/C++ preprocessor macro, which will be used in many many files - -set(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN_DIR}/${ARCHITECTURE}) - -include_directories(${TOOLCHAIN_DIR}/${ARCHITECTURE}/include) - -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) \ No newline at end of file