From 604c40243b0500af388bd132613819b192b238d1 Mon Sep 17 00:00:00 2001 From: Jacob Pease Date: Wed, 23 Aug 2023 10:22:55 -0500 Subject: [PATCH 01/32] Updated README to explain usage of flash-sd.sh --- linux/README.MD | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/linux/README.MD b/linux/README.MD index 68de94f03..2b9ec3ab3 100644 --- a/linux/README.MD +++ b/linux/README.MD @@ -49,4 +49,13 @@ You'll find the resulting disassembled files in `/output/images/disas ## Creating a Bootable SD Card +To flash a bootable sd card for Wally's bootloader, use the `flash-sd.sh` script located in `/linux/sdcard`. The script allows you to specify which buildroot directory you would like to use and to specify the device tree. By default it is set up for the default location of buildroot in `/opt/riscv` and uses the vcu108 device tree. To use the script with your own buildroot directory and device tree, type: + + $ cd sdcard + $ ./flash-sd.sh -b -d + + for example + + $ ./flash-sd.sh -b ~/repos/buildroot -d wally-vcu118.dtb /dev/sdb + From 494efe16ac4ff3023abe8c18e79e464b484969ac Mon Sep 17 00:00:00 2001 From: Jacob Pease Date: Wed, 23 Aug 2023 10:54:35 -0500 Subject: [PATCH 02/32] Minor formatting adjustments. --- linux/sdcard/flash-sd.sh | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/linux/sdcard/flash-sd.sh b/linux/sdcard/flash-sd.sh index 8b1b6ebdc..7f58f6d45 100755 --- a/linux/sdcard/flash-sd.sh +++ b/linux/sdcard/flash-sd.sh @@ -22,6 +22,7 @@ BOLDYELLOW="\e[1;33m" NC="\e[0m" NAME="$BOLDGREEN"${0:2}:"$NC" ERRORTEXT="$BOLDRED"ERROR:"$NC" +WARNINGTEXT="$BOLDYELLOW"Warning:"$NC" # Default values for buildroot and device tree RISCV=/opt/riscv @@ -150,16 +151,16 @@ if [[ $REPLY =~ ^[Yy]$ ]] ; then sleep 3 - echo -e "$NAME: Copying binaries into their partitions." + echo -e "$NAME Copying binaries into their partitions." DD_FLAGS="bs=4k iflag=fullblock oflag=direct conv=fsync status=progress" - echo -e "$NAME: Copying device tree" + echo -e "$NAME Copying device tree" sudo dd if=$DEVICE_TREE of="$SDCARD"1 $DD_FLAGS - echo -e "$NAME: Copying OpenSBI" + echo -e "$NAME Copying OpenSBI" sudo dd if=$FW_JUMP of="$SDCARD"2 $DD_FLAGS - echo -e "$NAME: Copying Kernel" + echo -e "$NAME Copying Kernel" sudo dd if=$LINUX_KERNEL of="$SDCARD"3 $DD_FLAGS sudo mkfs.ext4 "$SDCARD"4 From 1e834f2d5facf46ff456b1797a2b20a495366314 Mon Sep 17 00:00:00 2001 From: Jacob Pease Date: Wed, 23 Aug 2023 12:42:20 -0500 Subject: [PATCH 03/32] Minor color adjustment --- linux/sdcard/flash-sd.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linux/sdcard/flash-sd.sh b/linux/sdcard/flash-sd.sh index 7f58f6d45..9e00e0600 100755 --- a/linux/sdcard/flash-sd.sh +++ b/linux/sdcard/flash-sd.sh @@ -111,7 +111,7 @@ echo -e "$NAME Device tree block size: $DST_SIZE" echo -e "$NAME OpenSBI FW_JUMP block size: $FW_JUMP_SIZE" echo -e "$NAME Kernel block size: $KERNEL_SIZE" -read -p "Warning: Doing this will replace all data on this card. Continue? y/n: " -n 1 -r +read -p $'\e[1;33mWarning:\e[0m Doing this will replace all data on this card. Continue? y/n: ' -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]] ; then DEVBASENAME=$(basename $SDCARD) From 8a62a4513736efc26f912c8b76d333631e883aaf Mon Sep 17 00:00:00 2001 From: Jacob Pease Date: Fri, 25 Aug 2023 17:44:06 -0500 Subject: [PATCH 04/32] Set default baud rate of serial output to 115200 for the VCU108. --- linux/devicetree/wally-vcu108.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linux/devicetree/wally-vcu108.dts b/linux/devicetree/wally-vcu108.dts index add2920bd..8c9182c6c 100644 --- a/linux/devicetree/wally-vcu108.dts +++ b/linux/devicetree/wally-vcu108.dts @@ -9,7 +9,7 @@ chosen { linux,initrd-end = <0x85c43a00>; linux,initrd-start = <0x84200000>; - bootargs = "root=/dev/vda ro"; + bootargs = "console=ttyS0,115200 root=/dev/vda ro"; stdout-path = "/soc/uart@10000000"; }; From 12c3c98824db1b0c5f72d89ca72c048534702720 Mon Sep 17 00:00:00 2001 From: Ross Thompson Date: Wed, 30 Aug 2023 11:29:44 -0500 Subject: [PATCH 05/32] Extended the CBOM test to cover a 4 way set associative cache with 4KiB ways. --- .../references/WALLY-cbom-01.reference_output | 8 + .../rv64i_m/privilege/src/WALLY-cbom-01.S | 162 +++++++++++++++++- 2 files changed, 168 insertions(+), 2 deletions(-) diff --git a/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/privilege/references/WALLY-cbom-01.reference_output b/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/privilege/references/WALLY-cbom-01.reference_output index 9dd00bf9b..8d394ca19 100644 --- a/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/privilege/references/WALLY-cbom-01.reference_output +++ b/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/privilege/references/WALLY-cbom-01.reference_output @@ -436,6 +436,14 @@ ffffffff ffffffff ffffffff ffffffff +ffffffff +ffffffff +ffffffff +ffffffff +ffffffff +ffffffff +ffffffff +ffffffff 0bad0bad # controls 0bad0bad 0bad0bad diff --git a/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/privilege/src/WALLY-cbom-01.S b/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/privilege/src/WALLY-cbom-01.S index 4a45ec676..edad0406a 100644 --- a/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/privilege/src/WALLY-cbom-01.S +++ b/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/privilege/src/WALLY-cbom-01.S @@ -125,6 +125,164 @@ CBOMTest_inval_step4_all: sd a0, 0(s0) # should be -1 addi s0, s0, 8 + ################################################################################ + # INVALIDATE all ways D$ + ################################################################################ + + # theory of operation + # 1. Read several cachelines of data from memory into the d cache and copy to a second region of memory + # 2. Then verify the second region has the same data + # 3. Invalidate the second region + # 4. Verify the second region has the original invalid data + # DON'T batch each step. We want to see the transition between cachelines. The current should be invalidated + # but the next should have the copied data. + + # step 0 copy deadbeef to remote regions spaced 4KiB apart +CBOMTest_way_inval_4096_step0: + la a0, DeadBeafData1 + la a1, Destination1+4096 + li a2, 8 + jal ra, memcpy8 +CBOMTest_way_inval_8192_step0: + la a0, DeadBeafData1 + la a1, Destination1+8192 + li a2, 8 + jal ra, memcpy8 +CBOMTest_way_inval_12288_step0: + la a0, DeadBeafData1 + la a1, Destination1+12288 + li a2, 8 + jal ra, memcpy8 +CBOMTest_way_inval_16384_step0: + la a0, DeadBeafData1 + la a1, Destination1+16384 + li a2, 8 + jal ra, memcpy8 + # one of the following will force an eviction of each of the previous +CBOMTest_way_inval_20480_step0: # this one should force eviction of _4096 + la a0, DeadBeafData1 + la a1, Destination1+20480 + li a2, 8 + jal ra, memcpy8 +CBOMTest_way_inval_24576_step0: # this one should force eviction of _4096 + la a0, DeadBeafData1 + la a1, Destination1+24576 + li a2, 8 + jal ra, memcpy8 +CBOMTest_way_inval_28672_step0: # this one should force eviction of _4096 + la a0, DeadBeafData1 + la a1, Destination1+28672 + li a2, 8 + jal ra, memcpy8 +CBOMTest_way_inval_32768_step0: # this one should force eviction of _4096 + la a0, DeadBeafData1 + la a1, Destination1+32768 + li a2, 8 + jal ra, memcpy8 + + # step 1 +CBOMTest_way_inval_4096_step1: + la a0, SourceData + la a1, Destination1+4096 + li a2, 8 + jal ra, memcpy8 + +CBOMTest_way_inval_8192_step1: + la a0, SourceData + la a1, Destination1+8192 + li a2, 8 + jal ra, memcpy8 + +CBOMTest_way_inval_12288_step1: + la a0, SourceData + la a1, Destination1+12288 + li a2, 8 + jal ra, memcpy8 + +CBOMTest_way_inval_16384_step1: + la a0, SourceData + la a1, Destination1+16384 + li a2, 8 + jal ra, memcpy8 + + # don't want to ca use a write back for the previous writes since we want to invalidate them + + # step 2 +CBOMTest_way_inval_4096_step2: + la a0, SourceData + la a1, Destination1+4096 + li a2, 8 + jal ra, memcmp8 + sd a0, 0(s0) # should be -1 + addi s0, s0, 8 + +CBOMTest_way_inval_8192_step2: + la a0, SourceData + la a1, Destination1+8192 + li a2, 8 + jal ra, memcmp8 + sd a0, 0(s0) # should be -1 + addi s0, s0, 8 + +CBOMTest_way_inval_12288_step2: + la a0, SourceData + la a1, Destination1+12288 + li a2, 8 + jal ra, memcmp8 + sd a0, 0(s0) # should be -1 + addi s0, s0, 8 + +CBOMTest_way_inval_16384_step2: + la a0, SourceData + la a1, Destination1+16384 + li a2, 8 + jal ra, memcmp8 + sd a0, 0(s0) # should be -1 + addi s0, s0, 8 + +CBOMTest_way_inval_step3_all_again: + la a1, Destination1+4096 + la a2, Destination1+8192 + la a3, Destination1+12288 + la a4, Destination1+16384 + cbo.inval (a1) + cbo.inval (a2) + cbo.inval (a3) + cbo.inval (a4) + + # step 4 All should be invalid +CBOMTest_way_inval_4096_step4_all: + la a0, DeadBeafData1 + la a1, Destination1+4096 + li a2, 8 + jal ra, memcmp8 + sd a0, 0(s0) # should be -1 + addi s0, s0, 8 + +CBOMTest_way_inval_8192_step4_all: + la a0, DeadBeafData1 + la a1, Destination1+8192 + li a2, 8 + jal ra, memcmp8 + sd a0, 0(s0) # should be -1 + addi s0, s0, 8 + +CBOMTest_way_inval_12288_step4_all: + la a0, DeadBeafData1 + la a1, Destination1+12288 + li a2, 8 + jal ra, memcmp8 + sd a0, 0(s0) # should be -1 + addi s0, s0, 8 + +CBOMTest_way_inval_16384_step4_all: + la a0, DeadBeafData1 + la a1, Destination1+16384 + li a2, 8 + jal ra, memcmp8 + sd a0, 0(s0) # should be -1 + addi s0, s0, 8 + ################################################################################ # Clean D$ ################################################################################ @@ -151,7 +309,7 @@ CBOMTest_clean_step1: # step 2 CBOMTest_clean_step2: - la a0, SourceData + la a0, SourceData la a1, Destination2 li a2, 64 jal ra, memcmp8 @@ -466,7 +624,7 @@ Destination2: Destination3: .fill 128, 4, 0xdeadbeef signature: - .fill 32, 4, 0x0bad0bad + .fill 40, 4, 0x0bad0bad RVMODEL_DATA_END From eb07e8917eb952394eca5dcf40bcb9086c2f10d3 Mon Sep 17 00:00:00 2001 From: Jacob Pease Date: Thu, 31 Aug 2023 23:58:10 -0500 Subject: [PATCH 06/32] Linux Makefile can now dynamically find binaries for object dumps. --- linux/Makefile | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/linux/Makefile b/linux/Makefile index abbf4a51a..95a849fcf 100644 --- a/linux/Makefile +++ b/linux/Makefile @@ -5,6 +5,7 @@ WALLY := $(shell dirname $(shell pwd)) WALLYLINUX := $(shell pwd) DIS := ${IMAGES}/disassembly BRPACKAGES := $(WALLYLINUX)/buildroot-packages +BR2023 := $(WALLYLINUX)/buildroot-config-src/buildroot-2023.05.1 # Buildroot Config Stuff WALLYBOARDSRC := $(WALLYLINUX)/buildroot-config-src/wally @@ -26,6 +27,14 @@ BINARIES := fw_jump.elf vmlinux busybox OBJDUMPS := $(foreach name, $(BINARIES), $(basename $(name) .elf)) OBJDUMPS := $(foreach name, $(OBJDUMPS), $(DIS)/$(name).objdump) +# LINUXDIR := $(shell ls $(BUILDROOT)/output/build | grep -e '^linux-[0-9]\+\.[0-9]\+\.[0-9]\+$$' ) +# LINUXDIR := $(BUILDROOT)/output/build/$(LINUXDIR) +# BUSYBOXDIR := $(shell ls $(BUILDROOT)/output/build | grep -e '^linux-[0-9]\+\.[0-9]\+\.[0-9]\+$$' ) +# BUSYBOXDIR := $(BUILDROOT)/output/build/$(BUSYBOXDIR) + +LINUXDIR := $(shell find $(BUILDROOT)/output/build -maxdepth 2 -type d -regex ".*/linux-[0-9]+\.[0-9]+\.[0-9]+$$") +BUSYBOXDIR := $(shell find $(BUILDROOT)/output/build -maxdepth 2 -type d -regex ".*/busybox-[0-9]+\.[0-9]+\.[0-9]+$$") + .PHONY: all generate disassemble install clean cleanDTB cleanDriver test # Generate all device trees ------------------------------------------- @@ -41,7 +50,8 @@ all: # Temp rule for debugging test: - @echo $(OBJDUMPS) + @echo $(LINUXDIR) + @echo $(BUSYBOXDIR) generate: $(DTB) $(IMAGES) @@ -68,10 +78,10 @@ $(DIS)/%.objdump: $(IMAGES)/%.elf $(DIS)/%.objdump: $(IMAGES)/% riscv64-unknown-elf-objdump -S $< >> $@ -$(IMAGES)/vmlinux: $(BUILDROOT)/output/build/linux-5.10.7/vmlinux +$(IMAGES)/vmlinux: $(LINUXDIR)/vmlinux cp $< $@ -$(IMAGES)/busybox: $(BUILDROOT)/output/build/busybox-1.33.0/busybox +$(IMAGES)/busybox: $(BUSYBOXDIR)/busybox cp $< $@ # Generating new Buildroot directories -------------------------------- @@ -87,10 +97,16 @@ install: $(BUILDROOT)/package/fpga-axi-sdc $(WALLYBOARD) $(DRIVER) # $(WALLYBOARD)/linux.config: $(BRPACKAGES)/linux.config $(WALLYBOARD) # cp $(BRPACKAGES)/linux.config $@ +# $(WALLYBOARD): $(BUILDROOT) +# cp -r $(WALLYBOARDSRC) $(BUILDROOT)/board +# cp $(BRPACKAGES)/wally.config $(WALLYBOARD)/main.config +# cp $(BRPACKAGES)/linux.config $(WALLYBOARD)/linux.config + +# CONFIG DEPENDENCIES 2023.05.1 --------------------------------------- $(WALLYBOARD): $(BUILDROOT) cp -r $(WALLYBOARDSRC) $(BUILDROOT)/board - cp $(BRPACKAGES)/wally.config $(WALLYBOARD)/main.config - cp $(BRPACKAGES)/linux.config $(WALLYBOARD)/linux.config + cp $(BR2023)/main.config $(WALLYBOARD)/main.config + cp $(BR2023)/linux.config $(WALLYBOARD)/linux.config # Buildroot Package --------------------------------------------------- $(BUILDROOT)/package/fpga-axi-sdc: $(BUILDROOT) $(PATCHFILE) $(BRPACKAGES)/fpga-axi-sdc @@ -103,14 +119,14 @@ $(PATCHFILE): $(BUILDROOT): git clone https://github.com/buildroot/buildroot.git $@ - # cd $@; git checkout 2023.05.x - cd $@; git checkout 2021.05 + cd $@; git checkout 2023.05.x + #cd $@; git checkout 2021.05 $(DRIVER): @ if [ -d "$(WALLY)/addins/vivado-risc-v" ] ; then git submodule update --init $(WALLY)/addins/vivado-risc-v; fi cp ../addins/vivado-risc-v/patches/fpga-axi-sdc.c $@ # For 2021.05 - sed -i "s|card_hw_reset|hw_reset|1" $@ + #sed -i "s|card_hw_reset|hw_reset|1" $@ # --------------------------------------------------------------------- From de54b5c4d8e98b4113e4903fd3821511f1f5f971 Mon Sep 17 00:00:00 2001 From: Ross Thompson Date: Tue, 5 Sep 2023 11:11:56 -0500 Subject: [PATCH 07/32] Updated wavefile --- sim/wave.do | 649 +++++++++++++++++++++++++++------------------------- 1 file changed, 332 insertions(+), 317 deletions(-) diff --git a/sim/wave.do b/sim/wave.do index 6fd560251..587582a8e 100644 --- a/sim/wave.do +++ b/sim/wave.do @@ -48,11 +48,11 @@ add wave -noupdate -group {instruction pipeline} /testbench/dut/core/ifu/PostSpi add wave -noupdate -group {instruction pipeline} /testbench/dut/core/ifu/InstrD add wave -noupdate -group {instruction pipeline} /testbench/dut/core/ifu/InstrE add wave -noupdate -group {instruction pipeline} /testbench/dut/core/ifu/InstrM -add wave -noupdate -group PCS /testbench/dut/core/ifu/PCNextF -add wave -noupdate -group PCS /testbench/dut/core/ifu/PCF -add wave -noupdate -group PCS /testbench/dut/core/ifu/PCD -add wave -noupdate -group PCS /testbench/dut/core/PCE -add wave -noupdate -group PCS /testbench/dut/core/PCM +add wave -noupdate -expand -group PCS /testbench/dut/core/ifu/PCNextF +add wave -noupdate -expand -group PCS /testbench/dut/core/ifu/PCF +add wave -noupdate -expand -group PCS /testbench/dut/core/ifu/PCD +add wave -noupdate -expand -group PCS /testbench/dut/core/PCE +add wave -noupdate -expand -group PCS /testbench/dut/core/PCM add wave -noupdate -group {Decode Stage} /testbench/dut/core/ifu/PCD add wave -noupdate -group {Decode Stage} /testbench/dut/core/ifu/InstrD add wave -noupdate -group {Decode Stage} /testbench/InstrDName @@ -84,6 +84,7 @@ add wave -noupdate -group CSRs /testbench/dut/core/priv/priv/csr/MIP_REGW add wave -noupdate -group CSRs {/testbench/dut/core/priv/priv/csr/MSTATUS_REGW[21]} add wave -noupdate -group CSRs /testbench/dut/core/priv/priv/csr/MSTATUS_REGW add wave -noupdate -group CSRs /testbench/dut/core/priv/priv/csr/MTVEC_REGW +add wave -noupdate -group CSRs /testbench/dut/core/priv/priv/csr/csrm/MENVCFG_REGW add wave -noupdate -group CSRs /testbench/dut/core/priv/priv/csr/PMPADDR_ARRAY_REGW add wave -noupdate -group CSRs /testbench/dut/core/priv/priv/csr/PMPCFG_ARRAY_REGW add wave -noupdate -group CSRs /testbench/dut/core/priv/priv/csr/SATP_REGW @@ -91,6 +92,7 @@ add wave -noupdate -group CSRs /testbench/dut/core/priv/priv/csr/SCOUNTEREN_REGW add wave -noupdate -group CSRs /testbench/dut/core/priv/priv/csr/SEPC_REGW add wave -noupdate -group CSRs /testbench/dut/core/priv/priv/csr/SSTATUS_REGW add wave -noupdate -group CSRs /testbench/dut/core/priv/priv/csr/STVEC_REGW +add wave -noupdate -group CSRs /testbench/dut/core/priv/priv/csr/SENVCFG_REGW add wave -noupdate -group CSRs -group {user mode} /testbench/dut/core/priv/priv/csr/csru/csru/FRM_REGW add wave -noupdate -group CSRs -group {user mode} /testbench/dut/core/priv/priv/csr/csru/csru/FFLAGS_REGW add wave -noupdate -group CSRs -group {user mode} /testbench/dut/core/priv/priv/csr/csru/csru/STATUS_FS @@ -178,216 +180,224 @@ add wave -noupdate -group AHB /testbench/dut/core/ebu/ebu/HBURST add wave -noupdate -group AHB /testbench/dut/core/ebu/ebu/HPROT add wave -noupdate -group AHB /testbench/dut/core/ebu/ebu/HTRANS add wave -noupdate -group AHB /testbench/dut/core/ebu/ebu/HMASTLOCK -add wave -noupdate -expand -group lsu /testbench/dut/core/lsu/SelHPTW -add wave -noupdate -expand -group lsu /testbench/dut/core/lsu/LSUStallM -add wave -noupdate -expand -group lsu /testbench/dut/core/lsu/ReadDataWordMuxM -add wave -noupdate -expand -group lsu /testbench/dut/core/lsu/ReadDataM -add wave -noupdate -expand -group lsu -radix hexadecimal /testbench/dut/core/lsu/WriteDataM -add wave -noupdate -expand -group lsu /testbench/dut/core/lsu/FWriteDataM -add wave -noupdate -expand -group lsu /testbench/dut/core/lsu/bus/dcache/dcache/CacheStall -add wave -noupdate -expand -group lsu /testbench/dut/core/lsu/IgnoreRequestTLB -add wave -noupdate -expand -group lsu /testbench/dut/core/lsu/SelHPTW -add wave -noupdate -expand -group lsu -group bus /testbench/dut/core/ebu/ebu/HCLK -add wave -noupdate -expand -group lsu -group bus -color Gold /testbench/dut/core/lsu/bus/dcache/ahbcacheinterface/AHBBuscachefsm/CurrState -add wave -noupdate -expand -group lsu -group bus /testbench/dut/core/lsu/bus/dcache/ahbcacheinterface/AHBBuscachefsm/HREADY -add wave -noupdate -expand -group lsu -group bus /testbench/dut/core/lsu/BusStall -add wave -noupdate -expand -group lsu -group bus /testbench/dut/core/lsu/bus/dcache/ahbcacheinterface/HTRANS -add wave -noupdate -expand -group lsu -group bus /testbench/dut/core/lsu/bus/dcache/ahbcacheinterface/FetchBuffer -add wave -noupdate -expand -group lsu -group bus /testbench/dut/core/lsu/bus/dcache/ahbcacheinterface/HRDATA -add wave -noupdate -expand -group lsu -group bus /testbench/dut/core/lsu/LSUHWDATA -add wave -noupdate -expand -group lsu -group bus /testbench/dut/core/lsu/bus/dcache/ahbcacheinterface/BusStall -add wave -noupdate -expand -group lsu -group bus /testbench/dut/core/lsu/bus/dcache/ahbcacheinterface/CacheBusRW -add wave -noupdate -expand -group lsu -group bus /testbench/dut/core/lsu/bus/dcache/ahbcacheinterface/CacheBusAck -add wave -noupdate -expand -group lsu -group bus /testbench/dut/core/lsu/bus/dcache/dcache/CacheBusAdr -add wave -noupdate -expand -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/CacheHit -add wave -noupdate -expand -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/CacheRW -add wave -noupdate -expand -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/CMOp -add wave -noupdate -expand -group lsu -expand -group dcache -color Gold /testbench/dut/core/lsu/bus/dcache/dcache/cachefsm/CurrState -add wave -noupdate -expand -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/HitWay -add wave -noupdate -expand -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/SetValid -add wave -noupdate -expand -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/ClearValid -add wave -noupdate -expand -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/SetDirty -add wave -noupdate -expand -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/ClearDirty -add wave -noupdate -expand -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/SelAdr -add wave -noupdate -expand -group lsu -expand -group dcache /testbench/dut/core/lsu/IEUAdrE -add wave -noupdate -expand -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/CacheSet -add wave -noupdate -expand -group lsu -expand -group dcache {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/ClearDirtyWay} -add wave -noupdate -expand -group lsu -expand -group dcache {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/Dirty} -add wave -noupdate -expand -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/SelFlush -add wave -noupdate -expand -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/SelWriteback -add wave -noupdate -expand -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/TagWay -add wave -noupdate -expand -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/Tag -add wave -noupdate -expand -group lsu -expand -group dcache -group {replacement policy} /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/HitWay -add wave -noupdate -expand -group lsu -expand -group dcache -group {replacement policy} /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/LRUWriteEn -add wave -noupdate -expand -group lsu -expand -group dcache -group {replacement policy} /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/CacheSet -add wave -noupdate -expand -group lsu -expand -group dcache -group {replacement policy} -color {Orange Red} {/testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/LRUMemory[0]} -add wave -noupdate -expand -group lsu -expand -group dcache -group {replacement policy} /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/CurrLRU -add wave -noupdate -expand -group lsu -expand -group dcache -group {replacement policy} /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/NextLRU -add wave -noupdate -expand -group lsu -expand -group dcache -group {replacement policy} /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/VictimWay -add wave -noupdate -expand -group lsu -expand -group dcache -group {replacement policy} -expand -group DETAILS -expand /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/Intermediate -add wave -noupdate -expand -group lsu -expand -group dcache -group {replacement policy} -expand -group DETAILS /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/LRUUpdate -add wave -noupdate -expand -group lsu -expand -group dcache -group {replacement policy} -expand -group DETAILS /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/WayExpanded -add wave -noupdate -expand -group lsu -expand -group dcache -group flush /testbench/dut/core/lsu/bus/dcache/dcache/LineDirty -add wave -noupdate -expand -group lsu -expand -group dcache -group flush /testbench/dut/core/lsu/bus/dcache/dcache/FlushWay -add wave -noupdate -expand -group lsu -expand -group dcache -group flush /testbench/dut/core/lsu/bus/dcache/dcache/NextFlushAdr -add wave -noupdate -expand -group lsu -expand -group dcache -group flush -radix hexadecimal /testbench/dut/core/lsu/bus/dcache/dcache/FlushAdr -add wave -noupdate -expand -group lsu -expand -group dcache -group flush /testbench/dut/core/lsu/bus/dcache/dcache/cachefsm/FlushWayFlag -add wave -noupdate -expand -group lsu -expand -group dcache -group flush /testbench/dut/core/lsu/bus/dcache/dcache/FlushWayCntEn -add wave -noupdate -expand -group lsu -expand -group dcache -group flush /testbench/dut/core/lsu/bus/dcache/dcache/cachefsm/FlushAdrCntEn -add wave -noupdate -expand -group lsu -expand -group dcache -group flush /testbench/dut/core/lsu/bus/dcache/dcache/FlushAdrFlag -add wave -noupdate -expand -group lsu -expand -group dcache -group flush /testbench/dut/core/lsu/bus/dcache/dcache/cachefsm/SelFlush -add wave -noupdate -expand -group lsu -expand -group dcache -group Victim /testbench/dut/core/lsu/bus/dcache/dcache/VictimWay -add wave -noupdate -expand -group lsu -expand -group dcache -group Victim /testbench/dut/core/lsu/bus/dcache/dcache/SelAdr -add wave -noupdate -expand -group lsu -expand -group dcache -group Victim /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/PAdr -add wave -noupdate -expand -group lsu -expand -group dcache -group Victim /testbench/dut/core/lsu/bus/dcache/dcache/CacheSet -add wave -noupdate -expand -group lsu -expand -group dcache -group Victim /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/NextLRU -add wave -noupdate -expand -group lsu -expand -group dcache -group Victim /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/CurrLRU -add wave -noupdate -expand -group lsu -expand -group dcache -group Victim /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/LRUWriteEn -add wave -noupdate -expand -group lsu -expand -group dcache -group Victim /testbench/dut/core/lsu/bus/dcache/dcache/ReadDataLine -add wave -noupdate -expand -group lsu -expand -group dcache -group Victim /testbench/dut/core/lsu/bus/dcache/dcache/WordOffsetAddr -add wave -noupdate -expand -group lsu -expand -group dcache -group Victim /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/HitWay -add wave -noupdate -expand -group lsu -expand -group dcache -group Victim /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/ValidWay -add wave -noupdate -expand -group lsu -expand -group dcache -group Victim {/testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/LRUMemory[0]} -add wave -noupdate -expand -group lsu -expand -group dcache -group Victim /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/LRUMemory -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} /testbench/dut/core/lsu/bus/dcache/dcache/ClearDirty -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/SelectedWriteWordEn} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/SetValidWay} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/ClearValidWay} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/SetDirtyWay} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 -label TAG {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/CacheTagMem/RAM} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/ValidBits} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/DirtyBits} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 -group Way0Word0 -expand {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/word[0]/wordram/CacheDataMem/RAM} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 -group Way0Word0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/word[0]/wordram/CacheDataMem/we} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 -group Way0Word1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/word[1]/wordram/CacheDataMem/RAM} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 -group Way0Word1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/word[1]/wordram/CacheDataMem/we} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 -group Way0Word2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/word[2]/wordram/CacheDataMem/we} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 -group Way0Word2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/word[2]/wordram/CacheDataMem/RAM[62]} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 -group Way0Word2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/word[2]/wordram/CacheDataMem/RAM} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 -group Way0Word3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/word[3]/wordram/CacheDataMem/we} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way0 -group Way0Word3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/word[3]/wordram/CacheDataMem/RAM} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/SelectedWriteWordEn} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/SetValidWay} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/ClearValidWay} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/SetDirtyWay} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way1 -label TAG {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/CacheTagMem/RAM} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/ValidBits} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/DirtyBits} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way1 -group Way1Word0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/word[0]/wordram/CacheDataMem/RAM} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way1 -group Way1Word0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/word[0]/wordram/CacheDataMem/we} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way1 -group Way1Word1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/word[1]/wordram/CacheDataMem/RAM} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way1 -group Way1Word1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/word[1]/wordram/CacheDataMem/we} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way1 -group Way1Word2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/word[2]/wordram/CacheDataMem/we} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way1 -group Way1Word2 -expand {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/word[2]/wordram/CacheDataMem/RAM} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way1 -group Way1Word3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/word[3]/wordram/CacheDataMem/we} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way1 -group Way1Word3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/word[3]/wordram/CacheDataMem/RAM} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/SelectedWriteWordEn} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/SetValidWay} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/ClearValidWay} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/SetDirtyWay} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way2 -label TAG {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/CacheTagMem/RAM} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/ValidBits} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/DirtyBits} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way2 -group Way2Word0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/word[0]/wordram/CacheDataMem/RAM} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way2 -group Way2Word0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/word[0]/wordram/CacheDataMem/we} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way2 -group Way2Word1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/word[1]/wordram/CacheDataMem/RAM} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way2 -group Way2Word1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/word[1]/wordram/CacheDataMem/we} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way2 -group Way2Word2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/word[2]/wordram/CacheDataMem/we} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way2 -group Way2Word2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/word[2]/wordram/CacheDataMem/RAM} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way2 -group Way2Word3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/word[3]/wordram/CacheDataMem/we} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way2 -group Way2Word3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/word[3]/wordram/CacheDataMem/RAM} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/SelectedWriteWordEn} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/SetValidWay} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/ClearValidWay} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/SetDirtyWay} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -label TAG {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/CacheTagMem/RAM} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/ValidBits} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/DirtyBits} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -group Way3Word0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/word[0]/wordram/CacheDataMem/RAM} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -group Way3Word0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/word[0]/wordram/CacheDataMem/we} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -group Way3Word1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/word[1]/wordram/CacheDataMem/RAM} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -group Way3Word1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/word[1]/wordram/CacheDataMem/we} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -group Way3Word2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/word[2]/wordram/CacheDataMem/we} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -group Way3Word2 -expand {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/word[2]/wordram/CacheDataMem/RAM} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -group Way3Word3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/word[3]/wordram/CacheDataMem/we} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -expand -group way3 -group Way3Word3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/word[3]/wordram/CacheDataMem/RAM} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM writes} -group valid/dirty /testbench/dut/core/lsu/bus/dcache/dcache/ClearDirty -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/core/lsu/bus/dcache/dcache/CacheSet -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/HitWay} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/ValidWay} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/Dirty} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/ReadTag} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/TagWay} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/HitWay} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/ValidWay} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/Dirty} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/ReadTag} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/TagWay} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/HitWay} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/ValidWay} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/Dirty} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/ReadTag} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/TagWay} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/HitWay} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/ValidWay} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/Dirty} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/ReadTag} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/TagWay} -add wave -noupdate -expand -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/core/lsu/bus/dcache/dcache/HitWay -add wave -noupdate -expand -group lsu -expand -group dcache -group {CPU side} /testbench/dut/core/lsu/bus/dcache/dcache/NextSet -add wave -noupdate -expand -group lsu -expand -group dcache -expand -group {Memory Side} /testbench/dut/core/lsu/bus/dcache/dcache/CacheBusRW -add wave -noupdate -expand -group lsu -expand -group dcache -expand -group {Memory Side} /testbench/dut/core/lsu/bus/dcache/dcache/CacheBusAdr -add wave -noupdate -expand -group lsu -expand -group dcache -expand -group {Memory Side} /testbench/dut/core/lsu/bus/dcache/dcache/CacheBusAck -add wave -noupdate -expand -group lsu -expand -group dcache -expand -group {Memory Side} /testbench/dut/core/lsu/bus/dcache/dcache/ReadDataWord -add wave -noupdate -expand -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/FlushWay -add wave -noupdate -expand -group lsu -group dtlb /testbench/dut/core/lsu/dmmu/dmmu/tlb/tlb/VAdr -add wave -noupdate -expand -group lsu -group dtlb /testbench/dut/core/lsu/dmmu/dmmu/tlb/tlb/tlbcontrol/EffectivePrivilegeMode -add wave -noupdate -expand -group lsu -group dtlb /testbench/dut/core/lsu/dmmu/dmmu/tlb/tlb/PTE -add wave -noupdate -expand -group lsu -group dtlb /testbench/dut/core/lsu/dmmu/dmmu/tlb/tlb/HitPageType -add wave -noupdate -expand -group lsu -group dtlb /testbench/dut/core/lsu/dmmu/dmmu/tlb/tlb/tlbcontrol/Translate -add wave -noupdate -expand -group lsu -group dtlb /testbench/dut/core/lsu/dmmu/dmmu/tlb/tlb/tlbcontrol/DisableTranslation -add wave -noupdate -expand -group lsu -group dtlb /testbench/dut/core/lsu/dmmu/dmmu/TLBMiss -add wave -noupdate -expand -group lsu -group dtlb /testbench/dut/core/lsu/dmmu/dmmu/TLBHit -add wave -noupdate -expand -group lsu -group dtlb /testbench/dut/core/lsu/dmmu/dmmu/PhysicalAddress -add wave -noupdate -expand -group lsu -group dtlb -expand -group faults /testbench/dut/core/lsu/dmmu/dmmu/TLBPageFault -add wave -noupdate -expand -group lsu -group dtlb -expand -group faults /testbench/dut/core/lsu/dmmu/dmmu/LoadAccessFaultM -add wave -noupdate -expand -group lsu -group dtlb -expand -group faults /testbench/dut/core/lsu/dmmu/dmmu/StoreAmoAccessFaultM -add wave -noupdate -expand -group lsu -group dtlb /testbench/dut/core/lsu/dmmu/dmmu/tlb/tlb/TLBPAdr -add wave -noupdate -expand -group lsu -group dtlb -expand -group write /testbench/dut/core/lsu/dmmu/dmmu/tlb/tlb/PTE -add wave -noupdate -expand -group lsu -group dtlb -expand -group write /testbench/dut/core/lsu/dmmu/dmmu/tlb/tlb/PageTypeWriteVal -add wave -noupdate -expand -group lsu -group dtlb -expand -group write /testbench/dut/core/lsu/dmmu/dmmu/tlb/tlb/TLBWrite -add wave -noupdate -expand -group lsu -expand -group pma /testbench/dut/core/lsu/dmmu/dmmu/pmachecker/PhysicalAddress -add wave -noupdate -expand -group lsu -expand -group pma /testbench/dut/core/lsu/dmmu/dmmu/pmachecker/SelRegions -add wave -noupdate -expand -group lsu -expand -group pma /testbench/dut/core/lsu/dmmu/dmmu/Cacheable -add wave -noupdate -expand -group lsu -expand -group pma /testbench/dut/core/lsu/dmmu/dmmu/Idempotent -add wave -noupdate -expand -group lsu -expand -group pma /testbench/dut/core/lsu/dmmu/dmmu/pmachecker/PMAAccessFault -add wave -noupdate -expand -group lsu -expand -group pma /testbench/dut/core/lsu/dmmu/dmmu/PMAInstrAccessFaultF -add wave -noupdate -expand -group lsu -expand -group pma /testbench/dut/core/lsu/dmmu/dmmu/PMALoadAccessFaultM -add wave -noupdate -expand -group lsu -expand -group pma /testbench/dut/core/lsu/dmmu/dmmu/PMAStoreAmoAccessFaultM -add wave -noupdate -expand -group lsu -group pmp /testbench/dut/core/lsu/dmmu/dmmu/PMPInstrAccessFaultF -add wave -noupdate -expand -group lsu -group pmp /testbench/dut/core/lsu/dmmu/dmmu/PMPLoadAccessFaultM -add wave -noupdate -expand -group lsu -group pmp /testbench/dut/core/lsu/dmmu/dmmu/PMPStoreAmoAccessFaultM -add wave -noupdate -expand -group lsu -expand -group ptwalker /testbench/dut/core/lsu/hptw/hptw/SelHPTW -add wave -noupdate -expand -group lsu -expand -group ptwalker /testbench/dut/core/lsu/hptw/hptw/HPTWStall -add wave -noupdate -expand -group lsu -expand -group ptwalker /testbench/dut/core/lsu/hptw/hptw/DTLBWalk -add wave -noupdate -expand -group lsu -expand -group ptwalker -color Gold /testbench/dut/core/lsu/hptw/hptw/WalkerState -add wave -noupdate -expand -group lsu -expand -group ptwalker /testbench/dut/core/lsu/hptw/hptw/HPTWAdr -add wave -noupdate -expand -group lsu -expand -group ptwalker /testbench/dut/core/lsu/hptw/hptw/PTE -add wave -noupdate -expand -group lsu -expand -group ptwalker /testbench/dut/core/lsu/hptw/hptw/NextPageType -add wave -noupdate -expand -group lsu -expand -group ptwalker /testbench/dut/core/lsu/hptw/hptw/PageType -add wave -noupdate -expand -group lsu -expand -group ptwalker /testbench/dut/core/lsu/hptw/hptw/ValidNonLeafPTE -add wave -noupdate -expand -group lsu -expand -group ptwalker -expand -group types /testbench/dut/core/lsu/ITLBMissF -add wave -noupdate -expand -group lsu -expand -group ptwalker -expand -group types /testbench/dut/core/lsu/DTLBMissM -add wave -noupdate -expand -group lsu -expand -group ptwalker -expand -group types /testbench/dut/core/lsu/hptw/hptw/ITLBWriteF -add wave -noupdate -expand -group lsu -expand -group ptwalker -expand -group types /testbench/dut/core/lsu/hptw/hptw/DTLBWriteM -add wave -noupdate -expand -group lsu -expand -group ptwalker -expand -group faults /testbench/dut/core/lsu/hptw/hptw/LSUAccessFaultM -add wave -noupdate -expand -group lsu -expand -group ptwalker -expand -group faults /testbench/dut/core/lsu/hptw/hptw/DCacheStallM -add wave -noupdate -expand -group lsu -expand -group ptwalker -expand -group faults /testbench/dut/core/lsu/hptw/hptw/HPTWInstrAccessFaultF -add wave -noupdate -expand -group lsu -expand -group ptwalker -expand -group faults /testbench/dut/core/lsu/hptw/hptw/LSULoadAccessFaultM -add wave -noupdate -expand -group lsu -expand -group ptwalker -expand -group faults /testbench/dut/core/lsu/hptw/hptw/LSUStoreAmoAccessFaultM -add wave -noupdate -expand -group lsu -expand -group ptwalker -expand -group faults /testbench/dut/core/lsu/hptw/hptw/LoadAccessFaultM -add wave -noupdate -expand -group lsu -expand -group ptwalker -expand -group faults /testbench/dut/core/lsu/hptw/hptw/StoreAmoAccessFaultM -add wave -noupdate -expand -group lsu -expand -group ptwalker -expand -group faults /testbench/dut/core/lsu/hptw/hptw/HPTWInstrAccessFault +add wave -noupdate -group lsu /testbench/dut/core/lsu/SelHPTW +add wave -noupdate -group lsu /testbench/dut/core/lsu/LSUStallM +add wave -noupdate -group lsu /testbench/dut/core/lsu/ReadDataWordMuxM +add wave -noupdate -group lsu /testbench/dut/core/lsu/ReadDataM +add wave -noupdate -group lsu -radix hexadecimal /testbench/dut/core/lsu/WriteDataM +add wave -noupdate -group lsu /testbench/dut/core/lsu/FWriteDataM +add wave -noupdate -group lsu /testbench/dut/core/lsu/bus/dcache/dcache/CacheStall +add wave -noupdate -group lsu /testbench/dut/core/lsu/IgnoreRequestTLB +add wave -noupdate -group lsu /testbench/dut/core/lsu/SelHPTW +add wave -noupdate -group lsu -group bus /testbench/dut/core/ebu/ebu/HCLK +add wave -noupdate -group lsu -group bus -color Gold /testbench/dut/core/lsu/bus/dcache/ahbcacheinterface/AHBBuscachefsm/CurrState +add wave -noupdate -group lsu -group bus /testbench/dut/core/lsu/bus/dcache/ahbcacheinterface/AHBBuscachefsm/HREADY +add wave -noupdate -group lsu -group bus /testbench/dut/core/lsu/BusStall +add wave -noupdate -group lsu -group bus /testbench/dut/core/lsu/bus/dcache/ahbcacheinterface/HTRANS +add wave -noupdate -group lsu -group bus /testbench/dut/core/lsu/bus/dcache/ahbcacheinterface/FetchBuffer +add wave -noupdate -group lsu -group bus /testbench/dut/core/lsu/bus/dcache/ahbcacheinterface/HRDATA +add wave -noupdate -group lsu -group bus /testbench/dut/core/lsu/LSUHWDATA +add wave -noupdate -group lsu -group bus /testbench/dut/core/lsu/bus/dcache/ahbcacheinterface/BusStall +add wave -noupdate -group lsu -group bus /testbench/dut/core/lsu/bus/dcache/ahbcacheinterface/CacheBusRW +add wave -noupdate -group lsu -group bus /testbench/dut/core/lsu/bus/dcache/ahbcacheinterface/CacheBusAck +add wave -noupdate -group lsu -group bus /testbench/dut/core/lsu/bus/dcache/dcache/CacheBusAdr +add wave -noupdate -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/CacheHit +add wave -noupdate -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/CacheRW +add wave -noupdate -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/CMOp +add wave -noupdate -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/CMOZeroHit +add wave -noupdate -group lsu -expand -group dcache -color Gold /testbench/dut/core/lsu/bus/dcache/dcache/cachefsm/CurrState +add wave -noupdate -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/HitWay +add wave -noupdate -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/SetValid +add wave -noupdate -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/ClearValid +add wave -noupdate -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/SetDirty +add wave -noupdate -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/ClearDirty +add wave -noupdate -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/SelAdr +add wave -noupdate -group lsu -expand -group dcache /testbench/dut/core/lsu/IEUAdrE +add wave -noupdate -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/CacheSet +add wave -noupdate -group lsu -expand -group dcache {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/ClearDirtyWay} +add wave -noupdate -group lsu -expand -group dcache {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/Dirty} +add wave -noupdate -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/SelFlush +add wave -noupdate -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/SelWriteback +add wave -noupdate -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/TagWay +add wave -noupdate -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/Tag +add wave -noupdate -group lsu -expand -group dcache -group {replacement policy} /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/HitWay +add wave -noupdate -group lsu -expand -group dcache -group {replacement policy} /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/LRUWriteEn +add wave -noupdate -group lsu -expand -group dcache -group {replacement policy} /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/CacheSet +add wave -noupdate -group lsu -expand -group dcache -group {replacement policy} -color {Orange Red} {/testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/LRUMemory[0]} +add wave -noupdate -group lsu -expand -group dcache -group {replacement policy} /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/CurrLRU +add wave -noupdate -group lsu -expand -group dcache -group {replacement policy} /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/NextLRU +add wave -noupdate -group lsu -expand -group dcache -group {replacement policy} /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/VictimWay +add wave -noupdate -group lsu -expand -group dcache -group {replacement policy} -expand -group DETAILS -expand /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/Intermediate +add wave -noupdate -group lsu -expand -group dcache -group {replacement policy} -expand -group DETAILS /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/LRUUpdate +add wave -noupdate -group lsu -expand -group dcache -group {replacement policy} -expand -group DETAILS /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/WayExpanded +add wave -noupdate -group lsu -expand -group dcache -group flush /testbench/dut/core/lsu/bus/dcache/dcache/LineDirty +add wave -noupdate -group lsu -expand -group dcache -group flush /testbench/dut/core/lsu/bus/dcache/dcache/FlushWay +add wave -noupdate -group lsu -expand -group dcache -group flush /testbench/dut/core/lsu/bus/dcache/dcache/NextFlushAdr +add wave -noupdate -group lsu -expand -group dcache -group flush -radix hexadecimal /testbench/dut/core/lsu/bus/dcache/dcache/FlushAdr +add wave -noupdate -group lsu -expand -group dcache -group flush /testbench/dut/core/lsu/bus/dcache/dcache/cachefsm/FlushWayFlag +add wave -noupdate -group lsu -expand -group dcache -group flush /testbench/dut/core/lsu/bus/dcache/dcache/FlushWayCntEn +add wave -noupdate -group lsu -expand -group dcache -group flush /testbench/dut/core/lsu/bus/dcache/dcache/cachefsm/FlushAdrCntEn +add wave -noupdate -group lsu -expand -group dcache -group flush /testbench/dut/core/lsu/bus/dcache/dcache/FlushAdrFlag +add wave -noupdate -group lsu -expand -group dcache -group flush /testbench/dut/core/lsu/bus/dcache/dcache/cachefsm/SelFlush +add wave -noupdate -group lsu -expand -group dcache -group Victim /testbench/dut/core/lsu/bus/dcache/dcache/VictimWay +add wave -noupdate -group lsu -expand -group dcache -group Victim /testbench/dut/core/lsu/bus/dcache/dcache/SelAdr +add wave -noupdate -group lsu -expand -group dcache -group Victim /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/PAdr +add wave -noupdate -group lsu -expand -group dcache -group Victim /testbench/dut/core/lsu/bus/dcache/dcache/CacheSet +add wave -noupdate -group lsu -expand -group dcache -group Victim /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/NextLRU +add wave -noupdate -group lsu -expand -group dcache -group Victim /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/CurrLRU +add wave -noupdate -group lsu -expand -group dcache -group Victim /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/LRUWriteEn +add wave -noupdate -group lsu -expand -group dcache -group Victim /testbench/dut/core/lsu/bus/dcache/dcache/ReadDataLine +add wave -noupdate -group lsu -expand -group dcache -group Victim /testbench/dut/core/lsu/bus/dcache/dcache/WordOffsetAddr +add wave -noupdate -group lsu -expand -group dcache -group Victim /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/HitWay +add wave -noupdate -group lsu -expand -group dcache -group Victim /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/ValidWay +add wave -noupdate -group lsu -expand -group dcache -group Victim {/testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/LRUMemory[0]} +add wave -noupdate -group lsu -expand -group dcache -group Victim /testbench/dut/core/lsu/bus/dcache/dcache/vict/cacheLRU/LRUMemory +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} /testbench/dut/core/lsu/bus/dcache/dcache/SetValid +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} /testbench/dut/core/lsu/bus/dcache/dcache/ClearValid +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} /testbench/dut/core/lsu/bus/dcache/dcache/SetDirty +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} /testbench/dut/core/lsu/bus/dcache/dcache/ClearDirty +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/SelData} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/SelectedWriteWordEn} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/SetValidWay} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/ClearValidWay} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/SetDirtyWay} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way0 -label TAG {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/CacheTagMem/RAM} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/ValidBits} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/DirtyBits} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way0 -group Way0Word0 -expand {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/word[0]/wordram/CacheDataMem/RAM} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way0 -group Way0Word0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/word[0]/wordram/CacheDataMem/we} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way0 -group Way0Word1 -expand {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/word[1]/wordram/CacheDataMem/RAM} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way0 -group Way0Word1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/word[1]/wordram/CacheDataMem/we} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way0 -group Way0Word2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/word[2]/wordram/CacheDataMem/we} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way0 -group Way0Word2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/word[2]/wordram/CacheDataMem/RAM[62]} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way0 -group Way0Word2 -expand {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/word[2]/wordram/CacheDataMem/RAM} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way0 -group Way0Word3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/word[3]/wordram/CacheDataMem/we} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way0 -group Way0Word3 -expand {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/word[3]/wordram/CacheDataMem/RAM} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/SelNotHit2} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/SelNonHit} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/SelData} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/SelectedWriteWordEn} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/SetValidWay} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/ClearValidWay} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/SetDirtyWay} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way1 -label TAG {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/CacheTagMem/RAM} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/ValidBits} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/DirtyBits} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way1 -group Way1Word0 -expand {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/word[0]/wordram/CacheDataMem/RAM} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way1 -group Way1Word0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/word[0]/wordram/CacheDataMem/we} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way1 -group Way1Word1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/word[1]/wordram/CacheDataMem/RAM} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way1 -group Way1Word1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/word[1]/wordram/CacheDataMem/we} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way1 -group Way1Word2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/word[2]/wordram/CacheDataMem/we} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way1 -group Way1Word2 -expand {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/word[2]/wordram/CacheDataMem/RAM} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way1 -group Way1Word3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/word[3]/wordram/CacheDataMem/we} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way1 -group Way1Word3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/word[3]/wordram/CacheDataMem/RAM} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/SelectedWriteWordEn} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/SetValidWay} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/ClearValidWay} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/SetDirtyWay} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way2 -label TAG {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/CacheTagMem/RAM} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/ValidBits} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/DirtyBits} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way2 -group Way2Word0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/word[0]/wordram/CacheDataMem/RAM} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way2 -group Way2Word0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/word[0]/wordram/CacheDataMem/we} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way2 -group Way2Word1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/word[1]/wordram/CacheDataMem/RAM} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way2 -group Way2Word1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/word[1]/wordram/CacheDataMem/we} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way2 -group Way2Word2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/word[2]/wordram/CacheDataMem/we} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way2 -group Way2Word2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/word[2]/wordram/CacheDataMem/RAM} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way2 -group Way2Word3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/word[3]/wordram/CacheDataMem/we} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way2 -group Way2Word3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/word[3]/wordram/CacheDataMem/RAM} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/SelectedWriteWordEn} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/SetValidWay} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/ClearValidWay} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/SetDirtyWay} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way3 -label TAG {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/CacheTagMem/RAM} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/ValidBits} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/DirtyBits} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way3 -group Way3Word0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/word[0]/wordram/CacheDataMem/RAM} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way3 -group Way3Word0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/word[0]/wordram/CacheDataMem/we} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way3 -group Way3Word1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/word[1]/wordram/CacheDataMem/RAM} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way3 -group Way3Word1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/word[1]/wordram/CacheDataMem/we} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way3 -group Way3Word2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/word[2]/wordram/CacheDataMem/we} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way3 -group Way3Word2 -expand {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/word[2]/wordram/CacheDataMem/RAM} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way3 -group Way3Word3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/word[3]/wordram/CacheDataMem/we} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -expand -group way3 -group Way3Word3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/word[3]/wordram/CacheDataMem/RAM} +add wave -noupdate -group lsu -expand -group dcache -expand -group {Cache SRAM writes} -group valid/dirty /testbench/dut/core/lsu/bus/dcache/dcache/ClearDirty +add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/core/lsu/bus/dcache/dcache/CacheSet +add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/HitWay} +add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/ValidWay} +add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/Dirty} +add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/ReadTag} +add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way0 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[0]/TagWay} +add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/HitWay} +add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/ValidWay} +add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/Dirty} +add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/ReadTag} +add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way1 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[1]/TagWay} +add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/HitWay} +add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/ValidWay} +add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/Dirty} +add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/ReadTag} +add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way2 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[2]/TagWay} +add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/HitWay} +add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/ValidWay} +add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/Dirty} +add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/ReadTag} +add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} -expand -group way3 {/testbench/dut/core/lsu/bus/dcache/dcache/CacheWays[3]/TagWay} +add wave -noupdate -group lsu -expand -group dcache -group {Cache SRAM read} /testbench/dut/core/lsu/bus/dcache/dcache/HitWay +add wave -noupdate -group lsu -expand -group dcache -group {CPU side} /testbench/dut/core/lsu/bus/dcache/dcache/NextSet +add wave -noupdate -group lsu -expand -group dcache -expand -group {Memory Side} /testbench/dut/core/lsu/bus/dcache/dcache/CacheBusRW +add wave -noupdate -group lsu -expand -group dcache -expand -group {Memory Side} /testbench/dut/core/lsu/bus/dcache/dcache/CacheBusAdr +add wave -noupdate -group lsu -expand -group dcache -expand -group {Memory Side} /testbench/dut/core/lsu/bus/dcache/dcache/CacheBusAck +add wave -noupdate -group lsu -expand -group dcache -expand -group {Memory Side} /testbench/dut/core/lsu/bus/dcache/dcache/ReadDataWord +add wave -noupdate -group lsu -expand -group dcache /testbench/dut/core/lsu/bus/dcache/dcache/FlushWay +add wave -noupdate -group lsu -group dtlb /testbench/dut/core/lsu/dmmu/dmmu/tlb/tlb/VAdr +add wave -noupdate -group lsu -group dtlb /testbench/dut/core/lsu/dmmu/dmmu/tlb/tlb/tlbcontrol/EffectivePrivilegeMode +add wave -noupdate -group lsu -group dtlb /testbench/dut/core/lsu/dmmu/dmmu/tlb/tlb/PTE +add wave -noupdate -group lsu -group dtlb /testbench/dut/core/lsu/dmmu/dmmu/tlb/tlb/HitPageType +add wave -noupdate -group lsu -group dtlb /testbench/dut/core/lsu/dmmu/dmmu/tlb/tlb/tlbcontrol/Translate +add wave -noupdate -group lsu -group dtlb /testbench/dut/core/lsu/dmmu/dmmu/tlb/tlb/tlbcontrol/DisableTranslation +add wave -noupdate -group lsu -group dtlb /testbench/dut/core/lsu/dmmu/dmmu/TLBMiss +add wave -noupdate -group lsu -group dtlb /testbench/dut/core/lsu/dmmu/dmmu/TLBHit +add wave -noupdate -group lsu -group dtlb /testbench/dut/core/lsu/dmmu/dmmu/PhysicalAddress +add wave -noupdate -group lsu -group dtlb -expand -group faults /testbench/dut/core/lsu/dmmu/dmmu/TLBPageFault +add wave -noupdate -group lsu -group dtlb -expand -group faults /testbench/dut/core/lsu/dmmu/dmmu/LoadAccessFaultM +add wave -noupdate -group lsu -group dtlb -expand -group faults /testbench/dut/core/lsu/dmmu/dmmu/StoreAmoAccessFaultM +add wave -noupdate -group lsu -group dtlb /testbench/dut/core/lsu/dmmu/dmmu/tlb/tlb/TLBPAdr +add wave -noupdate -group lsu -group dtlb -expand -group write /testbench/dut/core/lsu/dmmu/dmmu/tlb/tlb/PTE +add wave -noupdate -group lsu -group dtlb -expand -group write /testbench/dut/core/lsu/dmmu/dmmu/tlb/tlb/PageTypeWriteVal +add wave -noupdate -group lsu -group dtlb -expand -group write /testbench/dut/core/lsu/dmmu/dmmu/tlb/tlb/TLBWrite +add wave -noupdate -group lsu -group pma /testbench/dut/core/lsu/dmmu/dmmu/pmachecker/PhysicalAddress +add wave -noupdate -group lsu -group pma /testbench/dut/core/lsu/dmmu/dmmu/pmachecker/SelRegions +add wave -noupdate -group lsu -group pma /testbench/dut/core/lsu/dmmu/dmmu/Cacheable +add wave -noupdate -group lsu -group pma /testbench/dut/core/lsu/dmmu/dmmu/Idempotent +add wave -noupdate -group lsu -group pma /testbench/dut/core/lsu/dmmu/dmmu/pmachecker/PMAAccessFault +add wave -noupdate -group lsu -group pma /testbench/dut/core/lsu/dmmu/dmmu/PMAInstrAccessFaultF +add wave -noupdate -group lsu -group pma /testbench/dut/core/lsu/dmmu/dmmu/PMALoadAccessFaultM +add wave -noupdate -group lsu -group pma /testbench/dut/core/lsu/dmmu/dmmu/PMAStoreAmoAccessFaultM +add wave -noupdate -group lsu -group pmp /testbench/dut/core/lsu/dmmu/dmmu/PMPInstrAccessFaultF +add wave -noupdate -group lsu -group pmp /testbench/dut/core/lsu/dmmu/dmmu/PMPLoadAccessFaultM +add wave -noupdate -group lsu -group pmp /testbench/dut/core/lsu/dmmu/dmmu/PMPStoreAmoAccessFaultM +add wave -noupdate -group lsu -group ptwalker /testbench/dut/core/lsu/hptw/hptw/SelHPTW +add wave -noupdate -group lsu -group ptwalker /testbench/dut/core/lsu/hptw/hptw/HPTWStall +add wave -noupdate -group lsu -group ptwalker /testbench/dut/core/lsu/hptw/hptw/DTLBWalk +add wave -noupdate -group lsu -group ptwalker -color Gold /testbench/dut/core/lsu/hptw/hptw/WalkerState +add wave -noupdate -group lsu -group ptwalker /testbench/dut/core/lsu/hptw/hptw/HPTWAdr +add wave -noupdate -group lsu -group ptwalker /testbench/dut/core/lsu/hptw/hptw/PTE +add wave -noupdate -group lsu -group ptwalker /testbench/dut/core/lsu/hptw/hptw/NextPageType +add wave -noupdate -group lsu -group ptwalker /testbench/dut/core/lsu/hptw/hptw/PageType +add wave -noupdate -group lsu -group ptwalker /testbench/dut/core/lsu/hptw/hptw/ValidNonLeafPTE +add wave -noupdate -group lsu -group ptwalker -expand -group types /testbench/dut/core/lsu/ITLBMissF +add wave -noupdate -group lsu -group ptwalker -expand -group types /testbench/dut/core/lsu/DTLBMissM +add wave -noupdate -group lsu -group ptwalker -expand -group types /testbench/dut/core/lsu/hptw/hptw/ITLBWriteF +add wave -noupdate -group lsu -group ptwalker -expand -group types /testbench/dut/core/lsu/hptw/hptw/DTLBWriteM +add wave -noupdate -group lsu -group ptwalker -expand -group faults /testbench/dut/core/lsu/hptw/hptw/LSUAccessFaultM +add wave -noupdate -group lsu -group ptwalker -expand -group faults /testbench/dut/core/lsu/hptw/hptw/DCacheStallM +add wave -noupdate -group lsu -group ptwalker -expand -group faults /testbench/dut/core/lsu/hptw/hptw/HPTWInstrAccessFaultF +add wave -noupdate -group lsu -group ptwalker -expand -group faults /testbench/dut/core/lsu/hptw/hptw/LSULoadAccessFaultM +add wave -noupdate -group lsu -group ptwalker -expand -group faults /testbench/dut/core/lsu/hptw/hptw/LSUStoreAmoAccessFaultM +add wave -noupdate -group lsu -group ptwalker -expand -group faults /testbench/dut/core/lsu/hptw/hptw/LoadAccessFaultM +add wave -noupdate -group lsu -group ptwalker -expand -group faults /testbench/dut/core/lsu/hptw/hptw/StoreAmoAccessFaultM +add wave -noupdate -group lsu -group ptwalker -expand -group faults /testbench/dut/core/lsu/hptw/hptw/HPTWInstrAccessFault add wave -noupdate -group plic /testbench/dut/uncore/uncore/plic/plic/UARTIntr add wave -noupdate -group plic /testbench/dut/uncore/uncore/plic/plic/GPIOIntr add wave -noupdate -group plic /testbench/dut/uncore/uncore/plic/plic/MExtInt @@ -454,106 +464,111 @@ add wave -noupdate -group uart -expand -group {Off-Chip Interface} /testbench/du add wave -noupdate -group {debug trace} -expand -group mem -color Yellow /testbench/dut/core/FlushW add wave -noupdate -group {debug trace} -expand -group mem /testbench/dut/core/PCM add wave -noupdate -group {debug trace} -expand -group mem -color Brown /testbench/dut/core/hzu/TrapM -add wave -noupdate -group ifu /testbench/dut/core/ifu/InstrRawF -add wave -noupdate -group ifu /testbench/dut/core/ifu/PostSpillInstrRawF -add wave -noupdate -group ifu /testbench/dut/core/ifu/IFUStallF -add wave -noupdate -group ifu -group Spill /testbench/dut/core/ifu/Spill/spill/CurrState -add wave -noupdate -group ifu -group Spill -expand -group takespill /testbench/dut/core/ifu/Spill/spill/SpillF -add wave -noupdate -group ifu -group Spill -expand -group takespill /testbench/dut/core/ifu/Spill/spill/IFUCacheBusStallF -add wave -noupdate -group ifu -group Spill -expand -group takespill /testbench/dut/core/ifu/Spill/spill/ITLBMissF -add wave -noupdate -group ifu -group Spill -expand -group takespill /testbench/dut/core/ifu/Spill/spill/TakeSpillF -add wave -noupdate -group ifu -group bus /testbench/dut/core/ifu/bus/icache/ahbcacheinterface/HSIZE -add wave -noupdate -group ifu -group bus /testbench/dut/core/ifu/bus/icache/ahbcacheinterface/HBURST -add wave -noupdate -group ifu -group bus /testbench/dut/core/ifu/bus/icache/ahbcacheinterface/HTRANS -add wave -noupdate -group ifu -group bus /testbench/dut/core/ifu/bus/icache/ahbcacheinterface/HWRITE -add wave -noupdate -group ifu -group bus /testbench/dut/core/ifu/bus/icache/ahbcacheinterface/HADDR -add wave -noupdate -group ifu -group bus /testbench/dut/core/ifu/bus/icache/ahbcacheinterface/AHBBuscachefsm/Flush -add wave -noupdate -group ifu -group bus -color Gold /testbench/dut/core/ifu/bus/icache/ahbcacheinterface/AHBBuscachefsm/CurrState -add wave -noupdate -group ifu -group bus /testbench/dut/core/ifu/bus/icache/ahbcacheinterface/HRDATA -add wave -noupdate -group ifu -expand -group icache /testbench/dut/core/ifu/bus/icache/icache/Stall -add wave -noupdate -group ifu -expand -group icache /testbench/dut/core/ifu/bus/icache/icache/FlushStage -add wave -noupdate -group ifu -expand -group icache -color Gold /testbench/dut/core/ifu/bus/icache/icache/cachefsm/CurrState -add wave -noupdate -group ifu -expand -group icache /testbench/dut/core/ifu/ITLBMissF -add wave -noupdate -group ifu -expand -group icache /testbench/dut/core/ifu/bus/icache/icache/SelAdr -add wave -noupdate -group ifu -expand -group icache /testbench/dut/core/ifu/PCNextF -add wave -noupdate -group ifu -expand -group icache /testbench/dut/core/ifu/PCPF -add wave -noupdate -group ifu -expand -group icache /testbench/dut/core/ifu/bus/icache/icache/cachefsm/AnyMiss -add wave -noupdate -group ifu -expand -group icache /testbench/dut/core/ifu/bus/icache/icache/CacheRW -add wave -noupdate -group ifu -expand -group icache /testbench/dut/core/ifu/bus/icache/icache/Stall -add wave -noupdate -group ifu -expand -group icache /testbench/dut/core/ifu/bus/icache/icache/CacheAccess -add wave -noupdate -group ifu -expand -group icache -expand -group {fsm out and control} /testbench/dut/core/ifu/bus/icache/icache/HitWay -add wave -noupdate -group ifu -expand -group icache -expand -group {fsm out and control} /testbench/dut/core/ifu/ICacheStallF -add wave -noupdate -group ifu -expand -group icache -expand -group memory /testbench/dut/core/ifu/bus/icache/icache/CacheBusAdr -add wave -noupdate -group ifu -expand -group icache -expand -group memory /testbench/dut/core/ifu/bus/icache/icache/cachefsm/CacheBusAck -add wave -noupdate -group ifu -expand -group icache /testbench/dut/core/ifu/bus/icache/icache/VictimWay -add wave -noupdate -group ifu -expand -group icache -color Gold -radix unsigned /testbench/dut/core/ifu/bus/icache/icache/CacheSet -add wave -noupdate -group ifu -expand -group icache -expand -group way3 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[3]/SelectedWriteWordEn} -add wave -noupdate -group ifu -expand -group icache -expand -group way3 -label tag {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[3]/CacheTagMem/RAM} -add wave -noupdate -group ifu -expand -group icache -expand -group way3 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[3]/ValidBits} -add wave -noupdate -group ifu -expand -group icache -expand -group way3 -group way3word0 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[3]/word[0]/wordram/CacheDataMem/dout} -add wave -noupdate -group ifu -expand -group icache -expand -group way3 -group way3word0 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[3]/word[0]/wordram/CacheDataMem/RAM} -add wave -noupdate -group ifu -expand -group icache -expand -group way3 -group way3word1 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[3]/word[1]/wordram/CacheDataMem/dout} -add wave -noupdate -group ifu -expand -group icache -expand -group way3 -group way3word1 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[3]/word[1]/wordram/CacheDataMem/RAM} -add wave -noupdate -group ifu -expand -group icache -expand -group way3 -group way3word2 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[3]/word[2]/wordram/CacheDataMem/dout} -add wave -noupdate -group ifu -expand -group icache -expand -group way3 -group way3word2 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[3]/word[2]/wordram/CacheDataMem/RAM} -add wave -noupdate -group ifu -expand -group icache -expand -group way3 -group way3word3 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[3]/word[3]/wordram/CacheDataMem/dout} -add wave -noupdate -group ifu -expand -group icache -expand -group way3 -group way3word3 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[3]/word[3]/wordram/CacheDataMem/RAM} -add wave -noupdate -group ifu -expand -group icache -expand -group way2 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[2]/SelectedWriteWordEn} -add wave -noupdate -group ifu -expand -group icache -expand -group way2 -label tag {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[2]/CacheTagMem/RAM} -add wave -noupdate -group ifu -expand -group icache -expand -group way2 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[2]/ValidBits} -add wave -noupdate -group ifu -expand -group icache -expand -group way2 -expand -group way2word0 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[2]/word[0]/wordram/CacheDataMem/dout} -add wave -noupdate -group ifu -expand -group icache -expand -group way2 -expand -group way2word0 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[2]/word[0]/wordram/CacheDataMem/RAM} -add wave -noupdate -group ifu -expand -group icache -expand -group way2 -group way2word1 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[2]/word[1]/wordram/CacheDataMem/dout} -add wave -noupdate -group ifu -expand -group icache -expand -group way2 -group way2word1 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[2]/word[1]/wordram/CacheDataMem/RAM} -add wave -noupdate -group ifu -expand -group icache -expand -group way2 -group way2word2 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[2]/word[2]/wordram/CacheDataMem/dout} -add wave -noupdate -group ifu -expand -group icache -expand -group way2 -group way2word2 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[2]/word[2]/wordram/CacheDataMem/RAM} -add wave -noupdate -group ifu -expand -group icache -expand -group way2 -group way2word3 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[2]/word[3]/wordram/CacheDataMem/dout} -add wave -noupdate -group ifu -expand -group icache -expand -group way2 -group way2word3 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[2]/word[3]/wordram/CacheDataMem/RAM} -add wave -noupdate -group ifu -expand -group icache -expand -group way1 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[1]/HitWay} -add wave -noupdate -group ifu -expand -group icache -expand -group way1 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[1]/SelectedWriteWordEn} -add wave -noupdate -group ifu -expand -group icache -expand -group way1 -label tag {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[1]/CacheTagMem/RAM} -add wave -noupdate -group ifu -expand -group icache -expand -group way1 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[1]/ValidBits} -add wave -noupdate -group ifu -expand -group icache -expand -group way1 -group way1word0 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[1]/word[0]/wordram/CacheDataMem/dout} -add wave -noupdate -group ifu -expand -group icache -expand -group way1 -group way1word0 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[1]/word[0]/wordram/CacheDataMem/RAM} -add wave -noupdate -group ifu -expand -group icache -expand -group way1 -group way1word1 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[1]/word[1]/wordram/CacheDataMem/dout} -add wave -noupdate -group ifu -expand -group icache -expand -group way1 -group way1word1 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[1]/word[1]/wordram/CacheDataMem/RAM} -add wave -noupdate -group ifu -expand -group icache -expand -group way1 -group way1word2 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[1]/word[2]/wordram/CacheDataMem/dout} -add wave -noupdate -group ifu -expand -group icache -expand -group way1 -group way1word2 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[1]/word[2]/wordram/CacheDataMem/RAM} -add wave -noupdate -group ifu -expand -group icache -expand -group way1 -group way1word3 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[1]/word[3]/wordram/CacheDataMem/dout} -add wave -noupdate -group ifu -expand -group icache -expand -group way1 -group way1word3 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[1]/word[3]/wordram/CacheDataMem/RAM} -add wave -noupdate -group ifu -expand -group icache -expand -group way0 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[0]/SelectedWriteWordEn} -add wave -noupdate -group ifu -expand -group icache -expand -group way0 -label tag {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[0]/CacheTagMem/RAM} -add wave -noupdate -group ifu -expand -group icache -expand -group way0 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[0]/ValidBits} -add wave -noupdate -group ifu -expand -group icache -expand -group way0 -group way0word0 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[0]/word[0]/wordram/CacheDataMem/dout} -add wave -noupdate -group ifu -expand -group icache -expand -group way0 -group way0word0 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[0]/word[0]/wordram/CacheDataMem/RAM} -add wave -noupdate -group ifu -expand -group icache -expand -group way0 -group way0word1 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[0]/word[1]/wordram/CacheDataMem/dout} -add wave -noupdate -group ifu -expand -group icache -expand -group way0 -group way0word1 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[0]/word[1]/wordram/CacheDataMem/RAM} -add wave -noupdate -group ifu -expand -group icache -expand -group way0 -group way0word2 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[0]/word[2]/wordram/CacheDataMem/dout} -add wave -noupdate -group ifu -expand -group icache -expand -group way0 -group way0word2 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[0]/word[2]/wordram/CacheDataMem/RAM} -add wave -noupdate -group ifu -expand -group icache -expand -group way0 -group way0word3 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[0]/word[3]/wordram/CacheDataMem/dout} -add wave -noupdate -group ifu -expand -group icache -expand -group way0 -group way0word3 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[0]/word[3]/wordram/CacheDataMem/RAM} -add wave -noupdate -group ifu -group itlb /testbench/dut/core/ifu/immu/immu/TLBWrite -add wave -noupdate -group ifu -group itlb /testbench/dut/core/ifu/ITLBMissF -add wave -noupdate -group ifu -group itlb /testbench/dut/core/ifu/immu/immu/VAdr -add wave -noupdate -group ifu -group itlb /testbench/dut/core/ifu/immu/immu/PhysicalAddress -add wave -noupdate -group ifu -group itlb /testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/Matches -add wave -noupdate -group ifu -group itlb /testbench/dut/core/ifu/immu/immu/InstrPageFaultF -add wave -noupdate -group ifu -group itlb /testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/TLBFlush -add wave -noupdate -group ifu -group itlb -expand -group key21 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[21]/Valid} -add wave -noupdate -group ifu -group itlb -expand -group key21 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[21]/PageType} -add wave -noupdate -group ifu -group itlb -expand -group key21 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[21]/Key} -add wave -noupdate -group ifu -group itlb -expand -group key21 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[21]/Key0} -add wave -noupdate -group ifu -group itlb -expand -group key21 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[21]/Key1} -add wave -noupdate -group ifu -group itlb -expand -group key21 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[21]/Query0} -add wave -noupdate -group ifu -group itlb -expand -group key21 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[21]/Query1} -add wave -noupdate -group ifu -group itlb -expand -group key19 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[19]/Valid} -add wave -noupdate -group ifu -group itlb -expand -group key19 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[19]/PageTypeWriteVal} -add wave -noupdate -group ifu -group itlb -expand -group key19 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[19]/PageType} -add wave -noupdate -group ifu -group itlb -expand -group key19 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[19]/Key} -add wave -noupdate -group ifu -group itlb -expand -group key19 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[19]/Key0} -add wave -noupdate -group ifu -group itlb -expand -group key19 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[19]/Key1} -add wave -noupdate -group ifu -group itlb -expand -group key19 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[19]/Query0} -add wave -noupdate -group ifu -group itlb -expand -group key19 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[19]/Query1} +add wave -noupdate -expand -group ifu /testbench/dut/core/ifu/InstrRawF +add wave -noupdate -expand -group ifu /testbench/dut/core/ifu/PostSpillInstrRawF +add wave -noupdate -expand -group ifu /testbench/dut/core/ifu/IFUStallF +add wave -noupdate -expand -group ifu -group Spill /testbench/dut/core/ifu/Spill/spill/CurrState +add wave -noupdate -expand -group ifu -group Spill -expand -group takespill /testbench/dut/core/ifu/Spill/spill/SpillF +add wave -noupdate -expand -group ifu -group Spill -expand -group takespill /testbench/dut/core/ifu/Spill/spill/IFUCacheBusStallF +add wave -noupdate -expand -group ifu -group Spill -expand -group takespill /testbench/dut/core/ifu/Spill/spill/ITLBMissF +add wave -noupdate -expand -group ifu -group Spill -expand -group takespill /testbench/dut/core/ifu/Spill/spill/TakeSpillF +add wave -noupdate -expand -group ifu -group bus /testbench/dut/core/ifu/bus/icache/ahbcacheinterface/HSIZE +add wave -noupdate -expand -group ifu -group bus /testbench/dut/core/ifu/bus/icache/ahbcacheinterface/HBURST +add wave -noupdate -expand -group ifu -group bus /testbench/dut/core/ifu/bus/icache/ahbcacheinterface/HTRANS +add wave -noupdate -expand -group ifu -group bus /testbench/dut/core/ifu/bus/icache/ahbcacheinterface/HWRITE +add wave -noupdate -expand -group ifu -group bus /testbench/dut/core/ifu/bus/icache/ahbcacheinterface/HADDR +add wave -noupdate -expand -group ifu -group bus /testbench/dut/core/ifu/bus/icache/ahbcacheinterface/AHBBuscachefsm/Flush +add wave -noupdate -expand -group ifu -group bus -color Gold /testbench/dut/core/ifu/bus/icache/ahbcacheinterface/AHBBuscachefsm/CurrState +add wave -noupdate -expand -group ifu -group bus /testbench/dut/core/ifu/bus/icache/ahbcacheinterface/HRDATA +add wave -noupdate -expand -group ifu -expand -group icache /testbench/dut/core/ifu/bus/icache/icache/Stall +add wave -noupdate -expand -group ifu -expand -group icache /testbench/dut/core/ifu/bus/icache/icache/FlushStage +add wave -noupdate -expand -group ifu -expand -group icache -color Gold /testbench/dut/core/ifu/bus/icache/icache/cachefsm/CurrState +add wave -noupdate -expand -group ifu -expand -group icache /testbench/dut/core/ifu/ITLBMissF +add wave -noupdate -expand -group ifu -expand -group icache /testbench/dut/core/ifu/bus/icache/icache/SelAdr +add wave -noupdate -expand -group ifu -expand -group icache /testbench/dut/core/ifu/PCNextF +add wave -noupdate -expand -group ifu -expand -group icache /testbench/dut/core/ifu/PCPF +add wave -noupdate -expand -group ifu -expand -group icache /testbench/dut/core/ifu/bus/icache/icache/cachefsm/AnyMiss +add wave -noupdate -expand -group ifu -expand -group icache /testbench/dut/core/ifu/bus/icache/icache/CacheRW +add wave -noupdate -expand -group ifu -expand -group icache /testbench/dut/core/ifu/bus/icache/icache/Stall +add wave -noupdate -expand -group ifu -expand -group icache /testbench/dut/core/ifu/bus/icache/icache/CacheAccess +add wave -noupdate -expand -group ifu -expand -group icache -expand -group {fsm out and control} /testbench/dut/core/ifu/bus/icache/icache/HitWay +add wave -noupdate -expand -group ifu -expand -group icache -expand -group {fsm out and control} /testbench/dut/core/ifu/ICacheStallF +add wave -noupdate -expand -group ifu -expand -group icache -expand -group memory /testbench/dut/core/ifu/bus/icache/icache/CacheBusAdr +add wave -noupdate -expand -group ifu -expand -group icache -expand -group memory /testbench/dut/core/ifu/bus/icache/icache/cachefsm/CacheBusAck +add wave -noupdate -expand -group ifu -expand -group icache /testbench/dut/core/ifu/bus/icache/icache/VictimWay +add wave -noupdate -expand -group ifu -expand -group icache -color Gold -radix unsigned /testbench/dut/core/ifu/bus/icache/icache/CacheSet +add wave -noupdate -expand -group ifu -expand -group icache -expand -group lru /testbench/dut/core/ifu/bus/icache/icache/vict/cacheLRU/FlushStage +add wave -noupdate -expand -group ifu -expand -group icache -expand -group lru /testbench/dut/core/ifu/bus/icache/icache/vict/cacheLRU/LRUWriteEn +add wave -noupdate -expand -group ifu -expand -group icache -expand -group lru /testbench/dut/core/ifu/bus/icache/icache/vict/cacheLRU/LRUUpdate +add wave -noupdate -expand -group ifu -expand -group icache -expand -group lru {/testbench/dut/core/ifu/bus/icache/icache/vict/cacheLRU/LRUMemory[50]} +add wave -noupdate -expand -group ifu -expand -group icache -expand -group lru /testbench/dut/core/ifu/bus/icache/icache/vict/cacheLRU/LRUMemory +add wave -noupdate -expand -group ifu -expand -group icache -group way3 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[3]/SelectedWriteWordEn} +add wave -noupdate -expand -group ifu -expand -group icache -group way3 -label tag {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[3]/CacheTagMem/RAM} +add wave -noupdate -expand -group ifu -expand -group icache -group way3 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[3]/ValidBits} +add wave -noupdate -expand -group ifu -expand -group icache -group way3 -group way3word0 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[3]/word[0]/wordram/CacheDataMem/dout} +add wave -noupdate -expand -group ifu -expand -group icache -group way3 -group way3word0 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[3]/word[0]/wordram/CacheDataMem/RAM} +add wave -noupdate -expand -group ifu -expand -group icache -group way3 -group way3word1 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[3]/word[1]/wordram/CacheDataMem/dout} +add wave -noupdate -expand -group ifu -expand -group icache -group way3 -group way3word1 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[3]/word[1]/wordram/CacheDataMem/RAM} +add wave -noupdate -expand -group ifu -expand -group icache -group way3 -group way3word2 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[3]/word[2]/wordram/CacheDataMem/dout} +add wave -noupdate -expand -group ifu -expand -group icache -group way3 -group way3word2 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[3]/word[2]/wordram/CacheDataMem/RAM} +add wave -noupdate -expand -group ifu -expand -group icache -group way3 -group way3word3 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[3]/word[3]/wordram/CacheDataMem/dout} +add wave -noupdate -expand -group ifu -expand -group icache -group way3 -group way3word3 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[3]/word[3]/wordram/CacheDataMem/RAM} +add wave -noupdate -expand -group ifu -expand -group icache -group way2 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[2]/SelectedWriteWordEn} +add wave -noupdate -expand -group ifu -expand -group icache -group way2 -label tag {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[2]/CacheTagMem/RAM} +add wave -noupdate -expand -group ifu -expand -group icache -group way2 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[2]/ValidBits} +add wave -noupdate -expand -group ifu -expand -group icache -group way2 -expand -group way2word0 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[2]/word[0]/wordram/CacheDataMem/dout} +add wave -noupdate -expand -group ifu -expand -group icache -group way2 -expand -group way2word0 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[2]/word[0]/wordram/CacheDataMem/RAM} +add wave -noupdate -expand -group ifu -expand -group icache -group way2 -group way2word1 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[2]/word[1]/wordram/CacheDataMem/dout} +add wave -noupdate -expand -group ifu -expand -group icache -group way2 -group way2word1 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[2]/word[1]/wordram/CacheDataMem/RAM} +add wave -noupdate -expand -group ifu -expand -group icache -group way2 -group way2word2 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[2]/word[2]/wordram/CacheDataMem/dout} +add wave -noupdate -expand -group ifu -expand -group icache -group way2 -group way2word2 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[2]/word[2]/wordram/CacheDataMem/RAM} +add wave -noupdate -expand -group ifu -expand -group icache -group way2 -group way2word3 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[2]/word[3]/wordram/CacheDataMem/dout} +add wave -noupdate -expand -group ifu -expand -group icache -group way2 -group way2word3 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[2]/word[3]/wordram/CacheDataMem/RAM} +add wave -noupdate -expand -group ifu -expand -group icache -group way1 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[1]/HitWay} +add wave -noupdate -expand -group ifu -expand -group icache -group way1 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[1]/SelectedWriteWordEn} +add wave -noupdate -expand -group ifu -expand -group icache -group way1 -label tag {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[1]/CacheTagMem/RAM} +add wave -noupdate -expand -group ifu -expand -group icache -group way1 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[1]/ValidBits} +add wave -noupdate -expand -group ifu -expand -group icache -group way1 -group way1word0 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[1]/word[0]/wordram/CacheDataMem/dout} +add wave -noupdate -expand -group ifu -expand -group icache -group way1 -group way1word0 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[1]/word[0]/wordram/CacheDataMem/RAM} +add wave -noupdate -expand -group ifu -expand -group icache -group way1 -group way1word1 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[1]/word[1]/wordram/CacheDataMem/dout} +add wave -noupdate -expand -group ifu -expand -group icache -group way1 -group way1word1 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[1]/word[1]/wordram/CacheDataMem/RAM} +add wave -noupdate -expand -group ifu -expand -group icache -group way1 -group way1word2 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[1]/word[2]/wordram/CacheDataMem/dout} +add wave -noupdate -expand -group ifu -expand -group icache -group way1 -group way1word2 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[1]/word[2]/wordram/CacheDataMem/RAM} +add wave -noupdate -expand -group ifu -expand -group icache -group way1 -group way1word3 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[1]/word[3]/wordram/CacheDataMem/dout} +add wave -noupdate -expand -group ifu -expand -group icache -group way1 -group way1word3 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[1]/word[3]/wordram/CacheDataMem/RAM} +add wave -noupdate -expand -group ifu -expand -group icache -group way0 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[0]/SelectedWriteWordEn} +add wave -noupdate -expand -group ifu -expand -group icache -group way0 -label tag {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[0]/CacheTagMem/RAM} +add wave -noupdate -expand -group ifu -expand -group icache -group way0 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[0]/ValidBits} +add wave -noupdate -expand -group ifu -expand -group icache -group way0 -group way0word0 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[0]/word[0]/wordram/CacheDataMem/dout} +add wave -noupdate -expand -group ifu -expand -group icache -group way0 -group way0word0 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[0]/word[0]/wordram/CacheDataMem/RAM} +add wave -noupdate -expand -group ifu -expand -group icache -group way0 -group way0word1 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[0]/word[1]/wordram/CacheDataMem/dout} +add wave -noupdate -expand -group ifu -expand -group icache -group way0 -group way0word1 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[0]/word[1]/wordram/CacheDataMem/RAM} +add wave -noupdate -expand -group ifu -expand -group icache -group way0 -group way0word2 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[0]/word[2]/wordram/CacheDataMem/dout} +add wave -noupdate -expand -group ifu -expand -group icache -group way0 -group way0word2 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[0]/word[2]/wordram/CacheDataMem/RAM} +add wave -noupdate -expand -group ifu -expand -group icache -group way0 -group way0word3 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[0]/word[3]/wordram/CacheDataMem/dout} +add wave -noupdate -expand -group ifu -expand -group icache -group way0 -group way0word3 {/testbench/dut/core/ifu/bus/icache/icache/CacheWays[0]/word[3]/wordram/CacheDataMem/RAM} +add wave -noupdate -expand -group ifu -group itlb /testbench/dut/core/ifu/immu/immu/TLBWrite +add wave -noupdate -expand -group ifu -group itlb /testbench/dut/core/ifu/ITLBMissF +add wave -noupdate -expand -group ifu -group itlb /testbench/dut/core/ifu/immu/immu/VAdr +add wave -noupdate -expand -group ifu -group itlb /testbench/dut/core/ifu/immu/immu/PhysicalAddress +add wave -noupdate -expand -group ifu -group itlb /testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/Matches +add wave -noupdate -expand -group ifu -group itlb /testbench/dut/core/ifu/immu/immu/InstrPageFaultF +add wave -noupdate -expand -group ifu -group itlb /testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/TLBFlush +add wave -noupdate -expand -group ifu -group itlb -expand -group key21 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[21]/Valid} +add wave -noupdate -expand -group ifu -group itlb -expand -group key21 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[21]/PageType} +add wave -noupdate -expand -group ifu -group itlb -expand -group key21 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[21]/Key} +add wave -noupdate -expand -group ifu -group itlb -expand -group key21 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[21]/Key0} +add wave -noupdate -expand -group ifu -group itlb -expand -group key21 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[21]/Key1} +add wave -noupdate -expand -group ifu -group itlb -expand -group key21 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[21]/Query0} +add wave -noupdate -expand -group ifu -group itlb -expand -group key21 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[21]/Query1} +add wave -noupdate -expand -group ifu -group itlb -expand -group key19 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[19]/Valid} +add wave -noupdate -expand -group ifu -group itlb -expand -group key19 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[19]/PageTypeWriteVal} +add wave -noupdate -expand -group ifu -group itlb -expand -group key19 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[19]/PageType} +add wave -noupdate -expand -group ifu -group itlb -expand -group key19 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[19]/Key} +add wave -noupdate -expand -group ifu -group itlb -expand -group key19 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[19]/Key0} +add wave -noupdate -expand -group ifu -group itlb -expand -group key19 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[19]/Key1} +add wave -noupdate -expand -group ifu -group itlb -expand -group key19 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[19]/Query0} +add wave -noupdate -expand -group ifu -group itlb -expand -group key19 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[19]/Query1} add wave -noupdate -group {Performance Counters} -label MCYCLE -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[0]} add wave -noupdate -group {Performance Counters} -label MINSTRET -radix hexadecimal {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[2]} add wave -noupdate -group {Performance Counters} -group BP -label Branch -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[3]} @@ -646,7 +661,7 @@ add wave -noupdate /testbench/dut/core/ifu/bus/icache/icache/FlushStage add wave -noupdate /testbench/dut/core/ifu/bus/icache/icache/CacheEn add wave -noupdate /testbench/dut/core/ifu/CacheableF TreeUpdate [SetDefaultTree] -WaveRestoreCursors {{Cursor 4} {172636 ns} 1} {{Cursor 4} {152124 ns} 0} {{Cursor 3} {152766 ns} 1} +WaveRestoreCursors {{Cursor 4} {172636 ns} 1} {{Cursor 4} {740727 ns} 0} {{Cursor 3} {152766 ns} 1} quietly wave cursor active 2 configure wave -namecolwidth 250 configure wave -valuecolwidth 194 @@ -662,4 +677,4 @@ configure wave -griddelta 40 configure wave -timeline 0 configure wave -timelineunits ns update -WaveRestoreZoom {152015 ns} {152227 ns} +WaveRestoreZoom {740593 ns} {740859 ns} From 11a3fd9314fefb098da2fa693a989731fcc5d8cc Mon Sep 17 00:00:00 2001 From: Ross Thompson Date: Tue, 5 Sep 2023 14:07:58 -0500 Subject: [PATCH 08/32] Slight modification to cachefsm. --- src/cache/cachefsm.sv | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cache/cachefsm.sv b/src/cache/cachefsm.sv index 099077cf4..cd35697fd 100644 --- a/src/cache/cachefsm.sv +++ b/src/cache/cachefsm.sv @@ -171,9 +171,9 @@ module cachefsm import cvw::*; #(parameter cvw_t P, assign ClearValid = P.ZICBOM_SUPPORTED & ((CurrState == STATE_READY & CMOp[0] & CacheHit) | (CurrState == STATE_CMO_WRITEBACK & CMOp[2] & CacheBusAck)); // coverage off -item e 1 -fecexprrow 8 - assign LRUWriteEn = ((CurrState == STATE_READY & (AnyHit | CMOZeroNoEviction)) | - (P.ZICBOZ_SUPPORTED & CurrState == STATE_WRITEBACK & CMOp[3] & CacheBusAck) | - (CurrState == STATE_WRITE_LINE)) & ~FlushStage; + assign LRUWriteEn = (((CurrState == STATE_READY & (AnyHit | CMOZeroNoEviction)) | + (CurrState == STATE_WRITE_LINE)) & ~FlushStage) | + (P.ZICBOZ_SUPPORTED & CurrState == STATE_WRITEBACK & CMOp[3] & CacheBusAck); // exclusion-tag-start: icache flushdirtycontrols assign SetDirty = (CurrState == STATE_READY & (AnyUpdateHit | CMOZeroNoEviction)) | // exclusion-tag: icache SetDirty (CurrState == STATE_WRITE_LINE & (CacheRW[0])) | From 95c653e7df0f72493442bcb832b15db289a63419 Mon Sep 17 00:00:00 2001 From: Ross Thompson Date: Fri, 15 Sep 2023 14:05:26 -0500 Subject: [PATCH 09/32] Fixes the bpred-sim.py to support command line parameterization of the branch predictor while using the new parameterization. This is definitely a hack, but I don't see a better way. --- config/rv32gc/config.vh | 8 +- sim/bpred-sim.py | 48 +-- sim/wave.do | 712 ++++++++++++++++++++-------------------- 3 files changed, 391 insertions(+), 377 deletions(-) diff --git a/config/rv32gc/config.vh b/config/rv32gc/config.vh index 07f005f43..46d3ed22a 100644 --- a/config/rv32gc/config.vh +++ b/config/rv32gc/config.vh @@ -141,8 +141,14 @@ localparam PLIC_UART_ID = 32'd10; localparam PLIC_SDC_ID = 32'd9; localparam BPRED_SUPPORTED = 1; +// this is an annoying hack for the branch predictor parameterization override. +`ifdef BPRED_OVERRIDE +localparam BPRED_TYPE = `BPRED_TYPE; +localparam BPRED_SIZE = `BPRED_SIZE; +`else localparam BPRED_TYPE = `BP_GSHARE; // BP_GSHARE_BASIC, BP_GLOBAL, BP_GLOBAL_BASIC, BP_TWOBIT -localparam BPRED_SIZE = 32'd16; +localparam BPRED_SIZE = 32'd10; +`endif localparam BPRED_NUM_LHR = 32'd6; localparam BTB_SIZE = 32'd10; diff --git a/sim/bpred-sim.py b/sim/bpred-sim.py index 4f1757cb8..4ec9324a3 100755 --- a/sim/bpred-sim.py +++ b/sim/bpred-sim.py @@ -46,33 +46,33 @@ configs = [ ) ] -# bpdSize = [6, 8, 10, 12, 14, 16] -# bpdType = ['twobit', 'gshare', 'global', 'gshare_basic', 'global_basic', 'local_basic'] -# for CurrBPType in bpdType: -# for CurrBPSize in bpdSize: -# name = CurrBPType+str(CurrBPSize) -# configOptions = "+define+INSTR_CLASS_PRED=0 +define+BPRED_TYPE=\"BP_" + CurrBPType.upper() + "\" +define+BPRED_SIZE=" + str(CurrBPSize) -# tc = TestCase( -# name=name, -# variant="rv32gc", -# cmd="vsim > {} -c < {} -c < {} -c < {} -c < Date: Mon, 18 Sep 2023 16:59:20 -0500 Subject: [PATCH 10/32] Updated the branch predictor simulator's parseHPMC.py results. In a future commit I will update the branch predictor simulator with the fix for the gshare and then update the commit pointing their repo. --- bin/SeparateBranch.sh | 5 +- bin/parseHPMC.py | 15 +++-- sim/wave.do | 126 +++++++++++++++++++++--------------------- 3 files changed, 78 insertions(+), 68 deletions(-) diff --git a/bin/SeparateBranch.sh b/bin/SeparateBranch.sh index c5ebb5de0..eb4ee4494 100755 --- a/bin/SeparateBranch.sh +++ b/bin/SeparateBranch.sh @@ -6,7 +6,10 @@ ## Modified: ## ## Purpose: Converts a single branch.log containing multiple benchmark branch outcomes into -## separate files, one for each program.x4 +## separate files, one for each program. +## Input: branch log file generated by modelsim +## output: outputs to directory branch a collection of files with the branch outcomes +## separated by benchmark application. Example names are aha-mot64bd_sizeopt_speed_branch.log ## ## A component of the CORE-V-WALLY configurable RISC-V project. ## diff --git a/bin/parseHPMC.py b/bin/parseHPMC.py index 9e08f2c7a..8bf98ef5a 100755 --- a/bin/parseHPMC.py +++ b/bin/parseHPMC.py @@ -36,10 +36,15 @@ import re # [14.5859173702079, 12.3634674403619, 10.5806018170154, 8.38831266973592, 6.37097544620762, 3.52638362703015]) #} -RefData = [('twobitCModel6', 11.0501534891674), ('twobitCModel8', 8.51829052266352), ('twobitCModel10', 7.56775222626483), - ('twobitCModel12', 6.31366834586515), ('twobitCModel14', 5.72699936834177), ('twobitCModel16', 5.72699936834177), - ('gshareCModel6', 14.5731555979574), ('gshareCModel8', 12.3155658100497), ('gshareCModel10', 10.4589596630561), - ('gshareCModel12', 8.25796055444401), ('gshareCModel14', 6.23093702707613), ('gshareCModel16', 3.34001125650374)] +#RefData = [('twobitCModel6', 11.0501534891674), ('twobitCModel8', 8.51829052266352), ('twobitCModel10', 7.56775222626483), +# ('twobitCModel12', 6.31366834586515), ('twobitCModel14', 5.72699936834177), ('twobitCModel16', 5.72699936834177), +# ('gshareCModel6', 14.5731555979574), ('gshareCModel8', 12.3155658100497), ('gshareCModel10', 10.4589596630561), +# ('gshareCModel12', 8.25796055444401), ('gshareCModel14', 6.23093702707613), ('gshareCModel16', 3.34001125650374)] + +RefData = [('twobitCModel6', 9.65280765420711), ('twobitCModel8', 8.75120245829945), ('twobitCModel10', 8.1318382397263), + ('twobitCModel12', 7.53026646633342), ('twobitCModel14', 6.07679338544009), ('twobitCModel16', 6.07679338544009), + ('gshareCModel6', 10.6602835418646), ('gshareCModel8', 8.38384710559667), ('gshareCModel10', 6.36847432155534), + ('gshareCModel12', 3.91108491151983), ('gshareCModel14', 2.83926519215395), ('gshareCModel16', .60213659066941)] def ComputeCPI(benchmark): @@ -255,7 +260,7 @@ if(sys.argv[1] == '-b'): else: combined = benchmarkDict['All_'] # merge the reference data into rtl data - combined.extend(RefData) + # combined.extend(RefData) (name, value) = FormatToPlot(combined) lst = [] dct = {} diff --git a/sim/wave.do b/sim/wave.do index b55a44d4c..62ba0108f 100644 --- a/sim/wave.do +++ b/sim/wave.do @@ -11,38 +11,38 @@ add wave -noupdate /testbench/FunctionName/FunctionName/FunctionAddr add wave -noupdate /testbench/FunctionName/FunctionName/ProgramAddrIndex add wave -noupdate /testbench/FunctionName/FunctionName/FunctionName add wave -noupdate /testbench/FunctionName/FunctionName/ProgramAddrMapLineCount -add wave -noupdate -expand -group HDU -expand -group hazards /testbench/dut/core/hzu/RetM -add wave -noupdate -expand -group HDU -expand -group hazards -color Pink /testbench/dut/core/hzu/TrapM -add wave -noupdate -expand -group HDU -expand -group hazards /testbench/dut/core/hzu/LoadStallD -add wave -noupdate -expand -group HDU -expand -group hazards /testbench/dut/core/ifu/IFUStallF -add wave -noupdate -expand -group HDU -expand -group hazards /testbench/dut/core/hzu/BPWrongE -add wave -noupdate -expand -group HDU -expand -group hazards /testbench/dut/core/hzu/LSUStallM -add wave -noupdate -expand -group HDU -expand -group hazards /testbench/dut/core/MDUStallD -add wave -noupdate -expand -group HDU -expand -group hazards /testbench/dut/core/hzu/DivBusyE -add wave -noupdate -expand -group HDU -expand -group hazards /testbench/dut/core/hzu/FDivBusyE -add wave -noupdate -expand -group HDU -group traps /testbench/dut/core/priv/priv/trap/InstrMisalignedFaultM -add wave -noupdate -expand -group HDU -group traps /testbench/dut/core/priv/priv/trap/InstrAccessFaultM -add wave -noupdate -expand -group HDU -group traps /testbench/dut/core/priv/priv/trap/IllegalInstrFaultM -add wave -noupdate -expand -group HDU -group traps /testbench/dut/core/priv/priv/trap/BreakpointFaultM -add wave -noupdate -expand -group HDU -group traps /testbench/dut/core/priv/priv/trap/LoadMisalignedFaultM -add wave -noupdate -expand -group HDU -group traps /testbench/dut/core/priv/priv/trap/StoreAmoMisalignedFaultM -add wave -noupdate -expand -group HDU -group traps /testbench/dut/core/priv/priv/trap/LoadAccessFaultM -add wave -noupdate -expand -group HDU -group traps /testbench/dut/core/priv/priv/trap/StoreAmoAccessFaultM -add wave -noupdate -expand -group HDU -group traps /testbench/dut/core/priv/priv/trap/EcallFaultM -add wave -noupdate -expand -group HDU -group traps /testbench/dut/core/priv/priv/trap/InstrPageFaultM -add wave -noupdate -expand -group HDU -group traps /testbench/dut/core/priv/priv/trap/LoadPageFaultM -add wave -noupdate -expand -group HDU -group traps /testbench/dut/core/priv/priv/trap/StoreAmoPageFaultM -add wave -noupdate -expand -group HDU -group traps /testbench/dut/core/priv/priv/trap/InterruptM -add wave -noupdate -expand -group HDU -group traps /testbench/dut/core/priv/priv/trap/HPTWInstrAccessFaultM -add wave -noupdate -expand -group HDU -group Flush -color Yellow /testbench/dut/core/FlushD -add wave -noupdate -expand -group HDU -group Flush -color Yellow /testbench/dut/core/FlushE -add wave -noupdate -expand -group HDU -group Flush -color Yellow /testbench/dut/core/FlushM -add wave -noupdate -expand -group HDU -group Flush -color Yellow /testbench/dut/core/FlushW -add wave -noupdate -expand -group HDU -group Stall -color Orange /testbench/dut/core/StallF -add wave -noupdate -expand -group HDU -group Stall -color Orange /testbench/dut/core/StallD -add wave -noupdate -expand -group HDU -group Stall -color Orange /testbench/dut/core/StallE -add wave -noupdate -expand -group HDU -group Stall -color Orange /testbench/dut/core/StallM -add wave -noupdate -expand -group HDU -group Stall -color Orange /testbench/dut/core/StallW +add wave -noupdate -group HDU -expand -group hazards /testbench/dut/core/hzu/RetM +add wave -noupdate -group HDU -expand -group hazards -color Pink /testbench/dut/core/hzu/TrapM +add wave -noupdate -group HDU -expand -group hazards /testbench/dut/core/hzu/LoadStallD +add wave -noupdate -group HDU -expand -group hazards /testbench/dut/core/ifu/IFUStallF +add wave -noupdate -group HDU -expand -group hazards /testbench/dut/core/hzu/BPWrongE +add wave -noupdate -group HDU -expand -group hazards /testbench/dut/core/hzu/LSUStallM +add wave -noupdate -group HDU -expand -group hazards /testbench/dut/core/MDUStallD +add wave -noupdate -group HDU -expand -group hazards /testbench/dut/core/hzu/DivBusyE +add wave -noupdate -group HDU -expand -group hazards /testbench/dut/core/hzu/FDivBusyE +add wave -noupdate -group HDU -group traps /testbench/dut/core/priv/priv/trap/InstrMisalignedFaultM +add wave -noupdate -group HDU -group traps /testbench/dut/core/priv/priv/trap/InstrAccessFaultM +add wave -noupdate -group HDU -group traps /testbench/dut/core/priv/priv/trap/IllegalInstrFaultM +add wave -noupdate -group HDU -group traps /testbench/dut/core/priv/priv/trap/BreakpointFaultM +add wave -noupdate -group HDU -group traps /testbench/dut/core/priv/priv/trap/LoadMisalignedFaultM +add wave -noupdate -group HDU -group traps /testbench/dut/core/priv/priv/trap/StoreAmoMisalignedFaultM +add wave -noupdate -group HDU -group traps /testbench/dut/core/priv/priv/trap/LoadAccessFaultM +add wave -noupdate -group HDU -group traps /testbench/dut/core/priv/priv/trap/StoreAmoAccessFaultM +add wave -noupdate -group HDU -group traps /testbench/dut/core/priv/priv/trap/EcallFaultM +add wave -noupdate -group HDU -group traps /testbench/dut/core/priv/priv/trap/InstrPageFaultM +add wave -noupdate -group HDU -group traps /testbench/dut/core/priv/priv/trap/LoadPageFaultM +add wave -noupdate -group HDU -group traps /testbench/dut/core/priv/priv/trap/StoreAmoPageFaultM +add wave -noupdate -group HDU -group traps /testbench/dut/core/priv/priv/trap/InterruptM +add wave -noupdate -group HDU -group traps /testbench/dut/core/priv/priv/trap/HPTWInstrAccessFaultM +add wave -noupdate -group HDU -group Flush -color Yellow /testbench/dut/core/FlushD +add wave -noupdate -group HDU -group Flush -color Yellow /testbench/dut/core/FlushE +add wave -noupdate -group HDU -group Flush -color Yellow /testbench/dut/core/FlushM +add wave -noupdate -group HDU -group Flush -color Yellow /testbench/dut/core/FlushW +add wave -noupdate -group HDU -group Stall -color Orange /testbench/dut/core/StallF +add wave -noupdate -group HDU -group Stall -color Orange /testbench/dut/core/StallD +add wave -noupdate -group HDU -group Stall -color Orange /testbench/dut/core/StallE +add wave -noupdate -group HDU -group Stall -color Orange /testbench/dut/core/StallM +add wave -noupdate -group HDU -group Stall -color Orange /testbench/dut/core/StallW add wave -noupdate -group {instruction pipeline} /testbench/InstrFName add wave -noupdate -group {instruction pipeline} /testbench/dut/core/ifu/PostSpillInstrRawF add wave -noupdate -group {instruction pipeline} /testbench/dut/core/ifu/InstrD @@ -297,9 +297,11 @@ add wave -noupdate -group lsu -group ptwalker -expand -group faults /testbench/d add wave -noupdate -group lsu -group ptwalker -expand -group faults /testbench/dut/core/lsu/hptw/hptw/HPTWInstrAccessFault add wave -noupdate -group {WriteBack stage} /testbench/InstrW add wave -noupdate -group {WriteBack stage} /testbench/InstrWName -add wave -noupdate -group Bpred -expand -group {branch update selection inputs} -divider {class check} -add wave -noupdate -group Bpred -expand -group prediction /testbench/dut/core/ifu/bpred/bpred/RASPCF -add wave -noupdate -group Bpred -expand -group prediction -expand -group ex /testbench/dut/core/ifu/bpred/bpred/PCSrcE +add wave -noupdate -expand -group Bpred -expand -group {branch update selection inputs} /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/GHRM +add wave -noupdate -expand -group Bpred -expand -group {branch update selection inputs} -label PHT /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/PHT/mem +add wave -noupdate -expand -group Bpred -expand -group {branch update selection inputs} -divider {class check} +add wave -noupdate -expand -group Bpred -expand -group prediction /testbench/dut/core/ifu/bpred/bpred/RASPCF +add wave -noupdate -expand -group Bpred -expand -group prediction -expand -group ex /testbench/dut/core/ifu/bpred/bpred/PCSrcE add wave -noupdate -group {PCNext Generation} /testbench/dut/core/ifu/PCNextF add wave -noupdate -group {PCNext Generation} /testbench/dut/core/ifu/bpred/bpred/NextValidPCE add wave -noupdate -group {PCNext Generation} /testbench/dut/core/ifu/PCF @@ -576,31 +578,31 @@ add wave -noupdate -group ifu -group itlb -expand -group key19 {/testbench/dut/c add wave -noupdate -group ifu -group itlb -expand -group key19 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[19]/Key1} add wave -noupdate -group ifu -group itlb -expand -group key19 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[19]/Query0} add wave -noupdate -group ifu -group itlb -expand -group key19 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[19]/Query1} -add wave -noupdate -group {Performance Counters} -label MCYCLE -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[0]} -add wave -noupdate -group {Performance Counters} -label MINSTRET -radix hexadecimal {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[2]} -add wave -noupdate -group {Performance Counters} -group BP -label Branch -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[3]} -add wave -noupdate -group {Performance Counters} -group BP -label {BP Dir Wrong} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[7]} -add wave -noupdate -group {Performance Counters} -group BP -label {Jump (Not Return)} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[4]} -add wave -noupdate -group {Performance Counters} -group BP -label Return -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[5]} -add wave -noupdate -group {Performance Counters} -group BP -label {BP Wrong} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[6]} -add wave -noupdate -group {Performance Counters} -group BP -label {BTA Wrong} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[8]} -add wave -noupdate -group {Performance Counters} -group BP -label {RAS Wrong} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[9]} -add wave -noupdate -group {Performance Counters} -group BP -label {BP CLASS WRONG} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[10]} -add wave -noupdate -group {Performance Counters} -expand -group ICACHE -label {I Cache Access} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[16]} -add wave -noupdate -group {Performance Counters} -expand -group ICACHE -label {I Cache Miss} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[17]} -add wave -noupdate -group {Performance Counters} -expand -group ICACHE -label {I Cache Miss Cycles} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[18]} -add wave -noupdate -group {Performance Counters} -group DCACHE -label {Load Stall} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[11]} -add wave -noupdate -group {Performance Counters} -group DCACHE -label {Store Stall} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[12]} -add wave -noupdate -group {Performance Counters} -group DCACHE -label {DCACHE MISS} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[14]} -add wave -noupdate -group {Performance Counters} -group DCACHE -label {DCACHE ACCESS} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[13]} -add wave -noupdate -group {Performance Counters} -group DCACHE -label {D Cache Miss Cycles} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[15]} -add wave -noupdate -group {Performance Counters} -group Privileged -label {CSR Write} {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[19]} -add wave -noupdate -group {Performance Counters} -group Privileged -label Fence.I {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[20]} -add wave -noupdate -group {Performance Counters} -group Privileged -label sfence.VMA {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[21]} -add wave -noupdate -group {Performance Counters} -group Privileged -label Interrupt {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[22]} -add wave -noupdate -group {Performance Counters} -group Privileged -label Exception {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[23]} -add wave -noupdate -group {Performance Counters} -label {FDiv or IDiv Cycles} {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[24]} -add wave -noupdate -group {Performance Counters} /testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW +add wave -noupdate -expand -group {Performance Counters} -label MCYCLE -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[0]} +add wave -noupdate -expand -group {Performance Counters} -label MINSTRET -radix hexadecimal {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[2]} +add wave -noupdate -expand -group {Performance Counters} -expand -group BP -label Branch -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[3]} +add wave -noupdate -expand -group {Performance Counters} -expand -group BP -label {BP Dir Wrong} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[7]} +add wave -noupdate -expand -group {Performance Counters} -expand -group BP -label {Jump (Not Return)} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[4]} +add wave -noupdate -expand -group {Performance Counters} -expand -group BP -label Return -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[5]} +add wave -noupdate -expand -group {Performance Counters} -expand -group BP -label {BP Wrong} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[6]} +add wave -noupdate -expand -group {Performance Counters} -expand -group BP -label {BTA Wrong} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[8]} +add wave -noupdate -expand -group {Performance Counters} -expand -group BP -label {RAS Wrong} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[9]} +add wave -noupdate -expand -group {Performance Counters} -expand -group BP -label {BP CLASS WRONG} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[10]} +add wave -noupdate -expand -group {Performance Counters} -group ICACHE -label {I Cache Access} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[16]} +add wave -noupdate -expand -group {Performance Counters} -group ICACHE -label {I Cache Miss} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[17]} +add wave -noupdate -expand -group {Performance Counters} -group ICACHE -label {I Cache Miss Cycles} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[18]} +add wave -noupdate -expand -group {Performance Counters} -group DCACHE -label {Load Stall} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[11]} +add wave -noupdate -expand -group {Performance Counters} -group DCACHE -label {Store Stall} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[12]} +add wave -noupdate -expand -group {Performance Counters} -group DCACHE -label {DCACHE MISS} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[14]} +add wave -noupdate -expand -group {Performance Counters} -group DCACHE -label {DCACHE ACCESS} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[13]} +add wave -noupdate -expand -group {Performance Counters} -group DCACHE -label {D Cache Miss Cycles} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[15]} +add wave -noupdate -expand -group {Performance Counters} -group Privileged -label {CSR Write} {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[19]} +add wave -noupdate -expand -group {Performance Counters} -group Privileged -label Fence.I {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[20]} +add wave -noupdate -expand -group {Performance Counters} -group Privileged -label sfence.VMA {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[21]} +add wave -noupdate -expand -group {Performance Counters} -group Privileged -label Interrupt {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[22]} +add wave -noupdate -expand -group {Performance Counters} -group Privileged -label Exception {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[23]} +add wave -noupdate -expand -group {Performance Counters} -label {FDiv or IDiv Cycles} {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[24]} +add wave -noupdate -expand -group {Performance Counters} /testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW add wave -noupdate -group {ifu } -color Gold /testbench/dut/core/ifu/bus/icache/ahbcacheinterface/AHBBuscachefsm/CurrState add wave -noupdate -group {ifu } /testbench/dut/core/ifu/bus/icache/ahbcacheinterface/AHBBuscachefsm/HREADY add wave -noupdate -group {ifu } /testbench/dut/core/ifu/bus/icache/ahbcacheinterface/FetchBuffer @@ -675,7 +677,7 @@ add wave -noupdate /testbench/dut/core/fpu/fpu/fctrl/IllegalFPUInstrD add wave -noupdate /testbench/dut/core/fpu/fpu/fctrl/STATUS_FS add wave -noupdate /testbench/dut/core/priv/priv/csr/csrsr/STATUS_FS_INT TreeUpdate [SetDefaultTree] -WaveRestoreCursors {{Cursor 4} {172636 ns} 1} {{Cursor 4} {578 ns} 0} {{Cursor 3} {152766 ns} 1} +WaveRestoreCursors {{Cursor 4} {172636 ns} 1} {{Cursor 4} {5101 ns} 0} {{Cursor 3} {152766 ns} 1} quietly wave cursor active 2 configure wave -namecolwidth 250 configure wave -valuecolwidth 194 @@ -691,4 +693,4 @@ configure wave -griddelta 40 configure wave -timeline 0 configure wave -timelineunits ns update -WaveRestoreZoom {526 ns} {696 ns} +WaveRestoreZoom {4326 ns} {6929 ns} From 1fdfa024fc8fb57b8e4d0e9cb296bf693b910f9b Mon Sep 17 00:00:00 2001 From: Ross Thompson Date: Fri, 22 Sep 2023 16:00:32 -0500 Subject: [PATCH 11/32] Temporarily commit replacement parseTest.py for parseHPMC.py. --- bin/parseTest.py | 385 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 385 insertions(+) create mode 100755 bin/parseTest.py diff --git a/bin/parseTest.py b/bin/parseTest.py new file mode 100755 index 000000000..99bcd3fa1 --- /dev/null +++ b/bin/parseTest.py @@ -0,0 +1,385 @@ +#!/usr/bin/python3 + +########################################### +## Written: Rose Thompson ross1728@gmail.com +## Created: 20 September 2023 +## Modified: +## +## Purpose: Parses the performance counters from a modelsim trace. +## +## A component of the CORE-V-WALLY configurable RISC-V project. +## +## Copyright (C) 2021-23 Harvey Mudd College & Oklahoma State University +## +## SPDX-License-Identifier: Apache-2.0 WITH SHL-2.1 +## +## Licensed under the Solderpad Hardware License v 2.1 (the “License”); you may not use this file +## except in compliance with the License, or, at your option, the Apache License version 2.0. You +## may obtain a copy of the License at +## +## https:##solderpad.org/licenses/SHL-2.1/ +## +## Unless required by applicable law or agreed to in writing, any work distributed under the +## License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, +## either express or implied. See the License for the specific language governing permissions +## and limitations under the License. +################################################################################################ + +import os +import sys +import matplotlib.pyplot as plt +import math + +import argparse + + +def ParseBranchListFile(path): + '''Take the path to the list of Questa Sim log files containing the performance counters outputs. File + is formated in row columns. Each row is a trace with the file, branch predictor type, and the parameters. + parameters can be any number and depend on the predictor type. Returns a list of lists.''' + lst = [] + BranchList = open(path, 'r') + for line in BranchList: + tokens = line.split() + predictorLog = os.path.dirname(path) + '/' + tokens[0] + predictorType = tokens[1] + predictorParams = tokens[2::] + lst.append([predictorLog, predictorType, predictorParams]) + #print(predictorLog, predictorType, predictorParams) + return lst + +def ProcessFile(fileName): + '''Extract preformance counters from a modelsim log. Outputs a list of tuples for each test/benchmark. + The tuple contains the test name, optimization characteristics, and dictionary of performance counters.''' + # 1 find lines with Read memfile and extract test name + # 2 parse counters into a list of (name, value) tuples (dictionary maybe?) + benchmarks = [] + transcript = open(fileName, 'r') + HPMClist = { } + testName = '' + for line in transcript.readlines(): + lineToken = line.split() + if(len(lineToken) > 3 and lineToken[1] == 'Read' and lineToken[2] == 'memfile'): + opt = lineToken[3].split('/')[-4] + testName = lineToken[3].split('/')[-1].split('.')[0] + HPMClist = { } + elif(len(lineToken) > 4 and lineToken[1][0:3] == 'Cnt'): + countToken = line.split('=')[1].split() + value = int(countToken[0]) + name = ' '.join(countToken[1:]) + HPMClist[name] = value + elif ('is done' in line): + benchmarks.append((testName, opt, HPMClist)) + return benchmarks + + +def ComputeStats(benchmarks): + for benchmark in benchmarks: + (nameString, opt, dataDict) = benchmark + dataDict['CPI'] = 1.0 * int(dataDict['Mcycle']) / int(dataDict['InstRet']) + dataDict['BDMR'] = 100.0 * int(dataDict['BP Dir Wrong']) / int(dataDict['Br Count']) + dataDict['BTMR'] = 100.0 * int(dataDict['BP Target Wrong']) / (int(dataDict['Br Count']) + int(dataDict['Jump Not Return'])) + dataDict['RASMPR'] = 100.0 * int(dataDict['RAS Wrong']) / int(dataDict['Return']) + dataDict['ClassMPR'] = 100.0 * int(dataDict['Instr Class Wrong']) / int(dataDict['InstRet']) + dataDict['ICacheMR'] = 100.0 * int(dataDict['I Cache Miss']) / int(dataDict['I Cache Access']) + + cycles = int(dataDict['I Cache Miss']) + if(cycles == 0): ICacheMR = 0 + else: ICacheMR = 100.0 * int(dataDict['I Cache Cycles']) / cycles + dataDict['ICacheMT'] = ICacheMR + + dataDict['DCacheMR'] = 100.0 * int(dataDict['D Cache Miss']) / int(dataDict['D Cache Access']) + + (nameString, opt, dataDict) = benchmark + cycles = int(dataDict['D Cache Miss']) + if(cycles == 0): DCacheMR = 0 + else: DCacheMR = 100.0 * int(dataDict['D Cache Cycles']) / cycles + dataDict['DCacheMT'] = DCacheMR + + +def ComputeGeometricAverage(benchmarks): + fields = ['BDMR', 'BTMR', 'RASMPR', 'ClassMPR', 'ICacheMR', 'DCacheMR', 'CPI', 'ICacheMT', 'DCacheMT'] + AllAve = {} + for field in fields: + Product = 1 + index = 0 + for (testName, opt, HPMCList) in benchmarks: + #print(HPMCList) + Product *= HPMCList[field] + index += 1 + AllAve[field] = Product ** (1.0/index) + benchmarks.append(('Mean', '', AllAve)) + +def GenerateName(predictorType, predictorParams): + if(predictorType == 'gshare' or predictorType == 'twobit'): + return predictorType + predictorParams[0] + elif(predictorParams == 'local'): + return predictorType + predictorParams[0] + '_' + predictorParams[1] + else: + print(f'Error unsupported predictor type {predictorType}') + sys.exit(-1) + +def ComputePredNumEntries(predictorType, predictorParams): + if(predictorType == 'gshare' or predictorType == 'twobit'): + return 2**int(predictorParams[0]) + elif(predictorParams == 'local'): + return 2**int(predictorParams[0]) * int(predictorParams[1]) + 2**int(predictorParams[1]) + else: + print(f'Error unsupported predictor type {predictorType}') + sys.exit(-1) + +def BuildDataBase(predictorLogs): + # Once done with the following loop, performanceCounterList will contain the predictor type and size along with the + # raw performance counter data and the processed data on a per benchmark basis. It also includes the geometric mean. + # list + # branch predictor configuration 0 (tuple) + # benchmark name + # compiler optimization + # data (dictionary) + # dictionary of performance counters + # branch predictor configuration 1 (tuple) + # benchmark name (dictionary) + # compiler optimization + # data + # dictionary of performance counters + # ... + performanceCounterList = [] + for trace in predictorLogs: + predictorLog = trace[0] + predictorType = trace[1] + predictorParams = trace[2] + # Extract the performance counter data + performanceCounters = ProcessFile(predictorLog) + ComputeStats(performanceCounters) + ComputeGeometricAverage(performanceCounters) + #print(performanceCounters) + performanceCounterList.append([GenerateName(predictorType, predictorParams), predictorType, performanceCounters, ComputePredNumEntries(predictorType, predictorParams)]) + return performanceCounterList + +def ReorderDataBase(performanceCounterList): + # Reorder the data so the benchmark name comes first, then the branch predictor configuration + benchmarkFirstList = [] + for (predictorName, predictorPrefixName, benchmarks, entries) in performanceCounterList: + for benchmark in benchmarks: + (nameString, opt, dataDict) = benchmark + benchmarkFirstList.append((nameString, opt, predictorName, predictorPrefixName, entries, dataDict)) + return benchmarkFirstList + +def ExtractSelectedData(benchmarkFirstList): + # now extract all branch prediction direction miss rates for each + # namestring + opt, config + benchmarkDict = { } + for benchmark in benchmarkFirstList: + (name, opt, config, prefixName, entries, dataDict) = benchmark + if opt == 'bd_speedopt_speed': NewName = name+'Sp' + elif opt == 'bd_sizeopt_speed': NewName = name+'Sz' + else: NewName = name + #print(NewName) + #NewName = name+'_'+opt + if NewName in benchmarkDict: + benchmarkDict[NewName].append((config, prefixName, entries, dataDict[ReportPredictorType])) + else: + benchmarkDict[NewName] = [(config, prefixName, entries, dataDict[ReportPredictorType])] + return benchmarkDict + +def ReportAsTable(benchmarkDict): + refLine = benchmarkDict['Mean'] + FirstLine = [] + SecondLine = [] + for (name, typ, size, val) in refLine: + FirstLine.append(name) + SecondLine.append(size) + + sys.stdout.write('benchmark\t\t') + for name in FirstLine: + if(len(name) < 8): sys.stdout.write('%s\t\t' % name) + else: sys.stdout.write('%s\t' % name) + sys.stdout.write('\n') + sys.stdout.write('size\t\t\t') + for size in SecondLine: + if(len(str(size)) < 8): sys.stdout.write('%d\t\t' % size) + else: sys.stdout.write('%d\t' % size) + sys.stdout.write('\n') + + if(args.summary): + sys.stdout.write('Mean\t\t\t') + for (name, typ, size, val) in refLine: + sys.stdout.write('%0.2f\t\t' % (val if not args.invert else 100 - val)) + sys.stdout.write('\n') + + if(not args.summary): + for benchmark in benchmarkDict: + length = len(benchmark) + if(length < 8): sys.stdout.write('%s\t\t\t' % benchmark) + elif(length < 16): sys.stdout.write('%s\t\t' % benchmark) + else: sys.stdout.write('%s\t' % benchmark) + for (name, typ, size, val) in benchmarkDict[benchmark]: + sys.stdout.write('%0.2f\t\t' % (val if not args.invert else 100 -val)) + sys.stdout.write('\n') + +def ReportAsText(benchmarkDict): + if(args.summary): + mean = benchmarkDict['Mean'] + print('Mean') + for (name, typ, size, val) in mean: + sys.stdout.write('%s %s %0.2f\n' % (name, size, val if not args.invert else 100 - val)) + + if(not args.summary): + for benchmark in benchmarkDict: + print(benchmark) + for (name, type, size, val) in benchmarkDict[benchmark]: + sys.stdout.write('%s %s %0.2f\n' % (name, size, val if not args.invert else 100 - val)) + +def ReportAsGraph(benchmarkDict, bar): + def FormatToPlot(currBenchmark): + names = [] + sizes = [] + values = [] + typs = [] + for config in currBenchmark: + names.append(config[0]) + sizes.append(config[1]) + values.append(config[2]) + typs.append(config[3]) + return (names, sizes, values, typs) + titlesInvert = {'BDMR' : 'Branch Direction Accuracy', + 'BTMR' : 'Branch Target Accuracy', + 'RASMPR': 'RAS Accuracy', + 'ClassMPR': 'Class Prediction Accuracy'} + titles = {'BDMR' : 'Branch Direction Misprediction', + 'BTMR' : 'Branch Target Misprediction', + 'RASMPR': 'RAS Misprediction', + 'ClassMPR': 'Class Misprediction'} + if(args.summary): + markers = ['x', '.', '+', '*', '^', 'o', ',', 's'] + colors = ['black', 'blue', 'dodgerblue', 'turquoise', 'lightsteelblue', 'gray', 'black', 'blue'] + temp = benchmarkDict['Mean'] + + # the benchmarkDict['Mean'] contains sequencies of results for multiple + # branch predictors with various parameterizations + # group the parameterizations by the common typ. + sequencies = {} + for (name, typ, size, value) in benchmarkDict['Mean']: + if not typ in sequencies: + sequencies[typ] = [(size, value)] + else: + sequencies[typ].append((size,value)) + # then graph the common typ as a single line+scatter plot + # finally repeat for all typs of branch predictors and overlay + fig, axes = plt.subplots() + index = 0 + if(args.invert): plt.title(titlesInvert[ReportPredictorType]) + else: plt.title(titles[ReportPredictorType]) + for branchPredName in sequencies: + data = sequencies[branchPredName] + (xdata, ydata) = zip(*data) + if args.invert: ydata = [100 - x for x in ydata] + axes.plot(xdata, ydata, color=colors[index]) + axes.scatter(xdata, ydata, label=branchPredName, color=colors[index], marker=markers[index]) + index = (index + 1) % len(markers) + axes.legend(loc='upper left') + axes.set_xscale("log") + axes.set_ylabel('Prediction Accuracy') + axes.set_xlabel('Entries') + axes.set_xticks(xdata) + axes.set_xticklabels(xdata) + axes.grid(color='b', alpha=0.5, linestyle='dashed', linewidth=0.5) + + if(not args.summary): + size = len(benchmarkDict) + sizeSqrt = math.sqrt(size) + isSquare = math.isclose(sizeSqrt, round(sizeSqrt)) + numCol = math.floor(sizeSqrt) + numRow = numCol + (0 if isSquare else 1) + index = 1 + fig = plt.figure() + for benchmarkName in benchmarkDict: + currBenchmark = benchmarkDict[benchmarkName] + (names, typs, sizes, values) = FormatToPlot(currBenchmark) + #axes.plot(numRow, numCol, index) + ax = fig.add_subplot(numRow, numCol, index) + ax.bar(names, values) + ax.title.set_text(benchmarkName) + #plt.ylabel('BR Dir Miss Rate (%)') + #plt.xlabel('Predictor') + index += 1 + plt.show() + + +# main +parser = argparse.ArgumentParser(description='Parses performance counters from a Questa Sim trace to produce a graph or graphs.') + +# parse program arguments +metric = parser.add_mutually_exclusive_group() +metric.add_argument('-r', '--ras', action='store_const', help='Plot return address stack (RAS) performance.', default=False, const=True) +metric.add_argument('-d', '--direction', action='store_const', help='Plot direction prediction (2-bit, Gshare, local, etc) performance.', default=False, const=True) +metric.add_argument('-t', '--target', action='store_const', help='Plot branch target buffer (BTB) performance.', default=False, const=True) +metric.add_argument('-c', '--iclass', action='store_const', help='Plot instruction classification performance.', default=False, const=True) + +parser.add_argument('-s', '--summary', action='store_const', help='Show only the geometric average for all benchmarks.', default=False, const=True) +parser.add_argument('-b', '--bar', action='store_const', help='Plot graphs.', default=False, const=True) +parser.add_argument('-g', '--reference', action='store_const', help='Include the golden reference model from branch-predictor-simulator. Data stored statically at the top of %(prog)s. If you need to regenreate use CModelBranchAcurracy.sh', default=False, const=True) +parser.add_argument('-i', '--invert', action='store_const', help='Invert metric. Example Branch miss prediction becomes prediction accuracy. 100 - miss rate', default=False, const=True) + +displayMode = parser.add_mutually_exclusive_group() +displayMode.add_argument('--text', action='store_const', help='Display in text format only.', default=False, const=True) +displayMode.add_argument('--table', action='store_const', help='Display in text format only.', default=False, const=True) +displayMode.add_argument('--gui', action='store_const', help='Display in text format only.', default=False, const=True) +displayMode.add_argument('--debug', action='store_const', help='Display in text format only.', default=False, const=True) +parser.add_argument('sources', nargs=1) + +args = parser.parse_args() + +# Figure what we are reporting +ReportPredictorType = 'BDMR' # default +if(args.ras): ReportPredictorType = 'RASMPR' +if(args.target): ReportPredictorType = 'BTMR' +if(args.iclass): ReportPredictorType = 'ClassMPR' + +# Figure how we are displaying the data +ReportMode = 'gui' # default +if(args.text): ReportMode = 'text' +if(args.table): ReportMode = 'table' +if(args.debug): ReportMode = 'debug' + +# read the questa sim list file. +# row, col format. each row is a questa sim run with performance counters and a particular +# branch predictor type and size. size can be multiple parameters for more complex predictors like +# local history and tage. +# +predictorLogs = ParseBranchListFile(args.sources[0]) # digests the traces +performanceCounterList = BuildDataBase(predictorLogs) # builds a database of performance counters by trace and then by benchmark +benchmarkFirstList = ReorderDataBase(performanceCounterList) # reorder first by benchmark then trace +benchmarkDict = ExtractSelectedData(benchmarkFirstList) # filters to just the desired performance counter metric + +#print(benchmarkDict['Mean']) +#print(benchmarkDict['aha-mont64Speed']) +#print(benchmarkDict) + +# table format +if(ReportMode == 'table'): + ReportAsTable(benchmarkDict) + +if(ReportMode == 'text'): + ReportAsText(benchmarkDict) + +if(ReportMode == 'gui'): + ReportAsGraph(benchmarkDict, args.bar) + +# *** this is only needed of -b (no -s) + +# debug +#config0 = performanceCounterList[0][0] +#data0 = performanceCounterList[0][1] +#bench0 = data0[0] +#bench0name = bench0[0] +#bench0data = bench0[2] +#bench0BrCount = bench0data['Br Count'] +#bench1 = data0[1] + +#print(data0) +#print(bench0) +#print(bench1) + +#print(bench0name) +#print(bench0BrCount) From 1cb278913ade66cf09e56b1811f845297deaba13 Mon Sep 17 00:00:00 2001 From: Ross Thompson Date: Mon, 25 Sep 2023 09:55:38 -0500 Subject: [PATCH 12/32] Major improvement to the bar graph generation. --- bin/parseTest.py | 63 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 54 insertions(+), 9 deletions(-) diff --git a/bin/parseTest.py b/bin/parseTest.py index 99bcd3fa1..966572955 100755 --- a/bin/parseTest.py +++ b/bin/parseTest.py @@ -29,7 +29,7 @@ import os import sys import matplotlib.pyplot as plt import math - +import numpy as np import argparse @@ -285,6 +285,25 @@ def ReportAsGraph(benchmarkDict, bar): axes.set_xticklabels(xdata) axes.grid(color='b', alpha=0.5, linestyle='dashed', linewidth=0.5) + # if(not args.summary): + # size = len(benchmarkDict) + # sizeSqrt = math.sqrt(size) + # isSquare = math.isclose(sizeSqrt, round(sizeSqrt)) + # numCol = math.floor(sizeSqrt) + # numRow = numCol + (0 if isSquare else 1) + # index = 1 + # fig = plt.figure() + # for benchmarkName in benchmarkDict: + # currBenchmark = benchmarkDict[benchmarkName] + # (names, typs, sizes, values) = FormatToPlot(currBenchmark) + # #axes.plot(numRow, numCol, index) + # ax = fig.add_subplot(numRow, numCol, index) + # ax.bar(names, values) + # ax.title.set_text(benchmarkName) + # #plt.ylabel('BR Dir Miss Rate (%)') + # #plt.xlabel('Predictor') + # index += 1 + if(not args.summary): size = len(benchmarkDict) sizeSqrt = math.sqrt(size) @@ -292,17 +311,43 @@ def ReportAsGraph(benchmarkDict, bar): numCol = math.floor(sizeSqrt) numRow = numCol + (0 if isSquare else 1) index = 1 - fig = plt.figure() + fig = plt.subplots() + testLimit = 7 + + xlabelList = [] + seriesDict = {} + NumberInGroup = len(benchmarkDict['Mean']) + # Figure out width of bars. NumberInGroup bars + want 2 bar space + # the space between groups is 1 + EffectiveNumInGroup = NumberInGroup + 2 + barWidth = 1 / EffectiveNumInGroup for benchmarkName in benchmarkDict: currBenchmark = benchmarkDict[benchmarkName] - (names, typs, sizes, values) = FormatToPlot(currBenchmark) - #axes.plot(numRow, numCol, index) - ax = fig.add_subplot(numRow, numCol, index) - ax.bar(names, values) - ax.title.set_text(benchmarkName) - #plt.ylabel('BR Dir Miss Rate (%)') - #plt.xlabel('Predictor') + xlabelList.append(benchmarkName) + for (name, typ, size, value) in currBenchmark: + if(name not in seriesDict): + seriesDict[name] = [value] + else: + seriesDict[name].append(value) + #print(currBenchmark) + #(names, typs, sizes, values) = FormatToPlot(currBenchmark) + #xpos = np.arange(testLimit + index*barWidth) + #print(f'xpos = {xpos}, values={values}') + #plt.bar(xpos, values, wdith=barWidth, edgecolor='grey', label=names) + if(index >= testLimit): break index += 1 + print(f'xlabelList = {xlabelList}') + print(f'seriesDict = {seriesDict}') + index = 0 + for name in seriesDict: + xpos = np.arange(testLimit) + xpos = [x + index*barWidth for x in xpos] + values = seriesDict[name] + print(f'xpos = {xpos}, values={values}') + plt.bar(xpos, values, width=barWidth, edgecolor='grey', label=name) + index += 1 + plt.xticks([r + barWidth*(NumberInGroup/2-0.5) for r in range(0, testLimit)], xlabelList) + plt.legend() plt.show() From 81dd6517f104d95da0dea663af6b7852cfdb0aff Mon Sep 17 00:00:00 2001 From: Ross Thompson Date: Mon, 25 Sep 2023 10:09:33 -0500 Subject: [PATCH 13/32] Now produces beautiful graphs. --- bin/parseTest.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/bin/parseTest.py b/bin/parseTest.py index 966572955..5cdcd81d4 100755 --- a/bin/parseTest.py +++ b/bin/parseTest.py @@ -321,6 +321,7 @@ def ReportAsGraph(benchmarkDict, bar): # the space between groups is 1 EffectiveNumInGroup = NumberInGroup + 2 barWidth = 1 / EffectiveNumInGroup + colors = ['blue', 'blue', 'blue', 'blue', 'blue', 'blue', 'black', 'black', 'black', 'black', 'black', 'black'] for benchmarkName in benchmarkDict: currBenchmark = benchmarkDict[benchmarkName] xlabelList.append(benchmarkName) @@ -344,10 +345,13 @@ def ReportAsGraph(benchmarkDict, bar): xpos = [x + index*barWidth for x in xpos] values = seriesDict[name] print(f'xpos = {xpos}, values={values}') - plt.bar(xpos, values, width=barWidth, edgecolor='grey', label=name) + plt.bar(xpos, values, width=barWidth, edgecolor='grey', label=name, color=colors[index%len(colors)]) index += 1 plt.xticks([r + barWidth*(NumberInGroup/2-0.5) for r in range(0, testLimit)], xlabelList) - plt.legend() + plt.xlabel('Benchmark') + if(not args.invert): plt.ylabel('Misprediction Rate Accuracy (%)') + else: plt.ylabel('Prediction Accuracy (%)') + plt.legend(loc='upper left', ncol=2) plt.show() From 6b22138bf6aadd33fe82ed29ac85fcb7f6ff51c9 Mon Sep 17 00:00:00 2001 From: Ross Thompson Date: Mon, 25 Sep 2023 12:45:09 -0500 Subject: [PATCH 14/32] Finally have this script generating beautiful bar plots of branch predictor misrates. --- bin/parseTest.py | 88 +++++++++++++++++++++++++++++++----------------- 1 file changed, 58 insertions(+), 30 deletions(-) diff --git a/bin/parseTest.py b/bin/parseTest.py index 5cdcd81d4..ba3309aff 100755 --- a/bin/parseTest.py +++ b/bin/parseTest.py @@ -230,6 +230,40 @@ def ReportAsText(benchmarkDict): for (name, type, size, val) in benchmarkDict[benchmark]: sys.stdout.write('%s %s %0.2f\n' % (name, size, val if not args.invert else 100 - val)) +def Inversion(lst): + return [x if not args.invert else 100 - x for x in lst] + +def BarGraph(seriesDict, xlabelList, BenchPerRow, FileName): + index = 0 + NumberInGroup = len(seriesDict) + # Figure out width of bars. NumberInGroup bars + want 2 bar space + # the space between groups is 1 + EffectiveNumInGroup = NumberInGroup + 2 + barWidth = 1 / EffectiveNumInGroup + fig = plt.subplots(figsize = (EffectiveNumInGroup*BenchPerRow/8, 4)) + colors = ['blue', 'blue', 'blue', 'blue', 'blue', 'blue', 'black', 'black', 'black', 'black', 'black', 'black'] + for name in seriesDict: + xpos = np.arange(BenchPerRow) + xpos = [x + index*barWidth for x in xpos] + values = seriesDict[name] + plt.bar(xpos, Inversion(values), width=barWidth, edgecolor='grey', label=name, color=colors[index%len(colors)]) + index += 1 + plt.xticks([r + barWidth*(NumberInGroup/2-0.5) for r in range(0, BenchPerRow)], xlabelList) + plt.xlabel('Benchmark') + if(not args.invert): plt.ylabel('Misprediction Rate (%)') + else: plt.ylabel('Prediction Accuracy (%)') + plt.legend(loc='upper left', ncol=2) + plt.savefig(FileName) + +def SelectPartition(xlabelListBig, seriesDictBig, group, BenchPerRow): + seriesDictTrunk = {} + for benchmarkName in seriesDictBig: + lst = seriesDictBig[benchmarkName] + seriesDictTrunk[benchmarkName] = lst[group*BenchPerRow:(group+1)*BenchPerRow] + xlabelListTrunk = xlabelListBig[group*BenchPerRow:(group+1)*BenchPerRow] + return(xlabelListTrunk, seriesDictTrunk) + + def ReportAsGraph(benchmarkDict, bar): def FormatToPlot(currBenchmark): names = [] @@ -284,6 +318,8 @@ def ReportAsGraph(benchmarkDict, bar): axes.set_xticks(xdata) axes.set_xticklabels(xdata) axes.grid(color='b', alpha=0.5, linestyle='dashed', linewidth=0.5) + plt.show() + # if(not args.summary): # size = len(benchmarkDict) @@ -311,17 +347,11 @@ def ReportAsGraph(benchmarkDict, bar): numCol = math.floor(sizeSqrt) numRow = numCol + (0 if isSquare else 1) index = 1 - fig = plt.subplots() - testLimit = 7 + BenchPerRow = 7 xlabelList = [] seriesDict = {} - NumberInGroup = len(benchmarkDict['Mean']) - # Figure out width of bars. NumberInGroup bars + want 2 bar space - # the space between groups is 1 - EffectiveNumInGroup = NumberInGroup + 2 - barWidth = 1 / EffectiveNumInGroup - colors = ['blue', 'blue', 'blue', 'blue', 'blue', 'blue', 'black', 'black', 'black', 'black', 'black', 'black'] + for benchmarkName in benchmarkDict: currBenchmark = benchmarkDict[benchmarkName] xlabelList.append(benchmarkName) @@ -330,29 +360,27 @@ def ReportAsGraph(benchmarkDict, bar): seriesDict[name] = [value] else: seriesDict[name].append(value) - #print(currBenchmark) - #(names, typs, sizes, values) = FormatToPlot(currBenchmark) - #xpos = np.arange(testLimit + index*barWidth) - #print(f'xpos = {xpos}, values={values}') - #plt.bar(xpos, values, wdith=barWidth, edgecolor='grey', label=names) - if(index >= testLimit): break + if(index >= BenchPerRow): break index += 1 - print(f'xlabelList = {xlabelList}') - print(f'seriesDict = {seriesDict}') - index = 0 - for name in seriesDict: - xpos = np.arange(testLimit) - xpos = [x + index*barWidth for x in xpos] - values = seriesDict[name] - print(f'xpos = {xpos}, values={values}') - plt.bar(xpos, values, width=barWidth, edgecolor='grey', label=name, color=colors[index%len(colors)]) - index += 1 - plt.xticks([r + barWidth*(NumberInGroup/2-0.5) for r in range(0, testLimit)], xlabelList) - plt.xlabel('Benchmark') - if(not args.invert): plt.ylabel('Misprediction Rate Accuracy (%)') - else: plt.ylabel('Prediction Accuracy (%)') - plt.legend(loc='upper left', ncol=2) - plt.show() + + xlabelListBig = [] + seriesDictBig = {} + for benchmarkName in benchmarkDict: + currBenchmark = benchmarkDict[benchmarkName] + xlabelListBig.append(benchmarkName) + for (name, typ, size, value) in currBenchmark: + if(name not in seriesDictBig): + seriesDictBig[name] = [value] + else: + seriesDictBig[name].append(value) + + #The next step will be to split the benchmarkDict into length BenchPerRow pieces then repeat the following code + # on each piece. + for row in range(0, math.ceil(39 / BenchPerRow)): + (xlabelListTrunk, seriesDictTrunk) = SelectPartition(xlabelListBig, seriesDictBig, row, BenchPerRow) + FileName = 'barSegment%d.png' % row + groupLen = len(xlabelListTrunk) + BarGraph(seriesDictTrunk, xlabelListTrunk, groupLen, FileName) # main From 0215c375944d83f5ff0f543e805b9c6b16411ffe Mon Sep 17 00:00:00 2001 From: Jacob Pease Date: Mon, 25 Sep 2023 18:04:51 -0500 Subject: [PATCH 15/32] Fixed error with finding vmlinux and busybox directories too early. --- linux/Makefile | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/linux/Makefile b/linux/Makefile index 95a849fcf..433bf0e73 100644 --- a/linux/Makefile +++ b/linux/Makefile @@ -15,7 +15,7 @@ WALLYBOARD := $(BUILDROOT)/board/wally PACKAGE_SOURCE := ${WALLYLINUX}/buildroot-packages/package-source FPGA_AXI_SDC := ${WALLYLINUX}/buildroot-packages/fpga-axi-sdc DRIVER := ${PACKAGE_SOURCE}/fpga-axi-sdc.c -PATCHFILE := $(BRPACKAGES)/package.patch +PATCHFILE := $(BRPACKAGES)/package-2023.05.1.patch # Device tree files DTS ?= $(shell find -type f -regex ".*\.dts" | sort) @@ -32,8 +32,17 @@ OBJDUMPS := $(foreach name, $(OBJDUMPS), $(DIS)/$(name).objdump) # BUSYBOXDIR := $(shell ls $(BUILDROOT)/output/build | grep -e '^linux-[0-9]\+\.[0-9]\+\.[0-9]\+$$' ) # BUSYBOXDIR := $(BUILDROOT)/output/build/$(BUSYBOXDIR) -LINUXDIR := $(shell find $(BUILDROOT)/output/build -maxdepth 2 -type d -regex ".*/linux-[0-9]+\.[0-9]+\.[0-9]+$$") -BUSYBOXDIR := $(shell find $(BUILDROOT)/output/build -maxdepth 2 -type d -regex ".*/busybox-[0-9]+\.[0-9]+\.[0-9]+$$") +# Gets Linux and Busybox output folders for objedect dumps +# LINUXDIR ?= $(shell find $(BUILDROOT)/output/build -maxdepth 2 -type d -regex ".*/linux-[0-9]+\.[0-9]+\.[0-9]+$$") +# BUSYBOXDIR ?= $(shell find $(BUILDROOT)/output/build -maxdepth 2 -type d -regex ".*/busybox-[0-9]+\.[0-9]+\.[0-9]+$$") + +define linuxDir = +$(shell find $(BUILDROOT)/output/build -maxdepth 2 -type d -regex ".*/linux-[0-9]+\.[0-9]+\.[0-9]+$$") +endef + +define busyboxDir = +$(shell find $(BUILDROOT)/output/build -maxdepth 2 -type d -regex ".*/busybox-[0-9]+\.[0-9]+\.[0-9]+$$") +endef .PHONY: all generate disassemble install clean cleanDTB cleanDriver test @@ -50,8 +59,8 @@ all: # Temp rule for debugging test: - @echo $(LINUXDIR) - @echo $(BUSYBOXDIR) + @echo $(linuxDir) + @echo $(busyboxDir) generate: $(DTB) $(IMAGES) @@ -78,16 +87,16 @@ $(DIS)/%.objdump: $(IMAGES)/%.elf $(DIS)/%.objdump: $(IMAGES)/% riscv64-unknown-elf-objdump -S $< >> $@ -$(IMAGES)/vmlinux: $(LINUXDIR)/vmlinux +$(IMAGES)/vmlinux: $(call linuxDir)/vmlinux cp $< $@ -$(IMAGES)/busybox: $(BUSYBOXDIR)/busybox +$(IMAGES)/busybox: $(call busyboxDir)/busybox cp $< $@ # Generating new Buildroot directories -------------------------------- # This directive should be run as: make install BUILDROOT=path/to/buildroot -install: $(BUILDROOT)/package/fpga-axi-sdc $(WALLYBOARD) $(DRIVER) +install: $(BUILDROOT)/package/fpga-axi-sdc $(WALLYBOARD) cp $(WALLYBOARD)/main.config $(BUILDROOT)/.config # CONFIG DEPENDENCIES 2021.05 ----------------------------------------- @@ -122,9 +131,9 @@ $(BUILDROOT): cd $@; git checkout 2023.05.x #cd $@; git checkout 2021.05 -$(DRIVER): - @ if [ -d "$(WALLY)/addins/vivado-risc-v" ] ; then git submodule update --init $(WALLY)/addins/vivado-risc-v; fi - cp ../addins/vivado-risc-v/patches/fpga-axi-sdc.c $@ +#$(DRIVER): +# @ if [ -d "$(WALLY)/addins/vivado-risc-v" ] ; then git submodule update --init $(WALLY)/addins/vivado-risc-v; fi +# cp ../addins/vivado-risc-v/patches/fpga-axi-sdc.c $@ # For 2021.05 #sed -i "s|card_hw_reset|hw_reset|1" $@ From e6672c28189953a7a4949e25911f2c3f34b17945 Mon Sep 17 00:00:00 2001 From: Ross Thompson Date: Mon, 25 Sep 2023 18:16:58 -0500 Subject: [PATCH 16/32] add c++ support to buildroot's config file. this is needed for running tensorflow's benchmark. --- .../buildroot-2023.05.1/main.config | 1498 ++++------------- 1 file changed, 298 insertions(+), 1200 deletions(-) diff --git a/linux/buildroot-config-src/buildroot-2023.05.1/main.config b/linux/buildroot-config-src/buildroot-2023.05.1/main.config index c7745f443..bb0547d71 100644 --- a/linux/buildroot-config-src/buildroot-2023.05.1/main.config +++ b/linux/buildroot-config-src/buildroot-2023.05.1/main.config @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Buildroot 2023.05.1-dirty Configuration +# Buildroot 2023.05.2-166-gb362115b25 Configuration # BR2_HAVE_DOT_CONFIG=y BR2_HOST_GCC_AT_LEAST_4_9=y @@ -99,7 +99,7 @@ BR2_KERNEL_HEADERS_6_3=y # BR2_KERNEL_HEADERS_CUSTOM_TARBALL is not set # BR2_KERNEL_HEADERS_CUSTOM_GIT is not set BR2_KERNEL_HEADERS_LATEST=y -BR2_DEFAULT_KERNEL_HEADERS="6.3.12" +BR2_DEFAULT_KERNEL_HEADERS="6.3.13" BR2_PACKAGE_LINUX_HEADERS=y BR2_PACKAGE_MUSL_ARCH_SUPPORTS=y BR2_PACKAGE_MUSL_SUPPORTS=y @@ -133,7 +133,7 @@ BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="" BR2_GCC_VERSION_12_X=y BR2_GCC_VERSION="12.3.0" BR2_EXTRA_GCC_CONFIG_OPTIONS="" -# BR2_TOOLCHAIN_BUILDROOT_CXX is not set +BR2_TOOLCHAIN_BUILDROOT_CXX=y # BR2_TOOLCHAIN_BUILDROOT_FORTRAN is not set # BR2_GCC_ENABLE_OPENMP is not set # BR2_GCC_ENABLE_GRAPHITE is not set @@ -151,6 +151,7 @@ BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS=y BR2_TOOLCHAIN_SUPPORTS_VARIADIC_MI_THUNK=y BR2_USE_WCHAR=y BR2_ENABLE_LOCALE=y +BR2_INSTALL_LIBSTDCPP=y BR2_TOOLCHAIN_HAS_THREADS=y BR2_TOOLCHAIN_HAS_THREADS_DEBUG=y BR2_TOOLCHAIN_HAS_THREADS_NPTL=y @@ -406,7 +407,7 @@ BR2_LINUX_KERNEL_LATEST_VERSION=y # BR2_LINUX_KERNEL_CUSTOM_GIT is not set # BR2_LINUX_KERNEL_CUSTOM_HG is not set # BR2_LINUX_KERNEL_CUSTOM_SVN is not set -BR2_LINUX_KERNEL_VERSION="6.3.12" +BR2_LINUX_KERNEL_VERSION="6.3.13" BR2_LINUX_KERNEL_PATCH="" # BR2_LINUX_KERNEL_USE_DEFCONFIG is not set # BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG is not set @@ -475,31 +476,19 @@ BR2_PACKAGE_SKELETON_INIT_SYSV=y # BR2_PACKAGE_BLUEZ_ALSA is not set # BR2_PACKAGE_DVBLAST is not set # BR2_PACKAGE_DVDAUTHOR is not set - -# -# dvdrw-tools needs a toolchain w/ threads, C++, wchar -# - -# -# espeak needs a toolchain w/ C++, wchar, threads, dynamic library -# +# BR2_PACKAGE_DVDRW_TOOLS is not set +# BR2_PACKAGE_ESPEAK is not set # BR2_PACKAGE_FAAD2 is not set BR2_PACKAGE_FFMPEG_ARCH_SUPPORTS=y # BR2_PACKAGE_FFMPEG is not set # BR2_PACKAGE_FLAC is not set # BR2_PACKAGE_FLITE is not set # BR2_PACKAGE_FLUID_SOUNDFONT is not set - -# -# fluidsynth needs a toolchain w/ threads, wchar, dynamic library, C++ -# +# BR2_PACKAGE_FLUIDSYNTH is not set # BR2_PACKAGE_GMRENDER_RESURRECT is not set # BR2_PACKAGE_GSTREAMER1 is not set # BR2_PACKAGE_JACK1 is not set - -# -# jack2 needs a toolchain w/ threads, C++, dynamic library -# +# BR2_PACKAGE_JACK2 is not set BR2_PACKAGE_KODI_ARCH_SUPPORTS=y # @@ -521,31 +510,16 @@ BR2_PACKAGE_KODI_ARCH_SUPPORTS=y # # miraclecast needs systemd and a glibc toolchain w/ threads and wchar # - -# -# mjpegtools needs a toolchain w/ C++, threads -# - -# -# modplugtools needs a toolchain w/ C++ -# +# BR2_PACKAGE_MJPEGTOOLS is not set +# BR2_PACKAGE_MODPLUGTOOLS is not set # BR2_PACKAGE_MOTION is not set - -# -# mpd needs a toolchain w/ C++, threads, wchar, gcc >= 8, host gcc >= 8 -# +# BR2_PACKAGE_MPD is not set # BR2_PACKAGE_MPD_MPC is not set # BR2_PACKAGE_MPG123 is not set - -# -# mpv needs a toolchain w/ C++, NPTL, gcc >= 4.9 -# +# BR2_PACKAGE_MPV is not set # BR2_PACKAGE_MULTICAT is not set # BR2_PACKAGE_MUSEPACK is not set - -# -# ncmpc needs a toolchain w/ C++, wchar, threads, gcc >= 10 -# +# BR2_PACKAGE_NCMPC is not set # BR2_PACKAGE_OPUS_TOOLS is not set # BR2_PACKAGE_PIPEWIRE is not set BR2_PACKAGE_PULSEAUDIO_HAS_ATOMIC=y @@ -554,59 +528,31 @@ BR2_PACKAGE_PULSEAUDIO_HAS_ATOMIC=y # BR2_PACKAGE_SPEECHD is not set # BR2_PACKAGE_SQUEEZELITE is not set # BR2_PACKAGE_TINYCOMPRESS is not set - -# -# tovid needs a toolchain w/ NPTL, C++, wchar, gcc >= 4.9 -# # BR2_PACKAGE_TSTOOLS is not set # BR2_PACKAGE_TWOLAME is not set # BR2_PACKAGE_UDPXY is not set - -# -# upmpdcli needs a toolchain w/ C++, NPTL, gcc >= 4.9 -# - -# -# v4l2grab needs a toolchain w/ threads, dynamic library, C++ and headers >= 3.0 -# +# BR2_PACKAGE_UPMPDCLI is not set +# BR2_PACKAGE_V4L2GRAB is not set # BR2_PACKAGE_V4L2LOOPBACK is not set - -# -# vlc needs a toolchain w/ C++, dynamic library, wchar, threads, gcc >= 4.9, headers >= 3.7 -# +# BR2_PACKAGE_VLC is not set # BR2_PACKAGE_VORBIS_TOOLS is not set # BR2_PACKAGE_WAVPACK is not set # BR2_PACKAGE_YAVTA is not set # BR2_PACKAGE_YMPD is not set - -# -# zynaddsubfx needs a toolchain w/ C++11 and threads -# +# BR2_PACKAGE_ZYNADDSUBFX is not set # # Compressors and decompressors # # BR2_PACKAGE_BROTLI is not set # BR2_PACKAGE_BZIP2 is not set - -# -# lrzip needs a toolchain w/ wchar, threads, C++ -# - -# -# lzip needs a toolchain w/ C++ -# +# BR2_PACKAGE_LRZIP is not set +# BR2_PACKAGE_LZIP is not set # BR2_PACKAGE_LZOP is not set - -# -# p7zip needs a toolchain w/ threads, wchar, C++ -# +# BR2_PACKAGE_P7ZIP is not set # BR2_PACKAGE_PIGZ is not set # BR2_PACKAGE_PIXZ is not set - -# -# unrar needs a toolchain w/ C++, wchar, threads, gcc >= 4.8 -# +# BR2_PACKAGE_UNRAR is not set # BR2_PACKAGE_XZ is not set # BR2_PACKAGE_ZIP is not set # BR2_PACKAGE_ZSTD is not set @@ -616,10 +562,7 @@ BR2_PACKAGE_PULSEAUDIO_HAS_ATOMIC=y # # BR2_PACKAGE_BABELTRACE2 is not set # BR2_PACKAGE_BLKTRACE is not set - -# -# bonnie++ needs a toolchain w/ C++ -# +# BR2_PACKAGE_BONNIE is not set # BR2_PACKAGE_CACHE_CALIBRATOR is not set # @@ -641,16 +584,10 @@ BR2_PACKAGE_DHRYSTONE=y # BR2_PACKAGE_DROPWATCH is not set # BR2_PACKAGE_DSTAT is not set # BR2_PACKAGE_DT is not set - -# -# duma needs a toolchain w/ C++, threads, dynamic library -# +# BR2_PACKAGE_DUMA is not set # BR2_PACKAGE_FIO is not set BR2_PACKAGE_GDB_ARCH_SUPPORTS=y - -# -# gdb/gdbserver >= 8.x needs a toolchain w/ C++, gcc >= 4.8 -# +# BR2_PACKAGE_GDB is not set # BR2_PACKAGE_IOZONE is not set # BR2_PACKAGE_KMEMD is not set # BR2_PACKAGE_LATENCYTOP is not set @@ -669,23 +606,13 @@ BR2_PACKAGE_LTP_TESTSUITE_ARCH_SUPPORTS=y # BR2_PACKAGE_PAX_UTILS is not set BR2_PACKAGE_PERFTEST_ARCH_SUPPORTS=y # BR2_PACKAGE_PERFTEST is not set - -# -# piglit needs a glibc or musl toolchain w/ C++ -# # BR2_PACKAGE_POKE is not set # BR2_PACKAGE_PV is not set # BR2_PACKAGE_RAMSMP is not set BR2_PACKAGE_RAMSPEED=y # BR2_PACKAGE_RT_TESTS is not set - -# -# rwmem needs a toolchain w/ C++, wchar, gcc >= 5 -# - -# -# signal-estimator needs a toochain w/ C++, threads, gcc >= 7 -# +# BR2_PACKAGE_RWMEM is not set +# BR2_PACKAGE_SIGNAL_ESTIMATOR is not set # BR2_PACKAGE_SPIDEV_TEST is not set # BR2_PACKAGE_STRACE is not set # BR2_PACKAGE_STRESS is not set @@ -709,33 +636,18 @@ BR2_PACKAGE_WHETSTONE=y # BR2_PACKAGE_BSDIFF is not set # BR2_PACKAGE_CHECK is not set BR2_PACKAGE_CMAKE_ARCH_SUPPORTS=y - -# -# ctest needs a toolchain w/ C++, wchar, dynamic library, gcc >= 4.7, NPTL -# - -# -# cppunit needs a toolchain w/ C++, dynamic library -# +# BR2_PACKAGE_CMAKE_CTEST is not set +# BR2_PACKAGE_CPPUNIT is not set # BR2_PACKAGE_CUKINIA is not set # BR2_PACKAGE_CUNIT is not set # BR2_PACKAGE_CVS is not set - -# -# cxxtest needs a toolchain w/ C++ support -# +# BR2_PACKAGE_CXXTEST is not set # BR2_PACKAGE_FLEX is not set # BR2_PACKAGE_GETTEXT is not set BR2_PACKAGE_PROVIDES_HOST_GETTEXT="host-gettext-tiny" # BR2_PACKAGE_GIT is not set - -# -# git-crypt needs a toolchain w/ C++, gcc >= 4.9 -# - -# -# gperf needs a toolchain w/ C++ -# +# BR2_PACKAGE_GIT_CRYPT is not set +# BR2_PACKAGE_GPERF is not set # BR2_PACKAGE_JO is not set # BR2_PACKAGE_JQ is not set # BR2_PACKAGE_LIBTOOL is not set @@ -837,17 +749,15 @@ BR2_PACKAGE_PROVIDES_HOST_GETTEXT="host-gettext-tiny" # # BR2_PACKAGE_ASCII_INVADERS is not set # BR2_PACKAGE_CHOCOLATE_DOOM is not set - -# -# flare-engine needs a toolchain w/ C++, dynamic library -# +# BR2_PACKAGE_FLARE_ENGINE is not set # BR2_PACKAGE_FROTZ is not set - -# -# gnuchess needs a toolchain w/ C++, threads -# +# BR2_PACKAGE_GNUCHESS is not set # BR2_PACKAGE_LBREAKOUT2 is not set # BR2_PACKAGE_LTRIS is not set + +# +# minetest needs X11 and an OpenGL provider +# # BR2_PACKAGE_OPENTYRIAN is not set # BR2_PACKAGE_PRBOOM is not set # BR2_PACKAGE_SL is not set @@ -855,10 +765,7 @@ BR2_PACKAGE_PROVIDES_HOST_GETTEXT="host-gettext-tiny" # # solarus needs OpenGL and a toolchain w/ C++, gcc >= 4.9, NPTL, dynamic library, and luajit or lua 5.1 # - -# -# stella needs a toolchain w/ dynamic library, C++, threads, gcc >= 7 -# +# BR2_PACKAGE_STELLA is not set # BR2_PACKAGE_XORCURSES is not set # @@ -880,7 +787,7 @@ BR2_PACKAGE_PROVIDES_HOST_GETTEXT="host-gettext-tiny" # BR2_PACKAGE_GHOSTSCRIPT is not set # -# glmark2 needs a toolchain w/ C++, gcc >= 4.9 +# glmark2 needs an OpenGL or an openGL ES and EGL backend # # @@ -892,16 +799,9 @@ BR2_PACKAGE_PROVIDES_HOST_GETTEXT="host-gettext-tiny" # # kmscube needs EGL, GBM and OpenGL ES, and a toolchain w/ thread support # - -# -# libva-utils needs a toolchain w/ C++, threads, dynamic library -# +# BR2_PACKAGE_LIBVA_UTILS is not set BR2_PACKAGE_MIDORI_ARCH_SUPPORTS=y -# -# midori needs a glibc toolchain w/ C++, wchar, threads, dynamic library, gcc >= 7, host gcc >= 8 -# - # # midori needs libgtk3 w/ X11 or wayland backend # @@ -917,58 +817,29 @@ BR2_PACKAGE_NETSURF_ARCH_SUPPORTS=y # # sway needs systemd, udev, EGL w/ Wayland backend and OpenGL ES support # - -# -# sway needs a toolchain w/ wchar, threads, C++, dynamic library, gcc >= 4.9 -# - -# -# tesseract-ocr needs a toolchain w/ threads, C++, gcc >= 7, dynamic library, wchar -# +# BR2_PACKAGE_TESSERACT_OCR is not set # BR2_PACKAGE_TINIFIER is not set # # Graphic libraries # - -# -# cegui needs a toolchain w/ C++, threads, dynamic library, wchar, gcc >= 5 -# - -# -# directfb needs a glibc or uClibc toolchain w/ C++, NPTL, gcc >= 4.5, dynamic library -# - -# -# efl needs a toolchain w/ C++, dynamic library, gcc >= 4.9, host gcc >= 4.9, threads, wchar -# +# BR2_PACKAGE_CEGUI is not set +# BR2_PACKAGE_DIRECTFB is not set # BR2_PACKAGE_FB_TEST_APP is not set # BR2_PACKAGE_FBDUMP is not set # BR2_PACKAGE_FBGRAB is not set - -# -# fbterm needs a toolchain w/ C++, wchar, locale -# +# BR2_PACKAGE_FBTERM is not set # BR2_PACKAGE_FBV is not set - -# -# freerdp needs a toolchain w/ wchar, dynamic library, threads, C++ -# +# BR2_PACKAGE_FREERDP is not set # BR2_PACKAGE_GRAPHICSMAGICK is not set # BR2_PACKAGE_IMAGEMAGICK is not set # BR2_PACKAGE_LIBGLVND is not set # BR2_PACKAGE_LINUX_FUSION is not set +# BR2_PACKAGE_MESA3D is not set +# BR2_PACKAGE_OCRAD is not set # -# mesa3d needs a toolchain w/ gcc >=8, C++, NPTL, dynamic library -# - -# -# ocrad needs a toolchain w/ C++ -# - -# -# ogre needs a toolchain w/ C++, dynamic library, gcc >= 4.8, threads, wchar +# ogre needs X11 and an OpenGL provider # # BR2_PACKAGE_PSPLASH is not set # BR2_PACKAGE_SDL is not set @@ -978,10 +849,7 @@ BR2_PACKAGE_NETSURF_ARCH_SUPPORTS=y # # Other GUIs # - -# -# Qt5 needs host g++ >= 5.0, and a toolchain w/ gcc >= 5.0, wchar, NPTL, C++, dynamic library -# +# BR2_PACKAGE_QT5 is not set # # tekui needs a Lua interpreter and a toolchain w/ threads, dynamic library @@ -991,18 +859,7 @@ BR2_PACKAGE_NETSURF_ARCH_SUPPORTS=y # weston needs udev and a toolchain w/ locale, threads, dynamic library, headers >= 3.0 # # BR2_PACKAGE_XORG7 is not set - -# -# apitrace needs a toolchain w/ C++, wchar, dynamic library, threads, gcc >= 7 -# - -# -# mupdf needs a toolchain w/ C++, gcc >= 4.9 -# - -# -# vte needs a uClibc or glibc toolchain w/ wchar, threads, C++, gcc >= 10 -# +# BR2_PACKAGE_APITRACE is not set # # vte needs an OpenGL or an OpenGL-EGL/wayland backend @@ -1032,16 +889,10 @@ BR2_PACKAGE_NETSURF_ARCH_SUPPORTS=y # BR2_PACKAGE_18XX_TI_UTILS is not set # BR2_PACKAGE_ACPICA is not set # BR2_PACKAGE_ACPID is not set - -# -# acpitool needs a toolchain w/ threads, C++, dynamic library -# +# BR2_PACKAGE_ACPITOOL is not set # BR2_PACKAGE_AER_INJECT is not set # BR2_PACKAGE_ALTERA_STAPL is not set - -# -# apcupsd needs a toolchain w/ C++, threads -# +# BR2_PACKAGE_APCUPSD is not set # BR2_PACKAGE_AVRDUDE is not set # @@ -1052,10 +903,7 @@ BR2_PACKAGE_NETSURF_ARCH_SUPPORTS=y # brickd needs udev /dev management, a toolchain w/ threads, wchar # # BR2_PACKAGE_BRLTTY is not set - -# -# cc-tool needs a toolchain w/ C++, threads, wchar, gcc >= 4.9 -# +# BR2_PACKAGE_CC_TOOL is not set # BR2_PACKAGE_CDRKIT is not set # BR2_PACKAGE_CRUCIBLE is not set # BR2_PACKAGE_CRYPTSETUP is not set @@ -1067,10 +915,7 @@ BR2_PACKAGE_NETSURF_ARCH_SUPPORTS=y # # dbusbroker needs systemd and a toolchain w/ threads # - -# -# dbus-cxx needs a toolchain w/ C++, threads, gcc >= 7 and dynamic library support -# +# BR2_PACKAGE_DBUS_CXX is not set # BR2_PACKAGE_DFU_UTIL is not set # BR2_PACKAGE_DMRAID is not set @@ -1082,10 +927,7 @@ BR2_PACKAGE_NETSURF_ARCH_SUPPORTS=y # BR2_PACKAGE_DUMP1090 is not set # BR2_PACKAGE_DVB_APPS is not set # BR2_PACKAGE_DVBSNOOP is not set - -# -# edid-decode needs a toolchain w/ C++, gcc >= 4.7 -# +# BR2_PACKAGE_EDID_DECODE is not set # # eudev needs eudev /dev management @@ -1097,15 +939,11 @@ BR2_PACKAGE_NETSURF_ARCH_SUPPORTS=y BR2_PACKAGE_FLASHROM_ARCH_SUPPORTS=y # BR2_PACKAGE_FLASHROM is not set # BR2_PACKAGE_FMTOOLS is not set -BR2_PACKAGE_FPGA_AXI_SDC=y # BR2_PACKAGE_FREEIPMI is not set # BR2_PACKAGE_FXLOAD is not set # BR2_PACKAGE_GPM is not set # BR2_PACKAGE_GPSD is not set - -# -# gptfdisk needs a toolchain w/ C++ -# +# BR2_PACKAGE_GPTFDISK is not set # BR2_PACKAGE_GVFS is not set # BR2_PACKAGE_HDDTEMP is not set # BR2_PACKAGE_HWDATA is not set @@ -1115,25 +953,16 @@ BR2_PACKAGE_FPGA_AXI_SDC=y # BR2_PACKAGE_IRDA_UTILS is not set # BR2_PACKAGE_KBD is not set # BR2_PACKAGE_LCDPROC is not set - -# -# libiec61850 needs a toolchain w/ C++, threads, dynamic library -# +# BR2_PACKAGE_LIBIEC61850 is not set # BR2_PACKAGE_LIBMANETTE is not set # BR2_PACKAGE_LIBUBOOTENV is not set # BR2_PACKAGE_LIBUIO is not set # BR2_PACKAGE_LINUX_BACKPORTS is not set # BR2_PACKAGE_LINUX_SERIAL_TEST is not set # BR2_PACKAGE_LINUXCONSOLETOOLS is not set - -# -# lirc-tools needs a toolchain w/ threads, dynamic library, C++ -# +# BR2_PACKAGE_LIRC_TOOLS is not set # BR2_PACKAGE_LM_SENSORS is not set - -# -# lshw needs a toolchain w/ C++, wchar -# +# BR2_PACKAGE_LSHW is not set # BR2_PACKAGE_LSSCSI is not set # BR2_PACKAGE_LSUIO is not set # BR2_PACKAGE_LUKSMETA is not set @@ -1150,25 +979,16 @@ BR2_PACKAGE_FPGA_AXI_SDC=y # BR2_PACKAGE_NVIDIA_MODPROBE is not set # BR2_PACKAGE_NVME is not set # BR2_PACKAGE_OFONO is not set - -# -# ola needs a toolchain w/ C++, threads, dynamic library, gcc >= 4.8 -# +# BR2_PACKAGE_OLA is not set # BR2_PACKAGE_OPEN2300 is not set - -# -# openfpgaloader needs a toolchain w/ threads, C++, gcc >= 4.9 -# +# BR2_PACKAGE_OPENFPGALOADER is not set # BR2_PACKAGE_OPENIPMI is not set # BR2_PACKAGE_OPENOCD is not set # BR2_PACKAGE_PARTED is not set # BR2_PACKAGE_PCIUTILS is not set # BR2_PACKAGE_PDBG is not set # BR2_PACKAGE_PICOCOM is not set - -# -# powertop needs a toolchain w/ C++, threads, wchar -# +# BR2_PACKAGE_POWERTOP is not set # BR2_PACKAGE_PPS_TOOLS is not set # BR2_PACKAGE_QORIQ_CADENCE_DP_FIRMWARE is not set # BR2_PACKAGE_RASPI_GPIO is not set @@ -1193,10 +1013,7 @@ BR2_PACKAGE_FPGA_AXI_SDC=y # BR2_PACKAGE_SG3_UTILS is not set # BR2_PACKAGE_SIGROK_CLI is not set # BR2_PACKAGE_SISPMCTL is not set - -# -# smartmontools needs a toolchain w/ C++ -# +# BR2_PACKAGE_SMARTMONTOOLS is not set # BR2_PACKAGE_SMSTOOLS3 is not set # BR2_PACKAGE_SPI_TOOLS is not set # BR2_PACKAGE_SREDIRD is not set @@ -1225,10 +1042,7 @@ BR2_PACKAGE_FPGA_AXI_SDC=y # # BR2_PACKAGE_USB_MODESWITCH is not set # BR2_PACKAGE_USB_MODESWITCH_DATA is not set - -# -# usbguard needs a toolchain w/ C++, threads, dynamic library, gcc >= 8 -# +# BR2_PACKAGE_USBGUARD is not set # # usbmount requires udev to be enabled @@ -1283,21 +1097,12 @@ BR2_PACKAGE_PHP_ARCH_SUPPORTS=y # Audio/Sound # # BR2_PACKAGE_ALSA_LIB is not set - -# -# alure needs a toolchain w/ C++, gcc >= 4.9, NPTL, wchar -# +# BR2_PACKAGE_ALURE is not set # BR2_PACKAGE_AUBIO is not set # BR2_PACKAGE_BCG729 is not set - -# -# caps needs a toolchain w/ C++, dynamic library -# +# BR2_PACKAGE_CAPS is not set # BR2_PACKAGE_LIBAO is not set - -# -# asplib needs a toolchain w/ C++ -# +# BR2_PACKAGE_LIBASPLIB is not set # BR2_PACKAGE_LIBBROADVOICE is not set # BR2_PACKAGE_LIBCDAUDIO is not set # BR2_PACKAGE_LIBCDDB is not set @@ -1313,41 +1118,23 @@ BR2_PACKAGE_PHP_ARCH_SUPPORTS=y # BR2_PACKAGE_LIBILBC is not set # BR2_PACKAGE_LIBLO is not set # BR2_PACKAGE_LIBMAD is not set - -# -# libmodplug needs a toolchain w/ C++ -# +# BR2_PACKAGE_LIBMODPLUG is not set # BR2_PACKAGE_LIBMPD is not set # BR2_PACKAGE_LIBMPDCLIENT is not set # BR2_PACKAGE_LIBREPLAYGAIN is not set # BR2_PACKAGE_LIBSAMPLERATE is not set - -# -# libsidplay2 needs a toolchain w/ C++ -# +# BR2_PACKAGE_LIBSIDPLAY2 is not set # BR2_PACKAGE_LIBSILK is not set # BR2_PACKAGE_LIBSNDFILE is not set - -# -# libsoundtouch needs a toolchain w/ C++ -# +# BR2_PACKAGE_LIBSOUNDTOUCH is not set # BR2_PACKAGE_LIBSOXR is not set # BR2_PACKAGE_LIBVORBIS is not set # BR2_PACKAGE_LILV is not set # BR2_PACKAGE_LV2 is not set - -# -# mp4v2 needs a toolchain w/ C++ -# +# BR2_PACKAGE_MP4V2 is not set BR2_PACKAGE_OPENAL_ARCH_SUPPORTS=y - -# -# openal needs a toolchain w/ NPTL, C++, gcc >= 4.9 -# - -# -# opencore-amr needs a toolchain w/ C++ -# +# BR2_PACKAGE_OPENAL is not set +# BR2_PACKAGE_OPENCORE_AMR is not set # BR2_PACKAGE_OPUS is not set # BR2_PACKAGE_OPUSFILE is not set # BR2_PACKAGE_PORTAUDIO is not set @@ -1356,10 +1143,7 @@ BR2_PACKAGE_OPENAL_ARCH_SUPPORTS=y # BR2_PACKAGE_SPEEX is not set # BR2_PACKAGE_SPEEXDSP is not set # BR2_PACKAGE_SRATOM is not set - -# -# taglib needs a toolchain w/ C++, wchar -# +# BR2_PACKAGE_TAGLIB is not set # BR2_PACKAGE_TINYALSA is not set # BR2_PACKAGE_TREMOR is not set # BR2_PACKAGE_VO_AACENC is not set @@ -1370,19 +1154,13 @@ BR2_PACKAGE_OPENAL_ARCH_SUPPORTS=y # BR2_PACKAGE_LIBARCHIVE is not set # BR2_PACKAGE_LIBDEFLATE is not set # BR2_PACKAGE_LIBMSPACK is not set - -# -# libsquish needs a toolchain w/ C++ -# +# BR2_PACKAGE_LIBSQUISH is not set # BR2_PACKAGE_LIBZIP is not set # BR2_PACKAGE_LZ4 is not set # BR2_PACKAGE_LZO is not set # BR2_PACKAGE_MINIZIP is not set # BR2_PACKAGE_MINIZIP_ZLIB is not set - -# -# snappy needs a toolchain w/ C++ -# +# BR2_PACKAGE_SNAPPY is not set # BR2_PACKAGE_SZIP is not set # BR2_PACKAGE_ZCHUNK is not set BR2_PACKAGE_ZLIB_NG_ARCH_SUPPORTS=y @@ -1396,16 +1174,10 @@ BR2_PACKAGE_PROVIDES_HOST_ZLIB="host-libzlib" # BR2_PACKAGE_BEARSSL is not set # BR2_PACKAGE_BEECRYPT is not set BR2_PACKAGE_BOTAN_ARCH_SUPPORTS=y - -# -# botan needs a toolchain w/ C++, threads, gcc >= 4.8 -# +# BR2_PACKAGE_BOTAN is not set # BR2_PACKAGE_CA_CERTIFICATES is not set # BR2_PACKAGE_CRYPTODEV is not set - -# -# cryptopp needs a toolchain w/ C++, dynamic library, wchar -# +# BR2_PACKAGE_CRYPTOPP is not set # BR2_PACKAGE_GCR is not set # BR2_PACKAGE_GNUTLS is not set # BR2_PACKAGE_LIBARGON2 is not set @@ -1421,10 +1193,7 @@ BR2_PACKAGE_LIBGPG_ERROR_SYSCFG="riscv64-unknown-linux-gnu" # BR2_PACKAGE_LIBMD is not set # BR2_PACKAGE_LIBMHASH is not set # BR2_PACKAGE_LIBNSS is not set - -# -# libolm needs a toolchain w/ C++, gcc >= 4.8 -# +# BR2_PACKAGE_LIBOLM is not set # BR2_PACKAGE_LIBP11 is not set # BR2_PACKAGE_LIBSCRYPT is not set # BR2_PACKAGE_LIBSECRET is not set @@ -1456,26 +1225,14 @@ BR2_PACKAGE_WOLFSSL_ASM_SUPPORTS=y # BR2_PACKAGE_BERKELEYDB is not set # BR2_PACKAGE_GDBM is not set # BR2_PACKAGE_HIREDIS is not set - -# -# kompexsqlite needs a toolchain w/ C++, wchar, threads, dynamic library -# - -# -# leveldb needs a toolchain w/ C++, threads, gcc >= 4.8 -# +# BR2_PACKAGE_KOMPEXSQLITE is not set +# BR2_PACKAGE_LEVELDB is not set # BR2_PACKAGE_LIBDBI is not set # BR2_PACKAGE_LIBDBI_DRIVERS is not set # BR2_PACKAGE_LIBGIT2 is not set # BR2_PACKAGE_LIBMDBX is not set - -# -# libodb needs a toolchain w/ C++, threads -# - -# -# mysql needs a toolchain w/ C++, threads -# +# BR2_PACKAGE_LIBODB is not set +# BR2_PACKAGE_MYSQL is not set # BR2_PACKAGE_POSTGRESQL is not set # BR2_PACKAGE_REDIS is not set # BR2_PACKAGE_SQLCIPHER is not set @@ -1494,52 +1251,25 @@ BR2_PACKAGE_WOLFSSL_ASM_SUPPORTS=y # BR2_PACKAGE_LIBNFS is not set # BR2_PACKAGE_LIBSYSFS is not set # BR2_PACKAGE_LOCKDEV is not set - -# -# physfs needs a toolchain w/ C++, threads -# +# BR2_PACKAGE_PHYSFS is not set # # Graphics # - -# -# assimp needs a toolchain w/ C++, wchar, gcc >= 7 -# +# BR2_PACKAGE_ASSIMP is not set # BR2_PACKAGE_AT_SPI2_CORE is not set - -# -# atkmm needs a toolchain w/ C++, wchar, threads, gcc >= 7 -# - -# -# atkmm (2.28.x) needs a toolchain w/ C++, wchar, threads, gcc >= 4.9 -# - -# -# bullet needs a toolchain w/ C++, dynamic library, threads, wchar -# +# BR2_PACKAGE_ATKMM is not set +# BR2_PACKAGE_ATKMM2_28 is not set +# BR2_PACKAGE_BULLET is not set # BR2_PACKAGE_CAIRO is not set - -# -# cairomm needs a toolchain w/ C++, wchar, threads, gcc >= 7 -# - -# -# cairomm (1.14.x) needs a toolchain w/ C++, wchar, threads, gcc >= 4.9 -# +# BR2_PACKAGE_CAIROMM is not set +# BR2_PACKAGE_CAIROMM1_14 is not set # # chipmunk needs an OpenGL backend # - -# -# exempi needs a toolchain w/ C++, dynamic library, threads, wchar -# - -# -# exiv2 needs a uClibc or glibc toolchain w/ C++, wchar, dynamic library, threads -# +# BR2_PACKAGE_EXEMPI is not set +# BR2_PACKAGE_EXIV2 is not set # BR2_PACKAGE_FONTCONFIG is not set # BR2_PACKAGE_FREETYPE is not set # BR2_PACKAGE_GD is not set @@ -1549,40 +1279,24 @@ BR2_PACKAGE_WOLFSSL_ASM_SUPPORTS=y # # granite needs libgtk3 and a toolchain w/ wchar, threads, gcc >= 4.9 # - -# -# graphite2 needs a toolchain w/ C++ -# +# BR2_PACKAGE_GRAPHITE2 is not set # # gtkmm3 needs libgtk3 and a toolchain w/ C++, wchar, threads, gcc >= 4.9 # - -# -# harfbuzz needs a toolchain w/ C++, gcc >= 4.9 -# +# BR2_PACKAGE_HARFBUZZ is not set # BR2_PACKAGE_IJS is not set # BR2_PACKAGE_IMLIB2 is not set # -# intel-gmmlib needs a toolchain w/ dynamic library, C++, threads -# - -# -# irrlicht needs a toolchain w/ C++ +# irrlicht needs X11 and an OpenGL provider # # BR2_PACKAGE_JASPER is not set # BR2_PACKAGE_JBIG2DEC is not set # BR2_PACKAGE_JPEG is not set - -# -# kms++ needs a toolchain w/ threads, C++, gcc >= 4.8, headers >= 4.11, wchar -# +# BR2_PACKAGE_KMSXX is not set # BR2_PACKAGE_LCMS2 is not set - -# -# lensfun needs a toolchain w/ C++, threads, wchar -# +# BR2_PACKAGE_LENSFUN is not set # BR2_PACKAGE_LEPTONICA is not set # BR2_PACKAGE_LIBART is not set # BR2_PACKAGE_LIBDMTX is not set @@ -1601,14 +1315,8 @@ BR2_PACKAGE_WOLFSSL_ASM_SUPPORTS=y # # libfreeglut depends on X.org and needs an OpenGL backend # - -# -# libfreeimage needs a toolchain w/ C++, dynamic library, wchar -# - -# -# libgeotiff needs a toolchain w/ C++, gcc >= 4.7, threads, wchar -# +# BR2_PACKAGE_LIBFREEIMAGE is not set +# BR2_PACKAGE_LIBGEOTIFF is not set # # libglew depends on X.org and needs an OpenGL backend @@ -1623,64 +1331,33 @@ BR2_PACKAGE_WOLFSSL_ASM_SUPPORTS=y # # BR2_PACKAGE_LIBGTA is not set -# -# libgtk3 needs a toolchain w/ wchar, threads, C++, gcc >= 4.9 -# - # # libgtk3 needs an OpenGL or an OpenGL-EGL/wayland backend # - -# -# libjxl needs a toolchain with C++, threads, gcc >= 7, dynamic library -# +# BR2_PACKAGE_LIBJXL is not set # BR2_PACKAGE_LIBMEDIAART is not set # BR2_PACKAGE_LIBMNG is not set # BR2_PACKAGE_LIBPNG is not set # BR2_PACKAGE_LIBQRENCODE is not set - -# -# libraw needs a toolchain w/ C++ -# +# BR2_PACKAGE_LIBRAW is not set # BR2_PACKAGE_LIBSVG is not set # BR2_PACKAGE_LIBSVG_CAIRO is not set # BR2_PACKAGE_LIBSVGTINY is not set # BR2_PACKAGE_LIBVA is not set - -# -# libvips needs a toolchain w/ wchar, threads, C++ -# +# BR2_PACKAGE_LIBVIPS is not set # # libwpe needs a toolchain w/ C++, dynamic library and an OpenEGL-capable backend # # BR2_PACKAGE_MENU_CACHE is not set - -# -# opencv3 needs a toolchain w/ C++, NPTL, wchar, dynamic library -# - -# -# opencv4 needs a toolchain w/ C++, NPTL, wchar, dynamic library, gcc >= 4.8 -# +# BR2_PACKAGE_OPENCV3 is not set +# BR2_PACKAGE_OPENCV4 is not set # BR2_PACKAGE_OPENJPEG is not set - -# -# pango needs a toolchain w/ wchar, threads, C++, gcc >= 4.9 -# - -# -# pangomm needs a toolchain w/ C++, wchar, threads, gcc >= 7 -# - -# -# pangomm (2.46.x) needs a toolchain w/ C++, wchar, threads, gcc >= 4.9 -# +# BR2_PACKAGE_PANGO is not set +# BR2_PACKAGE_PANGOMM is not set +# BR2_PACKAGE_PANGOMM2_46 is not set # BR2_PACKAGE_PIXMAN is not set - -# -# poppler needs a toolchain w/ wchar, C++, threads, dynamic library, gcc >= 7 -# +# BR2_PACKAGE_POPPLER is not set # BR2_PACKAGE_STB is not set # BR2_PACKAGE_TIFF is not set # BR2_PACKAGE_WAYLAND is not set @@ -1694,31 +1371,18 @@ BR2_PACKAGE_WEBKITGTK_ARCH_SUPPORTS=y # # wlroots needs udev, EGL w/ Wayland backend and OpenGL ES support # - -# -# woff2 needs a toolchain w/ C++ -# +# BR2_PACKAGE_WOFF2 is not set # # wpebackend-fdo needs a toolchain w/ C++, wchar, threads, dynamic library and an OpenEGL-capable Wayland backend # BR2_PACKAGE_WPEWEBKIT_ARCH_SUPPORTS=y -# -# wpewebkit needs a toolchain w/ C++, wchar, threads, dynamic library, gcc >= 7, host gcc >= 4.9 -# - # # wpewebkit needs an OpenGL ES w/ EGL-capable Wayland backend # - -# -# zbar needs a toolchain w/ threads, C++ and headers >= 3.0 -# - -# -# zxing-cpp needs a toolchain w/ C++, wchar, dynamic library -# +# BR2_PACKAGE_ZBAR is not set +# BR2_PACKAGE_ZXING_CPP is not set # # Hardware handling @@ -1733,14 +1397,8 @@ BR2_PACKAGE_WPEWEBKIT_ARCH_SUPPORTS=y # hidapi needs udev /dev management and a toolchain w/ NPTL, threads, gcc >= 4.9 # # BR2_PACKAGE_JITTERENTROPY_LIBRARY is not set - -# -# lcdapi needs a toolchain w/ C++, threads -# - -# -# let-me-create needs a toolchain w/ C++, threads, dynamic library -# +# BR2_PACKAGE_LCDAPI is not set +# BR2_PACKAGE_LET_ME_CREATE is not set # BR2_PACKAGE_LIBAIO is not set # @@ -1750,10 +1408,7 @@ BR2_PACKAGE_WPEWEBKIT_ARCH_SUPPORTS=y # # libblockdev needs udev /dev management and a toolchain w/ wchar, threads, dynamic library, locale # - -# -# libcec needs a toolchain w/ C++, wchar, threads, dynamic library, gcc >= 4.7 -# +# BR2_PACKAGE_LIBCEC is not set # BR2_PACKAGE_LIBFREEFARE is not set # BR2_PACKAGE_LIBFTDI is not set # BR2_PACKAGE_LIBFTDI1 is not set @@ -1780,10 +1435,7 @@ BR2_PACKAGE_WPEWEBKIT_ARCH_SUPPORTS=y # BR2_PACKAGE_LIBQRTR_GLIB is not set # BR2_PACKAGE_LIBRAW1394 is not set # BR2_PACKAGE_LIBRTLSDR is not set - -# -# libserial needs a toolchain w/ C++, gcc >= 5, threads, wchar -# +# BR2_PACKAGE_LIBSERIAL is not set # BR2_PACKAGE_LIBSERIALPORT is not set # BR2_PACKAGE_LIBSIGROK is not set # BR2_PACKAGE_LIBSIGROKDECODE is not set @@ -1791,10 +1443,7 @@ BR2_PACKAGE_WPEWEBKIT_ARCH_SUPPORTS=y # BR2_PACKAGE_LIBSS7 is not set # BR2_PACKAGE_LIBUSB is not set # BR2_PACKAGE_LIBUSBGX is not set - -# -# libv4l needs a toolchain w/ threads, C++ and headers >= 3.0 -# +# BR2_PACKAGE_LIBV4L is not set # BR2_PACKAGE_LIBXKBCOMMON is not set # BR2_PACKAGE_MTDEV is not set # BR2_PACKAGE_NEARDAL is not set @@ -1802,14 +1451,8 @@ BR2_PACKAGE_WPEWEBKIT_ARCH_SUPPORTS=y # BR2_PACKAGE_OWFS is not set # BR2_PACKAGE_PCSC_LITE is not set # BR2_PACKAGE_TSLIB is not set - -# -# uhd needs a toolchain w/ C++, NPTL, wchar, dynamic library, gcc >= 5 -# - -# -# urg needs a toolchain w/ C++ -# +# BR2_PACKAGE_UHD is not set +# BR2_PACKAGE_URG is not set # # Javascript @@ -1834,170 +1477,83 @@ BR2_PACKAGE_WPEWEBKIT_ARCH_SUPPORTS=y # # JSON/XML # - -# -# benejson needs a toolchain w/ C++ -# +# BR2_PACKAGE_BENEJSON is not set # BR2_PACKAGE_CJSON is not set # BR2_PACKAGE_EXPAT is not set # BR2_PACKAGE_JANSSON is not set # BR2_PACKAGE_JOSE is not set # BR2_PACKAGE_JSMN is not set # BR2_PACKAGE_JSON_C is not set - -# -# json-for-modern-cpp needs a toolchain w/ C++, gcc >= 4.9 -# +# BR2_PACKAGE_JSON_FOR_MODERN_CPP is not set # BR2_PACKAGE_JSON_GLIB is not set - -# -# jsoncpp needs a toolchain w/ C++, gcc >= 4.7 -# +# BR2_PACKAGE_JSONCPP is not set # BR2_PACKAGE_LIBBSON is not set # BR2_PACKAGE_LIBFASTJSON is not set - -# -# libjson needs a toolchain w/ C++ -# +# BR2_PACKAGE_LIBJSON is not set # BR2_PACKAGE_LIBROXML is not set # BR2_PACKAGE_LIBUCL is not set # BR2_PACKAGE_LIBXML2 is not set - -# -# libxml++ needs a toolchain w/ C++, wchar, threads, gcc >= 7 -# +# BR2_PACKAGE_LIBXMLPP is not set # BR2_PACKAGE_LIBXMLRPC is not set # BR2_PACKAGE_LIBXSLT is not set # BR2_PACKAGE_LIBYAML is not set # BR2_PACKAGE_MXML is not set - -# -# pugixml needs a toolchain w/ C++ -# - -# -# rapidjson needs a toolchain w/ C++ -# +# BR2_PACKAGE_PUGIXML is not set +# BR2_PACKAGE_RAPIDJSON is not set # BR2_PACKAGE_RAPIDXML is not set # BR2_PACKAGE_RAPTOR is not set # BR2_PACKAGE_SERD is not set # BR2_PACKAGE_SORD is not set - -# -# tinyxml needs a toolchain w/ C++ -# - -# -# tinyxml2 needs a toolchain w/ C++ -# - -# -# valijson needs a toolchain w/ C++ -# - -# -# xerces-c++ needs a toolchain w/ C++, dynamic library, wchar -# - -# -# xml-security-c needs a toolchain w/ C++, wchar, dynamic library, threads, gcc >= 4.7 -# +# BR2_PACKAGE_TINYXML is not set +# BR2_PACKAGE_TINYXML2 is not set +# BR2_PACKAGE_VALIJSON is not set +# BR2_PACKAGE_XERCES is not set +# BR2_PACKAGE_XML_SECURITY_C is not set # BR2_PACKAGE_YAJL is not set - -# -# yaml-cpp needs a toolchain w/ C++, gcc >= 4.7 -# +# BR2_PACKAGE_YAML_CPP is not set # # Logging # - -# -# glog needs a toolchain w/ C++ -# - -# -# hawktracer needs a toolchain w/ C++, gcc >= 4.8 -# +# BR2_PACKAGE_GLOG is not set +# BR2_PACKAGE_HAWKTRACER is not set # BR2_PACKAGE_LIBLOG4C_LOCALTIME is not set # BR2_PACKAGE_LIBLOGGING is not set - -# -# log4cplus needs a toolchain w/ C++, wchar, threads, gcc >= 4.8 -# - -# -# log4cpp needs a toolchain w/ C++, threads -# - -# -# log4cxx needs a toolchain w/ C++, threads, dynamic library -# +# BR2_PACKAGE_LOG4CPLUS is not set +# BR2_PACKAGE_LOG4CPP is not set +# BR2_PACKAGE_LOG4CXX is not set # # log4qt needs qt5 # - -# -# opentracing-cpp needs a toolchain w/ C++, threads, dynamic library, gcc >= 4.8 -# - -# -# spdlog needs a toolchain w/ C++, threads, wchar -# - -# -# ulog needs a toolchain w/ C++, threads -# +# BR2_PACKAGE_OPENTRACING_CPP is not set +# BR2_PACKAGE_SPDLOG is not set +# BR2_PACKAGE_ULOG is not set # BR2_PACKAGE_ZLOG is not set # # Multimedia # - -# -# bento4 support needs a toolchain with C++ -# +# BR2_PACKAGE_BENTO4 is not set # BR2_PACKAGE_BITSTREAM is not set # BR2_PACKAGE_DAV1D is not set - -# -# kvazaar needs a toolchain w/ C++, threads -# +# BR2_PACKAGE_KVAZAAR is not set # BR2_PACKAGE_LIBAACS is not set - -# -# libass needs a toolchain w/ C++, gcc >= 4.9 -# +# BR2_PACKAGE_LIBASS is not set # BR2_PACKAGE_LIBBDPLUS is not set # BR2_PACKAGE_LIBBLURAY is not set BR2_PACKAGE_LIBCAMERA_ARCH_SUPPORTS=y - -# -# libcamera needs a toolchain w/ C++, threads, wchar, dynamic library, gcc >= 8 -# - -# -# libcamera-apps needs a toolchain w/ C++, threads, wchar, dynamic library, gcc >= 8 -# +# BR2_PACKAGE_LIBCAMERA is not set +# BR2_PACKAGE_LIBCAMERA_APPS is not set # BR2_PACKAGE_LIBDVBCSA is not set # BR2_PACKAGE_LIBDVBPSI is not set - -# -# libdvbsi++ needs a toolchain w/ C++, wchar, threads -# +# BR2_PACKAGE_LIBDVBSI is not set # BR2_PACKAGE_LIBDVDCSS is not set # BR2_PACKAGE_LIBDVDNAV is not set # BR2_PACKAGE_LIBDVDREAD is not set - -# -# libebml needs a toolchain w/ C++, wchar -# +# BR2_PACKAGE_LIBEBML is not set # BR2_PACKAGE_LIBHDHOMERUN is not set - -# -# libmatroska needs a toolchain w/ C++, wchar -# +# BR2_PACKAGE_LIBMATROSKA is not set # BR2_PACKAGE_LIBMMS is not set # BR2_PACKAGE_LIBMPEG2 is not set # BR2_PACKAGE_LIBOGG is not set @@ -2006,99 +1562,48 @@ BR2_PACKAGE_LIBCAMERA_ARCH_SUPPORTS=y # BR2_PACKAGE_LIBTHEORA is not set # BR2_PACKAGE_LIBUDFREAD is not set # BR2_PACKAGE_LIBVPX is not set - -# -# libyuv needs a toolchain w/ C++, dynamic library -# - -# -# live555 needs a toolchain w/ C++ -# - -# -# mediastreamer needs a toolchain w/ threads, C++, dynamic library, gcc >= 5 -# +# BR2_PACKAGE_LIBYUV is not set +# BR2_PACKAGE_LIVE555 is not set +# BR2_PACKAGE_MEDIASTREAMER is not set # BR2_PACKAGE_X264 is not set - -# -# x265 needs a toolchain w/ C++, threads, dynamic library -# +# BR2_PACKAGE_X265 is not set # # Networking # - -# -# agent++ needs a toolchain w/ threads, C++, dynamic library -# - -# -# azmq needs a toolchain w/ C++11, wchar and threads -# - -# -# azure-iot-sdk-c needs a toolchain w/ C++, NPTL and wchar -# +# BR2_PACKAGE_AGENTPP is not set +# BR2_PACKAGE_AZMQ is not set +# BR2_PACKAGE_AZURE_IOT_SDK_C is not set # BR2_PACKAGE_BATMAN_ADV is not set - -# -# belle-sip needs a toolchain w/ threads, C++, dynamic library, wchar -# +# BR2_PACKAGE_BELLE_SIP is not set # BR2_PACKAGE_C_ARES is not set # BR2_PACKAGE_CGIC is not set # BR2_PACKAGE_CNI_PLUGINS is not set - -# -# cppzmq needs a toolchain w/ C++, threads -# - -# -# curlpp needs a toolchain w/ C++, dynamic library -# - -# -# czmq needs a toolchain w/ C++, threads -# +# BR2_PACKAGE_CPPZMQ is not set +# BR2_PACKAGE_CURLPP is not set +# BR2_PACKAGE_CZMQ is not set # BR2_PACKAGE_DAQ is not set # BR2_PACKAGE_DAQ3 is not set # BR2_PACKAGE_DAVICI is not set # BR2_PACKAGE_DHT is not set # BR2_PACKAGE_ENET is not set - -# -# filemq needs a toolchain w/ C++, threads -# +# BR2_PACKAGE_FILEMQ is not set # BR2_PACKAGE_FLICKCURL is not set # BR2_PACKAGE_FREERADIUS_CLIENT is not set # BR2_PACKAGE_GENSIO is not set # BR2_PACKAGE_GEOIP is not set # BR2_PACKAGE_GLIB_NETWORKING is not set - -# -# grpc needs a toolchain w/ C++, threads, dynamic library, gcc >= 5 -# +# BR2_PACKAGE_GRPC is not set # BR2_PACKAGE_GSSDP is not set # BR2_PACKAGE_GUPNP is not set # BR2_PACKAGE_GUPNP_AV is not set # BR2_PACKAGE_GUPNP_DLNA is not set - -# -# ibrcommon needs a toolchain w/ C++, threads -# - -# -# ibrdtn needs a toolchain w/ C++, threads -# +# BR2_PACKAGE_IBRCOMMON is not set +# BR2_PACKAGE_IBRDTN is not set # BR2_PACKAGE_LIBCGI is not set - -# -# libcgicc needs a toolchain w/ C++ -# +# BR2_PACKAGE_LIBCGICC is not set # BR2_PACKAGE_LIBCOAP is not set - -# -# libcpprestsdk needs a toolchain w/ NPTL, C++, wchar, locale -# +# BR2_PACKAGE_LIBCPPRESTSDK is not set # BR2_PACKAGE_LIBCURL is not set # BR2_PACKAGE_LIBDNET is not set # BR2_PACKAGE_LIBEXOSIP2 is not set @@ -2107,10 +1612,7 @@ BR2_PACKAGE_LIBCAMERA_ARCH_SUPPORTS=y # BR2_PACKAGE_LIBGSASL is not set # BR2_PACKAGE_LIBHTP is not set # BR2_PACKAGE_LIBHTTPPARSER is not set - -# -# libhttpserver needs a toolchain w/ C++, threads, gcc >= 5 -# +# BR2_PACKAGE_LIBHTTPSERVER is not set # BR2_PACKAGE_LIBIDN is not set # BR2_PACKAGE_LIBIDN2 is not set # BR2_PACKAGE_LIBISCSI is not set @@ -2118,18 +1620,12 @@ BR2_PACKAGE_LIBCAMERA_ARCH_SUPPORTS=y # BR2_PACKAGE_LIBLDNS is not set # BR2_PACKAGE_LIBMAXMINDDB is not set # BR2_PACKAGE_LIBMBUS is not set - -# -# libmemcached needs a toolchain w/ C++, threads -# +# BR2_PACKAGE_LIBMEMCACHED is not set # BR2_PACKAGE_LIBMICROHTTPD is not set # BR2_PACKAGE_LIBMINIUPNPC is not set # BR2_PACKAGE_LIBMNL is not set # BR2_PACKAGE_LIBMODBUS is not set - -# -# libmodsecurity needs a toolchain w/ C++, threads, dynamic library -# +# BR2_PACKAGE_LIBMODSECURITY is not set # BR2_PACKAGE_LIBNATPMP is not set # BR2_PACKAGE_LIBNDP is not set # BR2_PACKAGE_LIBNET is not set @@ -2145,19 +1641,13 @@ BR2_PACKAGE_LIBCAMERA_ARCH_SUPPORTS=y # BR2_PACKAGE_LIBNICE is not set # BR2_PACKAGE_LIBNIDS is not set # BR2_PACKAGE_LIBNL is not set - -# -# libnpupnp needs a toolchain w/ C++, threads, gcc >= 4.9 -# +# BR2_PACKAGE_LIBNPUPNP is not set # BR2_PACKAGE_LIBOAUTH is not set # BR2_PACKAGE_LIBOPING is not set # BR2_PACKAGE_LIBOSIP2 is not set # BR2_PACKAGE_LIBPAGEKITE is not set # BR2_PACKAGE_LIBPCAP is not set - -# -# libpjsip needs a toolchain w/ C++, threads -# +# BR2_PACKAGE_LIBPJSIP is not set # BR2_PACKAGE_LIBPSL is not set # BR2_PACKAGE_LIBRELP is not set # BR2_PACKAGE_LIBRSYNC is not set @@ -2170,30 +1660,14 @@ BR2_PACKAGE_LIBCAMERA_ARCH_SUPPORTS=y # BR2_PACKAGE_LIBTEAM is not set # BR2_PACKAGE_LIBTELNET is not set # BR2_PACKAGE_LIBTIRPC is not set - -# -# libtorrent needs a toolchain w/ C++, threads -# - -# -# libtorrent-rasterbar needs a toolchain w/ C++, threads, wchar, gcc >= 4.9 -# +# BR2_PACKAGE_LIBTORRENT is not set +# BR2_PACKAGE_LIBTORRENT_RASTERBAR is not set # BR2_PACKAGE_LIBUEV is not set # BR2_PACKAGE_LIBUHTTPD is not set - -# -# libuhttpd needs a toolchain w/ gcc >= 4.9 -# # BR2_PACKAGE_LIBUPNP is not set - -# -# libupnpp needs a toolchain w/ C++, threads, gcc >= 4.9 -# +# BR2_PACKAGE_LIBUPNPP is not set # BR2_PACKAGE_LIBURIPARSER is not set - -# -# libutp support needs a toolchain with C++ -# +# BR2_PACKAGE_LIBUTP is not set # BR2_PACKAGE_LIBUWSC is not set # BR2_PACKAGE_LIBVNCSERVER is not set # BR2_PACKAGE_LIBWEBSOCK is not set @@ -2204,213 +1678,87 @@ BR2_PACKAGE_LIBCAMERA_ARCH_SUPPORTS=y # BR2_PACKAGE_MONGOOSE is not set # BR2_PACKAGE_NANOMSG is not set # BR2_PACKAGE_NEON is not set - -# -# netopeer2 needs a toolchain w/ gcc >= 4.8, C++, threads, dynamic library -# +# BR2_PACKAGE_NETOPEER2 is not set # BR2_PACKAGE_NGHTTP2 is not set - -# -# norm needs a toolchain w/ C++, threads, dynamic library -# +# BR2_PACKAGE_NORM is not set # BR2_PACKAGE_NSS_MYHOSTNAME is not set # BR2_PACKAGE_NSS_PAM_LDAPD is not set - -# -# omniORB needs a toolchain w/ C++, threads -# +# BR2_PACKAGE_OMNIORB is not set # BR2_PACKAGE_OPEN_ISNS is not set # BR2_PACKAGE_OPEN62541 is not set # BR2_PACKAGE_OPENLDAP is not set - -# -# openmpi needs a toolchain w/ dynamic library, NPTL, wchar, C++ -# +# BR2_PACKAGE_OPENMPI is not set # BR2_PACKAGE_OPENPGM is not set - -# -# openzwave needs a toolchain w/ C++, dynamic library, NPTL, wchar -# - -# -# ortp needs a toolchain w/ C++, threads -# +# BR2_PACKAGE_OPENZWAVE is not set +# BR2_PACKAGE_ORTP is not set # BR2_PACKAGE_PAHO_MQTT_C is not set - -# -# paho-mqtt-cpp needs a toolchain w/ threads, C++ -# - -# -# pistache needs a toolchain w/ C++, gcc >= 7, threads, wchar, not binutils bug 27597 -# +# BR2_PACKAGE_PAHO_MQTT_CPP is not set +# BR2_PACKAGE_PISTACHE is not set # BR2_PACKAGE_QDECODER is not set - -# -# qpid-proton needs a toolchain w/ C++, dynamic library, threads -# +# BR2_PACKAGE_QPID_PROTON is not set # BR2_PACKAGE_RABBITMQ_C is not set - -# -# resiprocate needs a toolchain w/ C++, threads, wchar -# - -# -# restclient-cpp needs a toolchain w/ C++, gcc >= 4.8 -# +# BR2_PACKAGE_RESIPROCATE is not set +# BR2_PACKAGE_RESTCLIENT_CPP is not set # BR2_PACKAGE_RTMPDUMP is not set # BR2_PACKAGE_SIPROXD is not set # BR2_PACKAGE_SLIRP is not set # BR2_PACKAGE_SLIRP4NETNS is not set - -# -# snmp++ needs a toolchain w/ threads, C++, dynamic library -# +# BR2_PACKAGE_SNMPPP is not set # BR2_PACKAGE_SOFIA_SIP is not set # BR2_PACKAGE_SSCEP is not set - -# -# sysrepo needs a toolchain w/ C++, NPTL, dynamic library, gcc >= 4.8 -# - -# -# thrift needs a toolchain w/ C++, wchar, threads -# +# BR2_PACKAGE_SYSREPO is not set +# BR2_PACKAGE_THRIFT is not set # BR2_PACKAGE_USBREDIR is not set - -# -# wampcc needs a toolchain w/ C++, NPTL, dynamic library -# - -# -# websocketpp needs a toolchain w/ C++ and gcc >= 4.8 -# - -# -# zeromq needs a toolchain w/ C++, threads -# - -# -# zmqpp needs a toolchain w/ C++, threads, gcc >= 4.7 -# - -# -# zyre needs a toolchain w/ C++, threads -# +# BR2_PACKAGE_WAMPCC is not set +# BR2_PACKAGE_WEBSOCKETPP is not set +# BR2_PACKAGE_ZEROMQ is not set +# BR2_PACKAGE_ZMQPP is not set +# BR2_PACKAGE_ZYRE is not set # # Other # - -# -# ACE needs a glibc toolchain, dynamic library, C++, gcc >= 4.8 -# +# BR2_PACKAGE_ACE is not set # BR2_PACKAGE_APR is not set # BR2_PACKAGE_APR_UTIL is not set # # armadillo needs a toolchain w/ fortran, C++ # - -# -# atf needs a toolchain w/ C++ -# +# BR2_PACKAGE_ATF is not set # BR2_PACKAGE_AVRO_C is not set - -# -# bctoolbox needs a toolchain w/ C++, threads -# +# BR2_PACKAGE_BCTOOLBOX is not set # BR2_PACKAGE_BDWGC is not set - -# -# belr needs a toolchain w/ threads, C++ -# - -# -# boost needs a toolchain w/ C++, threads, wchar -# - -# -# c-capnproto needs host and target gcc >= 5 w/ C++14, threads, atomic, ucontext and not gcc bug 64735 -# - -# -# capnproto needs host and target gcc >= 5 w/ C++14, threads, atomic, ucontext and not gcc bug 64735 -# - -# -# catch2 needs a toolchain w/ C++, wchar, threads, gcc >= 5 -# - -# -# cctz needs a toolchain w/ C++, threads, gcc >= 4.8 -# - -# -# cereal needs a toolchain w/ C++, gcc >= 4.7, threads, wchar -# - -# -# clang needs a toolchain w/ wchar, threads, C++, gcc >= 5, dynamic library, host gcc >= 5 -# +# BR2_PACKAGE_BELR is not set +# BR2_PACKAGE_BOOST is not set +# BR2_PACKAGE_C_CAPNPROTO is not set +# BR2_PACKAGE_CAPNPROTO is not set +# BR2_PACKAGE_CATCH2 is not set +# BR2_PACKAGE_CCTZ is not set +# BR2_PACKAGE_CEREAL is not set +# BR2_PACKAGE_CLANG is not set # BR2_PACKAGE_CMOCKA is not set - -# -# cppcms needs a toolchain w/ C++, NPTL, wchar, dynamic library -# +# BR2_PACKAGE_CPPCMS is not set # BR2_PACKAGE_CRACKLIB is not set - -# -# dawgdic needs a toolchain w/ C++, gcc >= 4.6 -# +# BR2_PACKAGE_DAWGDIC is not set # BR2_PACKAGE_DING_LIBS is not set # BR2_PACKAGE_DOTCONF is not set - -# -# double-conversion needs a toolchain w/ C++ -# - -# -# eigen needs a toolchain w/ C++ -# +# BR2_PACKAGE_DOUBLE_CONVERSION is not set +# BR2_PACKAGE_EIGEN is not set # BR2_PACKAGE_ELFUTILS is not set # BR2_PACKAGE_ELL is not set # BR2_PACKAGE_FFTW is not set - -# -# flann needs a toolchain w/ C++, dynamic library, gcc >= 4.7 -# - -# -# flatbuffers needs a toolchain w/ C++, gcc >= 4.7 -# +# BR2_PACKAGE_FLANN is not set +# BR2_PACKAGE_FLATBUFFERS is not set # BR2_PACKAGE_FLATCC is not set # BR2_PACKAGE_FXDIV is not set # BR2_PACKAGE_GCONF is not set - -# -# gdal needs a toolchain w/ C++, dynamic library, gcc >= 4.7, not binutils bug 27597, threads, wchar -# - -# -# gflags needs a toolchain w/ C++ -# - -# -# gli needs a toolchain w/ C++ -# - -# -# glibmm needs a toolchain w/ C++, wchar, threads, gcc >= 7 -# - -# -# glibmm (2.66.x) needs a toolchain w/ C++, wchar, threads, gcc >= 4.9 -# - -# -# glm needs a toolchain w/ C++ -# +# BR2_PACKAGE_GDAL is not set +# BR2_PACKAGE_GFLAGS is not set +# BR2_PACKAGE_GLI is not set +# BR2_PACKAGE_GLIBMM is not set +# BR2_PACKAGE_GLIBMM2_66 is not set +# BR2_PACKAGE_GLM is not set # BR2_PACKAGE_GMP is not set BR2_PACKAGE_GOBJECT_INTROSPECTION_ARCH_SUPPORTS=y @@ -2418,15 +1766,9 @@ BR2_PACKAGE_GOBJECT_INTROSPECTION_ARCH_SUPPORTS=y # gobject-introspection needs python3 # # BR2_PACKAGE_GSL is not set - -# -# gtest needs a toolchain w/ C++, wchar, threads, gcc >= 5 -# +# BR2_PACKAGE_GTEST is not set # BR2_PACKAGE_GUMBO_PARSER is not set - -# -# highway needs a toolchain w/ C++, gcc >= 7 -# +# BR2_PACKAGE_HIGHWAY is not set BR2_PACKAGE_JEMALLOC_ARCH_SUPPORTS=y # BR2_PACKAGE_JEMALLOC is not set BR2_PACKAGE_LAPACK_ARCH_SUPPORTS=y @@ -2435,10 +1777,7 @@ BR2_PACKAGE_LAPACK_ARCH_SUPPORTS=y # lapack/blas needs a toolchain w/ fortran # BR2_PACKAGE_LIBABSEIL_CPP_ARCH_SUPPORTS=y - -# -# libabseil-cpp needs a toolchain w/ gcc >= 4.9, C++, threads, dynamic library -# +# BR2_PACKAGE_LIBABSEIL_CPP is not set # BR2_PACKAGE_LIBARGTABLE2 is not set BR2_PACKAGE_LIBATOMIC_OPS_ARCH_SUPPORTS=y # BR2_PACKAGE_LIBATOMIC_OPS is not set @@ -2450,16 +1789,10 @@ BR2_PACKAGE_LIBBSD_ARCH_SUPPORTS=y # BR2_PACKAGE_LIBBYTESIZE is not set # BR2_PACKAGE_LIBCAP is not set # BR2_PACKAGE_LIBCAP_NG is not set - -# -# libcgroup needs a glibc toolchain w/ C++ -# +# BR2_PACKAGE_LIBCGROUP is not set # BR2_PACKAGE_LIBCLC is not set # BR2_PACKAGE_LIBCORRECT is not set - -# -# libcrossguid needs a toolchain w/ C++, gcc >= 4.7 -# +# BR2_PACKAGE_LIBCROSSGUID is not set # BR2_PACKAGE_LIBCSV is not set # BR2_PACKAGE_LIBDAEMON is not set # BR2_PACKAGE_LIBDILL is not set @@ -2472,75 +1805,39 @@ BR2_PACKAGE_LIBBSD_ARCH_SUPPORTS=y # libexecinfo needs a musl or uclibc toolchain w/ dynamic library # # BR2_PACKAGE_LIBFFI is not set - -# -# libfutils needs a toolchain w/ C++, threads -# +# BR2_PACKAGE_LIBFUTILS is not set # BR2_PACKAGE_LIBGEE is not set - -# -# libgeos needs a toolchain w/ C++, wchar, threads not binutils bug 27597 -# +# BR2_PACKAGE_LIBGEOS is not set # BR2_PACKAGE_LIBGLIB2 is not set # BR2_PACKAGE_LIBGLOB is not set - -# -# libical needs a toolchain w/ C++, dynamic library, wchar -# +# BR2_PACKAGE_LIBICAL is not set # BR2_PACKAGE_LIBITE is not set - -# -# libks needs a toolchain w/ C++, NPTL, dynamic library -# - -# -# liblinear needs a toolchain w/ C++ -# - -# -# libloki needs a toolchain w/ C++, threads -# +# BR2_PACKAGE_LIBKS is not set +# BR2_PACKAGE_LIBLINEAR is not set +# BR2_PACKAGE_LIBLOKI is not set # BR2_PACKAGE_LIBNPTH is not set BR2_PACKAGE_LIBNSPR_ARCH_SUPPORT=y # BR2_PACKAGE_LIBNSPR is not set - -# -# libosmium needs a toolchain w/ C++, wchar, threads, gcc >= 4.7 -# +# BR2_PACKAGE_LIBOSMIUM is not set # # libpeas needs python3 # # BR2_PACKAGE_LIBPFM4 is not set - -# -# libplist needs a toolchain w/ C++, threads -# +# BR2_PACKAGE_LIBPLIST is not set # BR2_PACKAGE_LIBPTHREAD_STUBS is not set # BR2_PACKAGE_LIBPTHSEM is not set # BR2_PACKAGE_LIBPWQUALITY is not set # BR2_PACKAGE_LIBQB is not set BR2_PACKAGE_LIBSECCOMP_ARCH_SUPPORTS=y # BR2_PACKAGE_LIBSECCOMP is not set - -# -# libshdata needs a toolchain w/ C++, threads -# - -# -# libsigc++ needs a toolchain w/ C++, gcc >= 7 -# - -# -# libsigc++ (2.x.x) needs a toolchain w/ C++, gcc >= 4.9 -# +# BR2_PACKAGE_LIBSHDATA is not set +# BR2_PACKAGE_LIBSIGC is not set +# BR2_PACKAGE_LIBSIGC2 is not set BR2_PACKAGE_LIBSIGSEGV_ARCH_SUPPORTS=y # BR2_PACKAGE_LIBSIGSEGV is not set # BR2_PACKAGE_LIBSOLV is not set - -# -# libspatialindex needs a toolchain w/ C++, gcc >= 4.7 -# +# BR2_PACKAGE_LIBSPATIALINDEX is not set # BR2_PACKAGE_LIBTALLOC is not set # BR2_PACKAGE_LIBTASN1 is not set # BR2_PACKAGE_LIBTOMMATH is not set @@ -2556,79 +1853,37 @@ BR2_PACKAGE_LIBURCU_ARCH_SUPPORTS=y # BR2_PACKAGE_LIQUID_DSP is not set BR2_PACKAGE_LLVM_ARCH_SUPPORTS=y BR2_PACKAGE_LLVM_TARGET_ARCH="riscv64" - -# -# llvm needs a toolchain w/ wchar, threads, C++, gcc >= 5, dynamic library, host gcc >= 5 -# +# BR2_PACKAGE_LLVM is not set # BR2_PACKAGE_LTTNG_LIBUST is not set # BR2_PACKAGE_MATIO is not set # BR2_PACKAGE_MPC is not set # BR2_PACKAGE_MPDECIMAL is not set # BR2_PACKAGE_MPFR is not set # BR2_PACKAGE_MPIR is not set - -# -# msgpack needs a toolchain w/ C++ -# +# BR2_PACKAGE_MSGPACK is not set # BR2_PACKAGE_NEON_2_SSE is not set # BR2_PACKAGE_ORC is not set # BR2_PACKAGE_P11_KIT is not set BR2_PACKAGE_POCO_ARCH_SUPPORTS=y - -# -# poco needs a toolchain w/ wchar, NPTL, C++, dynamic library, gcc >= 5 w/ C++14 -# +# BR2_PACKAGE_POCO is not set BR2_PACKAGE_HOST_PROTOBUF_ARCH_SUPPORTS=y BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS=y - -# -# protobuf needs a toolchain w/ C++, threads, dynamic library, gcc >= 4.8 -# - -# -# protobuf-c needs a toolchain w/ C++, threads -# - -# -# protozero needs a toolchain w/ C++, gcc >= 4.7 -# - -# -# qhull needs a toolchain w/ C++, gcc >= 4.4 -# +# BR2_PACKAGE_PROTOBUF is not set +# BR2_PACKAGE_PROTOBUF_C is not set +# BR2_PACKAGE_PROTOZERO is not set +# BR2_PACKAGE_QHULL is not set # BR2_PACKAGE_QLIBC is not set # BR2_PACKAGE_REPROC is not set - -# -# riemann-c-client needs a toolchain w/ C++, threads -# - -# -# shapelib needs a toolchain w/ C++, threads -# +# BR2_PACKAGE_RIEMANN_C_CLIENT is not set +# BR2_PACKAGE_SHAPELIB is not set # BR2_PACKAGE_SKALIBS is not set # BR2_PACKAGE_SPHINXBASE is not set - -# -# tbb needs a glibc or musl toolchain w/ dynamic library, threads, C++ -# +# BR2_PACKAGE_TBB is not set # BR2_PACKAGE_TINYCBOR is not set - -# -# tl-expected needs a toolchain w/ C++, gcc >= 4.8 -# - -# -# uvw needs a toolchain w/ NPTL, dynamic library, C++, gcc >= 7 -# - -# -# volk needs a toolchain w/ C++, NPTL, wchar, dynamic library -# - -# -# xapian needs a toolchain w/ C++ -# +# BR2_PACKAGE_TL_EXPECTED is not set +# BR2_PACKAGE_UVW is not set +# BR2_PACKAGE_VOLK is not set +# BR2_PACKAGE_XAPIAN is not set # # Security @@ -2637,36 +1892,18 @@ BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS=y # BR2_PACKAGE_LIBSELINUX is not set # BR2_PACKAGE_LIBSEPOL is not set # BR2_PACKAGE_SAFECLIB is not set - -# -# softhsm2 needs a toolchain w/ C++, threads, gcc >= 4.8 and dynamic library support -# +# BR2_PACKAGE_SOFTHSM2 is not set # # Text and terminal handling # # BR2_PACKAGE_AUGEAS is not set - -# -# cli11 needs a toolchain w/ C++, gcc >= 4.8 -# - -# -# docopt-cpp needs a toolchain w/ C++, gcc >= 4.7 -# - -# -# enchant needs a toolchain w/ C++, threads, wchar -# - -# -# fmt needs a toolchain w/ C++, wchar -# +# BR2_PACKAGE_CLI11 is not set +# BR2_PACKAGE_DOCOPT_CPP is not set +# BR2_PACKAGE_ENCHANT is not set +# BR2_PACKAGE_FMT is not set # BR2_PACKAGE_FSTRCMP is not set - -# -# icu needs a toolchain w/ C++, wchar, threads, gcc >= 4.9, host gcc >= 4.9 -# +# BR2_PACKAGE_ICU is not set # BR2_PACKAGE_INIH is not set # BR2_PACKAGE_LIBCLI is not set # BR2_PACKAGE_LIBEDIT is not set @@ -2685,20 +1922,11 @@ BR2_PACKAGE_NCURSES_ADDITIONAL_TERMINFO="" # BR2_PACKAGE_PCRE is not set # BR2_PACKAGE_PCRE2 is not set # BR2_PACKAGE_POPT is not set - -# -# re2 needs a toolchain w/ C++, threads, gcc >= 4.8 -# +# BR2_PACKAGE_RE2 is not set # BR2_PACKAGE_READLINE is not set # BR2_PACKAGE_SLANG is not set - -# -# tclap needs a toolchain w/ C++ -# - -# -# termcolor needs a toolchain w/ C++, gcc >= 4.8 -# +# BR2_PACKAGE_TCLAP is not set +# BR2_PACKAGE_TERMCOLOR is not set # BR2_PACKAGE_UTF8PROC is not set # @@ -2718,10 +1946,7 @@ BR2_PACKAGE_NCURSES_ADDITIONAL_TERMINFO="" # BR2_PACKAGE_AESPIPE is not set # BR2_PACKAGE_BC is not set BR2_PACKAGE_BITCOIN_ARCH_SUPPORTS=y - -# -# bitcoin needs a toolchain w/ C++, threads, wchar -# +# BR2_PACKAGE_BITCOIN is not set # BR2_PACKAGE_COLLECTD is not set # BR2_PACKAGE_COLLECTL is not set @@ -2730,16 +1955,9 @@ BR2_PACKAGE_BITCOIN_ARCH_SUPPORTS=y # # BR2_PACKAGE_EMPTY is not set # BR2_PACKAGE_GITLAB_RUNNER is not set - -# -# gnuradio needs a toolchain w/ C++, NPTL, wchar, dynamic library, gcc >= 8 -# +# BR2_PACKAGE_GNURADIO is not set # BR2_PACKAGE_GOOGLEFONTDIRECTORY is not set -# -# gqrx needs a toolchain w/ C++, threads, wchar, dynamic library, gcc >= 8 -# - # # gqrx needs qt5 # @@ -2748,74 +1966,48 @@ BR2_PACKAGE_BITCOIN_ARCH_SUPPORTS=y # BR2_PACKAGE_LINUX_SYSCALL_SUPPORT is not set # BR2_PACKAGE_MOBILE_BROADBAND_PROVIDER_INFO is not set # BR2_PACKAGE_NETDATA is not set - -# -# proj needs a toolchain w/ C++, gcc >= 4.7, threads, wchar -# +# BR2_PACKAGE_PROJ is not set BR2_PACKAGE_QEMU_ARCH_SUPPORTS_TARGET=y # BR2_PACKAGE_QEMU is not set - -# -# qpdf needs a toolchain w/ C++, gcc >= 5 -# +# BR2_PACKAGE_QPDF is not set # BR2_PACKAGE_RTL_433 is not set # BR2_PACKAGE_SHARED_MIME_INFO is not set - -# -# sunwait needs a toolchain w/ C++ -# - -# -# taskd needs a toolchain w/ C++, wchar, dynamic library -# +# BR2_PACKAGE_SUNWAIT is not set +# BR2_PACKAGE_TASKD is not set # BR2_PACKAGE_XUTIL_UTIL_MACROS is not set BR2_PACKAGE_Z3_ARCH_SUPPORTS=y +# BR2_PACKAGE_Z3 is not set # # Networking applications # - -# -# aircrack-ng needs a toolchain w/ dynamic library, threads, C++ -# +# BR2_PACKAGE_AIRCRACK_NG is not set # BR2_PACKAGE_ALFRED is not set # BR2_PACKAGE_AOETOOLS is not set # BR2_PACKAGE_APACHE is not set # BR2_PACKAGE_ARGUS is not set # BR2_PACKAGE_ARP_SCAN is not set # BR2_PACKAGE_ARPTABLES is not set - -# -# asterisk needs a glibc or uClibc toolchain w/ C++, dynamic library, threads, wchar -# +# BR2_PACKAGE_ASTERISK is not set # BR2_PACKAGE_ATFTP is not set # BR2_PACKAGE_AVAHI is not set # BR2_PACKAGE_AXEL is not set # BR2_PACKAGE_BABELD is not set # BR2_PACKAGE_BANDWIDTHD is not set # BR2_PACKAGE_BATCTL is not set - -# -# bcusdk needs a toolchain w/ C++ -# +# BR2_PACKAGE_BCUSDK is not set # BR2_PACKAGE_BIND is not set # BR2_PACKAGE_BIRD is not set # BR2_PACKAGE_BLUEZ5_UTILS is not set # BR2_PACKAGE_BMON is not set # BR2_PACKAGE_BMX7 is not set - -# -# boinc needs a toolchain w/ dynamic library, C++, threads, gcc >= 4.8 -# +# BR2_PACKAGE_BOINC is not set # BR2_PACKAGE_BRCM_PATCHRAM_PLUS is not set # BR2_PACKAGE_BRIDGE_UTILS is not set # BR2_PACKAGE_BWM_NG is not set # BR2_PACKAGE_C_ICAP is not set # BR2_PACKAGE_CAN_UTILS is not set - -# -# cannelloni needs a toolchain w/ C++, threads, dynamic library, gcc >= 4.8 -# +# BR2_PACKAGE_CANNELLONI is not set # BR2_PACKAGE_CASYNC is not set # BR2_PACKAGE_CFM is not set # BR2_PACKAGE_CHRONY is not set @@ -2828,18 +2020,8 @@ BR2_PACKAGE_Z3_ARCH_SUPPORTS=y # BR2_PACKAGE_CONNTRACK_TOOLS is not set # BR2_PACKAGE_CORKSCREW is not set # BR2_PACKAGE_CRDA is not set - -# -# ctorrent needs a toolchain w/ C++ -# - -# -# cups needs a toolchain w/ C++, threads -# - -# -# cups-filters needs a toolchain w/ wchar, C++, threads and dynamic library, gcc >= 5 -# +# BR2_PACKAGE_CTORRENT is not set +# BR2_PACKAGE_CUPS is not set # BR2_PACKAGE_DANTE is not set # BR2_PACKAGE_DARKHTTPD is not set # BR2_PACKAGE_DEHYDRATED is not set @@ -2861,47 +2043,26 @@ BR2_PACKAGE_Z3_ARCH_SUPPORTS=y # BR2_PACKAGE_FLANNEL is not set # BR2_PACKAGE_FPING is not set # BR2_PACKAGE_FREERADIUS_SERVER is not set - -# -# freeswitch needs a toolchain w/ C++, dynamic library, threads, wchar -# +# BR2_PACKAGE_FREESWITCH is not set # BR2_PACKAGE_FRR is not set - -# -# gerbera needs a toolchain w/ C++, dynamic library, threads, wchar, gcc >= 8 -# +# BR2_PACKAGE_GERBERA is not set # BR2_PACKAGE_GESFTPSERVER is not set - -# -# gloox needs a toolchain w/ C++ -# +# BR2_PACKAGE_GLOOX is not set # BR2_PACKAGE_GLORYTUN is not set # # gupnp-tools needs libgtk3 # - -# -# hans needs a toolchain w/ C++ -# +# BR2_PACKAGE_HANS is not set BR2_PACKAGE_HAPROXY_ARCH_SUPPORTS=y # BR2_PACKAGE_HAPROXY is not set # BR2_PACKAGE_HIAWATHA is not set # BR2_PACKAGE_HOSTAPD is not set # BR2_PACKAGE_HTPDATE is not set # BR2_PACKAGE_HTTPING is not set - -# -# i2pd needs a toolchain w/ C++, NPTL, wchar -# - -# -# ibrdtn-tools needs a toolchain w/ C++, threads -# - -# -# ibrdtnd needs a toolchain w/ C++, threads -# +# BR2_PACKAGE_I2PD is not set +# BR2_PACKAGE_IBRDTN_TOOLS is not set +# BR2_PACKAGE_IBRDTND is not set # BR2_PACKAGE_IFMETRIC is not set # BR2_PACKAGE_IFTOP is not set BR2_PACKAGE_IFUPDOWN_SCRIPTS=y @@ -2910,10 +2071,7 @@ BR2_PACKAGE_IFUPDOWN_SCRIPTS=y # BR2_PACKAGE_IGMPPROXY is not set # BR2_PACKAGE_INADYN is not set # BR2_PACKAGE_IODINE is not set - -# -# iperf needs a toolchain w/ C++ -# +# BR2_PACKAGE_IPERF is not set # BR2_PACKAGE_IPERF3 is not set # BR2_PACKAGE_IPROUTE2 is not set # BR2_PACKAGE_IPSET is not set @@ -2925,28 +2083,16 @@ BR2_PACKAGE_IFUPDOWN_SCRIPTS=y # BR2_PACKAGE_IWD is not set # BR2_PACKAGE_JANUS_GATEWAY is not set # BR2_PACKAGE_KEEPALIVED is not set - -# -# kismet needs a toolchain w/ threads, C++, gcc >= 5 -# +# BR2_PACKAGE_KISMET is not set # BR2_PACKAGE_KNOCK is not set # BR2_PACKAGE_KSMBD_TOOLS is not set # BR2_PACKAGE_LEAFNODE2 is not set # BR2_PACKAGE_LFT is not set - -# -# lftp requires a toolchain w/ C++, wchar -# +# BR2_PACKAGE_LFTP is not set # BR2_PACKAGE_LIGHTTPD is not set - -# -# linknx needs a toolchain w/ C++ -# +# BR2_PACKAGE_LINKNX is not set # BR2_PACKAGE_LINKS is not set - -# -# linphone needs a toolchain w/ threads, C++, dynamic library, wchar, gcc >= 5 -# +# BR2_PACKAGE_LINPHONE is not set # BR2_PACKAGE_LINUX_ZIGBEE is not set # BR2_PACKAGE_LINUXPTP is not set # BR2_PACKAGE_LLDPD is not set @@ -2961,14 +2107,8 @@ BR2_PACKAGE_IFUPDOWN_SCRIPTS=y # BR2_PACKAGE_MJPG_STREAMER is not set # BR2_PACKAGE_MODEM_MANAGER is not set BR2_PACKAGE_MONGREL2_LIBC_SUPPORTS=y - -# -# mongrel2 needs a uClibc or glibc toolchain w/ C++, threads, dynamic library -# - -# -# mosh needs a toolchain w/ C++, threads, dynamic library, wchar, gcc >= 4.8 -# +# BR2_PACKAGE_MONGREL2 is not set +# BR2_PACKAGE_MOSH is not set # BR2_PACKAGE_MOSQUITTO is not set # BR2_PACKAGE_MROUTED is not set # BR2_PACKAGE_MRP is not set @@ -2991,14 +2131,8 @@ BR2_PACKAGE_MONGREL2_LIBC_SUPPORTS=y # BR2_PACKAGE_NGINX is not set # BR2_PACKAGE_NGIRCD is not set # BR2_PACKAGE_NGREP is not set - -# -# nload needs a toolchain w/ C++ -# - -# -# nmap-nmap needs a toolchain w/ C++, threads -# +# BR2_PACKAGE_NLOAD is not set +# BR2_PACKAGE_NMAP is not set # BR2_PACKAGE_NOIP is not set # BR2_PACKAGE_NTP is not set # BR2_PACKAGE_NTPSEC is not set @@ -3043,10 +2177,7 @@ BR2_PACKAGE_MONGREL2_LIBC_SUPPORTS=y # BR2_PACKAGE_RPCBIND is not set # BR2_PACKAGE_RSH_REDONE is not set # BR2_PACKAGE_RSYNC is not set - -# -# rtorrent needs a toolchain w/ C++, threads, wchar, gcc >= 4.9 -# +# BR2_PACKAGE_RTORRENT is not set # BR2_PACKAGE_RTPTOOLS is not set # @@ -3055,16 +2186,10 @@ BR2_PACKAGE_MONGREL2_LIBC_SUPPORTS=y # BR2_PACKAGE_S6_DNS is not set # BR2_PACKAGE_S6_NETWORKING is not set # BR2_PACKAGE_SAMBA4 is not set - -# -# sconeserver needs a toolchain with dynamic library, C++, NPTL -# +# BR2_PACKAGE_SCONESERVER is not set # BR2_PACKAGE_SER2NET is not set # BR2_PACKAGE_SHADOWSOCKS_LIBEV is not set - -# -# shairport-sync needs a toolchain w/ C++, NPTL -# +# BR2_PACKAGE_SHAIRPORT_SYNC is not set # BR2_PACKAGE_SHELLINABOX is not set # BR2_PACKAGE_SMCROUTE is not set # BR2_PACKAGE_SNGREP is not set @@ -3074,10 +2199,7 @@ BR2_PACKAGE_MONGREL2_LIBC_SUPPORTS=y # BR2_PACKAGE_SOFTETHER is not set # BR2_PACKAGE_SPAWN_FCGI is not set # BR2_PACKAGE_SPICE_PROTOCOL is not set - -# -# squid needs a toolchain w/ C++, threads, gcc >= 4.8 not affected by bug 64735 -# +# BR2_PACKAGE_SQUID is not set # BR2_PACKAGE_SSDP_RESPONDER is not set # BR2_PACKAGE_SSHGUARD is not set # BR2_PACKAGE_SSHPASS is not set @@ -3093,10 +2215,7 @@ BR2_PACKAGE_MONGREL2_LIBC_SUPPORTS=y # BR2_PACKAGE_TINYSSH is not set # BR2_PACKAGE_TOR is not set # BR2_PACKAGE_TRACEROUTE is not set - -# -# transmission needs a toolchain w/ dynamic library, threads, C++, gcc >= 7 -# +# BR2_PACKAGE_TRANSMISSION is not set # BR2_PACKAGE_TUNCTL is not set # BR2_PACKAGE_TVHEADEND is not set # BR2_PACKAGE_UACME is not set @@ -3110,10 +2229,7 @@ BR2_PACKAGE_MONGREL2_LIBC_SUPPORTS=y # BR2_PACKAGE_USHARE is not set # BR2_PACKAGE_USSP_PUSH is not set # BR2_PACKAGE_VDE2 is not set - -# -# vdr needs a toolchain w/ C++, dynamic library, NPTL, wchar, headers >= 3.9 -# +# BR2_PACKAGE_VDR is not set # BR2_PACKAGE_VNSTAT is not set # BR2_PACKAGE_VPNC is not set # BR2_PACKAGE_VSFTPD is not set @@ -3122,24 +2238,15 @@ BR2_PACKAGE_MONGREL2_LIBC_SUPPORTS=y # BR2_PACKAGE_WIREGUARD_TOOLS is not set # BR2_PACKAGE_WIRELESS_REGDB is not set # BR2_PACKAGE_WIRELESS_TOOLS is not set - -# -# wireshark needs a toolchain w/ wchar, threads, dynamic library, C++ -# +# BR2_PACKAGE_WIRESHARK is not set # BR2_PACKAGE_WPA_SUPPLICANT is not set # BR2_PACKAGE_WPAN_TOOLS is not set # BR2_PACKAGE_XINETD is not set # BR2_PACKAGE_XL2TP is not set # BR2_PACKAGE_XTABLES_ADDONS is not set # BR2_PACKAGE_ZABBIX is not set - -# -# zeek needs a toolchain w/ C++, wchar, threads, dynamic library, gcc >= 7, host gcc >= 7 -# - -# -# znc needs a toolchain w/ C++, dynamic library, gcc >= 4.8, threads -# +# BR2_PACKAGE_ZEEK is not set +# BR2_PACKAGE_ZNC is not set # # Package managers @@ -3199,10 +2306,7 @@ BR2_PACKAGE_MONGREL2_LIBC_SUPPORTS=y # # Security # - -# -# apparmor needs a toolchain w/ headers >= 3.16, threads, C++ -# +# BR2_PACKAGE_APPARMOR is not set # BR2_PACKAGE_CHECKPOLICY is not set # BR2_PACKAGE_IMA_EVM_UTILS is not set # BR2_PACKAGE_OPTEE_CLIENT is not set @@ -3281,10 +2385,7 @@ BR2_PACKAGE_GNUPG2_DEPENDS=y # BR2_PACKAGE_CRUN is not set # BR2_PACKAGE_DAEMON is not set # BR2_PACKAGE_DC3DD is not set - -# -# ddrescue needs a toolchain w/ C++ -# +# BR2_PACKAGE_DDRESCUE is not set # BR2_PACKAGE_DOCKER_CLI is not set # @@ -3327,10 +2428,7 @@ BR2_PACKAGE_INITSCRIPTS=y # netifrc needs openrc as init system # # BR2_PACKAGE_NUMACTL is not set - -# -# nut needs a toolchain w/ C++ -# +# BR2_PACKAGE_NUT is not set # # pamtester depends on linux-pam From aeacb481aabb1669d465389b3250e86c797b4993 Mon Sep 17 00:00:00 2001 From: Ross Thompson Date: Wed, 27 Sep 2023 12:00:47 -0500 Subject: [PATCH 17/32] Fixed sutble RAS bug when the stack size was not a power of 2. --- src/ifu/bpred/RASPredictor.sv | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/ifu/bpred/RASPredictor.sv b/src/ifu/bpred/RASPredictor.sv index 5dd3cf7b2..445bac622 100644 --- a/src/ifu/bpred/RASPredictor.sv +++ b/src/ifu/bpred/RASPredictor.sv @@ -27,8 +27,7 @@ // and limitations under the License. //////////////////////////////////////////////////////////////////////////////////////////////// -module RASPredictor import cvw::*; #(parameter cvw_t P, - parameter StackSize = 16 )( +module RASPredictor import cvw::*; #(parameter cvw_t P)( input logic clk, input logic reset, input logic StallF, StallD, StallE, StallM, FlushD, FlushE, FlushM, @@ -41,10 +40,10 @@ module RASPredictor import cvw::*; #(parameter cvw_t P, ); logic CounterEn; - localparam Depth = $clog2(StackSize); + localparam Depth = $clog2(P.RAS_SIZE); logic [Depth-1:0] NextPtr, Ptr, P1, M1, IncDecPtr; - logic [StackSize-1:0] [P.XLEN-1:0] memory; + logic [P.RAS_SIZE-1:0] [P.XLEN-1:0] memory; integer index; logic PopF; @@ -76,14 +75,17 @@ module RASPredictor import cvw::*; #(parameter cvw_t P, assign P1 = 1; assign M1 = '1; // -1 mux2 #(Depth) PtrMux(P1, M1, DecrementPtr, IncDecPtr); - assign NextPtr = Ptr + IncDecPtr; + logic [Depth-1:0] Sum; + assign Sum = Ptr + IncDecPtr; + assign NextPtr = Sum == P.RAS_SIZE[Depth-1:0] ? 0 : Sum; // wrap back around if our stack is not a power of 2 + //assign NextPtr = Ptr + IncDecPtr; flopenr #(Depth) PTR(clk, reset, CounterEn, NextPtr, Ptr); // RAS must be reset. always_ff @ (posedge clk) begin if(reset) begin - for(index=0; index Date: Wed, 27 Sep 2023 12:25:05 -0500 Subject: [PATCH 18/32] Actually fixed non-power of 2 issue with RAS. Added RAS swapping to branch predictor scripts and configurations. --- bin/parseTest.py | 13 +++++++--- config/buildroot/config.vh | 1 + config/fpga/config.vh | 1 + config/rv32e/config.vh | 1 + config/rv32gc/config.vh | 6 +++++ config/rv32i/config.vh | 1 + config/rv32imc/config.vh | 1 + config/rv64fpquad/config.vh | 1 + config/rv64gc/config.vh | 3 ++- config/rv64i/config.vh | 1 + config/shared/parameter-defs.vh | 1 + sim/bpred-sim.py | 46 ++++++++++++++++++++++++--------- src/cvw.sv | 1 + src/ifu/bpred/RASPredictor.sv | 5 +++- 14 files changed, 64 insertions(+), 18 deletions(-) diff --git a/bin/parseTest.py b/bin/parseTest.py index ba3309aff..c24fbe3fe 100755 --- a/bin/parseTest.py +++ b/bin/parseTest.py @@ -32,6 +32,10 @@ import math import numpy as np import argparse +RefData = [('twobitCModel6', 'twobitCModel', 64, 9.65280765420711), ('twobitCModel8', 'twobitCModel', 256, 8.75120245829945), ('twobitCModel10', 'twobitCModel', 1024, 8.1318382397263), + ('twobitCModel12', 'twobitCModel', 4096, 7.53026646633342), ('twobitCModel14', 'twobitCModel', 16384, 6.07679338544009), ('twobitCModel16', 'twobitCModel', 65536, 6.07679338544009), + ('gshareCModel6', 'gshareCModel', 64, 10.6602835418646), ('gshareCModel8', 'gshareCModel', 256, 8.38384710559667), ('gshareCModel10', 'gshareCModel', 1024, 6.36847432155534), + ('gshareCModel12', 'gshareCModel', 4096, 3.91108491151983), ('gshareCModel14', 'gshareCModel', 16384, 2.83926519215395), ('gshareCModel16', 'gshareCModel', 65536, .60213659066941)] def ParseBranchListFile(path): '''Take the path to the list of Questa Sim log files containing the performance counters outputs. File @@ -65,7 +69,7 @@ def ProcessFile(fileName): HPMClist = { } elif(len(lineToken) > 4 and lineToken[1][0:3] == 'Cnt'): countToken = line.split('=')[1].split() - value = int(countToken[0]) + value = int(countToken[0]) if countToken[0] != 'x' else 0 name = ' '.join(countToken[1:]) HPMClist[name] = value elif ('is done' in line): @@ -111,7 +115,7 @@ def ComputeGeometricAverage(benchmarks): benchmarks.append(('Mean', '', AllAve)) def GenerateName(predictorType, predictorParams): - if(predictorType == 'gshare' or predictorType == 'twobit'): + if(predictorType == 'gshare' or predictorType == 'twobit' or predictorType == 'btb' or predictorType == 'class'): return predictorType + predictorParams[0] elif(predictorParams == 'local'): return predictorType + predictorParams[0] + '_' + predictorParams[1] @@ -120,7 +124,7 @@ def GenerateName(predictorType, predictorParams): sys.exit(-1) def ComputePredNumEntries(predictorType, predictorParams): - if(predictorType == 'gshare' or predictorType == 'twobit'): + if(predictorType == 'gshare' or predictorType == 'twobit' or predictorType == 'btb' or predictorType == 'class'): return 2**int(predictorParams[0]) elif(predictorParams == 'local'): return 2**int(predictorParams[0]) * int(predictorParams[1]) + 2**int(predictorParams[1]) @@ -286,7 +290,7 @@ def ReportAsGraph(benchmarkDict, bar): 'ClassMPR': 'Class Misprediction'} if(args.summary): markers = ['x', '.', '+', '*', '^', 'o', ',', 's'] - colors = ['black', 'blue', 'dodgerblue', 'turquoise', 'lightsteelblue', 'gray', 'black', 'blue'] + colors = ['blue', 'black', 'dodgerblue', 'gray', 'lightsteelblue', 'turquoise', 'black', 'blue'] temp = benchmarkDict['Mean'] # the benchmarkDict['Mean'] contains sequencies of results for multiple @@ -429,6 +433,7 @@ performanceCounterList = BuildDataBase(predictorLogs) # builds a databas benchmarkFirstList = ReorderDataBase(performanceCounterList) # reorder first by benchmark then trace benchmarkDict = ExtractSelectedData(benchmarkFirstList) # filters to just the desired performance counter metric +if(args.reference): benchmarkDict['Mean'].extend(RefData) #print(benchmarkDict['Mean']) #print(benchmarkDict['aha-mont64Speed']) #print(benchmarkDict) diff --git a/config/buildroot/config.vh b/config/buildroot/config.vh index 38960c735..79ee99f3c 100644 --- a/config/buildroot/config.vh +++ b/config/buildroot/config.vh @@ -142,6 +142,7 @@ localparam BPRED_TYPE = `BP_GSHARE; // BP_GSHARE_BASIC, BP_GLOBAL, BP_GLOBAL_BAS localparam BPRED_SIZE = 32'd10; localparam BPRED_NUM_LHR = 32'd6; localparam BTB_SIZE = 32'd10; +localparam RAS_SIZE = 32'd16; localparam SVADU_SUPPORTED = 1; diff --git a/config/fpga/config.vh b/config/fpga/config.vh index 7e582fabb..27903d0be 100644 --- a/config/fpga/config.vh +++ b/config/fpga/config.vh @@ -156,6 +156,7 @@ localparam BPRED_TYPE = `BP_GSHARE; // BP_GSHARE_BASIC, BP_GLOBAL, BP_GLOBAL_BAS localparam BPRED_NUM_LHR = 32'd6; localparam BPRED_SIZE = 32'd12; localparam BTB_SIZE = 32'd10; +localparam RAS_SIZE = 32'd16; localparam SVADU_SUPPORTED = 1; localparam ZMMUL_SUPPORTED = 0; diff --git a/config/rv32e/config.vh b/config/rv32e/config.vh index e1cbdab0f..c67e71c13 100644 --- a/config/rv32e/config.vh +++ b/config/rv32e/config.vh @@ -144,6 +144,7 @@ localparam BPRED_TYPE = `BP_GSHARE; // BP_GSHARE_BASIC, BP_GLOBAL, BP_GLOBAL_BAS localparam BPRED_SIZE = 32'd10; localparam BPRED_NUM_LHR = 32'd6; localparam BTB_SIZE = 32'd10; +localparam RAS_SIZE = 32'd16; localparam SVADU_SUPPORTED = 0; localparam ZMMUL_SUPPORTED = 0; diff --git a/config/rv32gc/config.vh b/config/rv32gc/config.vh index 46d3ed22a..de966b1f2 100644 --- a/config/rv32gc/config.vh +++ b/config/rv32gc/config.vh @@ -150,7 +150,13 @@ localparam BPRED_TYPE = `BP_GSHARE; // BP_GSHARE_BASIC, BP_GLOBAL, BP_GLOBAL_BAS localparam BPRED_SIZE = 32'd10; `endif localparam BPRED_NUM_LHR = 32'd6; +`ifdef BTB_OVERRIDE +localparam BTB_SIZE = `BTB_SIZE; +localparam RAS_SIZE = `RAS_SIZE; +`else localparam BTB_SIZE = 32'd10; +localparam RAS_SIZE = 32'd16; +`endif localparam SVADU_SUPPORTED = 1; localparam ZMMUL_SUPPORTED = 0; diff --git a/config/rv32i/config.vh b/config/rv32i/config.vh index e1c5a6a5d..a31e034df 100644 --- a/config/rv32i/config.vh +++ b/config/rv32i/config.vh @@ -144,6 +144,7 @@ localparam BPRED_TYPE = `BP_GSHARE; // BP_GSHARE_BASIC, BP_GLOBAL, BP_GLOBAL_BAS localparam BPRED_SIZE = 32'd10; localparam BPRED_NUM_LHR = 32'd6; localparam BTB_SIZE = 32'd10; +localparam RAS_SIZE = 32'd16; localparam SVADU_SUPPORTED = 0; localparam ZMMUL_SUPPORTED = 0; diff --git a/config/rv32imc/config.vh b/config/rv32imc/config.vh index a9123cbb4..61eea7325 100644 --- a/config/rv32imc/config.vh +++ b/config/rv32imc/config.vh @@ -143,6 +143,7 @@ localparam BPRED_TYPE = `BP_GSHARE; // BP_GSHARE_BASIC, BP_GLOBAL, BP_GLOBAL_BAS localparam BPRED_SIZE = 32'd10; localparam BPRED_NUM_LHR = 32'd6; localparam BTB_SIZE = 32'd10; +localparam RAS_SIZE = 32'd16; localparam SVADU_SUPPORTED = 0; localparam ZMMUL_SUPPORTED = 0; diff --git a/config/rv64fpquad/config.vh b/config/rv64fpquad/config.vh index 2533dbc21..d8bf3e6fc 100644 --- a/config/rv64fpquad/config.vh +++ b/config/rv64fpquad/config.vh @@ -146,6 +146,7 @@ localparam BPRED_TYPE = `BP_GSHARE; // BP_GSHARE_BASIC, BP_GLOBAL, BP_GLOBAL_BAS localparam BPRED_SIZE = 32'd10; localparam BPRED_NUM_LHR = 32'd6; localparam BTB_SIZE = 32'd10; +localparam RAS_SIZE = 32'd16; localparam SVADU_SUPPORTED = 0; localparam ZMMUL_SUPPORTED = 0; diff --git a/config/rv64gc/config.vh b/config/rv64gc/config.vh index 16e50b899..36d99020e 100644 --- a/config/rv64gc/config.vh +++ b/config/rv64gc/config.vh @@ -147,8 +147,9 @@ localparam PLIC_SDC_ID = 32'd9; localparam BPRED_SUPPORTED = 1; localparam BPRED_TYPE = `BP_GSHARE; // BP_GSHARE_BASIC, BP_GLOBAL, BP_GLOBAL_BASIC, BP_TWOBIT localparam BPRED_NUM_LHR = 32'd6; -localparam BPRED_SIZE = 32'd10; +localparam BPRED_SIZE = 32'd6; localparam BTB_SIZE = 32'd10; +localparam RAS_SIZE = 32'd16; localparam SVADU_SUPPORTED = 1; localparam ZMMUL_SUPPORTED = 0; diff --git a/config/rv64i/config.vh b/config/rv64i/config.vh index c27f7faf0..6add96e78 100644 --- a/config/rv64i/config.vh +++ b/config/rv64i/config.vh @@ -146,6 +146,7 @@ localparam BPRED_TYPE = `BP_GSHARE; // BP_GSHARE_BASIC, BP_GLOBAL, BP_GLOBAL_BAS localparam BPRED_SIZE = 32'd10; localparam BPRED_NUM_LHR = 32'd6; localparam BTB_SIZE = 32'd10; +localparam RAS_SIZE = 32'd16; localparam SVADU_SUPPORTED = 0; localparam ZMMUL_SUPPORTED = 0; diff --git a/config/shared/parameter-defs.vh b/config/shared/parameter-defs.vh index 340668466..4921f6a3d 100644 --- a/config/shared/parameter-defs.vh +++ b/config/shared/parameter-defs.vh @@ -89,6 +89,7 @@ localparam cvw_t P = '{ BPRED_SIZE : BPRED_SIZE, BPRED_NUM_LHR : BPRED_NUM_LHR, BTB_SIZE : BTB_SIZE, + RAS_SIZE : RAS_SIZE, RADIX : RADIX, DIVCOPIES : DIVCOPIES, ZBA_SUPPORTED : ZBA_SUPPORTED, diff --git a/sim/bpred-sim.py b/sim/bpred-sim.py index 4ec9324a3..9a59e8866 100755 --- a/sim/bpred-sim.py +++ b/sim/bpred-sim.py @@ -46,19 +46,41 @@ configs = [ ) ] -bpdSize = [6, 8, 10, 12, 14, 16] -bpdType = ['twobit', 'gshare', 'global', 'gshare_basic', 'global_basic', 'local_basic'] -for CurrBPType in bpdType: - for CurrBPSize in bpdSize: - name = CurrBPType+str(CurrBPSize) - configOptions = "+define+INSTR_CLASS_PRED=0 +define+BPRED_OVERRIDE +define+BPRED_TYPE=" + str(bpdType.index(CurrBPType)) + "+define+BPRED_SIZE=" + str(CurrBPSize) - tc = TestCase( - name=name, - variant="rv32gc", - cmd="vsim > {} -c < {} -c < {} -c < {} -c <= P.RAS_SIZE[Depth-1:0] ? 0 : Sum; // wrap back around if our stack is not a power of 2 + else + assign NextPtr = Sum; //assign NextPtr = Ptr + IncDecPtr; flopenr #(Depth) PTR(clk, reset, CounterEn, NextPtr, Ptr); From 3bbcfade9357c600099e45d3ed71bc912d233c90 Mon Sep 17 00:00:00 2001 From: Ross Thompson Date: Wed, 27 Sep 2023 13:56:51 -0500 Subject: [PATCH 19/32] Completed branch predictor benchmarking. --- bin/parseTest.py | 9 +++-- sim/bp-results/branch-list.txt | 12 +++++++ sim/bp-results/btb-list.txt | 6 ++++ sim/bp-results/class-list.txt | 6 ++++ sim/bp-results/ras-list.txt | 5 +++ sim/wave.do | 64 +++++++++++++++++++--------------- 6 files changed, 71 insertions(+), 31 deletions(-) create mode 100644 sim/bp-results/branch-list.txt create mode 100644 sim/bp-results/btb-list.txt create mode 100644 sim/bp-results/class-list.txt create mode 100644 sim/bp-results/ras-list.txt diff --git a/bin/parseTest.py b/bin/parseTest.py index c24fbe3fe..bb6d2871e 100755 --- a/bin/parseTest.py +++ b/bin/parseTest.py @@ -109,13 +109,14 @@ def ComputeGeometricAverage(benchmarks): index = 0 for (testName, opt, HPMCList) in benchmarks: #print(HPMCList) - Product *= HPMCList[field] + value = HPMCList[field] + if(value != 0): Product *= value # if that value is 0 exclude from mean because it destories the geo mean index += 1 AllAve[field] = Product ** (1.0/index) benchmarks.append(('Mean', '', AllAve)) def GenerateName(predictorType, predictorParams): - if(predictorType == 'gshare' or predictorType == 'twobit' or predictorType == 'btb' or predictorType == 'class'): + if(predictorType == 'gshare' or predictorType == 'twobit' or predictorType == 'btb' or predictorType == 'class' or predictorType == 'ras'): return predictorType + predictorParams[0] elif(predictorParams == 'local'): return predictorType + predictorParams[0] + '_' + predictorParams[1] @@ -126,6 +127,8 @@ def GenerateName(predictorType, predictorParams): def ComputePredNumEntries(predictorType, predictorParams): if(predictorType == 'gshare' or predictorType == 'twobit' or predictorType == 'btb' or predictorType == 'class'): return 2**int(predictorParams[0]) + elif(predictorType == 'ras'): + return int(predictorParams[0]) elif(predictorParams == 'local'): return 2**int(predictorParams[0]) * int(predictorParams[1]) + 2**int(predictorParams[1]) else: @@ -290,7 +293,7 @@ def ReportAsGraph(benchmarkDict, bar): 'ClassMPR': 'Class Misprediction'} if(args.summary): markers = ['x', '.', '+', '*', '^', 'o', ',', 's'] - colors = ['blue', 'black', 'dodgerblue', 'gray', 'lightsteelblue', 'turquoise', 'black', 'blue'] + colors = ['blue', 'black', 'gray', 'dodgerblue', 'lightsteelblue', 'turquoise', 'black', 'blue'] temp = benchmarkDict['Mean'] # the benchmarkDict['Mean'] contains sequencies of results for multiple diff --git a/sim/bp-results/branch-list.txt b/sim/bp-results/branch-list.txt new file mode 100644 index 000000000..c241610d3 --- /dev/null +++ b/sim/bp-results/branch-list.txt @@ -0,0 +1,12 @@ +gshare6.log gshare 6 +gshare8.log gshare 8 +gshare10.log gshare 10 +gshare12.log gshare 12 +gshare14.log gshare 14 +gshare16.log gshare 16 +twobit6.log twobit 6 +twobit8.log twobit 8 +twobit10.log twobit 10 +twobit12.log twobit 12 +twobit14.log twobit 14 +twobit16.log twobit 16 diff --git a/sim/bp-results/btb-list.txt b/sim/bp-results/btb-list.txt new file mode 100644 index 000000000..741efdf24 --- /dev/null +++ b/sim/bp-results/btb-list.txt @@ -0,0 +1,6 @@ +btb6.log btb 6 +btb8.log btb 8 +btb10.log btb 10 +btb12.log btb 12 +btb14.log btb 14 +btb16.log btb 16 diff --git a/sim/bp-results/class-list.txt b/sim/bp-results/class-list.txt new file mode 100644 index 000000000..0d24aa6ee --- /dev/null +++ b/sim/bp-results/class-list.txt @@ -0,0 +1,6 @@ +class6.log class 6 +class8.log class 8 +class10.log class 10 +class12.log class 12 +class14.log class 14 +class16.log class 16 diff --git a/sim/bp-results/ras-list.txt b/sim/bp-results/ras-list.txt new file mode 100644 index 000000000..b3e273a3d --- /dev/null +++ b/sim/bp-results/ras-list.txt @@ -0,0 +1,5 @@ +ras3.log ras 3 +ras4.log ras 4 +ras6.log ras 6 +ras10.log ras 10 +ras16.log ras 16 diff --git a/sim/wave.do b/sim/wave.do index 62ba0108f..20d383bd9 100644 --- a/sim/wave.do +++ b/sim/wave.do @@ -299,7 +299,15 @@ add wave -noupdate -group {WriteBack stage} /testbench/InstrW add wave -noupdate -group {WriteBack stage} /testbench/InstrWName add wave -noupdate -expand -group Bpred -expand -group {branch update selection inputs} /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/GHRM add wave -noupdate -expand -group Bpred -expand -group {branch update selection inputs} -label PHT /testbench/dut/core/ifu/bpred/bpred/Predictor/DirPredictor/PHT/mem -add wave -noupdate -expand -group Bpred -expand -group {branch update selection inputs} -divider {class check} +add wave -noupdate -expand -group Bpred -expand -group {branch update selection inputs} {/testbench/dut/core/ifu/bpred/bpred/RASPredictor/memory[5]} +add wave -noupdate -expand -group Bpred -expand -group {branch update selection inputs} {/testbench/dut/core/ifu/bpred/bpred/RASPredictor/memory[4]} +add wave -noupdate -expand -group Bpred -expand -group {branch update selection inputs} {/testbench/dut/core/ifu/bpred/bpred/RASPredictor/memory[3]} +add wave -noupdate -expand -group Bpred -expand -group {branch update selection inputs} {/testbench/dut/core/ifu/bpred/bpred/RASPredictor/memory[2]} +add wave -noupdate -expand -group Bpred -expand -group {branch update selection inputs} {/testbench/dut/core/ifu/bpred/bpred/RASPredictor/memory[1]} +add wave -noupdate -expand -group Bpred -expand -group {branch update selection inputs} {/testbench/dut/core/ifu/bpred/bpred/RASPredictor/memory[0]} +add wave -noupdate -expand -group Bpred -expand -group RAS -expand /testbench/dut/core/ifu/bpred/bpred/RASPredictor/memory +add wave -noupdate -expand -group Bpred -expand -group RAS /testbench/dut/core/ifu/bpred/bpred/RASPredictor/Ptr +add wave -noupdate -expand -group Bpred -divider {class check} add wave -noupdate -expand -group Bpred -expand -group prediction /testbench/dut/core/ifu/bpred/bpred/RASPCF add wave -noupdate -expand -group Bpred -expand -group prediction -expand -group ex /testbench/dut/core/ifu/bpred/bpred/PCSrcE add wave -noupdate -group {PCNext Generation} /testbench/dut/core/ifu/PCNextF @@ -578,31 +586,31 @@ add wave -noupdate -group ifu -group itlb -expand -group key19 {/testbench/dut/c add wave -noupdate -group ifu -group itlb -expand -group key19 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[19]/Key1} add wave -noupdate -group ifu -group itlb -expand -group key19 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[19]/Query0} add wave -noupdate -group ifu -group itlb -expand -group key19 {/testbench/dut/core/ifu/immu/immu/tlb/tlb/tlbcam/camlines[19]/Query1} -add wave -noupdate -expand -group {Performance Counters} -label MCYCLE -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[0]} -add wave -noupdate -expand -group {Performance Counters} -label MINSTRET -radix hexadecimal {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[2]} -add wave -noupdate -expand -group {Performance Counters} -expand -group BP -label Branch -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[3]} -add wave -noupdate -expand -group {Performance Counters} -expand -group BP -label {BP Dir Wrong} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[7]} -add wave -noupdate -expand -group {Performance Counters} -expand -group BP -label {Jump (Not Return)} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[4]} -add wave -noupdate -expand -group {Performance Counters} -expand -group BP -label Return -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[5]} -add wave -noupdate -expand -group {Performance Counters} -expand -group BP -label {BP Wrong} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[6]} -add wave -noupdate -expand -group {Performance Counters} -expand -group BP -label {BTA Wrong} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[8]} -add wave -noupdate -expand -group {Performance Counters} -expand -group BP -label {RAS Wrong} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[9]} -add wave -noupdate -expand -group {Performance Counters} -expand -group BP -label {BP CLASS WRONG} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[10]} -add wave -noupdate -expand -group {Performance Counters} -group ICACHE -label {I Cache Access} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[16]} -add wave -noupdate -expand -group {Performance Counters} -group ICACHE -label {I Cache Miss} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[17]} -add wave -noupdate -expand -group {Performance Counters} -group ICACHE -label {I Cache Miss Cycles} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[18]} -add wave -noupdate -expand -group {Performance Counters} -group DCACHE -label {Load Stall} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[11]} -add wave -noupdate -expand -group {Performance Counters} -group DCACHE -label {Store Stall} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[12]} -add wave -noupdate -expand -group {Performance Counters} -group DCACHE -label {DCACHE MISS} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[14]} -add wave -noupdate -expand -group {Performance Counters} -group DCACHE -label {DCACHE ACCESS} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[13]} -add wave -noupdate -expand -group {Performance Counters} -group DCACHE -label {D Cache Miss Cycles} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[15]} -add wave -noupdate -expand -group {Performance Counters} -group Privileged -label {CSR Write} {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[19]} -add wave -noupdate -expand -group {Performance Counters} -group Privileged -label Fence.I {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[20]} -add wave -noupdate -expand -group {Performance Counters} -group Privileged -label sfence.VMA {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[21]} -add wave -noupdate -expand -group {Performance Counters} -group Privileged -label Interrupt {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[22]} -add wave -noupdate -expand -group {Performance Counters} -group Privileged -label Exception {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[23]} -add wave -noupdate -expand -group {Performance Counters} -label {FDiv or IDiv Cycles} {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[24]} -add wave -noupdate -expand -group {Performance Counters} /testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW +add wave -noupdate -group {Performance Counters} -label MCYCLE -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[0]} +add wave -noupdate -group {Performance Counters} -label MINSTRET -radix hexadecimal {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[2]} +add wave -noupdate -group {Performance Counters} -expand -group BP -label Branch -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[3]} +add wave -noupdate -group {Performance Counters} -expand -group BP -label {BP Dir Wrong} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[7]} +add wave -noupdate -group {Performance Counters} -expand -group BP -label {Jump (Not Return)} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[4]} +add wave -noupdate -group {Performance Counters} -expand -group BP -label Return -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[5]} +add wave -noupdate -group {Performance Counters} -expand -group BP -label {BP Wrong} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[6]} +add wave -noupdate -group {Performance Counters} -expand -group BP -label {BTA Wrong} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[8]} +add wave -noupdate -group {Performance Counters} -expand -group BP -label {RAS Wrong} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[9]} +add wave -noupdate -group {Performance Counters} -expand -group BP -label {BP CLASS WRONG} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[10]} +add wave -noupdate -group {Performance Counters} -group ICACHE -label {I Cache Access} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[16]} +add wave -noupdate -group {Performance Counters} -group ICACHE -label {I Cache Miss} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[17]} +add wave -noupdate -group {Performance Counters} -group ICACHE -label {I Cache Miss Cycles} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[18]} +add wave -noupdate -group {Performance Counters} -group DCACHE -label {Load Stall} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[11]} +add wave -noupdate -group {Performance Counters} -group DCACHE -label {Store Stall} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[12]} +add wave -noupdate -group {Performance Counters} -group DCACHE -label {DCACHE MISS} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[14]} +add wave -noupdate -group {Performance Counters} -group DCACHE -label {DCACHE ACCESS} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[13]} +add wave -noupdate -group {Performance Counters} -group DCACHE -label {D Cache Miss Cycles} -radix unsigned {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[15]} +add wave -noupdate -group {Performance Counters} -group Privileged -label {CSR Write} {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[19]} +add wave -noupdate -group {Performance Counters} -group Privileged -label Fence.I {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[20]} +add wave -noupdate -group {Performance Counters} -group Privileged -label sfence.VMA {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[21]} +add wave -noupdate -group {Performance Counters} -group Privileged -label Interrupt {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[22]} +add wave -noupdate -group {Performance Counters} -group Privileged -label Exception {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[23]} +add wave -noupdate -group {Performance Counters} -label {FDiv or IDiv Cycles} {/testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW[24]} +add wave -noupdate -group {Performance Counters} /testbench/dut/core/priv/priv/csr/counters/counters/HPMCOUNTER_REGW add wave -noupdate -group {ifu } -color Gold /testbench/dut/core/ifu/bus/icache/ahbcacheinterface/AHBBuscachefsm/CurrState add wave -noupdate -group {ifu } /testbench/dut/core/ifu/bus/icache/ahbcacheinterface/AHBBuscachefsm/HREADY add wave -noupdate -group {ifu } /testbench/dut/core/ifu/bus/icache/ahbcacheinterface/FetchBuffer @@ -677,7 +685,7 @@ add wave -noupdate /testbench/dut/core/fpu/fpu/fctrl/IllegalFPUInstrD add wave -noupdate /testbench/dut/core/fpu/fpu/fctrl/STATUS_FS add wave -noupdate /testbench/dut/core/priv/priv/csr/csrsr/STATUS_FS_INT TreeUpdate [SetDefaultTree] -WaveRestoreCursors {{Cursor 4} {172636 ns} 1} {{Cursor 4} {5101 ns} 0} {{Cursor 3} {152766 ns} 1} +WaveRestoreCursors {{Cursor 4} {172636 ns} 1} {{Cursor 4} {111958 ns} 0} {{Cursor 3} {152766 ns} 1} quietly wave cursor active 2 configure wave -namecolwidth 250 configure wave -valuecolwidth 194 @@ -693,4 +701,4 @@ configure wave -griddelta 40 configure wave -timeline 0 configure wave -timelineunits ns update -WaveRestoreZoom {4326 ns} {6929 ns} +WaveRestoreZoom {37879604 ns} {38203328 ns} From 77c591621cd0228e120246f8ccf9fa48c224e4fa Mon Sep 17 00:00:00 2001 From: Ross Thompson Date: Wed, 27 Sep 2023 13:57:40 -0500 Subject: [PATCH 20/32] Renamed parseTest.py to parseHPMC.py --- bin/parseHPMC.py | 624 +++++++++++++++++++++++++++++------------------ bin/parseTest.py | 470 ----------------------------------- 2 files changed, 385 insertions(+), 709 deletions(-) delete mode 100755 bin/parseTest.py diff --git a/bin/parseHPMC.py b/bin/parseHPMC.py index 8bf98ef5a..bb6d2871e 100755 --- a/bin/parseHPMC.py +++ b/bin/parseHPMC.py @@ -1,8 +1,8 @@ #!/usr/bin/python3 ########################################### -## Written: Ross Thompson ross1728@gmail.com -## Created: 4 Jan 2022 +## Written: Rose Thompson ross1728@gmail.com +## Created: 20 September 2023 ## Modified: ## ## Purpose: Parses the performance counters from a modelsim trace. @@ -28,111 +28,30 @@ import os import sys import matplotlib.pyplot as plt -import re +import math +import numpy as np +import argparse -#RefData={'twobitCModel' :(['6', '8', '10', '12', '14', '16'], -# [11.0680836450622, 8.53864970807778, 7.59565430177984, 6.38741598498948, 5.83662961500838, 5.83662961500838]), -# 'gshareCModel' : (['6', '8', '10', '12', '14', '16'], -# [14.5859173702079, 12.3634674403619, 10.5806018170154, 8.38831266973592, 6.37097544620762, 3.52638362703015]) -#} +RefData = [('twobitCModel6', 'twobitCModel', 64, 9.65280765420711), ('twobitCModel8', 'twobitCModel', 256, 8.75120245829945), ('twobitCModel10', 'twobitCModel', 1024, 8.1318382397263), + ('twobitCModel12', 'twobitCModel', 4096, 7.53026646633342), ('twobitCModel14', 'twobitCModel', 16384, 6.07679338544009), ('twobitCModel16', 'twobitCModel', 65536, 6.07679338544009), + ('gshareCModel6', 'gshareCModel', 64, 10.6602835418646), ('gshareCModel8', 'gshareCModel', 256, 8.38384710559667), ('gshareCModel10', 'gshareCModel', 1024, 6.36847432155534), + ('gshareCModel12', 'gshareCModel', 4096, 3.91108491151983), ('gshareCModel14', 'gshareCModel', 16384, 2.83926519215395), ('gshareCModel16', 'gshareCModel', 65536, .60213659066941)] -#RefData = [('twobitCModel6', 11.0501534891674), ('twobitCModel8', 8.51829052266352), ('twobitCModel10', 7.56775222626483), -# ('twobitCModel12', 6.31366834586515), ('twobitCModel14', 5.72699936834177), ('twobitCModel16', 5.72699936834177), -# ('gshareCModel6', 14.5731555979574), ('gshareCModel8', 12.3155658100497), ('gshareCModel10', 10.4589596630561), -# ('gshareCModel12', 8.25796055444401), ('gshareCModel14', 6.23093702707613), ('gshareCModel16', 3.34001125650374)] - -RefData = [('twobitCModel6', 9.65280765420711), ('twobitCModel8', 8.75120245829945), ('twobitCModel10', 8.1318382397263), - ('twobitCModel12', 7.53026646633342), ('twobitCModel14', 6.07679338544009), ('twobitCModel16', 6.07679338544009), - ('gshareCModel6', 10.6602835418646), ('gshareCModel8', 8.38384710559667), ('gshareCModel10', 6.36847432155534), - ('gshareCModel12', 3.91108491151983), ('gshareCModel14', 2.83926519215395), ('gshareCModel16', .60213659066941)] - - -def ComputeCPI(benchmark): - 'Computes and inserts CPI into benchmark stats.' - (nameString, opt, dataDict) = benchmark - CPI = 1.0 * int(dataDict['Mcycle']) / int(dataDict['InstRet']) - dataDict['CPI'] = CPI - -def ComputeBranchDirMissRate(benchmark): - 'Computes and inserts branch direction miss prediction rate.' - (nameString, opt, dataDict) = benchmark - branchDirMissRate = 100.0 * int(dataDict['BP Dir Wrong']) / int(dataDict['Br Count']) - dataDict['BDMR'] = branchDirMissRate - -def ComputeBranchTargetMissRate(benchmark): - 'Computes and inserts branch target miss prediction rate.' - # *** this is wrong in the verilog test bench - (nameString, opt, dataDict) = benchmark - branchTargetMissRate = 100.0 * int(dataDict['BP Target Wrong']) / (int(dataDict['Br Count']) + int(dataDict['Jump Not Return'])) - dataDict['BTMR'] = branchTargetMissRate - -def ComputeRASMissRate(benchmark): - 'Computes and inserts return address stack miss prediction rate.' - (nameString, opt, dataDict) = benchmark - RASMPR = 100.0 * int(dataDict['RAS Wrong']) / int(dataDict['Return']) - dataDict['RASMPR'] = RASMPR - -def ComputeInstrClassMissRate(benchmark): - 'Computes and inserts instruction class miss prediction rate.' - (nameString, opt, dataDict) = benchmark - ClassMPR = 100.0 * int(dataDict['Instr Class Wrong']) / int(dataDict['InstRet']) - dataDict['ClassMPR'] = ClassMPR +def ParseBranchListFile(path): + '''Take the path to the list of Questa Sim log files containing the performance counters outputs. File + is formated in row columns. Each row is a trace with the file, branch predictor type, and the parameters. + parameters can be any number and depend on the predictor type. Returns a list of lists.''' + lst = [] + BranchList = open(path, 'r') + for line in BranchList: + tokens = line.split() + predictorLog = os.path.dirname(path) + '/' + tokens[0] + predictorType = tokens[1] + predictorParams = tokens[2::] + lst.append([predictorLog, predictorType, predictorParams]) + #print(predictorLog, predictorType, predictorParams) + return lst -def ComputeICacheMissRate(benchmark): - 'Computes and inserts instruction class miss prediction rate.' - (nameString, opt, dataDict) = benchmark - ICacheMR = 100.0 * int(dataDict['I Cache Miss']) / int(dataDict['I Cache Access']) - dataDict['ICacheMR'] = ICacheMR - -def ComputeICacheMissTime(benchmark): - 'Computes and inserts instruction class miss prediction rate.' - (nameString, opt, dataDict) = benchmark - cycles = int(dataDict['I Cache Miss']) - if(cycles == 0): ICacheMR = 0 - else: ICacheMR = 100.0 * int(dataDict['I Cache Cycles']) / cycles - dataDict['ICacheMT'] = ICacheMR - -def ComputeDCacheMissRate(benchmark): - 'Computes and inserts instruction class miss prediction rate.' - (nameString, opt, dataDict) = benchmark - DCacheMR = 100.0 * int(dataDict['D Cache Miss']) / int(dataDict['D Cache Access']) - dataDict['DCacheMR'] = DCacheMR - -def ComputeDCacheMissTime(benchmark): - 'Computes and inserts instruction class miss prediction rate.' - (nameString, opt, dataDict) = benchmark - cycles = int(dataDict['D Cache Miss']) - if(cycles == 0): DCacheMR = 0 - else: DCacheMR = 100.0 * int(dataDict['D Cache Cycles']) / cycles - dataDict['DCacheMT'] = DCacheMR - -def ComputeAll(benchmarks): - for benchmark in benchmarks: - ComputeCPI(benchmark) - ComputeBranchDirMissRate(benchmark) - ComputeBranchTargetMissRate(benchmark) - ComputeRASMissRate(benchmark) - ComputeInstrClassMissRate(benchmark) - ComputeICacheMissRate(benchmark) - ComputeICacheMissTime(benchmark) - ComputeDCacheMissRate(benchmark) - ComputeDCacheMissTime(benchmark) - -def printStats(benchmark): - (nameString, opt, dataDict) = benchmark - print('Test', nameString) - print('Compile configuration', opt) - print('CPI \t\t\t %1.2f' % dataDict['CPI']) - print('Branch Dir Pred Miss Rate %2.2f' % dataDict['BDMR']) - print('Branch Target Pred Miss Rate %2.2f' % dataDict['BTMR']) - print('RAS Miss Rate \t\t %1.2f' % dataDict['RASMPR']) - print('Instr Class Miss Rate %1.2f' % dataDict['ClassMPR']) - print('I Cache Miss Rate %1.4f' % dataDict['ICacheMR']) - print('I Cache Miss Ave Cycles %1.4f' % dataDict['ICacheMT']) - print('D Cache Miss Rate %1.4f' % dataDict['DCacheMR']) - print('D Cache Miss Ave Cycles %1.4f' % dataDict['DCacheMT']) - print() - def ProcessFile(fileName): '''Extract preformance counters from a modelsim log. Outputs a list of tuples for each test/benchmark. The tuple contains the test name, optimization characteristics, and dictionary of performance counters.''' @@ -150,43 +69,37 @@ def ProcessFile(fileName): HPMClist = { } elif(len(lineToken) > 4 and lineToken[1][0:3] == 'Cnt'): countToken = line.split('=')[1].split() - value = int(countToken[0]) + value = int(countToken[0]) if countToken[0] != 'x' else 0 name = ' '.join(countToken[1:]) HPMClist[name] = value elif ('is done' in line): benchmarks.append((testName, opt, HPMClist)) return benchmarks -def ComputeArithmeticAverage(benchmarks): - average = {} - index = 0 - for (testName, opt, HPMClist) in benchmarks: - for field in HPMClist: - value = HPMClist[field] - if field not in average: - average[field] = value - else: - average[field] += value - index += 1 - benchmarks.append(('All', '', average)) -def FormatToPlot(currBenchmark): - names = [] - values = [] - for config in currBenchmark: - #print ('config' , config) - names.append(config[0]) - values.append(config[1]) - return (names, values) +def ComputeStats(benchmarks): + for benchmark in benchmarks: + (nameString, opt, dataDict) = benchmark + dataDict['CPI'] = 1.0 * int(dataDict['Mcycle']) / int(dataDict['InstRet']) + dataDict['BDMR'] = 100.0 * int(dataDict['BP Dir Wrong']) / int(dataDict['Br Count']) + dataDict['BTMR'] = 100.0 * int(dataDict['BP Target Wrong']) / (int(dataDict['Br Count']) + int(dataDict['Jump Not Return'])) + dataDict['RASMPR'] = 100.0 * int(dataDict['RAS Wrong']) / int(dataDict['Return']) + dataDict['ClassMPR'] = 100.0 * int(dataDict['Instr Class Wrong']) / int(dataDict['InstRet']) + dataDict['ICacheMR'] = 100.0 * int(dataDict['I Cache Miss']) / int(dataDict['I Cache Access']) + + cycles = int(dataDict['I Cache Miss']) + if(cycles == 0): ICacheMR = 0 + else: ICacheMR = 100.0 * int(dataDict['I Cache Cycles']) / cycles + dataDict['ICacheMT'] = ICacheMR + + dataDict['DCacheMR'] = 100.0 * int(dataDict['D Cache Miss']) / int(dataDict['D Cache Access']) + + (nameString, opt, dataDict) = benchmark + cycles = int(dataDict['D Cache Miss']) + if(cycles == 0): DCacheMR = 0 + else: DCacheMR = 100.0 * int(dataDict['D Cache Cycles']) / cycles + dataDict['DCacheMT'] = DCacheMR -def GeometricAverage(benchmarks, field): - Product = 1 - index = 0 - for (testName, opt, HPMCList) in benchmarks: - #print(HPMCList) - Product *= HPMCList[field] - index += 1 - return Product ** (1.0/index) def ComputeGeometricAverage(benchmarks): fields = ['BDMR', 'BTMR', 'RASMPR', 'ClassMPR', 'ICacheMR', 'DCacheMR', 'CPI', 'ICacheMT', 'DCacheMT'] @@ -196,129 +109,362 @@ def ComputeGeometricAverage(benchmarks): index = 0 for (testName, opt, HPMCList) in benchmarks: #print(HPMCList) - Product *= HPMCList[field] + value = HPMCList[field] + if(value != 0): Product *= value # if that value is 0 exclude from mean because it destories the geo mean index += 1 AllAve[field] = Product ** (1.0/index) - benchmarks.append(('All', '', AllAve)) + benchmarks.append(('Mean', '', AllAve)) -if(sys.argv[1] == '-b'): - configList = [] - summery = 0 - if(sys.argv[2] == '-s'): - summery = 1 - sys.argv = sys.argv[1::] - for config in sys.argv[2::]: - benchmarks = ProcessFile(config) - #ComputeArithmeticAverage(benchmarks) - ComputeAll(benchmarks) - ComputeGeometricAverage(benchmarks) - #print('CONFIG: %s GEO MEAN: %f' % (config, GeometricAverage(benchmarks, 'BDMR'))) - configList.append((config.split('.')[0], benchmarks)) +def GenerateName(predictorType, predictorParams): + if(predictorType == 'gshare' or predictorType == 'twobit' or predictorType == 'btb' or predictorType == 'class' or predictorType == 'ras'): + return predictorType + predictorParams[0] + elif(predictorParams == 'local'): + return predictorType + predictorParams[0] + '_' + predictorParams[1] + else: + print(f'Error unsupported predictor type {predictorType}') + sys.exit(-1) - # Merge all configruations into a single list - benchmarkAll = [] - for (config, benchmarks) in configList: - #print(config) +def ComputePredNumEntries(predictorType, predictorParams): + if(predictorType == 'gshare' or predictorType == 'twobit' or predictorType == 'btb' or predictorType == 'class'): + return 2**int(predictorParams[0]) + elif(predictorType == 'ras'): + return int(predictorParams[0]) + elif(predictorParams == 'local'): + return 2**int(predictorParams[0]) * int(predictorParams[1]) + 2**int(predictorParams[1]) + else: + print(f'Error unsupported predictor type {predictorType}') + sys.exit(-1) + +def BuildDataBase(predictorLogs): + # Once done with the following loop, performanceCounterList will contain the predictor type and size along with the + # raw performance counter data and the processed data on a per benchmark basis. It also includes the geometric mean. + # list + # branch predictor configuration 0 (tuple) + # benchmark name + # compiler optimization + # data (dictionary) + # dictionary of performance counters + # branch predictor configuration 1 (tuple) + # benchmark name (dictionary) + # compiler optimization + # data + # dictionary of performance counters + # ... + performanceCounterList = [] + for trace in predictorLogs: + predictorLog = trace[0] + predictorType = trace[1] + predictorParams = trace[2] + # Extract the performance counter data + performanceCounters = ProcessFile(predictorLog) + ComputeStats(performanceCounters) + ComputeGeometricAverage(performanceCounters) + #print(performanceCounters) + performanceCounterList.append([GenerateName(predictorType, predictorParams), predictorType, performanceCounters, ComputePredNumEntries(predictorType, predictorParams)]) + return performanceCounterList + +def ReorderDataBase(performanceCounterList): + # Reorder the data so the benchmark name comes first, then the branch predictor configuration + benchmarkFirstList = [] + for (predictorName, predictorPrefixName, benchmarks, entries) in performanceCounterList: for benchmark in benchmarks: (nameString, opt, dataDict) = benchmark - #print("BENCHMARK") - #print(nameString) - #print(opt) - #print(dataDict) - benchmarkAll.append((nameString, opt, config, dataDict)) - #print('ALL!!!!!!!!!!') - #for bench in benchmarkAll: - # print('BENCHMARK') - # print(bench) - #print('ALL!!!!!!!!!!') + benchmarkFirstList.append((nameString, opt, predictorName, predictorPrefixName, entries, dataDict)) + return benchmarkFirstList +def ExtractSelectedData(benchmarkFirstList): # now extract all branch prediction direction miss rates for each # namestring + opt, config benchmarkDict = { } - for benchmark in benchmarkAll: - (name, opt, config, dataDict) = benchmark - if name+'_'+opt in benchmarkDict: - benchmarkDict[name+'_'+opt].append((config, dataDict['BDMR'])) + for benchmark in benchmarkFirstList: + (name, opt, config, prefixName, entries, dataDict) = benchmark + if opt == 'bd_speedopt_speed': NewName = name+'Sp' + elif opt == 'bd_sizeopt_speed': NewName = name+'Sz' + else: NewName = name + #print(NewName) + #NewName = name+'_'+opt + if NewName in benchmarkDict: + benchmarkDict[NewName].append((config, prefixName, entries, dataDict[ReportPredictorType])) else: - benchmarkDict[name+'_'+opt] = [(config, dataDict['BDMR'])] + benchmarkDict[NewName] = [(config, prefixName, entries, dataDict[ReportPredictorType])] + return benchmarkDict - size = len(benchmarkDict) - index = 1 - if(summery == 0): - #print('Number of plots', size) +def ReportAsTable(benchmarkDict): + refLine = benchmarkDict['Mean'] + FirstLine = [] + SecondLine = [] + for (name, typ, size, val) in refLine: + FirstLine.append(name) + SecondLine.append(size) - for benchmarkName in benchmarkDict: - currBenchmark = benchmarkDict[benchmarkName] - (names, values) = FormatToPlot(currBenchmark) - print(names, values) - plt.subplot(6, 7, index) - plt.bar(names, values) - plt.title(benchmarkName) - plt.ylabel('BR Dir Miss Rate (%)') - #plt.xlabel('Predictor') - index += 1 - else: - combined = benchmarkDict['All_'] - # merge the reference data into rtl data - # combined.extend(RefData) - (name, value) = FormatToPlot(combined) - lst = [] - dct = {} - category = [] - length = [] - accuracy = [] - for index in range(0, len(name)): - match = re.match(r"([a-z]+)([0-9]+)", name[index], re.I) - percent = 100 -value[index] - if match: - (PredType, size) = match.groups() - category.append(PredType) - length.append(size) - accuracy.append(percent) - if(PredType not in dct): - dct[PredType] = ([size], [percent]) - else: - (currSize, currPercent) = dct[PredType] - currSize.append(size) - currPercent.append(percent) - dct[PredType] = (currSize, currPercent) - print(dct) + sys.stdout.write('benchmark\t\t') + for name in FirstLine: + if(len(name) < 8): sys.stdout.write('%s\t\t' % name) + else: sys.stdout.write('%s\t' % name) + sys.stdout.write('\n') + sys.stdout.write('size\t\t\t') + for size in SecondLine: + if(len(str(size)) < 8): sys.stdout.write('%d\t\t' % size) + else: sys.stdout.write('%d\t' % size) + sys.stdout.write('\n') + + if(args.summary): + sys.stdout.write('Mean\t\t\t') + for (name, typ, size, val) in refLine: + sys.stdout.write('%0.2f\t\t' % (val if not args.invert else 100 - val)) + sys.stdout.write('\n') + + if(not args.summary): + for benchmark in benchmarkDict: + length = len(benchmark) + if(length < 8): sys.stdout.write('%s\t\t\t' % benchmark) + elif(length < 16): sys.stdout.write('%s\t\t' % benchmark) + else: sys.stdout.write('%s\t' % benchmark) + for (name, typ, size, val) in benchmarkDict[benchmark]: + sys.stdout.write('%0.2f\t\t' % (val if not args.invert else 100 -val)) + sys.stdout.write('\n') + +def ReportAsText(benchmarkDict): + if(args.summary): + mean = benchmarkDict['Mean'] + print('Mean') + for (name, typ, size, val) in mean: + sys.stdout.write('%s %s %0.2f\n' % (name, size, val if not args.invert else 100 - val)) + + if(not args.summary): + for benchmark in benchmarkDict: + print(benchmark) + for (name, type, size, val) in benchmarkDict[benchmark]: + sys.stdout.write('%s %s %0.2f\n' % (name, size, val if not args.invert else 100 - val)) + +def Inversion(lst): + return [x if not args.invert else 100 - x for x in lst] + +def BarGraph(seriesDict, xlabelList, BenchPerRow, FileName): + index = 0 + NumberInGroup = len(seriesDict) + # Figure out width of bars. NumberInGroup bars + want 2 bar space + # the space between groups is 1 + EffectiveNumInGroup = NumberInGroup + 2 + barWidth = 1 / EffectiveNumInGroup + fig = plt.subplots(figsize = (EffectiveNumInGroup*BenchPerRow/8, 4)) + colors = ['blue', 'blue', 'blue', 'blue', 'blue', 'blue', 'black', 'black', 'black', 'black', 'black', 'black'] + for name in seriesDict: + xpos = np.arange(BenchPerRow) + xpos = [x + index*barWidth for x in xpos] + values = seriesDict[name] + plt.bar(xpos, Inversion(values), width=barWidth, edgecolor='grey', label=name, color=colors[index%len(colors)]) + index += 1 + plt.xticks([r + barWidth*(NumberInGroup/2-0.5) for r in range(0, BenchPerRow)], xlabelList) + plt.xlabel('Benchmark') + if(not args.invert): plt.ylabel('Misprediction Rate (%)') + else: plt.ylabel('Prediction Accuracy (%)') + plt.legend(loc='upper left', ncol=2) + plt.savefig(FileName) + +def SelectPartition(xlabelListBig, seriesDictBig, group, BenchPerRow): + seriesDictTrunk = {} + for benchmarkName in seriesDictBig: + lst = seriesDictBig[benchmarkName] + seriesDictTrunk[benchmarkName] = lst[group*BenchPerRow:(group+1)*BenchPerRow] + xlabelListTrunk = xlabelListBig[group*BenchPerRow:(group+1)*BenchPerRow] + return(xlabelListTrunk, seriesDictTrunk) + + +def ReportAsGraph(benchmarkDict, bar): + def FormatToPlot(currBenchmark): + names = [] + sizes = [] + values = [] + typs = [] + for config in currBenchmark: + names.append(config[0]) + sizes.append(config[1]) + values.append(config[2]) + typs.append(config[3]) + return (names, sizes, values, typs) + titlesInvert = {'BDMR' : 'Branch Direction Accuracy', + 'BTMR' : 'Branch Target Accuracy', + 'RASMPR': 'RAS Accuracy', + 'ClassMPR': 'Class Prediction Accuracy'} + titles = {'BDMR' : 'Branch Direction Misprediction', + 'BTMR' : 'Branch Target Misprediction', + 'RASMPR': 'RAS Misprediction', + 'ClassMPR': 'Class Misprediction'} + if(args.summary): + markers = ['x', '.', '+', '*', '^', 'o', ',', 's'] + colors = ['blue', 'black', 'gray', 'dodgerblue', 'lightsteelblue', 'turquoise', 'black', 'blue'] + temp = benchmarkDict['Mean'] + + # the benchmarkDict['Mean'] contains sequencies of results for multiple + # branch predictors with various parameterizations + # group the parameterizations by the common typ. + sequencies = {} + for (name, typ, size, value) in benchmarkDict['Mean']: + if not typ in sequencies: + sequencies[typ] = [(size, value)] + else: + sequencies[typ].append((size,value)) + # then graph the common typ as a single line+scatter plot + # finally repeat for all typs of branch predictors and overlay fig, axes = plt.subplots() - marker={'twobit' : '^', 'gshare' : 'o', 'global' : 's', 'gshareBasic' : '*', 'globalBasic' : 'x', 'btb': 'x', 'twobitCModel' : 'x', 'gshareCModel' : '*', 'tenlocal' : '.', 'eightlocal' : ',', 'fourlocal' : 'x', 'tenlocalahead' : '.', 'eightlocalahead' : ',', 'fourlocalahead' : 'x', 'tenlocalrepair' : 'x'} - colors={'twobit' : 'black', 'gshare' : 'blue', 'global' : 'dodgerblue', 'gshareBasic' : 'turquoise', 'globalBasic' : 'lightsteelblue', 'btb' : 'blue', 'twobitCModel' : 'gray', 'gshareCModel' : 'dodgerblue', 'tenlocal' : 'lightblue', 'eightlocal' : 'lightblue', 'fourlocal' : 'lightblue', 'tenlocalahead' : 'lightblue', 'eightlocalahead' : 'lightblue', 'fourlocalahead' : 'lightblue', 'tenlocalrepair' : 'lightblue'} - for cat in dct: - (x, y) = dct[cat] - x=[int(2**int(v)) for v in x] - #print(x, y) - print(cat) - axes.plot(x,y, color=colors[cat]) - axes.scatter(x,y, label=cat, marker=marker[cat], color=colors[cat]) - #plt.scatter(x, y, label=cat) - #plt.plot(x, y) - #axes.set_xticks([4, 6, 8, 10, 12, 14]) + index = 0 + if(args.invert): plt.title(titlesInvert[ReportPredictorType]) + else: plt.title(titles[ReportPredictorType]) + for branchPredName in sequencies: + data = sequencies[branchPredName] + (xdata, ydata) = zip(*data) + if args.invert: ydata = [100 - x for x in ydata] + axes.plot(xdata, ydata, color=colors[index]) + axes.scatter(xdata, ydata, label=branchPredName, color=colors[index], marker=markers[index]) + index = (index + 1) % len(markers) axes.legend(loc='upper left') axes.set_xscale("log") axes.set_ylabel('Prediction Accuracy') axes.set_xlabel('Entries') - axes.set_xticks([64, 256, 1024, 4096, 16384, 65536]) - axes.set_xticklabels([64, 256, 1024, 4096, 16384, 65536]) + axes.set_xticks(xdata) + axes.set_xticklabels(xdata) axes.grid(color='b', alpha=0.5, linestyle='dashed', linewidth=0.5) - plt.show() - - -else: - # steps 1 and 2 - benchmarks = ProcessFile(sys.argv[1]) - print(benchmarks[0]) - ComputeAll(benchmarks) - ComputeGeometricAverage(benchmarks) - # 3 process into useful data - # cache hit rates - # cache fill time - # branch predictor status - # hazard counts - # CPI - # instruction distribution - for benchmark in benchmarks: - printStats(benchmark) + plt.show() + + # if(not args.summary): + # size = len(benchmarkDict) + # sizeSqrt = math.sqrt(size) + # isSquare = math.isclose(sizeSqrt, round(sizeSqrt)) + # numCol = math.floor(sizeSqrt) + # numRow = numCol + (0 if isSquare else 1) + # index = 1 + # fig = plt.figure() + # for benchmarkName in benchmarkDict: + # currBenchmark = benchmarkDict[benchmarkName] + # (names, typs, sizes, values) = FormatToPlot(currBenchmark) + # #axes.plot(numRow, numCol, index) + # ax = fig.add_subplot(numRow, numCol, index) + # ax.bar(names, values) + # ax.title.set_text(benchmarkName) + # #plt.ylabel('BR Dir Miss Rate (%)') + # #plt.xlabel('Predictor') + # index += 1 + + if(not args.summary): + size = len(benchmarkDict) + sizeSqrt = math.sqrt(size) + isSquare = math.isclose(sizeSqrt, round(sizeSqrt)) + numCol = math.floor(sizeSqrt) + numRow = numCol + (0 if isSquare else 1) + index = 1 + BenchPerRow = 7 + + xlabelList = [] + seriesDict = {} + + for benchmarkName in benchmarkDict: + currBenchmark = benchmarkDict[benchmarkName] + xlabelList.append(benchmarkName) + for (name, typ, size, value) in currBenchmark: + if(name not in seriesDict): + seriesDict[name] = [value] + else: + seriesDict[name].append(value) + if(index >= BenchPerRow): break + index += 1 + + xlabelListBig = [] + seriesDictBig = {} + for benchmarkName in benchmarkDict: + currBenchmark = benchmarkDict[benchmarkName] + xlabelListBig.append(benchmarkName) + for (name, typ, size, value) in currBenchmark: + if(name not in seriesDictBig): + seriesDictBig[name] = [value] + else: + seriesDictBig[name].append(value) + + #The next step will be to split the benchmarkDict into length BenchPerRow pieces then repeat the following code + # on each piece. + for row in range(0, math.ceil(39 / BenchPerRow)): + (xlabelListTrunk, seriesDictTrunk) = SelectPartition(xlabelListBig, seriesDictBig, row, BenchPerRow) + FileName = 'barSegment%d.png' % row + groupLen = len(xlabelListTrunk) + BarGraph(seriesDictTrunk, xlabelListTrunk, groupLen, FileName) + + +# main +parser = argparse.ArgumentParser(description='Parses performance counters from a Questa Sim trace to produce a graph or graphs.') + +# parse program arguments +metric = parser.add_mutually_exclusive_group() +metric.add_argument('-r', '--ras', action='store_const', help='Plot return address stack (RAS) performance.', default=False, const=True) +metric.add_argument('-d', '--direction', action='store_const', help='Plot direction prediction (2-bit, Gshare, local, etc) performance.', default=False, const=True) +metric.add_argument('-t', '--target', action='store_const', help='Plot branch target buffer (BTB) performance.', default=False, const=True) +metric.add_argument('-c', '--iclass', action='store_const', help='Plot instruction classification performance.', default=False, const=True) + +parser.add_argument('-s', '--summary', action='store_const', help='Show only the geometric average for all benchmarks.', default=False, const=True) +parser.add_argument('-b', '--bar', action='store_const', help='Plot graphs.', default=False, const=True) +parser.add_argument('-g', '--reference', action='store_const', help='Include the golden reference model from branch-predictor-simulator. Data stored statically at the top of %(prog)s. If you need to regenreate use CModelBranchAcurracy.sh', default=False, const=True) +parser.add_argument('-i', '--invert', action='store_const', help='Invert metric. Example Branch miss prediction becomes prediction accuracy. 100 - miss rate', default=False, const=True) + +displayMode = parser.add_mutually_exclusive_group() +displayMode.add_argument('--text', action='store_const', help='Display in text format only.', default=False, const=True) +displayMode.add_argument('--table', action='store_const', help='Display in text format only.', default=False, const=True) +displayMode.add_argument('--gui', action='store_const', help='Display in text format only.', default=False, const=True) +displayMode.add_argument('--debug', action='store_const', help='Display in text format only.', default=False, const=True) +parser.add_argument('sources', nargs=1) + +args = parser.parse_args() + +# Figure what we are reporting +ReportPredictorType = 'BDMR' # default +if(args.ras): ReportPredictorType = 'RASMPR' +if(args.target): ReportPredictorType = 'BTMR' +if(args.iclass): ReportPredictorType = 'ClassMPR' + +# Figure how we are displaying the data +ReportMode = 'gui' # default +if(args.text): ReportMode = 'text' +if(args.table): ReportMode = 'table' +if(args.debug): ReportMode = 'debug' + +# read the questa sim list file. +# row, col format. each row is a questa sim run with performance counters and a particular +# branch predictor type and size. size can be multiple parameters for more complex predictors like +# local history and tage. +# +predictorLogs = ParseBranchListFile(args.sources[0]) # digests the traces +performanceCounterList = BuildDataBase(predictorLogs) # builds a database of performance counters by trace and then by benchmark +benchmarkFirstList = ReorderDataBase(performanceCounterList) # reorder first by benchmark then trace +benchmarkDict = ExtractSelectedData(benchmarkFirstList) # filters to just the desired performance counter metric + +if(args.reference): benchmarkDict['Mean'].extend(RefData) +#print(benchmarkDict['Mean']) +#print(benchmarkDict['aha-mont64Speed']) +#print(benchmarkDict) + +# table format +if(ReportMode == 'table'): + ReportAsTable(benchmarkDict) + +if(ReportMode == 'text'): + ReportAsText(benchmarkDict) + +if(ReportMode == 'gui'): + ReportAsGraph(benchmarkDict, args.bar) + +# *** this is only needed of -b (no -s) + +# debug +#config0 = performanceCounterList[0][0] +#data0 = performanceCounterList[0][1] +#bench0 = data0[0] +#bench0name = bench0[0] +#bench0data = bench0[2] +#bench0BrCount = bench0data['Br Count'] +#bench1 = data0[1] + +#print(data0) +#print(bench0) +#print(bench1) + +#print(bench0name) +#print(bench0BrCount) diff --git a/bin/parseTest.py b/bin/parseTest.py deleted file mode 100755 index bb6d2871e..000000000 --- a/bin/parseTest.py +++ /dev/null @@ -1,470 +0,0 @@ -#!/usr/bin/python3 - -########################################### -## Written: Rose Thompson ross1728@gmail.com -## Created: 20 September 2023 -## Modified: -## -## Purpose: Parses the performance counters from a modelsim trace. -## -## A component of the CORE-V-WALLY configurable RISC-V project. -## -## Copyright (C) 2021-23 Harvey Mudd College & Oklahoma State University -## -## SPDX-License-Identifier: Apache-2.0 WITH SHL-2.1 -## -## Licensed under the Solderpad Hardware License v 2.1 (the “License”); you may not use this file -## except in compliance with the License, or, at your option, the Apache License version 2.0. You -## may obtain a copy of the License at -## -## https:##solderpad.org/licenses/SHL-2.1/ -## -## Unless required by applicable law or agreed to in writing, any work distributed under the -## License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, -## either express or implied. See the License for the specific language governing permissions -## and limitations under the License. -################################################################################################ - -import os -import sys -import matplotlib.pyplot as plt -import math -import numpy as np -import argparse - -RefData = [('twobitCModel6', 'twobitCModel', 64, 9.65280765420711), ('twobitCModel8', 'twobitCModel', 256, 8.75120245829945), ('twobitCModel10', 'twobitCModel', 1024, 8.1318382397263), - ('twobitCModel12', 'twobitCModel', 4096, 7.53026646633342), ('twobitCModel14', 'twobitCModel', 16384, 6.07679338544009), ('twobitCModel16', 'twobitCModel', 65536, 6.07679338544009), - ('gshareCModel6', 'gshareCModel', 64, 10.6602835418646), ('gshareCModel8', 'gshareCModel', 256, 8.38384710559667), ('gshareCModel10', 'gshareCModel', 1024, 6.36847432155534), - ('gshareCModel12', 'gshareCModel', 4096, 3.91108491151983), ('gshareCModel14', 'gshareCModel', 16384, 2.83926519215395), ('gshareCModel16', 'gshareCModel', 65536, .60213659066941)] - -def ParseBranchListFile(path): - '''Take the path to the list of Questa Sim log files containing the performance counters outputs. File - is formated in row columns. Each row is a trace with the file, branch predictor type, and the parameters. - parameters can be any number and depend on the predictor type. Returns a list of lists.''' - lst = [] - BranchList = open(path, 'r') - for line in BranchList: - tokens = line.split() - predictorLog = os.path.dirname(path) + '/' + tokens[0] - predictorType = tokens[1] - predictorParams = tokens[2::] - lst.append([predictorLog, predictorType, predictorParams]) - #print(predictorLog, predictorType, predictorParams) - return lst - -def ProcessFile(fileName): - '''Extract preformance counters from a modelsim log. Outputs a list of tuples for each test/benchmark. - The tuple contains the test name, optimization characteristics, and dictionary of performance counters.''' - # 1 find lines with Read memfile and extract test name - # 2 parse counters into a list of (name, value) tuples (dictionary maybe?) - benchmarks = [] - transcript = open(fileName, 'r') - HPMClist = { } - testName = '' - for line in transcript.readlines(): - lineToken = line.split() - if(len(lineToken) > 3 and lineToken[1] == 'Read' and lineToken[2] == 'memfile'): - opt = lineToken[3].split('/')[-4] - testName = lineToken[3].split('/')[-1].split('.')[0] - HPMClist = { } - elif(len(lineToken) > 4 and lineToken[1][0:3] == 'Cnt'): - countToken = line.split('=')[1].split() - value = int(countToken[0]) if countToken[0] != 'x' else 0 - name = ' '.join(countToken[1:]) - HPMClist[name] = value - elif ('is done' in line): - benchmarks.append((testName, opt, HPMClist)) - return benchmarks - - -def ComputeStats(benchmarks): - for benchmark in benchmarks: - (nameString, opt, dataDict) = benchmark - dataDict['CPI'] = 1.0 * int(dataDict['Mcycle']) / int(dataDict['InstRet']) - dataDict['BDMR'] = 100.0 * int(dataDict['BP Dir Wrong']) / int(dataDict['Br Count']) - dataDict['BTMR'] = 100.0 * int(dataDict['BP Target Wrong']) / (int(dataDict['Br Count']) + int(dataDict['Jump Not Return'])) - dataDict['RASMPR'] = 100.0 * int(dataDict['RAS Wrong']) / int(dataDict['Return']) - dataDict['ClassMPR'] = 100.0 * int(dataDict['Instr Class Wrong']) / int(dataDict['InstRet']) - dataDict['ICacheMR'] = 100.0 * int(dataDict['I Cache Miss']) / int(dataDict['I Cache Access']) - - cycles = int(dataDict['I Cache Miss']) - if(cycles == 0): ICacheMR = 0 - else: ICacheMR = 100.0 * int(dataDict['I Cache Cycles']) / cycles - dataDict['ICacheMT'] = ICacheMR - - dataDict['DCacheMR'] = 100.0 * int(dataDict['D Cache Miss']) / int(dataDict['D Cache Access']) - - (nameString, opt, dataDict) = benchmark - cycles = int(dataDict['D Cache Miss']) - if(cycles == 0): DCacheMR = 0 - else: DCacheMR = 100.0 * int(dataDict['D Cache Cycles']) / cycles - dataDict['DCacheMT'] = DCacheMR - - -def ComputeGeometricAverage(benchmarks): - fields = ['BDMR', 'BTMR', 'RASMPR', 'ClassMPR', 'ICacheMR', 'DCacheMR', 'CPI', 'ICacheMT', 'DCacheMT'] - AllAve = {} - for field in fields: - Product = 1 - index = 0 - for (testName, opt, HPMCList) in benchmarks: - #print(HPMCList) - value = HPMCList[field] - if(value != 0): Product *= value # if that value is 0 exclude from mean because it destories the geo mean - index += 1 - AllAve[field] = Product ** (1.0/index) - benchmarks.append(('Mean', '', AllAve)) - -def GenerateName(predictorType, predictorParams): - if(predictorType == 'gshare' or predictorType == 'twobit' or predictorType == 'btb' or predictorType == 'class' or predictorType == 'ras'): - return predictorType + predictorParams[0] - elif(predictorParams == 'local'): - return predictorType + predictorParams[0] + '_' + predictorParams[1] - else: - print(f'Error unsupported predictor type {predictorType}') - sys.exit(-1) - -def ComputePredNumEntries(predictorType, predictorParams): - if(predictorType == 'gshare' or predictorType == 'twobit' or predictorType == 'btb' or predictorType == 'class'): - return 2**int(predictorParams[0]) - elif(predictorType == 'ras'): - return int(predictorParams[0]) - elif(predictorParams == 'local'): - return 2**int(predictorParams[0]) * int(predictorParams[1]) + 2**int(predictorParams[1]) - else: - print(f'Error unsupported predictor type {predictorType}') - sys.exit(-1) - -def BuildDataBase(predictorLogs): - # Once done with the following loop, performanceCounterList will contain the predictor type and size along with the - # raw performance counter data and the processed data on a per benchmark basis. It also includes the geometric mean. - # list - # branch predictor configuration 0 (tuple) - # benchmark name - # compiler optimization - # data (dictionary) - # dictionary of performance counters - # branch predictor configuration 1 (tuple) - # benchmark name (dictionary) - # compiler optimization - # data - # dictionary of performance counters - # ... - performanceCounterList = [] - for trace in predictorLogs: - predictorLog = trace[0] - predictorType = trace[1] - predictorParams = trace[2] - # Extract the performance counter data - performanceCounters = ProcessFile(predictorLog) - ComputeStats(performanceCounters) - ComputeGeometricAverage(performanceCounters) - #print(performanceCounters) - performanceCounterList.append([GenerateName(predictorType, predictorParams), predictorType, performanceCounters, ComputePredNumEntries(predictorType, predictorParams)]) - return performanceCounterList - -def ReorderDataBase(performanceCounterList): - # Reorder the data so the benchmark name comes first, then the branch predictor configuration - benchmarkFirstList = [] - for (predictorName, predictorPrefixName, benchmarks, entries) in performanceCounterList: - for benchmark in benchmarks: - (nameString, opt, dataDict) = benchmark - benchmarkFirstList.append((nameString, opt, predictorName, predictorPrefixName, entries, dataDict)) - return benchmarkFirstList - -def ExtractSelectedData(benchmarkFirstList): - # now extract all branch prediction direction miss rates for each - # namestring + opt, config - benchmarkDict = { } - for benchmark in benchmarkFirstList: - (name, opt, config, prefixName, entries, dataDict) = benchmark - if opt == 'bd_speedopt_speed': NewName = name+'Sp' - elif opt == 'bd_sizeopt_speed': NewName = name+'Sz' - else: NewName = name - #print(NewName) - #NewName = name+'_'+opt - if NewName in benchmarkDict: - benchmarkDict[NewName].append((config, prefixName, entries, dataDict[ReportPredictorType])) - else: - benchmarkDict[NewName] = [(config, prefixName, entries, dataDict[ReportPredictorType])] - return benchmarkDict - -def ReportAsTable(benchmarkDict): - refLine = benchmarkDict['Mean'] - FirstLine = [] - SecondLine = [] - for (name, typ, size, val) in refLine: - FirstLine.append(name) - SecondLine.append(size) - - sys.stdout.write('benchmark\t\t') - for name in FirstLine: - if(len(name) < 8): sys.stdout.write('%s\t\t' % name) - else: sys.stdout.write('%s\t' % name) - sys.stdout.write('\n') - sys.stdout.write('size\t\t\t') - for size in SecondLine: - if(len(str(size)) < 8): sys.stdout.write('%d\t\t' % size) - else: sys.stdout.write('%d\t' % size) - sys.stdout.write('\n') - - if(args.summary): - sys.stdout.write('Mean\t\t\t') - for (name, typ, size, val) in refLine: - sys.stdout.write('%0.2f\t\t' % (val if not args.invert else 100 - val)) - sys.stdout.write('\n') - - if(not args.summary): - for benchmark in benchmarkDict: - length = len(benchmark) - if(length < 8): sys.stdout.write('%s\t\t\t' % benchmark) - elif(length < 16): sys.stdout.write('%s\t\t' % benchmark) - else: sys.stdout.write('%s\t' % benchmark) - for (name, typ, size, val) in benchmarkDict[benchmark]: - sys.stdout.write('%0.2f\t\t' % (val if not args.invert else 100 -val)) - sys.stdout.write('\n') - -def ReportAsText(benchmarkDict): - if(args.summary): - mean = benchmarkDict['Mean'] - print('Mean') - for (name, typ, size, val) in mean: - sys.stdout.write('%s %s %0.2f\n' % (name, size, val if not args.invert else 100 - val)) - - if(not args.summary): - for benchmark in benchmarkDict: - print(benchmark) - for (name, type, size, val) in benchmarkDict[benchmark]: - sys.stdout.write('%s %s %0.2f\n' % (name, size, val if not args.invert else 100 - val)) - -def Inversion(lst): - return [x if not args.invert else 100 - x for x in lst] - -def BarGraph(seriesDict, xlabelList, BenchPerRow, FileName): - index = 0 - NumberInGroup = len(seriesDict) - # Figure out width of bars. NumberInGroup bars + want 2 bar space - # the space between groups is 1 - EffectiveNumInGroup = NumberInGroup + 2 - barWidth = 1 / EffectiveNumInGroup - fig = plt.subplots(figsize = (EffectiveNumInGroup*BenchPerRow/8, 4)) - colors = ['blue', 'blue', 'blue', 'blue', 'blue', 'blue', 'black', 'black', 'black', 'black', 'black', 'black'] - for name in seriesDict: - xpos = np.arange(BenchPerRow) - xpos = [x + index*barWidth for x in xpos] - values = seriesDict[name] - plt.bar(xpos, Inversion(values), width=barWidth, edgecolor='grey', label=name, color=colors[index%len(colors)]) - index += 1 - plt.xticks([r + barWidth*(NumberInGroup/2-0.5) for r in range(0, BenchPerRow)], xlabelList) - plt.xlabel('Benchmark') - if(not args.invert): plt.ylabel('Misprediction Rate (%)') - else: plt.ylabel('Prediction Accuracy (%)') - plt.legend(loc='upper left', ncol=2) - plt.savefig(FileName) - -def SelectPartition(xlabelListBig, seriesDictBig, group, BenchPerRow): - seriesDictTrunk = {} - for benchmarkName in seriesDictBig: - lst = seriesDictBig[benchmarkName] - seriesDictTrunk[benchmarkName] = lst[group*BenchPerRow:(group+1)*BenchPerRow] - xlabelListTrunk = xlabelListBig[group*BenchPerRow:(group+1)*BenchPerRow] - return(xlabelListTrunk, seriesDictTrunk) - - -def ReportAsGraph(benchmarkDict, bar): - def FormatToPlot(currBenchmark): - names = [] - sizes = [] - values = [] - typs = [] - for config in currBenchmark: - names.append(config[0]) - sizes.append(config[1]) - values.append(config[2]) - typs.append(config[3]) - return (names, sizes, values, typs) - titlesInvert = {'BDMR' : 'Branch Direction Accuracy', - 'BTMR' : 'Branch Target Accuracy', - 'RASMPR': 'RAS Accuracy', - 'ClassMPR': 'Class Prediction Accuracy'} - titles = {'BDMR' : 'Branch Direction Misprediction', - 'BTMR' : 'Branch Target Misprediction', - 'RASMPR': 'RAS Misprediction', - 'ClassMPR': 'Class Misprediction'} - if(args.summary): - markers = ['x', '.', '+', '*', '^', 'o', ',', 's'] - colors = ['blue', 'black', 'gray', 'dodgerblue', 'lightsteelblue', 'turquoise', 'black', 'blue'] - temp = benchmarkDict['Mean'] - - # the benchmarkDict['Mean'] contains sequencies of results for multiple - # branch predictors with various parameterizations - # group the parameterizations by the common typ. - sequencies = {} - for (name, typ, size, value) in benchmarkDict['Mean']: - if not typ in sequencies: - sequencies[typ] = [(size, value)] - else: - sequencies[typ].append((size,value)) - # then graph the common typ as a single line+scatter plot - # finally repeat for all typs of branch predictors and overlay - fig, axes = plt.subplots() - index = 0 - if(args.invert): plt.title(titlesInvert[ReportPredictorType]) - else: plt.title(titles[ReportPredictorType]) - for branchPredName in sequencies: - data = sequencies[branchPredName] - (xdata, ydata) = zip(*data) - if args.invert: ydata = [100 - x for x in ydata] - axes.plot(xdata, ydata, color=colors[index]) - axes.scatter(xdata, ydata, label=branchPredName, color=colors[index], marker=markers[index]) - index = (index + 1) % len(markers) - axes.legend(loc='upper left') - axes.set_xscale("log") - axes.set_ylabel('Prediction Accuracy') - axes.set_xlabel('Entries') - axes.set_xticks(xdata) - axes.set_xticklabels(xdata) - axes.grid(color='b', alpha=0.5, linestyle='dashed', linewidth=0.5) - plt.show() - - - # if(not args.summary): - # size = len(benchmarkDict) - # sizeSqrt = math.sqrt(size) - # isSquare = math.isclose(sizeSqrt, round(sizeSqrt)) - # numCol = math.floor(sizeSqrt) - # numRow = numCol + (0 if isSquare else 1) - # index = 1 - # fig = plt.figure() - # for benchmarkName in benchmarkDict: - # currBenchmark = benchmarkDict[benchmarkName] - # (names, typs, sizes, values) = FormatToPlot(currBenchmark) - # #axes.plot(numRow, numCol, index) - # ax = fig.add_subplot(numRow, numCol, index) - # ax.bar(names, values) - # ax.title.set_text(benchmarkName) - # #plt.ylabel('BR Dir Miss Rate (%)') - # #plt.xlabel('Predictor') - # index += 1 - - if(not args.summary): - size = len(benchmarkDict) - sizeSqrt = math.sqrt(size) - isSquare = math.isclose(sizeSqrt, round(sizeSqrt)) - numCol = math.floor(sizeSqrt) - numRow = numCol + (0 if isSquare else 1) - index = 1 - BenchPerRow = 7 - - xlabelList = [] - seriesDict = {} - - for benchmarkName in benchmarkDict: - currBenchmark = benchmarkDict[benchmarkName] - xlabelList.append(benchmarkName) - for (name, typ, size, value) in currBenchmark: - if(name not in seriesDict): - seriesDict[name] = [value] - else: - seriesDict[name].append(value) - if(index >= BenchPerRow): break - index += 1 - - xlabelListBig = [] - seriesDictBig = {} - for benchmarkName in benchmarkDict: - currBenchmark = benchmarkDict[benchmarkName] - xlabelListBig.append(benchmarkName) - for (name, typ, size, value) in currBenchmark: - if(name not in seriesDictBig): - seriesDictBig[name] = [value] - else: - seriesDictBig[name].append(value) - - #The next step will be to split the benchmarkDict into length BenchPerRow pieces then repeat the following code - # on each piece. - for row in range(0, math.ceil(39 / BenchPerRow)): - (xlabelListTrunk, seriesDictTrunk) = SelectPartition(xlabelListBig, seriesDictBig, row, BenchPerRow) - FileName = 'barSegment%d.png' % row - groupLen = len(xlabelListTrunk) - BarGraph(seriesDictTrunk, xlabelListTrunk, groupLen, FileName) - - -# main -parser = argparse.ArgumentParser(description='Parses performance counters from a Questa Sim trace to produce a graph or graphs.') - -# parse program arguments -metric = parser.add_mutually_exclusive_group() -metric.add_argument('-r', '--ras', action='store_const', help='Plot return address stack (RAS) performance.', default=False, const=True) -metric.add_argument('-d', '--direction', action='store_const', help='Plot direction prediction (2-bit, Gshare, local, etc) performance.', default=False, const=True) -metric.add_argument('-t', '--target', action='store_const', help='Plot branch target buffer (BTB) performance.', default=False, const=True) -metric.add_argument('-c', '--iclass', action='store_const', help='Plot instruction classification performance.', default=False, const=True) - -parser.add_argument('-s', '--summary', action='store_const', help='Show only the geometric average for all benchmarks.', default=False, const=True) -parser.add_argument('-b', '--bar', action='store_const', help='Plot graphs.', default=False, const=True) -parser.add_argument('-g', '--reference', action='store_const', help='Include the golden reference model from branch-predictor-simulator. Data stored statically at the top of %(prog)s. If you need to regenreate use CModelBranchAcurracy.sh', default=False, const=True) -parser.add_argument('-i', '--invert', action='store_const', help='Invert metric. Example Branch miss prediction becomes prediction accuracy. 100 - miss rate', default=False, const=True) - -displayMode = parser.add_mutually_exclusive_group() -displayMode.add_argument('--text', action='store_const', help='Display in text format only.', default=False, const=True) -displayMode.add_argument('--table', action='store_const', help='Display in text format only.', default=False, const=True) -displayMode.add_argument('--gui', action='store_const', help='Display in text format only.', default=False, const=True) -displayMode.add_argument('--debug', action='store_const', help='Display in text format only.', default=False, const=True) -parser.add_argument('sources', nargs=1) - -args = parser.parse_args() - -# Figure what we are reporting -ReportPredictorType = 'BDMR' # default -if(args.ras): ReportPredictorType = 'RASMPR' -if(args.target): ReportPredictorType = 'BTMR' -if(args.iclass): ReportPredictorType = 'ClassMPR' - -# Figure how we are displaying the data -ReportMode = 'gui' # default -if(args.text): ReportMode = 'text' -if(args.table): ReportMode = 'table' -if(args.debug): ReportMode = 'debug' - -# read the questa sim list file. -# row, col format. each row is a questa sim run with performance counters and a particular -# branch predictor type and size. size can be multiple parameters for more complex predictors like -# local history and tage. -# -predictorLogs = ParseBranchListFile(args.sources[0]) # digests the traces -performanceCounterList = BuildDataBase(predictorLogs) # builds a database of performance counters by trace and then by benchmark -benchmarkFirstList = ReorderDataBase(performanceCounterList) # reorder first by benchmark then trace -benchmarkDict = ExtractSelectedData(benchmarkFirstList) # filters to just the desired performance counter metric - -if(args.reference): benchmarkDict['Mean'].extend(RefData) -#print(benchmarkDict['Mean']) -#print(benchmarkDict['aha-mont64Speed']) -#print(benchmarkDict) - -# table format -if(ReportMode == 'table'): - ReportAsTable(benchmarkDict) - -if(ReportMode == 'text'): - ReportAsText(benchmarkDict) - -if(ReportMode == 'gui'): - ReportAsGraph(benchmarkDict, args.bar) - -# *** this is only needed of -b (no -s) - -# debug -#config0 = performanceCounterList[0][0] -#data0 = performanceCounterList[0][1] -#bench0 = data0[0] -#bench0name = bench0[0] -#bench0data = bench0[2] -#bench0BrCount = bench0data['Br Count'] -#bench1 = data0[1] - -#print(data0) -#print(bench0) -#print(bench1) - -#print(bench0name) -#print(bench0BrCount) From 1852304a2a2f79ef55028f47f6d8ae06c817b455 Mon Sep 17 00:00:00 2001 From: "James E. Stine" Date: Tue, 3 Oct 2023 08:00:00 -0500 Subject: [PATCH 21/32] Update install script for working SAIL checkout (current version) --- bin/wally-tool-chain-install.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/bin/wally-tool-chain-install.sh b/bin/wally-tool-chain-install.sh index cc6254079..7ff470f17 100755 --- a/bin/wally-tool-chain-install.sh +++ b/bin/wally-tool-chain-install.sh @@ -120,8 +120,8 @@ sudo apt-get install -y perl g++ ccache help2man libgoogle-perftools-dev numactl sudo apt-get install -y libfl2 libfl-dev # Ubuntu only (ignore if gives error) cd $RISCV git clone https://github.com/verilator/verilator # Only first time -unsetenv VERILATOR_ROOT # For csh; ignore error if on bash -unset VERILATOR_ROOT # For bash +# unsetenv VERILATOR_ROOT # For csh; ignore error if on bash +unset VERILATOR_ROOT # For bash cd verilator git pull # Make sure git repository is up-to-date git checkout master # Use development branch (e.g. recent bug fixes) @@ -157,6 +157,8 @@ opam install sail -y eval $(opam config env) git clone https://github.com/riscv/sail-riscv.git cd sail-riscv +# For now, use checkout that is stable for Wally +git checkout 72b2516d10d472ac77482fd959a9401ce3487f60 make -j ${NUM_THREADS} ARCH=RV32 make -j ${NUM_THREADS} sudo ln -sf $RISCV/sail-riscv/c_emulator/riscv_sim_RV64 /usr/bin/riscv_sim_RV64 From 2d6b5d30004bdaa235fc6ce2e4e3434a84402534 Mon Sep 17 00:00:00 2001 From: "James E. Stine" Date: Tue, 3 Oct 2023 08:02:39 -0500 Subject: [PATCH 22/32] Modify Makefile + software example for SP/DP/QP --- examples/fp/softfloat_demo/Makefile | 11 +-- examples/fp/softfloat_demo/softfloat_demo2.c | 77 ---------------- examples/fp/softfloat_demo/softfloat_demoDP.c | 88 ++++++++++++++++++ examples/fp/softfloat_demo/softfloat_demoQP.c | 91 +++++++++++++++++++ examples/fp/softfloat_demo/softfloat_demoSP.c | 88 ++++++++++++++++++ 5 files changed, 272 insertions(+), 83 deletions(-) delete mode 100644 examples/fp/softfloat_demo/softfloat_demo2.c create mode 100644 examples/fp/softfloat_demo/softfloat_demoDP.c create mode 100644 examples/fp/softfloat_demo/softfloat_demoQP.c create mode 100644 examples/fp/softfloat_demo/softfloat_demoSP.c diff --git a/examples/fp/softfloat_demo/Makefile b/examples/fp/softfloat_demo/Makefile index 4d0efe20e..cc98d0cfb 100644 --- a/examples/fp/softfloat_demo/Makefile +++ b/examples/fp/softfloat_demo/Makefile @@ -2,14 +2,13 @@ CC = gcc CFLAGS = -O3 -LIBS = -lm LFLAGS = -L. # Link against the riscv-isa-sim version of SoftFloat rather than # the regular version to get RISC-V NaN behavior -IFLAGS = -I$(RISCV)/riscv-isa-sim/softfloat -LIBS = $(RISCV)/riscv-isa-sim/build/libsoftfloat.a -#IFLAGS = -I../../../addins/SoftFloat-3e/source/include/ -#LIBS = ../../../addins/SoftFloat-3e/build/Linux-x86_64-GCC/softfloat.a +#IFLAGS = -I$(RISCV)/riscv-isa-sim/softfloat +#LIBS = $(RISCV)/riscv-isa-sim/build/libsoftfloat.a +IFLAGS = -I../../../addins/SoftFloat-3e/source/include/ +LIBS = ../../../addins/SoftFloat-3e/build/Linux-x86_64-GCC/softfloat.a -lm -lquadmath SRCS = $(wildcard *.c) PROGS = $(patsubst %.c,%,$(SRCS)) @@ -17,7 +16,7 @@ PROGS = $(patsubst %.c,%,$(SRCS)) all: $(PROGS) %: %.c - $(CC) $(CFLAGS) $(IFLAGS) $(LFLAGS) -o $@ $< $(LIBS) + $(CC) $(CFLAGS) -DSOFTFLOAT_FAST_INT64 $(IFLAGS) $(LFLAGS) -o $@ $< $(LIBS) clean: rm -f $(PROGS) diff --git a/examples/fp/softfloat_demo/softfloat_demo2.c b/examples/fp/softfloat_demo/softfloat_demo2.c deleted file mode 100644 index d0582724c..000000000 --- a/examples/fp/softfloat_demo/softfloat_demo2.c +++ /dev/null @@ -1,77 +0,0 @@ -// -// softfloat_div.c -// james.stine@okstate.edu 12 April 2023 -// -// Demonstrate using SoftFloat to compute 754 fp divide, then print results -// (adapted from original C built by David Harris) -// - -#include -#include -#include "softfloat.h" -#include "softfloat_types.h" -typedef union sp { - uint32_t v; - unsigned short x[2]; - float f; -} sp; - -void printF32 (char *msg, float32_t f) { - sp conv; - int i, j; - conv.v = f.v; // use union to convert between hexadecimal and floating-point views - printf("%s: ", msg); // print out nicely - printf("0x%04x_%04x = %1.15g\n", (conv.v >> 16),(conv.v & 0xFFFF), conv.f); -} - -void printFlags(void) { - int NX = softfloat_exceptionFlags % 2; - int UF = (softfloat_exceptionFlags >> 1) % 2; - int OF = (softfloat_exceptionFlags >> 2) % 2; - int DZ = (softfloat_exceptionFlags >> 3) % 2; - int NV = (softfloat_exceptionFlags >> 4) % 2; - printf ("Flags: Inexact %d Underflow %d Overflow %d DivideZero %d Invalid %d\n", - NX, UF, OF, DZ, NV); -} - -void softfloatInit(void) { - // RNE: softfloat_round_near_even - // RZ: softfloat_round_minMag - // RU: softfloat_round_max - // RD: softfloat_round_min - // RM: softfloat_round_near_maxMag - softfloat_roundingMode = softfloat_round_near_even; - softfloat_exceptionFlags = 0; // clear exceptions - softfloat_detectTininess = softfloat_tininess_afterRounding; // RISC-V behavior for tininess -} - -int main() { - - // float32_t is typedef in SoftFloat - float32_t x, y, r1, r2; - sp convx, convy; - - // Choose two random values - convx.f = 1.30308703073; - convy.f = 1.903038030370; - // Convert to SoftFloat format - x.v = (convx.x[1] << 16) + convx.x[0]; - y.v = (convy.x[1] << 16) + convy.x[0]; - - printf("Example using SoftFloat\n"); - - softfloatInit(); - r1 = f32_div(x, y); - printf("-------\n"); - printF32("X", x); - printF32("Y", y); - printF32("result = X/Y", r1); - printFlags(); - - r2 = f32_sqrt(x); - printf("-------\n"); - printF32("X", x); - printF32("result = sqrt(X)", r2); - printFlags(); - -} diff --git a/examples/fp/softfloat_demo/softfloat_demoDP.c b/examples/fp/softfloat_demo/softfloat_demoDP.c new file mode 100644 index 000000000..50b3d0b53 --- /dev/null +++ b/examples/fp/softfloat_demo/softfloat_demoDP.c @@ -0,0 +1,88 @@ +// softfloat_demo3.c +// james.stine@okstate.edu 15 August 2023 +// +// Demonstrate using SoftFloat do compute a floating-point for quad, then print results + +#include +#include +#include +#include // GCC Quad-Math Library +#include "softfloat.h" +#include "softfloat_types.h" +typedef union sp { + uint32_t v; + float f; +} sp; + +typedef union dp { + uint64_t v; + double d; +} dp; + +typedef union qp { + uint64_t v[2]; + __float128 q; +} qp; + + +void printF32 (char *msg, float32_t f) { + sp conv; + int i, j; + conv.v = f.v; // use union to convert between hexadecimal and floating-point views + printf("%s: ", msg); // print out nicely + printf("0x%04x_%04x = %g\n", (conv.v >> 16),(conv.v & 0xFFFF), conv.f); +} + +void printF64 (char *msg, float64_t d) { + dp conv; + int i, j; + conv.v = d.v; // use union to convert between hexadecimal and floating-point views + printf("%s: ", msg); // print out nicely + printf("0x%08x_%08x = %g\n", (conv.v >> 32),(conv.v & 0xFFFFFFFF), conv.d); +} + +void printF128 (char *msg, float128_t q) { + qp conv; + int i, j; + conv.v[0] = q.v[0]; // use union to convert between hexadecimal and floating-point views + conv.v[1] = q.v[1]; // use union to convert between hexadecimal and floating-point views + printf("%s: ", msg); // print out nicely + printf("0x%016" PRIx64 "_%016" PRIx64 " = %1.15Qe\n", q.v[1], q.v[0], conv.q); +} + +void printFlags(void) { + int NX = softfloat_exceptionFlags % 2; + int UF = (softfloat_exceptionFlags >> 1) % 2; + int OF = (softfloat_exceptionFlags >> 2) % 2; + int DZ = (softfloat_exceptionFlags >> 3) % 2; + int NV = (softfloat_exceptionFlags >> 4) % 2; + printf ("Flags: Inexact %d Underflow %d Overflow %d DivideZero %d Invalid %d\n", + NX, UF, OF, DZ, NV); +} + +void softfloatInit(void) { + // rounding modes: RNE: softfloat_round_near_even + // RZ: softfloat_round_minMag + // RP: softfloat_round_max + // RM: softfloat_round_min + softfloat_roundingMode = softfloat_round_near_even; + softfloat_exceptionFlags = 0; // clear exceptions + softfloat_detectTininess = softfloat_tininess_afterRounding; // RISC-V behavior for tininess +} + +int main() { + + float64_t x, y, z; + float64_t r; + + x.v = 0xBFFF988ECE97DFEB; + y.v = 0x3F8EFFFFFFFFFFFF; + z.v = 0x4001000000000000; + + softfloatInit(); + printF64("X", x); printF64("Y", y); printF64("Z", z); + r = f64_mulAdd(x, y, z); + printf("\n"); + printF64("r", r); + +} diff --git a/examples/fp/softfloat_demo/softfloat_demoQP.c b/examples/fp/softfloat_demo/softfloat_demoQP.c new file mode 100644 index 000000000..03f0e5edb --- /dev/null +++ b/examples/fp/softfloat_demo/softfloat_demoQP.c @@ -0,0 +1,91 @@ +// softfloat_demo3.c +// james.stine@okstate.edu 15 August 2023 +// +// Demonstrate using SoftFloat do compute a floating-point for quad, then print results + +#include +#include +#include +#include // GCC Quad-Math Library +#include "softfloat.h" +#include "softfloat_types.h" +typedef union sp { + uint32_t v; + float f; +} sp; + +typedef union dp { + uint64_t v; + double d; +} dp; + +typedef union qp { + uint64_t v[2]; + __float128 q; +} qp; + + +void printF32 (char *msg, float32_t f) { + sp conv; + int i, j; + conv.v = f.v; // use union to convert between hexadecimal and floating-point views + printf("%s: ", msg); // print out nicely + printf("0x%04x_%04x = %g\n", (conv.v >> 16),(conv.v & 0xFFFF), conv.f); +} + +void printF64 (char *msg, float64_t d) { + dp conv; + int i, j; + conv.v = d.v; // use union to convert between hexadecimal and floating-point views + printf("%s: ", msg); // print out nicely + printf("0x%08x_%08x = %g\n", (conv.v >> 32),(conv.v & 0xFFFFFFFF), conv.d); +} + +void printF128 (char *msg, float128_t q) { + qp conv; + int i, j; + conv.v[0] = q.v[0]; // use union to convert between hexadecimal and floating-point views + conv.v[1] = q.v[1]; // use union to convert between hexadecimal and floating-point views + printf("%s: ", msg); // print out nicely + printf("0x%016" PRIx64 "_%016" PRIx64 " = %1.15Qe\n", q.v[1], q.v[0], conv.q); +} + +void printFlags(void) { + int NX = softfloat_exceptionFlags % 2; + int UF = (softfloat_exceptionFlags >> 1) % 2; + int OF = (softfloat_exceptionFlags >> 2) % 2; + int DZ = (softfloat_exceptionFlags >> 3) % 2; + int NV = (softfloat_exceptionFlags >> 4) % 2; + printf ("Flags: Inexact %d Underflow %d Overflow %d DivideZero %d Invalid %d\n", + NX, UF, OF, DZ, NV); +} + +void softfloatInit(void) { + // rounding modes: RNE: softfloat_round_near_even + // RZ: softfloat_round_minMag + // RP: softfloat_round_max + // RM: softfloat_round_min + softfloat_roundingMode = softfloat_round_near_even; + softfloat_exceptionFlags = 0; // clear exceptions + softfloat_detectTininess = softfloat_tininess_afterRounding; // RISC-V behavior for tininess +} + +int main() { + + float128_t x, y, z; + float128_t r; + + x.v[1] = 0xBFFF988ECE97DFEB; + x.v[0] = 0xC3BBA082445B4836; + y.v[1] = 0x3F8EFFFFFFFFFFFF; + y.v[0] = 0xFFFFFFFFFFFFFFFF; + z.v[1] = 0x4001000000000000; + z.v[0] = 0x0000000000000000; + + softfloatInit(); + printF128("X", x); printF128("Y", y); printF128("Z", z); + r = f128_mulAdd(x, y, z); + printf("\n"); + printF128("r", r); + +} diff --git a/examples/fp/softfloat_demo/softfloat_demoSP.c b/examples/fp/softfloat_demo/softfloat_demoSP.c new file mode 100644 index 000000000..55c5ef991 --- /dev/null +++ b/examples/fp/softfloat_demo/softfloat_demoSP.c @@ -0,0 +1,88 @@ +// softfloat_demo3.c +// james.stine@okstate.edu 15 August 2023 +// +// Demonstrate using SoftFloat do compute a floating-point for quad, then print results + +#include +#include +#include +#include // GCC Quad-Math Library +#include "softfloat.h" +#include "softfloat_types.h" +typedef union sp { + uint32_t v; + float f; +} sp; + +typedef union dp { + uint64_t v; + double d; +} dp; + +typedef union qp { + uint64_t v[2]; + __float128 q; +} qp; + + +void printF32 (char *msg, float32_t f) { + sp conv; + int i, j; + conv.v = f.v; // use union to convert between hexadecimal and floating-point views + printf("%s: ", msg); // print out nicely + printf("0x%04x_%04x = %g\n", (conv.v >> 16),(conv.v & 0xFFFF), conv.f); +} + +void printF64 (char *msg, float64_t d) { + dp conv; + int i, j; + conv.v = d.v; // use union to convert between hexadecimal and floating-point views + printf("%s: ", msg); // print out nicely + printf("0x%08x_%08x = %g\n", (conv.v >> 32),(conv.v & 0xFFFFFFFF), conv.d); +} + +void printF128 (char *msg, float128_t q) { + qp conv; + int i, j; + conv.v[0] = q.v[0]; // use union to convert between hexadecimal and floating-point views + conv.v[1] = q.v[1]; // use union to convert between hexadecimal and floating-point views + printf("%s: ", msg); // print out nicely + printf("0x%016" PRIx64 "_%016" PRIx64 " = %1.15Qe\n", q.v[1], q.v[0], conv.q); +} + +void printFlags(void) { + int NX = softfloat_exceptionFlags % 2; + int UF = (softfloat_exceptionFlags >> 1) % 2; + int OF = (softfloat_exceptionFlags >> 2) % 2; + int DZ = (softfloat_exceptionFlags >> 3) % 2; + int NV = (softfloat_exceptionFlags >> 4) % 2; + printf ("Flags: Inexact %d Underflow %d Overflow %d DivideZero %d Invalid %d\n", + NX, UF, OF, DZ, NV); +} + +void softfloatInit(void) { + // rounding modes: RNE: softfloat_round_near_even + // RZ: softfloat_round_minMag + // RP: softfloat_round_max + // RM: softfloat_round_min + softfloat_roundingMode = softfloat_round_near_even; + softfloat_exceptionFlags = 0; // clear exceptions + softfloat_detectTininess = softfloat_tininess_afterRounding; // RISC-V behavior for tininess +} + +int main() { + + float32_t x, y, z; + float32_t r; + + x.v = 0xBFFF988E; + y.v = 0x3F8EFFFF; + z.v = 0x40010000; + + softfloatInit(); + printF32("X", x); printF32("Y", y); printF32("Z", z); + r = f32_mulAdd(x, y, z); + printf("\n"); + printF32("r", r); + +} From b342e15c0733317440589190040a82b107ebe315 Mon Sep 17 00:00:00 2001 From: "James E. Stine" Date: Tue, 3 Oct 2023 08:03:54 -0500 Subject: [PATCH 23/32] Add TeX files used for examples in textbook on divsqrt --- docs/divsqrt_tex/div2.aux | 2 + docs/divsqrt_tex/div2.log | 531 +++++++++++++++++++++++++++++++++++ docs/divsqrt_tex/div2.pdf | Bin 0 -> 110314 bytes docs/divsqrt_tex/div2.tex | 123 ++++++++ docs/divsqrt_tex/div4.aux | 2 + docs/divsqrt_tex/div4.log | 527 +++++++++++++++++++++++++++++++++++ docs/divsqrt_tex/div4.pdf | Bin 0 -> 88257 bytes docs/divsqrt_tex/div4.tex | 84 ++++++ docs/divsqrt_tex/sqrt2.aux | 2 + docs/divsqrt_tex/sqrt2.log | 557 +++++++++++++++++++++++++++++++++++++ docs/divsqrt_tex/sqrt2.pdf | Bin 0 -> 105524 bytes docs/divsqrt_tex/sqrt2.tex | 385 +++++++++++++++++++++++++ docs/divsqrt_tex/sqrt4.aux | 2 + docs/divsqrt_tex/sqrt4.log | 534 +++++++++++++++++++++++++++++++++++ docs/divsqrt_tex/sqrt4.pdf | Bin 0 -> 75105 bytes docs/divsqrt_tex/sqrt4.tex | 147 ++++++++++ 16 files changed, 2896 insertions(+) create mode 100644 docs/divsqrt_tex/div2.aux create mode 100644 docs/divsqrt_tex/div2.log create mode 100644 docs/divsqrt_tex/div2.pdf create mode 100644 docs/divsqrt_tex/div2.tex create mode 100644 docs/divsqrt_tex/div4.aux create mode 100644 docs/divsqrt_tex/div4.log create mode 100644 docs/divsqrt_tex/div4.pdf create mode 100644 docs/divsqrt_tex/div4.tex create mode 100644 docs/divsqrt_tex/sqrt2.aux create mode 100644 docs/divsqrt_tex/sqrt2.log create mode 100644 docs/divsqrt_tex/sqrt2.pdf create mode 100644 docs/divsqrt_tex/sqrt2.tex create mode 100644 docs/divsqrt_tex/sqrt4.aux create mode 100644 docs/divsqrt_tex/sqrt4.log create mode 100644 docs/divsqrt_tex/sqrt4.pdf create mode 100644 docs/divsqrt_tex/sqrt4.tex diff --git a/docs/divsqrt_tex/div2.aux b/docs/divsqrt_tex/div2.aux new file mode 100644 index 000000000..a79beafe4 --- /dev/null +++ b/docs/divsqrt_tex/div2.aux @@ -0,0 +1,2 @@ +\relax +\gdef \@abspage@last{3} diff --git a/docs/divsqrt_tex/div2.log b/docs/divsqrt_tex/div2.log new file mode 100644 index 000000000..56ed865dc --- /dev/null +++ b/docs/divsqrt_tex/div2.log @@ -0,0 +1,531 @@ +This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023) (preloaded format=pdflatex 2023.7.19) 20 AUG 2023 13:10 +entering extended mode + restricted \write18 enabled. + %&-line parsing enabled. +**div2.tex +(./div2.tex +LaTeX2e <2022-11-01> patch level 1 +L3 programming layer <2023-02-22> +(/usr/local/texlive/2023/texmf-dist/tex/latex/base/article.cls +Document Class: article 2022/07/02 v1.4n Standard LaTeX document class +(/usr/local/texlive/2023/texmf-dist/tex/latex/base/size12.clo +File: size12.clo 2022/07/02 v1.4n Standard LaTeX file (size option) +) +\c@part=\count185 +\c@section=\count186 +\c@subsection=\count187 +\c@subsubsection=\count188 +\c@paragraph=\count189 +\c@subparagraph=\count190 +\c@figure=\count191 +\c@table=\count192 +\abovecaptionskip=\skip48 +\belowcaptionskip=\skip49 +\bibindent=\dimen140 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/amssymb.sty +Package: amssymb 2013/01/14 v3.01 AMS font symbols + +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/amsfonts.sty +Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support +\@emptytoks=\toks16 +\symAMSa=\mathgroup4 +\symAMSb=\mathgroup5 +LaTeX Font Info: Redeclaring math symbol \hbar on input line 98. +LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' +(Font) U/euf/m/n --> U/euf/b/n on input line 106. +)) +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsmath.sty +Package: amsmath 2022/04/08 v2.17n AMS math features +\@mathmargin=\skip50 + +For additional information on amsmath, use the `?' option. +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amstext.sty +Package: amstext 2021/08/26 v2.01 AMS text + +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsgen.sty +File: amsgen.sty 1999/11/30 v2.0 generic functions +\@emptytoks=\toks17 +\ex@=\dimen141 +)) +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsbsy.sty +Package: amsbsy 1999/11/29 v1.2d Bold Symbols +\pmbraise@=\dimen142 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsopn.sty +Package: amsopn 2022/04/08 v2.04 operator names +) +\inf@bad=\count193 +LaTeX Info: Redefining \frac on input line 234. +\uproot@=\count194 +\leftroot@=\count195 +LaTeX Info: Redefining \overline on input line 399. +LaTeX Info: Redefining \colon on input line 410. +\classnum@=\count196 +\DOTSCASE@=\count197 +LaTeX Info: Redefining \ldots on input line 496. +LaTeX Info: Redefining \dots on input line 499. +LaTeX Info: Redefining \cdots on input line 620. +\Mathstrutbox@=\box51 +\strutbox@=\box52 +LaTeX Info: Redefining \big on input line 722. +LaTeX Info: Redefining \Big on input line 723. +LaTeX Info: Redefining \bigg on input line 724. +LaTeX Info: Redefining \Bigg on input line 725. +\big@size=\dimen143 +LaTeX Font Info: Redeclaring font encoding OML on input line 743. +LaTeX Font Info: Redeclaring font encoding OMS on input line 744. +\macc@depth=\count198 +LaTeX Info: Redefining \bmod on input line 905. +LaTeX Info: Redefining \pmod on input line 910. +LaTeX Info: Redefining \smash on input line 940. +LaTeX Info: Redefining \relbar on input line 970. +LaTeX Info: Redefining \Relbar on input line 971. +\c@MaxMatrixCols=\count199 +\dotsspace@=\muskip16 +\c@parentequation=\count266 +\dspbrk@lvl=\count267 +\tag@help=\toks18 +\row@=\count268 +\column@=\count269 +\maxfields@=\count270 +\andhelp@=\toks19 +\eqnshift@=\dimen144 +\alignsep@=\dimen145 +\tagshift@=\dimen146 +\tagwidth@=\dimen147 +\totwidth@=\dimen148 +\lineht@=\dimen149 +\@envbody=\toks20 +\multlinegap=\skip51 +\multlinetaggap=\skip52 +\mathdisplay@stack=\toks21 +LaTeX Info: Redefining \[ on input line 2953. +LaTeX Info: Redefining \] on input line 2954. +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/amscls/amsthm.sty +Package: amsthm 2020/05/29 v2.20.6 +\thm@style=\toks22 +\thm@bodyfont=\toks23 +\thm@headfont=\toks24 +\thm@notefont=\toks25 +\thm@headpunct=\toks26 +\thm@preskip=\skip53 +\thm@postskip=\skip54 +\thm@headsep=\skip55 +\dth@everypar=\toks27 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/graphicx.sty +Package: graphicx 2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR) + +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/keyval.sty +Package: keyval 2022/05/29 v1.15 key=value parser (DPC) +\KV@toks@=\toks28 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/graphics.sty +Package: graphics 2022/03/10 v1.4e Standard LaTeX Graphics (DPC,SPQR) + +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/trig.sty +Package: trig 2021/08/11 v1.11 sin cos tan (DPC) +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics-cfg/graphics.cfg +File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration +) +Package graphics Info: Driver file: pdftex.def on input line 107. + +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics-def/pdftex.def +File: pdftex.def 2022/09/22 v1.2b Graphics/color driver for pdftex +)) +\Gin@req@height=\dimen150 +\Gin@req@width=\dimen151 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/tcolorbox/tcolorbox.sty +Package: tcolorbox 2023/02/12 version 6.0.1 text color boxes + +(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty +(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.te +x +\pgfutil@everybye=\toks29 +\pgfutil@tempdima=\dimen152 +\pgfutil@tempdimb=\dimen153 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def +\pgfutil@abb=\box53 +) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/pgf.revision.tex) +Package: pgfrcs 2023-01-15 v3.1.10 (3.1.10) +)) +Package: pgf 2023-01-15 v3.1.10 (3.1.10) + +(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty +(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex +Package: pgfsys 2023-01-15 v3.1.10 (3.1.10) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex +\pgfkeys@pathtoks=\toks30 +\pgfkeys@temptoks=\toks31 + +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfkeyslibraryfil +tered.code.tex +\pgfkeys@tmptoks=\toks32 +)) +\pgf@x=\dimen154 +\pgf@y=\dimen155 +\pgf@xa=\dimen156 +\pgf@ya=\dimen157 +\pgf@xb=\dimen158 +\pgf@yb=\dimen159 +\pgf@xc=\dimen160 +\pgf@yc=\dimen161 +\pgf@xd=\dimen162 +\pgf@yd=\dimen163 +\w@pgf@writea=\write3 +\r@pgf@reada=\read2 +\c@pgf@counta=\count271 +\c@pgf@countb=\count272 +\c@pgf@countc=\count273 +\c@pgf@countd=\count274 +\t@pgf@toka=\toks33 +\t@pgf@tokb=\toks34 +\t@pgf@tokc=\toks35 +\pgf@sys@id@count=\count275 + +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg +File: pgf.cfg 2023-01-15 v3.1.10 (3.1.10) +) +Driver file for pgf: pgfsys-pdftex.def + +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.d +ef +File: pgfsys-pdftex.def 2023-01-15 v3.1.10 (3.1.10) + +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-p +df.def +File: pgfsys-common-pdf.def 2023-01-15 v3.1.10 (3.1.10) +))) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath. +code.tex +File: pgfsyssoftpath.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgfsyssoftpath@smallbuffer@items=\count276 +\pgfsyssoftpath@bigbuffer@items=\count277 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol. +code.tex +File: pgfsysprotocol.code.tex 2023-01-15 v3.1.10 (3.1.10) +)) (/usr/local/texlive/2023/texmf-dist/tex/latex/xcolor/xcolor.sty +Package: xcolor 2022/06/12 v2.14 LaTeX color extensions (UK) + +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics-cfg/color.cfg +File: color.cfg 2016/01/02 v1.6 sample color configuration +) +Package xcolor Info: Driver file: pdftex.def on input line 227. + +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/mathcolor.ltx) +Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1353. +Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1357. +Package xcolor Info: Model `RGB' extended on input line 1369. +Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1371. +Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1372. +Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1373. +Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1374. +Package xcolor Info: Model `Gray' substituted by `gray' on input line 1375. +Package xcolor Info: Model `wave' substituted by `hsb' on input line 1376. +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex +Package: pgfcore 2023-01-15 v3.1.10 (3.1.10) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex +\pgfmath@dimen=\dimen164 +\pgfmath@count=\count278 +\pgfmath@box=\box54 +\pgfmath@toks=\toks36 +\pgfmath@stack@operand=\toks37 +\pgfmath@stack@operation=\toks38 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code. +tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic +.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigo +nometric.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.rando +m.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.compa +rison.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base. +code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round +.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc. +code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integ +erarithmetics.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex +\c@pgfmathroundto@lastzeros=\count279 +)) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfint.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.co +de.tex +File: pgfcorepoints.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgf@picminx=\dimen165 +\pgf@picmaxx=\dimen166 +\pgf@picminy=\dimen167 +\pgf@picmaxy=\dimen168 +\pgf@pathminx=\dimen169 +\pgf@pathmaxx=\dimen170 +\pgf@pathminy=\dimen171 +\pgf@pathmaxy=\dimen172 +\pgf@xx=\dimen173 +\pgf@xy=\dimen174 +\pgf@yx=\dimen175 +\pgf@yy=\dimen176 +\pgf@zx=\dimen177 +\pgf@zy=\dimen178 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconst +ruct.code.tex +File: pgfcorepathconstruct.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgf@path@lastx=\dimen179 +\pgf@path@lasty=\dimen180 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage +.code.tex +File: pgfcorepathusage.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgf@shorten@end@additional=\dimen181 +\pgf@shorten@start@additional=\dimen182 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.co +de.tex +File: pgfcorescopes.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgfpic=\box55 +\pgf@hbox=\box56 +\pgf@layerbox@main=\box57 +\pgf@picture@serial@count=\count280 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicst +ate.code.tex +File: pgfcoregraphicstate.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgflinewidth=\dimen183 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransform +ations.code.tex +File: pgfcoretransformations.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgf@pt@x=\dimen184 +\pgf@pt@y=\dimen185 +\pgf@pt@temp=\dimen186 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.cod +e.tex +File: pgfcorequick.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.c +ode.tex +File: pgfcoreobjects.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathproce +ssing.code.tex +File: pgfcorepathprocessing.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.co +de.tex +File: pgfcorearrows.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgfarrowsep=\dimen187 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.cod +e.tex +File: pgfcoreshade.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgf@max=\dimen188 +\pgf@sys@shading@range@num=\count281 +\pgf@shadingcount=\count282 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.cod +e.tex +File: pgfcoreimage.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal. +code.tex +File: pgfcoreexternal.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgfexternal@startupbox=\box58 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.co +de.tex +File: pgfcorelayers.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretranspare +ncy.code.tex +File: pgfcoretransparency.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns. +code.tex +File: pgfcorepatterns.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code. +tex +File: pgfcorerdf.code.tex 2023-01-15 v3.1.10 (3.1.10) +))) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.cod +e.tex +File: pgfmoduleshapes.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgfnodeparttextbox=\box59 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code. +tex +File: pgfmoduleplot.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version +-0-65.sty +Package: pgfcomp-version-0-65 2023-01-15 v3.1.10 (3.1.10) +\pgf@nodesepstart=\dimen189 +\pgf@nodesepend=\dimen190 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version +-1-18.sty +Package: pgfcomp-version-1-18 2023-01-15 v3.1.10 (3.1.10) +)) (/usr/local/texlive/2023/texmf-dist/tex/latex/tools/verbatim.sty +Package: verbatim 2022-07-02 v1.5u LaTeX2e package for verbatim enhancements +\every@verbatim=\toks39 +\verbatim@line=\toks40 +\verbatim@in@stream=\read3 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/environ/environ.sty +Package: environ 2014/05/04 v0.3 A new way to define environments + +(/usr/local/texlive/2023/texmf-dist/tex/latex/trimspaces/trimspaces.sty +Package: trimspaces 2009/09/17 v1.1 Trim spaces around a token list +)) +(/usr/local/texlive/2023/texmf-dist/tex/latex/etoolbox/etoolbox.sty +Package: etoolbox 2020/10/05 v2.5k e-TeX tools for LaTeX (JAW) +\etb@tempcnta=\count283 +) +\tcb@titlebox=\box60 +\tcb@upperbox=\box61 +\tcb@lowerbox=\box62 +\tcb@phantombox=\box63 +\c@tcbbreakpart=\count284 +\c@tcblayer=\count285 +\c@tcolorbox@number=\count286 +\tcb@temp=\box64 +\tcb@temp=\box65 +\tcb@temp=\box66 +\tcb@temp=\box67 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/arydshln/arydshln.sty +Package: arydshln 2019/02/21 v1.76 +\dashlinedash=\dimen191 +\dashlinegap=\dimen192 +\adl@box=\box68 +\adl@height=\dimen193 +\adl@heightsave=\dimen194 +\adl@depth=\dimen195 +\adl@depthsave=\dimen196 +\adl@finaldepth=\dimen197 +\adl@columns=\count287 +\adl@ncol=\count288 +\adl@currentcolumn=\count289 +\adl@currentcolumnsave=\count290 +\adl@totalheight=\count291 +\adl@totalheightsave=\count292 +\adl@dash=\count293 +\adl@gap=\count294 +\adl@cla=\count295 +\adl@clb=\count296 +\adl@everyvbox=\toks41 +\adl@LTpagetotal=\dimen198 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +File: l3backend-pdftex.def 2023-01-16 L3 backend support: PDF output (pdfTeX) +\l__color_backend_stack_int=\count297 +\l__pdf_internal_box=\box69 +) +(./div2.aux) +\openout1 = `div2.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 14. +LaTeX Font Info: ... okay on input line 14. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 14. +LaTeX Font Info: ... okay on input line 14. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 14. +LaTeX Font Info: ... okay on input line 14. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 14. +LaTeX Font Info: ... okay on input line 14. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 14. +LaTeX Font Info: ... okay on input line 14. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 14. +LaTeX Font Info: ... okay on input line 14. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 14. +LaTeX Font Info: ... okay on input line 14. + +(/usr/local/texlive/2023/texmf-dist/tex/context/base/mkii/supp-pdf.mkii +[Loading MPS to PDF converter (version 2006.09.02).] +\scratchcounter=\count298 +\scratchdimen=\dimen199 +\scratchbox=\box70 +\nofMPsegments=\count299 +\nofMParguments=\count300 +\everyMPshowfont=\toks42 +\MPscratchCnt=\count301 +\MPscratchDim=\dimen256 +\MPnumerator=\count302 +\makeMPintoPDFobject=\count303 +\everyMPtoPDFconversion=\toks43 +) (/usr/local/texlive/2023/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf +Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 +85. + +(/usr/local/texlive/2023/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv +e +)) +LaTeX Font Info: Trying to load font information for U+msa on input line 17. + + +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/umsa.fd +File: umsa.fd 2013/01/14 v3.01 AMS symbols A +) +LaTeX Font Info: Trying to load font information for U+msb on input line 17. + + +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/umsb.fd +File: umsb.fd 2013/01/14 v3.01 AMS symbols B +) +Overfull \hbox (9.26367pt too wide) in paragraph at lines 17--54 + [] + [] + +[1 + +{/usr/local/texlive/2023/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] +Overfull \hbox (41.97911pt too wide) in paragraph at lines 67--95 + [] + [] + +[2] [3] (./div2.aux) ) +Here is how much of TeX's memory you used: + 13122 strings out of 476025 + 264146 string characters out of 5790017 + 1864388 words of memory out of 5000000 + 33371 multiletter control sequences out of 15000+600000 + 521384 words of font info for 67 fonts, out of 8000000 for 9000 + 1141 hyphenation exceptions out of 8191 + 83i,12n,89p,460b,213s stack positions out of 10000i,1000n,20000p,200000b,200000s + +Output written on div2.pdf (3 pages, 110314 bytes). +PDF statistics: + 67 PDF objects out of 1000 (max. 8388607) + 41 compressed objects within 1 object stream + 0 named destinations out of 1000 (max. 500000) + 13 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/docs/divsqrt_tex/div2.pdf b/docs/divsqrt_tex/div2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c84e166ee313cfe6591bd05c011b3103bfee7220 GIT binary patch literal 110314 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 z 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 z�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 z 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 K(Mc*x0sar46QM%@ literal 0 HcmV?d00001 diff --git a/docs/divsqrt_tex/div2.tex b/docs/divsqrt_tex/div2.tex new file mode 100644 index 000000000..03daaf1a8 --- /dev/null +++ b/docs/divsqrt_tex/div2.tex @@ -0,0 +1,123 @@ +\documentclass[12pt]{article} + +\usepackage{amssymb, amsmath, amsfonts, amsthm, graphicx, tcolorbox} + +\usepackage{arydshln} + +\parindent = 0in + +\pagestyle{empty} + +%========== +%========== + +\begin{document} + +\begin{center} +\begin{tabular}{cccc} + Initialization&$D$&$0001.1010\ 000$&\\ + &$-D=\overline{D}+1$&$1110.0101\ 111$&(+ 1 ulp)\\ + &&&\\ + &$WS_{-1}=X$&$0001.0000\ 010$&\\ + &$WC_{-1}$&$0000.0000\ 000$&\\ + \hdashline\\ + Step 0:&$WS_{-1}$&$0001.0000\ 010$&\\ + &$WC_{-1}$&$0000.0000\ 00\mathbf{1}$&($W_{msbs}=0001\ \text{so}\ q_0=1$)\\ + &$-q_0D$&$1110.0101\ 111$&\\ + \cline{2-3} + &$sum$&$1111.0101\ 100$&$\ll1$\\ + &$carry$&$0000.0000\ 110$&$\ll1$\\ + \hdashline\\ + Step 1:&$WS_0$&$1110.1011\ 000$&\\ + &$WC_0$&$0000.0001\ 10\mathbf{0}$&($W_{msbs}=1110\ \text{so}\ q_1=-1$)\\ + &$-q_1D$&$0001.1010\ 000$&\\ + \cline{2-3} + &$sum$&$1111.0000\ 100$&$\ll1$\\ + &$carry$&$0001.0110\ 000$&$\ll1$\\ + \hdashline\\ + Step 2:&$WS_1$&$1110.0001\ 000$&\\ + &$WC_1$&$0010.1100\ 00\mathbf{1}$&($W_{msbs}=0000\ \text{so}\ q_2=1$)\\ + &$-q_2D$&$1110.0101\ 111$&\\ + \cline{2-3} + &$sum$&$0010.1000\ 110$&$\ll1$\\ + &$carry$&$1100.1010\ 010$&$\ll1$\\ + \hdashline\\ + Step 3:&$WS_2$&$0101.0001\ 100$&\\ + &$WC_2$&$1001.0100\ 10\mathbf{0}$&($W_{msbs}=1110\ \text{so}\ q_3=-1$)\\ + &$-q_3D$&$0001.1010\ 000$&\\ + \cline{2-3} + &$sum$&$1101.1111\ 000$&\\ + &$carry$&$0010.0001\ 000$&$sum+carry=0$, terminate.\\ + \hdashline\\ + Terminate&Quotient&0.101 +\end{tabular} +\end{center} + +\vfill +\eject + +X = 1.0110\ 011 (179/128) + +D = 1.0011\ 000 (152/128) + +Q = 1.0010\ 1101\ 0 + +D[1.3] = 1.001, so we use the ``"1.001" column of chart 13.X. This means we select a quotient bit of 2 if the partial remainder is greater than or equal to 3.5, a quotient bit of 1 if the partial is greater or equal to than 1.0, a zero if the partial is greater than or equal to -1.5, -1 if the partial is greater than or equal to -3.75, and a -2 otherwise. +\begin{center} +\begin{tabular}{cccc} + Initialization&$D$&$0001.0011\ 000$&\\ + &$2D$&$0010.0110\ 000$&\\ + &$-D=\overline{D}+1$&$1110.1100\ 111$&(+ 1 ulp)\\ + &$-2D=\overline{2D}+1$&$1101.1001\ 111$&(+ 1 ulp)\\ + &&&\\ + &$X=WS$&$0001.0110\ 011$&\\ + &$WC$&$0000.0000\ 000$&\\ + \hdashline\\ + Step 4:&$WS$&$0001.0110\ 011$&\\ + &$WC$&$0000.0000\ 00\mathbf{1}$&($RW_{msbs}=0001.010\ \text{so}\ q_4=1$)\\ + &$-q_7D$&$1110.1100\ 111$&\\ + \cline{2-3} + &$WS$&$1111.1010\ 101$&$\ll2$\\ + &$WC$&$0000.1000\ 110$&$\ll2$\\ + \hdashline\\ + Step 3:&$WS$&$1110.1010\ 100$&\\ + &$WC$&$0010.0011\ 000$&($RW_{msbs}=0000.110\ \text{so}\ q_3=1$)\\ + &$-q_6D$&$0000.0000\ 000$&\\ + \cline{2-3} + &$WS$&$1100.1001\ 100$&$\ll2$\\ + &$WC$&$0100.0100\ 000$&$\ll2$\\ + \hdashline\\ + Step 2:&$WS$&$0010.0110\ 000$&\\ + &$WC$&$0001.0000\ 00\mathbf{1}$&($RW_{msbs}=0011.010\ \text{so}\ q_2=-1$)\\ + &$-q_5D$&$1110.0101\ 111$&\\ + \cline{2-3} +\end{tabular} +\end{center} + +page 269 306 + +\vfill +\eject + +\large{\bf{ +Math for the recurrence relation}} + +**going to have to change notation for sure, change the subscripts for steps and might have to get rid of some exponents** +\begin{align*} + w[j+1] &= r^{j+1}\big(x-S[j+1]^2\big)\\ + &= r^{j+1}\big(x-(S[j]+s_{j+1}r^{-(j+1)})^2\big)\\ + &= r^{j+1}x-r^{j+1}\big(S[j]^2+2S[j]s_{j+1}r^{-(j+1)}+s^2_{j+1}r^{-2(j+1)}\big)\\ + &= r^{j+1}\big(x-S[j]^2\big)-\big(2S[j]s_{j+1}+s_{j+1}^2r^{-(j+1)}\big)\\ + &= rw[j]-\big(2S[j]s_{j+1}+s_{j+1}^2r^{-(j+1)}\big)\\ + &= rw[j]+F[j] +\end{align*} +where +\begin{align*} + F[j]=-\big(2S[j]s_{j+1}+s_{j+1}^2r^{-(j+1)}\big) +\end{align*} + +Since there is a term of $S$ in the expression of $F$, we must come up with a way to represent $S$ using only zeros and ones, rather than using the bit set $\{-a,\ldots,a\}$. This is done using on-the-fly conversion just as we did to compute the quotient for the divider. We keep a running copy of $S$, but we also keep the value $SM=S-1$. The logic is still the same for computing $S$ and $SM$ on the next step; see figure 13.15. + +Now that $S$ is in a form such that we can use it in a CSA, we need to compute $F$. To do so, + +\end{document} diff --git a/docs/divsqrt_tex/div4.aux b/docs/divsqrt_tex/div4.aux new file mode 100644 index 000000000..d490c35e0 --- /dev/null +++ b/docs/divsqrt_tex/div4.aux @@ -0,0 +1,2 @@ +\relax +\gdef \@abspage@last{2} diff --git a/docs/divsqrt_tex/div4.log b/docs/divsqrt_tex/div4.log new file mode 100644 index 000000000..f2d997a65 --- /dev/null +++ b/docs/divsqrt_tex/div4.log @@ -0,0 +1,527 @@ +This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023) (preloaded format=pdflatex 2023.7.19) 20 AUG 2023 13:11 +entering extended mode + restricted \write18 enabled. + %&-line parsing enabled. +**div4.tex +(./div4.tex +LaTeX2e <2022-11-01> patch level 1 +L3 programming layer <2023-02-22> +(/usr/local/texlive/2023/texmf-dist/tex/latex/base/article.cls +Document Class: article 2022/07/02 v1.4n Standard LaTeX document class +(/usr/local/texlive/2023/texmf-dist/tex/latex/base/size12.clo +File: size12.clo 2022/07/02 v1.4n Standard LaTeX file (size option) +) +\c@part=\count185 +\c@section=\count186 +\c@subsection=\count187 +\c@subsubsection=\count188 +\c@paragraph=\count189 +\c@subparagraph=\count190 +\c@figure=\count191 +\c@table=\count192 +\abovecaptionskip=\skip48 +\belowcaptionskip=\skip49 +\bibindent=\dimen140 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/amssymb.sty +Package: amssymb 2013/01/14 v3.01 AMS font symbols + +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/amsfonts.sty +Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support +\@emptytoks=\toks16 +\symAMSa=\mathgroup4 +\symAMSb=\mathgroup5 +LaTeX Font Info: Redeclaring math symbol \hbar on input line 98. +LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' +(Font) U/euf/m/n --> U/euf/b/n on input line 106. +)) +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsmath.sty +Package: amsmath 2022/04/08 v2.17n AMS math features +\@mathmargin=\skip50 + +For additional information on amsmath, use the `?' option. +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amstext.sty +Package: amstext 2021/08/26 v2.01 AMS text + +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsgen.sty +File: amsgen.sty 1999/11/30 v2.0 generic functions +\@emptytoks=\toks17 +\ex@=\dimen141 +)) +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsbsy.sty +Package: amsbsy 1999/11/29 v1.2d Bold Symbols +\pmbraise@=\dimen142 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsopn.sty +Package: amsopn 2022/04/08 v2.04 operator names +) +\inf@bad=\count193 +LaTeX Info: Redefining \frac on input line 234. +\uproot@=\count194 +\leftroot@=\count195 +LaTeX Info: Redefining \overline on input line 399. +LaTeX Info: Redefining \colon on input line 410. +\classnum@=\count196 +\DOTSCASE@=\count197 +LaTeX Info: Redefining \ldots on input line 496. +LaTeX Info: Redefining \dots on input line 499. +LaTeX Info: Redefining \cdots on input line 620. +\Mathstrutbox@=\box51 +\strutbox@=\box52 +LaTeX Info: Redefining \big on input line 722. +LaTeX Info: Redefining \Big on input line 723. +LaTeX Info: Redefining \bigg on input line 724. +LaTeX Info: Redefining \Bigg on input line 725. +\big@size=\dimen143 +LaTeX Font Info: Redeclaring font encoding OML on input line 743. +LaTeX Font Info: Redeclaring font encoding OMS on input line 744. +\macc@depth=\count198 +LaTeX Info: Redefining \bmod on input line 905. +LaTeX Info: Redefining \pmod on input line 910. +LaTeX Info: Redefining \smash on input line 940. +LaTeX Info: Redefining \relbar on input line 970. +LaTeX Info: Redefining \Relbar on input line 971. +\c@MaxMatrixCols=\count199 +\dotsspace@=\muskip16 +\c@parentequation=\count266 +\dspbrk@lvl=\count267 +\tag@help=\toks18 +\row@=\count268 +\column@=\count269 +\maxfields@=\count270 +\andhelp@=\toks19 +\eqnshift@=\dimen144 +\alignsep@=\dimen145 +\tagshift@=\dimen146 +\tagwidth@=\dimen147 +\totwidth@=\dimen148 +\lineht@=\dimen149 +\@envbody=\toks20 +\multlinegap=\skip51 +\multlinetaggap=\skip52 +\mathdisplay@stack=\toks21 +LaTeX Info: Redefining \[ on input line 2953. +LaTeX Info: Redefining \] on input line 2954. +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/amscls/amsthm.sty +Package: amsthm 2020/05/29 v2.20.6 +\thm@style=\toks22 +\thm@bodyfont=\toks23 +\thm@headfont=\toks24 +\thm@notefont=\toks25 +\thm@headpunct=\toks26 +\thm@preskip=\skip53 +\thm@postskip=\skip54 +\thm@headsep=\skip55 +\dth@everypar=\toks27 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/graphicx.sty +Package: graphicx 2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR) + +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/keyval.sty +Package: keyval 2022/05/29 v1.15 key=value parser (DPC) +\KV@toks@=\toks28 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/graphics.sty +Package: graphics 2022/03/10 v1.4e Standard LaTeX Graphics (DPC,SPQR) + +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/trig.sty +Package: trig 2021/08/11 v1.11 sin cos tan (DPC) +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics-cfg/graphics.cfg +File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration +) +Package graphics Info: Driver file: pdftex.def on input line 107. + +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics-def/pdftex.def +File: pdftex.def 2022/09/22 v1.2b Graphics/color driver for pdftex +)) +\Gin@req@height=\dimen150 +\Gin@req@width=\dimen151 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/tcolorbox/tcolorbox.sty +Package: tcolorbox 2023/02/12 version 6.0.1 text color boxes + +(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty +(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.te +x +\pgfutil@everybye=\toks29 +\pgfutil@tempdima=\dimen152 +\pgfutil@tempdimb=\dimen153 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def +\pgfutil@abb=\box53 +) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/pgf.revision.tex) +Package: pgfrcs 2023-01-15 v3.1.10 (3.1.10) +)) +Package: pgf 2023-01-15 v3.1.10 (3.1.10) + +(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty +(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex +Package: pgfsys 2023-01-15 v3.1.10 (3.1.10) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex +\pgfkeys@pathtoks=\toks30 +\pgfkeys@temptoks=\toks31 + +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfkeyslibraryfil +tered.code.tex +\pgfkeys@tmptoks=\toks32 +)) +\pgf@x=\dimen154 +\pgf@y=\dimen155 +\pgf@xa=\dimen156 +\pgf@ya=\dimen157 +\pgf@xb=\dimen158 +\pgf@yb=\dimen159 +\pgf@xc=\dimen160 +\pgf@yc=\dimen161 +\pgf@xd=\dimen162 +\pgf@yd=\dimen163 +\w@pgf@writea=\write3 +\r@pgf@reada=\read2 +\c@pgf@counta=\count271 +\c@pgf@countb=\count272 +\c@pgf@countc=\count273 +\c@pgf@countd=\count274 +\t@pgf@toka=\toks33 +\t@pgf@tokb=\toks34 +\t@pgf@tokc=\toks35 +\pgf@sys@id@count=\count275 + +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg +File: pgf.cfg 2023-01-15 v3.1.10 (3.1.10) +) +Driver file for pgf: pgfsys-pdftex.def + +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.d +ef +File: pgfsys-pdftex.def 2023-01-15 v3.1.10 (3.1.10) + +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-p +df.def +File: pgfsys-common-pdf.def 2023-01-15 v3.1.10 (3.1.10) +))) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath. +code.tex +File: pgfsyssoftpath.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgfsyssoftpath@smallbuffer@items=\count276 +\pgfsyssoftpath@bigbuffer@items=\count277 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol. +code.tex +File: pgfsysprotocol.code.tex 2023-01-15 v3.1.10 (3.1.10) +)) (/usr/local/texlive/2023/texmf-dist/tex/latex/xcolor/xcolor.sty +Package: xcolor 2022/06/12 v2.14 LaTeX color extensions (UK) + +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics-cfg/color.cfg +File: color.cfg 2016/01/02 v1.6 sample color configuration +) +Package xcolor Info: Driver file: pdftex.def on input line 227. + +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/mathcolor.ltx) +Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1353. +Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1357. +Package xcolor Info: Model `RGB' extended on input line 1369. +Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1371. +Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1372. +Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1373. +Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1374. +Package xcolor Info: Model `Gray' substituted by `gray' on input line 1375. +Package xcolor Info: Model `wave' substituted by `hsb' on input line 1376. +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex +Package: pgfcore 2023-01-15 v3.1.10 (3.1.10) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex +\pgfmath@dimen=\dimen164 +\pgfmath@count=\count278 +\pgfmath@box=\box54 +\pgfmath@toks=\toks36 +\pgfmath@stack@operand=\toks37 +\pgfmath@stack@operation=\toks38 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code. +tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic +.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigo +nometric.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.rando +m.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.compa +rison.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base. +code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round +.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc. +code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integ +erarithmetics.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex +\c@pgfmathroundto@lastzeros=\count279 +)) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfint.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.co +de.tex +File: pgfcorepoints.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgf@picminx=\dimen165 +\pgf@picmaxx=\dimen166 +\pgf@picminy=\dimen167 +\pgf@picmaxy=\dimen168 +\pgf@pathminx=\dimen169 +\pgf@pathmaxx=\dimen170 +\pgf@pathminy=\dimen171 +\pgf@pathmaxy=\dimen172 +\pgf@xx=\dimen173 +\pgf@xy=\dimen174 +\pgf@yx=\dimen175 +\pgf@yy=\dimen176 +\pgf@zx=\dimen177 +\pgf@zy=\dimen178 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconst +ruct.code.tex +File: pgfcorepathconstruct.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgf@path@lastx=\dimen179 +\pgf@path@lasty=\dimen180 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage +.code.tex +File: pgfcorepathusage.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgf@shorten@end@additional=\dimen181 +\pgf@shorten@start@additional=\dimen182 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.co +de.tex +File: pgfcorescopes.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgfpic=\box55 +\pgf@hbox=\box56 +\pgf@layerbox@main=\box57 +\pgf@picture@serial@count=\count280 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicst +ate.code.tex +File: pgfcoregraphicstate.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgflinewidth=\dimen183 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransform +ations.code.tex +File: pgfcoretransformations.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgf@pt@x=\dimen184 +\pgf@pt@y=\dimen185 +\pgf@pt@temp=\dimen186 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.cod +e.tex +File: pgfcorequick.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.c +ode.tex +File: pgfcoreobjects.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathproce +ssing.code.tex +File: pgfcorepathprocessing.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.co +de.tex +File: pgfcorearrows.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgfarrowsep=\dimen187 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.cod +e.tex +File: pgfcoreshade.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgf@max=\dimen188 +\pgf@sys@shading@range@num=\count281 +\pgf@shadingcount=\count282 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.cod +e.tex +File: pgfcoreimage.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal. +code.tex +File: pgfcoreexternal.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgfexternal@startupbox=\box58 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.co +de.tex +File: pgfcorelayers.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretranspare +ncy.code.tex +File: pgfcoretransparency.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns. +code.tex +File: pgfcorepatterns.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code. +tex +File: pgfcorerdf.code.tex 2023-01-15 v3.1.10 (3.1.10) +))) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.cod +e.tex +File: pgfmoduleshapes.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgfnodeparttextbox=\box59 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code. +tex +File: pgfmoduleplot.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version +-0-65.sty +Package: pgfcomp-version-0-65 2023-01-15 v3.1.10 (3.1.10) +\pgf@nodesepstart=\dimen189 +\pgf@nodesepend=\dimen190 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version +-1-18.sty +Package: pgfcomp-version-1-18 2023-01-15 v3.1.10 (3.1.10) +)) (/usr/local/texlive/2023/texmf-dist/tex/latex/tools/verbatim.sty +Package: verbatim 2022-07-02 v1.5u LaTeX2e package for verbatim enhancements +\every@verbatim=\toks39 +\verbatim@line=\toks40 +\verbatim@in@stream=\read3 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/environ/environ.sty +Package: environ 2014/05/04 v0.3 A new way to define environments + +(/usr/local/texlive/2023/texmf-dist/tex/latex/trimspaces/trimspaces.sty +Package: trimspaces 2009/09/17 v1.1 Trim spaces around a token list +)) +(/usr/local/texlive/2023/texmf-dist/tex/latex/etoolbox/etoolbox.sty +Package: etoolbox 2020/10/05 v2.5k e-TeX tools for LaTeX (JAW) +\etb@tempcnta=\count283 +) +\tcb@titlebox=\box60 +\tcb@upperbox=\box61 +\tcb@lowerbox=\box62 +\tcb@phantombox=\box63 +\c@tcbbreakpart=\count284 +\c@tcblayer=\count285 +\c@tcolorbox@number=\count286 +\tcb@temp=\box64 +\tcb@temp=\box65 +\tcb@temp=\box66 +\tcb@temp=\box67 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/arydshln/arydshln.sty +Package: arydshln 2019/02/21 v1.76 +\dashlinedash=\dimen191 +\dashlinegap=\dimen192 +\adl@box=\box68 +\adl@height=\dimen193 +\adl@heightsave=\dimen194 +\adl@depth=\dimen195 +\adl@depthsave=\dimen196 +\adl@finaldepth=\dimen197 +\adl@columns=\count287 +\adl@ncol=\count288 +\adl@currentcolumn=\count289 +\adl@currentcolumnsave=\count290 +\adl@totalheight=\count291 +\adl@totalheightsave=\count292 +\adl@dash=\count293 +\adl@gap=\count294 +\adl@cla=\count295 +\adl@clb=\count296 +\adl@everyvbox=\toks41 +\adl@LTpagetotal=\dimen198 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +File: l3backend-pdftex.def 2023-01-16 L3 backend support: PDF output (pdfTeX) +\l__color_backend_stack_int=\count297 +\l__pdf_internal_box=\box69 +) +No file div4.aux. +\openout1 = `div4.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 15. +LaTeX Font Info: ... okay on input line 15. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 15. +LaTeX Font Info: ... okay on input line 15. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 15. +LaTeX Font Info: ... okay on input line 15. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 15. +LaTeX Font Info: ... okay on input line 15. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 15. +LaTeX Font Info: ... okay on input line 15. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 15. +LaTeX Font Info: ... okay on input line 15. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 15. +LaTeX Font Info: ... okay on input line 15. +(/usr/local/texlive/2023/texmf-dist/tex/context/base/mkii/supp-pdf.mkii +[Loading MPS to PDF converter (version 2006.09.02).] +\scratchcounter=\count298 +\scratchdimen=\dimen199 +\scratchbox=\box70 +\nofMPsegments=\count299 +\nofMParguments=\count300 +\everyMPshowfont=\toks42 +\MPscratchCnt=\count301 +\MPscratchDim=\dimen256 +\MPnumerator=\count302 +\makeMPintoPDFobject=\count303 +\everyMPtoPDFconversion=\toks43 +) (/usr/local/texlive/2023/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf +Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 +85. + +(/usr/local/texlive/2023/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv +e +)) +LaTeX Font Info: Trying to load font information for U+msa on input line 28. + + +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/umsa.fd +File: umsa.fd 2013/01/14 v3.01 AMS symbols A +) +LaTeX Font Info: Trying to load font information for U+msb on input line 28. + + +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/umsb.fd +File: umsb.fd 2013/01/14 v3.01 AMS symbols B +) +Overfull \hbox (41.45067pt too wide) in paragraph at lines 28--81 + [] + [] + +[1 + +{/usr/local/texlive/2023/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] +Overfull \vbox (60.60448pt too high) has occurred while \output is active [] + + +[2] (./div4.aux) ) +Here is how much of TeX's memory you used: + 13104 strings out of 476025 + 263945 string characters out of 5790017 + 1870388 words of memory out of 5000000 + 33358 multiletter control sequences out of 15000+600000 + 518162 words of font info for 54 fonts, out of 8000000 for 9000 + 1141 hyphenation exceptions out of 8191 + 83i,11n,89p,417b,252s stack positions out of 10000i,1000n,20000p,200000b,200000s + +Output written on div4.pdf (2 pages, 88257 bytes). +PDF statistics: + 54 PDF objects out of 1000 (max. 8388607) + 33 compressed objects within 1 object stream + 0 named destinations out of 1000 (max. 500000) + 13 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/docs/divsqrt_tex/div4.pdf b/docs/divsqrt_tex/div4.pdf new file mode 100644 index 0000000000000000000000000000000000000000..af9ad880d82c0f4c866188eb114f59fc407e5ae2 GIT binary patch literal 88257 zcma&MbC530@-8~I%{8`d+qP|c*4VbKH8$7Swr$(inZ3{NyK&?09p|3nHll__kf}kwXk+J zam1$+wKi}z5jHWhGd6+Z<%M!`b~G`tfpTB-PLi?fqlXE({)n(F!H=eP$UuW@mwu0P z&0Odw-kA}=NX}bbE0B19bTVwH_8S_kxqNv{R2C$;4wuXkJtN*iEzA@%LaI8P&=ik= zl_V))m0`@36u&Q0Cv&>x%)uBLuz_fuQQVD{bk|PQB(K2F-1M82KfA4WAHqdW8?(rW zpZrXZJ~BWlZ(-2*cG}LC*xnp2NO`?89m8Ptd>fE(9F5HE3et%G_#i`=N zP#6;^Y&!6oQY{qGwnGKC$-EPhKYuT2R=^8iLFKA+?XS1SqSdl|Y;Bago%X5%gLDdu zmeZj3uNbiGZei;p*l9=v4}zPRCJg*QQ)7K&YI7*mk{}r0c%ha*D@=w+qc;cf)Y9*T zQUmZ$im+u}I{UtAx_`j{$rpiptVIFTF97L#Y25oWkfue7A%)_>q>yFg3aKS2gU^SE z%+?KC{#>0l`z(UqY@3a|U^+4|FqXt7gxBjf?EI2HL(G3I*CY!(UELnC@FExGyETSw zhBC1={-1~VBmJuY7#RPv5}4>&nf`Ap;c`>U4tp4L==QgFL}wC$IpeVq!1hC2UMn

_s>xU6f(cfNE&*iKZr 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 patch level 1 +L3 programming layer <2023-02-22> +(/usr/local/texlive/2023/texmf-dist/tex/latex/base/article.cls +Document Class: article 2022/07/02 v1.4n Standard LaTeX document class +(/usr/local/texlive/2023/texmf-dist/tex/latex/base/size12.clo +File: size12.clo 2022/07/02 v1.4n Standard LaTeX file (size option) +) +\c@part=\count185 +\c@section=\count186 +\c@subsection=\count187 +\c@subsubsection=\count188 +\c@paragraph=\count189 +\c@subparagraph=\count190 +\c@figure=\count191 +\c@table=\count192 +\abovecaptionskip=\skip48 +\belowcaptionskip=\skip49 +\bibindent=\dimen140 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/amssymb.sty +Package: amssymb 2013/01/14 v3.01 AMS font symbols + +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/amsfonts.sty +Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support +\@emptytoks=\toks16 +\symAMSa=\mathgroup4 +\symAMSb=\mathgroup5 +LaTeX Font Info: Redeclaring math symbol \hbar on input line 98. +LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' +(Font) U/euf/m/n --> U/euf/b/n on input line 106. +)) +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsmath.sty +Package: amsmath 2022/04/08 v2.17n AMS math features +\@mathmargin=\skip50 + +For additional information on amsmath, use the `?' option. +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amstext.sty +Package: amstext 2021/08/26 v2.01 AMS text + +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsgen.sty +File: amsgen.sty 1999/11/30 v2.0 generic functions +\@emptytoks=\toks17 +\ex@=\dimen141 +)) +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsbsy.sty +Package: amsbsy 1999/11/29 v1.2d Bold Symbols +\pmbraise@=\dimen142 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsopn.sty +Package: amsopn 2022/04/08 v2.04 operator names +) +\inf@bad=\count193 +LaTeX Info: Redefining \frac on input line 234. +\uproot@=\count194 +\leftroot@=\count195 +LaTeX Info: Redefining \overline on input line 399. +LaTeX Info: Redefining \colon on input line 410. +\classnum@=\count196 +\DOTSCASE@=\count197 +LaTeX Info: Redefining \ldots on input line 496. +LaTeX Info: Redefining \dots on input line 499. +LaTeX Info: Redefining \cdots on input line 620. +\Mathstrutbox@=\box51 +\strutbox@=\box52 +LaTeX Info: Redefining \big on input line 722. +LaTeX Info: Redefining \Big on input line 723. +LaTeX Info: Redefining \bigg on input line 724. +LaTeX Info: Redefining \Bigg on input line 725. +\big@size=\dimen143 +LaTeX Font Info: Redeclaring font encoding OML on input line 743. +LaTeX Font Info: Redeclaring font encoding OMS on input line 744. +\macc@depth=\count198 +LaTeX Info: Redefining \bmod on input line 905. +LaTeX Info: Redefining \pmod on input line 910. +LaTeX Info: Redefining \smash on input line 940. +LaTeX Info: Redefining \relbar on input line 970. +LaTeX Info: Redefining \Relbar on input line 971. +\c@MaxMatrixCols=\count199 +\dotsspace@=\muskip16 +\c@parentequation=\count266 +\dspbrk@lvl=\count267 +\tag@help=\toks18 +\row@=\count268 +\column@=\count269 +\maxfields@=\count270 +\andhelp@=\toks19 +\eqnshift@=\dimen144 +\alignsep@=\dimen145 +\tagshift@=\dimen146 +\tagwidth@=\dimen147 +\totwidth@=\dimen148 +\lineht@=\dimen149 +\@envbody=\toks20 +\multlinegap=\skip51 +\multlinetaggap=\skip52 +\mathdisplay@stack=\toks21 +LaTeX Info: Redefining \[ on input line 2953. +LaTeX Info: Redefining \] on input line 2954. +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/amscls/amsthm.sty +Package: amsthm 2020/05/29 v2.20.6 +\thm@style=\toks22 +\thm@bodyfont=\toks23 +\thm@headfont=\toks24 +\thm@notefont=\toks25 +\thm@headpunct=\toks26 +\thm@preskip=\skip53 +\thm@postskip=\skip54 +\thm@headsep=\skip55 +\dth@everypar=\toks27 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/graphicx.sty +Package: graphicx 2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR) + +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/keyval.sty +Package: keyval 2022/05/29 v1.15 key=value parser (DPC) +\KV@toks@=\toks28 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/graphics.sty +Package: graphics 2022/03/10 v1.4e Standard LaTeX Graphics (DPC,SPQR) + +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/trig.sty +Package: trig 2021/08/11 v1.11 sin cos tan (DPC) +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics-cfg/graphics.cfg +File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration +) +Package graphics Info: Driver file: pdftex.def on input line 107. + +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics-def/pdftex.def +File: pdftex.def 2022/09/22 v1.2b Graphics/color driver for pdftex +)) +\Gin@req@height=\dimen150 +\Gin@req@width=\dimen151 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/tcolorbox/tcolorbox.sty +Package: tcolorbox 2023/02/12 version 6.0.1 text color boxes + +(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty +(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.te +x +\pgfutil@everybye=\toks29 +\pgfutil@tempdima=\dimen152 +\pgfutil@tempdimb=\dimen153 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def +\pgfutil@abb=\box53 +) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/pgf.revision.tex) +Package: pgfrcs 2023-01-15 v3.1.10 (3.1.10) +)) +Package: pgf 2023-01-15 v3.1.10 (3.1.10) + +(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty +(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex +Package: pgfsys 2023-01-15 v3.1.10 (3.1.10) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex +\pgfkeys@pathtoks=\toks30 +\pgfkeys@temptoks=\toks31 + +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfkeyslibraryfil +tered.code.tex +\pgfkeys@tmptoks=\toks32 +)) +\pgf@x=\dimen154 +\pgf@y=\dimen155 +\pgf@xa=\dimen156 +\pgf@ya=\dimen157 +\pgf@xb=\dimen158 +\pgf@yb=\dimen159 +\pgf@xc=\dimen160 +\pgf@yc=\dimen161 +\pgf@xd=\dimen162 +\pgf@yd=\dimen163 +\w@pgf@writea=\write3 +\r@pgf@reada=\read2 +\c@pgf@counta=\count271 +\c@pgf@countb=\count272 +\c@pgf@countc=\count273 +\c@pgf@countd=\count274 +\t@pgf@toka=\toks33 +\t@pgf@tokb=\toks34 +\t@pgf@tokc=\toks35 +\pgf@sys@id@count=\count275 + +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg +File: pgf.cfg 2023-01-15 v3.1.10 (3.1.10) +) +Driver file for pgf: pgfsys-pdftex.def + +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.d +ef +File: pgfsys-pdftex.def 2023-01-15 v3.1.10 (3.1.10) + +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-p +df.def +File: pgfsys-common-pdf.def 2023-01-15 v3.1.10 (3.1.10) +))) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath. +code.tex +File: pgfsyssoftpath.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgfsyssoftpath@smallbuffer@items=\count276 +\pgfsyssoftpath@bigbuffer@items=\count277 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol. +code.tex +File: pgfsysprotocol.code.tex 2023-01-15 v3.1.10 (3.1.10) +)) (/usr/local/texlive/2023/texmf-dist/tex/latex/xcolor/xcolor.sty +Package: xcolor 2022/06/12 v2.14 LaTeX color extensions (UK) + +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics-cfg/color.cfg +File: color.cfg 2016/01/02 v1.6 sample color configuration +) +Package xcolor Info: Driver file: pdftex.def on input line 227. + +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/mathcolor.ltx) +Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1353. +Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1357. +Package xcolor Info: Model `RGB' extended on input line 1369. +Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1371. +Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1372. +Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1373. +Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1374. +Package xcolor Info: Model `Gray' substituted by `gray' on input line 1375. +Package xcolor Info: Model `wave' substituted by `hsb' on input line 1376. +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex +Package: pgfcore 2023-01-15 v3.1.10 (3.1.10) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex +\pgfmath@dimen=\dimen164 +\pgfmath@count=\count278 +\pgfmath@box=\box54 +\pgfmath@toks=\toks36 +\pgfmath@stack@operand=\toks37 +\pgfmath@stack@operation=\toks38 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code. +tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic +.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigo +nometric.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.rando +m.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.compa +rison.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base. +code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round +.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc. +code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integ +erarithmetics.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex +\c@pgfmathroundto@lastzeros=\count279 +)) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfint.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.co +de.tex +File: pgfcorepoints.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgf@picminx=\dimen165 +\pgf@picmaxx=\dimen166 +\pgf@picminy=\dimen167 +\pgf@picmaxy=\dimen168 +\pgf@pathminx=\dimen169 +\pgf@pathmaxx=\dimen170 +\pgf@pathminy=\dimen171 +\pgf@pathmaxy=\dimen172 +\pgf@xx=\dimen173 +\pgf@xy=\dimen174 +\pgf@yx=\dimen175 +\pgf@yy=\dimen176 +\pgf@zx=\dimen177 +\pgf@zy=\dimen178 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconst +ruct.code.tex +File: pgfcorepathconstruct.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgf@path@lastx=\dimen179 +\pgf@path@lasty=\dimen180 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage +.code.tex +File: pgfcorepathusage.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgf@shorten@end@additional=\dimen181 +\pgf@shorten@start@additional=\dimen182 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.co +de.tex +File: pgfcorescopes.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgfpic=\box55 +\pgf@hbox=\box56 +\pgf@layerbox@main=\box57 +\pgf@picture@serial@count=\count280 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicst +ate.code.tex +File: pgfcoregraphicstate.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgflinewidth=\dimen183 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransform +ations.code.tex +File: pgfcoretransformations.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgf@pt@x=\dimen184 +\pgf@pt@y=\dimen185 +\pgf@pt@temp=\dimen186 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.cod +e.tex +File: pgfcorequick.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.c +ode.tex +File: pgfcoreobjects.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathproce +ssing.code.tex +File: pgfcorepathprocessing.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.co +de.tex +File: pgfcorearrows.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgfarrowsep=\dimen187 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.cod +e.tex +File: pgfcoreshade.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgf@max=\dimen188 +\pgf@sys@shading@range@num=\count281 +\pgf@shadingcount=\count282 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.cod +e.tex +File: pgfcoreimage.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal. +code.tex +File: pgfcoreexternal.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgfexternal@startupbox=\box58 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.co +de.tex +File: pgfcorelayers.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretranspare +ncy.code.tex +File: pgfcoretransparency.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns. +code.tex +File: pgfcorepatterns.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code. +tex +File: pgfcorerdf.code.tex 2023-01-15 v3.1.10 (3.1.10) +))) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.cod +e.tex +File: pgfmoduleshapes.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgfnodeparttextbox=\box59 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code. +tex +File: pgfmoduleplot.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version +-0-65.sty +Package: pgfcomp-version-0-65 2023-01-15 v3.1.10 (3.1.10) +\pgf@nodesepstart=\dimen189 +\pgf@nodesepend=\dimen190 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version +-1-18.sty +Package: pgfcomp-version-1-18 2023-01-15 v3.1.10 (3.1.10) +)) (/usr/local/texlive/2023/texmf-dist/tex/latex/tools/verbatim.sty +Package: verbatim 2022-07-02 v1.5u LaTeX2e package for verbatim enhancements +\every@verbatim=\toks39 +\verbatim@line=\toks40 +\verbatim@in@stream=\read3 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/environ/environ.sty +Package: environ 2014/05/04 v0.3 A new way to define environments + +(/usr/local/texlive/2023/texmf-dist/tex/latex/trimspaces/trimspaces.sty +Package: trimspaces 2009/09/17 v1.1 Trim spaces around a token list +)) +(/usr/local/texlive/2023/texmf-dist/tex/latex/etoolbox/etoolbox.sty +Package: etoolbox 2020/10/05 v2.5k e-TeX tools for LaTeX (JAW) +\etb@tempcnta=\count283 +) +\tcb@titlebox=\box60 +\tcb@upperbox=\box61 +\tcb@lowerbox=\box62 +\tcb@phantombox=\box63 +\c@tcbbreakpart=\count284 +\c@tcblayer=\count285 +\c@tcolorbox@number=\count286 +\tcb@temp=\box64 +\tcb@temp=\box65 +\tcb@temp=\box66 +\tcb@temp=\box67 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/arydshln/arydshln.sty +Package: arydshln 2019/02/21 v1.76 +\dashlinedash=\dimen191 +\dashlinegap=\dimen192 +\adl@box=\box68 +\adl@height=\dimen193 +\adl@heightsave=\dimen194 +\adl@depth=\dimen195 +\adl@depthsave=\dimen196 +\adl@finaldepth=\dimen197 +\adl@columns=\count287 +\adl@ncol=\count288 +\adl@currentcolumn=\count289 +\adl@currentcolumnsave=\count290 +\adl@totalheight=\count291 +\adl@totalheightsave=\count292 +\adl@dash=\count293 +\adl@gap=\count294 +\adl@cla=\count295 +\adl@clb=\count296 +\adl@everyvbox=\toks41 +\adl@LTpagetotal=\dimen198 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +File: l3backend-pdftex.def 2023-01-16 L3 backend support: PDF output (pdfTeX) +\l__color_backend_stack_int=\count297 +\l__pdf_internal_box=\box69 +) +(./sqrt2.aux) +\openout1 = `sqrt2.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 13. +LaTeX Font Info: ... okay on input line 13. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 13. +LaTeX Font Info: ... okay on input line 13. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 13. +LaTeX Font Info: ... okay on input line 13. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 13. +LaTeX Font Info: ... okay on input line 13. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 13. +LaTeX Font Info: ... okay on input line 13. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 13. +LaTeX Font Info: ... okay on input line 13. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 13. +LaTeX Font Info: ... okay on input line 13. + +(/usr/local/texlive/2023/texmf-dist/tex/context/base/mkii/supp-pdf.mkii +[Loading MPS to PDF converter (version 2006.09.02).] +\scratchcounter=\count298 +\scratchdimen=\dimen199 +\scratchbox=\box70 +\nofMPsegments=\count299 +\nofMParguments=\count300 +\everyMPshowfont=\toks42 +\MPscratchCnt=\count301 +\MPscratchDim=\dimen256 +\MPnumerator=\count302 +\makeMPintoPDFobject=\count303 +\everyMPtoPDFconversion=\toks43 +) (/usr/local/texlive/2023/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf +Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 +85. + +(/usr/local/texlive/2023/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv +e +)) +LaTeX Font Info: Trying to load font information for U+msa on input line 20. + + +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/umsa.fd +File: umsa.fd 2013/01/14 v3.01 AMS symbols A +) +LaTeX Font Info: Trying to load font information for U+msb on input line 20. + + +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/umsb.fd +File: umsb.fd 2013/01/14 v3.01 AMS symbols B +) +Overfull \hbox (64.19492pt too wide) in paragraph at lines 20--77 + [] + [] + +[1 + +{/usr/local/texlive/2023/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] +Overfull \vbox (114.69951pt too high) has occurred while \output is active [] + + +[2] +Overfull \vbox (114.69951pt too high) has occurred while \output is active [] + + +[3] [4] +Overfull \hbox (12.27611pt too wide) in paragraph at lines 162--209 + [] + [] + +[5] [6] [7] +Overfull \hbox (10.52342pt too wide) in paragraph at lines 230--263 + [] + [] + + +Overfull \hbox (10.52342pt too wide) in paragraph at lines 269--302 + [] + [] + +[8] +Overfull \hbox (17.17625pt too wide) in paragraph at lines 307--336 + [] + [] + +[9] [10] +Overfull \hbox (32.42345pt too wide) in paragraph at lines 348--381 + [] + [] + +[11] (./sqrt2.aux) ) +Here is how much of TeX's memory you used: + 13106 strings out of 476025 + 263974 string characters out of 5790017 + 1878388 words of memory out of 5000000 + 33358 multiletter control sequences out of 15000+600000 + 518162 words of font info for 54 fonts, out of 8000000 for 9000 + 1141 hyphenation exceptions out of 8191 + 83i,12n,89p,439b,249s stack positions out of 10000i,1000n,20000p,200000b,200000s + +Output written on sqrt2.pdf (11 pages, 105524 bytes). +PDF statistics: + 83 PDF objects out of 1000 (max. 8388607) + 53 compressed objects within 1 object stream + 0 named destinations out of 1000 (max. 500000) + 13 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/docs/divsqrt_tex/sqrt2.pdf b/docs/divsqrt_tex/sqrt2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b56f42af856d8a6b57196bd795082a249b7b80f6 GIT binary patch literal 105524 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

_258BSQ?NgZX(QJAV#=nnMt=AS$OA_9 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 fHyDxVpskXm(%F3!4^Y)5qKJz}Q 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 YqLPXtU~C#1m>L+Fa;d7i`nz!f0RNQ5bpQYW literal 0 HcmV?d00001 diff --git a/docs/divsqrt_tex/sqrt2.tex b/docs/divsqrt_tex/sqrt2.tex new file mode 100644 index 000000000..3c40b037c --- /dev/null +++ b/docs/divsqrt_tex/sqrt2.tex @@ -0,0 +1,385 @@ +\documentclass[12pt]{article} +\usepackage{amssymb, amsmath, amsfonts, amsthm, graphicx, tcolorbox} +\usepackage{arydshln} + +\parskip = .2in +\parindent = 0in + +\pagestyle{empty} + +%========== +%========== + +\begin{document} + +X = 0.0111 0011 1001 (1849/4096) + +S = 0.1010 1100 0000 (2752/4096) +{\small +\begin{center} +\begin{tabular}{ccccc} + &$X $&$ 0000.0111\ 0011\ 1001 $& &$S_0={\color{blue}0001}.0000\ 0000\ 0000$\\ + &$WS_0=2(X-1) $&$ 1110.1110\ 0111\ 0010 $& &$SM_0={\color{blue}0000}.0000\ 0000\ 0000\phantom{M}$\\ + &$WC_0 $&$ 0000.0000\ 0000\ 0000 $& &$K_0=0001.0000\ 0000\ 0000\ $\\ + & & & &$C_0=1111.0000\ 0000\ 0000\,$\\ + \hdashline\\ + Step 1: &$WS_0 $&$ 1110.1110\ 0111\ 0010 $& &\\ + &$WC_0 $&$ 0000.0000\ 0000\ 0000 $& &($W_{msbs}=1110\ \text{so}\ s_1=-1$)\\ + &$F_1=2S_0-K_1 $&${\color{blue}0001.1}000\ 0000\ 0000$& &$S_1={\color{blue}0000.1}000\ 0000\ 0000$\\ + & & & &$SM_1={\color{blue}0000.0}000\ 0000\ 0000\phantom{M}$\\ + \cline{2-3} + &$sum $&$ 1111.0110\ 0111\ 0010 $&$\ll1 $&$K_1=0000.1000\ 0000\ 0000\ $\\ + &$carry $&$ 0001.0000\ 0000\ 0000 $&$\ll1 $&$C_1=1111.1000\ 0000\ 0000\,$\\ + \hdashline\\ + Step 2: &$WS_1 $&$ 1110.1100\ 1110\ 0100 $& &\\ + &$WC_1 $&$ 0010.0000\ 0000\ 0000 $& &($W_{msbs}=0000\ \text{so}\ s_2=1$)\\ + &$F_2=-2S_1-K_2$&${\color{blue}1110.11}00\ 0000\ 0000$& &$S_2={\color{blue}0000.11}00\ 0000\ 0000$\\ + & & & &$SM_2={\color{blue}0000.10}00\ 0000\ 0000\phantom{M}$\\ + \cline{2-3} + &$sum $&$ 0010.0000\ 1110\ 0100 $&$\ll1 $&$K_2=0000.0100\ 0000\ 0000\ $\\ + &$carry $&$ 1101.1000\ 0000\ 0000 $&$\ll1 $&$C_2=1111.1100\ 0000\ 0000\,$\\ + \hdashline\\ + Step 3: &$WS_2 $&$ 0100.0001\ 1100\ 1000 $& &\\ + &$WC_2 $&$ 1011.0000\ 0000\ 0000 $& &($W_{msbs}=1111\ \text{so}\ s_3=0$)\\ + &$F_3=0 $&${\color{blue}0000.000}0\ 0000\ 0000$& &$S_3={\color{blue}0000.110}0\ 0000\ 0000$\\ + & & & &$SM_3={\color{blue}0000.101}0\ 0000\ 0000\phantom{M}$\\ + \cline{2-3} + &$sum $&$ 1111.0001\ 1100\ 1000 $&$\ll1 $&$K_3=0000.0010\ 0000\ 0000\ $\\ + &$carry $&$ 0000.0000\ 0000\ 0000 $&$\ll1 $&$C_3=1111.1110\ 0000\ 0000\,$\\ + \hdashline\\ + Step 4: &$WS_3 $&$ 1110.0011\ 1001\ 0000 $& &\\ + &$WC_3 $&$ 0000.0000\ 0000\ 0000 $& &($W_{msbs}=1110\ \text{so}\ s_4=-1$)\\ + &$F_4=2S_3-K_4 $&${\color{blue}0001.0111}\ 0000\ 0000$& &$S_4={\color{blue}0000.1011}\ 0000\ 0000$\\ + & & & &$SM_4={\color{blue}0000.1010}\ 0000\ 0000\phantom{M}$\\ + \cline{2-3} + &$sum $&$ 1111.0100\ 1001\ 0000 $&$\ll1 $&$K_4=0000.0001\ 0000\ 0000\ $\\ + &$carry $&$ 0000.0110\ 0000\ 0000 $&$\ll1 $&$C_4=1111.1111\ 0000\ 0000\,$\\ + \hdashline\\ + Step 5: &$WS_4 $&$ 1110.1001\ 0010\ 0000 $& &\\ + &$WC_4 $&$ 0000.1100\ 0000\ 0000 $& &($W_{msbs}=1110\ \text{so}\ s_5=-1$)\\ + &$F_5=2S_4-K_5 $&${\color{blue}0001.0101\ 1}000\ 0000$& &$S_5={\color{blue}0000.1010\ 1}000\ 0000$\\ + & & & &$SM_5={\color{blue}0000.1010\ 0}000\ 0000\phantom{M}$\\ + \cline{2-3} + &$sum $&$ 1111.0000\ 1010\ 0000 $&$\ll1 $&$K_5=0000.0000\ 1000\ 0000\ $\\ + &$carry $&$ 0001.1010\ 0000\ 0000 $&$\ll1 $&$C_5=1111.1111\ 1000\ 0000\,$\\ + \hdashline\\ + Step 6: &$WS_5 $&$ 1110.0001\ 0100\ 0000 $& &\\ + &$WC_5 $&$ 0011.0100\ 0000\ 0000 $& &($W_{msbs}=0001\ \text{so}\ s_6=1$)\\ + &$F_6=-2S_5-K_6$&${\color{blue}1110.1010\ 11}00\ 0000$& &$S_6={\color{blue}0000.1010\ 11}00\ 0000$\\ + & & & &$SM_6={\color{blue}0000.1010\ 10}00\ 0000\phantom{M}$\\ + \cline{2-3} + &$sum $&$ 0011.1111\ 1000\ 0000 $&$\ll1 $&$K_6=0000.0000\ 0100\ 0000\ $\\ + &$carry $&$ 1100.0000\ 1000\ 0000 $&$\ll1 $&$C_6=1111.1111\ 1100\ 0000\,$\\ + & & & &$sum+carry=0$, terminate\\ + \hdashline\\ + Terminate&Square Root&0.101011 +\end{tabular} +\end{center} +} + +{\small +\begin{center} +\begin{tabular}{cccc} + \hdashline\\ + Step 6: &$WS $&$0111.1111\ 0000\ 00$&\\ + &$WC $&$1000.0001\ 0000\ 00$&($W_{msbs}=1111\ \text{so}\ s_6=0$)\\ + &$F $&$0000.0000\ 0000\ 00$&$S_6=\mathbf{1.0101\ 10}00\ 00$\\ + & & &$SM_6=\mathbf{1.0101\ 01}00\ 00\phantom{M}$\\ + \cline{2-3} + &$WS $&$1111.1110\ 0000\ 00$&$\ll1$\\ + &$WC $&$0000.0010\ 0000\ 00$&$\ll1$\\ + \hdashline\\ + Step 7: &$WS $&$1111.1100\ 0000\ 00$&\\ + &$WC $&$0000.0100\ 0000\ 00$&($W_{msbs}=1111\ \text{so}\ s_7=0$)\\ + &$F $&$0000.0000\ 0000\ 00$&$S_7=\mathbf{1.0101\ 100}0\ 00$\\ + & & &$SM_7=\mathbf{1.0101\ 011}0\ 00\phantom{M}$\\ + \cline{2-3} + &$WS $&$1111.1000\ 0000\ 00$&$\ll1$\\ + &$WC $&$0000.1000\ 0000\ 00$&$\ll1$\\ + \hdashline\\ + Step 8: &$WS $&$1111.0000\ 0000\ 00$&\\ + &$WC $&$0001.0000\ 0000\ 00$&($W_{msbs}=0000\ \text{so}\ s_8=1$)\\ + &$F $&$1110.1010\ 0111\ 10$&$S_8=\mathbf{1.0101\ 1001}\ 00$\\ + & & &$SM_8=\mathbf{1.0101\ 1000}\ 00\phantom{M}$\\ + \cline{2-3} + &$WS $&$0000.1010\ 0111\ 10$&$\ll1$\\ + &$WC $&$1110.0000\ 0000\ 00$&$\ll1$\\ + \hdashline\\ + Step 9: &$WS $&$0001.0100\ 1111\ 00$&\\ + &$WC $&$1100.0000\ 0000\ 00$&($W_{msbs}=1101\ \text{so}\ s_9=-1$)\\ + &$F $&$0001.0101\ 1000\ 11$&$S_9=\mathbf{1.0101\ 1000\ 1}0$\\ + & & &$SM_9=\mathbf{1.0101\ 1000\ 0}0\phantom{M}$\\ + \cline{2-3} + &$WS $&$1100.0001\ 0111\ 11$&$\ll1$\\ + &$WC $&$0010.1001\ 0000\ 00$&$\ll1$\\ + \hdashline\\ + Step 10:&$WS $&$1000.0010\ 1111\ 10$&\\ + &$WC $&$0101.0010\ 0000\ 00$&($W_{msbs}=1101\ \text{so}\ s_{10}=-1$)\\ + &$F $&$0001.0101\ 1000\ 01$&$S_{10}=\mathbf{1.0101\ 1000\ 01}$\\ + & & &$SM_{10}=\mathbf{1.0101\ 1000\ 00}\phantom{M}$\\ + \cline{2-3} + &$WS $&$1100.0001\ 0111\ 11$&$\ll1$\\ + &$WC $&$0010.0101\ 0000\ 00$&$\ll1$\\ + \hdashline\\ + Step 11:&$WS $&$1000.0010\ 1111\ 10$&\\ + &$WC $&$0100.1010\ 0000\ 00$&($W_{msbs}=1101\ \text{so}\ s_{11}=-1$)\\ + &$F $&$0001.0101\ 1000\ 00$&$S_{11}=\mathbf{1.0101\ 1000\ 00}$\\ + & & &$SM_{11}=\mathbf{1.0101\ 1000\ 00}\phantom{M}$\\ + \cline{2-3} + &$WS $&$1101.1101\ 0111\ 10$&$\ll1$\\ + &$WC $&$0000.0101\ 0000\ 00$&$\ll1$\\ + \hdashline\\ + Step 12:&$WS $&$1101.1000\ 0111\ 10$&\\ + &$WC $&$0000.1010\ 0000\ 00$&($W_{msbs}=1101\ \text{so}\ s_{12}=-1$)\\ + &$F $&$0001.0101\ 1000\ 00$&$S_{12}=\mathbf{1.0101\ 1000\ 00}$\\ + & & &$SM_{12}=\mathbf{1.0101\ 1000\ 00}\phantom{M}$\\ + \cline{2-3} + &$WS $&$1100.0111\ 1111\ 10$&$\ll1$\\ + &$WC $&$0011.0000\ 0000\ 00$&$\ll1$\\ +\end{tabular} +\end{center} +} + +{\small +\begin{center} +\begin{tabular}{cccc} + Step 13:&$WS $&$1000.1111\ 1111\ 00$&\\ + &$WC $&$0110.0000\ 0000\ 00$&($W_{msbs}=1110\ \text{so}\ s_{13}=-1$)\\ + &$F $&$0001.0101\ 1000\ 00$&$S_{13}=\mathbf{1.0101\ 1000\ 00}$\\ + & & &$SM_{13}=\mathbf{1.0101\ 1000\ 00}\phantom{M}$\\ + \cline{2-3} + &$WS $&$1111.1010\ 0111\ 10$&$\ll1$\\ + &$WC $&$0000.1011\ 0000\ 00$&$\ll1$\\ +\end{tabular} +\end{center} +} + +\vfill +\eject + +{\small +\begin{center} +\begin{tabular}{ccccc} + &$X $&$ 0000.1100\ 0000 $& &$S_0={\color{blue}0001}.0000\ 0000\ 00$\\ + &$WS=X-1 $&$ 1111.1100\ 0000 $& &$SM_0={\color{blue}0000}.0000\ 0000\ 00\phantom{M}$\\ + &$WC $&$ 0000.0000\ 0000 $& &$K_0=0000.0100\ 0000\ 00\ $\\ + & & & &$C_0=1111.1100\ 0000\ 00\,$\\ + \hdashline\\ + Step 1: &$WS $&$ 1111.1100\ 0000 $& &\\ + &$WC $&$ 0000.0000\ 0000 $& &($W_{msbs}=1111\ \text{so}\ s_1=0$)\\ + &$F_1=0 $&${\color{blue}0000.00}00\ 0000$& &$S_1={\color{blue}0001.0}000\ 0000\ 00$\\ + & & & &$SM_1={\color{blue}0000.1}000\ 0000\ 00\phantom{M}$\\ + \cline{2-3} + &$WS $&$ 1111.1100\ 0000 $&$\ll1 $&$K_1=0000.0010\ 0000\ 00\ $\\ + &$WC $&$ 0000.0000\ 0000 $&$\ll1 $&$C_1=1111.1110\ 0000\ 00\,$\\ + \hdashline\\ + Step 2: &$WS $&$ 1111.1000\ 0000 $& &\\ + &$WC $&$ 0000.0000\ 0000 $& &($W_{msbs}=1111\ \text{so}\ s_2=0$)\\ + &$F_2=0 $&${\color{blue}0000.000}0\ 0000$& &$S_2={\color{blue}0001.00}00\ 0000\ 00$\\ + & & & &$SM_2={\color{blue}0000.11}00\ 0000\ 00\phantom{M}$\\ + \cline{2-3} + &$WS $&$ 1111.1000\ 0000 $&$\ll1 $&$K_2=0000.0001\ 0000\ 00\ $\\ + &$WC $&$ 0000.0000\ 0000 $&$\ll1 $&$C_2=1111.1111\ 0000\ 00\,$\\ + \hdashline\\ + Step 3: &$WS $&$ 1111.0000\ 0000 $& &\\ + &$WC $&$ 0000.0000\ 0000 $& &($W_{msbs}=1111\ \text{so}\ s_3=0$)\\ + &$F_3=0 $&${\color{blue}0000.0000}\ 0000$& &$S_3={\color{blue}0001.000}0\ 0000\ 00$\\ + & & & &$SM_3={\color{blue}0000.111}0\ 0000\ 00\phantom{M}$\\ + \cline{2-3} + &$WS $&$1111.0000\ 0000 $&$\ll1 $&$K_3=0000.0000\ 1000\ 00\ $\\ + &$WC $&$0000.0000\ 0000 $&$\ll1 $&$C_3=1111.1111\ 1000\ 00\,$\\ + \hdashline\\ + Step 4: &$WS $&$1110.0000\ 0000 $& &\\ + &$WC $&$0000.0000\ 0000 $& &($W_{msbs}=1110\ \text{so}\ s_4=-1$)\\ + &$F_4=S_3-K_3 $&${\color{blue}0000.1111\ 1}000$& &$S_4={\color{blue}0000.1111}\ 0000\ 00$\\ + & & & &$SM_4={\color{blue}0000.1110}\ 0000\ 00\phantom{M}$\\ + \cline{2-3} + &$WS $&$1110.1111\ 1000 $&$\ll1 $&$K_4=0000.0000\ 0100\ 00\ $\\ + &$WC $&$0000.0000\ 0000 $&$\ll1 $&$C_4=1111.1111\ 1100\ 00\,$\\ + \hdashline\\ + Step 5: &$WS $&$1101.1111\ 0000 $& &\\ + &$WC $&$0000.0000\ 0000 $& &($W_{msbs}=1101\ \text{so}\ s_5=-1$)\\ + &$F_5=S_4-K_4 $&${\color{blue}0000.1110\ 11}00$& &$S_5={\color{blue}0000.1110\ 1}000\ 00$\\ + & & & &$SM_5={\color{blue}0001.1110\ 0}000\ 00\phantom{M}$\\ + \cline{2-3} + &$WS $&$1101.0001\ 1100 $&$\ll1 $&$K_5=0000.0000\ 0010\ 00\ $\\ + &$WC $&$0001.1100\ 0000 $&$\ll1 $&$C_5=1111.1111\ 1110\ 00\,$\\ + Terminate +\end{tabular} +\end{center} +} + +\vfill +\eject + +X = 0.1010101101(685/1024) + +S = 0.1101000110(838/1024) + +once R4 sslc gets here i can fill this in + +\vfill +\eject + +X = 1.1001 (25/16) + +S = 1.0100 (20/16) + +{\small +\begin{center} +\begin{tabular}{cccc} + Attempt 1:& $X$ is normalized& to $1/2 patch level 1 +L3 programming layer <2023-02-22> +(/usr/local/texlive/2023/texmf-dist/tex/latex/base/article.cls +Document Class: article 2022/07/02 v1.4n Standard LaTeX document class +(/usr/local/texlive/2023/texmf-dist/tex/latex/base/size12.clo +File: size12.clo 2022/07/02 v1.4n Standard LaTeX file (size option) +) +\c@part=\count185 +\c@section=\count186 +\c@subsection=\count187 +\c@subsubsection=\count188 +\c@paragraph=\count189 +\c@subparagraph=\count190 +\c@figure=\count191 +\c@table=\count192 +\abovecaptionskip=\skip48 +\belowcaptionskip=\skip49 +\bibindent=\dimen140 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/amssymb.sty +Package: amssymb 2013/01/14 v3.01 AMS font symbols + +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/amsfonts.sty +Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support +\@emptytoks=\toks16 +\symAMSa=\mathgroup4 +\symAMSb=\mathgroup5 +LaTeX Font Info: Redeclaring math symbol \hbar on input line 98. +LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' +(Font) U/euf/m/n --> U/euf/b/n on input line 106. +)) +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsmath.sty +Package: amsmath 2022/04/08 v2.17n AMS math features +\@mathmargin=\skip50 + +For additional information on amsmath, use the `?' option. +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amstext.sty +Package: amstext 2021/08/26 v2.01 AMS text + +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsgen.sty +File: amsgen.sty 1999/11/30 v2.0 generic functions +\@emptytoks=\toks17 +\ex@=\dimen141 +)) +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsbsy.sty +Package: amsbsy 1999/11/29 v1.2d Bold Symbols +\pmbraise@=\dimen142 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsopn.sty +Package: amsopn 2022/04/08 v2.04 operator names +) +\inf@bad=\count193 +LaTeX Info: Redefining \frac on input line 234. +\uproot@=\count194 +\leftroot@=\count195 +LaTeX Info: Redefining \overline on input line 399. +LaTeX Info: Redefining \colon on input line 410. +\classnum@=\count196 +\DOTSCASE@=\count197 +LaTeX Info: Redefining \ldots on input line 496. +LaTeX Info: Redefining \dots on input line 499. +LaTeX Info: Redefining \cdots on input line 620. +\Mathstrutbox@=\box51 +\strutbox@=\box52 +LaTeX Info: Redefining \big on input line 722. +LaTeX Info: Redefining \Big on input line 723. +LaTeX Info: Redefining \bigg on input line 724. +LaTeX Info: Redefining \Bigg on input line 725. +\big@size=\dimen143 +LaTeX Font Info: Redeclaring font encoding OML on input line 743. +LaTeX Font Info: Redeclaring font encoding OMS on input line 744. +\macc@depth=\count198 +LaTeX Info: Redefining \bmod on input line 905. +LaTeX Info: Redefining \pmod on input line 910. +LaTeX Info: Redefining \smash on input line 940. +LaTeX Info: Redefining \relbar on input line 970. +LaTeX Info: Redefining \Relbar on input line 971. +\c@MaxMatrixCols=\count199 +\dotsspace@=\muskip16 +\c@parentequation=\count266 +\dspbrk@lvl=\count267 +\tag@help=\toks18 +\row@=\count268 +\column@=\count269 +\maxfields@=\count270 +\andhelp@=\toks19 +\eqnshift@=\dimen144 +\alignsep@=\dimen145 +\tagshift@=\dimen146 +\tagwidth@=\dimen147 +\totwidth@=\dimen148 +\lineht@=\dimen149 +\@envbody=\toks20 +\multlinegap=\skip51 +\multlinetaggap=\skip52 +\mathdisplay@stack=\toks21 +LaTeX Info: Redefining \[ on input line 2953. +LaTeX Info: Redefining \] on input line 2954. +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/amscls/amsthm.sty +Package: amsthm 2020/05/29 v2.20.6 +\thm@style=\toks22 +\thm@bodyfont=\toks23 +\thm@headfont=\toks24 +\thm@notefont=\toks25 +\thm@headpunct=\toks26 +\thm@preskip=\skip53 +\thm@postskip=\skip54 +\thm@headsep=\skip55 +\dth@everypar=\toks27 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/graphicx.sty +Package: graphicx 2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR) + +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/keyval.sty +Package: keyval 2022/05/29 v1.15 key=value parser (DPC) +\KV@toks@=\toks28 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/graphics.sty +Package: graphics 2022/03/10 v1.4e Standard LaTeX Graphics (DPC,SPQR) + +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/trig.sty +Package: trig 2021/08/11 v1.11 sin cos tan (DPC) +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics-cfg/graphics.cfg +File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration +) +Package graphics Info: Driver file: pdftex.def on input line 107. + +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics-def/pdftex.def +File: pdftex.def 2022/09/22 v1.2b Graphics/color driver for pdftex +)) +\Gin@req@height=\dimen150 +\Gin@req@width=\dimen151 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/tcolorbox/tcolorbox.sty +Package: tcolorbox 2023/02/12 version 6.0.1 text color boxes + +(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty +(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.te +x +\pgfutil@everybye=\toks29 +\pgfutil@tempdima=\dimen152 +\pgfutil@tempdimb=\dimen153 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def +\pgfutil@abb=\box53 +) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/pgf.revision.tex) +Package: pgfrcs 2023-01-15 v3.1.10 (3.1.10) +)) +Package: pgf 2023-01-15 v3.1.10 (3.1.10) + +(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty +(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex +Package: pgfsys 2023-01-15 v3.1.10 (3.1.10) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex +\pgfkeys@pathtoks=\toks30 +\pgfkeys@temptoks=\toks31 + +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfkeyslibraryfil +tered.code.tex +\pgfkeys@tmptoks=\toks32 +)) +\pgf@x=\dimen154 +\pgf@y=\dimen155 +\pgf@xa=\dimen156 +\pgf@ya=\dimen157 +\pgf@xb=\dimen158 +\pgf@yb=\dimen159 +\pgf@xc=\dimen160 +\pgf@yc=\dimen161 +\pgf@xd=\dimen162 +\pgf@yd=\dimen163 +\w@pgf@writea=\write3 +\r@pgf@reada=\read2 +\c@pgf@counta=\count271 +\c@pgf@countb=\count272 +\c@pgf@countc=\count273 +\c@pgf@countd=\count274 +\t@pgf@toka=\toks33 +\t@pgf@tokb=\toks34 +\t@pgf@tokc=\toks35 +\pgf@sys@id@count=\count275 + +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg +File: pgf.cfg 2023-01-15 v3.1.10 (3.1.10) +) +Driver file for pgf: pgfsys-pdftex.def + +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.d +ef +File: pgfsys-pdftex.def 2023-01-15 v3.1.10 (3.1.10) + +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-p +df.def +File: pgfsys-common-pdf.def 2023-01-15 v3.1.10 (3.1.10) +))) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath. +code.tex +File: pgfsyssoftpath.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgfsyssoftpath@smallbuffer@items=\count276 +\pgfsyssoftpath@bigbuffer@items=\count277 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol. +code.tex +File: pgfsysprotocol.code.tex 2023-01-15 v3.1.10 (3.1.10) +)) (/usr/local/texlive/2023/texmf-dist/tex/latex/xcolor/xcolor.sty +Package: xcolor 2022/06/12 v2.14 LaTeX color extensions (UK) + +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics-cfg/color.cfg +File: color.cfg 2016/01/02 v1.6 sample color configuration +) +Package xcolor Info: Driver file: pdftex.def on input line 227. + +(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/mathcolor.ltx) +Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1353. +Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1357. +Package xcolor Info: Model `RGB' extended on input line 1369. +Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1371. +Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1372. +Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1373. +Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1374. +Package xcolor Info: Model `Gray' substituted by `gray' on input line 1375. +Package xcolor Info: Model `wave' substituted by `hsb' on input line 1376. +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex +Package: pgfcore 2023-01-15 v3.1.10 (3.1.10) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex +\pgfmath@dimen=\dimen164 +\pgfmath@count=\count278 +\pgfmath@box=\box54 +\pgfmath@toks=\toks36 +\pgfmath@stack@operand=\toks37 +\pgfmath@stack@operation=\toks38 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code. +tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic +.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigo +nometric.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.rando +m.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.compa +rison.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base. +code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round +.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc. +code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integ +erarithmetics.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex +\c@pgfmathroundto@lastzeros=\count279 +)) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfint.code.tex) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.co +de.tex +File: pgfcorepoints.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgf@picminx=\dimen165 +\pgf@picmaxx=\dimen166 +\pgf@picminy=\dimen167 +\pgf@picmaxy=\dimen168 +\pgf@pathminx=\dimen169 +\pgf@pathmaxx=\dimen170 +\pgf@pathminy=\dimen171 +\pgf@pathmaxy=\dimen172 +\pgf@xx=\dimen173 +\pgf@xy=\dimen174 +\pgf@yx=\dimen175 +\pgf@yy=\dimen176 +\pgf@zx=\dimen177 +\pgf@zy=\dimen178 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconst +ruct.code.tex +File: pgfcorepathconstruct.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgf@path@lastx=\dimen179 +\pgf@path@lasty=\dimen180 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage +.code.tex +File: pgfcorepathusage.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgf@shorten@end@additional=\dimen181 +\pgf@shorten@start@additional=\dimen182 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.co +de.tex +File: pgfcorescopes.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgfpic=\box55 +\pgf@hbox=\box56 +\pgf@layerbox@main=\box57 +\pgf@picture@serial@count=\count280 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicst +ate.code.tex +File: pgfcoregraphicstate.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgflinewidth=\dimen183 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransform +ations.code.tex +File: pgfcoretransformations.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgf@pt@x=\dimen184 +\pgf@pt@y=\dimen185 +\pgf@pt@temp=\dimen186 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.cod +e.tex +File: pgfcorequick.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.c +ode.tex +File: pgfcoreobjects.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathproce +ssing.code.tex +File: pgfcorepathprocessing.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.co +de.tex +File: pgfcorearrows.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgfarrowsep=\dimen187 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.cod +e.tex +File: pgfcoreshade.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgf@max=\dimen188 +\pgf@sys@shading@range@num=\count281 +\pgf@shadingcount=\count282 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.cod +e.tex +File: pgfcoreimage.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal. +code.tex +File: pgfcoreexternal.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgfexternal@startupbox=\box58 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.co +de.tex +File: pgfcorelayers.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretranspare +ncy.code.tex +File: pgfcoretransparency.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns. +code.tex +File: pgfcorepatterns.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code. +tex +File: pgfcorerdf.code.tex 2023-01-15 v3.1.10 (3.1.10) +))) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.cod +e.tex +File: pgfmoduleshapes.code.tex 2023-01-15 v3.1.10 (3.1.10) +\pgfnodeparttextbox=\box59 +) +(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code. +tex +File: pgfmoduleplot.code.tex 2023-01-15 v3.1.10 (3.1.10) +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version +-0-65.sty +Package: pgfcomp-version-0-65 2023-01-15 v3.1.10 (3.1.10) +\pgf@nodesepstart=\dimen189 +\pgf@nodesepend=\dimen190 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version +-1-18.sty +Package: pgfcomp-version-1-18 2023-01-15 v3.1.10 (3.1.10) +)) (/usr/local/texlive/2023/texmf-dist/tex/latex/tools/verbatim.sty +Package: verbatim 2022-07-02 v1.5u LaTeX2e package for verbatim enhancements +\every@verbatim=\toks39 +\verbatim@line=\toks40 +\verbatim@in@stream=\read3 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/environ/environ.sty +Package: environ 2014/05/04 v0.3 A new way to define environments + +(/usr/local/texlive/2023/texmf-dist/tex/latex/trimspaces/trimspaces.sty +Package: trimspaces 2009/09/17 v1.1 Trim spaces around a token list +)) +(/usr/local/texlive/2023/texmf-dist/tex/latex/etoolbox/etoolbox.sty +Package: etoolbox 2020/10/05 v2.5k e-TeX tools for LaTeX (JAW) +\etb@tempcnta=\count283 +) +\tcb@titlebox=\box60 +\tcb@upperbox=\box61 +\tcb@lowerbox=\box62 +\tcb@phantombox=\box63 +\c@tcbbreakpart=\count284 +\c@tcblayer=\count285 +\c@tcolorbox@number=\count286 +\tcb@temp=\box64 +\tcb@temp=\box65 +\tcb@temp=\box66 +\tcb@temp=\box67 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/arydshln/arydshln.sty +Package: arydshln 2019/02/21 v1.76 +\dashlinedash=\dimen191 +\dashlinegap=\dimen192 +\adl@box=\box68 +\adl@height=\dimen193 +\adl@heightsave=\dimen194 +\adl@depth=\dimen195 +\adl@depthsave=\dimen196 +\adl@finaldepth=\dimen197 +\adl@columns=\count287 +\adl@ncol=\count288 +\adl@currentcolumn=\count289 +\adl@currentcolumnsave=\count290 +\adl@totalheight=\count291 +\adl@totalheightsave=\count292 +\adl@dash=\count293 +\adl@gap=\count294 +\adl@cla=\count295 +\adl@clb=\count296 +\adl@everyvbox=\toks41 +\adl@LTpagetotal=\dimen198 +) +(/usr/local/texlive/2023/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def +File: l3backend-pdftex.def 2023-01-16 L3 backend support: PDF output (pdfTeX) +\l__color_backend_stack_int=\count297 +\l__pdf_internal_box=\box69 +) +No file sqrt4.aux. +\openout1 = `sqrt4.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 15. +LaTeX Font Info: ... okay on input line 15. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 15. +LaTeX Font Info: ... okay on input line 15. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 15. +LaTeX Font Info: ... okay on input line 15. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 15. +LaTeX Font Info: ... okay on input line 15. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 15. +LaTeX Font Info: ... okay on input line 15. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 15. +LaTeX Font Info: ... okay on input line 15. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 15. +LaTeX Font Info: ... okay on input line 15. +(/usr/local/texlive/2023/texmf-dist/tex/context/base/mkii/supp-pdf.mkii +[Loading MPS to PDF converter (version 2006.09.02).] +\scratchcounter=\count298 +\scratchdimen=\dimen199 +\scratchbox=\box70 +\nofMPsegments=\count299 +\nofMParguments=\count300 +\everyMPshowfont=\toks42 +\MPscratchCnt=\count301 +\MPscratchDim=\dimen256 +\MPnumerator=\count302 +\makeMPintoPDFobject=\count303 +\everyMPtoPDFconversion=\toks43 +) (/usr/local/texlive/2023/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty +Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf +Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 +85. + +(/usr/local/texlive/2023/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv +e +)) +LaTeX Font Info: Trying to load font information for U+msa on input line 24. + + +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/umsa.fd +File: umsa.fd 2013/01/14 v3.01 AMS symbols A +) +LaTeX Font Info: Trying to load font information for U+msb on input line 24. + + +(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/umsb.fd +File: umsb.fd 2013/01/14 v3.01 AMS symbols B +) +Overfull \hbox (90.5419pt too wide) in paragraph at lines 24--80 + [] + [] + +[1 + +{/usr/local/texlive/2023/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] +Overfull \vbox (101.09952pt too high) has occurred while \output is active [] + + +[2] +Overfull \hbox (67.0273pt too wide) in paragraph at lines 88--144 + [] + [] + +[3] +Overfull \vbox (101.09952pt too high) has occurred while \output is active [] + + +[4] (./sqrt4.aux) ) +Here is how much of TeX's memory you used: + 13098 strings out of 476025 + 263892 string characters out of 5790017 + 1878388 words of memory out of 5000000 + 33355 multiletter control sequences out of 15000+600000 + 517233 words of font info for 51 fonts, out of 8000000 for 9000 + 1141 hyphenation exceptions out of 8191 + 83i,12n,89p,418b,230s stack positions out of 10000i,1000n,20000p,200000b,200000s + +Output written on sqrt4.pdf (4 pages, 75105 bytes). +PDF statistics: + 50 PDF objects out of 1000 (max. 8388607) + 31 compressed objects within 1 object stream + 0 named destinations out of 1000 (max. 500000) + 13 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/docs/divsqrt_tex/sqrt4.pdf b/docs/divsqrt_tex/sqrt4.pdf new file mode 100644 index 0000000000000000000000000000000000000000..363d6eca30a77ad01431213a52d28d6e50c834ca GIT binary patch literal 75105 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

SYLSG`agl~D_Ln6yU!la_r8a)U>itgnUP1o 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%0D{Az47yvbL_8*&W&#u3*>R%Vj6E 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 literal 0 HcmV?d00001 diff --git a/docs/divsqrt_tex/sqrt4.tex b/docs/divsqrt_tex/sqrt4.tex new file mode 100644 index 000000000..1d40864eb --- /dev/null +++ b/docs/divsqrt_tex/sqrt4.tex @@ -0,0 +1,147 @@ +\documentclass[12pt]{article} + +\usepackage{amssymb, amsmath, amsfonts, amsthm, graphicx, tcolorbox} + +\usepackage{arydshln} + +\parskip = .2in +\parindent = 0in + +\pagestyle{empty} + +%========== +%========== + +\begin{document} + + + +X = 0.1011 0111 10 (734/1024) + +S = 0.1101 1000 11\ 00 (3468/4096), negative sticky bit +{\small +\begin{center} +\begin{tabular}{ccccc} + &$X $&$ 0000.1011\ 0111\ 1000 $& &$S_0={\color{blue}0001}.0000\ 0000\ 0000$\\ + &$WS_0=4(X-1) $&$ 1110.1101\ 1110\ 0000 $& &$SM_0={\color{blue}0000}.0000\ 0000\ 0000\phantom{M}$\\ + &$WC_0 $&$ 0000.0000\ 0000\ 0000 $& &$K_0=0001.0000\ 0000\ 0000\ $\\ + & & & &$C_0=1111.0000\ 0000\ 0000\,$\\ + \hdashline\\ + Step 1: &$WS_0 $&$ 1110.1101\ 1110\ 0000 $& &\\ + &$WC_0 $&$ 0000.0000\ 0000\ 0000 $& &($W_{msbs}=1110.110\ \text{so}\ s_1=-1$)\\ + &$F_1=2S_0-K_1$&${\color{blue}0001.11}00\ 0000\ 0000$& &$S_1={\color{blue}0000.11}00\ 0000\ 0000$\\ + & & & &$SM_1={\color{blue}0000.10}00\ 0000\ 0000\phantom{M}$\\ + \cline{2-3} + &$sum $&$ 1111.0001\ 1110\ 0000 $&$\ll2 $&$K_1=0000.0100\ 0000\ 0000\ $\\ + &$carry $&$ 0001.1000\ 0000\ 0000 $&$\ll2 $&$C_1=1111.1100\ 0000\ 0000\,$\\ + \hdashline\\ + Step 2: &$WS_1 $&$ 1100.0111\ 1000\ 0000 $& &\\ + &$WC_1 $&$ 0110.0000\ 0000\ 0000 $& &($W_{msbs}=0010.011\ \text{so}\ s_2=2$)\\ + &$F_2=-4S_1-4K_2$&${\color{blue}1100.1100}\ 0000\ 0000$& &$S_2={\color{blue}0000.1110}\ 0000\ 0000$\\ + & & & &$SM_2={\color{blue}0000.1101}\ 0000\ 0000\phantom{M}$\\ + \cline{2-3} + &$sum $&$ 0110.1011\ 1000\ 0000 $&$\ll2 $&$K_2=0000.0001\ 0000\ 0000\ $\\ + &$carry $&$ 1000.1000\ 0000\ 0000 $&$\ll2 $&$C_2=1111.1111\ 0000\ 0000\,$\\ + \hdashline\\ + Step 3: &$WS_2 $&$ 1010.1110\ 0000\ 0000 $& &\\ + &$WC_2 $&$ 0010.0000\ 0000\ 0000 $& &($W_{msbs}=1100.111\ \text{so}\ s_3=-2$)\\ + &$F_3=4S_2-4K_3$&${\color{blue}0011.0111\ 00}00\ 0000$& &$S_3={\color{blue}0000.1101\ 10}00\ 0000$\\ + & & & &$SM_3={\color{blue}0000.1101\ 01}00\ 0000\phantom{M}$\\ + \cline{2-3} + &$sum $&$ 1011.1001\ 0000\ 0000 $&$\ll2 $&$K_3=0000.0000\ 0100\ 0000\ $\\ + &$carry $&$ 0100.1100\ 0000\ 0000 $&$\ll2 $&$C_3=1111.1111\ 1100\ 0000\,$\\ + \hdashline\\ + Step 4: &$WS_3 $&$ 1110.0100\ 0000\ 0000 $& &\\ + &$WC_3 $&$ 0011.0000\ 0000\ 0000 $& &($W_{msbs}=0001.010\ \text{so}\ s_4=1$)\\ + &$F_4=-2S_3-K_4$&${\color{blue}1110.0100\ 1111}\ 0000$& &$S_4={\color{blue}0000.1101\ 1001}\ 0000$\\ + & & & &$SM_4={\color{blue}0000.1101\ 1000}\ 0000\phantom{M}$\\ + \cline{2-3} + &$sum $&$ 0011.0000\ 1111\ 0000 $&$\ll2 $&$K_4=0000.0000\ 0001\ 0000\ $\\ + &$carry $&$ 1100.1000\ 0000\ 0000 $&$\ll2 $&$C_4=1111.1111\ 1111\ 0000\,$\\ + \hdashline\\ + Step 5: &$WS_4 $&$ 1100.0011\ 1100\ 0000 $& &\\ + &$WC_4 $&$ 0010.0000\ 0000\ 0000 $& &($W_{msbs}=1110.001\ \text{so}\ s_5=-1$)\\ + &$F_5=2S_4-K_5 $&${\color{blue}0001.1011\ 0001\ 11}00$& &$S_5={\color{blue}0000.1101\ 1000\ 11}00$\\ + & & & &$SM_5={\color{blue}0000.1101\ 1000\ 10}00\phantom{M}$\\ + \cline{2-3} + &$sum $&$ 1111.1000\ 1101\ 1100 $&$\ll2 $&$K_5=0000.0000\ 0000\ 0100\ $\\ + &$carry $&$ 0000.0110\ 0000\ 0000 $&$\ll2 $&$C_5=1111.1111\ 1111\ 1100\,$\\ + \hdashline\\ + Step 6: &$WS_5 $&$ 1110.0011\ 0111\ 0000 $& &\\ + &$WC_5 $&$ 0001.1000\ 0000\ 0000 $& &($W_{msbs}=1111.101\ \text{so}\ s_6=0$)\\ + &$F_6=0 $&${\color{blue}0000.0000\ 0000\ 0000}$& &$S_6={\color{blue}0000.1101\ 1000\ 1100}$\\ + & & & &$SM_6={\color{blue}0000.1101\ 1000\ 1011}\phantom{M}$\\ + \cline{2-3} + &$sum $&$ 1111.1011\ 0111\ 0111 $&$\ll2 $&$K_6=0000.0000\ 0000\ 0001\ $\\ + &$carry $&$ 0000.0000\ 0000\ 0000 $&$\ll2 $&$C_6=1111.1111\ 1111\ 1111\,$\\ + \hdashline\\ + Terminate&Square Root&0000.11 01\ 10 00\ 10 (11) +\end{tabular} +\end{center} +} + +X = 0.1001\ 0101\ 00 (596/1024) + +S = 0.1100 0011 01\ 01 (3125/4096) +{\small +\begin{center} +\begin{tabular}{ccccc} + &$X $&$ 0000.1001\ 0101\ 0000 $& &$S_0={\color{blue}0001}.0000\ 0000\ 0000$\\ + &$WS_0=4(X-1) $&$ 1110.0101\ 0100\ 0000 $& &$SM_0={\color{blue}0000}.0000\ 0000\ 0000\phantom{M}$\\ + &$WC_0 $&$ 0000.0000\ 0000\ 0000 $& &$K_0=0001.0000\ 0000\ 0000\ $\\ + & & & &$C_0=1111.0000\ 0000\ 0000\,$\\ + \hdashline\\ + Step 1: &$WS_0 $&$ 1110.0101\ 0100\ 0000 $& &\\ + &$WC_0 $&$ 0000.0000\ 0000\ 0000 $& &($W_{msbs}=1110.010\ \text{so}\ s_1=-1$)\\ + &$F_1=2S_0-K_1 $&${\color{blue}0001.11}00\ 0000\ 0000$& &$S_1={\color{blue}0000.11}00\ 0000\ 0000$\\ + & & & &$SM_1={\color{blue}0000.10}00\ 0000\ 0000\phantom{M}$\\ + \cline{2-3} + &$sum $&$ 1111.1001\ 0100\ 0000 $&$\ll2 $&$K_1=0000.0100\ 0000\ 0000\ $\\ + &$carry $&$ 0000.1000\ 0000\ 0000 $&$\ll2 $&$C_1=1111.1100\ 0000\ 0000\,$\\ + \hdashline\\ + Step 2: &$WS_1 $&$ 1110.0101\ 0000\ 0000 $& &\\ + &$WC_2 $&$ 0010.0000\ 0000\ 0000 $& &($W_{msbs}=0000.010\ \text{so}\ s_2=0$)\\ + &$F_2=0 $&${\color{blue}0000.0000}\ 0000\ 0000$& &$S_2={\color{blue}0000.1100}\ 0000\ 0000$\\ + & & & &$SM_2={\color{blue}0000.1110}\ 0000\ 0000\phantom{M}$\\ + \cline{2-3} + &$sum $&$ 1100.0101\ 0000\ 0000 $&$\ll2 $&$K_2=0000.0001\ 0000\ 0000\ $\\ + &$carry $&$ 0100.0000\ 0000\ 0000 $&$\ll2 $&$C_2=1111.1111\ 0000\ 0000\,$\\ + \hdashline\\ + Step 3: &$WS_2 $&$ 0001.0100\ 0000\ 0000 $& &\\ + &$WC_2 $&$ 0000.0000\ 0000\ 0000 $& &($W_{msbs}=0001.010\ \text{so}\ s_3=1$)\\ + &$F_3=-2S_2-K_3$&${\color{blue}1110.0111\ 11}00\ 0000$& &$S_3={\color{blue}0000.1100\ 01}00\ 0000$\\ + & & & &$SM_3={\color{blue}0000.1100\ 00}00\ 0000\phantom{M}$\\ + \cline{2-3} + &$sum $&$ 1111.0011\ 1100\ 0000 $&$\ll2 $&$K_3=0000.0000\ 0100\ 0000\ $\\ + &$carry $&$ 1000.1000\ 0000\ 0000 $&$\ll2 $&$C_3=1111.1111\ 1100\ 0000\,$\\ + \hdashline\\ + Step 4: &$WS_3 $&$ 1100.1111\ 0000\ 0000 $& &\\ + &$WC_3 $&$ 0010.0000\ 0000\ 0000 $& &($W_{msbs}=1110.111\ \text{so}\ s_4=-1$)\\ + &$F_4=2S_3-K_3 $&${\color{blue}0001.1000\ 0111}\ 0000$& &$S_4={\color{blue}0000.1100\ 0011}\ 0000$\\ + & & & &$SM_4={\color{blue}0000.1100\ 0010}\ 0000\phantom{M}$\\ + \cline{2-3} + &$sum $&$ 1111.0111\ 0111\ 0000 $&$\ll2 $&$K_4=0000.0000\ 0001\ 0000\ $\\ + &$carry $&$ 0001.0000\ 0000\ 0000 $&$\ll2 $&$C_4=1111.1111\ 1111\ 0000\,$\\ + \hdashline\\ + Step 5: &$WS_4 $&$ 1101.1101\ 1100\ 0000 $& &\\ + &$WC_4 $&$ 0100.0000\ 0000\ 0000 $& &($W_{msbs}=0001.110\ \text{so}\ s_5=1$)\\ + &$F_5=-2S_4-K_4 $&${\color{blue}1110.0111\ 1001\ 11}00$& &$S_5={\color{blue}0000.1100\ 0011\ 01}00$\\ + & & & &$SM_5={\color{blue}0000.1100\ 0011\ 00}00\phantom{M}$\\ + \cline{2-3} + &$sum $&$ 0111.1010\ 0101\ 1100 $&$\ll1 $&$K_5=0000.0000\ 0000\ 0100\ $\\ + &$carry $&$ 1000.1011\ 0000\ 0000 $&$\ll1 $&$C_5=1111.1111\ 1111\ 1100\,$\\ + \hdashline\\ + Step 6: &$WS_5 $&$ 1110.1001\ 0111\ 0000 $& &\\ + &$WC_5 $&$ 0010.1100\ 0000\ 0000 $& &($W_{msbs}=0001.010\ \text{so}\ s_6=1$)\\ + &$F_6= $&$ $& &$S_5={\color{blue}0000.1100\ 0011\ 0101}$\\ + & & & &$SM_5={\color{blue}0000.1100\ 0011\ 0100}\phantom{M}$\\ + \cline{2-3} + &$sum $&$ 0001.1110\ 1001\ 0111 $&$\ll1 $&$K_5=0000.0000\ 0000\ 0001\ $\\ + &$carry $&$ 1110.0010\ 1100\ 0000 $&$\ll1 $&$C_5=1111.1111\ 1111\ 1111\,$\\ + \hdashline\\ + Terminate +\end{tabular} +\end{center} +} + +\end{document} From 58e7be233809ac49982c05936d2dec99587c3439 Mon Sep 17 00:00:00 2001 From: "James E. Stine" Date: Tue, 3 Oct 2023 08:11:45 -0500 Subject: [PATCH 24/32] Fix testfloat testbench to work properly with parameters --- testbench/testbench-fp.sv | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/testbench/testbench-fp.sv b/testbench/testbench-fp.sv index 08d674f1d..2ddd13072 100644 --- a/testbench/testbench-fp.sv +++ b/testbench/testbench-fp.sv @@ -1000,7 +1000,7 @@ module testbenchfp; endmodule -module readvectors ( +module readvectors import cvw::*; #(parameter cvw_t P) ( input logic clk, input logic [P.FLEN*4+7:0] TestVector, input logic [P.FMTBITS-1:0] ModFmt, @@ -1026,7 +1026,7 @@ module readvectors ( ); localparam Q_LEN = 32'd128; - `include "parameter-defs.vh" + //`include "parameter-defs.vh" logic XEn; logic YEn; From 8b9ddd731ce194f70d7003ffc731ff1459c82890 Mon Sep 17 00:00:00 2001 From: "James E. Stine" Date: Tue, 3 Oct 2023 09:25:26 -0500 Subject: [PATCH 25/32] Update TeX docs divsqrt examples by removing ancillary files (apologies for previously pushing) --- docs/divsqrt_tex/div2.aux | 2 - docs/divsqrt_tex/div2.log | 531 ----------------------------------- docs/divsqrt_tex/div2.pdf | Bin 110314 -> 0 bytes docs/divsqrt_tex/div4.aux | 2 - docs/divsqrt_tex/div4.log | 527 ----------------------------------- docs/divsqrt_tex/div4.pdf | Bin 88257 -> 0 bytes docs/divsqrt_tex/sqrt2.aux | 2 - docs/divsqrt_tex/sqrt2.log | 557 ------------------------------------- docs/divsqrt_tex/sqrt2.pdf | Bin 105524 -> 0 bytes docs/divsqrt_tex/sqrt4.aux | 2 - docs/divsqrt_tex/sqrt4.log | 534 ----------------------------------- docs/divsqrt_tex/sqrt4.pdf | Bin 75105 -> 0 bytes 12 files changed, 2157 deletions(-) delete mode 100644 docs/divsqrt_tex/div2.aux delete mode 100644 docs/divsqrt_tex/div2.log delete mode 100644 docs/divsqrt_tex/div2.pdf delete mode 100644 docs/divsqrt_tex/div4.aux delete mode 100644 docs/divsqrt_tex/div4.log delete mode 100644 docs/divsqrt_tex/div4.pdf delete mode 100644 docs/divsqrt_tex/sqrt2.aux delete mode 100644 docs/divsqrt_tex/sqrt2.log delete mode 100644 docs/divsqrt_tex/sqrt2.pdf delete mode 100644 docs/divsqrt_tex/sqrt4.aux delete mode 100644 docs/divsqrt_tex/sqrt4.log delete mode 100644 docs/divsqrt_tex/sqrt4.pdf diff --git a/docs/divsqrt_tex/div2.aux b/docs/divsqrt_tex/div2.aux deleted file mode 100644 index a79beafe4..000000000 --- a/docs/divsqrt_tex/div2.aux +++ /dev/null @@ -1,2 +0,0 @@ -\relax -\gdef \@abspage@last{3} diff --git a/docs/divsqrt_tex/div2.log b/docs/divsqrt_tex/div2.log deleted file mode 100644 index 56ed865dc..000000000 --- a/docs/divsqrt_tex/div2.log +++ /dev/null @@ -1,531 +0,0 @@ -This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023) (preloaded format=pdflatex 2023.7.19) 20 AUG 2023 13:10 -entering extended mode - restricted \write18 enabled. - %&-line parsing enabled. -**div2.tex -(./div2.tex -LaTeX2e <2022-11-01> patch level 1 -L3 programming layer <2023-02-22> -(/usr/local/texlive/2023/texmf-dist/tex/latex/base/article.cls -Document Class: article 2022/07/02 v1.4n Standard LaTeX document class -(/usr/local/texlive/2023/texmf-dist/tex/latex/base/size12.clo -File: size12.clo 2022/07/02 v1.4n Standard LaTeX file (size option) -) -\c@part=\count185 -\c@section=\count186 -\c@subsection=\count187 -\c@subsubsection=\count188 -\c@paragraph=\count189 -\c@subparagraph=\count190 -\c@figure=\count191 -\c@table=\count192 -\abovecaptionskip=\skip48 -\belowcaptionskip=\skip49 -\bibindent=\dimen140 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/amssymb.sty -Package: amssymb 2013/01/14 v3.01 AMS font symbols - -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/amsfonts.sty -Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support -\@emptytoks=\toks16 -\symAMSa=\mathgroup4 -\symAMSb=\mathgroup5 -LaTeX Font Info: Redeclaring math symbol \hbar on input line 98. -LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' -(Font) U/euf/m/n --> U/euf/b/n on input line 106. -)) -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsmath.sty -Package: amsmath 2022/04/08 v2.17n AMS math features -\@mathmargin=\skip50 - -For additional information on amsmath, use the `?' option. -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amstext.sty -Package: amstext 2021/08/26 v2.01 AMS text - -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsgen.sty -File: amsgen.sty 1999/11/30 v2.0 generic functions -\@emptytoks=\toks17 -\ex@=\dimen141 -)) -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsbsy.sty -Package: amsbsy 1999/11/29 v1.2d Bold Symbols -\pmbraise@=\dimen142 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsopn.sty -Package: amsopn 2022/04/08 v2.04 operator names -) -\inf@bad=\count193 -LaTeX Info: Redefining \frac on input line 234. -\uproot@=\count194 -\leftroot@=\count195 -LaTeX Info: Redefining \overline on input line 399. -LaTeX Info: Redefining \colon on input line 410. -\classnum@=\count196 -\DOTSCASE@=\count197 -LaTeX Info: Redefining \ldots on input line 496. -LaTeX Info: Redefining \dots on input line 499. -LaTeX Info: Redefining \cdots on input line 620. -\Mathstrutbox@=\box51 -\strutbox@=\box52 -LaTeX Info: Redefining \big on input line 722. -LaTeX Info: Redefining \Big on input line 723. -LaTeX Info: Redefining \bigg on input line 724. -LaTeX Info: Redefining \Bigg on input line 725. -\big@size=\dimen143 -LaTeX Font Info: Redeclaring font encoding OML on input line 743. -LaTeX Font Info: Redeclaring font encoding OMS on input line 744. -\macc@depth=\count198 -LaTeX Info: Redefining \bmod on input line 905. -LaTeX Info: Redefining \pmod on input line 910. -LaTeX Info: Redefining \smash on input line 940. -LaTeX Info: Redefining \relbar on input line 970. -LaTeX Info: Redefining \Relbar on input line 971. -\c@MaxMatrixCols=\count199 -\dotsspace@=\muskip16 -\c@parentequation=\count266 -\dspbrk@lvl=\count267 -\tag@help=\toks18 -\row@=\count268 -\column@=\count269 -\maxfields@=\count270 -\andhelp@=\toks19 -\eqnshift@=\dimen144 -\alignsep@=\dimen145 -\tagshift@=\dimen146 -\tagwidth@=\dimen147 -\totwidth@=\dimen148 -\lineht@=\dimen149 -\@envbody=\toks20 -\multlinegap=\skip51 -\multlinetaggap=\skip52 -\mathdisplay@stack=\toks21 -LaTeX Info: Redefining \[ on input line 2953. -LaTeX Info: Redefining \] on input line 2954. -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/amscls/amsthm.sty -Package: amsthm 2020/05/29 v2.20.6 -\thm@style=\toks22 -\thm@bodyfont=\toks23 -\thm@headfont=\toks24 -\thm@notefont=\toks25 -\thm@headpunct=\toks26 -\thm@preskip=\skip53 -\thm@postskip=\skip54 -\thm@headsep=\skip55 -\dth@everypar=\toks27 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/graphicx.sty -Package: graphicx 2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR) - -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/keyval.sty -Package: keyval 2022/05/29 v1.15 key=value parser (DPC) -\KV@toks@=\toks28 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/graphics.sty -Package: graphics 2022/03/10 v1.4e Standard LaTeX Graphics (DPC,SPQR) - -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/trig.sty -Package: trig 2021/08/11 v1.11 sin cos tan (DPC) -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics-cfg/graphics.cfg -File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration -) -Package graphics Info: Driver file: pdftex.def on input line 107. - -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics-def/pdftex.def -File: pdftex.def 2022/09/22 v1.2b Graphics/color driver for pdftex -)) -\Gin@req@height=\dimen150 -\Gin@req@width=\dimen151 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/tcolorbox/tcolorbox.sty -Package: tcolorbox 2023/02/12 version 6.0.1 text color boxes - -(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty -(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.te -x -\pgfutil@everybye=\toks29 -\pgfutil@tempdima=\dimen152 -\pgfutil@tempdimb=\dimen153 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def -\pgfutil@abb=\box53 -) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/pgf.revision.tex) -Package: pgfrcs 2023-01-15 v3.1.10 (3.1.10) -)) -Package: pgf 2023-01-15 v3.1.10 (3.1.10) - -(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty -(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex -Package: pgfsys 2023-01-15 v3.1.10 (3.1.10) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex -\pgfkeys@pathtoks=\toks30 -\pgfkeys@temptoks=\toks31 - -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfkeyslibraryfil -tered.code.tex -\pgfkeys@tmptoks=\toks32 -)) -\pgf@x=\dimen154 -\pgf@y=\dimen155 -\pgf@xa=\dimen156 -\pgf@ya=\dimen157 -\pgf@xb=\dimen158 -\pgf@yb=\dimen159 -\pgf@xc=\dimen160 -\pgf@yc=\dimen161 -\pgf@xd=\dimen162 -\pgf@yd=\dimen163 -\w@pgf@writea=\write3 -\r@pgf@reada=\read2 -\c@pgf@counta=\count271 -\c@pgf@countb=\count272 -\c@pgf@countc=\count273 -\c@pgf@countd=\count274 -\t@pgf@toka=\toks33 -\t@pgf@tokb=\toks34 -\t@pgf@tokc=\toks35 -\pgf@sys@id@count=\count275 - -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg -File: pgf.cfg 2023-01-15 v3.1.10 (3.1.10) -) -Driver file for pgf: pgfsys-pdftex.def - -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.d -ef -File: pgfsys-pdftex.def 2023-01-15 v3.1.10 (3.1.10) - -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-p -df.def -File: pgfsys-common-pdf.def 2023-01-15 v3.1.10 (3.1.10) -))) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath. -code.tex -File: pgfsyssoftpath.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgfsyssoftpath@smallbuffer@items=\count276 -\pgfsyssoftpath@bigbuffer@items=\count277 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol. -code.tex -File: pgfsysprotocol.code.tex 2023-01-15 v3.1.10 (3.1.10) -)) (/usr/local/texlive/2023/texmf-dist/tex/latex/xcolor/xcolor.sty -Package: xcolor 2022/06/12 v2.14 LaTeX color extensions (UK) - -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics-cfg/color.cfg -File: color.cfg 2016/01/02 v1.6 sample color configuration -) -Package xcolor Info: Driver file: pdftex.def on input line 227. - -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/mathcolor.ltx) -Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1353. -Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1357. -Package xcolor Info: Model `RGB' extended on input line 1369. -Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1371. -Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1372. -Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1373. -Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1374. -Package xcolor Info: Model `Gray' substituted by `gray' on input line 1375. -Package xcolor Info: Model `wave' substituted by `hsb' on input line 1376. -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex -Package: pgfcore 2023-01-15 v3.1.10 (3.1.10) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex -\pgfmath@dimen=\dimen164 -\pgfmath@count=\count278 -\pgfmath@box=\box54 -\pgfmath@toks=\toks36 -\pgfmath@stack@operand=\toks37 -\pgfmath@stack@operation=\toks38 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code. -tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic -.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigo -nometric.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.rando -m.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.compa -rison.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base. -code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round -.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc. -code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integ -erarithmetics.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex -\c@pgfmathroundto@lastzeros=\count279 -)) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfint.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.co -de.tex -File: pgfcorepoints.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgf@picminx=\dimen165 -\pgf@picmaxx=\dimen166 -\pgf@picminy=\dimen167 -\pgf@picmaxy=\dimen168 -\pgf@pathminx=\dimen169 -\pgf@pathmaxx=\dimen170 -\pgf@pathminy=\dimen171 -\pgf@pathmaxy=\dimen172 -\pgf@xx=\dimen173 -\pgf@xy=\dimen174 -\pgf@yx=\dimen175 -\pgf@yy=\dimen176 -\pgf@zx=\dimen177 -\pgf@zy=\dimen178 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconst -ruct.code.tex -File: pgfcorepathconstruct.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgf@path@lastx=\dimen179 -\pgf@path@lasty=\dimen180 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage -.code.tex -File: pgfcorepathusage.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgf@shorten@end@additional=\dimen181 -\pgf@shorten@start@additional=\dimen182 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.co -de.tex -File: pgfcorescopes.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgfpic=\box55 -\pgf@hbox=\box56 -\pgf@layerbox@main=\box57 -\pgf@picture@serial@count=\count280 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicst -ate.code.tex -File: pgfcoregraphicstate.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgflinewidth=\dimen183 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransform -ations.code.tex -File: pgfcoretransformations.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgf@pt@x=\dimen184 -\pgf@pt@y=\dimen185 -\pgf@pt@temp=\dimen186 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.cod -e.tex -File: pgfcorequick.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.c -ode.tex -File: pgfcoreobjects.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathproce -ssing.code.tex -File: pgfcorepathprocessing.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.co -de.tex -File: pgfcorearrows.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgfarrowsep=\dimen187 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.cod -e.tex -File: pgfcoreshade.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgf@max=\dimen188 -\pgf@sys@shading@range@num=\count281 -\pgf@shadingcount=\count282 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.cod -e.tex -File: pgfcoreimage.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal. -code.tex -File: pgfcoreexternal.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgfexternal@startupbox=\box58 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.co -de.tex -File: pgfcorelayers.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretranspare -ncy.code.tex -File: pgfcoretransparency.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns. -code.tex -File: pgfcorepatterns.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code. -tex -File: pgfcorerdf.code.tex 2023-01-15 v3.1.10 (3.1.10) -))) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.cod -e.tex -File: pgfmoduleshapes.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgfnodeparttextbox=\box59 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code. -tex -File: pgfmoduleplot.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version --0-65.sty -Package: pgfcomp-version-0-65 2023-01-15 v3.1.10 (3.1.10) -\pgf@nodesepstart=\dimen189 -\pgf@nodesepend=\dimen190 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version --1-18.sty -Package: pgfcomp-version-1-18 2023-01-15 v3.1.10 (3.1.10) -)) (/usr/local/texlive/2023/texmf-dist/tex/latex/tools/verbatim.sty -Package: verbatim 2022-07-02 v1.5u LaTeX2e package for verbatim enhancements -\every@verbatim=\toks39 -\verbatim@line=\toks40 -\verbatim@in@stream=\read3 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/environ/environ.sty -Package: environ 2014/05/04 v0.3 A new way to define environments - -(/usr/local/texlive/2023/texmf-dist/tex/latex/trimspaces/trimspaces.sty -Package: trimspaces 2009/09/17 v1.1 Trim spaces around a token list -)) -(/usr/local/texlive/2023/texmf-dist/tex/latex/etoolbox/etoolbox.sty -Package: etoolbox 2020/10/05 v2.5k e-TeX tools for LaTeX (JAW) -\etb@tempcnta=\count283 -) -\tcb@titlebox=\box60 -\tcb@upperbox=\box61 -\tcb@lowerbox=\box62 -\tcb@phantombox=\box63 -\c@tcbbreakpart=\count284 -\c@tcblayer=\count285 -\c@tcolorbox@number=\count286 -\tcb@temp=\box64 -\tcb@temp=\box65 -\tcb@temp=\box66 -\tcb@temp=\box67 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/arydshln/arydshln.sty -Package: arydshln 2019/02/21 v1.76 -\dashlinedash=\dimen191 -\dashlinegap=\dimen192 -\adl@box=\box68 -\adl@height=\dimen193 -\adl@heightsave=\dimen194 -\adl@depth=\dimen195 -\adl@depthsave=\dimen196 -\adl@finaldepth=\dimen197 -\adl@columns=\count287 -\adl@ncol=\count288 -\adl@currentcolumn=\count289 -\adl@currentcolumnsave=\count290 -\adl@totalheight=\count291 -\adl@totalheightsave=\count292 -\adl@dash=\count293 -\adl@gap=\count294 -\adl@cla=\count295 -\adl@clb=\count296 -\adl@everyvbox=\toks41 -\adl@LTpagetotal=\dimen198 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def -File: l3backend-pdftex.def 2023-01-16 L3 backend support: PDF output (pdfTeX) -\l__color_backend_stack_int=\count297 -\l__pdf_internal_box=\box69 -) -(./div2.aux) -\openout1 = `div2.aux'. - -LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 14. -LaTeX Font Info: ... okay on input line 14. -LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 14. -LaTeX Font Info: ... okay on input line 14. -LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 14. -LaTeX Font Info: ... okay on input line 14. -LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 14. -LaTeX Font Info: ... okay on input line 14. -LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 14. -LaTeX Font Info: ... okay on input line 14. -LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 14. -LaTeX Font Info: ... okay on input line 14. -LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 14. -LaTeX Font Info: ... okay on input line 14. - -(/usr/local/texlive/2023/texmf-dist/tex/context/base/mkii/supp-pdf.mkii -[Loading MPS to PDF converter (version 2006.09.02).] -\scratchcounter=\count298 -\scratchdimen=\dimen199 -\scratchbox=\box70 -\nofMPsegments=\count299 -\nofMParguments=\count300 -\everyMPshowfont=\toks42 -\MPscratchCnt=\count301 -\MPscratchDim=\dimen256 -\MPnumerator=\count302 -\makeMPintoPDFobject=\count303 -\everyMPtoPDFconversion=\toks43 -) (/usr/local/texlive/2023/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty -Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf -Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 -85. - -(/usr/local/texlive/2023/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg -File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv -e -)) -LaTeX Font Info: Trying to load font information for U+msa on input line 17. - - -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/umsa.fd -File: umsa.fd 2013/01/14 v3.01 AMS symbols A -) -LaTeX Font Info: Trying to load font information for U+msb on input line 17. - - -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/umsb.fd -File: umsb.fd 2013/01/14 v3.01 AMS symbols B -) -Overfull \hbox (9.26367pt too wide) in paragraph at lines 17--54 - [] - [] - -[1 - -{/usr/local/texlive/2023/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] -Overfull \hbox (41.97911pt too wide) in paragraph at lines 67--95 - [] - [] - -[2] [3] (./div2.aux) ) -Here is how much of TeX's memory you used: - 13122 strings out of 476025 - 264146 string characters out of 5790017 - 1864388 words of memory out of 5000000 - 33371 multiletter control sequences out of 15000+600000 - 521384 words of font info for 67 fonts, out of 8000000 for 9000 - 1141 hyphenation exceptions out of 8191 - 83i,12n,89p,460b,213s stack positions out of 10000i,1000n,20000p,200000b,200000s - -Output written on div2.pdf (3 pages, 110314 bytes). -PDF statistics: - 67 PDF objects out of 1000 (max. 8388607) - 41 compressed objects within 1 object stream - 0 named destinations out of 1000 (max. 500000) - 13 words of extra memory for PDF output out of 10000 (max. 10000000) - diff --git a/docs/divsqrt_tex/div2.pdf b/docs/divsqrt_tex/div2.pdf deleted file mode 100644 index c84e166ee313cfe6591bd05c011b3103bfee7220..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110314 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 z 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 z�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 z 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 K(Mc*x0sar46QM%@ diff --git a/docs/divsqrt_tex/div4.aux b/docs/divsqrt_tex/div4.aux deleted file mode 100644 index d490c35e0..000000000 --- a/docs/divsqrt_tex/div4.aux +++ /dev/null @@ -1,2 +0,0 @@ -\relax -\gdef \@abspage@last{2} diff --git a/docs/divsqrt_tex/div4.log b/docs/divsqrt_tex/div4.log deleted file mode 100644 index f2d997a65..000000000 --- a/docs/divsqrt_tex/div4.log +++ /dev/null @@ -1,527 +0,0 @@ -This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023) (preloaded format=pdflatex 2023.7.19) 20 AUG 2023 13:11 -entering extended mode - restricted \write18 enabled. - %&-line parsing enabled. -**div4.tex -(./div4.tex -LaTeX2e <2022-11-01> patch level 1 -L3 programming layer <2023-02-22> -(/usr/local/texlive/2023/texmf-dist/tex/latex/base/article.cls -Document Class: article 2022/07/02 v1.4n Standard LaTeX document class -(/usr/local/texlive/2023/texmf-dist/tex/latex/base/size12.clo -File: size12.clo 2022/07/02 v1.4n Standard LaTeX file (size option) -) -\c@part=\count185 -\c@section=\count186 -\c@subsection=\count187 -\c@subsubsection=\count188 -\c@paragraph=\count189 -\c@subparagraph=\count190 -\c@figure=\count191 -\c@table=\count192 -\abovecaptionskip=\skip48 -\belowcaptionskip=\skip49 -\bibindent=\dimen140 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/amssymb.sty -Package: amssymb 2013/01/14 v3.01 AMS font symbols - -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/amsfonts.sty -Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support -\@emptytoks=\toks16 -\symAMSa=\mathgroup4 -\symAMSb=\mathgroup5 -LaTeX Font Info: Redeclaring math symbol \hbar on input line 98. -LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' -(Font) U/euf/m/n --> U/euf/b/n on input line 106. -)) -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsmath.sty -Package: amsmath 2022/04/08 v2.17n AMS math features -\@mathmargin=\skip50 - -For additional information on amsmath, use the `?' option. -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amstext.sty -Package: amstext 2021/08/26 v2.01 AMS text - -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsgen.sty -File: amsgen.sty 1999/11/30 v2.0 generic functions -\@emptytoks=\toks17 -\ex@=\dimen141 -)) -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsbsy.sty -Package: amsbsy 1999/11/29 v1.2d Bold Symbols -\pmbraise@=\dimen142 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsopn.sty -Package: amsopn 2022/04/08 v2.04 operator names -) -\inf@bad=\count193 -LaTeX Info: Redefining \frac on input line 234. -\uproot@=\count194 -\leftroot@=\count195 -LaTeX Info: Redefining \overline on input line 399. -LaTeX Info: Redefining \colon on input line 410. -\classnum@=\count196 -\DOTSCASE@=\count197 -LaTeX Info: Redefining \ldots on input line 496. -LaTeX Info: Redefining \dots on input line 499. -LaTeX Info: Redefining \cdots on input line 620. -\Mathstrutbox@=\box51 -\strutbox@=\box52 -LaTeX Info: Redefining \big on input line 722. -LaTeX Info: Redefining \Big on input line 723. -LaTeX Info: Redefining \bigg on input line 724. -LaTeX Info: Redefining \Bigg on input line 725. -\big@size=\dimen143 -LaTeX Font Info: Redeclaring font encoding OML on input line 743. -LaTeX Font Info: Redeclaring font encoding OMS on input line 744. -\macc@depth=\count198 -LaTeX Info: Redefining \bmod on input line 905. -LaTeX Info: Redefining \pmod on input line 910. -LaTeX Info: Redefining \smash on input line 940. -LaTeX Info: Redefining \relbar on input line 970. -LaTeX Info: Redefining \Relbar on input line 971. -\c@MaxMatrixCols=\count199 -\dotsspace@=\muskip16 -\c@parentequation=\count266 -\dspbrk@lvl=\count267 -\tag@help=\toks18 -\row@=\count268 -\column@=\count269 -\maxfields@=\count270 -\andhelp@=\toks19 -\eqnshift@=\dimen144 -\alignsep@=\dimen145 -\tagshift@=\dimen146 -\tagwidth@=\dimen147 -\totwidth@=\dimen148 -\lineht@=\dimen149 -\@envbody=\toks20 -\multlinegap=\skip51 -\multlinetaggap=\skip52 -\mathdisplay@stack=\toks21 -LaTeX Info: Redefining \[ on input line 2953. -LaTeX Info: Redefining \] on input line 2954. -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/amscls/amsthm.sty -Package: amsthm 2020/05/29 v2.20.6 -\thm@style=\toks22 -\thm@bodyfont=\toks23 -\thm@headfont=\toks24 -\thm@notefont=\toks25 -\thm@headpunct=\toks26 -\thm@preskip=\skip53 -\thm@postskip=\skip54 -\thm@headsep=\skip55 -\dth@everypar=\toks27 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/graphicx.sty -Package: graphicx 2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR) - -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/keyval.sty -Package: keyval 2022/05/29 v1.15 key=value parser (DPC) -\KV@toks@=\toks28 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/graphics.sty -Package: graphics 2022/03/10 v1.4e Standard LaTeX Graphics (DPC,SPQR) - -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/trig.sty -Package: trig 2021/08/11 v1.11 sin cos tan (DPC) -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics-cfg/graphics.cfg -File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration -) -Package graphics Info: Driver file: pdftex.def on input line 107. - -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics-def/pdftex.def -File: pdftex.def 2022/09/22 v1.2b Graphics/color driver for pdftex -)) -\Gin@req@height=\dimen150 -\Gin@req@width=\dimen151 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/tcolorbox/tcolorbox.sty -Package: tcolorbox 2023/02/12 version 6.0.1 text color boxes - -(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty -(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.te -x -\pgfutil@everybye=\toks29 -\pgfutil@tempdima=\dimen152 -\pgfutil@tempdimb=\dimen153 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def -\pgfutil@abb=\box53 -) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/pgf.revision.tex) -Package: pgfrcs 2023-01-15 v3.1.10 (3.1.10) -)) -Package: pgf 2023-01-15 v3.1.10 (3.1.10) - -(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty -(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex -Package: pgfsys 2023-01-15 v3.1.10 (3.1.10) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex -\pgfkeys@pathtoks=\toks30 -\pgfkeys@temptoks=\toks31 - -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfkeyslibraryfil -tered.code.tex -\pgfkeys@tmptoks=\toks32 -)) -\pgf@x=\dimen154 -\pgf@y=\dimen155 -\pgf@xa=\dimen156 -\pgf@ya=\dimen157 -\pgf@xb=\dimen158 -\pgf@yb=\dimen159 -\pgf@xc=\dimen160 -\pgf@yc=\dimen161 -\pgf@xd=\dimen162 -\pgf@yd=\dimen163 -\w@pgf@writea=\write3 -\r@pgf@reada=\read2 -\c@pgf@counta=\count271 -\c@pgf@countb=\count272 -\c@pgf@countc=\count273 -\c@pgf@countd=\count274 -\t@pgf@toka=\toks33 -\t@pgf@tokb=\toks34 -\t@pgf@tokc=\toks35 -\pgf@sys@id@count=\count275 - -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg -File: pgf.cfg 2023-01-15 v3.1.10 (3.1.10) -) -Driver file for pgf: pgfsys-pdftex.def - -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.d -ef -File: pgfsys-pdftex.def 2023-01-15 v3.1.10 (3.1.10) - -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-p -df.def -File: pgfsys-common-pdf.def 2023-01-15 v3.1.10 (3.1.10) -))) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath. -code.tex -File: pgfsyssoftpath.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgfsyssoftpath@smallbuffer@items=\count276 -\pgfsyssoftpath@bigbuffer@items=\count277 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol. -code.tex -File: pgfsysprotocol.code.tex 2023-01-15 v3.1.10 (3.1.10) -)) (/usr/local/texlive/2023/texmf-dist/tex/latex/xcolor/xcolor.sty -Package: xcolor 2022/06/12 v2.14 LaTeX color extensions (UK) - -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics-cfg/color.cfg -File: color.cfg 2016/01/02 v1.6 sample color configuration -) -Package xcolor Info: Driver file: pdftex.def on input line 227. - -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/mathcolor.ltx) -Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1353. -Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1357. -Package xcolor Info: Model `RGB' extended on input line 1369. -Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1371. -Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1372. -Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1373. -Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1374. -Package xcolor Info: Model `Gray' substituted by `gray' on input line 1375. -Package xcolor Info: Model `wave' substituted by `hsb' on input line 1376. -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex -Package: pgfcore 2023-01-15 v3.1.10 (3.1.10) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex -\pgfmath@dimen=\dimen164 -\pgfmath@count=\count278 -\pgfmath@box=\box54 -\pgfmath@toks=\toks36 -\pgfmath@stack@operand=\toks37 -\pgfmath@stack@operation=\toks38 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code. -tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic -.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigo -nometric.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.rando -m.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.compa -rison.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base. -code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round -.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc. -code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integ -erarithmetics.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex -\c@pgfmathroundto@lastzeros=\count279 -)) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfint.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.co -de.tex -File: pgfcorepoints.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgf@picminx=\dimen165 -\pgf@picmaxx=\dimen166 -\pgf@picminy=\dimen167 -\pgf@picmaxy=\dimen168 -\pgf@pathminx=\dimen169 -\pgf@pathmaxx=\dimen170 -\pgf@pathminy=\dimen171 -\pgf@pathmaxy=\dimen172 -\pgf@xx=\dimen173 -\pgf@xy=\dimen174 -\pgf@yx=\dimen175 -\pgf@yy=\dimen176 -\pgf@zx=\dimen177 -\pgf@zy=\dimen178 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconst -ruct.code.tex -File: pgfcorepathconstruct.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgf@path@lastx=\dimen179 -\pgf@path@lasty=\dimen180 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage -.code.tex -File: pgfcorepathusage.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgf@shorten@end@additional=\dimen181 -\pgf@shorten@start@additional=\dimen182 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.co -de.tex -File: pgfcorescopes.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgfpic=\box55 -\pgf@hbox=\box56 -\pgf@layerbox@main=\box57 -\pgf@picture@serial@count=\count280 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicst -ate.code.tex -File: pgfcoregraphicstate.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgflinewidth=\dimen183 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransform -ations.code.tex -File: pgfcoretransformations.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgf@pt@x=\dimen184 -\pgf@pt@y=\dimen185 -\pgf@pt@temp=\dimen186 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.cod -e.tex -File: pgfcorequick.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.c -ode.tex -File: pgfcoreobjects.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathproce -ssing.code.tex -File: pgfcorepathprocessing.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.co -de.tex -File: pgfcorearrows.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgfarrowsep=\dimen187 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.cod -e.tex -File: pgfcoreshade.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgf@max=\dimen188 -\pgf@sys@shading@range@num=\count281 -\pgf@shadingcount=\count282 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.cod -e.tex -File: pgfcoreimage.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal. -code.tex -File: pgfcoreexternal.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgfexternal@startupbox=\box58 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.co -de.tex -File: pgfcorelayers.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretranspare -ncy.code.tex -File: pgfcoretransparency.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns. -code.tex -File: pgfcorepatterns.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code. -tex -File: pgfcorerdf.code.tex 2023-01-15 v3.1.10 (3.1.10) -))) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.cod -e.tex -File: pgfmoduleshapes.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgfnodeparttextbox=\box59 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code. -tex -File: pgfmoduleplot.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version --0-65.sty -Package: pgfcomp-version-0-65 2023-01-15 v3.1.10 (3.1.10) -\pgf@nodesepstart=\dimen189 -\pgf@nodesepend=\dimen190 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version --1-18.sty -Package: pgfcomp-version-1-18 2023-01-15 v3.1.10 (3.1.10) -)) (/usr/local/texlive/2023/texmf-dist/tex/latex/tools/verbatim.sty -Package: verbatim 2022-07-02 v1.5u LaTeX2e package for verbatim enhancements -\every@verbatim=\toks39 -\verbatim@line=\toks40 -\verbatim@in@stream=\read3 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/environ/environ.sty -Package: environ 2014/05/04 v0.3 A new way to define environments - -(/usr/local/texlive/2023/texmf-dist/tex/latex/trimspaces/trimspaces.sty -Package: trimspaces 2009/09/17 v1.1 Trim spaces around a token list -)) -(/usr/local/texlive/2023/texmf-dist/tex/latex/etoolbox/etoolbox.sty -Package: etoolbox 2020/10/05 v2.5k e-TeX tools for LaTeX (JAW) -\etb@tempcnta=\count283 -) -\tcb@titlebox=\box60 -\tcb@upperbox=\box61 -\tcb@lowerbox=\box62 -\tcb@phantombox=\box63 -\c@tcbbreakpart=\count284 -\c@tcblayer=\count285 -\c@tcolorbox@number=\count286 -\tcb@temp=\box64 -\tcb@temp=\box65 -\tcb@temp=\box66 -\tcb@temp=\box67 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/arydshln/arydshln.sty -Package: arydshln 2019/02/21 v1.76 -\dashlinedash=\dimen191 -\dashlinegap=\dimen192 -\adl@box=\box68 -\adl@height=\dimen193 -\adl@heightsave=\dimen194 -\adl@depth=\dimen195 -\adl@depthsave=\dimen196 -\adl@finaldepth=\dimen197 -\adl@columns=\count287 -\adl@ncol=\count288 -\adl@currentcolumn=\count289 -\adl@currentcolumnsave=\count290 -\adl@totalheight=\count291 -\adl@totalheightsave=\count292 -\adl@dash=\count293 -\adl@gap=\count294 -\adl@cla=\count295 -\adl@clb=\count296 -\adl@everyvbox=\toks41 -\adl@LTpagetotal=\dimen198 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def -File: l3backend-pdftex.def 2023-01-16 L3 backend support: PDF output (pdfTeX) -\l__color_backend_stack_int=\count297 -\l__pdf_internal_box=\box69 -) -No file div4.aux. -\openout1 = `div4.aux'. - -LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 15. -LaTeX Font Info: ... okay on input line 15. -LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 15. -LaTeX Font Info: ... okay on input line 15. -LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 15. -LaTeX Font Info: ... okay on input line 15. -LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 15. -LaTeX Font Info: ... okay on input line 15. -LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 15. -LaTeX Font Info: ... okay on input line 15. -LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 15. -LaTeX Font Info: ... okay on input line 15. -LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 15. -LaTeX Font Info: ... okay on input line 15. -(/usr/local/texlive/2023/texmf-dist/tex/context/base/mkii/supp-pdf.mkii -[Loading MPS to PDF converter (version 2006.09.02).] -\scratchcounter=\count298 -\scratchdimen=\dimen199 -\scratchbox=\box70 -\nofMPsegments=\count299 -\nofMParguments=\count300 -\everyMPshowfont=\toks42 -\MPscratchCnt=\count301 -\MPscratchDim=\dimen256 -\MPnumerator=\count302 -\makeMPintoPDFobject=\count303 -\everyMPtoPDFconversion=\toks43 -) (/usr/local/texlive/2023/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty -Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf -Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 -85. - -(/usr/local/texlive/2023/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg -File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv -e -)) -LaTeX Font Info: Trying to load font information for U+msa on input line 28. - - -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/umsa.fd -File: umsa.fd 2013/01/14 v3.01 AMS symbols A -) -LaTeX Font Info: Trying to load font information for U+msb on input line 28. - - -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/umsb.fd -File: umsb.fd 2013/01/14 v3.01 AMS symbols B -) -Overfull \hbox (41.45067pt too wide) in paragraph at lines 28--81 - [] - [] - -[1 - -{/usr/local/texlive/2023/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] -Overfull \vbox (60.60448pt too high) has occurred while \output is active [] - - -[2] (./div4.aux) ) -Here is how much of TeX's memory you used: - 13104 strings out of 476025 - 263945 string characters out of 5790017 - 1870388 words of memory out of 5000000 - 33358 multiletter control sequences out of 15000+600000 - 518162 words of font info for 54 fonts, out of 8000000 for 9000 - 1141 hyphenation exceptions out of 8191 - 83i,11n,89p,417b,252s stack positions out of 10000i,1000n,20000p,200000b,200000s - -Output written on div4.pdf (2 pages, 88257 bytes). -PDF statistics: - 54 PDF objects out of 1000 (max. 8388607) - 33 compressed objects within 1 object stream - 0 named destinations out of 1000 (max. 500000) - 13 words of extra memory for PDF output out of 10000 (max. 10000000) - diff --git a/docs/divsqrt_tex/div4.pdf b/docs/divsqrt_tex/div4.pdf deleted file mode 100644 index af9ad880d82c0f4c866188eb114f59fc407e5ae2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88257 zcma&MbC530@-8~I%{8`d+qP|c*4VbKH8$7Swr$(inZ3{NyK&?09p|3nHll__kf}kwXk+J zam1$+wKi}z5jHWhGd6+Z<%M!`b~G`tfpTB-PLi?fqlXE({)n(F!H=eP$UuW@mwu0P z&0Odw-kA}=NX}bbE0B19bTVwH_8S_kxqNv{R2C$;4wuXkJtN*iEzA@%LaI8P&=ik= zl_V))m0`@36u&Q0Cv&>x%)uBLuz_fuQQVD{bk|PQB(K2F-1M82KfA4WAHqdW8?(rW zpZrXZJ~BWlZ(-2*cG}LC*xnp2NO`?89m8Ptd>fE(9F5HE3et%G_#i`=N zP#6;^Y&!6oQY{qGwnGKC$-EPhKYuT2R=^8iLFKA+?XS1SqSdl|Y;Bago%X5%gLDdu zmeZj3uNbiGZei;p*l9=v4}zPRCJg*QQ)7K&YI7*mk{}r0c%ha*D@=w+qc;cf)Y9*T zQUmZ$im+u}I{UtAx_`j{$rpiptVIFTF97L#Y25oWkfue7A%)_>q>yFg3aKS2gU^SE z%+?KC{#>0l`z(UqY@3a|U^+4|FqXt7gxBjf?EI2HL(G3I*CY!(UELnC@FExGyETSw zhBC1={-1~VBmJuY7#RPv5}4>&nf`Ap;c`>U4tp4L==QgFL}wC$IpeVq!1hC2UMn

_s>xU6f(cfNE&*iKZr zL}HG|+xt84 zmrsK4hwIE(JNt*#<4kBi`SH*~=I-I58+%c))}JP81>WL6gN&5Hb7<$0nOattO_<$( z@z>3L3dN|}hj2P)*Nao4d4Ks={9FVXFvzr+Pv~xH9&>p+UJr+&eC>{&BOxVqN#0!} zx7)R*xZz^A9hNE%?&o5d?!vTPpR#f{o$6C0bS1{6u2NIIrn^`yn(U6{zz8S`=WpN9 zelJwXL6cpspH8PNYbz_f@2WNj(6)Ysb&nynJANXG1!5*pR`AeSrK!y9*X0#R;o(9V zoX0ydj-EF$I$0$f|6Vt!crbjbv{G#c&+neJ%_-7;+LUYablPK_M_!&1rPf7FJ?CJT zX5Ga*W;IZ7a7jr-jRj{j(B25rtrmB5xBK&ubAPyMwcTZ9#pg{i)~ukRi%PIq!$l`T z7P|2Er&QA6Ty4*la13kR2uU^>=Lm_FJi9f>X$*ySH`*~ndgQR5os!@LzF}(7iUWTM&qiNhD zK?0Th1eG13+lE>bdtYWfICfhuc!IQ6ruHlfHNbn1xiRYI$99pm3g={_ruauQ?@mx?js zs3;Wf)VOsP%q*FftOT}%Z}e?Cuxx{M>}HH!-&1%GA&n8zk0KEuO)(s*SQ>tgKU6O?IAI5(Yg$w-uyQ}{s#+(12UHy~FPYx>T{uBxTX^g=? z3FZe-D3$6iaM!NG7wVe>N1(@t$}4e4YU-y>cm)$yRVY!X*Ea#VJxGoGncf zXQnhk%KJwoL5h|P7cNvJ1*H6!I4xIM_OBKHAN9Xh{3n-(udevtY6-u8`}m&~|DF5r zF_0md4)X8#|E%~I;lFTy7Evfu@^sIXCXxSm2KqOo1C>53_;319;!YPVz3NalZI&(I zNc{268?4M9H2*YKZu@JAO}SaAnfmIg1@*zlLgl=rDVvSDmMwWn(I9wPl7VXZJ_&XC z0F?FF_^Eq}b8YQZpItQX(UQ^N1LflC>0mp>b-w6Bx?u69Sh9qkg?e^y#X@ps^dLqI zr$Ckn;KB$gPnKM|FiOmyEe-S!NRUwe+YoR5kLF)??(AjbOduKtsV6fXLI zboKwFLg}IyjOu~}Do>{LlOW1ZO2LxZ%K3`NqrmN;XA7!eBc`dGI(%o+(1wj7*=6S! zgbnoV04Dx8vK zpm4^lOOIujE{JMqa`@_g06(mm-_Ispo819=&by4go0tW!IasG)Qt)WAgZvQ&l$Av3 zDU!~o{MkndNT3)$5RU{3@w1iqB~f+?kI}JWkw8z#6#!z8Kv&3>N|_~5@C$_j>3@s` z!hqCcDCH4Ipn2p9e&IQK=EOh7f}f4}GYv%owf}(-BvAby2>!X#d|^N&Nfdw|fb;ap zXZZ02C5hsfCkzNCiNgN_Kw~JBen_A%WC{SjKOuj>2PxPxS6W{r_ZS>MS2(Ya46*b| z0)+B6qknl$NzCk1VM&u?^PL4ckN5Ly_SH&kpBol8ws+l+{P#6`?PM$W?)&>=icDDU zg7usF$nDLHx7!KlG`4%U99}bn`rH{v!`0KmwsY~W!_+O~3eULv6FLMuO6Q>78x7WZXtYq=v4#PXM6(}*JlQz_tM3beT>taly6Mu_QBNj zSqrv{gY4!yM?b|>8DFwfNK7IV-P?OdrjzAr(V(;ARD#-m%J}r;2Iu+7_Wp+Sr^S(} zX=~ExVvPM%f3VPm1WMjd{E<vq1u# z`2p*n*YuCJS^}jfLm04J0>v*wIzNL{0l)$YH0(95zZ?hK`u4*IK!}sp}u^{-Hh%&)AfkDy0)!v_xW7!|6Es# ztublTis<~h>Te%@U$(O|2KXTNJ=9qf@+Hl1XgkTDty(1)z}~1Pvo%mv`s4&!^YoER z%%kG@p!T<0(lY^h*8^?tVgJu#1S9)@93vR;8JO7F|2bYV;qCC1Ariw?&&pv5$VVGJ%?nMCJ;wK0Ze^^4`M_D5;bzB)Mo}Ojr0T7)TQSa2SGqe zL_$gh@&_N3-%L|2f-PGfafD#SOtw9y?;jBaohn5A|@Gp z^=Su=xI!Ra0E7W|?lngb<035t#sI@0z{x{s+~yOsAN`v*`%5t(fR~pSNZ&090O*u@ zcoO`Df0ovd00dOPQwYajj|SLN-)$s!2?T;2zzCiEj4lwd5AqUNR1hEv2+YN=M*#z! z?k^Dtq<%fHXa;8w4?M&NUG0<}0PoK9A%Gx|;5XFs@Vgp5`9}-WN-yB<6=2A_!0wbE zG71>rRoN*-p7*R50LIk|G(<=~0)}rb8wM2cx)DIP6gaSD1Q-Cu{BG`-Je+tbI2MUt zK%dVe`3n`yQHIKH%ov258w5@?;fqQx6bht6&qjOhPVR17FCy=aUpEOE`Nr(28g`8C zuK-f}(h_uGr9*hILc*7pDa-({s{np{2L?!hJxG2pTx}3v68fimzYkWZPemh72&fx= zcL3QmR(t_@GKiyCd;rj=5CHQcbYk)yKG^Rhh@c<Ts20y(Q zS_lLrBxKM5hR{6Up;>UD?}b~ut_*uJ5d2rQ*0kSm?Z(%9I6H3*_!~WZMyCYy6Ttx5 z-=uA*C$uAg_lR$N^Per_-?4|?1s^rS-`5cf9s0G~uGQTD-?6wCaKW#i0{Us^!9&*m zv_K8eH{T%{0$-XsBp?&F-8LEK^rq-2yHmBkIz%Xcz#fCy&xB^-Xnki7={iSiL;?kN z5xha5-p(xmUxNAbzUvK|$9rM#z4GX@K5PQ?Q;u^fRCeJYhV`^aqtfXy!a?2<^+TfK zuYdpr(_EZ`UcO8j@W}zh@)&3Vid*q}ApMD7SQHc__z~{;KNY`7qyPfG5Qz6$_VChi zI^x79x;~G9ile#@x5r`qUj%U=ib)aR=HPXx@L02z$r)d6YGB7=94gcQINgIw6Kwy^ zj^8PEOzn2B_2X8QzO*6B)KNI(R8BK(g;}Yt8H% zsw+=~%#GhxH{iLMW13-}xYXovjYJcRDM(YPI89?aybyu0adGx62pc2 zoJ+-mCfYQ&S=^9k(&j2Y%h!jQ*LbTOY08*)<1!I&VVv@^|B`bWiYu|dR_tuu`_?!T zD)Lc3E##s}Zr5V^&dx2?Cyg8O05HWxt>O-dh!cD!J8E*#8Qh#6H4`^4|`yr z^=vay#nnzq!|g9|+o&j5rw6u~9&1dIn#mM6NGodxmEtG1;9^_EX)xI!cfQ%q!l|Ex zU1Yfu8BsL_UwiS9PIdE^w*8o4WxQk6*uL1I44z*D68*K)+UfHsdbhPau0{h%+nK_G zsvNqo+i%=FnV>+`Z@xO{On#6Zm$z=g)S+--sbaC&X|!0eBE8&_{=KXO;jR-%$#yo zSl%{gG6>u5+SK;$hN4ngqOuvAjh9RL&gD}P`ll>^GQ&)F(I6rGn>MG^HO(xK4VpkW z6KAt`2Vy-T?4ZT%5u^u4b3$cmI`c_(Nhj|dH<6V>ZF>++kfr5-q-lkjAfo6*rCK)o zYacfY7YrL8>S z?c+KRh}_PLKY_b!dQbb*RG;l4XSMD^(o1;_u07EUGk@EKM!J_O@*f&Xlz6qKEuF=g zN$d{j9mw`tP3uE1*1HHbgSK-;Qpe3_0SWDkZC=0`sRtb+R+p}7Dy*e1nO!zy${Lytt^fc@0 zYDbz$SNgdU{HZw_kou?3d1h`1WnGwEpr+8YfD)b;Z)dIEwsY&0W+vpRYPgWLZ(GVy z$)+8CoXQvX0E40jewOe4(-Ir*fH(|e{6*@V)kA?9q5e(Jqi3&QK3MV(va&*Cu4Tnn=&9dH)kCD@yy_ejCGj*$7cPw zURYP2&LHHiFsIA$N6M!jpZ2j|_AIjilTlf5UjcwH@5qxg&90hg3acFg7HCwJRsX9k|7 z`69L(+BlTKTf2`}b?3Vko+uPQDSM_eV_TXPEjKxn-LIroZ2DbCU9Jx=&go=3H#v5i zwlBt9*P(6Q12FU8n|%VlsyYi1ekG2t@TwtQ!A6-P6Q&@f;)Tu*=`6HiX9BE3Hw3`S z<{XjD^3+7D_+Vr7Fbrb&d%kwyJ8X>?P2o)3VV}}qGcdm!w4(xyfvPDY@|kzHann;_ zLnUL4Jzf~rS#R6FvP$A>yolx&FV?438=Lf#>SLjU=_74IgnEprjOctzsBH7GqC6&h z@fks6L$o~l`v*eh90RU)E4TgZ)r^EpVoBjg;TJiNtLk9swmU1)X5lfKWU9}Ruo99B zpMnzS!nmy?Xb*d87~7z=n*rIHJb;y(o@2z)kc_gm&rhh&#wMY%aiM;v%#zV3aX2Am{@ z3sdYt?j}loES;0#-@Z= zCL!OX({O~O>R6I;11&aVuYKNS-IUL)_KVW6vsTM2)cRrRuu>aqV#xSA%QU2MJCnUz zlorMBMDGgIV2k70$ut5Q4>$hBc_+%lU3f@^%<%XwlerYcVrCmR^ zPS9xzNow^9o6DE@`Pwq~oK8`>3-D=+235=wEMC4*5oDcZg(25pByj=jR=Z-^r_9do zL-QrhMBRV4noi?7R4dKQHUEgb9Y(VUdEROPbtD*>S(FCc`KXnv!Fv)OP~1;El4H$Q zyUkKD=2)AWlTe*%5B4QuFQL=vZRuBY8`~FLKHlC#FXWBEu6PEFDEmXWPc=cf?x4RQc%qEW z&S87f5%+L$XhC30uox3E%e}lLs>Ej&sB5fHNoO?+UQ-%MDX_SbdHJL;jym1j%$r$r z3Pw1+N=osZiSn-TLByLMiFWzk?%}`&NX{+oYA6F6X%%uRtCJ3$halabsWA=%|?%?3bH9; zj-L1mOJ8Yx<;_x76%mvDoUQQ~wZoMEN^x&#kH#{BDy3tC_tWTQ zP^I;7lew%b!Z^epG3cd<29GKIjBmB&+~k<}`s-|j2``|?Y2n-byM)E-LX5gl_^L7W zE|DZKq}N`J3ZpPi7yT4{2v9&cp52IRV6t|K3HoCBJ=#i8)mhc6s?g9DB|d?6Ffn}- z9e1|eRivKupsa86IGNYE0rB)L9M%iN8wzfiNw}NWxb9JsfVSGx!(b^pY`GhTuF$uB zTBU2zikP}{jx}S!qQZ=i8p%pR`v=OhMkBtO@xG&MHnP-=5M4)hAak;X)M%@PN)+kp8H?N*XKZwj!iCW4#!(HQ#ofd~aB=3UG1?@%WA zMOlp-CxpxQ>|J9KjSB2D&LSW0q4~XSV`a0alp0MQyi8Ckwd3rz?UHxechGvmoe>Ao zM!1CcS4~g3WV@r3JnjX8Bgudk4eIEyi6O zW=a~ccv}(X76$=p>&{1x}KYq?@Nd}ytP>o&8}#8@SxW7a&o?lw&fXPucXm88%& z#~^Wf^;;`w}lpe}3x;L~KguI51`_;-GGO|FWF5O^nN3 z9l$-|{Rkm)6tpG6@1qA~DacsKv^BAGH{SkMcO%Th+nbLe2cC?@vQEABZva8wa8vF;X$RSk_z>N2>zIeH&P%!O*bg{sgT@N#O; zdWzp+T0Ga`QL1fvdb-}0E`#^i?6}RB7pM~+>OD&HoEJ)c8rnR4B+E>F;xyVH0JPmJ z{1JkICFJcHq#DE4FAE9r4s#p9_O)Cwl?>P2MmxWh4Y*!^!{Q5;q~n9XBKymt$ST&h zDaBTtDu_ke%=Tl9Hw^QwCWRy6i8aG#_XAtcBA8UYG1)WemiOFeYd<`~#@ z3nAETrNrO`6+tj!aM~(gZlO>bQ0LdL^utdQo)p2RRH`Qg?jpH;Iz$wd*2K-B|Kz^k zvO^bNxS+^JrrKfx3Ny-6N-gK0gvLlQ*PSET|v$gs)!ou74_PI1?|4L#p(|nz%e}rzi)?1G*cX|47J+i6Mmg6nP zmR%aVr~=r2J0HG{3veN^VV=%*SU3GlQ$1?ZyHg-*Br3havOs9CGE1COcSMp&nXCS` zKOr8=Z@-n%JZd%KfnI%tPlg`XiBNK5^}r-S`S^f|YVLd+c~%UW_^helU@H;!BJ<@A zv1}OX67Ud#C*u%RlNlwnNZ!sE_YGwUE_uofN#l5%oZMI>lqtnpwa?rHvx&_@z+z!; z!Z!-*u;h`PvOISWIB_&7Q z&UdYCFC$xj;_eQBpD6;zUKb+OnN{?p5tLXfEtR-b0+b0AVYc=%eUQDsR&!3`$-5@m zP8*>@AuzOwX!l_W&^-@Wk!)B^zd2LtBi?SuZ@Dh>aOhU9LDW$qpfpFwC}-CEW@+3! z2S9|3oz;8d9yAPJf0iq2?S_g{czeGDf5B7MTw8@1n=wi1E`2@7blxQ(CwGH+$+f<> zs=0jNN0^gjb6fG89-I53W^+>xPP%)@xk^e z>*1tQstl$2owig*M*zPXmE)|vmC5Ku#8ddCt^2F;v3DWO`E+dB)aYn(n)5jIsyA}_ zf|4f4h&3go5U9`&2E3BelA{O{Bj*6wqYtqI3?FlLQye9o2;c3Ql@!WfMNQp&!sAm_si6(N+ycm~kwQ97Cz-)1KW-&)8*Ktz` z2yJc_ckj|kkN~YBdq?E=XD@tv)X`0n^q^Ao0n&vQRYIgvs7911Vr01^jWT?5{RrPv zD1T)YlO0NM&M#r^74FeC4pi-m3=7O#GG5i1qhz?k-F1*}!+Ywp+MBjY+qzB`ZVqtQ zgD|C$wA&RJldt#*?NnIpSUNd5sV~C0E9)H&BHubv^7L_@*M#;A4!I+78WHDkAL@Kt*E}*1iqMGlElgwy z-&GmT8WNS1V%a)X1&?#kjQ(D43FaI-djpDdJkP~vNxoDut05#wN$+Anj_WflGo@8I8u(8#9s`g%NBO>8qbYsR( zC4#fKzliq5#UxsVj{sW{?)$LmK zAGkhYjh=l}e45ZdCv+G&(Zo1I`sdS-MevRt={ssRqxh6Hm|w6c4o=-~NoMCg0kf49 z!43+PTV#nTU=MNdm%@>Dk58L{E>M9;DIyevBEFnb@QGJ$;f2RW%Af zwvS4O>d6y}L(RNwZDHhZ$ri9>@#G?eS|eh7(8lQl_bK3@eTb;C{FjN=DlYA2!E_|B zW?o)z|6q{t^oDeA-}3qJ6-g1hp_3NA16~^ zi>-QwCvR?y$Lz{L!TkA=zok3WItaL)*vzI#kiuF-Rk>UVX8U@Fb>{xkHz)H?9~nnz zk>Wg2nG+@7u_;|?n_%P{=RH9D+&Oq*NyK$S_PEUXcB)>c&vxC$gzCKNDw#RSy8eN* zj1Hm}D^7-YPt-Mfy}{rMA5MDQ_J8*JnCSmouaAYD^`Dj=BR)F^3*$et|97vCf&ORw zyV>{u|BY#M3#h#ICK8QwEq*VgY#In8FU+rv&Fme<9{oU=tDk|ivB~2fw*z@4AZXtr z#@qS)<-7QsMTN=CrRHk0^Z882tW=Mxj1e+ZFuE5>UJC;`EIk+;pOTIa))26^ww9rx zwzfb)sX{=1X{Y9ubPdQjs}c~O6(B4Td|@vH|Jfypr>4d@^pkWpT%mI$kfd|_%5(9jm}x90J+7(f*yF2KVTF8V&+ zE`R}cE%3m=2pYZ}NCUt+ca^!JF|2%W27eEI%eSP!xEWyJ>MejjEiLVYC~M4wJh&4e zr>Gw^h$)~vAXflxR&TN2HVrUJly#49(@>NstbBtX``77@gI?_@oE|^2K$Zaz>+=_s zJ!2~A&$FAFFB};h zd{=rgQ?ane>tFue^V~KKf2+#K7ly#Bp`C=^b#gHV0IlyDuWfs};g-kH&J53Q*%$*? zGBQ4G`xi#xN^PO*+<>GaKLpdf4FNwo{W3CfU*O43 zT3*Y*>EO9aaeFSxU~AC_U_KrKk9N%uV8D8CvU+rXeV@MA1%UwpN)wRM`!THG7)CzX zJ&`f3T*!Smf59QB`N54Re((dNZ0GvsJmjF5LNztHzNdZ-BLb_4BpVlrV0>A=;+2F! zETHc64h%u*8y@Nd`l+w90&2^_>wag8jY8b1;eI1h*;s*re#kzxZ&aaW9t| zzdt|H`^7%8jq$;({H+uEw+eFM;rXG?(H*U(U!9%Joxd69B(~ z2IUC_$o*^;S|7}X|J{2gOB*2X#BM$}3>yID9o(UTC;U?HVPN3{orj_6OW-=kOZ2X51$L**T1fcB` z@Y_mHItvFUhxH0xfX`-a`z4kN3dR*QGtWCWIO7IPa|zT{dl4eBjov2uo&dL4*P@Ow z8vU%W2W*fGc4<$gf$`X6oVW|#kNAP69aZ?EratvpmWTD60&8Q1E{&Ynb%G+w$PAAz zM~2K@JE1du(9(Z=UK-6~P-%}IqD1(Y|7IYixg~F@Wc1-{bM?1Y05q&m8Az(Me5jzB zoQy>=4&W+RbnZE2t?E8v6HN?LK?}z@D+3^Qe47CU)Ty2EYg_f~o=$n4S}0#M^&U*z zv*^nx`@0>k0%*VefQQ(~z)G%~74?zP)?pI+b;-UbhSVP9WhPuo%?yd&B1M+Ebb5dG5D5`k6IoaM;)(OvFu+xX3FnMlT-mPr;#F??PV|YN-&D z9o{ZMHYm15@0OnhW}XIHlLQbib-lzt&8daWLDS2=hBX%%IolO5%>$LwErWiCTFy{p zT*yN}d1K#|b2#`YLPJ~V-%72u3<#cI6UtwbC zLc9X&q*q*7P55E+OX#lyG9m=j&~&67pljwZzFvp%ew#08BXGNm4NF-NZDpEsr-A6W ze?EN3C$4!vMmG42n8-*tCJ%;-W=;@)PG9*Y)96!SYBB_(&XC(b`0ObDoK<+&gm_Ve=5j9D#hd__2wbOx>1OcsA=)ICL&a*}{OJRhH-b+kcY|lUN9*Wo}2$ ziolncgn?9u*09%mhlkgVnJmOI$H?(H;@OBW2;#vSvLOg;t@I1^>2%;?bpzruN>A)d z^Yp)!t*Q^djlyM6xMphn3Yj^iycxBYE&mb?6_k_tC|G9HF(KZ-9E^G3IOhU~-ye!*;{6kD4fDB2O&9o{ znmXM?SmChAPzeweJf=iN8we!&Bs7$zl}CP>x#XZ>oq;cKvz$K8{x!qXuteHLB(>Up zLP1&a^Xr z#EYvTPehlNGyX|F5DgnoJzeRsOfM?ku0xv%k=eW_6y>R)F<%tY=Y&erQuq{D0Bfrs zWR%s}O*U)cH-GEz5Af5$$6@tjYm*_oj`E{FqnogEa%DZrd-%04>NoQ>Kl?$ zJtkvZp_GQ}>hxyua{U4_*pvBFIeOI$h_#m9vpLMgasuK@z=NqfK0J%vBDj5><1*c45!$-Lk}z_OUdu4Y1{cKT zDP8!lB@D0LO}(SEm=|#xdg@~-yzIXbqoNJYJHUnA-gA@?ptwjar zcH6RMAdh36j*OZ|zrz^?3pyq?z$?NzHVZ{P;`%6fOB7)3+sw> zo>Niti#{x=IE%1VQ-c*tdXiA;a&q1c`dP-w^4=vn=U^_MYsMOnRD(@u0qI_l&WvjU)&BL9@0xpb)9todq8iZbl^Xl&7z@t|k+CVk_@EK)}^-;_!N?MNH zPY{=Egh1G+@3N^#EhsaX zCdsCsL=6|kFV}344X`8#x;+C6&UM|lLt(SBJW1I+=^#hkgu*%M!?%xxdtaf+!rI-n;wh7pewPOT z#YM7@Fk?GznxYoUJmED=R%PZ+YWq=(CVQv9Ae@HHes>a4>VJl;8eskb+g&XCI|WV} z6!CtPdz{7v_{ZledsK@7PDNb(cSWMI2%*V|<4w=a3LZBNA;_`c>LCY~p2Xb6s6!kw zS!7OOKAz@>MuM5A7LW}M;O{9($jhsE@l77&7!|SKR!{QvDzj^=HtiP`l$l{9`6hva zyDjTZJlE^Rp7shDWy(FJtn-GP5XlNW3a(p)Vk%+=CnK7XkbTb^tbJG8)4s-p8LkvJ zU8~afq=GqNbeHv7r+>vgRt2dkHKI;4^KMv5NImrj6VdVCKhVisV{gU|A8PY=O;btW z5pZ)5uDrdYuJ;2y8CX7H$;z%;=1Jo(n}S~1yX1arNyaO?LZl>j@d&lke%9iHiJvkS zmCF}fbGExB*FQ|7^Wj@WX8I*=S^$hxhPyo|%3h5DDs6uMv~-LWqw8l43G zHO(uxsDbfgC-i>8CizE0v($C@c{iEW(KX?y5Srt)mw`x(&7A=!>r`FnhF%!GK zp{uGgMbPa#r%F@@AAYxpyV_9JYuBE4nFCJj>ZL0$=#h1AKFP>T5fV*HQhHr&w~5)w zXYEd5VsD7;KY!ZAX5dgaL}`|VtPeUv;q_`Iv9lL|yM$m7j(W+u*G8O}<0hiCq!q6s zdSN1fkoRa+5wb{+ts!`#-*TdsQxT`?7o`-G0117EA8zS zvIME=#8J`(?mV zlpUz8Yz66UiAjMYMWt)0QE;@|g(e5(zkMbIGp0%kNmNCo+JzHeA{**bE*^#?PnDbS z_kzJ@w6>m94Q=U>F_llO-M>H@(z{VdSvR$BJhO5un(E(;z@HBu29wAS@MMi@2;DR; zYv9tV+nyw~!tUY0lY-Dr2hTYG7WRI3(69MOyl?+9uBAm(Q!qpc#xLf%fIZ7wD$1K2 z$YkGaZz`{N(WoLE;O&fO_JJaz`My}j#W`8c|HGVJG0P#|e%{4hXSTn)fw@@&P&kdr zCCk>;(9MJy0nUr1U{L0MlBzV3%tTlMgX+TGbFvSoD(4y8G1I9&T>{o zN7*mD$Ccq-pqltg_mRBdgQ8d0)j{>@f>FW-2wBac6KyG``DHjs14Nsh>4!@$ccn4E zA(P&3HzL6p1QLq^-rs|L-2CNU(w2L`{(^ z$kQ!-=|a&}pjG$X7EBWlA|#_a;ZL{YRz+orEgX?H{Gw`I%QNzw=I1>fr^r+GVoRmI zViiR$hweQogBKaUy@+4mqK#X|Q*1^OtAt20plIw9s6{VMe>0qdq4*m`8z)`%Aw5%l z@A>MOHDeGg>2?TFG5Jd^0RJV&nEZwij8!1uDk8_(bBbP+e|piG{BdwcGW|LV;^3n6WF0H-snVy{GK6SQ zdHj}CgR+gaXF+m4#%g>^#w5Y+Wif+_^BYsC*ok~E`vBdm2J3Q3?~2r7-fU4X?F9d3 zm=&vmsu9)kbQC+|2oW!bhdt^Z*s8A0f*;9Jch7Se*V==MqigaT|)V zJzt|5%zKhnTk7FdMDEeJoFTqn6o%VMUT9$S_3(-(AP_kBRh-gI2x)>vN10;urpt_3 zjJV#Fq~mvNH)wE<>4aQ#Mb`Q{8F31ui=#{FI%ipI=AH?%$fmwoWblNIlYo?$I_BY9jVD=Wng)A*qr0pGa zsZXnJjg$1>b*4SDE960D7#awyLnRhr{4v?+8s1w9vk?p|73Dtsq#x zWG-*~V;b3eLOe7K3bV@ijnyGKF79Dq^0k^VH}%S)xHmjNLF^_G-6GZG7eG@_SxZ!+ z%E)Yw^W!JG%D8}bvoNrM`?s9SN+WK~5Ai~pwAp!qx1*~67iIU@oC_0h3p%!KCp*TD zZQHhOn>)5`+qP}nwsGe?^I@iDYTgg${E4pW?zOJvsa2A)7!*+vATss$L^tuAt_r#? zY|guBLgRR@AQ{6A)v9Y5^pEyjx{8w}c;xw*y~3aW%479TAzCiic&(mN%+4GyIMg)g zI}cQBB*glW4V!mg zjLc@e$UWw3#%z5c_EGmhYa>ixgMVu%ZDP3N@z=*z5`>+t8^mpqE-VW#F}7w*>%_=MRWz{Mq@8z1oLb;E~nq|bn3~=ai*Wd11cq7i7aCaG$nwh zr&$o`vLZJ;k;rRFMulW%aUWX%A-)_e1y{1wgZGJ(9fX;*YRPQ&1l>W8`={>}a@PR~~*=uk-o`SBfZfcF)NvwzW5lu|*4#2`r^9gmnuN>c=Sp_u_Ws*1?+ zo8P%{D_1j%bjnWGDJ`@^?85jgQN>K)i0`9YWkx;tFC6X2eE+OAY<6Pk$lMFNz#V+P z8HRDDyLw_nxxlB$%esOIqNv)+aC)lW_m4cBuS81K)@ zO0Z3iL~Gz_tO9ymG#rREnFST@f1c|*E^WaENl*H}X3x7>Z6R6rdb|W2PO^$h=1~-3{nA+V`CjTBPkC zisX>Oi>x!R!Hl}N$P1p2(>$Nk=H>AxQb9s+k09hB1xA{vgx)igu=3!XeGmaj1mO{j zzVsqe%79oW+y+e)CMdjHfwC#U6pWaI}+rW++ki#W`d4a8>U_0IJ_p)vFf z2v0^VEg~C3u;wW%IBr`JPzm%s+0j3o7e1zq!#Utrq>+X{_aJ3G8hmLZQi-ZiJm8Z) zGrI=i3|~Pjax*bw zpijFjhH-{n@33rn4-lsL&i66mCh(HMxyR7Q)YTPHk0o1Z__}~=YJ3-nLPHUADEArm zM|<4EWqml8YJi}qgFd)u*vA$4B}g8wXcB5`D#KyMTZ20F+DAV9s$71IZBOvMyI{7Q^EVRKsr(~+%xPJ^w{KmSJ6Z zAuUJ{7f|WfgaAISk;l>@*T5u3YBX|9IK{~9rkocm$FUF{;4Fb_1`t3aH=B+G2le-2 z5>N&=Em`=qqv7@|eJ|V`>vHTelF{LO^oF@35EQ^69E;{(2@M|IyDJhQMa?Gci@bl| zH7PRxte17z9$-#Y)Nmt(Lfp?6`7T#);}eW4U0vg&@cy#hHEGyKx3sJ;^k#)xNT)m= zs>w_lSdv#Ps`S2Ct;e-vMq%ovHozYIY7sFNwC_qD|L>X?c$61!eeMZX~v8~{^FHbpDKktP-c-^R9N8dsT z<{1oPFsz*1K4R=X*ha)hzLYFebjyDLo)XR)Sb$p^DNc`aaf zer_^?XOG(~*?#B;#jT@?vT%)P7c(*FvE!762=Mq%Kn-q1fgxmTA*~az$9@>VuaGnY z=b$>Cz}WPURv)k>dFyJ-joeyEL?532pfbg%;1@@U?EP5BFfUO%_~T{A3v zd#2Wu-XW{iR8wCfK_P~CudAy04b8cEA zLtHAr?+AY678o!EV|wSfz~RFu3e9whJs!5KNT!~$)c)}{y(R-?u{wkvgVzR6gp|s- z7>N_wgPJHmk0Yl>2W|<0U3-oybG6@aIQA*55!})puK^?&f2>gu5H9gmR{K-(Pg7WT zP7A*1Y>BwaG@)*Js$g2WopH0-!j|R7u+vA}sWarw%=8!1uqwhUjphy}j!Q`15YH34 zSA&Zfui{lr`LmZNun)+Ms^`y7qzUgiSmSCS-1EJSsSbP*53?=z8gr~TbCe6cAh7Nk z?g2@^h4_n6ZBmn%WilxnfRwM8cJ5)lG^37L!$$u(CfCiHhW@>6iSu&f**Y4YsRHloIGiDq@$zy26{N|e;^ z7Ag5#B*&g;j+EfyAbn;*X0hzQ-THgiF*Y!wCK6#J6W*Z)fjw^5c!b7&d4`fwZZ{Ae zptW~iW~xr$(_zJfYq25XYn3D(;)u;^!?BYF0rS!tQA6qSqj74f>WJ(OKPG@m#10BC-t!tcsWgBhUctm;Y}Czmg) ziA0wV;=8=9AUoxtWhr@DJ5SO`WClqrX+G>89XNKwVe_p_Xn{TzO?zf`$A+*Gi0p|=2m*b+NpPLe_Ryus85*Yz&<^Z%o}<8@Q^EgK#EU#WyXSt=?t6yANy zTp3}#HHO_`B@Ac1^WPJoMs4-H?vyfteG!Fq+@}_dsrjr0VAm$5QVCTf;S$tDvTCN9 z&H)(ZfKd(E4N*Ib+yI6QVn7NZOjXDt$^q%Q(L{%AGS%pkF5SywL1|E(n#!SL5l?yk zN$HSaV~_%$S1EDrB8)s$+s-9bJGR~GhW9i1i>_~U%&?;5zm-`=q8cufc|>3Sjecgu zUmz6R7=`&H>|_X4u4h(l_!{!d3gjB5nF$Ff&FM9Zqr z4UQD^QD>ng7oO|f^cmwTOBeUtRhujQp*UH|T=&RgW@olhn0aP^C;B>eHP4@zB+)i>p3<}vnqJUU4Qy{)JAS84ej(d)dxl^} z8=`gY5B9{0{busBZ0c^gqP#{{M2{f8+)W6YKvSy!(&bVEy|)#_-r# zINAQU$qiLVmTliAj6w=86kRpVo@*o5g$RNk5pCMkmMGoo|7xLy;0xNxNFih*uq0B? zI4EF>BthrHJ7jlnJ#Rm^yl1;jXV(Dp(~OUq?^90ztVx$SW%+qPV{k=5JeFWRk_1kE zbx{#9G*F;Or~nc2U!r-aSiydPQxdSOL9PV{4Asvb&}1$nCB&I>ppgRyJ{n5?MJP~! zD6oN}Wqk+>6c`e4U@-t(#8V1XC4bieG9VU705vqEU?O0W(p_J^J&75@eY%eTnCG<{ zs6IJ4r2oz(pb&Q&)ecb<#3digJRSE|#G4YtAiVM45M%EzCf?B@ zoY3n~jM|SJ8vy*g+#JfN5e)GBR9LNZUO!?%nJBQ9{`5U`gc3~Uwo2}Jo{xNcN< z%X@H#$%2>#@4;H+K;P7%tvb?0L9C-=ARdclqYj|5pUddI-SP$VyHQPpauWRfJLM2U zijU_Hf3SZ-ZxbEj?J>Zj0tnjIG4cP(HoyV`Bcmdwrh*CZ1TxU@Hb2lmiSgMn>{oj0tbK~+j$`jAf1CqCjhmv z&O>;=>+L7rgAD;+M0jugK=XBTeRYx|lAp7@yTO&J5eOj-8C}1A{ieSw9 zIipTWJX=Gc+&)b^=%9dWNB#X@_BH>qZ+o;~)stVN4}Z4e(@=qLgs1P=-#Er)_}Kd& z*Z|`iOo%cdd^9=8@!yclK|r}0z~k&e~*rXCeghAumebw`$&(#JckhgT5y4*#n7+rAq{@$ z;v&ztoa9Ckp)ceQ2r{GqFK$ICO6A9)klum zFOHtOzD0+w1@&u%`_|3QCEKp!im4$QRK%aS^o=q~{eARIGs*_3H1F5_9pi|yOQIBa zhf5|fB?yPLz6{UvA=e@ySs~^|)wY_VS`zgyjHcv?HB-=O=`Ow^)p10x+i%mh;`=%1 z)P{`Cjcct&+dn21d@U+b_FrG86Ww-%`m4gTPcHO9rEf6_?%J35URI4lGf7FW9m(3w8=~paosYG)hEhai( zezkVmlk;=0P=_H|tJ#a~il~lnPdV#7-nZyzwgEE61c`C%;|I{%KIKx0E8i0w|MvV zv;pUxq)q@9pBTpjciY-hU^l-;TZge}g7o_T!V zF#Dzm!!obN_NJ_d#FW}uR6K=QF8lGHD`Pp!xKkmG^UG=GZ^h0ybJu8(_d6W-?Qs`; zcXQkb?4xV-Luv>_Hr?J1UYl@YvKQNTg?!m6gqm{FRPzfL*4A12lmWox#Qcw9dHk8x zV0wvX=ZXz$elJW96_A#EpC9Xq!)CQ|Ev^w27g7UR{=$ti;9c0vcrnGQa zgs*-?DbPi|myR6u^H)`Fdqvi%jcqijga;^+t&Z(lv2Tp-F`N-=rq_ztnfnNZ-LVxU z!o|Id7gH7(1zihTT_6#$^}jzDUG`cAx=YoV4h!Rk~zAVSaf1%>U=~T%XQ$0n6*j)2N@XFaXn~_BC9mC8$ zac&n!1mAXz`v;emncuQ4rD&k2$t||{D-OFjD|q~vmPQ3p9bvTUdKU#%3B`U!jsAm? zmWA(rhoKuNmdEJHy&4YY+6E>&EJ5oOfdd9s924(g9 zMXHjIXh8r=RH_{dPS!6vIbZvg2FIke>8PI5kN=o4-FJPEjE_L2KS!9O%lW)vyYhq# zuGf-#wC-&p-4NRP%X)dGxenzu=@dgR`Kp=_?-RO%GHi0VS3vz1SiTX$IK z92KwBHfp)eWR~Q*+7R$H@OLr^dRDBnXm_;hG%QLUWhA9Z#OijfOd>rr0vw7(eH*j_ z^@XP-s^|jGv~4T86_K}^LzuMD;rwu5k6)Wpt;6jgAyLSO03|-quV?iWm8^OluCgF- zhLiiY(h9R#ckjc>meAI;K(W_c!RhnfugMJ@h~VcL$C#gOWiw`kyOBI6bB(*5h%tFi z877VE`@b2ZPS+>953W)EtSLh+5-tJ0qRD-zd1C3=Q=h@ZZA6nV#T7SBgXrGwGD6D~ ze%2Ijj~%S#^CYwz4p{B+OzPxm7eXPS=^2?-#~3xJO(XxYT_@1IfwG)^$nw#2ez)5? z^DH&XE~NrKNyME7vLg0RIRml;t?*toxIV5=E!Bwhje5m~yU*JG#JL6QJ7#Hypbtzh zNyrC=%eb@SoAeh*Es2@`@f^Sv&TSKVs)EhMhop%bZWNZM?r+;p5i?_X-S{HAK;mfN_tBV^USKJo*xPE33Bhd@Gz#$#wP?!uISx>WkMckpTp_6fD}(i zKj9?l!|B;y{454ShT{SJo;w*2#CE-Cws>1x4Mj+>j_Xz z!n}!3Qnc*!tr}*y*O9l4sJA;Jw7^~VOkEIgix9j`|+{%F!sf`fv zT)AuLI*MXyn2e zeF)v5NSOI-yXUQ@@AGh)V_m1MQcHeHfB2JFS&rMUl+Wn^sW$s`jz3jmKpdH5&su|W z)`g!fy6Yfg3hSvr0!MCXGX|4$&|O*&azdX3tFTL!K9AjOT@p3y?9S>sRdW6zzx&~_ zK61itZs5+1EbUFL7F&$Yj>BG3QGWCP31Mj3E27cgmp1ym4w{M~+v=fYTH)l54k&q$ zkxuT(tZOb;-S%{_k()H5?wK6T{@EpcdJFB2`W950TH!ebT!keCXwsv2XI2ZZM;nK5 zNa5nvMW?lze)6@6`=*42k$=7TTpXjkYtsgZLom0|lCceZUE%9JrzsKtFC<>&Ut~Ae|zA z5|5Y09~_yJCdXAi9iw6a#jv8*&!!ALQS-skOWVSs+t0}YKX?3lk6kBKJE@r}8MJsF zk3SbMRGuV3_2oYpTS*2Ql*ROd7g8F7n@$jr>;IG`x)njQgk>2m+__B@yaY~m zrY(k1J62_HrGK=y^oy<~OW&hybb>|s4B4(u4P5&J4AQ!g$*+5<>NVp9U`&>qv%e)Q z41R|_?jJ0b?3!%~$wf0#*S+SrV|sAaWoVUSqM(C=DyI+6>D|dUxDZ8AyQH~dts;*~ zl6wMl1v`oDKQld^*EW9E@q6%t`a*E$YRJG;#;k8^ zFH^_(meqhOKpnB%k|_CCOti+A3C}wwx4ZR(6lU8seD_Cvt$4RhHqlhcy`RQR3*qYB zMY>}3Xwsrg_NHYJ-rITO&Rxv1DGHloQABXzOGC0njtld5M8nF_9Y9KQm+?;W0V6K3MOnh5Ial~R zztfJ`YylDuNdVyXW0Y2 zQiqPDC~8$HPJ+lb1f9rHP))5lnWQ}=-jk=Sbs6!7e@MCZ}Ch9beyMA`q?s0622!?ZZPc;x*-s`Cuo4pJC zUzhTG^UXYJFRU0mZ6x4Ml>3bhD6K;b^M2SYDnxtAEo3e1d}L39w-?%)XSgPWoA1=T zQQvw)(NjoT3--p0td>G0e>`(@#q5(sbTayhOwe20-j9{Pn&>x})Iu|swtAD zA7^A5eD2VF&oxiGwXR5OkH;@4OCrf?U(nwN1Exf*-?9&O?dlktRkeZ(G-4e`F=jo}4}fW~>Bb`DxBVX!b`>#~de zImUYZ+Qt4OP*=-aEGu*?_B-XOBR zc_v*Mh}CN-`U2BHUvJ*H6&xe|cvGOmxs`x;fYbP;;zPme!~>crI)?W>_FdJBg8L}( zft(*{1l6h1b84I#ZLvF3l7|Fh&6n1@-KG6!)X~6*hs-+80Yfzh(J#2hP+6{0xda5Y zITM$6)Mu>=UAnUKwbXSsll>>fdwr#$_~B>!4!t|OECZgG)&&=1H`Ge1u9<3?nY>4| za+5P3iMf$s$bRIMg-(8O}sDldOalQ^Y7LnD0L2?UGZTAubom0(7 zJ^9qYcfGBl1Hz0fsdCDU!)00lk5N#f7^LUObO-6OecwJ_ciex|VWvZEG$d7dIt6ui zyaErOf}lmWU~|3^<4&r38PG}-LCtqU6bkP5=+$Vfo7*;{nFMM{w=Vw1wR9EBv=y+z zzA;U`pY$s=o*a?r=zACpSG~e`m6nzFj~7G)^?#fViRaJ}U5BP9txWxRm_j1%i9q=L zd!$s`>zHmwE(esEFpsUG{kTiNUZQh1KkyM8FTF=2)z@dt*q!y@a!00NX*Ba(9+Ak% zi)j>yI5`hTDKFe^-TZVk7$iXxeC%u-ud^S~(zP7>jdi8AakI_+F&bKq9zN6gVSVZS z;Wd>6pSUOs?nKB_xTLuY+~SrQR6Q{il5qW7vp)V@8q4jMZEj4Rnb#!}YQJD*|1b?!!w{dWP>Sk?; zaYTjH;EfZUvjp+NyMN22kqjPz?UsH@wwKO{x+evHnzwpK>j^FK1-5kv4d{kVL3btZ zH%(x@e2H^s7j2|&#sdnYaqr~MW+@(w#_^;dLc1tODqau}eV3HPjE7?Q5T#7P$#OL> zWRZJYWSuKE(rtm1AI3z?vv%Rm+$fi306bq|e+uyayG`qSs9fx1!}PSQC^=RUP7wH) zwQAsVFjt0){U$KQKx%?mpA5jiT>q1LuC7TtenON*>wxXUCP>cnj#e(ycYo01y@fmT zb*KsyyVl;JAK@60@Sz!E)#xWxLHoOwWr^o9{6$`g|=rm?tG68ne#q-0oqd;iY2u)s zD+i@;PN11Ow=hvBy&{_C*$LF;Y+tvY1Q_ZSBb-n3yAnB|-bF1oP}RLyx-}JUFmKY8 zMFq^0)&yXf)d7{uwm$XS{);gB?;!{Ga+>B%8eeN zJqG`?_nM)d`YQFoeA#0cWb0Mi)MedyA{8^;<&ovpC%l- zgfr(;ddO|~&x)Z+=i~9^Qd4Uw)|_}-wCD&o&h_=5{s2`zex~1Eh7j8NrOZhnsAM%! zQJiR>Vs!?gEZ9nmXLov^7>e~SoxrqBYk0XvVKX+JDD|=%Y?2KSQ$-P}6nDW+J`}xm zi@Tj{2_nLn^NZd6dhN8152Dc}c@=p-UD65rydJ7EsYGn> zIpt&-7UxFKX0FoZg*C;OjyMuE1>f@g+6$s7a_hH@pW^$}nc`-j8b!>x;#lo3vI>q! z^=yq~tsS<9Khf3O)}2jHIA!myU8J=g@o!r$hZJ%zqS<{gi!6~$Y&Pvvo&hemKf6dW z704Xb;H8MamL-)siJ>_m_A(1Ya6>bWO zgZ0f?#2xy}!n7ePyv7IN6#r>D$uT}vWABkkrFe?=vimgI=HBo{w$}9*b21~{Radp2 zk6xQ>qp!{Cs%Bq{IbG1e1}Vu}=3I%6I&8N#rX4~L4%pwpZK*DUdl%jMt|FZIden;l z7OP-2b}f8$?tH0ZoWe2oyr!Tgw_0L?#h7t22IU0VH?lG_HWIXl#_v77xya-W-S(np zozv>ceA_8QluGVpq1j7F#Rn1{nF6%tEZ%2!BzS7HV96!wtBBW7M8rZ{x(G8QRAY~- zx(|Oj^ZgI|-wvPAJPYFIZC;|dvf1NdRl#`3j{-ozY@X3waz@pY!@qFcZ*s3R$0^1p zCp!wGMHi}*?x~^u6|&p8t(vgKGgO_(hpndSq>T@qheiACv%xsi8QVDuyu={#pgKOz zV^2-`T4F*81Bv+MIbY*KT_X3`E-hup&H_#)a_S$8;GoE#N6BVT{5r z+!Y25cZ{y-h$fp|n;s?yalZ!?pH-)x9*MBV9PzOaCJM)>)?5+km&-)w=y-h+;r4nn zccTi)9&;N(JAI)R+uX-noO`K4GG>;>??^hfyZy;cJ2B#;!T~ekGSyC3N@sTen@b%k za@8N(h$)UQLM$SOlD{&K+*t+r<~zM3=eIBfW8}&#SuKz0o>ign7l31m>YjF5aRsYGYU_Yt&$t4pqv!)Vm2_!c|^G`c28<;(w zQejCGdueBceNB;LPZ=J5-Hm|>kCX(uF_oQqMt96oB@DyAbCZY;v+nZ(Zce%iO!j}H z3&J==ldP-XMNVx>dM2I!lwfIlNk3EKE~7U)v?;rutmkIr9RgAW!AjqbMsf2ukKhm(IStq3%;9 z%Mgr)+vSB`Dc;>lh|MerFJUF1mn!JOxC-o zeJ2+FE!N*&nC}uH;~$v4OWdL75A$;WWy1YS#8!w_ygn$^$m#j?T6TYF!ILEuTK$sU z2qn(bTK_g19?NChLF?6mkM;_X_?jr13QQTm2q=%o!>w>Ckjw@G8(=^};?GtiJ&s}% z5dZw!GHqj7h)MC#9l(R3^EvihLfr~dhm3l3z37>F+X0vuA!$wY`A0@^43_22HBJk* zcJ!3b|1@-Ub{j*_pJ$`%!EyEF=e$_&UzF0k5Y9;%ANuH1{HZnUdwMtf=l-%j7x7bW~^0YvpQi-a$do9#d|d!x4_k83lVfq1+EeEy))xbdMUgt8j#oDCL%HrYD?PKo|m z-4XGC1Wn)pAbK@5H3B{apm}VdXO=dz57O?^G}L=}@-4!{HiU1VY`h$xRC`&VADjP% zJoqK}YD;egfYwLg&(EIhNBl|2*w_L>V>q!4AetM2iGNUkWZ{~>Vf%D@qhkIDZ-PE<{9edx7|*b7%s~TMu*vR`F@-y$~G`i8g9t^Js0yZ!%!ASWMf z(D`4s6<|P1vy=cVF8jaVniSBiUb-Nx@ks!`akFDe>jRip`DVaO&9BjvzEcf<>+~)J zn2M`Q%g2!>Fk_GI%X%lr_~SpiA1lGU<1llK?f2e=9;Tt=CBOd!S`FaQamiS4ZKF58| ztX2fyKaFz$`+&Ohq)Z4=*BHmz-qzcnWi_1{N7t-!Pf)|mT! zpMKH^uMXd7Lt7R*fWT|}60hH+A6uwhfwaEq-zex)J9_(;px^Bk_RMcYz|#ph2yfu2 z1Z-36DM&%Ep|N@GPNz~Xo=xss?Mvg>+33f6UZI7 z59M6yxs8~&94p|}9`U$nb6fk1MTz(8*iAe1Hjqc<3$!Kk8hHpoee?3inMVJEgrUHU zaO88QIo<^`JG(L_=P`ZBlOyc-?^u3kw6F7;rZJxHM?I=F6Zf0`vf;HM(y-nEyo};k z!D4# zYAVZNHaBARfeI_8*in!*hjrkHw=KF6buIfAZaQ1#2#k+XD}7+*^3GN9K-nC=zN>6? zh<~5yw}Z<5+lXukwyvKSKIj+d#Ep*zMQM$zaawwZb7XR%bl`D9uIE4}^$XaTJ4v2- z2C_q7zCjGbgwX43Q5u>r9)?}S;^A@~k3I}W-_)0LDO+pijHlPUjPSyG!tE*gGk&GH zd6);<&Jr0Wp-ZRcQm%f}`Y|PnsP72XdC*j*oceYBrm3_KB&ss&$C-WSWwfWsNf)~r zRd~^Vp1a^d2RR*<{W$9G z!_f$%H|CF_XMWdf3DUO?Dii5RG2mZL?5@<=3$aHcO53?JgpFx4V@v0cRxQTT{veJj zaY|BW9)g$Xg@O)1?ST(@P8`~OUkWI0$Fau*Uhi$G+*%SVG|sCVl{dPjk zN|AuJLA<+mer95zV~-9wpWxdF_k|Q~&>M#w1JpqN9tGjO?`<;~%9Tp}PlZpD64f6b z0)F&!DrBA8vzgj#Jv8?Y<Vck`z;_PuwMh>>)A2!Zmc=2t?J{z>D9{aSC^ub{;FoC$cgTcWW=)_pxRHMZpViKVVSrFr?1Q*D7j~W~#f$?vJGJ7twaH z0I8E}UXR@>JLn5fWajN>Y`SNC1@A6}DGL1$zgS;w)C(#Vi9yz~AzXsKEk=&ENpN+A zsAQXw=r^5ThyhCi&t~%5R;5!-N?ZvRQ;Zn8%I(?MD2%Im@5I|Dt|Tfg8C5%EE`ksH zCd(!t93)JXnhrl6Vq@9!(J6PR{V7hK9}oyK{}r9*A-lKa7MX z0x{>UIZStslrZl({kc~JL%tD^0+avVw&~lA9nl47V?OE7 ze1Bu^kmM}_C=9dQjyqIuC$v5q>{iXS!BOw&W8k$GcD~a<5vpZ>(hx3zol1^`{}C*R z<>()vdx)YVOqr=v!&=rq$5CL5-}8P%SVz#NvhQrX+NxA4U4ML&Z5p}Y97fW11(mdy z>1dRoa2kbLyKlULr0@;lk2j<7pYrzy6(69CBNq}c5(#@C^hUS$hs zMD&1BzH?C%;~LM%m0cQC_aKe56?oaw-1Ip?rk<=|wd`aBIZGgmsIJF8YBmxVGe{)i zaCA#hF1AfCBqyIzn0US9sy`RtPwM-7#Q7&81PBi|Gx$=H-X&tzf(=evM~z*Eqki02 zE{zP(TEo$9>@%O{f!Fx)Dvu4@4$|3KCjhn)bvH{hXa4JALNQ~Xdm=u8&uREy2fLAt zegUeiTe_)LWLMU3-{QL=$@Yhb!Tp%Y1s;I#(Ug#e3!+=$ zwSR4Hf;@fH6eTR(DKOEfrmH%w+G1&YdQO>13dME}4OKgZ!iB7gPL!+>q8Hz>KF#=* zjkH-qj;t?jYOA`LF=WcB`sfi`Z!-L(JX)_C9DNKVE63dUzJ&AVN82xHcC}wzNiY!& ztc>3l_pgvppgzxX_o4##7CO|0`=?4Ujp6PwLL7B3gL784=d%p!YBus}NrwH4Q<7Ua z4dqg_*^P7nHJQ5s$0m-$qN!2xrz#I+EMJsDF*Tw7@II?5Ny^=cM@iqB0f(PIJ~)gz(}G4q)Y)v9FO=^xdLIy}j%B2K?d8~>glJ2R;drvG)NPM?Vfnj-M z!$tD&JTSSko5n}0wHH&1r@f&%GDbMXq-80aT;8$GB7#^-4l7*aHc-fK$fSDiq}Od@ z$+cmO6V`=*&tijiLtar-#N%mKu0HY_gEkQY|6IcH zwN5tJOZz^q(W_RdRWgE<^!eJF*yf_kDY0I0HghdRT zT;gbZoP>v0<6i0G>@((-r~5%dWGT~1Euj#ni{VP}o{|(92dPtL|Cxj%DSALFtk4)8 z?y5FezQM`MD1F_N;7(<}?mAoF>s=l4^51q+Mi0hqe3j3{2oBE5MQPe7i;m%k(V^<6 zWDNw96XS#cT}PBcX0OYJ80y>MQ*XlG{nf#Cg$c4^N}XV-Cbf@$Ao4coAi-Xr*A2bW zj;Bijx3UbY5w*>OW zH9q5~dU<6MGH)}?BP}O{UEtXf|BS;thtQMco7zK%4#A{j3 zV=^|(ig_M&nkHa>p`jNo^4?CNrn!K<;K$6#x~lI4$FI!f4Ap8YEisa1k|5etjhQo+ zBZK7l4H>iMuNxG6vVNGaJl+U1Aib4vuxQ6VdwP01{>9s2`D4D-;zf?b_nBcj=2?mc z1aoy;^<+ey1Ar{GBu1lttHyz;OsPQTCXEB(2%ryg&BbvP)t9A*=6^|OF{yhF2X+;G zUh{d76IjT%a-v@h`tHRmd4ghM8dC z>S9J^3x8)?A6#0#`3bKE_;kt;-saMo(*6u*OMm3nElZ~7i1&(qe^luM)%HQSRibe$C53|LJ;lMYIK@RaaSv#A3XU@)S%v7jhv8Q9ex!vh(qU(?Ylu z60lYG+ysfD8v09B7^GCFENT#=?idq2lv-Vndimq*@MQ$fmldxfpY5ZJ6sN&^2Jy<` zLZ75I!cGkR-`Cy}EpP@eZu!On>bl%}t z+A8>jLems%6s)hnrs7jLbmhf7lQPLApWI;jcv7r08K}%XH&~D@8mW46zjI)R7?ffX z&at@{4taFQ2pe&Ek0wbAMi(UX%0}0(Bp}EFmUZz2&dFotWQ>18NjH`ZrB_tQ5`I9C zD{dNi*~uMf9z?FWfr`B@JJL^8rHYMI=vQ7dORCv+c`e_5udmmx`u@Q~s~|Fo@MY%| zgoHvo@iPLG#M9@uK3TIP>iL`O45^h?TofNURAjx3B<2!W<-lWZkooPIfI!0^I}v?4 zorO-7G|NBh`a>rpQ^~OT#g#P5kJdr~A&95U3B)oJ$KJY7+vkjmwf!L}Es|Ow#b4DP zhR4^p@uPy0np@!@&vfc|nArw%CuqgGr}PIS5gV12-;Q0&lcHY)z?aF?Fatd!(U;N& zcsVD>toAiG z^V{v2{*{Xp`PXivcbcz+``)AX91LS{6K;+;yR|U=*S~eT?w0_at)hkSd$f#n?IZ2*U+kwr$(CpSEq=wr$(CZQHhO+qQe& z$t06}$z04II5~Hf%C5aucJ;ZVcKnI^c#}>N=aa(eOcR%kejhLs*-ZJUYMSxXcwo;O zG9{iIku6~4?M$_>jY!>)K#zh@N;Gy_gEZN<&kxX6+Mc<7svOfe{Z*bA>s-Pr2j6PF zia$||pA^&=$H2d9%~Z_?4J9N#->VR26dol{h77h$%T$GS)P1TT>c?|F%YcnkCkI~S zuTcX^wC>UFfM9=(tw&#q%2!{URTWpmy z3CV%~So{KOiV66)L$p4kU~>2u$o8grE1|5tlvx^~|7coT>q1Z26N!Cw-z!7bFL^vn zT+CT4J8_ZERLOJLGU(Q0UJe$lN-CPYfi4qzQ7!u~UsIHhfx8UUaL(8^q89?EJEmZY zW+BZ)@{iuCnQM}${gS&5gM%UQ4vac`3#*(pk9oDp)zMOoWd!YdWBL9}`!(Mm1uoyMpgsYf4!|_VgxNTHz7xUbx?)9i z5~)B6eb$+_NR!3&>>y7BW0ZC9^j`Tw#QWM6&=#>zjn{`=MJmxfDK^^us+)hiq?)j+i^p%^`6dc@on-{HZ&Lgd~> zn<5oNK;|caE+TSy!><4)g7FNLH`+37*ID+=AzLtSSmFSi0_CE}{42&$E5;)JE@?Hz zAeT~>(f@FFM>{C+PFY)`F+{&v$*1#{8@e=YS2gIIY1*Fk9OD1F1~;c0b9Mgd`G&Lr zbQU$av}0ChB~<`pnY7GtOlxE+T0<_zCCdCJFML`wyL(I4OE_TRb*`;ng-Bg$QLnq2 z9t3T1&}5a8V$~d@`!}~{DY$@X(J#xG5FEh$or{@3{F0niY)?i)P*-&u?~=e*H3W3k z(`9Nq$DvsU6OVN|Ku%BJiLFi6a98pZ!^FeI7shXO@-DjMEna>X2a$p(vXm)umMX+b zAOpXn)r;zTh`-GG3(G?BeFcr*gHwfn>)Zp_F~Wg77sp3M-l@5(Mj_l7asS5wJplslLFe&3We8dDAz{HIWgSB4->myD|NxuX? zA69XHFkf4tQguTS7LO*SDwPoOV$fF8_j|9ap{4L;w2!Z#YD(FY59&n3ZR;$-lG}xV zG-b&<$51rjLtIuzaymjN`n7VPGPE@Xoa=TOp z?I$Z0gz&`csp8v6Gz8V&9VLMpofI>ad_bC*>5!(nz8echrt|0YGo58S~n2-qrJ3;Ypl63(NA z0Sa0>)(lHbdSH0G%}U{^aev_@S!?!|TMY!G6J3)X4cn~+ZH?yCiK(uKm_uP~HLlmJ zVclF3psBdroZjflndaib??i0b=R93BwBA8Y5FQH|wF0*Be!ov3%SeuI5|BDE=Q2&+ zOQI}*J_denyHh-+(z|m?im{|;WTh0$Qwdzz4R4@VB+cAmwCqE(laTepld_R1b(;4e z(Xld=dTPc}{xX%tyzf~F!&%r_stWxFT#xaszLU@LEjjw3aBCt?#T6JRSo3pVuTGzu zi(Gt>ySOl$yU8;928N!KUaFIW@KsDkli_jciX|@6;V}NYTKi1tC1} z9q_<>0a1}Ln_Pqi`w6Y`Y&>PrHsMb3fmzI`ufk(z_qZZadbMRO)tE6ht1K#lBD|4G zWL~i=B7w_1^#S=V>4E@;o=N){cpb{KvyO#Fl49rz2%&qh<%uZF$ zDfnli!KKpp-7+GL4p>>;AfF*dCiFlQw(Pd$keAwk!-Hu>RRkh-vghpAc2!Uhc4g*9 z3F%B{i~~d~i(r+oK*Pu4M7*#EJwG#}n;G1T*@_D}a6{sWDW`;=E){%!A&y> zuhK~?9)#4e4Q?Hk2IU$==b$cbVp4UhwP7qpbMdIj=O*zfuDjJphFfgeTP|g0W^<~{Ac1qeG`u2Xf@|u)aZpnMh)#bTU&PhhzJyJG=v}dC>sjLB_tKV{|P;{Ys0RI9PR;Wf{U|EqbQ| zeI`Z|Lie(W>97YEDrR0q0>bSQs!{OTv$t^Yps|8>bSe0#MFzQ)>9*n^;@SO@CyI!} z6xEy%(8=aE)S7{@qun>{32IqL630v!ojteR9`PdVbg zHdAraavt62>OH)l(sBK#{Ya%v4S~oLNYkNVDQ<@YDuKXX%|O`d$-ck0R!5#8rXJPQ zJHfJ#$_^8-|BnB)262I~?efwb@598%RK_b{;f~a2GF?p#)v16WiU4zjyBd0~qgq?U z_#eE?0pjB%_KQx!zgyF*b|&VJ(x@M<~NGib+5CEcrZb= zmzy~a$44zT!O2$xz)qP^JZmOF(sS>HB|u6r4i;OTQLehwt*;o^+nTz3b!381h7hVG zDyu-nxjE=1lR@&rPZq*sv=|zy5O+Mvmj`<5PQz+K;uv*CQG6q02AteUQs=1seq+)yhOe9L)P8X}Zb6+=RnJEbmGvwX|5Zb!u>av#gOVb ziQN~Nc&c&IzVsco1vAyyGe?{2OGrS%5*G4cxqLOm#Dl*8pf3p_y{hNvQMLag2o;Xj zE(awd*F5{sLhSuVus!a5b4|W%$jx!VT_y@a!l~NiWpNpdB zVLZ!-ZNP*%5n174cF)<1N7XNvK$0#C7Px;kCfD;$w{Bf?SibGEN`%Q!7qKYt8%* zua@<8%SIRu6Fu(G?$Ok=7o*{@7HpP<=&%_`u$Q#7kmr1A%vE0ulJLiU3;pMr{Z;p(tk5G!j!Qn{(<)XKD#{ELi>RmFuKS+rkOS zUJh=Xo<&P^gtt$rjtuD9surIA#)J{GtT(zQHNqM$lEN|ljyc=yTDt5b>qJItq(f9f z;Wz>2q|g!(;I89Y){?!mYkxV~ZnyCYUT8C~By(SagD-O&DQO4HV4J|Zn~V_!T5YS+ z0b!8ne8*H{^9O5hRYxib78G2*k3S2JsQ~-&;Kug=pA9InQ|GzccP8MS7K;KrSgfRS z{G(HbSv-?`QmCN7DtJw4v~JM*=LMYQG-Y@u;i!(d60Z_sU(P~2=+3EbjqsPQY*%A! z)Fp3ppBF0yeqY)YQuRg@^g(ln0E%3!gRs_egc4m!Fzc)OAX_a(d^k;_e)Y5E2$a%> z1fM>x@sk?7D@{u4a8Apf-ed#Lj!<_TL)`3RtYA<;ALlWy6}-uloapQ_*`y=n_ET!` zSF=xqg6IX3sZx#5CGc#&-<0p;*;l=SF28=+LZ+%ChxN9M?E5YS<-$cr8o|!hX+v-ZM}2p1;F1#|Y^$;h<0OKKz^b z>ZRl}9Sc}cEB;IDvIOW#v?t67Cp;|tHHYGS^s8=@ZzH2m%d%AqnXJ{c;&OI989vk5 ztkt@JwUv1zB|!lTy7(}u8Q!SWw^Wy$*D zm{;cu6X0Dd3+4EW_UMb#eh(-;r$+0;^~%RkPEp!K!ZVzZv(+OsMTwioOyWc*97VJ zk6COkR&<#({?6TCwniAjMqe5mWY*3PT7!4s^3rurGiv#(tFoUkulQIFAA(WkyLm?v z%Kbw#gOXZueVnTkMYD>2S{VHqTaF#oE(Poa&UZ}yt+61Gw$UcHppX1LvZ&l1aWWa5 zrRKK{5B$e;wyDiMz{!+=L;S~2bxnIh$6hr0B)`HsMWe2;5$p?h%0ED?1L65FaD}*u zcdb&BN+GI|C-YtoT|z9HhJ9B7hSF&_O&zU}b05w{QR!~ouby9HQ+WtnWNhw%cdU9S zMNimnSx5oit#Sj-cB+NFFwu4x=Z@CeN#t3Dp!IM22mPYBPOSTw8(%`sAQCqpI?@|= zo9$bgyPpd?8wnL(8^m@=xNwMM0s0}Jll1XL)Lv3xLQ(itDy;aTgY=})mwJU~`0_6hhUUvq~ILbF6hi;6pe0IOrD?YeXzwUVrhy7jWBV8L z=20yoakoNJY+RVP6cW<~y%_u7)rjb-16X1xFk^KaQedGw(@JeldF=Qcq4YWHtc8xk%*y4PRIWN2)^O962g* zW30V7g%9?A z{1mho3Bl`Z`bmuCN|{$}`X_Rt2D-po*zk!&eLd@DZm1uB^2TF-9%;Ja!{axXhX!7% zYUUnjYDTA-P}NVS)TdImOsy7-M(ypEf6A!?J`IAgmGEw0&;V7O?Sp5(Ed)+Vsl4w@27o3F@#Ot6sY9t zAMLe}H^&KCZ4`z|y;MIXk3}LEvs0)LiZM##=CQk_jMJ;)s_UUZ5R&nI0};mt*=MWx zqj2|^svUu2NS)T;cb&K)vP(@uv(Zv?28PYN?AE42|EyjZHZ2%Y%2kpp#{}d(D+VT9 zIT#dqh0~K2$BI>?@clSkwGn?n4iJ_agnV@v3=dGN0O=ck73V;Lj{Lf9g3?9koRQe1 ze*<%VHvU+wTv2p4eHL#sr=NLgI`(TUIdu%7(f%vOL{s z?rl3etKcRE?|x*DtKW(i9Dg9LJt3KSg1wqp8R>ZHOr=$_33IDX!X} zV|C<}U>;BJG{Hiki{KHpJgp8!G9O5hr+$sH@yGR}Rv?u+b>etKz1A1vL}ukX&ic3~ zIzE)~h#hj=U6DjwcT0ZK)%R2tl{q0(NZBMDPPM`#@fNLj&+|Kke+yQK)cNYyZU@5q zRggjGP;zl2X8gl%FdR&;EQezuz6{5S$FP@UjAj|>iZd%ic%@fgrxkdPG@}`gfn({v zrLU4*9o`-8!NO#@+xiWXN}eu~ptgC`p(psAV#AJ+tIS{6T_ocBlzWvjPWn^uQ}^cV zj;XG{B$f7EFHNHZIMPq$YX7s@oPr(^H2`Rag66V2*iEY6Jc2|_f;|8!0ZFIXpBt)P zXCx5WmMBSF=QrApPB2wbw7>L0eaic4`f|18HQ;5w4ThThxma4VR&_E+-3IL$7VTx*%NJ+~ zM!1By!9jN;wvP}!u|JlkF_2Yjlc-x@K(ey;H3o>*;V3GE`2hQ*934VQ$p6uJecczD zV36W+;_`=xEV(`knX|?vFq=%yjU&F+0;*KO)yJk(+aLzBnv_?YqDS}>s9`Z&Hs0Ha z|J#&NgeUqzh|MsRX}Y5-5^VK1fW$Rs0^8&&-q?7*<8ZBqOtZXUAm-6gCh5Skv z)Z(QO75ct=J%Wyfd%jTui&BLe<^#;dkY~}wX5sr*hJ;2T8;=8RuRkUy7WCRy#`k-9 zRVY^z<<1PQiw`Wo&(@azh9$u~wPuXS_micbn@bIuVIPD=Wd` z8bzV;DNrPdqKZ)(lyI=(BS#^syH+5x5cn$)+V>Z3rj4stLPC{v$RUVN0kuUa6;LJp zB_A)9(Wr#kS6IoQ>7L|#?SsH@^;Qf!Rzxw?<+l(f3O*&U4?}QC^xEXpIB-c}H6s`)C)M5$t zv=edAoG!viRHk3&WT51`RCFAuJ#7Pxkg*R{+mV;%9CiGKV0-ghN6afq&* zw%q!%h$s!V>F@LO)uR)(V$DXx(_X~jLRe2cqYv7dqJtA>1y+}mPEW#xcvu15xTYEe zeIJy05y`yZOePolIpyVk0_MEsRq&#^_h2~Us}37PEJw8I6b^9Wax$T8$>*6cc1Hm1 z(op#zLjm@JW_6i7vxcM) z#8-rHx;?@^I6atO|7X9CfTr7N-;%7Cum58ng=p}J95;3MbhzrBlrKGa^YT;+RIpg?cuTBD=COpqU!5gaPV&DCp<29uu-_D4BNJSKD3!5=%$izSx`7P zZgT(Oce<;7-uCM~-Z>@fvd3v)5^eq-KP|1Od4o~grTNH242qa`p*3+Nc_}L25nl7e zp{PYG>|q)T!N!Z`K>a%{Lo_UrepF{SEx$6X2694Lz!R|ltnOoXG*u%zt?cVud2&F3 zSYrpjA4jr-JkDUz1&LKDqxYt!E%oiE@?lz#yIgQB%03ZY;e>C%qAO0;UcLh;5Pt(D z1FbbjP-$)gzfO`oiFZluq_sH1Dw>Lal+WFLeOsmwD^$>qNptQ09_`=)rYn-Q$musa zy^#>W4uRQ3=PA95v*~^Tv2%`p!mh!xM1AFEoYMh^7D;uEf3Qeq?#l{ubKS6ICtK-( z-j1>4)3BSa6g+zhRK9I_QMVB1cA<95K(Xp$i-kVuV&o^N*xHs~C;e%8D`P1?`D`5H z`C=5=fW;Z7qlwy?exq}6|8d1AAoF!mUG^~h;gJrNfm>H}X{4yla2PzMYDedT$R*1Pb5(p^jx2yx>CMxLJnhjvykHzsbEY%`(9FQTQv^n2}_p1s+EEW zIf?w?qK54Vy|nL_tvqhJdVlD>mCGmEkO;Afo~p&2n^;3_^r>oqQl4v2d<>xbypIw; z2dQ`^^lc!wCnXR|1r!4C0MOYnf3VwNQ$#^%2-o>jS?P%1$AynAsQ_*C=$T4Syxm7z z6#ZXb@9-;eA|1g9QQ!dKX-BV9yI9)d|&Nn=OGb%+i++GvQ%*E!T zyHfJp@h3dAN(NVlx;ak379|A=STPx33Xx@ZKBJcTt3mZXYq(Sdvc z>~-X6JY}X0Z&QR7Wwot>f4J%(g_}fx)n?? zmPQ-nHj~!9+yy(60w;`^&u!h|p6g9JCHNbEP0Ur(Ebqb%BJ-BO=qS@Z;L3qR3>}Ss6jNThes@We zMe8{6JF=r7u=iCyN$zuxpfp1b2Rg7CEJuEfEGLJ!1B2)fIvCivzdHyv60pH>lqJ7U z;GP8tneh?S7r41si1?Obv`X?3p?AL4mGISNz`36i{df78rY?_|c=zjpx6@jw5}s z0i_Q$Uq14z4$`-T+JVY)Z(DQZ?*T}kv35&}v8ITwaH~+hieKRFr!iGRBxL)KSK>P~ z%|#XKcT&#f-0W2u zNYop1Faa6@YZ8bkfGUZ|tJ)veUJX|+DXf!a{HRRaq>h+J=FGMs^&kYxdpv3M=}lId zTWMCEPvx8zzrgyKhu}_ z7zvq64lVJ4dR6d%TQ8h!uOcbvXCZaL>+9Vz$IBsZ%lyY;?dr*Qq)75AOUmgI=_Mfz zG&Y=1=;YD!+FHqFgYDj!kA1B_tuDfn9qN19;=VGY^^Thy`;YKmjtqclk!Y8a?;Vju z2Rg18xnq8(L|$0yH&Zwn;Hjyk)nc)9uHPhT^kO;mFn>P@0v$vftr6a)t!#xgg6Oqn z7)LTjx00fh8HBNHGoD;Tf%3$Aa+6Oa7geF9?@3Cj`g0zd)KY0{8Twe7u0JW#Mno$G z1r96{Bx&gl$~px9${RXQIEIlwKh@D!Wfb~O@YIa`ZZci(`m5s058%USb?5)lLSy}Z zw9ptC*#Achjh*fPs=fb53yt|7^Z&t!{{P9mam?#!qmj3FLicZP(MVu!dHeVOx5s;6 zC$NjO9U0<3owpDK9U%f9wOf{EC8v|&cgMWLYeSIS| zP_e%yPBwt6E1jyVtE@2=7Oa&T*ZrQMF&1roQ&bDE@Vy?G;;erBRg^T=@uwlUvp)dJ z_B8;GHUONi035G?t1AFGS6BZZ1}FP}ZwcJ4o&pe1^A7+5xeAmfIQ|EzY;A3J^nrZh z!v}meg#myA1mr#auZD*7s&8h+ga85n(xDk}qeqk(a1C$?XS%AdR`(}A53SYF$qCii z;Nk9GA9$^!j+;#@f|(A8w_2+Tz)}yrzJY5E_gPoPL9>m84 z4!A2`4#ZCn`m2*0mC@8vR0UlX_1{)O+V~^zv}l4E-jN*C!-H{n8Tc*cySO^5-;~zs z)$sGu*opuSA3nF&KZs>$`yhsRY8z{viC{&}R^R=+M@CO{yvHb2PwgL;lanLoj}71o z7grQS+<#aCQJ>cW`hEi67zaI$3uEu%3jFo)t@WT6 zJUsx&(8lTnnjT17Lpa{Ip*O4_)ptL2#HHm0^t_>G8VB6}J2uCc2ctJSwGC)^_OkUo z_hzD$I-in~V(?jY=;xf62$u_hk49$;08I`L&hMXx-#<14cmG8n1vUP8N3-tNH7P`c z0|4Yl`n6c{C$au>_g41j#fAa!ccSR%j;YDu|N9n=UH?>{)$@J${+~3QPv`d!>>EDy zZ!7xmE_kO@C?-irXRq4}#UW|hvanrGmYYPHr>)erW+9@-3F>hvrYkg9`y!|zcgfI9p7#$Vd4 zNz=5o9$nbfl<;o_P#?{#pU@=#G|u$jI)f~pF2MK(=5fgMFQa%iH#Y!&Y?=x)xYsYo z5CE%cc+gc8^nM99pMOXY(<46pXbT0_N zAF#(CzpO2N(bJYca=+;V{IN%bmB9_%Z`!Yj;RpRY(!!;icP{$ziTR7;tFKn~c=aEs z-sO*5d)oJnpHOU?wcpocw=>k^W9r{xAIbGS*LGCXkl!->1lO->Upz;zw)wc9=ETfH z+jC#c@u?4DA5F?oU*^l>&+zGU*9!fytSwxvzLQedA46|;m>B+vk0>^(}dmcP- z^YA06|LV&ec{03xbnN<-xGVvrb0t8p@>A$O{^07LQqgy6aRmFj9hhov>hNU$o;nB_ zy3xBYF~jR4Jd;w`?K|q>j%8c_puhX0iOR@&lA6-~<2IwudggndyCY**N45^_?%vlY zL$Umix9FiqFK{@}$VbU2)l`==(0|x;y?yfPADccYpN8Ch;Z2>uxf$2dN-g9^+$;ES z?DW`x`LB>iq~)mWuE-&A^Vt{taS{Fdpdt}DqLh%4L=g@40eFv`T(5>eYdvnB2Z|X~ z*7p0HN`(ClFQ_qBMkuA~=m7ew65OTRP63bFO#P7A2sUu?)Er92=?qejxVvn<`vA#J9Aa+kwPXw zf1#|~dC7y@2d~e{aO)R0YzMLDtv7MA=jovYk#;7TfCrHfo2J%V`r5QhyU_>Jgb~Q? z_9Jt!wCtO7PfQ8j^u+ke%!I3#437mR;HNk2o9vEQ*t1&{cNBt!x_g-nY8*fg1k>3U znby8V5^UEJ_K%W-1c7L+%!A9+lnr`w0GnngetDx~W{pWol^-bn)Rm5!-(~u#WtHG+Il#2w6GHI6^yQjxwM5I|$$OAWt zD9{XWdmqTuZY$H^m#<$C4$kK_69TAu1VpuVyumKXSbV1{PqW@&`2N>!jO2U@ zN7u@Jp&Y+|J8cr)livDXTFb7qGMK%q4J9)~cH9!@?9LE*OF>gAnQk-CXJsnNXRru>X zBWyd38YYe+5Pg2K5_H^u5vg`{iX;0HZ}nOHQxjK4hvp6XA&4UOY%k#v7-q0<#vTG- z)tQXv@`Ba9f_(&b2uqVxd4%`b6RUuJY{U-DzI?A}E%eAo>^XKddeSUGXna}Nrt)_7 zv4lTrkjM_nJ(mQyu>g0kiQM>th~a*DvYgTxwn8G?pgsQWxu@}OUl@T;Y>&Ogg=Wi(>1 zpx;-$I9+&K7QFi&N~&0kBJ5E=C`Qfs>)mfM*?l>s^obp*H`up`VR!r^f$OGUUiblW zYK38uDRv^@tgfh!hFK(!n2%&kl|;|r2?(5(4o&0CMPS0Y`#rOV5FWPoID0vM@>6Tw zU-l6~T!XtCy0J+Z(rKfODLM<|aY>vvRDU!F6YRRuJu)4p5(QvV6zJt}BATSdt7V`r zl^v+>GSQ2-J~;Lro|#KXVjt!ysBF?k@$@101uI5Wr2Yce#MTwdRWpIiv`X5%MYvnn z-I3U!1(r}hOTy~pH4n%oU z7xH<{!k-+9!uf;_d`?Q`$Zm{L1AgJs^BE?x8Va4Nb2m&LrCsvoAE50}qAyN@v6+Gl`6N$JHI8VAQ)QTycC@Z$E$;v1P51u@>V zEKD4b5bW}HLHO(lBG{b2J>%5pPqA+Rqg`eH4WX_p4;1Z9A-A5~@mC{D)*NFe7)epu z9?7a{B@kclU({y63ahWLSr2F#`wCrh4YZ>nVM9eJ;ldWKyG09#E^EMA$lIEwdIN5|7HC{8xa8KWQX^{w7_H zFw~8_H<+=V2DAu#Cq6^Aj68i^iP56JlMP)Kgn@mCuN{TW*>t&vXqbUf?i~UG$E-&> zEPJO8fV|`uk^fMG-fEx7aUVah{N>CFG|59{8>7gQ|O{c0!JsW?FKg{$<)kpMqXp zUBxG?K>SH;M(-r7;zeZ6mslL*zIvM%?e`pNoc|^qx+R&irp0d2L{r8aa?dHkLBMFr z&e*W4xw(FU%ATavkw_vP=>X}N+DWHJ!!EVvG@WC206Eeytdq0r#; z%RH;)$4M54?Y~&wqGs`ljq`9?YrU=NNBc`h9X)LfRzPJ^RS61-I734wr%=>n9q9I> zDMB}zB;5J&wHDvh3Unr=e0DJ?YL9X@5yyX-8ybva2yce6Ygs;j&jei9w1q(zg#hH` z8WINup?nQaBI{_K4i@Duqi<(Zzv_X52;q(BQQUHG@0d5*W#whdA?17s=4{X#p}YF$R$MyYt@6k zHiEvf6-@QJU+9D*CNR@bLOem$`t+ZxZt50atwSRWU6m2B8!rv?D0gFaxl(~d!~=+O zmfwxU)eB8}k~a!TLcYNA^>lBdgy3q6Tf64QS6oW zK_YC0resm*4UL7E*}%yK3x=3QDfcP+QuHLFICq3OY$lc}yzrIlEe{Yb$tcV`-)Z=0 z1#U@WQ>ffHL&oR@AHY$eBxKGNDjcNQvUQ1}G<=$Ktlc70?a?4_@FiP5|DbdU7v&6{dleQd>ux4`na zwGefv8%CCnsNH(X#}YCf9HLOm3oQ*hK)&>XGE>$Z@PMbB;SBx6Q`Cb#JM)ec^dhP3 z0{IiNsOE`Aa}R)Y47Fd==gc{98tmypbIV#&(|*S<4&^uU6@u*Lw}o3;B2b<0sKdwxl?8b)B39y_;Rba&Txvsq$r{z{go05vgi56h6xFKVsG_0B$u=Aeqx8y78UK?ffstJQDQcJ2@nB#mRlp!x_ zLEd3N3py4^0X&OdtejiAQ+_)&6WrJ9Yyh&4ntM+X5+qq;fHO!9Ja8!YAaXjzo>B0& zi%yZ84PDKHiXGq+_~o?!jQ*CYePl}=<5fYle^>>lbk|foNuk@}tKe#x>0~O6?37b_ zVu+abuH$sgf5Ejd(-}-;Tw0aH<}l7VAW|J0A*aX@Iu7kT?zTaEaekYz&!i&FyCf3o z77-9gDmPKtrf4qm(er(-z)a8_wFe{M@rw_2?KeoeujI!X^y9;#QNdjzQ=w;Nqa>v# zMGz9Cm;viPupaiOKwIy?4d$hcX6i!!!MAapDQ)y~?_LIU@Eorrqp*Z+LlUL1fJ#)o<#)7dL@$f_>R@Vag-s|VCZJAfBs6ZmYQpi z_N&7_BLzEp(!zNR{y)$Zj7q2pf$uPWwBRwOKW4)(K)(2!So#Nn6%7K7MOWS?MK(Pg%jRDGJMZ5AaPVAI9muc3`FoC=K6;;cf_spF6UYG5y z^)13MF*An~rP>^1NOtnDT!b+VVqBxlcGyQH)<=0{wv2(4zxm~9Z)H5>$2Tq7v3GwL zJ31_^pNRJrj8FGXcxI@nS6g9sbFLXN@VCXXb8oWh(zQzFU811nlT7(}+d&(5sBX)~ zi#DSft0TnQS8OjC5N0+$FwVy;Q+wDd5#{1pWX~2Xnbl1NqpHe%MCu zsEPZMM~k-xo$E?8AL|>5Ht_{M%5c`X#;5+|ORnDR2THqMh!I*6!F!+%5IbWVB;s3) zZyTki(X;?(q<C)M}eU4=yS3Ga@}8+d{C5#SxvE0#$T4p1@bpVT))3Ny}NTlE0r|(J>VzwZl8ZaE2G; zIs<-C9uAH-uT0^M6_AkBbBPB?$(*p~Dnm2qBj9=<`|y+D>{v@Ks=PI3pB0j#J2yNu zjX8*@8d5H~{K)BzQ4Au~3;Fodo0csMFeZK+W{ z8P0)_rU?IJjel)ZL*7T~40Mp&58s}B_ZlJbi{S2A91)o1{VzBQs90bJ$joA$5<dv|&|P(;(c~vJZ?X59lhTN()!im=5jdOxjh5r?qK6Q- z!IJGMq*YZJMrl{ylqoLFT46^!7&0|>!|6Y^wlv$*q#o+xV)lbWiwYpk*)Jo=F$_YY z;fGQ~(A1weT2&lcOTntBR9PNaQrTY%TMn|K@EOZ7UwO15YRV@b$zk?gx9 z??-gm9NFzUYs^OE2)922!*{Wlu~)xiRHTVIMYWI@Bygz!Q0Yey?%J?|k1iw(*rLU_ z6PRZ7PddN&V)UIjqfpV2uT~G$sU-MF_&G(pBGa1r6KnWks*@M@hE436gaeMX-Z{GM zg(8F%Eeau&32d~I=N}yV(Glc|l7-Y7&Jna;SP1#9zd?iQQ+*IWs%RbEF?)}sw$a`k zas+d)#7~L}c+qHp=F5PBEEhxOfUk~Wq9$?b**Tb%7Kbf~6@!^cj|B=UHQEx&I=~bf z^=)3h1(sOna}C`?rNff;{tVe?kZ$lq^)uP44bdLZt}NK|2$ApZ27uxz!gh?+yU?}G zLNTDy=W%7R%`hm1_TH--tap4Vp_$8YK(ory;+l3y=mZE+UJ8pQZEf-9RA-DlhKk3> zmc4FPjMoT;VN}3-bJ>hxob#vOUe7(|Bn!>KH80!!ope3n0#^1iH~JSrx=|@qgK)?L z!21q&0~pRKVFDEmYv0YPXR+8Y zBon{tP}EO5nI!TdZaWDX47iqmBla&49sQ22W<}M7`-4vsr(}wMxj_kb`5p=ps(aDI zwC!JDG`fN62$~%jxy~c8<(2cR(g!)aA9t=Q=j|Fjp!+?w#gf zJHH_Oo0}n-oPpp+xFF(~896i0oJMrW9N7bF4*i*;7Yu~a1@E$6&c=HYUOpK$RRFU?^f>Pz;RgWW|@L!OXXra@)J z5$$%{wqFr$Irz2Ajtou$!ed4ozYilL%^B=ch6`9c^$B5LdESEZqBf>}~7MM|X zBQcq1^BL$9*;rF#x3!Z+Xwunxy2x&lazmDbo?a2Bn^}R@g6-$Jy+A5Yy>LCO zImM<*8#w5o$mr_QflZs~p@-CiRhSVn_z)qKjhsiyGGb)2UeBn`gh7~IVHD2)UoQ|<;yat`ib&aK!I28^7& z5y~~DEoxgLTPnHyh%{zZ>0#HjX+*@BFlDb?{}*UX$~;`~OJc~ubGJO_^c&dy32;tl zj2hckt7t#^7{f%IckFiqgTjI*2?N89k*=m8<6pwQwM|8rljGP*AFM%M#s)3Gz+~6; zps?XQPGP$1FAP%&H$rP?;cOj{WVH2}$yF+(!%cMAYW{<>+P%(zj~q3$;!?wJV8EwKYW0R03!|{iBZ#Ll1?=LM zgx?qj(GaCWa2KZNit|Z_amIS!uOO(WQG{|al^|jpQg99B3V!QiK&#Sr-NGR@kxv#V zgVQQunFiKc`ixu2uo+)Vk^P_NOJzmn*PaLkF7mFRDgM<#-NDA%kf>qlJEC?=XP*&- z7Iu|VhrTl$)fMr21g7vs*Qt8tYPU;YWP{a1tgQ(u&O=@FXZ!Xo)DXt)w)5vk`+xq* zx*v`QpoHPJ$QGmA2!Cxlr||yM8s_NfL!-SI_ua{ZE-4eEG0Q=o1>fg?Wf8@ruTOcG zO)&V!iT&d`;|Gz{c)Ovd*2W@RVR}Gxr^P@5AIlCB8bvr(74C-td_#Z=62N;MH_l02 z4(8<^KE?V#XYL(83O8byez3RJts5)4>xfR&m8bf}lHuk&IKw_RG;dyrF#3k0X-rvtooXgCLD%DXgbvq@Jq}IYx;lYI2HZrZmq z>UtKT`sdLr7!D!tI4ilbiZEOJDQPJ9{|FhxNwGm}K}mKhun+WplTga$rK*UxQbR5ZhPPj6}Hh}Vu!LGP|wuUO{K||DpgC=ejBwr#trzvzw|(H(sU zf6n$OBO@~hJD$DPy7&Z7t3YfcaZip5X44@5FL4A_cNKCvcbZlvWAcjx$$aHL%+AUw z$|B3o!xUGYV^2n2A$FTVMly=HqokipgYzlF%8Om*#zW{JWJXQ!Xa)+bF^JJt%}ti@ zkm-!lGJStjFz{%?7luCZvgtA}UzEoXYsRuo#6(fZ4&J)R55CBV*hA5)Kjxei82ay4 z>otv4pdB317?_Th#|BI}iPY0=+|b?%KO7943wAVm-ana|9-9IIWOLxopgmH{u$BIj z3K)C=$M3|%O3^-;73XHl&sKMHpEtK8K@hN2z&1$F& z=C_yGNj`NUr*Lcyz|S(8vZCS%q`npyye;UpKJrX?v^6Cvl5nw3(W)xfI6|ZwT(m(S z2V+&6IrrPyTH;b>KDtv+syF0s^&G3aDgwgo)y&so)h7(oh`H#p|7WyJo(b50y9zB)M{R2 z7T%hOWac{)+e*oKUuNutpQsIp3Te01MWp=2hEP4c?z(&7004 zJ5zZGIwYZ$pabadOCkwmJzX@{0R~-ec5ox+B4e0$s=O-nrj%mk>ob6&d`TtsO9jx< zTBlP1R9$oyzV5M0Q~{Q0bXytk_&nI(7N9qyod{+mT4RFE)2Qpw#1!44GpV~S6k3e` zzFL~9wu?0L?F?%eRIf%3-*Y_S#|;!V6f3dS0tHjk41;<~^la`N-S!#6aWN+}(tM=c zt$O)Hf$ELYYFMUXdM@1FEBTTT<&OVdGp-sBjv!fQp-=;m0gA{wA4;0!RDm-0!o`jE z#q1N$l%SuF!<$Yur)u^%KJ5$^xdl_%1RL-&3Xhss`Lc-8o!mmVPE_ey=V(Z7G_>eA z(l6bRVvHgtxALO0-l?-Oshsn&hI)R#sUZgEXDsGQmlXr?GIN)i{5|{df3=ga8UKs< zC|vq>3RWAJ5798-T#mCmWXDt6ge(Q>Sl?4~lpa?jY_Q?IK@F44DmX!G;#28%`Lyjx zb*UkTwTluzG~hm1nN*j&7>0Pzzl-6NiYC?Z{*RniGfPy2e+K{a#mkK@5o9C~^kNh9 z$V@}8J<%qy`vZO9WUYAtmk+KY1g0I8x?VJy?jX$Gt^MeaYqZfQS781IW#9g!)gpga zf_uvK6DK$I}X8W#p~{oYLMsJDJ0gYB`Q_1@3)S70HA z;gv7PgefFW)m>-Yja2Y{E@3VX^*kcUp%VbfPEim_ruPohjux@8a;JRH z{dZ_H5mee^59i<6rT~Xtbre-KJ9{)Sm0U!pCC;Xcb-;E1< ze2y$8;{AgBh(2&dco1vo#s0LMD_!H2%1egIMk$&y4mP2+nrQTu06`90xjH?b!9lty z@-YFvQIb+z`z8u${(*>L*U4A3%~G1@1n*2yIB3i$$wAoBWOCuwc!O1vuOaw>xh1KR zdW%R}4>^m-@`<6}N6!id)|~4h>8(-XILp0o*mE}2i1p`_Rc}8fE9FQQ3hdFD_ZI3! zt-UyxG*M^S$ZXBoS|S~+zO$^#G0poGEe?~3sGU%+^fp+QzEMX^COmVuyE{4j?a* zN?)oOyKUP@J_VkKU?g#uNfhfXwX!RIT!jqeHhfSQ}!p44T6Ud8>io!hf~AV<=iNe-bK@xpMv1b(!lTPv2Ksd zKKq-eX6^~cN-XPmKq9RO0sgb#UK9brj#9*;ow}--V<`0$eL`?-qX#kR+0_hYibdk9>s94o8H&Y z5NbS+kWg*}1S=pS+}S{C<)2A+b`v)cZ09XZ_oz4Qrqug>ec5D?6Bl&G`Xcd;9B}V0 zOotoqQ6uykMDJt{0yiGS-}+u+-&5xFxSoH0EnPx~C?b7#=ZlxH4RI0E+&tzIrk`n* zgwiIrTz`}rZPnizmcnVCi4#EvW2WsQ6V(QKW5E_Nax$@DLW`n4Tp@GIkB?jxltQ2O zy!E*@@^?NOvHWUi7~I=cyGkUetD{Ntst(1=d`N(O8Wck#)HhmAUw5nnbVl}Kqe=AV zpgMPr-^~(lIbKJzKf&Znj4!_c6}WEcyib;@q#9Z+P!Mx@}@vp)w{3^esd zxZDpe5)%Dr*X~C5JPd{(J)tWLIQ?g+A7~MnX;bSd&|)fg;uS2wae2D8vx+E*H%y2a zlkXA&xiHYx1e{zfIsjD{wFY&L^p+l-ds>2refZp%9lq_D#UaKzr}TR^7o<2I2Fu|& zRHl^1IoQ2vt@3Ff)7f5|TC_d}6Iw;cg%Ic)x6ROMr3r^-@-I^uu$txL`1I0)(&!5j zUE_$W=AJgg%5idqQv1U!9K$Yy3_eE5vW5Mz#sK=#A^`S0nsqsZ%FPm{z!w@G0<4X1 z#5W_pAK^M+jdnu^&2e>hNgrc3*io7Pun_t0Nip|WATLssmn|bV@X$0S=Sp}d@2^HG zcQ{=Tl#d3%XRa2V!VStR*@MnulKlvpqi9_vCpzJ?%G(aCnz0?YC(L#9xNM7)xDn1= z8|Z>|yX-mwoRzlg*^Y;=kHZLLE<~8 zD*~nXn#>q8ZCSAIzwyz+I%VxrT+zC1!EVhI8q7t-m{+&C$1vH4kmU>&q6<*JcBWy{ zhZc40B5Lmtfo*2P3^|d zEVov5igK&J3&Qj_8Wm1h7%NT;gV@V#w=kE>T-t&jKsQ50A)h^;M*)@TSE*e*)#nr) zQ(QY9n{+?SvTyTDb(8}`<6=Wvex3?jei!%yuT3d6GV@L021VP6K)xK*uK-pz82uNx zMIr?4X79=}f_>Tgcg}-5UT&5PP?#oWWafqg_^%X2rPOKTBu=GBpvhUFPwmH?$(euT zH{Q0Aj*4q1^$T=IAt$Zow(J~Wmu~?+YConJS}?v%XU`xB)6WN1&V?}vBz%`_6JN8X z_aVmRluSsjXB9p%@X3o4$6KrDs8(!$;y)>Z`fvoBvCf2a+C{)4=(;^fPC8!bY+z z?gJTrK=W(?H5KX{0J;9Kh{W7bnTNEwg?+u3klZN%okk1e_UW1vc|Clf-T<0-MAevbUWY@ za<0X%U*Y#Byw%Wn-tW1XKAWvhESiNx*Luy)m~ZlOVxuKKlL#tjbODBybdsTz^%xV! zE&@~NfHHEEuc_7R|8zBCvU6OF{=v)~87re@We?7zYK+xNW<^fD zYDS?;`A2x2JJVQFHVs`$CjgO=G^8ee=KBs;5~l+VE4&YTt4Y?9+mzkb)>Rw(#W`r@ zHmP=gRKAp|qEWVUUYbK7@R1>`boaB3aM?z$cvQ-y>;I~{mE2_+s&)!*4AEPke8RZK zAi@NPFso{!%bUb7KS_cIKbW$IC*4hSrF}2ffbckG64ZLSi;!(FX;x7y6a*m_qJgWu zkR4gC$AzkKGjbM^2hpX4u3=IAmJJWQ8F%ReksszHf58dZ=*Wq3Xn-25WhMZvU>1wg zaMYHQt-QkODD{{~Ot*8RY7E#lX@G~W3;MuF*eDgfxlUY@0Amj+=%}1j^L|ta;~H;t zkrR-ZS1~+S-4nTb9MU&Yr^OveVg2k@-N55|Szyj#xxseGZ<%?OzS3Ex({0Wh;4vT{ z!x~4S4u0AZEt~umre(qc_3Q{kN`A+2!KLr%c7wxEVsU+g;vo<_YmG*}jB(NJ9d(a) znosU9DkqeOz8Ym2Za^nKJ4v&LRO`zz7a|3Vf?!59w*nsCnBy0H`sERiiVGQJ~AQK zPUNVCbq3V+RmpiUb9`VLB?|K_Kg^f-qg+XLQ&1JB!#UJzq(50$tg^vzTt46gy7}ki z&@g#1&P}FN|6EqtS*t-XwVwtBjb2j#H$(5bKv~KEXPiTQC^?CrP3hmjusHH!9W!Od zO*ZcP%xF|_p7N6+T>RQu}K+GM$QfMVi7~*#|92TFEKEM z8?6nlMJ$JCcu8)&g;lq>a<0%lb?$voaU`vp-fr_Zoat3xCGdtBqkxq~g;7n@w#6g6 zCXrx-5BX6<6UFT6R=H*VaIIMOF8Z9+TJzJia0au#1ulk%3+WT3Z^PaEYZCSdy=;+f zWL+s#NVJ9}!_-iV=|rdHkV0z2Nts);J?r?lRi4Bfj4eY8YQbwhU1|j8Sv^J6S^4H3 zp*(3!`OawE>Tt@=&W%OpTA!G>zlf~N1dT?t=Dz0yi{_sBs`Nh?j9j$Wjf&mUv7zsj zy}cXNVs$UVG_>`~drO6ND-oB0shCz_ha?-pC1YX;3Ih_D?dNo!DVLTOn(<{1WXv>C zyppvHVRj=d0I1&r{z_|M20^j6<8#Y2m%X43JnJQUxZgc}@BMlyuW;6ILaV~E+*eZU7H@YIni*&MXtO!rBU0{{>)(`p60=M0o>)9AY^Zzj{rX z81podFun3;=emn2W(t~mNjxBDSvs;3)socojeFc&6S*T&d>f%_{EA&2ufPOyLUkU` zPv;*zp#aw&Q>r1Z*ObQG(~^o@n8Xz%{@#{F3w9Wo>Tj?VT4ks&EqF=DXK3gbp1qz871Hi=k zTH9iLNtZ|V>;=MUmdtyRNGlN_YiL)3Idk75xC5%!VSMAjzGe`5Kr4scCQ;L zBj8`?5M+mFQ?>Y%LAweTTb)30@!HT3Q`m=`lG{iY3^KX_t!-2@zlW=D63F~Lh>mAd zDOrg(Oh+d~?J8;< za#7-)lobaZcnYaiPVb`<)`-+`<6(msdFr_*26B-{z$D=@P?DpBkQ|+33lGWWaLbAm z8LIImd|C7h&vohA>w0=?q2s)4RD(&4$j__3hWSw_p>COdwxA@OlwhMjC7r$hs_CMu z=m)M<3K+u-xeaKzZLipv8CxLdPmkH31j!68-d{A1jVr1^pDkr5g1uhx3S%LHX|-iX zfE|3NW*AQa;y;V)>Ps;HAg(D|*n5@I0panGV?5X_!I0bLy3|z- z5_d6Si7Spt;bE%=SEBx1AHcyXK4z#1cI@5%;`8ZNEBjxRd+h& zIRIb*o@kqb5GveR+%3qN7yyubWxMdY_1gXXt$X&dTKSmfm~DFH^~(Fc8hlfiN>keS zZ)#T2UjR9qpB5k4zq(^a2?!C9022|Bj+VFx9}5`xTfhPPS->8X9***Xpo<#UIDp^K z5d*3?gA)!$-XR3Y-y0}DA4*<4I1I9Ha*+6oP6$gI3}Cho(E?HK1gxwt9}i1gL_IZ* ziqO(51dw}QMd>pfh5>?sg?0FHg%s!d?`2WJlJjqa7(hA-=bD=U1D_34_W^=W`2_33 z*9nniiMF=>6D4Y6#L{Zhx7C1ALH6NA*MpwK)DTKeMNkSuU4LxTwB zx12U`egRD!{ebG*x(n^%jEw@E;-{qKmi0F?iK*AN#^j|Aih z;m=)t)#eAj`sfVuP3ku|_T|%^qc01DV+;+@tA~er54*fJ+=l=G?9~GFZhuLB+6Tcw zfLHXX!1_>(VM7mo@bI96tbeW&a>9amfJC{)_kn@AdwqX(GXTvd@IivyzpTI8+O{&F zEI#l)FT3EsS&0b&9zb0j?_j{$T_D^*fH)*XeyH}lZ!8b5#FRQvdhEc)Uj!GYC(FxnX6fa1^}K)?7V|4SA5mD}zu{GtQ-z4b=Z zCXC;uo}~NuHK4)mN1E+*FV@vT7Qe0S=R2%KXoTqG{9&t#uIHceXI{d1 zxRnCyB=_gxU(wVLPT3}?`0CI5{zDIi1+x&??(fG#4kQaeob_`Ut7vrO=lw$~&ht~s zKUVO5n(!b`mHu3Jet?byrrx)Yk=r(gLF@(sWCw7Bs}aEOMTgrv2^>HY#{_ER*7Jvl zi~X$11Mvp3#i3Vh6n{eOivrWHz4HV88UV6A8hmaAM(T^H4+{DL-4`Ibsqf{<1!?Q% zzvJuUYixE58BA#U(2^Nb{AvFEruXN^2T*OTTcoF)S$$Tn%ABSwEZt;h4IZFIXU!&Q zaCDpPPuHe_sYg_!pVy`Cmn}s2Pw*4OWmfA3Ggh6%p+DtHy0q4y0dSeI)Z!r9EwRE6o>mR2loyyL&2m zRSC*J|G12^n=LhoANm(cjNnd2Q%HJBgOSm&;*1wS?jMbxgGsE6;pIr;a@F4IqUi;+ z?!(wU4JWS}X5iOJ;h=-25dNjvfF9q&N@|^Y(Mo}2+8G9)yz4Kfh&(A!8D--iV~tuZ z4V~feJ}sj_Jq(9}MgPn8C&N+r$T3K<%V_@4UHT__5In^M@iereeQ5aOA;f;WmY(r6;su<WpcQlYd z6DdG;x6Rn^LR%AFSwAHFjklv}Zk4y`b!M5F98F< z^krgp!kNlA$GuhjtW3En%4_hkfIhg2_+(nuwvJEs0+7mAv-{#l$IMtgd`uIqjGd}rXf9!^*+h0t1A4|QkAt< zn@KKBaNrG5_*#l=xZ7eBZ@meZ0l5XS_oGjyh0Yf7sqpk{QK0I=_d;Pqb4j3>Awc#} zeaJ|j!L2hiInu8Vl*_RR&)=061JVheOgE4_S(OE(Pfk%%Hlx4{mI1s&{Lb>}VH zd{kS}(}fuv-CZ*?jzwo<7Bnr^ll|a-&dRrN zW#Zu!X30%m!&ZObT4HI7T+q8nj+q7x^grn3u^_R?9>bxUL|n7fEXz7%^yq)Ya}!9T z!fF*_xF(E^_F|oxTSr)}4b`|??jDGga5MB0XAMDFWw+7B$Sw!-mi$y0eIC`6YcFmB zUrZ?w?XY8@zw`wV=dCxmS`R-37hYFy!(6&&h$2ZRO z^$8B`aL64tjU$qHCzxk=CS}@!W2SqRKHky-4_#gT6 zl4d+I%BU>TM!y)^jOYFT9vc{^?q#0~f>EE(h5+gmI;mlrLQ=wOZ&Is0Vx$2vrbb3i zdiM(B!D8(nlEtLFJd!1`XZxW!MXqL)O!7F#v|W4hFbHH6=I4sJNqaIm!$#k!KHGOU z-$5&ZnYC%U$oL6?H6gyS&;n@c5M?kQ`*yM>$1FU`fpiYn=(w5JIh@zDLj9F5AnWBLyzF)m!Y}0=4=+?L5ua+@uO+SgRI=` z9DY6040%sNHn+KpL!XXk1YWJpOA>&zX@*v@wQlF8=XG5@o0b&2lZ1y@om_gmiI33A zl=L2Pu-)A+tp>EA_lq9Lc#U#n&9c9QvT;HA7H&7eD6&1ddr87AX>ES6j*k@0?${;g zGMG-9ISC(u&t+uQrndg;2FkJy%ln6mZi^aibx}Mu%|19He(<`_d%EXH^*X$Jvv^G< zVPHLLbI$`VD9mbujE~}aZYxmlwW|tOcB+-CWY-v75$o6ACtHlP^Y*vQswlU6S}7gR z)8zq_qLXJ27lTH!TY=3zWe^rZSF+MyWiJ#*ILggsnWZv)h~S>GwhE2{r4kLsIXUXi z2^EiTqxf*+1h4BhfKeR$dk19>Ex~K_11n{I9RcVIA@=tYPM2^@e?OCq(IW&t3cE4D zU-1@u3;lpt=T^M1vaUk}CL0JZfY!4II$ zcS9lrRjr-n(D}nh)+k~gR?5mL9}KCsM_4mTHRYsz#lM=Hx$ClM6W(M6SHWA335b81 zHWrRn%4I(Lm6YgE{J^|dUG?t?3BIjePs*}Jx4G_o2+=o9poqWr5f-m1e_#zHwm+Y94zE)UK1cW<kQd+e2$m#H)(K~B|hIw;Jor#RCNGQfU_Xndf+m6>*dWPD^N zKq-GU3bT|$*zXCf=KmF1hib$q)TM1S4Mw0DB;+$`zn@`qAXtR*^o=Pz91Y*_5;n5n z=_p$T=W!`QgEXXkhhPeyHBzC84)F3EnKGZ+7n9dOnB5@ToYz*j11Tgf{RM~#MQJs7 zq=i~3X`rQhnL?#RD>|O$Cc9Fn98P7kA=Gv==Bmi8Nm1?sr@Smt_h`ISiGc1{hn5uo zKyj~M_55xn)-D9Aa7DV0>_9}KGwm5;^8bqY`Rf~0Do9Q+ zX7%*dtsT^=oi-;(Tx0)9!O|4@t9Y`0cCw7RcMmnkD`5;b;Tu?xKFP4iGLRtNBXI%g z(0**C>0OfVT~_uFrAQdn7(dQ2^CER8@$GuMl>HDaZ8(*z($Zd9y}hhs3jE2TskSPp z45zy<%!7k&>%0)$()1_H$82(tysp{jE~7LG$8(dEm*q@e^PYoVhIzWu*zEA03*nFe z+sA@Q@~rt0o3%iO41G-^VyPc$FO(G2i~oIx?hh;{HD<%g z#Z^a2E8d^yM5?w6jc)hPH?FCaZ`0=N3Qy^?*v1iC*{Xl1e?gkjDNGlYC*FqKv}+gs zfFkma-t`g)iR;*5ww0dPX7sA(7N6N%rS)h%^97!`aMq5s6{;s_Z*=&LZ3h?Xm~TgG9^RPu8UvHw)n( zrB*_AtwO$L4%A7rAxh`v74RjkV0zvbe4_~e9P#U#%!O(Jsf4vc&GOn*gyox}P`bzk z*fXkRL~L!85hmch=WAp_yt0_1H5s3QoZyDbDYo{+M@-9y^dbz=J=%$bCv(I(7$Nx- zhU*<9Wk;OL`m9HW{5MXSDR+&cl`)T9ba`5pM>~Y?Ct~k`w#ORy?M!SuZ{V`O9XHxt zldSRm*@F+{KscD!6F|aq&cc;Js%i)OU(eFwr-AbKd{S7{*djhp`;;3rHEz$#U-Sa` z)SU^}$-#u2U4`6_I$4XRbDXyD4_iA<>Yc%};eAOUOGl^;G?JD>n?ck)8V$aQIcfge z^l0~cLP<>RJAeME=5tVq%#>o|TtCpOsRq=@kE+Ca*pz@-zF=pI3@egPNfiT;!W#Si zXYJBy>AyPX*ArHa4nYe`8Db@iBa3;lDm$!8-uk`ua`zDU+AQ9VJk`N$b)68O+dI@A zg#1u9a?-T}7gP~B{hNMRl)!WS!H(=h9HGp<2!>6-B|^5@0P5ByFUKhA2l2G0DG6GX zG$QuY!UTEXPymIRZt-9wQ)CrB&!+p<>%du+B`g)%jI2J^@UkJUwSxjWVox^83~z?V zJt!-2qjf);6XRQcvLOPpJ$Q5xD&^ zi?q?du-k-fF^pT^zIg8;BljVTxO~E-X@_`E<(B=XhQOw)pNIpiY$xsigrRH?{x4k}&Yw7o6NoYiXUo|?(x z9^^x!vrkyVe(vl=(MQ~o5&L1S2g3pe(Zw9a8RS((!7TKO$>XCm>N)<6z?WS$#EWmt zN&IS~R4SnM$1f$p08Et=61zEYF z$4EERG`p&$6Op52Oe5L?!`612Bt37o97FHYm=z%wBRI6`WRJS-`PlzT)>LQ!AYCCF zrBbZHGCwh5h1T&nFCAV;l^5^C*6VcsXs>D1${$andIendUqFA-QDL)X7?dysY42=v z-oIHNMmruW;|?y<%(}9Pn>KfB3YEiNGwhOw!>Q7ZY;X&YGC027*xn6kR53w`JjJk+y%0|c!8LyyD>u=6i4Q%eq4mh^d~8Hlkd@jDL(ajF4Zw;@e*$iq zaLx?3MgGsX=DQ#% z4zkh+)Sbz7tRG71fwuG`PfovckK*6@7(UB#RgmVwz0QcuSiUYQi)R9BtH7+9_+hL- zbK+yu5{S)R+U8|Gh*orjwaMs;M^Vzn%to&E z+_<|V7OP)zEpo)6vUi#>)V{a|M+h_0+WVshl=V0y&4g&=X2Y6?t-bBt)|FIG&>QF1 zXX+Ox<=eHU{+IT~W)}r3ZjJSd=?!%wk}}?11g&*)d|UKedq?6Y!P2dLEt@N2I(m;c z9r*dZB|;V3Bgqv@-9W|~gCE^`6_>gU_SS^TQ|GGbB41yWD@=xW-mxSC*$`)lx0y!I z>h@YIt2b@!)|bQ9q)f>KqG?p6tAf%3X^r%hr(k24Lvj7L8`4;74uj z%xN=rH2e3kloEIB_S>;MP~&GBbZo?8|KT7cnm#xG`qaLhmN4n|CqGa#6A1Ursy=6) zoPx7(NvT1)s$`sWcGjGgAs9dZ8e4P%97-ROwFmJzZ>+!-Rv4tw~|&h7PGK6c|zX#KWmmsD(rkK z=!QorBa6{`g6S2vP$PPyi1EvHKX1HU*q5Hov~O2<<@J{vxBU0r(y&iTQ)Vj9{q@mS zG8A>9PK&R^!8HtyeRggIW|PnV>JMVzb5p@D*Z2vKfa* zI$>OEGcmJMJYn`8YV}UGdWsAZ@XO`^VNl{GyV>FSP^w#kk*S=%p61pbeL98fTshcq zXtlF5K`;*&N56*!hr8EK`ul^iU}vaDAJfWqyFW2%k{B+h9?Rp(YNpXysEUUpxu>S} zQX6;EDygq1GVeaD{rD%7)rVm%0TlPN2d7WevRNB4B4z7OoEtV=A{{gQarOOzv2|Sh zSv~T^!)i37_|nco5ktNR8sqRF539pd?yLVH#8`{T{M1qJT_UIEu#ghBa{&IxP<{MqvlYAbc79n?dKB84qg zuJ;Y<+WF1qHZy@V(Ya9a_v(G@l8CSw@%I2}dI)Gc8yBG9j=RQ&3VnZC^C)Q-rhG`OY#EsUu(INK%P1Oha=a0e_AS)Fi$DiOj0oW`` zakqG^AD6-MRQ=pbg|t4y9={ujGaF>jeEpPm#0i_^w{ZQS?>dk!jV>^{IiEjRB0 zo?EkANkdMzPPvBSJHkl=YheLYk&PpyxSy|V_Z5a=M}dp$%1|Jb9I7+R^vJjr02atz6Gy_kG-3U&xbuDSu+y}n9N3NRVpLidpdD*;L2qR zXJqvb7G;s3|IfNveIWL~uW|T@IO@x6X|mgcUEPnSj$_&iLb}a6t*RHQ4OL>C!|Oqy z*30y>ttprmfVm}(kEiEv6Zs>({3nX95c`;Mj(9X-#WVvC|EUEkCB>0D8p{8!QLzbC zhtaO7QAo(^YOqOwV`=VEyIAK{2u~d4d}v z8Lf*3d*UN}0=N*@@I35_kFLGV;Pb>2NGnGRlEP$vE3k;Tr|X7zpMfO{mmhC>%cJtc zh2JdxF(|MwVL7S={%J`7+NaD!D7%3Sp_Z@YFF4rVA(aZjA9jxM2)f!G-$62~8NYm? z?U>SFK@JdYXFq_N?oY{FbaJa>w>wp5O3RIhk2Fr2#pzzfG*!}?`cf5;k6}>eB8Hdb zF6{AXury)c3rxlp%?2xQ21~bCW?1yYkoSWN#T!MA2$B%8)E5vaxg(ghr z#JXo}fUw~(A_5lLU2d5i>sw42eWxF>k%|3AGK&q7QyQDO7tO-{Ik!6e(qw;C15~L9 z6H8ts9y3KEp_Dw!UwKzT`!8Esfm*B%z0G-)zg0qnW8^R6q~@Ps1+N_@hCf#4kUhRn zcJQ>1xW{Zh)5wv>KCU%s?w^Uk!x}OiL0pYfwo4{{c5M{r?KM>FNImY5xbf8R=R6r~3Z@ZU$C1!2iAe4*<72q_Wax z2Mf_cvD!KCIg9_(j)3Nw3_lb!m>>v=bG&ZJD=E}M0;vcm42WW}BxXFRPNhH0N8zZ` zEzj%ksJoqUbWV4Vov%#|hZ`d+B-NNW|2VJ(qJkLF9LPW*zlDEfZ9>R@U==J91|)ze z7#DYho*DO{H79-$?I0kK5P9J@K>pr;t$=}5g^L-YJW3eo#%ln0pb*Hw!NLIA0)PYn z0h9cO7xokfRle@hM*z|h=<^`~2_!m_7wCBR?8D8OOXu|41!?Q&1~QNK_fQ9z(@`BxHF9b`#kA2|&0G1oLO;Gth?u34y*BX6NSy zO1}Uiror>?!2!F+R6nHy;@g`&0SX2W`AxZzd#V$rAG+1&qQ^SFFb%s4A;bli$HE1f zQ(HwA{>*;|c7+Pl+xwg2zb9fC;aX!~_P$_DsI^rpK$AwRgaups9#cfVfX|80`rJ7Rz5jLIm` zx5Y!KS?NcQg}UEs6N|*m4@dr&mX;LGzYP??t4~&-2OjOS4d~73oleIF`QDDV1tK?v z69>S-^m`+J6kT-zfc}M%k<9(_;r(hO!@z>#>gzN2;U7Q=A^mW1jlc!`G>>HWLQX;I zgAdKgVF7(Tzpv)7gc=}-gKfR;-tCG}7h4$?TUHOgnjQIZq@*P90{HqYewYx)5MIjSe#4gq`4fODdN+oz7I$g9zW0G%2?FkbelnyGBMfN4`o8T7 z`G6vU`_rTDelu=*g?{{~e^ZYA{(ktm72iOI{k}N;g1`BFxz^IR-4cL>w&$8h!#F2k z(ExsMEFs>dIy#Ub)5|XXyqf1+u~^6naT%g9kb20Vx?a=pLKVZ_`EmK_nb*$gR=!Nw z-b>in;ede&73%fmu%ywD-t>5*$NFf~%b;L{rgv$fM1_8gr#xyPxlQ@ zrNTL^rX=C^=%N)$K!;A*GJpjGp-BFqg7i&cLHQH$K>6WShm-I_#Zv5DLYj#Bo0((eH!OXu zq{M;2K=$VLxCYa60nYJ8Nf?b*#u1a?)5Qri_thOrGN-jg#Gk@#m%S-_ZUk*KB(H(B zflE$}tFhtE+)KV{d9Fq=s;{cf2%{j4q0#VFHF8HZNsU(5;tZfMC-5Ac^?X)qP#VKh zQ+H0DUri!&(JWq9BGtqc7Zl#N&87)tvGa>$XF7jTLWV1-U27E+a)(6K4*ra{dp{No zJ-k*F{=6IkE6kFL@ub9We#D7p^5Dc9GC98UOp-;n;IxnEg@oV!D;{FMUo~l@a$4fl z&p|Z7TZtTi^>i>#2X2GciQ;o9i#IvO#Nb?mopx}K8xXePjoEGY#>z{grZ&u>g-pYJ zdz03{1v7KS3C*O@9xnwYKj$D9&}4g7&r#zEyM2K5^;m(dVlJ)sLN#U(DlMtx0y^z&tpe7R*#PZwY*)3Z%|Io#4(d% zM*mC0Oq$2C^51aF0&#tOtUOFE5pjX@yLP{F)19{WQH8d7ly-+P{oVY*+dRBV(6?~o z$MYrxkDlE+$+{OVbj04KIi|A)ClB@FVMkm~8kp6NRL6#DOFA4!V!8&c{Eq>Ov6RNo znE){JkJmt2O;hP0h*L?Zxsn($?YdZ#lovqE4gGC|4_z2b^Un=x!5ky8M$hV1<5U>tk!Yw*lM9;%m7 znua6zUFNOW887TK^34nEkQ>Ce06N>$;7TdqSC9zbH*(`zx}Oy_=yjdn_xYXF<_xYN z%W_*P+keB|DUFL`7!O2IL+1%ZPVpNFGtFZiHR6}o7b`HurX73*^fj|2c*}dVYHnd< zI{aLTZx3Ht8ThbC2Cuxjuo~hZRKIAeX1vrn^LS+Y7rY_!JMoX5B z0=yOM4O677_$|f_5!rm%i!h!4V2?oJbtaW{y7es}xdW@|gFVuUHTl%GKr?#(jCU-s zI0jwuR8wnrD*D+o2B=)RZbemK?zY}|Gm!imMCCFjjo;vN%>21iKI+kmIKiVR%I>gv zV4mgE|DMDQ;^&%|d3Jo8eyUZHAjm$2b01DRLz7`DdC0wB$$(e^Up&4i7^1WhQZ^_Z z3!M_FYx(*{3&{;-#>n{B<=MWE`0%y=eQBbigSb}N!&-JaCyRx@^}whskw?`(&Lr^yzmt;AGA z5aFk&5GkMrqP+LTe3%Q(2W6UAq*QT? zHmD8dh7U&REBf zI#zhmD4Gq2q`)Qt$Wt$9p}bzzC-+YD;FLe2LM{oH1Q~4qkMQuWBHVYbLT;|0+gH(u z&6r9KZ}zw?+Pm5R#ojx`iW2QxpUbvw+cx&HZDTLnwr$(CZF4W%w$=Oeckj*ZoRjqF zq&w*^xi9rl^;*9gW7dDpG0bWyOW|*3Kzuxx`Ez5D{2j`(-sx(W*Wi}^hS_KarjsgN zAU+~pYa2M_+L(*!Z8^@T7V^F-6mu8>iBtXnoag}&F5}TJ`Z)Ca7 z{_Jl|&bMEcgO5GSXKFmBX4z+!lK(kOxP2UoPAyZNxxHNxlCZR7 z%k|B{w^c8OJYzAWPLkM^?Y(d6XNn+HM&cevQ%fP%qq!HNF~zPuP%|U{6YE?jDy^+7 zuL-@^gA4)n7@Kp7uS}CRvFkaN229*;uLIbE?JNvKSHmvro%LKx@~0AFn9FHjz`J^r za{^qyd8XzZbuq}sijQ4q6$2OIqNQ@Io^L}n?U;OkkE31;eL$%(Yiuad_gu{LX*FdJ z>pF@>oD>t#$|e9#9d?rrLYJITyU8O=bg@^{_T>h<-`ZH7^b1K~ZXT;A^m={x7d zd^OxG9q=NqMO=uJXeoTm5G{VaiRPC@c?JCg2v|RwWVc3}6|*knSbRE05bH)?k2R{V z#s}V6eY1e|t@bOVzunEsUUg|pf(GT=Sy-V7+*3p}`_sXZIU0$> zmB3G&Yt~17AyK%gA;Y>|sDr@Q!Do!v@tkl>1T728Pd%1y+^U-tXK*}ytT3EUF1`DB z+5M*2&dzT6H^>uyOGBXaXc59aViLokQ??6B8GVp9dQ&^n^H)2Ws11#7~yqMKa{ zL5CtUfy!8}U5|XW^}oZwk&>^GeMhLrT5XW%lnZ1$P*X?H>r_U&=PkIryO1gszH#Uf zD_~6+3h%X^De8FRK5F`pXI0#7ITp0hK2>mO5o?P$s-gQ*tg9Eh=Z=@e&LDy)lJdT)h?xc-eE&_&lYzzluO z`{f*&MkK)46)i^?7cr!0{u@1|by8>v_gG5C01xu>UIaty)9uE9f;;Z_wV1e(N^Ln% zRb~Lu$c>X!Loa<^r^xnRX=AOute3cLV);d1>68lBO9P@}u~-q{`A#T@!oT4ktGoru2yIf?wv+zb(ZW?q7n!}YDQnXc?Z+MVE@^G)fKw%hkk zBH_RNLjmsIye?e^o9xA~+-+SJ3T95B#=p7;6LGOs)Zdy_&f-}lpT|Sd;_?0%RhT4} z*#fq!W4hY+Mx=+_2$D-1x^4*)`lG8Q0y^*?I57N}c?>-Q3v{<_l;M;gFdYZ=MNcd1 z3X$=Nu@~!qbA7Kk0M4io86Hvv<|DQ1m4qw8Frf4B*%_1@55ENUD3ZSwf_t|Z`yq*vduA5Zm>ymYD)Al05>FG)As#o3>Vc5L* zHM}~{Ksh;4c@*v`<5oYVFf4J98*C{s$9)6&_utqo#uI8-Znf*Cq1U;BwrO(LwyD(s$OR zuS@NBPr|zl62a*=4!3|oKh7py5=;USS-1eW#+ z3k@;*`ODoTuoi4o?~jW_MtJig_*k)#nb{oE8Z(xOeJpWP&Y-G8L^_?0!*31@0xl*^ zwHyxxk?sNCc`^GZ*IuN0SZPIEZ5l1N@${(|e3EP%#^fRs(aSB+ol|*6dy`;l<+?S$ z4))HgY21-6d+uFpv#PNv5lRb=?_Z$5P>xmL1CAc)h;5wKiNn(OzqWo~(Y76}9h17Z z;=983I8wf#c8k;u>l%6kfaH#t*SsK*S9sJm>uREdBReyZDBN)JJgG_L<58V?U*a;! zwPwiBjmcVfbR3Dq&Tzjt8o1gUwDz>BNkuz?gtVaeRFYb%^)pV&^I-CQ(Y+t?EJlOc z$bYab?<%>##C%zBHpgw8MVBm=MvatT>zpGeaJ2B3B#$X|AbKW&-Q4-0wOf$CI=+vO z$-15#gtX;UY4wx*8ZpOuxzE9Myj#%j%ml~Y5y;9j!7Mq@mJPZ^r4rFTbGr{6%`>ZR z20yE`6iw}MZC|m(cc6JyV~R_zcfnvdfdu4KpysPKo1;CV>N#1&i-liSg{z)JhK_k( zkGcb!UG1&!jVmnpTc?v*T6d900d-8+h*n)ROR$!0nl-Y&y9~Qzd|CWAe`-8c!QQPU z!`X6fusX3uHf`dqLm)dVr-~a3$KOz>6yMxVr>dN1%-r#yzxz%f>=&Ys22HQYMn4{ja7v0S9YA$$UqNEH@wK0aYqJIP9@GMt4@Z21`vJ>Qp{}|a# zQAff2o}*FsD{`DPtXjvDg(;!7!f2rYnn9Ynf#L9!WrCw)SE9RQw`C4V zJR*?4>g`_Rc#q}j4|%b@m(1BnMrkElhV=75xs2si2JkoSwgGSm8yYgF6Uk?g+}iTw zj+uGIOm5l&bzAoCo2+q*qJIkK($TuGC)j&(q227sEHrD=iGVC@>?2mSrd?Brm1|+3 z%57}a@6QzSd=M>=1|`hj_G*Oec-w=YRF#mknoN ze`p_A)3x>{XedD#O^%bo1M*a8F@u3r5BAOdcCS(?GQKiT$o^on8c;eQAJ_BS=#_@C z_C&xwL;Mk){Fqq&bzc*@TDf`YVJy5Eer+UwUq&C~$g208T%wn~?Plk~sKzi>h8)n1 zt_mS}lq66nQ9sMe`f1#RdqbNgJH$NM^>}Eo@jLGAxu1f!aJ16#_4GV)q7W?j`orK# zi1OTOpDe&x;Eh)MlDP+d9ZYFYfU70HyaKYlJI-in=3X!j{=Vnw+=}!f>?OJFJ3)W< z;8Xu`+b#~{O(Fhl-A)vE$MHTPb+%GZhf!jPEiF&T(ZZDK-Mf`7bh~ID6Md*WOy{>7 zM@{-}4MrRUW8e2fAIs`th)FRE5iQiQ$x$m}A( zqPEM470%Z>AUtdnFh5$i4*#8U^psRIAtcWcOpgySC8-;)(w`m^xtn5`V`#;TVAd!-MclID z*Cmqk*heC|bVeGSC z?k$Pa8P(5Vk0L@kfbM3O(ad4W7FR_Xv@gv@6%Ln)ZSy_ub0}z^8=1+;2-!yg0qrsnUuQ_p~kzdObgL49alor7G?4+3;uyMOy!R;%+ zft`uYGVE#N&)IA?nxiS}_|C}MH%&LHYu6EDvf4e9rzeAi8)D4Q%6~MXkCw$2x9C3= z@@v(n@-wSYJGz9U=&Umy24Ewzd<1r=jC=X!Jqs)=WO+eQJ~$^%3YsYm$w=X+A*$RU z39x&;7QM(KVk~Oj*HllnF*Vk)`&9qDo?SXFz!>!R<)J<$$yO-=x&(lNIs?z*C`u0m zdmM?K>%f6jXU0-lj?rpOIMn)cFgw!VLgE^F7ify9lpa8qSi5e0T;sAlRyZ@`nv`+0J^Asj~VN!OB0 z@tu@xPvNMR40&#zkRiP3Ag@t&Q^603+HPFI@G{GhpXa3JlCjCZ8^0%eT~(Pt$=`0s z@{CM;Mbvr?(X9CF9P=|x59KKG7SY||q|-pNh^~g~V{ZEsnvZa)&K50=>~Zp%OtopZ zvr62QI@{D#8YsvVU0PgAy9{jv-m)}d_Uxrq`$SxQvfIpu-#*kW_h)!ouPn~F(t`Qo zV7@yh;Mjqi%0o+7N~ST?v&tn9?`jyb(s#?Cg-`|Q$wQW*t|a$@Rbz6M#$hlrZ0=^G z#D4O=)nNA%Dfw&bVG~=m-KWQha`BP_Vecf8ZqYCuE=2MJzWsv;f<}G8~6<^eL z%vY*r>t5w^>7{Ym_zC;_Mh&Vvg9%vwCyH1@&%`qvii5gT&TwO%b~vK!CG_kS2rif- zGCK#m6TZ%4+rZaw5~^eO{*wnqV4A9z;vIJtLvCZ^ZpyTS>TBo^*H^kN zk#WcoZ*&o#ZR^XeMgi>m?QB;v?r7o)S50)y#)IRUDfM3av)G9bQ}vUEX3rx0lBsPs z-gdP81BL56sYiKOtjeD<)NRM*4VV&u7mrx3h4%JJek}8 z4Xb#>D(Oz<8<%qW5hOYYp2>d?<&v(Jkvlz6`VR=F*`^4*wV+AC+UlFt zV;BK@Gh9<&yUnsjysUw~FhOB!HwCv1kUMYEl43^i_^OM@Sl2A{XWm`Un!`Fv0iLS; z=`hdPCU^}gbjn_c#rO2)F4rVYxtc6YY(@Tqm5Iou0+PHt+_}J0XcnTnN;Ez-N*Let zIozb`KBCN~T0rvAWXgCI9-MpRAJgxMuY;SVExW@I^u5gmkAe&!^)F)%dXmwV}TR24krMy2x+u87{=E`FL z!k9PcKT3ccSb{ER6YFU#ba>53lLUln5li{JCKm%SU6~Sgo6TAY>AIe5^++OfOV@Vf zcbO49;*$WAP|q4iJAsxy4oA1Rg!GjY_^a7w;XM<6>?A0wSf=A$udfo_CC#+#*J!-5QNBM zghY@8k~r;F1B{0&Kmm-WA|R6C5~o)bK>(#B>Q=L*Im!CSeHr=3-0^V3ak}|g({uJM zICE=GL>x25$8S!c&`yYmppHgfWoJkc3j!?CzfWHQfW4Ix=_KkE8n|s55rYOPI^jzX zLf0|o^Y*yLwq*vJ^ravq*Ihde&Wl3*c% zIzTJc`Z9K4lWX5z>)Q%(9Q+78N_>1g(q}fDvWuX890LVZ8T>FOf%Yx;K;Dc1G7C(2 zpZiZCNNyJ}+zAym&E?q{WI%_$pm|g`P%pt8a=0S^7I7U!6gUvvCo97(+!E-W854pZ zw)wf=(09MgoC}8>1sLEE@QgSHQ1Gx>Tj4GQ3_>sGoQM{@`EG>37vaShAq3D*4y-%~ z$^DIkZ=)}&P=OD*umM9;BsI!Ww8$FpRoo0jo_`1)#7QtRh>*gqo=6!pTJ&tFhd}(y z9Jt%S%}l-ktO+pz3jglTT^$3=0%|CzLHtbbFO+W;FyD!DiZ-hCVNm}81Hj&QC1FDZ zhR=FW=%02Ca+G!CqYqbuP?7#CA6P(FS5!7(!mUljbqilgH;7yODLj8*Nk0=3(qR)n z2zG)2=wpJ<%C7QO>U~%FL-eTJzMU1+E2ySHc>i0mb;4VI06m%|V89`RO~mh>AMV>( zQ~?nX2(baXK5z(65~$nUb2kiw7qjSIFPH^r2*878av+eO_s@@UFnW3ptfR{>{P&v= zRJLU`6{Y#!C$oLuQDx;hT>(8pMh1EDUqV0>L`1ZJNeKyn?>~)EgeY&Vu(!Sr%?d8& zc~iMIccYKBF}&YUemAw8ul_$(&fw8%v_NAo`0-kSqp5#Jl3IsXs9m2YGJ9 z6or>}hG>nnqW+YGsVIxGo-CDOA`nSG+%WeWV z_jd5ryXbsF5!^mL9rc`1U|@fam=z!;2v7q3J%Ib%IK%gEHq=0D#W@BpS`+*S2vD#> zLf18U6HDpunIy2^6kZ^(c1nlMSvhV73iN7 zU_Cb2OvB|!Eqg=|%in0ruOUrb@orl;i){uKreB2?Efk=avEyTI<#oXmhTQVCq;Wu} zS|DrD=}~dmj?ih1R{`qy1%oSJmeaI_PH;|J2GyrrYU|nE&{mi4|7M7Da#gZ!%y%46 zH~!3*G{RY|e*q%lJNUY^l5L?|H?O zwTTOhopNKaFe!)wSjt%MImJ6-Hp28t!G{0wwql*UxT+{ROogQ=MB5k z@t)|O%JSCEpx!8Z_2t`>VsY&v#?8-F@xz@Nb8d!QB9yY%EweW7bBomj+$g!>^^%QZ z&w+tDO!tWQ@j@-f*#ipjYj*+qBpRa={s^d=jBZGx-?jH}O}0uUlom0EN`%urfe-HD zujdN$f`aI7Ag2$kG;)>G27X!r(Pl=S)NL#bAtXbD3QbCax*o!5b<$40k6&8VW}Ow@ zD!HCF^(y!^4a#C()awA<>=)glJYiH=&?i#^3ZruP^mF706}9tSer>k-IVS}!Q=zy{ z5GF&7l%KQ25X@oPiEarjZ$529G!iCqi2_2}tJb#Uqm)(s7KQ*ggsq%4KA*emsLFiJ zRn8BW+K7b^O|aroGVS2y`W6=XGY~2d;}%Z<#;oa8ne}T+L3w4r6vtN-QY_F1wgGQ;+;pVvo6y$?~RL4N}YxLt$OW=yahzTDA4RJE4<76I% zcN8W4jlcKx-;`SEtE!b5yY51p^t6HWKslw{1FzaEdch}ur$70{WP6r_wkh@R7q&Kt z5Oh)Hqy#NI8y>Q?yo`>6FO~&vGbgrNP&&AWs@`B@f;orPujTeLavJa>!P-tpnx6km zS+&z3e+xDbX3@$&HLB?IU>y3jUzgDeM!Kj%dSt8%%k4uK@j$q5?lI-GpQetgW05wm zAAmhQg%FQ~SmVMyk-{ltsH?-4{+_p-Gb$14)qzl|*t@hjbqH)f7Fr?Ah~vqQT~fKv zne5-7NVftM`y!xW6!~6%y1->)Yg4h}Q>cmmsJ}tR{Ye-#25e_3UX)vnOx5|@*L#*4 zCz%G@28~1^LcBpQco{gIg!4{{KydNy-bcJ;1XM_5Br&B@DaV*)w&iWfr$b(H<#~A@ z53~)#My1qV+b#RiH|%Q5hSYAa!3vL4f7JIpW*QM;35C?tb=y{ennXzyC$O3k_U3}e zi9UjTA3W9~;b1scU|UBTY??i=zF@MkpnlixDooZ%CJ!`|ohkAq>}vYcKQvqLwXTLh zL@Tr=D07?vkT>6_d^uV(<^U7yDrSow7VKfD| zW?$yaMs5xtAs?}(I)eD?do<3OW=Uxbpc4jl2u%m6=Wa$wD;}BNaGEyv6wB5TjCEQO zC9e$-eaRzp?gskO>4w+AbGL!qhIW?CThf`Z2&D2QwE|kT=yPVz^(?o=tgbZFeV2p& zO$MAdA}%}YRM++MBAU7=kbe0xZ?U|tn=BH6$u>LRc6vp^zOy(Q)4EhuEg2Q(fJcXV z-=$9Yj2m$#GT#^;rr30T3qVq#^WNs#wABHr`B-{Hy?I_|jh$G_AP{cFrzxuHYJ?LOaKE-ig=h=Bz_#vt#%8 z!}dH%sW@?mUI%NcRy!DWNrOlH#O@{0CX^+1XGv_{rPzP^MJIAu_}9_?Ryr&@L=GvP zS$a060T&I@v{&|=L79n6>aGI1?*psJglZjlw)E|2uEDgM3n9V|E0WwYf`nrvqhH6mtE|` z4f%XQX6 z#gVoTD#95!1$W`FvRt0wTT#>wtQDvcswTJGu)}d86kL)loNZxn64-6D3z~W#wjCg`Oh%>*r}5F7a7I$&jp0w9oP@l64tHGLH7CKn!Sre#16Kw*6AYlLWl?YQ}N{yGgP6JGkZYp>Es$kLpvLI*W9FjqJBW+M|BEHM;_-o4 zLioJ-ED+Gcd*)vI_i>aTVWg_G%p~_Zv8OATtBSMRhx}UzUNc zs=0@v-J-9(G4Dbr|G0Y&D((jlrNXzRl@7B1v)A|36%6s?uKpo3zgzvg#0LC!8>oMg zBKF6J_qXIMOg{;vAZbZ{>bTNGMDZ2!EToD5$K7CLGjeUvl4`eZ z0h($_%hE+pCx*F_S}c3=*+XGn8V_nC@ePP?nJ6PI?xwH&T@QSRHkiRR$M)9uo;ytx zF)Cwq?>?#x)xi0?@9Atr{4t>+xWi+pUOkpI`UmaHUTZ0ZR{o{Da?|AWrW5VP`&raD za0lnRqE6m$Fi>>C79LtuJ1&tP_Ng>tk}E8dchJ38k5c@B!abt)3M~>#I^>uu)=z4! zuyGFq&D%(=MX8OX&a_sAB)pO>N%eZEY2+bF!Fnw#FDS(;br_ycA=q4$)@9>hUUQ@d z-QY=6^U%W5VzK1%SPF*~ua6FAqTO~6D=d)`jd}u4S%5uD*)^BGs_Z(cJC_d}-PQLf ztj(d6_a^`dzi2Qg61%e}Umen}YB1O~Iwx(#ef1Yx6<-N1WZaR@rIy%7uxAg%Ug+z+ zaxO1v){Gcb>~TK;5nz8Abw?MIq%D<+Jv+k|$xXDcJXPa6O;@w{Tw0+`RdEYdX`8sd zxP{9+(dG~1H58Ae$Z2g~S$Nw^IZ}oZ?BuKq(ptxLwrFYu5}egjjD~9MVmCXjsb$6v zqA)>`#g0X#q90N6iecxz+q*d-W8`Mmzys3xl+1T%vuK+xwPigw`Q-HoMIKr0GgQ74 zMrW*-p34ripNX>0^0cjDp@nf_yby{iMdmjDq76;2_J;BOx<_3LAi?RC7&t!4CGNWxY{+N3U__uGUddx9dRP4c%TxoIt^kGVN60e zgyV~l_Ja49?BRHOXz@gJrvozoHOH}=6Ic9XNG9FXBPxRK$2bD9rSaAQyKp_i(>#rG zRRRAjg!_0bk)bX*m93yoXD6B@hnb!n3LnssZGOp~F7md{dx^_cd%;f}>UeSnaPW-s z%cdt`bb{?AXf4gs%0*_o%QGXiia#G(aOa^^=V5OLLUKHBu+3|XN;25BJDjzq#gXbv z=n6^jRPixcguNuoX>k5o))WWreyD!a_@fM=Bv@=41f!e;zY1@;`5EfI)7Itrk3vp~ zk`Q>2hN>BPC0{q|lhP*B*8xIpTw8PXez8X9QkzPIuo%;f*f{J=P7ftLOsF~STr=NV zd%lPq0?&t}PQV)qjy3qn{Gl?7aGEm!^C#^u?81%PXv%g=E$LUMTLs1-vwR6@tR&f? z!tG?uH4J@cL}MfnC?AB+!X679$UGv>Yf@aV&XfZhcFNyWWjk`eG&eu3KVr5gL+3%m zZIZ0^u18CqKVC$l>1W=riLp%&{T@p7i`hPi`RW8l?NA)|ETpy{64UA)fGw+n+pNph zJlDo8A%&bUC;aQu!k#CVn&~+wrT~*Vh9q3Yr4a(bDj7P+2@wE`AD8D8zukYZ;I($9 zE{6O*XIfIS$emyEiFGHFpdf-wUNv1nf^Df={oCL7ghciuE_w(u07)^IOXs|-BPVi$ zUP-&JYP6V}E8i|0nN_&}WL}bAuknzd_Ijk!T#d1JWaf@U4iS;kxw1V!QxzqgV~Y%t zjhliyEI_knx!Uff^@el=Dnl{sWwSOsl{Y()=&0W9I{MF&5<$`xB`|C=-YT-@W*hFV zlZ*&S0=uj??t!U*tFI^GK#zw$+2gJW6N?QiYZd-(JEkZ_a{G3S#vP7fMzaq%P8!G2 z_^@s$6bUvzkKRZ|Pv_S@eptQ#_())z81MuRCef2*>_4fHbw78?U&D=)1-1!Kh6wEs zO9}Tmc+%o(Ac(-s91KziZ1WiRQWlq!Nx*2fYpMA1r*{k}K)x<}oVQZEBs*i*zSuq( ziPcW9<-^mo9;sj%S0@@JcNMKUht(atmyYVLNMwEZ;ob{xqN%#xNj%UqlRv^mB z-WREgH19d=(sF*=GmfMfo}BWJg1%cwcCFb`FAZH;yi(=e5;33g$|!$NK#(a-ui}M7 z#9QCC=p0i&BV^6P$Oobz!Uye1xz#~@j+_93=BhFmg*EHK=?SG!Klp&n*Q?KaKvQD5 zg@NK6{D$92Ud+h(W*~m3D26;KO@bvUsfQqUYUj!2xJdm$yMw28$(pJpuo_=yLS8SU z7=uZ>?IcZiZJv@^n{KDM@N~(He|t|b1>`Vkw&)QEcQ1BB@H#FF)#De?N~t)@MmqLqHQI(SUu9+NjJu0lV+u1JR=@^<*a#xdS+%40Jg2&4*>Wh_>lfd~4H#BnV z`20BSnr=E7F>Q46Vm=$KSBD;{>etimi;i&N_y!CW<+MjPO)e`m7Tk13u-y*{5t{f@ zits0~<*N@$4P<9<0Yb*jsbW@9`x8fQ!o3D!ocEm6li4j@x)Z%Vs@%-K?QRah{WW4& zZZn>WU$B9WYuw^x*1YLqj*vDk6FQy_GTj-;=u@kWU%w9e^93+Zl4IdEZtEEG`GHqDTlRkDva zic1rbSXS8Lt#~ntkrj2FqBG{mzU+tES}r?{&Z6I1wcTfi--4{bg*yB)eoftQYA|7%5r{9k^hqp&)-EeVb+vTC7l?uGkIY&Q^>(A-bv8yYISR; z&IwIlbmlZ)+*s>Vl2A5r^PnUAB)$VKYEDdFKj$j3)tCZa!5(v;;yUJPBbCwNb>ZsG zkWx~Mns9-td)8X0bgcekXJvAtC?)&G1UU>HR`#>33xg_`zf{V5Sklz1s~f zMqNR>hs~?j|9+PEr$(KRC|HGxYwWYmpjV>(*MVR@nF!~2Ua`E_ODTG)D2=?Y0`dOX zw`Dky%E#f6&Uf1T631*lk}w+=;PwDmgFS&+cMh$FGo#?k6yg;$I-}g$f<4f73NG)c<|6YLO;{gB#IaHYGdk?5lPa(r}<@$ zXU=c!?M^Qp4H=DbfK6S*>K+R&J8QZhg3gz{;1?yVO782^%@!V2=EsdG!Y%I5*Z{N+ zb)dr-K1bFCr3d(Fl!mNiXNkVv23;5WRjENah|mN z&8}X@GdRGJ2B);*ir83@S%&pkg*yi#)KE$NVsO|wn$H18v*nxV=B&x|#->TNdbc2- z^?uo7;R9JbsbSLD>T3MZ`t4%j$e9fX#)JW{O0AmSeP#ajvx*0s>2r2B;r_vaNw%dP zSJO~E_0~iy(`vmfQ+Mb!oFZBeC9U+uo;nw?rP2hI!qlWbLSYwa4Vai; zGO&p@Ft8s6g$6#UuAW7qR>z@EmL{#pvJb?I;!!s2j9zJ}95*EoggE-DpY?tRbTAdG6!qZyN?h7j z?N6Qsj<`<)!n2wv?MG^#FUJ9|J?obZp3W8XK)`H{>I4fFN`q8Ey~|ncjB^rg79;E$ zHyCNREdufr;Ds6^m!mj39!~5(9=f3h)nR>_noz?CEDJH{D$a|_LHGpI4|x{F@+cw< zVn>E(Ph?k+^(iE*97q2c#d()cI9>+lBlHR5jkIuft!Tdx{-8W?@=GEY8})s&EPXaQ z!plba(y1*R(0{{=Lx{|pTq z=YK>q|2xnq{{tF??*D`apTr-Ea1An^!%8dJqFGH`njJ|(9wPMn;|UwNN|hHuCTC}= z>kiuS<-(bJUZu4a`Dtt|lh-x1rz!FBqy7_w-q;!me!gD4=;cHN)L6bi~h?R z*-q2b?e17+3y&@pcY_ZZ=7&P7e*oX*_ttlIl8h2G-~3n* za%dX}7M3pDu);Ar*5M2-xF`d35A+yq=p@AO#yUp*y(dU&hkdkJe1}~O_v`~L=%dHR z5WSR-49;R=HLm&4Im^Gc3lr%*`Hpc@HT@-dfAauzzj-uV&Y5I6*WOp{6kCa&l+jcB z6~j#khtRKdNs7W;ygXHTF6B5Uuv4-eZq|Rc)&*!~^P->E67h3^>9ttpR%$jtj|Cul;{9gUmcD+JIj?HoeuiBuxz?!m)DN)0<;-cbSvR>93uH!8d6>6xU3%$VRogC2t zOK8nK>1WG)o)euU&FpC(e3nr$F4|JvlPz(r^c)(W$wilY zknhyx;3wEc)&~I&p^RJ)jszf%$TxflfCj(Tb;5gK?FhG#= z<`%uGm6zX7svzxL^PoVtRS>7#NYK@{8SuI(f7v~aD7BMnclL4IhW7VTM(n*4V7Id( zbGg4XIwUBAiQSOW6~la+%q}d{%fuJ5LG{q1nC00e(Dlr5R~}RJ&U}3XeG} z?FZ>~!unj`dM$p~O^xrTZ-nqM**`}2)_5e{%Z;XW+Q2+2zS-i+R}r-Yf-bPRvd+xz zKyEk{v$WIhaPy=r_*vQxc=;C?u>Ug#?9811J_i5np;Us5PlWgD{=0{Q`+B*!BX(PR z2EgKv%{9C1-~4jZkyGBXo+j}+yqwPJaMVkecy@GzxxT)y;lh{Z=D}9V^vL4n{VNBR ze@y?%0hM0!^sWAQWy^Z5C38a$`R|AMrknup)vwMs-g3C^-NdW*HFz2Bz1<%6!EJ}0 zOw*PT8;dF0HU0{` zE-m>_-(8#-Y+p0G$@kyxEYcnI1S%?OnTz&H={}1-X#_`J;|mSiU?tT*nNsG%F6@eb zb8Q{Hf~hpY%3)|z7@;-|wfc<9${AXN>zX(U0)_>#pd*ow{yM4O0pldX#B_7Q`JtNH zuJs+iK>z+1QvOf?AhfH~O5{~n{XwcLd~5e(vh284emLDrYhK1H4ZUSZZh5j2fC;2Fcw z1l0)~AdCz;hjNp(#2s}%Xg`?4MY$!)Vn^)nCD1EANGzSQhuRm{zu$XK4zR&~FD|m2 z@<$%H#Z{C8l@;d|wiDtahUJ|n1>#5y<3Qw45cJ6>q#8%}7|D8_i#t>X=O^@u;e$ML zaxLdL8*-=Gb1W>HjfV2JS(-ZeCCbN6_1vxyJ{zsb#~#s8kSC_|*FjxB6h-`XQ1}1g zplbg*D9isl2lWqg_2Rw|{MSKw=P>{K$((gPb|II;hdw4%pIPPqK&-1qY!$GYy z9lzt@cM|`@LH*6BhKe*n+5KNsM&rL!X8E60=98&}?TN$F!;s!vt$Moe zx>2RaB6F`lLCw0Ef5p_;TW;aF`!_G>N8JbegP9`k`OH!X z`rzuoJk7~SFr%V|t@NOT>8r$>U2x(pq1dDyMq2CVAM5lhoBvv;!zf~E(iow%4Y&A> z%PSe!KpXtF7Xgh7WI;nCpFpL7TL4Lv2>GR*7b*nb+;(l~91WH5R#x`jc}BnP-qyzy zGopC^w}1*4%1vAycoqV^5Amwc-)Nv_*2Jt8jjK4WhCDsY$ctg-)6L)hdK7bHnEZcK z=D(>7wTJiPKUC&rj<@+gRR-%nRAyw<7bYraau>fJpfvEGkzxJkBr1Zx=LY{D8M6&8 zgsuyQnT5Uy(^X|=J3PPy~mUUK5cYJ z6yJaVwlCz;gF5_Ps3%d$bib!n_7B_<4zveoRL0%}Ps|aYj$6c8eKiW&_k3=hp3~M1 zQr^0^yDzth&d@s(J(^U*Z)#dRxkYaKPwgpRY45C%JC)5J30hj-9QePH)L24jmC2_E zQWa^(KRsKbj6ZfGS~H6ugita&5$?_(e0cC1bg~%i&=`vB*b z0Fs+EF#wkOn05i=d5KCijWL!Ov~iG#33l@@F!@ zmLT{nvE+%X8cP75u+mwr8Pp1GGfD<~axAKAN;kh+v*|+SH1lJWNz?)8%PDOrkBQY# zQiE(MjuUPB6g9V@F-fEf>{t?FG+Ss5_qD4TOE&8y4rzws1;un#gzPMAG-Oxe7Ci(`z{U7_wxY54n&XJ8yE zXVn@6N8Hqo(4gvdVr9|hrUJ`daDcH-dgGpNNZ~FuZKg_FwcASFW!zIwm{m(o?bG!D zfs1Ln13z>`s@}#LRkLukCES2?9j>Z5z3EJI$@}QX?nU9;)u%XU#@N%@Of%|?!jA4L z{TyS`m&5JICx6{IKlie){q#(Izo3nj z#LC?9*QlT4{R^fU|5*nAw`Kap`%SodM)gS!q$!!x6=6m{D;X|bM{h?NTBX`+Mfla|%N6QW z*@h+%Wwd@s0-}Djfa(BnelOSncmlh$SODkcDXne*mH^m5H~=!R@*0)FfC8{Iz;FP| z#D*23A%d`jtUPW>RKutqQtA7K8ia-WFwt0OLh8d>0#k+@Qr*!Y@X$~#hIwEByq7?J zTEKR@hd9tdba0Vy*3C;yfOvi{8bYz-ybpOAKv*D|tgvP1=T*N2qIdt&%sRmJ7wp=2 zjYTj=*7uU%T$dN+f6hH7wtP3v3?Zsf&&5RpKyMQ=_EQY`97OFUUPBD|-oR*zkGkUo z8%UtUh|kJQHi*b(ma&W`U@Jv(^x;SyQ1HV=afhkW!0rMZ^Ey*5K`E+GN6QLXM^`J; zg(bi$)~J$tchl~9N0WB$b?p`{W6;Cis!-Z6Ubv5wO>GYwTUqz%=nF%c5OD+SQ1 zIZC*Sk{Od`nI-L*c?yfX*lI^FLvCV&{9!h95ofYcUsJ2X1!afduvE)lzb&Q|@0u(7 z*Y4dpZ<}I_>>4*$@_V|M1Z5_@$A?lrT2N{!dkeh&R1DEv?^D~^6(zGX)OMPK{&4(} z3=E`xlkJm=@fJa| z8UGK}{xE z++z`q+@h!m`Bs7ul-%JAAP_FYVKBr9;t))@gd`;43J3yT5D-C;YY>K01IQo+0X@uCDjGs^5F+*L?k-_a|{*Opqmc zrkVx))vt0(p$)o=?ym^3hTgj+zgwD4DZa6ZSyVYS=o$6(jq2KFPQnE7Z|<}-1|-1r z4gleBAox)>lNNHC&IWW@G#?V3qK|}O5HJ)L3W8g+=~OOLIwB?i+4W~K@Ki1x(8Zge z5GXXl2!%kRkNty#0G`p|8LeruXb=qH#kZ51*(A4O= z@%i;zqJ%C-@IPYtEyGjdmQ6+UxIMe}UrT%Dm#OL~^8$i)Mqe;Mv?ba7fY`2~o%PrS zI$ARYZTpe$xMx)8`~0p~{zN9J3pJ9(ZAZ$;+}7&OERkRR$vd8!O)8-Eq4f)X*E1ajI+eiWi5|dafu_{IeUCRWnOc zNSuQjgxD8n&u^__ypJ9Jf~D2SpN@+D%xJvd;FGbOxk6l_;tqA(l)EG9DXuC>kqa(J zIghxLQl214fut5NGk4a`T+TO7>u}iXrd)Av?;q}eG}4Hz(O&Jl(+Kis$m;eBz@C|+Lg0kYvAfKN0wx+ zleZ%#^=Ss@cES^?^KlL#8w%U~5Fg^LEg%Qv-n6tk5kUv6hU3mbcpKY*%gh;4;)Y^m zazxG|q-ATm43QO!3GBRTXPuV6HP)%tuLr5IiB(>gP}Z~CA&ZJ^EtWg1-SezK1sbVK za0H6BT#w%>C zy>19z+uC3E$t9bf8Ml|QYNf$tX+ap%tDk>yI;eHtI5_TPvCsKqfZ{I-&8wj`aClD?UdoTMA z{Mqc_%Jf#UrTu4w0(7%n2M$uWZO0SLw@-GB<}$BiL-rr=|B(rH{Lt z)u9Lklo8x5+8fWc0#jNQR7Zr|i+44~79|1pV>SFv+@aB?8|G?I5J{yD32#UBajd4F`pJje;gCf zaqe?!53=sx!^ZBIYr45gaoIP}!w&>+<6xvTrJ$f+Mg{0Z|7O69ZFVR2m75BbL7GY@xO) z^pt&o3O~VuXBocx`g$Ov?sj!2-!c!Ss&Tt>4F4xzoMX5m-R7>7) patch level 1 -L3 programming layer <2023-02-22> -(/usr/local/texlive/2023/texmf-dist/tex/latex/base/article.cls -Document Class: article 2022/07/02 v1.4n Standard LaTeX document class -(/usr/local/texlive/2023/texmf-dist/tex/latex/base/size12.clo -File: size12.clo 2022/07/02 v1.4n Standard LaTeX file (size option) -) -\c@part=\count185 -\c@section=\count186 -\c@subsection=\count187 -\c@subsubsection=\count188 -\c@paragraph=\count189 -\c@subparagraph=\count190 -\c@figure=\count191 -\c@table=\count192 -\abovecaptionskip=\skip48 -\belowcaptionskip=\skip49 -\bibindent=\dimen140 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/amssymb.sty -Package: amssymb 2013/01/14 v3.01 AMS font symbols - -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/amsfonts.sty -Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support -\@emptytoks=\toks16 -\symAMSa=\mathgroup4 -\symAMSb=\mathgroup5 -LaTeX Font Info: Redeclaring math symbol \hbar on input line 98. -LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' -(Font) U/euf/m/n --> U/euf/b/n on input line 106. -)) -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsmath.sty -Package: amsmath 2022/04/08 v2.17n AMS math features -\@mathmargin=\skip50 - -For additional information on amsmath, use the `?' option. -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amstext.sty -Package: amstext 2021/08/26 v2.01 AMS text - -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsgen.sty -File: amsgen.sty 1999/11/30 v2.0 generic functions -\@emptytoks=\toks17 -\ex@=\dimen141 -)) -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsbsy.sty -Package: amsbsy 1999/11/29 v1.2d Bold Symbols -\pmbraise@=\dimen142 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsopn.sty -Package: amsopn 2022/04/08 v2.04 operator names -) -\inf@bad=\count193 -LaTeX Info: Redefining \frac on input line 234. -\uproot@=\count194 -\leftroot@=\count195 -LaTeX Info: Redefining \overline on input line 399. -LaTeX Info: Redefining \colon on input line 410. -\classnum@=\count196 -\DOTSCASE@=\count197 -LaTeX Info: Redefining \ldots on input line 496. -LaTeX Info: Redefining \dots on input line 499. -LaTeX Info: Redefining \cdots on input line 620. -\Mathstrutbox@=\box51 -\strutbox@=\box52 -LaTeX Info: Redefining \big on input line 722. -LaTeX Info: Redefining \Big on input line 723. -LaTeX Info: Redefining \bigg on input line 724. -LaTeX Info: Redefining \Bigg on input line 725. -\big@size=\dimen143 -LaTeX Font Info: Redeclaring font encoding OML on input line 743. -LaTeX Font Info: Redeclaring font encoding OMS on input line 744. -\macc@depth=\count198 -LaTeX Info: Redefining \bmod on input line 905. -LaTeX Info: Redefining \pmod on input line 910. -LaTeX Info: Redefining \smash on input line 940. -LaTeX Info: Redefining \relbar on input line 970. -LaTeX Info: Redefining \Relbar on input line 971. -\c@MaxMatrixCols=\count199 -\dotsspace@=\muskip16 -\c@parentequation=\count266 -\dspbrk@lvl=\count267 -\tag@help=\toks18 -\row@=\count268 -\column@=\count269 -\maxfields@=\count270 -\andhelp@=\toks19 -\eqnshift@=\dimen144 -\alignsep@=\dimen145 -\tagshift@=\dimen146 -\tagwidth@=\dimen147 -\totwidth@=\dimen148 -\lineht@=\dimen149 -\@envbody=\toks20 -\multlinegap=\skip51 -\multlinetaggap=\skip52 -\mathdisplay@stack=\toks21 -LaTeX Info: Redefining \[ on input line 2953. -LaTeX Info: Redefining \] on input line 2954. -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/amscls/amsthm.sty -Package: amsthm 2020/05/29 v2.20.6 -\thm@style=\toks22 -\thm@bodyfont=\toks23 -\thm@headfont=\toks24 -\thm@notefont=\toks25 -\thm@headpunct=\toks26 -\thm@preskip=\skip53 -\thm@postskip=\skip54 -\thm@headsep=\skip55 -\dth@everypar=\toks27 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/graphicx.sty -Package: graphicx 2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR) - -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/keyval.sty -Package: keyval 2022/05/29 v1.15 key=value parser (DPC) -\KV@toks@=\toks28 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/graphics.sty -Package: graphics 2022/03/10 v1.4e Standard LaTeX Graphics (DPC,SPQR) - -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/trig.sty -Package: trig 2021/08/11 v1.11 sin cos tan (DPC) -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics-cfg/graphics.cfg -File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration -) -Package graphics Info: Driver file: pdftex.def on input line 107. - -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics-def/pdftex.def -File: pdftex.def 2022/09/22 v1.2b Graphics/color driver for pdftex -)) -\Gin@req@height=\dimen150 -\Gin@req@width=\dimen151 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/tcolorbox/tcolorbox.sty -Package: tcolorbox 2023/02/12 version 6.0.1 text color boxes - -(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty -(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.te -x -\pgfutil@everybye=\toks29 -\pgfutil@tempdima=\dimen152 -\pgfutil@tempdimb=\dimen153 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def -\pgfutil@abb=\box53 -) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/pgf.revision.tex) -Package: pgfrcs 2023-01-15 v3.1.10 (3.1.10) -)) -Package: pgf 2023-01-15 v3.1.10 (3.1.10) - -(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty -(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex -Package: pgfsys 2023-01-15 v3.1.10 (3.1.10) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex -\pgfkeys@pathtoks=\toks30 -\pgfkeys@temptoks=\toks31 - -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfkeyslibraryfil -tered.code.tex -\pgfkeys@tmptoks=\toks32 -)) -\pgf@x=\dimen154 -\pgf@y=\dimen155 -\pgf@xa=\dimen156 -\pgf@ya=\dimen157 -\pgf@xb=\dimen158 -\pgf@yb=\dimen159 -\pgf@xc=\dimen160 -\pgf@yc=\dimen161 -\pgf@xd=\dimen162 -\pgf@yd=\dimen163 -\w@pgf@writea=\write3 -\r@pgf@reada=\read2 -\c@pgf@counta=\count271 -\c@pgf@countb=\count272 -\c@pgf@countc=\count273 -\c@pgf@countd=\count274 -\t@pgf@toka=\toks33 -\t@pgf@tokb=\toks34 -\t@pgf@tokc=\toks35 -\pgf@sys@id@count=\count275 - -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg -File: pgf.cfg 2023-01-15 v3.1.10 (3.1.10) -) -Driver file for pgf: pgfsys-pdftex.def - -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.d -ef -File: pgfsys-pdftex.def 2023-01-15 v3.1.10 (3.1.10) - -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-p -df.def -File: pgfsys-common-pdf.def 2023-01-15 v3.1.10 (3.1.10) -))) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath. -code.tex -File: pgfsyssoftpath.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgfsyssoftpath@smallbuffer@items=\count276 -\pgfsyssoftpath@bigbuffer@items=\count277 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol. -code.tex -File: pgfsysprotocol.code.tex 2023-01-15 v3.1.10 (3.1.10) -)) (/usr/local/texlive/2023/texmf-dist/tex/latex/xcolor/xcolor.sty -Package: xcolor 2022/06/12 v2.14 LaTeX color extensions (UK) - -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics-cfg/color.cfg -File: color.cfg 2016/01/02 v1.6 sample color configuration -) -Package xcolor Info: Driver file: pdftex.def on input line 227. - -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/mathcolor.ltx) -Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1353. -Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1357. -Package xcolor Info: Model `RGB' extended on input line 1369. -Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1371. -Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1372. -Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1373. -Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1374. -Package xcolor Info: Model `Gray' substituted by `gray' on input line 1375. -Package xcolor Info: Model `wave' substituted by `hsb' on input line 1376. -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex -Package: pgfcore 2023-01-15 v3.1.10 (3.1.10) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex -\pgfmath@dimen=\dimen164 -\pgfmath@count=\count278 -\pgfmath@box=\box54 -\pgfmath@toks=\toks36 -\pgfmath@stack@operand=\toks37 -\pgfmath@stack@operation=\toks38 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code. -tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic -.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigo -nometric.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.rando -m.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.compa -rison.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base. -code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round -.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc. -code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integ -erarithmetics.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex -\c@pgfmathroundto@lastzeros=\count279 -)) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfint.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.co -de.tex -File: pgfcorepoints.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgf@picminx=\dimen165 -\pgf@picmaxx=\dimen166 -\pgf@picminy=\dimen167 -\pgf@picmaxy=\dimen168 -\pgf@pathminx=\dimen169 -\pgf@pathmaxx=\dimen170 -\pgf@pathminy=\dimen171 -\pgf@pathmaxy=\dimen172 -\pgf@xx=\dimen173 -\pgf@xy=\dimen174 -\pgf@yx=\dimen175 -\pgf@yy=\dimen176 -\pgf@zx=\dimen177 -\pgf@zy=\dimen178 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconst -ruct.code.tex -File: pgfcorepathconstruct.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgf@path@lastx=\dimen179 -\pgf@path@lasty=\dimen180 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage -.code.tex -File: pgfcorepathusage.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgf@shorten@end@additional=\dimen181 -\pgf@shorten@start@additional=\dimen182 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.co -de.tex -File: pgfcorescopes.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgfpic=\box55 -\pgf@hbox=\box56 -\pgf@layerbox@main=\box57 -\pgf@picture@serial@count=\count280 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicst -ate.code.tex -File: pgfcoregraphicstate.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgflinewidth=\dimen183 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransform -ations.code.tex -File: pgfcoretransformations.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgf@pt@x=\dimen184 -\pgf@pt@y=\dimen185 -\pgf@pt@temp=\dimen186 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.cod -e.tex -File: pgfcorequick.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.c -ode.tex -File: pgfcoreobjects.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathproce -ssing.code.tex -File: pgfcorepathprocessing.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.co -de.tex -File: pgfcorearrows.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgfarrowsep=\dimen187 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.cod -e.tex -File: pgfcoreshade.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgf@max=\dimen188 -\pgf@sys@shading@range@num=\count281 -\pgf@shadingcount=\count282 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.cod -e.tex -File: pgfcoreimage.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal. -code.tex -File: pgfcoreexternal.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgfexternal@startupbox=\box58 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.co -de.tex -File: pgfcorelayers.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretranspare -ncy.code.tex -File: pgfcoretransparency.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns. -code.tex -File: pgfcorepatterns.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code. -tex -File: pgfcorerdf.code.tex 2023-01-15 v3.1.10 (3.1.10) -))) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.cod -e.tex -File: pgfmoduleshapes.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgfnodeparttextbox=\box59 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code. -tex -File: pgfmoduleplot.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version --0-65.sty -Package: pgfcomp-version-0-65 2023-01-15 v3.1.10 (3.1.10) -\pgf@nodesepstart=\dimen189 -\pgf@nodesepend=\dimen190 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version --1-18.sty -Package: pgfcomp-version-1-18 2023-01-15 v3.1.10 (3.1.10) -)) (/usr/local/texlive/2023/texmf-dist/tex/latex/tools/verbatim.sty -Package: verbatim 2022-07-02 v1.5u LaTeX2e package for verbatim enhancements -\every@verbatim=\toks39 -\verbatim@line=\toks40 -\verbatim@in@stream=\read3 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/environ/environ.sty -Package: environ 2014/05/04 v0.3 A new way to define environments - -(/usr/local/texlive/2023/texmf-dist/tex/latex/trimspaces/trimspaces.sty -Package: trimspaces 2009/09/17 v1.1 Trim spaces around a token list -)) -(/usr/local/texlive/2023/texmf-dist/tex/latex/etoolbox/etoolbox.sty -Package: etoolbox 2020/10/05 v2.5k e-TeX tools for LaTeX (JAW) -\etb@tempcnta=\count283 -) -\tcb@titlebox=\box60 -\tcb@upperbox=\box61 -\tcb@lowerbox=\box62 -\tcb@phantombox=\box63 -\c@tcbbreakpart=\count284 -\c@tcblayer=\count285 -\c@tcolorbox@number=\count286 -\tcb@temp=\box64 -\tcb@temp=\box65 -\tcb@temp=\box66 -\tcb@temp=\box67 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/arydshln/arydshln.sty -Package: arydshln 2019/02/21 v1.76 -\dashlinedash=\dimen191 -\dashlinegap=\dimen192 -\adl@box=\box68 -\adl@height=\dimen193 -\adl@heightsave=\dimen194 -\adl@depth=\dimen195 -\adl@depthsave=\dimen196 -\adl@finaldepth=\dimen197 -\adl@columns=\count287 -\adl@ncol=\count288 -\adl@currentcolumn=\count289 -\adl@currentcolumnsave=\count290 -\adl@totalheight=\count291 -\adl@totalheightsave=\count292 -\adl@dash=\count293 -\adl@gap=\count294 -\adl@cla=\count295 -\adl@clb=\count296 -\adl@everyvbox=\toks41 -\adl@LTpagetotal=\dimen198 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def -File: l3backend-pdftex.def 2023-01-16 L3 backend support: PDF output (pdfTeX) -\l__color_backend_stack_int=\count297 -\l__pdf_internal_box=\box69 -) -(./sqrt2.aux) -\openout1 = `sqrt2.aux'. - -LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 13. -LaTeX Font Info: ... okay on input line 13. -LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 13. -LaTeX Font Info: ... okay on input line 13. -LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 13. -LaTeX Font Info: ... okay on input line 13. -LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 13. -LaTeX Font Info: ... okay on input line 13. -LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 13. -LaTeX Font Info: ... okay on input line 13. -LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 13. -LaTeX Font Info: ... okay on input line 13. -LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 13. -LaTeX Font Info: ... okay on input line 13. - -(/usr/local/texlive/2023/texmf-dist/tex/context/base/mkii/supp-pdf.mkii -[Loading MPS to PDF converter (version 2006.09.02).] -\scratchcounter=\count298 -\scratchdimen=\dimen199 -\scratchbox=\box70 -\nofMPsegments=\count299 -\nofMParguments=\count300 -\everyMPshowfont=\toks42 -\MPscratchCnt=\count301 -\MPscratchDim=\dimen256 -\MPnumerator=\count302 -\makeMPintoPDFobject=\count303 -\everyMPtoPDFconversion=\toks43 -) (/usr/local/texlive/2023/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty -Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf -Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 -85. - -(/usr/local/texlive/2023/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg -File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv -e -)) -LaTeX Font Info: Trying to load font information for U+msa on input line 20. - - -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/umsa.fd -File: umsa.fd 2013/01/14 v3.01 AMS symbols A -) -LaTeX Font Info: Trying to load font information for U+msb on input line 20. - - -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/umsb.fd -File: umsb.fd 2013/01/14 v3.01 AMS symbols B -) -Overfull \hbox (64.19492pt too wide) in paragraph at lines 20--77 - [] - [] - -[1 - -{/usr/local/texlive/2023/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] -Overfull \vbox (114.69951pt too high) has occurred while \output is active [] - - -[2] -Overfull \vbox (114.69951pt too high) has occurred while \output is active [] - - -[3] [4] -Overfull \hbox (12.27611pt too wide) in paragraph at lines 162--209 - [] - [] - -[5] [6] [7] -Overfull \hbox (10.52342pt too wide) in paragraph at lines 230--263 - [] - [] - - -Overfull \hbox (10.52342pt too wide) in paragraph at lines 269--302 - [] - [] - -[8] -Overfull \hbox (17.17625pt too wide) in paragraph at lines 307--336 - [] - [] - -[9] [10] -Overfull \hbox (32.42345pt too wide) in paragraph at lines 348--381 - [] - [] - -[11] (./sqrt2.aux) ) -Here is how much of TeX's memory you used: - 13106 strings out of 476025 - 263974 string characters out of 5790017 - 1878388 words of memory out of 5000000 - 33358 multiletter control sequences out of 15000+600000 - 518162 words of font info for 54 fonts, out of 8000000 for 9000 - 1141 hyphenation exceptions out of 8191 - 83i,12n,89p,439b,249s stack positions out of 10000i,1000n,20000p,200000b,200000s - -Output written on sqrt2.pdf (11 pages, 105524 bytes). -PDF statistics: - 83 PDF objects out of 1000 (max. 8388607) - 53 compressed objects within 1 object stream - 0 named destinations out of 1000 (max. 500000) - 13 words of extra memory for PDF output out of 10000 (max. 10000000) - diff --git a/docs/divsqrt_tex/sqrt2.pdf b/docs/divsqrt_tex/sqrt2.pdf deleted file mode 100644 index b56f42af856d8a6b57196bd795082a249b7b80f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 105524 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

_258BSQ?NgZX(QJAV#=nnMt=AS$OA_9 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 fHyDxVpskXm(%F3!4^Y)5qKJz}Q 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 YqLPXtU~C#1m>L+Fa;d7i`nz!f0RNQ5bpQYW diff --git a/docs/divsqrt_tex/sqrt4.aux b/docs/divsqrt_tex/sqrt4.aux deleted file mode 100644 index 4089a83c5..000000000 --- a/docs/divsqrt_tex/sqrt4.aux +++ /dev/null @@ -1,2 +0,0 @@ -\relax -\gdef \@abspage@last{4} diff --git a/docs/divsqrt_tex/sqrt4.log b/docs/divsqrt_tex/sqrt4.log deleted file mode 100644 index 433066027..000000000 --- a/docs/divsqrt_tex/sqrt4.log +++ /dev/null @@ -1,534 +0,0 @@ -This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023) (preloaded format=pdflatex 2023.7.19) 20 AUG 2023 13:11 -entering extended mode - restricted \write18 enabled. - %&-line parsing enabled. -**sqrt4.tex -(./sqrt4.tex -LaTeX2e <2022-11-01> patch level 1 -L3 programming layer <2023-02-22> -(/usr/local/texlive/2023/texmf-dist/tex/latex/base/article.cls -Document Class: article 2022/07/02 v1.4n Standard LaTeX document class -(/usr/local/texlive/2023/texmf-dist/tex/latex/base/size12.clo -File: size12.clo 2022/07/02 v1.4n Standard LaTeX file (size option) -) -\c@part=\count185 -\c@section=\count186 -\c@subsection=\count187 -\c@subsubsection=\count188 -\c@paragraph=\count189 -\c@subparagraph=\count190 -\c@figure=\count191 -\c@table=\count192 -\abovecaptionskip=\skip48 -\belowcaptionskip=\skip49 -\bibindent=\dimen140 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/amssymb.sty -Package: amssymb 2013/01/14 v3.01 AMS font symbols - -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/amsfonts.sty -Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support -\@emptytoks=\toks16 -\symAMSa=\mathgroup4 -\symAMSb=\mathgroup5 -LaTeX Font Info: Redeclaring math symbol \hbar on input line 98. -LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' -(Font) U/euf/m/n --> U/euf/b/n on input line 106. -)) -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsmath.sty -Package: amsmath 2022/04/08 v2.17n AMS math features -\@mathmargin=\skip50 - -For additional information on amsmath, use the `?' option. -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amstext.sty -Package: amstext 2021/08/26 v2.01 AMS text - -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsgen.sty -File: amsgen.sty 1999/11/30 v2.0 generic functions -\@emptytoks=\toks17 -\ex@=\dimen141 -)) -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsbsy.sty -Package: amsbsy 1999/11/29 v1.2d Bold Symbols -\pmbraise@=\dimen142 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsmath/amsopn.sty -Package: amsopn 2022/04/08 v2.04 operator names -) -\inf@bad=\count193 -LaTeX Info: Redefining \frac on input line 234. -\uproot@=\count194 -\leftroot@=\count195 -LaTeX Info: Redefining \overline on input line 399. -LaTeX Info: Redefining \colon on input line 410. -\classnum@=\count196 -\DOTSCASE@=\count197 -LaTeX Info: Redefining \ldots on input line 496. -LaTeX Info: Redefining \dots on input line 499. -LaTeX Info: Redefining \cdots on input line 620. -\Mathstrutbox@=\box51 -\strutbox@=\box52 -LaTeX Info: Redefining \big on input line 722. -LaTeX Info: Redefining \Big on input line 723. -LaTeX Info: Redefining \bigg on input line 724. -LaTeX Info: Redefining \Bigg on input line 725. -\big@size=\dimen143 -LaTeX Font Info: Redeclaring font encoding OML on input line 743. -LaTeX Font Info: Redeclaring font encoding OMS on input line 744. -\macc@depth=\count198 -LaTeX Info: Redefining \bmod on input line 905. -LaTeX Info: Redefining \pmod on input line 910. -LaTeX Info: Redefining \smash on input line 940. -LaTeX Info: Redefining \relbar on input line 970. -LaTeX Info: Redefining \Relbar on input line 971. -\c@MaxMatrixCols=\count199 -\dotsspace@=\muskip16 -\c@parentequation=\count266 -\dspbrk@lvl=\count267 -\tag@help=\toks18 -\row@=\count268 -\column@=\count269 -\maxfields@=\count270 -\andhelp@=\toks19 -\eqnshift@=\dimen144 -\alignsep@=\dimen145 -\tagshift@=\dimen146 -\tagwidth@=\dimen147 -\totwidth@=\dimen148 -\lineht@=\dimen149 -\@envbody=\toks20 -\multlinegap=\skip51 -\multlinetaggap=\skip52 -\mathdisplay@stack=\toks21 -LaTeX Info: Redefining \[ on input line 2953. -LaTeX Info: Redefining \] on input line 2954. -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/amscls/amsthm.sty -Package: amsthm 2020/05/29 v2.20.6 -\thm@style=\toks22 -\thm@bodyfont=\toks23 -\thm@headfont=\toks24 -\thm@notefont=\toks25 -\thm@headpunct=\toks26 -\thm@preskip=\skip53 -\thm@postskip=\skip54 -\thm@headsep=\skip55 -\dth@everypar=\toks27 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/graphicx.sty -Package: graphicx 2021/09/16 v1.2d Enhanced LaTeX Graphics (DPC,SPQR) - -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/keyval.sty -Package: keyval 2022/05/29 v1.15 key=value parser (DPC) -\KV@toks@=\toks28 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/graphics.sty -Package: graphics 2022/03/10 v1.4e Standard LaTeX Graphics (DPC,SPQR) - -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/trig.sty -Package: trig 2021/08/11 v1.11 sin cos tan (DPC) -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics-cfg/graphics.cfg -File: graphics.cfg 2016/06/04 v1.11 sample graphics configuration -) -Package graphics Info: Driver file: pdftex.def on input line 107. - -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics-def/pdftex.def -File: pdftex.def 2022/09/22 v1.2b Graphics/color driver for pdftex -)) -\Gin@req@height=\dimen150 -\Gin@req@width=\dimen151 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/tcolorbox/tcolorbox.sty -Package: tcolorbox 2023/02/12 version 6.0.1 text color boxes - -(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/basiclayer/pgf.sty -(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/utilities/pgfrcs.sty -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.te -x -\pgfutil@everybye=\toks29 -\pgfutil@tempdima=\dimen152 -\pgfutil@tempdimb=\dimen153 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def -\pgfutil@abb=\box53 -) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/pgf.revision.tex) -Package: pgfrcs 2023-01-15 v3.1.10 (3.1.10) -)) -Package: pgf 2023-01-15 v3.1.10 (3.1.10) - -(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/basiclayer/pgfcore.sty -(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex -Package: pgfsys 2023-01-15 v3.1.10 (3.1.10) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex -\pgfkeys@pathtoks=\toks30 -\pgfkeys@temptoks=\toks31 - -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/utilities/pgfkeyslibraryfil -tered.code.tex -\pgfkeys@tmptoks=\toks32 -)) -\pgf@x=\dimen154 -\pgf@y=\dimen155 -\pgf@xa=\dimen156 -\pgf@ya=\dimen157 -\pgf@xb=\dimen158 -\pgf@yb=\dimen159 -\pgf@xc=\dimen160 -\pgf@yc=\dimen161 -\pgf@xd=\dimen162 -\pgf@yd=\dimen163 -\w@pgf@writea=\write3 -\r@pgf@reada=\read2 -\c@pgf@counta=\count271 -\c@pgf@countb=\count272 -\c@pgf@countc=\count273 -\c@pgf@countd=\count274 -\t@pgf@toka=\toks33 -\t@pgf@tokb=\toks34 -\t@pgf@tokc=\toks35 -\pgf@sys@id@count=\count275 - -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg -File: pgf.cfg 2023-01-15 v3.1.10 (3.1.10) -) -Driver file for pgf: pgfsys-pdftex.def - -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.d -ef -File: pgfsys-pdftex.def 2023-01-15 v3.1.10 (3.1.10) - -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-p -df.def -File: pgfsys-common-pdf.def 2023-01-15 v3.1.10 (3.1.10) -))) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath. -code.tex -File: pgfsyssoftpath.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgfsyssoftpath@smallbuffer@items=\count276 -\pgfsyssoftpath@bigbuffer@items=\count277 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol. -code.tex -File: pgfsysprotocol.code.tex 2023-01-15 v3.1.10 (3.1.10) -)) (/usr/local/texlive/2023/texmf-dist/tex/latex/xcolor/xcolor.sty -Package: xcolor 2022/06/12 v2.14 LaTeX color extensions (UK) - -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics-cfg/color.cfg -File: color.cfg 2016/01/02 v1.6 sample color configuration -) -Package xcolor Info: Driver file: pdftex.def on input line 227. - -(/usr/local/texlive/2023/texmf-dist/tex/latex/graphics/mathcolor.ltx) -Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1353. -Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1357. -Package xcolor Info: Model `RGB' extended on input line 1369. -Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1371. -Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1372. -Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1373. -Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1374. -Package xcolor Info: Model `Gray' substituted by `gray' on input line 1375. -Package xcolor Info: Model `wave' substituted by `hsb' on input line 1376. -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcore.code.tex -Package: pgfcore 2023-01-15 v3.1.10 (3.1.10) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex -\pgfmath@dimen=\dimen164 -\pgfmath@count=\count278 -\pgfmath@box=\box54 -\pgfmath@toks=\toks36 -\pgfmath@stack@operand=\toks37 -\pgfmath@stack@operation=\toks38 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code. -tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic -.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigo -nometric.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.rando -m.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.compa -rison.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base. -code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round -.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc. -code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integ -erarithmetics.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex -\c@pgfmathroundto@lastzeros=\count279 -)) (/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/math/pgfint.code.tex) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.co -de.tex -File: pgfcorepoints.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgf@picminx=\dimen165 -\pgf@picmaxx=\dimen166 -\pgf@picminy=\dimen167 -\pgf@picmaxy=\dimen168 -\pgf@pathminx=\dimen169 -\pgf@pathmaxx=\dimen170 -\pgf@pathminy=\dimen171 -\pgf@pathmaxy=\dimen172 -\pgf@xx=\dimen173 -\pgf@xy=\dimen174 -\pgf@yx=\dimen175 -\pgf@yy=\dimen176 -\pgf@zx=\dimen177 -\pgf@zy=\dimen178 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathconst -ruct.code.tex -File: pgfcorepathconstruct.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgf@path@lastx=\dimen179 -\pgf@path@lasty=\dimen180 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathusage -.code.tex -File: pgfcorepathusage.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgf@shorten@end@additional=\dimen181 -\pgf@shorten@start@additional=\dimen182 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.co -de.tex -File: pgfcorescopes.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgfpic=\box55 -\pgf@hbox=\box56 -\pgf@layerbox@main=\box57 -\pgf@picture@serial@count=\count280 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoregraphicst -ate.code.tex -File: pgfcoregraphicstate.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgflinewidth=\dimen183 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretransform -ations.code.tex -File: pgfcoretransformations.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgf@pt@x=\dimen184 -\pgf@pt@y=\dimen185 -\pgf@pt@temp=\dimen186 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorequick.cod -e.tex -File: pgfcorequick.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreobjects.c -ode.tex -File: pgfcoreobjects.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepathproce -ssing.code.tex -File: pgfcorepathprocessing.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorearrows.co -de.tex -File: pgfcorearrows.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgfarrowsep=\dimen187 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.cod -e.tex -File: pgfcoreshade.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgf@max=\dimen188 -\pgf@sys@shading@range@num=\count281 -\pgf@shadingcount=\count282 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreimage.cod -e.tex -File: pgfcoreimage.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal. -code.tex -File: pgfcoreexternal.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgfexternal@startupbox=\box58 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorelayers.co -de.tex -File: pgfcorelayers.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcoretranspare -ncy.code.tex -File: pgfcoretransparency.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepatterns. -code.tex -File: pgfcorepatterns.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/basiclayer/pgfcorerdf.code. -tex -File: pgfcorerdf.code.tex 2023-01-15 v3.1.10 (3.1.10) -))) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.cod -e.tex -File: pgfmoduleshapes.code.tex 2023-01-15 v3.1.10 (3.1.10) -\pgfnodeparttextbox=\box59 -) -(/usr/local/texlive/2023/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code. -tex -File: pgfmoduleplot.code.tex 2023-01-15 v3.1.10 (3.1.10) -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version --0-65.sty -Package: pgfcomp-version-0-65 2023-01-15 v3.1.10 (3.1.10) -\pgf@nodesepstart=\dimen189 -\pgf@nodesepend=\dimen190 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/pgf/compatibility/pgfcomp-version --1-18.sty -Package: pgfcomp-version-1-18 2023-01-15 v3.1.10 (3.1.10) -)) (/usr/local/texlive/2023/texmf-dist/tex/latex/tools/verbatim.sty -Package: verbatim 2022-07-02 v1.5u LaTeX2e package for verbatim enhancements -\every@verbatim=\toks39 -\verbatim@line=\toks40 -\verbatim@in@stream=\read3 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/environ/environ.sty -Package: environ 2014/05/04 v0.3 A new way to define environments - -(/usr/local/texlive/2023/texmf-dist/tex/latex/trimspaces/trimspaces.sty -Package: trimspaces 2009/09/17 v1.1 Trim spaces around a token list -)) -(/usr/local/texlive/2023/texmf-dist/tex/latex/etoolbox/etoolbox.sty -Package: etoolbox 2020/10/05 v2.5k e-TeX tools for LaTeX (JAW) -\etb@tempcnta=\count283 -) -\tcb@titlebox=\box60 -\tcb@upperbox=\box61 -\tcb@lowerbox=\box62 -\tcb@phantombox=\box63 -\c@tcbbreakpart=\count284 -\c@tcblayer=\count285 -\c@tcolorbox@number=\count286 -\tcb@temp=\box64 -\tcb@temp=\box65 -\tcb@temp=\box66 -\tcb@temp=\box67 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/arydshln/arydshln.sty -Package: arydshln 2019/02/21 v1.76 -\dashlinedash=\dimen191 -\dashlinegap=\dimen192 -\adl@box=\box68 -\adl@height=\dimen193 -\adl@heightsave=\dimen194 -\adl@depth=\dimen195 -\adl@depthsave=\dimen196 -\adl@finaldepth=\dimen197 -\adl@columns=\count287 -\adl@ncol=\count288 -\adl@currentcolumn=\count289 -\adl@currentcolumnsave=\count290 -\adl@totalheight=\count291 -\adl@totalheightsave=\count292 -\adl@dash=\count293 -\adl@gap=\count294 -\adl@cla=\count295 -\adl@clb=\count296 -\adl@everyvbox=\toks41 -\adl@LTpagetotal=\dimen198 -) -(/usr/local/texlive/2023/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def -File: l3backend-pdftex.def 2023-01-16 L3 backend support: PDF output (pdfTeX) -\l__color_backend_stack_int=\count297 -\l__pdf_internal_box=\box69 -) -No file sqrt4.aux. -\openout1 = `sqrt4.aux'. - -LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 15. -LaTeX Font Info: ... okay on input line 15. -LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 15. -LaTeX Font Info: ... okay on input line 15. -LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 15. -LaTeX Font Info: ... okay on input line 15. -LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 15. -LaTeX Font Info: ... okay on input line 15. -LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 15. -LaTeX Font Info: ... okay on input line 15. -LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 15. -LaTeX Font Info: ... okay on input line 15. -LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 15. -LaTeX Font Info: ... okay on input line 15. -(/usr/local/texlive/2023/texmf-dist/tex/context/base/mkii/supp-pdf.mkii -[Loading MPS to PDF converter (version 2006.09.02).] -\scratchcounter=\count298 -\scratchdimen=\dimen199 -\scratchbox=\box70 -\nofMPsegments=\count299 -\nofMParguments=\count300 -\everyMPshowfont=\toks42 -\MPscratchCnt=\count301 -\MPscratchDim=\dimen256 -\MPnumerator=\count302 -\makeMPintoPDFobject=\count303 -\everyMPtoPDFconversion=\toks43 -) (/usr/local/texlive/2023/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty -Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf -Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 4 -85. - -(/usr/local/texlive/2023/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg -File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv -e -)) -LaTeX Font Info: Trying to load font information for U+msa on input line 24. - - -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/umsa.fd -File: umsa.fd 2013/01/14 v3.01 AMS symbols A -) -LaTeX Font Info: Trying to load font information for U+msb on input line 24. - - -(/usr/local/texlive/2023/texmf-dist/tex/latex/amsfonts/umsb.fd -File: umsb.fd 2013/01/14 v3.01 AMS symbols B -) -Overfull \hbox (90.5419pt too wide) in paragraph at lines 24--80 - [] - [] - -[1 - -{/usr/local/texlive/2023/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] -Overfull \vbox (101.09952pt too high) has occurred while \output is active [] - - -[2] -Overfull \hbox (67.0273pt too wide) in paragraph at lines 88--144 - [] - [] - -[3] -Overfull \vbox (101.09952pt too high) has occurred while \output is active [] - - -[4] (./sqrt4.aux) ) -Here is how much of TeX's memory you used: - 13098 strings out of 476025 - 263892 string characters out of 5790017 - 1878388 words of memory out of 5000000 - 33355 multiletter control sequences out of 15000+600000 - 517233 words of font info for 51 fonts, out of 8000000 for 9000 - 1141 hyphenation exceptions out of 8191 - 83i,12n,89p,418b,230s stack positions out of 10000i,1000n,20000p,200000b,200000s - -Output written on sqrt4.pdf (4 pages, 75105 bytes). -PDF statistics: - 50 PDF objects out of 1000 (max. 8388607) - 31 compressed objects within 1 object stream - 0 named destinations out of 1000 (max. 500000) - 13 words of extra memory for PDF output out of 10000 (max. 10000000) - diff --git a/docs/divsqrt_tex/sqrt4.pdf b/docs/divsqrt_tex/sqrt4.pdf deleted file mode 100644 index 363d6eca30a77ad01431213a52d28d6e50c834ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75105 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

SYLSG`agl~D_Ln6yU!la_r8a)U>itgnUP1o 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%0D{Az47yvbL_8*&W&#u3*>R%Vj6E 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 From 999a50d9ee543cf02dae90d3dcf88ddc7d80ee44 Mon Sep 17 00:00:00 2001 From: VictorClements <104516656+VictorClements@users.noreply.github.com> Date: Tue, 3 Oct 2023 07:32:45 -0700 Subject: [PATCH 26/32] Update Makefile "make riscof" and "make testfloat" were run in backward order, leading to some of the make issues when a user is setting up for the very first time. --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 8336fe017..2c445fc46 100644 --- a/Makefile +++ b/Makefile @@ -4,8 +4,8 @@ all: make install - make testfloat - make riscof + make riscof + make testfloat make verify make coverage make benchmarks From 3156d5ababd6de4d8398f2635536892145bed72c Mon Sep 17 00:00:00 2001 From: Ross Thompson Date: Tue, 3 Oct 2023 17:37:13 -0500 Subject: [PATCH 27/32] Somehow the arty A7 was missing the update for the console baud rate setting. --- linux/devicetree/wally-artya7.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linux/devicetree/wally-artya7.dts b/linux/devicetree/wally-artya7.dts index 57b9599e5..4206c7804 100644 --- a/linux/devicetree/wally-artya7.dts +++ b/linux/devicetree/wally-artya7.dts @@ -9,7 +9,7 @@ chosen { linux,initrd-end = <0x85c43a00>; linux,initrd-start = <0x84200000>; - bootargs = "root=/dev/vda ro"; + bootargs = "root=/dev/vda ro console=ttyS0,115200"; stdout-path = "/soc/uart@10000000"; }; From d526d288048b0635a4ca1849edc8a05042860c02 Mon Sep 17 00:00:00 2001 From: David Harris Date: Wed, 4 Oct 2023 09:34:28 -0700 Subject: [PATCH 28/32] Added MENVCFG.HADE bit and updated SVADU to depend on this bit --- src/ifu/ifu.sv | 27 +++++------ src/lsu/lsu.sv | 5 +- src/mmu/hptw.sv | 12 +++-- src/mmu/mmu.sv | 3 +- src/mmu/tlb/tlb.sv | 3 +- src/mmu/tlb/tlbcontrol.sv | 46 ++----------------- src/privileged/csr.sv | 2 + src/privileged/csrm.sv | 3 +- src/privileged/privileged.sv | 3 +- src/wally/wallypipelinedcore.sv | 6 ++- .../WALLY-mmu-sv32-svadu-01.reference_output | 11 ++++- .../rv32i_m/privilege/src/WALLY-TEST-LIB-32.h | 12 +++++ .../privilege/src/WALLY-mmu-sv32-svadu-01.S | 19 +++++++- ...9-svadu-svnapot-svpbmt-01.reference_output | 18 +++++++- .../WALLY-mmu-sv48-svadu-01.reference_output | 18 +++++++- .../WALLY-mmu-sv39-svadu-svnapot-svpbmt-01.S | 20 +++++++- .../privilege/src/WALLY-mmu-sv48-svadu-01.S | 16 +++++++ 17 files changed, 147 insertions(+), 77 deletions(-) diff --git a/src/ifu/ifu.sv b/src/ifu/ifu.sv index 6c81c6b99..d63a987b2 100644 --- a/src/ifu/ifu.sv +++ b/src/ifu/ifu.sv @@ -70,23 +70,24 @@ module ifu import cvw::*; #(parameter cvw_t P) ( output logic IClassWrongM, // Class prediction is wrong output logic ICacheStallF, // I$ busy with multicycle operation // Faults - input logic IllegalBaseInstrD, // Illegal non-compressed instruction - input logic IllegalFPUInstrD, // Illegal FP instruction + input logic IllegalBaseInstrD, // Illegal non-compressed instruction + input logic IllegalFPUInstrD, // Illegal FP instruction output logic InstrPageFaultF, // Instruction page fault output logic IllegalIEUFPUInstrD, // Illegal instruction including compressed & FP output logic InstrMisalignedFaultM, // Branch target not aligned to 4 bytes if no compressed allowed (2 bytes if allowed) // mmu management - input logic [1:0] PrivilegeModeW, // Priviledge mode in Writeback stage - input logic [P.XLEN-1:0] PTE, // Hardware page table walker (HPTW) writes Page table entry (PTE) to ITLB - input logic [1:0] PageType, // Hardware page table walker (HPTW) writes PageType to ITLB - input logic ITLBWriteF, // Writes PTE and PageType to ITLB - input logic [P.XLEN-1:0] SATP_REGW, // Location of the root page table and page table configuration - input logic STATUS_MXR, // Status CSR: make executable page readable - input logic STATUS_SUM, // Status CSR: Supervisor access to user memory - input logic STATUS_MPRV, // Status CSR: modify machine privilege - input logic [1:0] STATUS_MPP, // Status CSR: previous machine privilege level + input logic [1:0] PrivilegeModeW, // Priviledge mode in Writeback stage + input logic [P.XLEN-1:0] PTE, // Hardware page table walker (HPTW) writes Page table entry (PTE) to ITLB + input logic [1:0] PageType, // Hardware page table walker (HPTW) writes PageType to ITLB + input logic ITLBWriteF, // Writes PTE and PageType to ITLB + input logic [P.XLEN-1:0] SATP_REGW, // Location of the root page table and page table configuration + input logic STATUS_MXR, // Status CSR: make executable page readable + input logic STATUS_SUM, // Status CSR: Supervisor access to user memory + input logic STATUS_MPRV, // Status CSR: modify machine privilege + input logic [1:0] STATUS_MPP, // Status CSR: previous machine privilege level input logic ENVCFG_PBMTE, // Page-based memory types enabled - input logic sfencevmaM, // Virtual memory address fence, invalidate TLB entries + input logic ENVCFG_HADE, // HPTW A/D Update enable + input logic sfencevmaM, // Virtual memory address fence, invalidate TLB entries output logic ITLBMissF, // ITLB miss causes HPTW (hardware pagetable walker) walk output logic InstrUpdateDAF, // ITLB hit needs to update dirty or access bits input var logic [7:0] PMPCFG_ARRAY_REGW[P.PMP_ENTRIES-1:0], // PMP configuration from privileged unit @@ -171,7 +172,7 @@ module ifu import cvw::*; #(parameter cvw_t P) ( assign TLBFlush = sfencevmaM & ~StallMQ; mmu #(.P(P), .TLB_ENTRIES(P.ITLB_ENTRIES), .IMMU(1)) - immu(.clk, .reset, .SATP_REGW, .STATUS_MXR, .STATUS_SUM, .STATUS_MPRV, .STATUS_MPP, .ENVCFG_PBMTE, + immu(.clk, .reset, .SATP_REGW, .STATUS_MXR, .STATUS_SUM, .STATUS_MPRV, .STATUS_MPP, .ENVCFG_PBMTE, .ENVCFG_HADE, .PrivilegeModeW, .DisableTranslation(1'b0), .VAdr(PCFExt), .Size(2'b10), diff --git a/src/lsu/lsu.sv b/src/lsu/lsu.sv index e120d454b..191599f12 100644 --- a/src/lsu/lsu.sv +++ b/src/lsu/lsu.sv @@ -81,6 +81,7 @@ module lsu import cvw::*; #(parameter cvw_t P) ( input logic STATUS_MXR, STATUS_SUM, STATUS_MPRV, // STATUS CSR bits: make executable readable, supervisor user memory, machine privilege input logic [1:0] STATUS_MPP, // Machine previous privilege mode input logic ENVCFG_PBMTE, // Page-based memory types enabled + input logic ENVCFG_HADE, // HPTW A/D Update enable input logic [P.XLEN-1:0] PCSpillF, // Fetch PC input logic ITLBMissF, // ITLB miss causes HPTW (hardware pagetable walker) walk input logic InstrUpdateDAF, // ITLB hit needs to update dirty or access bits @@ -153,7 +154,7 @@ module lsu import cvw::*; #(parameter cvw_t P) ( hptw #(P) hptw(.clk, .reset, .MemRWM, .AtomicM, .ITLBMissF, .ITLBWriteF, .DTLBMissM, .DTLBWriteM, .InstrUpdateDAF, .DataUpdateDAM, .FlushW, .DCacheStallM, .SATP_REGW, .PCSpillF, - .STATUS_MXR, .STATUS_SUM, .STATUS_MPRV, .STATUS_MPP, .PrivilegeModeW, + .STATUS_MXR, .STATUS_SUM, .STATUS_MPRV, .STATUS_MPP, .ENVCFG_HADE, .PrivilegeModeW, .ReadDataM(ReadDataM[P.XLEN-1:0]), // ReadDataM is LLEN, but HPTW only needs XLEN .WriteDataM, .Funct3M, .LSUFunct3M, .Funct7M, .LSUFunct7M, .IEUAdrExtM, .PTE, .IHWriteDataM, .PageType, .PreLSURWM, .LSUAtomicM, @@ -190,7 +191,7 @@ module lsu import cvw::*; #(parameter cvw_t P) ( assign DisableTranslation = SelHPTW | FlushDCacheM; assign WriteAccessM = PreLSURWM[0] | (|CMOpM); mmu #(.P(P), .TLB_ENTRIES(P.DTLB_ENTRIES), .IMMU(0)) - dmmu(.clk, .reset, .SATP_REGW, .STATUS_MXR, .STATUS_SUM, .STATUS_MPRV, .STATUS_MPP, .ENVCFG_PBMTE, + dmmu(.clk, .reset, .SATP_REGW, .STATUS_MXR, .STATUS_SUM, .STATUS_MPRV, .STATUS_MPP, .ENVCFG_PBMTE, .ENVCFG_HADE, .PrivilegeModeW, .DisableTranslation, .VAdr(IHAdrM), .Size(LSUFunct3M[1:0]), .PTE, .PageTypeWriteVal(PageType), .TLBWrite(DTLBWriteM), .TLBFlush(sfencevmaM), .PhysicalAddress(PAdrM), .TLBMiss(DTLBMissM), .Cacheable(CacheableM), .Idempotent(), .SelTIM(SelDTIM), diff --git a/src/mmu/hptw.sv b/src/mmu/hptw.sv index 410d1bf91..64752a992 100644 --- a/src/mmu/hptw.sv +++ b/src/mmu/hptw.sv @@ -38,6 +38,7 @@ module hptw import cvw::*; #(parameter cvw_t P) ( // system status input logic STATUS_MXR, STATUS_SUM, STATUS_MPRV, input logic [1:0] STATUS_MPP, + input logic ENVCFG_HADE, // HPTW A/D Update enable input logic [1:0] PrivilegeModeW, input logic [P.XLEN-1:0] ReadDataM, // page table entry from LSU input logic [P.XLEN-1:0] WriteDataM, @@ -153,7 +154,7 @@ module hptw import cvw::*; #(parameter cvw_t P) ( logic [P.XLEN-1:0] AccessedPTE; assign AccessedPTE = {PTE[P.XLEN-1:8], (SetDirty | PTE[7]), 1'b1, PTE[5:0]}; // set accessed bit, conditionally set dirty bit - mux2 #(P.XLEN) NextPTEMux(ReadDataM, AccessedPTE, UpdatePTE, NextPTE); + mux2 #(P.XLEN) NextPTEMux(ReadDataM, AccessedPTE, UpdatePTE, NextPTE); // NextPTE = ReadDataM when HADE = 0 because UpdatePTE = 0 flopenr #(P.PA_BITS) HPTWAdrWriteReg(clk, reset, SaveHPTWAdr, HPTWReadAdr, HPTWWriteAdr); assign SaveHPTWAdr = WalkerState == L0_ADR; @@ -182,11 +183,12 @@ module hptw import cvw::*; #(parameter cvw_t P) ( // hptw needs to know if there is a Dirty or Access fault occuring on this // memory access. If there is the PTE needs to be updated seting Access // and possibly also Dirty. Dirty is set if the operation is a store/amo. - // However any other fault should not cause the update. - assign HPTWUpdateDA = ValidLeafPTE & (~Accessed | SetDirty) & ~OtherPageFault; + // However any other fault should not cause the update, and updates are in software when ENVCFG_HADE = 0 + assign HPTWUpdateDA = ValidLeafPTE & (~Accessed | SetDirty) & ENVCFG_HADE & ~OtherPageFault; + + assign HPTWRW[0] = (WalkerState == UPDATE_PTE); // HPTWRW[0] will always be 0 if HADE = 0 because HPTWUpdateDA will be 0 so WalkerState never is UPDATE_PTE + assign UpdatePTE = (WalkerState == LEAF) & HPTWUpdateDA; // UpdatePTE will always be 0 if HADE = 0 because HPTWUpdateDA will be 0 - assign HPTWRW[0] = (WalkerState == UPDATE_PTE); - assign UpdatePTE = (WalkerState == LEAF) & HPTWUpdateDA; end else begin // block: hptwwrites assign NextPTE = ReadDataM; assign HPTWAdr = HPTWReadAdr; diff --git a/src/mmu/mmu.sv b/src/mmu/mmu.sv index e8e06fde0..32fed853d 100644 --- a/src/mmu/mmu.sv +++ b/src/mmu/mmu.sv @@ -35,6 +35,7 @@ module mmu import cvw::*; #(parameter cvw_t P, input logic STATUS_MPRV, // Status CSR: modify machine privilege input logic [1:0] STATUS_MPP, // Status CSR: previous machine privilege level input logic ENVCFG_PBMTE, // Page-based memory types enabled + input logic ENVCFG_HADE, // HPTW A/D Update enable input logic [1:0] PrivilegeModeW, // Current privilege level of the processeor input logic DisableTranslation, // virtual address translation disabled during D$ flush and HPTW walk that use physical addresses input logic [P.XLEN+1:0] VAdr, // virtual/physical address from IEU or physical address from HPTW @@ -82,7 +83,7 @@ module mmu import cvw::*; #(parameter cvw_t P, .clk, .reset, .SATP_MODE(SATP_REGW[P.XLEN-1:P.XLEN-P.SVMODE_BITS]), .SATP_ASID(SATP_REGW[P.ASID_BASE+P.ASID_BITS-1:P.ASID_BASE]), - .VAdr(VAdr[P.XLEN-1:0]), .STATUS_MXR, .STATUS_SUM, .STATUS_MPRV, .STATUS_MPP, .ENVCFG_PBMTE, + .VAdr(VAdr[P.XLEN-1:0]), .STATUS_MXR, .STATUS_SUM, .STATUS_MPRV, .STATUS_MPP, .ENVCFG_PBMTE, .ENVCFG_HADE, .PrivilegeModeW, .ReadAccess, .WriteAccess, .DisableTranslation, .PTE, .PageTypeWriteVal, .TLBWrite, .TLBFlush, .TLBPAdr, .TLBMiss, .TLBHit, diff --git a/src/mmu/tlb/tlb.sv b/src/mmu/tlb/tlb.sv index 9619c958d..861e721b6 100644 --- a/src/mmu/tlb/tlb.sv +++ b/src/mmu/tlb/tlb.sv @@ -58,6 +58,7 @@ module tlb import cvw::*; #(parameter cvw_t P, input logic STATUS_MXR, STATUS_SUM, STATUS_MPRV, input logic [1:0] STATUS_MPP, input logic ENVCFG_PBMTE, // Page-based memory types enabled + input logic ENVCFG_HADE, // HPTW A/D Update enable input logic [1:0] PrivilegeModeW, // Current privilege level of the processeor input logic ReadAccess, input logic WriteAccess, @@ -104,7 +105,7 @@ module tlb import cvw::*; #(parameter cvw_t P, assign VPN = VAdr[P.VPN_BITS+11:12]; - tlbcontrol #(P, ITLB) tlbcontrol(.SATP_MODE, .VAdr, .STATUS_MXR, .STATUS_SUM, .STATUS_MPRV, .STATUS_MPP, .ENVCFG_PBMTE, + tlbcontrol #(P, ITLB) tlbcontrol(.SATP_MODE, .VAdr, .STATUS_MXR, .STATUS_SUM, .STATUS_MPRV, .STATUS_MPP, .ENVCFG_PBMTE, .ENVCFG_HADE, .PrivilegeModeW, .ReadAccess, .WriteAccess, .DisableTranslation, .TLBFlush, .PTEAccessBits, .CAMHit, .Misaligned, .TLBMiss, .TLBHit, .TLBPageFault, diff --git a/src/mmu/tlb/tlbcontrol.sv b/src/mmu/tlb/tlbcontrol.sv index 3c2f81697..666448b12 100644 --- a/src/mmu/tlb/tlbcontrol.sv +++ b/src/mmu/tlb/tlbcontrol.sv @@ -32,10 +32,11 @@ module tlbcontrol import cvw::*; #(parameter cvw_t P, ITLB = 0) ( input logic STATUS_MXR, STATUS_SUM, STATUS_MPRV, input logic [1:0] STATUS_MPP, input logic ENVCFG_PBMTE, // Page-based memory types enabled - input logic [1:0] PrivilegeModeW, // Current privilege level of the processeor + input logic ENVCFG_HADE, // HPTW A/D Update enable + input logic [1:0] PrivilegeModeW, // Current privilege level of the processeor input logic ReadAccess, WriteAccess, input logic DisableTranslation, - input logic TLBFlush, // Invalidate all TLB entries + input logic TLBFlush, // Invalidate all TLB entries input logic [11:0] PTEAccessBits, input logic CAMHit, input logic Misaligned, @@ -114,50 +115,13 @@ module tlbcontrol import cvw::*; #(parameter cvw_t P, ITLB = 0) ( end // Determine wheter to update DA bits. With SVADU, it is done in hardware - if (P.SVADU_SUPPORTED) assign UpdateDA = PreUpdateDA & Translate & TLBHit & ~TLBPageFault; + if (P.SVADU_SUPPORTED) assign UpdateDA = PreUpdateDA & Translate & TLBHit & ~TLBPageFault & ENVCFG_HADE; else assign UpdateDA = PreUpdateDA; // Determine whether page fault occurs - assign PrePageFault = UpperBitsUnequal | Misaligned | ~PTE_V | ImproperPrivilege | (P.XLEN == 64 & (BadPBMT | BadNAPOT | BadReserved)) | (PreUpdateDA & ~P.SVADU_SUPPORTED); + assign PrePageFault = UpperBitsUnequal | Misaligned | ~PTE_V | ImproperPrivilege | (P.XLEN == 64 & (BadPBMT | BadNAPOT | BadReserved)) | (PreUpdateDA & (~P.SVADU_SUPPORTED | ~ENVCFG_HADE)); assign TLBPageFault = Translate & TLBHit & (PrePageFault | InvalidAccess); -/* - // Check whether the access is allowed, page faulting if not. - if (ITLB == 1) begin:itlb // Instruction TLB fault checking - // User mode may only execute user mode pages, and supervisor mode may - // only execute non-user mode pages. - assign ImproperPrivilege = ((EffectivePrivilegeMode == P.U_MODE) & ~PTE_U) | - ((EffectivePrivilegeMode == P.S_MODE) & PTE_U); - assign CausePageFault = ImproperPrivilege | ~PTE_X | UpperBitsUnequal | BadPTE | BadPBMT | Misaligned | ~PTE_V | (~PTE_A & P.SVADU_SUPPORTED); - assign TLBPageFault = Translate & TLBHit & CausePageFault; - // Determine wheter to update DA bits - if(P.SVADU_SUPPORTED) assign UpdateDA = Translate & TLBHit & ~PTE_A & ~TLBPageFault; - else assign UpdateDA = ~PTE_A; - end else begin:dtlb // Data TLB fault checking - logic InvalidRead, InvalidWrite; - - // User mode may only load/store from user mode pages, and supervisor mode - // may only access user mode pages when STATUS_SUM is low. - assign ImproperPrivilege = ((EffectivePrivilegeMode == P.U_MODE) & ~PTE_U) | - ((EffectivePrivilegeMode == P.S_MODE) & PTE_U & ~STATUS_SUM); - // Check for read error. Reads are invalid when the page is not readable - // (and executable pages are not readable) or when the page is neither - // readable nor executable (and executable pages are readable). - assign InvalidRead = ReadAccess & ~PTE_R & (~STATUS_MXR | ~PTE_X); - // Check for write error. Writes are invalid when the page's write bit is - // low. - assign InvalidWrite = WriteAccess & ~PTE_W; - if(P.SVADU_SUPPORTED) begin : hptwwrites - assign UpdateDA = Translate & TLBHit & (~PTE_A | WriteAccess & ~PTE_D) & ~TLBPageFault; - assign TLBPageFault = (Translate & TLBHit & (ImproperPrivilege | InvalidRead | InvalidWrite | UpperBitsUnequal | Misaligned | ~PTE_V)); // *** update to match - end else begin - // Fault for software handling if access bit is off or writing a page with dirty bit off - assign UpdateDA = ~PTE_A | WriteAccess & ~PTE_D; - assign TLBPageFault = (Translate & TLBHit & (ImproperPrivilege | InvalidRead | InvalidWrite | UpdateDA | UpperBitsUnequal | Misaligned | ~PTE_V)); - end - end -*/ - assign TLBHit = CAMHit & TLBAccess; assign TLBMiss = ~CAMHit & TLBAccess & Translate ; endmodule diff --git a/src/privileged/csr.sv b/src/privileged/csr.sv index f99ee28b1..4cdce4989 100644 --- a/src/privileged/csr.sv +++ b/src/privileged/csr.sv @@ -86,6 +86,7 @@ module csr import cvw::*; #(parameter cvw_t P) ( output logic [2:0] FRM_REGW, output logic [3:0] ENVCFG_CBE, output logic ENVCFG_PBMTE, // Page-based memory type enable + output logic ENVCFG_HADE, // HPTW A/D Update enable // output logic [P.XLEN-1:0] CSRReadValW, // value read from CSR output logic [P.XLEN-1:0] UnalignedPCNextF, // Next PC, accounting for traps and returns @@ -292,6 +293,7 @@ module csr import cvw::*; #(parameter cvw_t P) ( // Broadcast appropriate environment configuration based on privilege mode assign ENVCFG_STCE = MENVCFG_REGW[63]; // supervisor timer counter enable assign ENVCFG_PBMTE = MENVCFG_REGW[62]; // page-based memory types enable + assign ENVCFG_HADE = MENVCFG_REGW[61]; // Hardware A/D Update enable assign ENVCFG_CBE = (PrivilegeModeW == P.M_MODE) ? 4'b1111 : (PrivilegeModeW == P.S_MODE | !P.S_SUPPORTED) ? MENVCFG_REGW[7:4] : (MENVCFG_REGW[7:4] & SENVCFG_REGW[7:4]); diff --git a/src/privileged/csrm.sv b/src/privileged/csrm.sv index 359406b1f..ad1f9b75d 100644 --- a/src/privileged/csrm.sv +++ b/src/privileged/csrm.sv @@ -172,7 +172,8 @@ module csrm import cvw::*; #(parameter cvw_t P) ( assign MENVCFG_WriteValM = { MENVCFG_PreWriteValM[63] & P.SSTC_SUPPORTED, MENVCFG_PreWriteValM[62] & P.SVPBMT_SUPPORTED, - 54'b0, + MENVCFG_PreWriteValM[61] & P.SVADU_SUPPORTED, + 53'b0, MENVCFG_PreWriteValM[7] & P.ZICBOZ_SUPPORTED, MENVCFG_PreWriteValM[6:4] & {3{P.ZICBOM_SUPPORTED}}, 3'b0, diff --git a/src/privileged/privileged.sv b/src/privileged/privileged.sv index 619ed2b32..fff4af8b8 100644 --- a/src/privileged/privileged.sv +++ b/src/privileged/privileged.sv @@ -84,6 +84,7 @@ module privileged import cvw::*; #(parameter cvw_t P) ( output logic [2:0] FRM_REGW, // FPU rounding mode output logic [3:0] ENVCFG_CBE, // Cache block operation enables output logic ENVCFG_PBMTE, // Page-based memory type enable + output logic ENVCFG_HADE, // HPTW A/D Update enable // PC logic output in privileged unit output logic [P.XLEN-1:0] UnalignedPCNextF, // Next PC from trap/return PC logic // control outputs @@ -138,7 +139,7 @@ module privileged import cvw::*; #(parameter cvw_t P) ( .STATUS_MIE, .STATUS_SIE, .STATUS_MXR, .STATUS_SUM, .STATUS_MPRV, .STATUS_TW, .STATUS_FS, .MEDELEG_REGW, .MIP_REGW, .MIE_REGW, .MIDELEG_REGW, .SATP_REGW, .PMPCFG_ARRAY_REGW, .PMPADDR_ARRAY_REGW, - .SetFflagsM, .FRM_REGW, .ENVCFG_CBE, .ENVCFG_PBMTE, + .SetFflagsM, .FRM_REGW, .ENVCFG_CBE, .ENVCFG_PBMTE, .ENVCFG_HADE, .CSRReadValW,.UnalignedPCNextF, .IllegalCSRAccessM, .BigEndianM); // pipeline early-arriving trap sources diff --git a/src/wally/wallypipelinedcore.sv b/src/wally/wallypipelinedcore.sv index 5fbc89a26..00b348660 100644 --- a/src/wally/wallypipelinedcore.sv +++ b/src/wally/wallypipelinedcore.sv @@ -78,6 +78,7 @@ module wallypipelinedcore import cvw::*; #(parameter cvw_t P) ( logic LoadStallD, StoreStallD, MDUStallD, CSRRdStallD; logic SquashSCW; logic MDUActiveE; // Mul/Div instruction being executed + logic ENVCFG_HADE; // HPTW A/D Update enable logic ENVCFG_PBMTE; // Page-based memory type enable logic [3:0] ENVCFG_CBE; // Cache Block operation enables logic [3:0] CMOpM; // 1: cbo.inval; 2: cbo.flush; 4: cbo.clean; 8: cbo.zero @@ -185,7 +186,7 @@ module wallypipelinedcore import cvw::*; #(parameter cvw_t P) ( .IllegalBaseInstrD, .IllegalFPUInstrD, .InstrPageFaultF, .IllegalIEUFPUInstrD, .InstrMisalignedFaultM, // mmu management .PrivilegeModeW, .PTE, .PageType, .SATP_REGW, .STATUS_MXR, .STATUS_SUM, .STATUS_MPRV, - .STATUS_MPP, .ENVCFG_PBMTE, .ITLBWriteF, .sfencevmaM, .ITLBMissF, + .STATUS_MPP, .ENVCFG_PBMTE, .ENVCFG_HADE, .ITLBWriteF, .sfencevmaM, .ITLBMissF, // pmp/pma (inside mmu) signals. .PMPCFG_ARRAY_REGW, .PMPADDR_ARRAY_REGW, .InstrAccessFaultF, .InstrUpdateDAF); @@ -234,6 +235,7 @@ module wallypipelinedcore import cvw::*; #(parameter cvw_t P) ( .STATUS_MPRV, // from csr .STATUS_MPP, // from csr .ENVCFG_PBMTE, // from csr + .ENVCFG_HADE, // from csr .sfencevmaM, // connects to privilege .DCacheStallM, // connects to privilege .LoadPageFaultM, // connects to privilege @@ -296,7 +298,7 @@ module wallypipelinedcore import cvw::*; #(parameter cvw_t P) ( .PrivilegeModeW, .SATP_REGW, .STATUS_MXR, .STATUS_SUM, .STATUS_MPRV, .STATUS_MPP, .STATUS_FS, .PMPCFG_ARRAY_REGW, .PMPADDR_ARRAY_REGW, - .FRM_REGW, .ENVCFG_CBE, .ENVCFG_PBMTE, .BreakpointFaultM, .EcallFaultM, .wfiM, .IntPendingM, .BigEndianM); + .FRM_REGW, .ENVCFG_CBE, .ENVCFG_PBMTE, .ENVCFG_HADE, .BreakpointFaultM, .EcallFaultM, .wfiM, .IntPendingM, .BigEndianM); end else begin assign CSRReadValW = 0; assign UnalignedPCNextF = PC2NextF; diff --git a/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/privilege/references/WALLY-mmu-sv32-svadu-01.reference_output b/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/privilege/references/WALLY-mmu-sv32-svadu-01.reference_output index 9d88117e6..6a88d9ec7 100644 --- a/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/privilege/references/WALLY-mmu-sv32-svadu-01.reference_output +++ b/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/privilege/references/WALLY-mmu-sv32-svadu-01.reference_output @@ -35,8 +35,15 @@ beef0110 0000000f 0000000c 00000bad -beef0770 # Test 11.3.1.3.5: check successful read/write when A=0 and SVADU=1 -beef0aa0 # Test 11.3.1.3.6: check successful read/write when D=0 and SVADU=1 +0000000f # Test 11.3.1.3.6(a) page fault on write when A = 0 +0000000d # Test 11.3.1.3.6(a) page fault on read when A = 0 +00000bad +0000000f # Test 11.3.1.3.7(a) page fault on write when D = 0 +deadbeef # Test 11.3.1.3.7(a) successful read when D = 0 +00000009 # call from going to m mode from s mode +0000000b # ecall from going to S mode from m mode +beef0770 # Test 11.3.1.3.6: check successful read/write when A=0 and MENVCFG.HADE=1 +beef0aa0 # Test 11.3.1.3.7: check successful read/write when D=0 and MENVCFG.HADE=1 beef0077 # Test 11.3.1.4.1: successful read back of saved value with new memory mapping 00000009 # Test 11.3.1.5.1: ecall from going to m mode from s mode 00000000 # previous value of mprv before being set diff --git a/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/privilege/src/WALLY-TEST-LIB-32.h b/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/privilege/src/WALLY-TEST-LIB-32.h index c51eec965..b6304fbc6 100644 --- a/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/privilege/src/WALLY-TEST-LIB-32.h +++ b/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/privilege/src/WALLY-TEST-LIB-32.h @@ -1324,6 +1324,18 @@ write_mideleg: csrw mideleg, t4 j test_loop +write_menvcfg: + // writes the value in t4 to the menvcfg register + // Doesn't log anything + csrw menvcfg, t4 + j test_loop + +write_menvcfgh: + // writes the value in t4 to the menvcfgh register + // Doesn't log anything + csrw menvcfgh, t4 + j test_loop + executable_test: // Execute the code at the address in t3, returning the value in t2. // Assumes the code modifies t2, to become the value stored in t4 for this test. diff --git a/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/privilege/src/WALLY-mmu-sv32-svadu-01.S b/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/privilege/src/WALLY-mmu-sv32-svadu-01.S index 1a4a32cba..6a40d3b17 100644 --- a/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/privilege/src/WALLY-mmu-sv32-svadu-01.S +++ b/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/privilege/src/WALLY-mmu-sv32-svadu-01.S @@ -157,13 +157,28 @@ test_cases: .4byte 0xBFFDE0, 0xbad, executable_test # instr page fault when X=0 # In the following two tests, SVADU is supported, so the hardware handles the A/D bits +# Initially test with HADE = 0, so needing to set A/D bits triggers page fault + +# test 11.3.1.3.6(a) Accessed flag == 0 +.4byte 0x3020, 0xBEEF0770, write32_test # store page fault when A=0 +.4byte 0x3020, 0xBEEF0770, read32_test # load page fault when A=0 + +# test 11.3.1.3.7(a) Dirty flag == 0 +.4byte 0x4658, 0xBEEF0AA0, write32_test # store page fault when D=0 +.4byte 0x4658, 0xDEADBEEF, read32_test # read success when D=0; default DEADBEEF value wasn't changed + +# Now set HADE bit +.4byte 0x0, 0x0, goto_m_mode # change to M mode, 0x9 written to output +.4byte 0x0, 0x20000000, write_menvcfgh # set menvcfg.HADE = 1 +.4byte 0x0, 0x0, goto_s_mode # change to S mode, 0xb written to output + # Since SVADU is 1, there are no faults when A/D=0 -# test 11.3.1.3.6 Accessed flag == 0 +# test 11.3.1.3.6(b) Accessed flag == 0 .4byte 0x3020, 0xBEEF0770, write32_test # Write success when A=0 and SVADU is enabled .4byte 0x3020, 0xBEEF0770, read32_test # Read success when A=0 and SVADU is enabled -# test 11.3.1.3.7 Dirty flag == 0 +# test 11.3.1.3.7(b) Dirty flag == 0 .4byte 0x4658, 0xBEEF0AA0, write32_test # write successs when D=0 and SVADU is enabled .4byte 0x4658, 0xBEEF0AA0, read32_test # read success when D=0 diff --git a/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/privilege/references/WALLY-mmu-sv39-svadu-svnapot-svpbmt-01.reference_output b/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/privilege/references/WALLY-mmu-sv39-svadu-svnapot-svpbmt-01.reference_output index 93e4557a5..320d3f9c4 100644 --- a/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/privilege/references/WALLY-mmu-sv39-svadu-svnapot-svpbmt-01.reference_output +++ b/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/privilege/references/WALLY-mmu-sv39-svadu-svnapot-svpbmt-01.reference_output @@ -84,9 +84,23 @@ beef0110 # Test 11.3.1.3.4: read test success 00000000 00000bad 00000000 -beef0770 # Test 11.3.1.3.6: check successful read/write when A=0 and SVADU=1 +0000000f # Test 11.3.1.3.6(a): write test with page fault +00000000 +0000000d # read test with page fault +00000000 +00000bad +00000000 +0000000f # Test 11.3.1.3.7(a): write test with page fault +00000000 +deadbeef # read test success but nothing was written so read back default +deadbeef +00000009 # ecall from going to M mode from S mode +00000000 +0000000B # ecall from going to S mode from M mode +00000000 +beef0770 # Test 11.3.1.3.6(b): check successful read/write when A=0 and SVADU=1 0990dead -beef0aa0 # Test 11.3.1.3.7: check successful read/write when D=0 and SVADU=1 +beef0aa0 # Test 11.3.1.3.7(b): check successful read/write when D=0 and SVADU=1 0440dead 0000000d # Test 11.3.1.3.8: read test with page fault for nonzero reserved bit 00000000 diff --git a/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/privilege/references/WALLY-mmu-sv48-svadu-01.reference_output b/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/privilege/references/WALLY-mmu-sv48-svadu-01.reference_output index 60fce42ef..dd3801705 100644 --- a/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/privilege/references/WALLY-mmu-sv48-svadu-01.reference_output +++ b/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/privilege/references/WALLY-mmu-sv48-svadu-01.reference_output @@ -92,9 +92,23 @@ beef0110 # Test 11.3.1.3.4: read test success 00000000 00000bad 00000000 -beef0770 # Test 11.3.1.3.5: check successful read/write when A=0 and SVADU=1 +0000000f # Test 11.3.1.3.6(a): write test with page fault +00000000 +0000000d # read test with page fault +00000000 +00000bad +00000000 +0000000f # Test 11.3.1.3.7(a): write test with page fault +00000000 +deadbeef # read test success but get deadbeef because nothing was written +deadbeef +00000009 # ecall from going to M mode from S mode +00000000 +0000000B # ecall from going to S mode from M mode +00000000 +beef0770 # Test 11.3.1.3.6(b): check successful read/write when A=0 and SVADU=1 0990dead -beef0aa0 # Test 11.3.1.3.6: check successful read/write when D=0 and SVADU=1 +beef0aa0 # Test 11.3.1.3.7(b): check successful read/write when D=0 and SVADU=1 0440dead beef0000 # Test 11.3.1.4.1: read test success on new page table mapping 0000dead diff --git a/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/privilege/src/WALLY-mmu-sv39-svadu-svnapot-svpbmt-01.S b/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/privilege/src/WALLY-mmu-sv39-svadu-svnapot-svpbmt-01.S index aae04dd68..7da29bb94 100644 --- a/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/privilege/src/WALLY-mmu-sv39-svadu-svnapot-svpbmt-01.S +++ b/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/privilege/src/WALLY-mmu-sv39-svadu-svnapot-svpbmt-01.S @@ -194,13 +194,29 @@ test_cases: # *** fetches on pages with X = 1 already tested in 11.3.1.3.1 .8byte 0x5AA0, 0x1, executable_test # instr page fault when X=0 + # In the following two tests, SVADU is supported, so the hardware handles the A/D bits +# Initially test with HADE = 0, so needing to set A/D bits triggers page fault + +# test 11.3.1.3.6(a) Accessed flag == 0 +.8byte 0x36D0, 0x0990DEADBEEF0770, write64_test# store page fault when A=0 +.8byte 0x3AB8, 0x0990DEADBEEF0990, read64_test# load page fault when A=0 + +# test 11.3.1.3.7(a) Dirty flag == 0 +.8byte 0x4658, 0x0440DEADBEEF0AA0, write64_test# store page fault when D=0 +.8byte 0x4AA0, 0xDEADBEEFDEADBEEF, read64_test# read success when D=0 + +# Now set HADE bit +.8byte 0x0, 0x0, goto_m_mode # change to M mode, 0x9 written to output +.8byte 0x0, 0x2000000000000000, write_menvcfg # set menvcfg.HADE = 1 +.8byte 0x0, 0x0, goto_s_mode # change to S mode, 0xb written to output + # Since SVADU is 1, there are no faults when A/D=0 -# test 11.3.1.3.6 Accessed flag == 0 +# test 11.3.1.3.6(b) Accessed flag == 0 .8byte 0x36D0, 0x0990DEADBEEF0770, write64_test # Write success when A=0 and SVADU is enabled .8byte 0x36D0, 0x0990DEADBEEF0770, read64_test # Read success when A=0 and SVADU is enabled -# test 11.3.1.3.7 Dirty flag == 0 +# test 11.3.1.3.7(b) Dirty flag == 0 .8byte 0x4658, 0x0440DEADBEEF0AA0, write64_test # Write success when D=0 and SVADU is enabled .8byte 0x4658, 0x0440DEADBEEF0AA0, read64_test # read success when D=0 diff --git a/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/privilege/src/WALLY-mmu-sv48-svadu-01.S b/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/privilege/src/WALLY-mmu-sv48-svadu-01.S index dc8424f14..96d5aec11 100644 --- a/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/privilege/src/WALLY-mmu-sv48-svadu-01.S +++ b/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/privilege/src/WALLY-mmu-sv48-svadu-01.S @@ -187,7 +187,23 @@ test_cases: # executes on pages with X = 1 already tested in 11.3.1.3.1 .8byte 0x010088888000, 0x2, executable_test # execute fault when X=0 + # In the following two tests, SVADU is supported, so the hardware handles the A/D bits +# Initially test with HADE = 0, so needing to set A/D bits triggers page fault + +# test 11.3.1.3.6(a) Accessed flag == 0 +.8byte 0x802036D0, 0x0990DEADBEEF0770, write64_test # store page fault when A=0 +.8byte 0x802036D0, 0x0990DEADBEEF0990, read64_test # load page fault when A=0 + +# test 11.3.1.3.7(a) Dirty flag == 0 +.8byte 0x80204658, 0x0440DEADBEEF0AA0, write64_test # store page fault when D=0 +.8byte 0x80204658, 0xDEADBEEFDEADBEEF, read64_test # read success when D=0 + +# Now set HADE bit +.8byte 0x0, 0x0, goto_m_mode # change to M mode, 0x9 written to output +.8byte 0x0, 0x2000000000000000, write_menvcfg # set menvcfg.HADE = 1 +.8byte 0x0, 0x0, goto_s_mode # change to S mode, 0xb written to output + # Since SVADU is 1, there are no faults when A/D=0 # test 11.3.1.3.6 Accessed flag == 0 From 19a6bbb01bf1c2b379446a4166e6cd1b96ae42f8 Mon Sep 17 00:00:00 2001 From: David Harris Date: Wed, 4 Oct 2023 09:57:13 -0700 Subject: [PATCH 29/32] UpdateDA cleanup: don't assert UpdateDA when there is no SVADU --- src/ifu/spill.sv | 1 + src/mmu/tlb/tlbcontrol.sv | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ifu/spill.sv b/src/ifu/spill.sv index a82f4e9bf..d6e6a75e4 100644 --- a/src/ifu/spill.sv +++ b/src/ifu/spill.sv @@ -83,6 +83,7 @@ module spill import cvw::*; #(parameter cvw_t P) ( assign SpillF = CacheableF ? SpillCachedF : SpillUncachedF; end else assign SpillF = PCF[1]; // *** might relax - only spill if next instruction is uncompressed + // Don't take the spill if there is a stall, TLB miss, or hardware update to the D/A bits assign TakeSpillF = SpillF & ~IFUCacheBusStallF & ~(ITLBMissF | (P.SVADU_SUPPORTED & InstrUpdateDAF)); always_ff @(posedge clk) diff --git a/src/mmu/tlb/tlbcontrol.sv b/src/mmu/tlb/tlbcontrol.sv index 666448b12..31312f767 100644 --- a/src/mmu/tlb/tlbcontrol.sv +++ b/src/mmu/tlb/tlbcontrol.sv @@ -115,8 +115,7 @@ module tlbcontrol import cvw::*; #(parameter cvw_t P, ITLB = 0) ( end // Determine wheter to update DA bits. With SVADU, it is done in hardware - if (P.SVADU_SUPPORTED) assign UpdateDA = PreUpdateDA & Translate & TLBHit & ~TLBPageFault & ENVCFG_HADE; - else assign UpdateDA = PreUpdateDA; + assign UpdateDA = P.SVADU_SUPPORTED & PreUpdateDA & Translate & TLBHit & ~TLBPageFault & ENVCFG_HADE; // Determine whether page fault occurs assign PrePageFault = UpperBitsUnequal | Misaligned | ~PTE_V | ImproperPrivilege | (P.XLEN == 64 & (BadPBMT | BadNAPOT | BadReserved)) | (PreUpdateDA & (~P.SVADU_SUPPORTED | ~ENVCFG_HADE)); From 28752303be0b8a0386aaa7a99ad64baba8700824 Mon Sep 17 00:00:00 2001 From: David Harris Date: Wed, 4 Oct 2023 12:28:12 -0700 Subject: [PATCH 30/32] Added ZCA/ZCF/ZCD/ZCB support. Doesn't break regression, but not tested. Need to get tests for Zcb. Draft tests are in riscv-arch-test but not yet committed there --- config/buildroot/config.vh | 6 ++ config/fpga/config.vh | 6 ++ config/rv32e/config.vh | 6 ++ config/rv32gc/config.vh | 6 ++ config/rv32i/config.vh | 6 ++ config/rv32imc/config.vh | 6 ++ config/rv64fpquad/config.vh | 6 ++ config/rv64gc/config.vh | 6 ++ config/rv64i/config.vh | 6 ++ config/shared/parameter-defs.vh | 4 + src/cvw.sv | 6 ++ src/ifu/decompress.sv | 116 ++++++++++++++++++++++------ src/ifu/ifu.sv | 4 +- testbench/common/riscvassertions.sv | 5 ++ 14 files changed, 163 insertions(+), 26 deletions(-) diff --git a/config/buildroot/config.vh b/config/buildroot/config.vh index 79ee99f3c..b25e8fe9c 100644 --- a/config/buildroot/config.vh +++ b/config/buildroot/config.vh @@ -158,6 +158,12 @@ localparam ZBB_SUPPORTED = 0; localparam ZBC_SUPPORTED = 0; localparam ZBS_SUPPORTED = 0; +// New compressed instructions +localparam ZCB_SUPPORTED = 1; +localparam ZCA_SUPPORTED = 0; +localparam ZCF_SUPPORTED = 0; +localparam ZCD_SUPPORTED = 0; + // Memory synthesis configuration localparam USE_SRAM = 0; diff --git a/config/fpga/config.vh b/config/fpga/config.vh index 27903d0be..2508b557e 100644 --- a/config/fpga/config.vh +++ b/config/fpga/config.vh @@ -171,6 +171,12 @@ localparam ZBB_SUPPORTED = 1; localparam ZBC_SUPPORTED = 1; localparam ZBS_SUPPORTED = 1; +// New compressed instructions +localparam ZCB_SUPPORTED = 1; +localparam ZCA_SUPPORTED = 0; +localparam ZCF_SUPPORTED = 0; +localparam ZCD_SUPPORTED = 0; + // Memory synthesis configuration localparam USE_SRAM = 0; diff --git a/config/rv32e/config.vh b/config/rv32e/config.vh index c67e71c13..35e85003d 100644 --- a/config/rv32e/config.vh +++ b/config/rv32e/config.vh @@ -159,6 +159,12 @@ localparam ZBB_SUPPORTED = 0; localparam ZBC_SUPPORTED = 0; localparam ZBS_SUPPORTED = 0; +// New compressed instructions +localparam ZCB_SUPPORTED = 0; +localparam ZCA_SUPPORTED = 0; +localparam ZCF_SUPPORTED = 0; +localparam ZCD_SUPPORTED = 0; + // Memory synthesis configuration localparam USE_SRAM = 0; diff --git a/config/rv32gc/config.vh b/config/rv32gc/config.vh index de966b1f2..06be2e01b 100644 --- a/config/rv32gc/config.vh +++ b/config/rv32gc/config.vh @@ -171,6 +171,12 @@ localparam ZBB_SUPPORTED = 1; localparam ZBC_SUPPORTED = 1; localparam ZBS_SUPPORTED = 1; +// New compressed instructions +localparam ZCB_SUPPORTED = 1; +localparam ZCA_SUPPORTED = 0; +localparam ZCF_SUPPORTED = 0; +localparam ZCD_SUPPORTED = 0; + // Memory synthesis configuration localparam USE_SRAM = 0; diff --git a/config/rv32i/config.vh b/config/rv32i/config.vh index a31e034df..5e03d3e93 100644 --- a/config/rv32i/config.vh +++ b/config/rv32i/config.vh @@ -159,6 +159,12 @@ localparam ZBB_SUPPORTED = 0; localparam ZBC_SUPPORTED = 0; localparam ZBS_SUPPORTED = 0; +// New compressed instructions +localparam ZCB_SUPPORTED = 0; +localparam ZCA_SUPPORTED = 0; +localparam ZCF_SUPPORTED = 0; +localparam ZCD_SUPPORTED = 0; + // Memory synthesis configuration localparam USE_SRAM = 0; diff --git a/config/rv32imc/config.vh b/config/rv32imc/config.vh index 61eea7325..cb031d2db 100644 --- a/config/rv32imc/config.vh +++ b/config/rv32imc/config.vh @@ -158,6 +158,12 @@ localparam ZBB_SUPPORTED = 0; localparam ZBC_SUPPORTED = 0; localparam ZBS_SUPPORTED = 0; +// New compressed instructions +localparam ZCB_SUPPORTED = 0; +localparam ZCA_SUPPORTED = 0; +localparam ZCF_SUPPORTED = 0; +localparam ZCD_SUPPORTED = 0; + // Memory synthesis configuration localparam USE_SRAM = 0; diff --git a/config/rv64fpquad/config.vh b/config/rv64fpquad/config.vh index d8bf3e6fc..63a35c7f5 100644 --- a/config/rv64fpquad/config.vh +++ b/config/rv64fpquad/config.vh @@ -161,6 +161,12 @@ localparam ZBB_SUPPORTED = 0; localparam ZBC_SUPPORTED = 0; localparam ZBS_SUPPORTED = 0; +// New compressed instructions +localparam ZCB_SUPPORTED = 0; +localparam ZCA_SUPPORTED = 0; +localparam ZCF_SUPPORTED = 0; +localparam ZCD_SUPPORTED = 0; + // Memory synthesis configuration localparam USE_SRAM = 0; diff --git a/config/rv64gc/config.vh b/config/rv64gc/config.vh index 36d99020e..f17761e33 100644 --- a/config/rv64gc/config.vh +++ b/config/rv64gc/config.vh @@ -164,6 +164,12 @@ localparam ZBB_SUPPORTED = 1; localparam ZBC_SUPPORTED = 1; localparam ZBS_SUPPORTED = 1; +// New compressed instructions +localparam ZCB_SUPPORTED = 1; +localparam ZCA_SUPPORTED = 0; +localparam ZCF_SUPPORTED = 0; +localparam ZCD_SUPPORTED = 0; + // Memory synthesis configuration localparam USE_SRAM = 0; diff --git a/config/rv64i/config.vh b/config/rv64i/config.vh index 6add96e78..d87708c18 100644 --- a/config/rv64i/config.vh +++ b/config/rv64i/config.vh @@ -161,6 +161,12 @@ localparam ZBB_SUPPORTED = 0; localparam ZBC_SUPPORTED = 0; localparam ZBS_SUPPORTED = 0; +// New compressed instructions +localparam ZCB_SUPPORTED = 0; +localparam ZCA_SUPPORTED = 0; +localparam ZCF_SUPPORTED = 0; +localparam ZCD_SUPPORTED = 0; + // Memory synthesis configuration localparam USE_SRAM = 0; diff --git a/config/shared/parameter-defs.vh b/config/shared/parameter-defs.vh index 4921f6a3d..f3f216062 100644 --- a/config/shared/parameter-defs.vh +++ b/config/shared/parameter-defs.vh @@ -96,6 +96,10 @@ localparam cvw_t P = '{ ZBB_SUPPORTED : ZBB_SUPPORTED, ZBC_SUPPORTED : ZBC_SUPPORTED, ZBS_SUPPORTED : ZBS_SUPPORTED, + ZCA_SUPPORTED : ZCA_SUPPORTED, + ZCB_SUPPORTED : ZCB_SUPPORTED, + ZCD_SUPPORTED : ZCD_SUPPORTED, + ZCF_SUPPORTED : ZCF_SUPPORTED, USE_SRAM : USE_SRAM, M_MODE : M_MODE, S_MODE : S_MODE, diff --git a/src/cvw.sv b/src/cvw.sv index f64618574..01e0d6376 100644 --- a/src/cvw.sv +++ b/src/cvw.sv @@ -161,6 +161,12 @@ typedef struct packed { logic ZBC_SUPPORTED; logic ZBS_SUPPORTED; +// compressed + logic ZCA_SUPPORTED; + logic ZCB_SUPPORTED; + logic ZCD_SUPPORTED; + logic ZCF_SUPPORTED; + // Memory synthesis configuration logic USE_SRAM; diff --git a/src/ifu/decompress.sv b/src/ifu/decompress.sv index 1605ed039..5c4395a12 100644 --- a/src/ifu/decompress.sv +++ b/src/ifu/decompress.sv @@ -30,7 +30,7 @@ //////////////////////////////////////////////////////////////////////////////////////////////// -module decompress #(parameter XLEN)( +module decompress import cvw::*; #(parameter cvw_t P) ( input logic [31:0] InstrRawD, // 32-bit instruction or raw compressed 16-bit instruction in bottom half output logic [31:0] InstrD, // Decompressed instruction output logic IllegalCompInstrD // Invalid decompressed instruction @@ -88,20 +88,60 @@ module decompress #(parameter XLEN)( IllegalCompInstrD = 1; InstrD = {16'b0, instr16}; // preserve instruction for mtval on trap end - 5'b00001: InstrD = {immCLD, rs1p, 3'b011, rdp, 7'b0000111}; // c.fld + 5'b00001: if (P.C_SUPPORTED & P.D_SUPPORTED | P.ZCD_SUPPORTED) + InstrD = {immCLD, rs1p, 3'b011, rdp, 7'b0000111}; // c.fld + else begin // unsupported instruction + IllegalCompInstrD = 1; + InstrD = {16'b0, instr16}; // preserve instruction for mtval on trap + end 5'b00010: InstrD = {immCL, rs1p, 3'b010, rdp, 7'b0000011}; // c.lw - 5'b00011: if (XLEN==32) - InstrD = {immCL, rs1p, 3'b010, rdp, 7'b0000111}; // c.flw + 5'b00011: if (P.XLEN==32) + if (P.C_SUPPORTED & P.F_SUPPORTED | P.ZCF_SUPPORTED) + InstrD = {immCL, rs1p, 3'b010, rdp, 7'b0000111}; // c.flw + else begin + IllegalCompInstrD = 1; + InstrD = {16'b0, instr16}; // preserve instruction for mtval on trap + end else InstrD = {immCLD, rs1p, 3'b011, rdp, 7'b0000011}; // c.ld; - 5'b00101: InstrD = {immCSD[11:5], rs2p, rs1p, 3'b011, immCSD[4:0], 7'b0100111}; // c.fsd + 5'b00100: if (P.ZCB_SUPPORTED) + if (instr16[12:10] == 3'b000) + InstrD = {10'b0, instr16[6:5], rs1p, 3'b100, rdp, 7'b0000011}; // c.lbu + else if (instr16[12:10] == 3'b001) begin + if (instr16[6]) + InstrD = {10'b0, instr16[5], 1'b0, rs1p, 3'b001, rdp, 7'b0000011}; // c.lh + else + InstrD = {10'b0, instr16[5], 1'b0, rs1p, 3'b101, rdp, 7'b0000011}; // c.lhu + end else if (instr16[12:10] == 3'b010) + InstrD = {7'b0, rs2p, rs1p, 3'b000, 3'b000, instr16[6:5], 7'b0000011}; // c.sb + else if (instr16[12:10] == 3'b011 & instr16[6] == 1'b0) + InstrD = {7'b0, rs2p, rs1p, 3'b001, 3'b000, instr16[5], 1'b0, 7'b0000011}; // c.sh + else begin + IllegalCompInstrD = 1; + InstrD = {16'b0, instr16}; // preserve instruction for mtval on trap + end + else begin + IllegalCompInstrD = 1; + InstrD = {16'b0, instr16}; // preserve instruction for mtval on trap + end + 5'b00101: if (P.C_SUPPORTED & P.D_SUPPORTED | P.ZCD_SUPPORTED) + InstrD = {immCSD[11:5], rs2p, rs1p, 3'b011, immCSD[4:0], 7'b0100111}; // c.fsd + else begin // unsupported instruction + IllegalCompInstrD = 1; + InstrD = {16'b0, instr16}; // preserve instruction for mtval on trap + end 5'b00110: InstrD = {immCS[11:5], rs2p, rs1p, 3'b010, immCS[4:0], 7'b0100011}; // c.sw - 5'b00111: if (XLEN==32) - InstrD = {immCS[11:5], rs2p, rs1p, 3'b010, immCS[4:0], 7'b0100111}; // c.fsw + 5'b00111: if (P.XLEN==32) + if (P.C_SUPPORTED & P.F_SUPPORTED | P.ZCF_SUPPORTED) + InstrD = {immCS[11:5], rs2p, rs1p, 3'b010, immCS[4:0], 7'b0100111}; // c.fsw + else begin + IllegalCompInstrD = 1; + InstrD = {16'b0, instr16}; // preserve instruction for mtval on trap + end else InstrD = {immCSD[11:5], rs2p, rs1p, 3'b011, immCSD[4:0], 7'b0100011}; //c.sd 5'b01000: InstrD = {immCI, rds1, 3'b000, rds1, 7'b0010011}; // c.addi - 5'b01001: if (XLEN==32) + 5'b01001: if (P.XLEN==32) InstrD = {immCJ, 5'b00001, 7'b1101111}; // c.jal else InstrD = {immCI, rds1, 3'b000, rds1, 7'b0011011}; // c.addiw @@ -125,33 +165,51 @@ module decompress #(parameter XLEN)( InstrD = {7'b0000000, rs2p, rds1p, 3'b110, rds1p, 7'b0110011}; // c.or else // if (instr16[6:5] == 2'b11) InstrD = {7'b0000000, rs2p, rds1p, 3'b111, rds1p, 7'b0110011}; // c.and - else if (XLEN > 32) //if (instr16[12:10] == 3'b111) full truth table no need to check [12:10] - if (instr16[6:5] == 2'b00) + else if (instr16[12:10] == 3'b111) begin + if (instr16[6:5] == 2'b00 & P.XLEN > 32) InstrD = {7'b0100000, rs2p, rds1p, 3'b000, rds1p, 7'b0111011}; // c.subw - else if (instr16[6:5] == 2'b01) + else if (instr16[6:5] == 2'b01 & P.XLEN > 32) InstrD = {7'b0000000, rs2p, rds1p, 3'b000, rds1p, 7'b0111011}; // c.addw + else if (instr16[6:2] == 5'b11000 & P.ZCB_SUPPORTED) + InstrD = {12'b000011111111, rds1p, 3'b111, rds1p, 7'b0010011}; // c.zext.b = andi rd, rs1, 255 + else if (instr16[6:2] == 5'b10101 & P.ZCB_SUPPORTED) + InstrD = {12'b011000000100, rds1p, 3'b001, rds1p, 7'b0010011}; // c.sext.b + else if (instr16[6:2] == 5'b11010 & P.ZCB_SUPPORTED) + InstrD = {7'b0000100, 5'b00000, rds1p, 3'b100, rds1p, 3'b011, P.XLEN > 32, 3'b011}; // c.zext.h + else if (instr16[6:2] == 5'b11011 & P.ZCB_SUPPORTED) + InstrD = {12'b011000000101, rds1p, 3'b001, rds1p, 7'b0010011}; // c.sext.h + else if (instr16[6:2] == 5'b11101 & P.ZCB_SUPPORTED) + InstrD = {12'b111111111111, rds1p, 3'b100, rds1p, 7'b0010011}; // c.not = xori + else if (instr16[6:2] == 5'b11100 & P.ZCB_SUPPORTED & P.XLEN > 32) + InstrD = {7'b0000100, 5'b00000, rds1p, 3'b000, rds1p, 7'b0111011}; // c.zext.w = add.uw rd, rs1, 0 + else if (instr16[6:5] == 2'b10 & P.ZCB_SUPPORTED) + InstrD = {7'b0000001, rs2p, rds1p, 3'b000, rds1p, 7'b0110011}; // c.mul else begin // reserved IllegalCompInstrD = 1; InstrD = {16'b0, instr16}; // preserve instruction for mtval on trap end - // coverage off - // are excluding this branch from coverage because in rv64gc XLEN is always 64 and thus greater than 32 bits - // This branch will only be taken if instr16[12:10] == 3'b111 and 'XLEN !> 32, because all other - // possible values for instr16[12:10] are covered by branches above. XLEN !> 32 - // will never occur in rv64gc so this branch can not be covered - else begin // illegal instruction + end else begin // illegal instruction IllegalCompInstrD = 1; InstrD = {16'b0, instr16}; // preserve instruction for mtval on trap end - // coverage on 5'b01101: InstrD = {immCJ, 5'b00000, 7'b1101111}; // c.j 5'b01110: InstrD = {immCB[11:5], 5'b00000, rs1p, 3'b000, immCB[4:0], 7'b1100011}; // c.beqz 5'b01111: InstrD = {immCB[11:5], 5'b00000, rs1p, 3'b001, immCB[4:0], 7'b1100011}; // c.bnez 5'b10000: InstrD = {6'b000000, immSH, rds1, 3'b001, rds1, 7'b0010011}; // c.slli - 5'b10001: InstrD = {immCILSPD, 5'b00010, 3'b011, rds1, 7'b0000111}; // c.fldsp + 5'b10001: if (P.C_SUPPORTED & P.D_SUPPORTED | P.ZCD_SUPPORTED) + InstrD = {immCILSPD, 5'b00010, 3'b011, rds1, 7'b0000111}; // c.fldsp + else begin // unsupported instruction + IllegalCompInstrD = 1; + InstrD = {16'b0, instr16}; // preserve instruction for mtval on trap + end 5'b10010: InstrD = {immCILSP, 5'b00010, 3'b010, rds1, 7'b0000011}; // c.lwsp - 5'b10011: if (XLEN == 32) - InstrD = {immCILSP, 5'b00010, 3'b010, rds1, 7'b0000111}; // c.flwsp + 5'b10011: if (P.XLEN == 32) + if (P.C_SUPPORTED & P.F_SUPPORTED | P.ZCF_SUPPORTED) + InstrD = {immCILSP, 5'b00010, 3'b010, rds1, 7'b0000111}; // c.flwsp + else begin + IllegalCompInstrD = 1; + InstrD = {16'b0, instr16}; // preserve instruction for mtval on trap + end else InstrD = {immCILSPD, 5'b00010, 3'b011, rds1, 7'b0000011}; // c.ldsp 5'b10100: if (instr16[12] == 0) @@ -167,10 +225,20 @@ module decompress #(parameter XLEN)( InstrD = {12'b0, rds1, 3'b000, 5'b00001, 7'b1100111}; // c.jalr else InstrD = {7'b0000000, rs2, rds1, 3'b000, rds1, 7'b0110011}; // c.add - 5'b10101: InstrD = {immCSSD[11:5], rs2, 5'b00010, 3'b011, immCSSD[4:0], 7'b0100111}; // c.fsdsp + 5'b10101: if (P.C_SUPPORTED & P.D_SUPPORTED | P.ZCD_SUPPORTED) + InstrD = {immCSSD[11:5], rs2, 5'b00010, 3'b011, immCSSD[4:0], 7'b0100111}; // c.fsdsp + else begin // unsupported instruction + IllegalCompInstrD = 1; + InstrD = {16'b0, instr16}; // preserve instruction for mtval on trap + end 5'b10110: InstrD = {immCSS[11:5], rs2, 5'b00010, 3'b010, immCSS[4:0], 7'b0100011}; // c.swsp - 5'b10111: if (XLEN==32) - InstrD = {immCSS[11:5], rs2, 5'b00010, 3'b010, immCSS[4:0], 7'b0100111}; // c.fswsp + 5'b10111: if (P.XLEN==32) + if (P.C_SUPPORTED & P.F_SUPPORTED | P.ZCF_SUPPORTED) + InstrD = {immCSS[11:5], rs2, 5'b00010, 3'b010, immCSS[4:0], 7'b0100111}; // c.fswsp + else begin + IllegalCompInstrD = 1; + InstrD = {16'b0, instr16}; // preserve instruction for mtval on trap + end else InstrD = {immCSSD[11:5], rs2, 5'b00010, 3'b011, immCSSD[4:0], 7'b0100011}; // c.sdsp default: begin // illegal instruction diff --git a/src/ifu/ifu.sv b/src/ifu/ifu.sv index d63a987b2..af6f70898 100644 --- a/src/ifu/ifu.sv +++ b/src/ifu/ifu.sv @@ -353,9 +353,9 @@ module ifu import cvw::*; #(parameter cvw_t P) ( flopenrc #(P.XLEN) PCDReg(clk, reset, FlushD, ~StallD, PCF, PCD); // expand 16-bit compressed instructions to 32 bits - if (P.C_SUPPORTED) begin + if (P.C_SUPPORTED | P.ZCA_SUPPORTED) begin logic IllegalCompInstrD; - decompress #(P.XLEN) decomp(.InstrRawD, .InstrD, .IllegalCompInstrD); + decompress #(P) decomp(.InstrRawD, .InstrD, .IllegalCompInstrD); assign IllegalIEUInstrD = IllegalBaseInstrD | IllegalCompInstrD; // illegal if bad 32 or 16-bit instr end else begin assign InstrD = InstrRawD; diff --git a/testbench/common/riscvassertions.sv b/testbench/common/riscvassertions.sv index a6cee910e..815478390 100644 --- a/testbench/common/riscvassertions.sv +++ b/testbench/common/riscvassertions.sv @@ -63,6 +63,11 @@ module riscvassertions import cvw::*; #(parameter cvw_t P); assert ((P.ZICBOP_SUPPORTED == 0) || (P.DCACHE_SUPPORTED == 1)) else $error("ZICBOP requires DCACHE_SUPPORTED"); assert ((P.SVPBMT_SUPPORTED == 0) || (P.VIRTMEM_SUPPORTED == 1 && P.XLEN==64)) else $error("SVPBMT requires VIRTMEM_SUPPORTED and RV64"); assert ((P.SVNAPOT_SUPPORTED == 0) || (P.VIRTMEM_SUPPORTED == 1 && P.XLEN==64)) else $error("SVNAPOT requires VIRTMEM_SUPPORTED and RV64"); + assert ((P.ZCB_SUPPORTED == 0) || (P.M_SUPPORTED == 1 && (P.ZBA_SUPPORTED == 1 || P.XLEN == 32) && P.ZBB_SUPPORTED == 1)) else $error("ZCB requires M and ZBB (and also ZBA for RV64)"); + assert ((P.C_SUPPORTED == 0) || (P.ZCA_SUPPORTED == 0 && P.ZCF_SUPPORTED == 0 && P.ZCD_SUPPORTED == 0)) else $error("C and ZCA/ZCD/ZCF cannot simultaneously be supported"); + assert ((P.ZCA_SUPPORTED == 1) || (P.ZCD_SUPPORTED == 0 && P.ZCF_SUPPORTED == 0)) else $error("ZCF or ZCD requires ZCA"); + assert ((P.ZCF_SUPPORTED == 0) || (P.F_SUPPORTED == 1)) else $error("ZCF requires F"); + assert ((P.ZCD_SUPPORTED == 0) || (P.D_SUPPORTED == 1)) else $error("ZCD requires D"); end endmodule From 81c44a4cb3d9eca3c54b89f3b8d34bd4679724c2 Mon Sep 17 00:00:00 2001 From: Ross Thompson Date: Wed, 4 Oct 2023 17:11:47 -0500 Subject: [PATCH 31/32] Fixed imperas linux testbench. --- testbench/common/wallyTracer.sv | 10 +- testbench/testbench-linux-imperas.sv | 137 ++++++++++++++------------- 2 files changed, 76 insertions(+), 71 deletions(-) diff --git a/testbench/common/wallyTracer.sv b/testbench/common/wallyTracer.sv index 42f55bf09..499233b93 100644 --- a/testbench/common/wallyTracer.sv +++ b/testbench/common/wallyTracer.sv @@ -40,7 +40,7 @@ module wallyTracer import cvw::*; #(parameter cvw_t P) (rvviTrace rvvi); logic StallF, StallD; logic STATUS_SXL, STATUS_UXL; logic [P.XLEN-1:0] PCNextF, PCF, PCD, PCE, PCM, PCW; - logic [P.XLEN-1:0] InstrRawD, InstrRawE, InstrRawM, InstrRawW; + logic [31:0] InstrRawD, InstrRawE, InstrRawM, InstrRawW; logic InstrValidM, InstrValidW; logic StallE, StallM, StallW; logic FlushD, FlushE, FlushM, FlushW; @@ -259,10 +259,10 @@ module wallyTracer import cvw::*; #(parameter cvw_t P) (rvviTrace rvvi); assign CSRWriteM = testbench.dut.core.priv.priv.csr.CSRWriteM; // pipeline to writeback stage - flopenrc #(P.XLEN) InstrRawEReg (clk, reset, FlushE, ~StallE, InstrRawD, InstrRawE); - flopenrc #(P.XLEN) InstrRawMReg (clk, reset, FlushM, ~StallM, InstrRawE, InstrRawM); - flopenrc #(P.XLEN) InstrRawWReg (clk, reset, FlushW, ~StallW, InstrRawM, InstrRawW); - flopenrc #(P.XLEN) PCWReg (clk, reset, FlushW, ~StallW, PCM, PCW); + flopenrc #(32) InstrRawEReg (clk, reset, FlushE, ~StallE, InstrRawD, InstrRawE); + flopenrc #(32) InstrRawMReg (clk, reset, FlushM, ~StallM, InstrRawE, InstrRawM); + flopenrc #(32) InstrRawWReg (clk, reset, FlushW, ~StallW, InstrRawM, InstrRawW); + flopenrc #(32) PCWReg (clk, reset, FlushW, ~StallW, PCM, PCW); flopenrc #(1) InstrValidMReg (clk, reset, FlushW, ~StallW, InstrValidM, InstrValidW); flopenrc #(1) TrapWReg (clk, reset, 1'b0, ~StallW, TrapM, TrapW); flopenrc #(1) HaltWReg (clk, reset, 1'b0, ~StallW, HaltM, HaltW); diff --git a/testbench/testbench-linux-imperas.sv b/testbench/testbench-linux-imperas.sv index 79b354cb0..cca3dd5e5 100644 --- a/testbench/testbench-linux-imperas.sv +++ b/testbench/testbench-linux-imperas.sv @@ -24,7 +24,8 @@ // and limitations under the License. //////////////////////////////////////////////////////////////////////////////////////////////// -`include "wally-config.vh" +`include "config.vh" +`include "BranchPredictorType.vh" // This is set from the command line script // `define USE_IMPERAS_DV @@ -33,6 +34,8 @@ `include "idv/idv.svh" `endif +import cvw::*; + `define DEBUG_TRACE 0 // Debug Levels // 0: don't check against QEMU @@ -61,8 +64,7 @@ module testbench; `endif - - + `include "parameter-defs.vh" @@ -96,40 +98,40 @@ module testbench; integer TokenIndex``STAGE; \ integer MarkerIndex``STAGE; \ integer NumCSR``STAGE; \ - logic [`XLEN-1:0] ExpectedPC``STAGE; \ + logic [P.XLEN-1:0] ExpectedPC``STAGE; \ logic [31:0] ExpectedInstr``STAGE; \ string text``STAGE; \ string MemOp``STAGE; \ string RegWrite``STAGE; \ integer ExpectedRegAdr``STAGE; \ - logic [`XLEN-1:0] ExpectedRegValue``STAGE; \ - logic [`XLEN-1:0] ExpectedIEUAdr``STAGE, ExpectedMemReadData``STAGE, ExpectedMemWriteData``STAGE; \ + logic [P.XLEN-1:0] ExpectedRegValue``STAGE; \ + logic [P.XLEN-1:0] ExpectedIEUAdr``STAGE, ExpectedMemReadData``STAGE, ExpectedMemWriteData``STAGE; \ string ExpectedCSRArray``STAGE[10:0]; \ - logic [`XLEN-1:0] ExpectedCSRArrayValue``STAGE[10:0]; // *** might be redundant? + logic [P.XLEN-1:0] ExpectedCSRArrayValue``STAGE[10:0]; // *** might be redundant? `DECLARE_TRACE_SCANNER_SIGNALS(E) `DECLARE_TRACE_SCANNER_SIGNALS(M) // M-stage expected values logic checkInstrM; integer MIPexpected, SIPexpected; string name; - logic [`AHBW-1:0] readDataExpected; + logic [P.AHBW-1:0] readDataExpected; // W-stage expected values logic checkInstrW; - logic [`XLEN-1:0] ExpectedPCW; + logic [P.XLEN-1:0] ExpectedPCW; logic [31:0] ExpectedInstrW; string textW; string RegWriteW; integer ExpectedRegAdrW; - logic [`XLEN-1:0] ExpectedRegValueW; + logic [P.XLEN-1:0] ExpectedRegValueW; string MemOpW; - logic [`XLEN-1:0] ExpectedIEUAdrW, ExpectedMemReadDataW, ExpectedMemWriteDataW; + logic [P.XLEN-1:0] ExpectedIEUAdrW, ExpectedMemReadDataW, ExpectedMemWriteDataW; integer NumCSRW; string ExpectedCSRArrayW[10:0]; - logic [`XLEN-1:0] ExpectedCSRArrayValueW[10:0]; - logic [`XLEN-1:0] ExpectedIntType; + logic [P.XLEN-1:0] ExpectedCSRArrayValueW[10:0]; + logic [P.XLEN-1:0] ExpectedIntType; integer NumCSRWIndex; integer NumCSRPostWIndex; - logic [`XLEN-1:0] InstrCountW; + logic [P.XLEN-1:0] InstrCountW; // ========== Interrupt parsing & spoofing ========== string interrupt; string interruptLine; @@ -143,7 +145,7 @@ module testbench; string interruptDesc; integer NextMIPexpected, NextSIPexpected; integer NextMepcExpected; - logic [`XLEN-1:0] AttemptedInstructionCount; + logic [P.XLEN-1:0] AttemptedInstructionCount; // ========== Misc Aliases ========== `define RF dut.core.ieu.dp.regf.rf `define PC dut.core.ifu.pcreg.q @@ -168,7 +170,7 @@ module testbench; `define SSCRATCH `CSR_BASE.csrs.csrs.SSCRATCHreg.q `define MTVEC `CSR_BASE.csrm.MTVECreg.q `define STVEC `CSR_BASE.csrs.csrs.STVECreg.q - `define SATP `CSR_BASE.csrs.csrs.genblk1.SATPreg.q + `define SATP `CSR_BASE.csrs.csrs.genblk2.SATPreg.q `define INSTRET `CSR_BASE.counters.counters.HPMCOUNTER_REGW[2] `define MSTATUS `CSR_BASE.csrsr.MSTATUS_REGW `define SSTATUS `CSR_BASE.csrsr.SSTATUS_REGW @@ -249,14 +251,14 @@ module testbench; initial begin reset_ext <= 1; # 22; reset_ext <= 0; end always begin clk <= 1; # 5; clk <= 0; # 5; end // Wally Interface - logic [`AHBW-1:0] HRDATAEXT; + logic [P.AHBW-1:0] HRDATAEXT; logic HREADYEXT, HRESPEXT; logic HCLK, HRESETn; logic HREADY; logic HSELEXT; - logic [`PA_BITS-1:0] HADDR; - logic [`AHBW-1:0] HWDATA; - logic [`XLEN/8-1:0] HWSTRB; + logic [P.PA_BITS-1:0] HADDR; + logic [P.AHBW-1:0] HWDATA; + logic [P.XLEN/8-1:0] HWSTRB; logic HWRITE; logic [2:0] HSIZE; logic [2:0] HBURST; @@ -273,10 +275,13 @@ module testbench; logic SDCCmdOut; logic SDCCmdOE; logic [3:0] SDCDatIn; + logic SDCIntr; + // Hardwire UART, GPIO pins - assign GPIOPinsIn = 0; + assign GPIOIN = 0; assign UARTSin = 1; + assign SDCIntr = 0; @@ -284,8 +289,8 @@ module testbench; logic DCacheFlushDone, DCacheFlushStart; - rvviTrace #(.XLEN(`XLEN), .FLEN(`FLEN)) rvvi(); - wallyTracer wallyTracer(rvvi); + rvviTrace #(.XLEN(P.XLEN), .FLEN(P.FLEN)) rvvi(); + wallyTracer #(P) wallyTracer(rvvi); trace2log idv_trace2log(rvvi); // trace2cov idv_trace2cov(rvvi); @@ -344,23 +349,23 @@ module testbench; // Privileges for PMA are set in the imperas.ic // volatile (IO) regions are defined here // only real ROM/RAM areas are BOOTROM and UNCORE_RAM - if (`CLINT_SUPPORTED) begin - void'(rvviRefMemorySetVolatile(`CLINT_BASE, (`CLINT_BASE + `CLINT_RANGE))); + if (P.CLINT_SUPPORTED) begin + void'(rvviRefMemorySetVolatile(P.CLINT_BASE, (P.CLINT_BASE + P.CLINT_RANGE))); end - if (`GPIO_SUPPORTED) begin - void'(rvviRefMemorySetVolatile(`GPIO_BASE, (`GPIO_BASE + `GPIO_RANGE))); + if (P.GPIO_SUPPORTED) begin + void'(rvviRefMemorySetVolatile(P.GPIO_BASE, (P.GPIO_BASE + P.GPIO_RANGE))); end - if (`UART_SUPPORTED) begin - void'(rvviRefMemorySetVolatile(`UART_BASE, (`UART_BASE + `UART_RANGE))); + if (P.UART_SUPPORTED) begin + void'(rvviRefMemorySetVolatile(P.UART_BASE, (P.UART_BASE + P.UART_RANGE))); end - if (`PLIC_SUPPORTED) begin - void'(rvviRefMemorySetVolatile(`PLIC_BASE, (`PLIC_BASE + `PLIC_RANGE))); + if (P.PLIC_SUPPORTED) begin + void'(rvviRefMemorySetVolatile(P.PLIC_BASE, (P.PLIC_BASE + P.PLIC_RANGE))); end - if (`SDC_SUPPORTED) begin - void'(rvviRefMemorySetVolatile(`SDC_BASE, (`SDC_BASE + `SDC_RANGE))); + if (P.SDC_SUPPORTED) begin + void'(rvviRefMemorySetVolatile(P.SDC_BASE, (P.SDC_BASE + P.SDC_RANGE))); end - if(`XLEN==32) begin + if(P.XLEN==32) begin void'(rvviRefCsrSetVolatile(0, 32'hC80)); // CYCLEH void'(rvviRefCsrSetVolatile(0, 32'hB80)); // MCYCLEH void'(rvviRefCsrSetVolatile(0, 32'hC82)); // INSTRETH @@ -427,28 +432,28 @@ module testbench; // Wally - wallypipelinedsoc dut(.clk, .reset, .reset_ext, + wallypipelinedsoc #(P) dut(.clk, .reset, .reset_ext, .HRDATAEXT, .HREADYEXT, .HREADY, .HSELEXT, .HRESPEXT, .HCLK, .HRESETn, .HADDR, .HWDATA, .HWRITE, .HWSTRB, .HSIZE, .HBURST, .HPROT, .HTRANS, .HMASTLOCK, .TIMECLK('0), .GPIOIN, .GPIOOUT, .GPIOEN, .UARTSin, .UARTSout, - .SDCCLK, .SDCCmdIn, .SDCCmdOut, .SDCCmdOE, .SDCDatIn); + .SDCIntr); // W-stage hardware not needed by Wally itself parameter nop = 'h13; - logic [`XLEN-1:0] PCW; + logic [P.XLEN-1:0] PCW; logic [31:0] InstrW; logic InstrValidW; - logic [`XLEN-1:0] IEUAdrW, WriteDataW; + logic [P.XLEN-1:0] IEUAdrW, WriteDataW; logic TrapW; `define FLUSHW dut.core.FlushW `define STALLW dut.core.StallW - flopenrc #(`XLEN) PCWReg(clk, reset, `FLUSHW, ~`STALLW, `PCM, PCW); + flopenrc #(P.XLEN) PCWReg(clk, reset, `FLUSHW, ~`STALLW, `PCM, PCW); flopenr #(32) InstrWReg(clk, reset, ~`STALLW, `FLUSHW ? nop : dut.core.ifu.InstrM, InstrW); flopenrc #(1) controlregW(clk, reset, `FLUSHW, ~`STALLW, dut.core.ieu.c.InstrValidM, InstrValidW); - flopenrc #(`XLEN) IEUAdrWReg(clk, reset, `FLUSHW, ~`STALLW, dut.core.IEUAdrM, IEUAdrW); - flopenrc #(`XLEN) WriteDataWReg(clk, reset, `FLUSHW, ~`STALLW, dut.core.lsu.WriteDataM, WriteDataW); + flopenrc #(P.XLEN) IEUAdrWReg(clk, reset, `FLUSHW, ~`STALLW, dut.core.IEUAdrM, IEUAdrW); + flopenrc #(P.XLEN) WriteDataWReg(clk, reset, `FLUSHW, ~`STALLW, dut.core.lsu.WriteDataM, WriteDataW); flopenr #(1) TrapWReg(clk, reset, ~`STALLW, dut.core.hzu.TrapM, TrapW); @@ -524,29 +529,29 @@ module testbench; end genvar i; - `INIT_CHECKPOINT_SIMPLE_ARRAY(RF, [`XLEN-1:0],31,1); - `INIT_CHECKPOINT_SIMPLE_ARRAY(HPMCOUNTER, [`XLEN-1:0],`COUNTERS-1,0); - `INIT_CHECKPOINT_VAL(PC, [`XLEN-1:0]); - `INIT_CHECKPOINT_VAL(MEDELEG, [`XLEN-1:0]); - `INIT_CHECKPOINT_VAL(MIDELEG, [`XLEN-1:0]); + `INIT_CHECKPOINT_SIMPLE_ARRAY(RF, [P.XLEN-1:0],31,1); + `INIT_CHECKPOINT_SIMPLE_ARRAY(HPMCOUNTER, [P.XLEN-1:0],P.COUNTERS-1,0); + `INIT_CHECKPOINT_VAL(PC, [P.XLEN-1:0]); + `INIT_CHECKPOINT_VAL(MEDELEG, [P.XLEN-1:0]); + `INIT_CHECKPOINT_VAL(MIDELEG, [P.XLEN-1:0]); if(!NO_SPOOFING) begin `INIT_CHECKPOINT_VAL(MIE, [11:0]); `INIT_CHECKPOINT_VAL(MIP, [11:0]); end - `INIT_CHECKPOINT_VAL(MCAUSE, [`XLEN-1:0]); - `INIT_CHECKPOINT_VAL(SCAUSE, [`XLEN-1:0]); - `INIT_CHECKPOINT_VAL(MEPC, [`XLEN-1:0]); - `INIT_CHECKPOINT_VAL(SEPC, [`XLEN-1:0]); + `INIT_CHECKPOINT_VAL(MCAUSE, [P.XLEN-1:0]); + `INIT_CHECKPOINT_VAL(SCAUSE, [P.XLEN-1:0]); + `INIT_CHECKPOINT_VAL(MEPC, [P.XLEN-1:0]); + `INIT_CHECKPOINT_VAL(SEPC, [P.XLEN-1:0]); `INIT_CHECKPOINT_VAL(MCOUNTEREN, [31:0]); `INIT_CHECKPOINT_VAL(SCOUNTEREN, [31:0]); - `INIT_CHECKPOINT_VAL(MSCRATCH, [`XLEN-1:0]); - `INIT_CHECKPOINT_VAL(SSCRATCH, [`XLEN-1:0]); - `INIT_CHECKPOINT_VAL(MTVEC, [`XLEN-1:0]); - `INIT_CHECKPOINT_VAL(STVEC, [`XLEN-1:0]); - `INIT_CHECKPOINT_VAL(SATP, [`XLEN-1:0]); + `INIT_CHECKPOINT_VAL(MSCRATCH, [P.XLEN-1:0]); + `INIT_CHECKPOINT_VAL(SSCRATCH, [P.XLEN-1:0]); + `INIT_CHECKPOINT_VAL(MTVEC, [P.XLEN-1:0]); + `INIT_CHECKPOINT_VAL(STVEC, [P.XLEN-1:0]); + `INIT_CHECKPOINT_VAL(SATP, [P.XLEN-1:0]); `INIT_CHECKPOINT_VAL(PRIV, [1:0]); - `INIT_CHECKPOINT_PACKED_ARRAY(PLIC_INT_PRIORITY, [2:0],`PLIC_NUM_SRC,1); - `MAKE_CHECKPOINT_INIT_SIGNAL(PLIC_INT_ENABLE, [`PLIC_NUM_SRC:0],1,0); + `INIT_CHECKPOINT_PACKED_ARRAY(PLIC_INT_PRIORITY, [2:0],P.PLIC_NUM_SRC,1); + `MAKE_CHECKPOINT_INIT_SIGNAL(PLIC_INT_ENABLE, [P.PLIC_NUM_SRC:0],1,0); `INIT_CHECKPOINT_PACKED_ARRAY(PLIC_THRESHOLD, [2:0],1,0); // UART checkpointing does not cover entire UART state // Many UART registers are difficult to initialize because under the hood @@ -561,8 +566,8 @@ module testbench; `INIT_CHECKPOINT_VAL(UART_SCR, [7:0]); // xSTATUS need to be handled manually because the most upstream signals // are made of individual bits, not registers - `MAKE_CHECKPOINT_INIT_SIGNAL(MSTATUS, [`XLEN-1:0],0,0); - `MAKE_CHECKPOINT_INIT_SIGNAL(SSTATUS, [`XLEN-1:0],0,0); + `MAKE_CHECKPOINT_INIT_SIGNAL(MSTATUS, [P.XLEN-1:0],0,0); + `MAKE_CHECKPOINT_INIT_SIGNAL(SSTATUS, [P.XLEN-1:0],0,0); // ========== INITIALIZATION ========== initial begin @@ -618,7 +623,7 @@ module testbench; force {`STATUS_SPIE} = initMSTATUS[0][5]; force {`STATUS_MIE} = initMSTATUS[0][3]; force {`STATUS_SIE} = initMSTATUS[0][1]; - force `PLIC_INT_ENABLE = {initPLIC_INT_ENABLE[1][`PLIC_NUM_SRC:1],initPLIC_INT_ENABLE[0][`PLIC_NUM_SRC:1]}; // would need to expand into a generate loop to cover an arbitrary number of contexts + force `PLIC_INT_ENABLE = {initPLIC_INT_ENABLE[1][P.PLIC_NUM_SRC:1],initPLIC_INT_ENABLE[0][P.PLIC_NUM_SRC:1]}; // would need to expand into a generate loop to cover an arbitrary number of contexts force `INSTRET = CHECKPOINT; while (reset!==1) #1; while (reset!==0) #1; @@ -871,7 +876,7 @@ module testbench; "scause": `checkCSR(`CSR_BASE.csrs.csrs.SCAUSE_REGW) "stvec": `checkCSR(`CSR_BASE.csrs.csrs.STVEC_REGW) "stval": `checkCSR(`CSR_BASE.csrs.csrs.STVAL_REGW) - "senvcfg": `checkCSR(`CSR_BASE.csrs.SENVCFG_REGW) + // "senvcfg": `checkCSR(`CSR_BASE.csrs.SENVCFG_REGW) // *** fix me "mip": begin `checkCSR(`CSR_BASE.csrm.MIP_REGW) if(!NO_SPOOFING) begin @@ -951,7 +956,7 @@ module testbench; //////////////////////////////// Extra Features /////////////////////////////// /////////////////////////////////////////////////////////////////////////////// // Function Tracking - FunctionName FunctionName(.reset(reset), + FunctionName #(P) FunctionName(.reset(reset), .clk(clk), .ProgramAddrMapFile(ProgramAddrMapFile), .ProgramLabelMapFile(ProgramLabelMapFile)); @@ -976,12 +981,12 @@ module testbench; * explanation of the below algorithm. */ logic SvMode, PTE_R, PTE_X; - logic [`XLEN-1:0] SATP, PTE; + logic [P.XLEN-1:0] SATP, PTE; logic [55:0] BaseAdr, PAdr; logic [8:0] VPN [2:0]; logic [11:0] Offset; - function logic [`XLEN-1:0] adrTranslator( - input logic [`XLEN-1:0] adrIn); + function logic [P.XLEN-1:0] adrTranslator( + input logic [P.XLEN-1:0] adrIn); begin int i; // Grab the SATP register from privileged unit @@ -995,7 +1000,7 @@ module testbench; SvMode = SATP[63]; // Only perform translation if translation is on and the processor is not // in machine mode - if (SvMode & (dut.core.priv.priv.PrivilegeModeW != `M_MODE)) begin + if (SvMode & (dut.core.priv.priv.PrivilegeModeW != P.M_MODE)) begin BaseAdr = SATP[43:0] << 12; for (i = 2; i >= 0; i--) begin PAdr = BaseAdr + (VPN[i] << 3); From fc83f33615f5c75336f9c927d2486db53d38a20d Mon Sep 17 00:00:00 2001 From: Ross Thompson Date: Thu, 5 Oct 2023 13:00:46 -0500 Subject: [PATCH 32/32] Oups. When fixing the linux-imperasdv testbench I accidentally introduced a bug to the tracer. --- testbench/common/wallyTracer.sv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testbench/common/wallyTracer.sv b/testbench/common/wallyTracer.sv index 499233b93..d79c7c6cb 100644 --- a/testbench/common/wallyTracer.sv +++ b/testbench/common/wallyTracer.sv @@ -262,7 +262,7 @@ module wallyTracer import cvw::*; #(parameter cvw_t P) (rvviTrace rvvi); flopenrc #(32) InstrRawEReg (clk, reset, FlushE, ~StallE, InstrRawD, InstrRawE); flopenrc #(32) InstrRawMReg (clk, reset, FlushM, ~StallM, InstrRawE, InstrRawM); flopenrc #(32) InstrRawWReg (clk, reset, FlushW, ~StallW, InstrRawM, InstrRawW); - flopenrc #(32) PCWReg (clk, reset, FlushW, ~StallW, PCM, PCW); + flopenrc #(P.XLEN)PCWReg (clk, reset, FlushW, ~StallW, PCM, PCW); flopenrc #(1) InstrValidMReg (clk, reset, FlushW, ~StallW, InstrValidM, InstrValidW); flopenrc #(1) TrapWReg (clk, reset, 1'b0, ~StallW, TrapM, TrapW); flopenrc #(1) HaltWReg (clk, reset, 1'b0, ~StallW, HaltM, HaltW);