diff --git a/.github/workflows/ci-micropython.yml b/.github/workflows/ci-micropython.yml deleted file mode 100644 index c137318394..0000000000 --- a/.github/workflows/ci-micropython.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: Test MicroPython Releases -on: - push: - pull_request: - branches: [main] -jobs: - test-micropython: - name: Micropython ${{ matrix.micropython_version }} - runs-on: ubuntu-latest - strategy: - matrix: - micropython_version: - - 20210618-v1.16 - - 20210902-v1.17 - - 20220117-v1.18 - - 20220618-v1.19.1 - - 20230426-v1.20.0 - - 20231005-v1.21.0 - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: '3.10' - - name: Install packages - run: npm ci - - name: Install Python requirements - run: cd test && pip install -r requirements.txt - - name: Download Micropython - run: curl -o micropython.uf2 "https://micropython.org/resources/firmware/RPI_PICO-${VERSION}.uf2" - env: - VERSION: ${{ matrix.micropython_version }} - - name: Create filesystem - run: python test/mklittlefs.py littlefs.img test/micropython/main.py - - name: Test Micropython - run: timeout 10 npm run start:micropython -- --image micropython.uf2 --expect-text "Hello, MicroPython!" - - name: Create SPI test filesystem - run: python test/mklittlefs.py littlefs-spi.img test/micropython/main-spi.py - - name: Test Micropython SPI - run: timeout 10 npm run test:micropython-spi -- "hello world" "h" "0123456789abcdef0123456789abcdef0123456789abcdef" diff --git a/.github/workflows/ci-pico-sdk.yml b/.github/workflows/ci-pico-sdk.yml deleted file mode 100644 index c9b1dc9bfe..0000000000 --- a/.github/workflows/ci-pico-sdk.yml +++ /dev/null @@ -1,47 +0,0 @@ -name: Test Pi Pico SDK -on: - push: - pull_request: - branches: [main] -jobs: - test-pico-sdk: - name: Test Pi Pico SDK - runs-on: ubuntu-latest - strategy: - matrix: - sdk_version: - - 1.2.0 - - 1.3.1 - - 1.4.0 - - 1.5.1 - - 2.0.0 - - 2.1.1 - steps: - - uses: actions/checkout@v4 - - name: Cache Pico SDK - id: cache-pico-sdk - uses: actions/cache@v4 - with: - path: ~/pico - key: ${{ runner.os }}-pico-sdk-${{ matrix.sdk_version }} - - name: Set up the toolchain - if: steps.cache-pico-sdk.outputs.cache-hit != 'true' - run: | - sudo apt-get update - sudo apt-get install -y cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential - - name: Set up the Pi Pico SDK and examples - if: steps.cache-pico-sdk.outputs.cache-hit != 'true' - run: | - mkdir ~/pico - cd ~/pico - git clone https://github.com/raspberrypi/pico-sdk.git --depth 1 --branch ${SDK_VERSION} - cd pico-sdk && git submodule update --init && cd .. - git clone https://github.com/raspberrypi/pico-examples.git --depth 1 --branch "sdk-${SDK_VERSION}" - cd pico-examples && mkdir build && cd build && cmake .. && make -C hello_world/usb -j4 - env: - SDK_VERSION: ${{ matrix.sdk_version }} - PICO_SDK_PATH: ~/pico/pico-sdk - - name: Install NPM packages - run: npm ci - - name: Test "Hello World" example - run: timeout 10 npm run start:micropython -- --image ~/pico/pico-examples/build/hello_world/usb/hello_usb.uf2 --expect-text "Hello, world!" diff --git a/.github/workflows/ci-test.yml b/.github/workflows/ci-test.yml deleted file mode 100644 index 2f13d9ef12..0000000000 --- a/.github/workflows/ci-test.yml +++ /dev/null @@ -1,19 +0,0 @@ -name: Test and Lint -on: - push: - pull_request: - branches: [main] -jobs: - test: - name: Test and Lint - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Install packages - run: npm ci - - name: Prettier - run: npm run format:check - - name: Lint - run: npm run lint - - name: Test code - run: npm test diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000000..f79b70e9ae --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,22 @@ +name: CI + +on: + push: + pull_request: + +jobs: + test: + name: test (node ${{ matrix.node }}) + runs-on: ubuntu-latest + strategy: + matrix: + node: [20, 22] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node }} + # --ignore-scripts skips the husky `prepare` hook (no git hooks needed in CI). + # vitest transpiles on the fly, so no build step is required to run the suite. + - run: npm ci --ignore-scripts + - run: npm test diff --git a/CREDITS.md b/CREDITS.md new file mode 100644 index 0000000000..1f77b9718f --- /dev/null +++ b/CREDITS.md @@ -0,0 +1,35 @@ +# Credits + +This emulator is the third link in a chain of work, all under the MIT license. Each layer is +credited here; please keep this file intact in derivatives. + +## 1. rp2040js — Uri Shaked (Wokwi) + +The base RP2040 emulator: CPU bus, GPIO/PIO/DMA/UART/USB peripherals, the test harness, and the +ESM/NodeNext tooling this fork builds on. + +- https://github.com/wokwi/rp2040js + +## 2. RP2350 / Hazard3 RISC-V — c1570 + +The entire RP2350 emulation core — the Hazard3 RISC-V CPU and assembler (`src/riscv/*`), the RP2350 +chip (`rp2350.ts`, `rpchip.ts`, `core.ts`, `sio*.ts`, `irq_rp2350.ts`), and the RP2350 peripheral +variants (`*_rp2350.ts`, `bootram`, `powman`, …) — is **c1570's original work** (~50 hours), first +published on the `rp2350js/WIP` branch of his rp2040js fork. + +- https://github.com/c1570/rp2040js (branch `rp2350js/WIP`) + +It was imported here verbatim with c1570's commit authorship preserved (see the +`Import RP2350 / Hazard3 RISC-V engine from c1570/rp2040js` commit, authored to c1570). The full +253-commit history of his branch is preserved as a git bundle in the GhostLabs project that seeds +this fork. + +## 3. This fork — GhostRoboticsLab / Pratheek Balakrishna + +Re-bases c1570's RP2350 work onto the **latest upstream** wokwi/rp2040js, and contributes +correctness fixes to the RISC-V core (the M-extension, trap entry, the Hazard3 external-interrupt +controller, and several base-ISA instructions), each with a falsifiable regression test. See +[ROADMAP.md](./ROADMAP.md) and the `Fix RP2350 RISC-V core` commit. + +The defects fixed here were surfaced by an adversarial, multi-reviewer spec audit of c1570's core; +the fixes build directly on his groundwork and are offered back to the community in that spirit. diff --git a/LICENSE b/LICENSE index cedcf7b7f8..a3dd7a1f6f 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,8 @@ The MIT License (MIT) -Copyright (c) 2021 Uri Shaked +Copyright (c) 2021 Uri Shaked (rp2040js, the RP2040 emulator base) +Copyright (c) 2024-2025 c1570 (RP2350 / Hazard3 RISC-V emulation) +Copyright (c) 2026 GhostRoboticsLab / Pratheek Balakrishna (RP2350 RISC-V fixes, upstream port) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 2dfd98358b..a47901d49a 100644 --- a/README.md +++ b/README.md @@ -1,128 +1,81 @@ -![](../../actions/workflows/ci-test.yml/badge.svg) ![](../../actions/workflows/ci-micropython.yml/badge.svg) ![](../../actions/workflows/ci-pico-sdk.yml/badge.svg) - -# rp2040js - -Raspberry Pi Pico Emulator for the [Wokwi Simulation Platform](https://wokwi.com). It blinks, runs Arduino code, and even the MicroPython REPL! - -## Online examples - -If you are just looking to play around with the Raspberry Pi Pico Simulator, check out the Wokwi Simulator: - -- [Raspberry Pi Pico Traffic Light](https://wokwi.com/arduino/projects/297322571959894536) -- [LCD1602 Hello World](https://wokwi.com/arduino/projects/297323005822894602) -- [MicroPython Blink](https://wokwi.com/arduino/projects/300504213470839309) -- [MicroPython 7-Segment Counter](https://wokwi.com/arduino/projects/300210834979684872) - -For more information, take a look at the [wokwi-pi-pico docs](https://docs.wokwi.com/parts/wokwi-pi-pico) and the [Pi Pico MicroPython Guide](https://docs.wokwi.com/guides/micropython). - -If you want to develop your own application using the Raspberry Pi Pico simulator, the following examples may be helpful: - -- [Blink LEDs with RP2040js, from scratch](https://stackblitz.com/edit/rp2040js-blink?file=index.ts) - Press "Run" and patiently wait for the code to compile ;-) - -## Run the demo project - -### Native code - -You'd need to get `hello_uart.hex` by building it from the [pico-examples repo](https://github.com/raspberrypi/pico-examples/tree/master/uart/hello_uart), then copy it to the rp2040js root directory and run: - -``` +![CI](../../actions/workflows/ci.yml/badge.svg) + +# rp2350js — RP2350 (Hazard3 RISC-V) emulator + +A fork of [wokwi/rp2040js](https://github.com/wokwi/rp2040js) that emulates the **RP2350** +(Raspberry Pi Pico 2) **Hazard3 RISC-V** cores, with a corrected and tested RISC-V instruction +core. + +> **Status: early but real.** The RISC-V core boots and runs RV32IMAC + Zba/Zbb/Zbs/Zcb code and +> passes a verified instruction-correctness suite. The RP2350 peripheral layer is now multi-chip +> parameterized (`tsc` is clean), and the chip boots its A2 bootrom and runs real RISC-V firmware: +> **all three** firmware integration tests pass — **`blink_simple`** (GPIO via SIO), **`hello_timer`** +> (a 250M-step run driven by RP2350 timer interrupts), and **`pio_blink`** (two PIO blocks driving +> GPIO3 and GPIO32, the latter through the RP2350 GPIOBASE pin-window). **All 348 tests pass, none +> skipped.** Some RP2350 PIO features not yet exercised by firmware remain deferred — see +> **[ROADMAP.md](./ROADMAP.md)**. + +## Lineage & credit + +Three links in a chain, all MIT, all credited (see **[CREDITS.md](./CREDITS.md)**): + +1. **[wokwi/rp2040js](https://github.com/wokwi/rp2040js)** (Uri Shaked) — the RP2040 emulator base. +2. **[c1570/rp2040js](https://github.com/c1570/rp2040js)** (`rp2350js/WIP`) — added the entire + RP2350 / Hazard3 RISC-V core (~50 h). Imported here with authorship preserved. +3. **This fork** — re-bases c1570's RP2350 work onto the latest upstream and fixes the RISC-V core. + +## What this fork fixes in the RISC-V core + +c1570's core is an honest WIP; an adversarial spec review (7 ISA-area reviewers, each finding +independently verified) surfaced 19 confirmed defects. We fixed them, each with a falsifiable test: + +- **The whole RV32M multiply family.** `MUL` used JavaScript's float64 `*`, silently wrong for any + product above 2⁵³ (~95% of random operands); `MULH`/`MULHU` lost precision; **`MULHSU` was + undecoded and crashed the core.** Now exact via `Math.imul` / `BigInt`. +- **Synchronous trap entry.** `ECALL`/`EBREAK` skipped the handler's first instruction (landed at + `mtvec + ilen`) — would break a FreeRTOS `portYIELD`. Fixed. +- **Hazard3 external IRQ 0** (TIMER0_IRQ_0) was never delivered (NOIRQ tested via `irq==0` instead + of the `meinext` sign bit). Fixed. +- `SLTIU` immediate sign-extension, `JALR` LSB masking, `CSRRC` write gating, warm-reset PC, the + trap-entry `mstatus` update, and the **Zcb** compressed instructions the RP2350 bootrom needs. + +Two further trap bugs were found by **lockstepping this engine against c1570's** (which runs the +firmware) and bisecting the first divergence — these are what make a full firmware run work, not just +the unit suite: + +- **`MEINEXT` reset value.** It must reset to NOIRQ; a zeroed `MEINEXT` reads as "IRQ 0 pending", so + the IRQ-0 gate above took a *phantom* IRQ 0 the instant firmware enabled interrupts. (This was the + `hello_timer` stall.) +- **MTVEC mode bits.** Trap targets must mask `mtvec[1:0]`; a vectored mtvec (RP2350 firmware sets + `0x20000001`) otherwise sends an exception to an odd address and crashes. (This was the `pio_blink` + crash.) + +Most fixes have a regression test in +[`src/riscv/test/cpu-fixes.spec.ts`](./src/riscv/test/cpu-fixes.spec.ts), each **proven to fail on +the pre-fix engine** (negative control); the two trap fixes above are covered by the `hello_timer` +firmware-integration test. The illegal-instruction `throw` is kept deliberately as a +debug aid rather than silently trapping `mcause=2`. + +## Quick start + +```bash npm install -npm start +npm test # 348 pass, 0 skipped. hello_timer takes ~22s (a 250M-step firmware run). ``` -You can also specify the path to the image on the command line and/or load an UF2 image: +The RISC-V correctness suite alone: -```sh -npm run start -- --image ./my-pico-project.uf2 +```bash +npx vitest run src/riscv ``` -A GDB server will be available on port 3333, and the data written to UART0 will be printed -to the console. - -### MicroPython code - -To run the MicroPython demo, first download [RPI_PICO-20230426-v1.20.0.uf2](https://micropython.org/resources/firmware/RPI_PICO-20230426-v1.20.0.uf2), place it in the rp2040js root directory, then run: - -``` -npm install -npm run start:micropython -``` - -and enjoy the MicroPython REPL! Quit the REPL with Ctrl+X. A different MicroPython UF2 image can be loaded by supplying the `--image` option: - -``` -npm run start:micropython -- --image=my_image.uf2 -``` - -A GDB server on port 3333 can be enabled by specifying the `--gdb` flag: - -``` -npm run start:micropython -- --gdb -``` - -For using the MicroPython demo code in tests, the `--expect-text` can come handy: it will look for the given text in the serial output and exit with code 0 if found, or 1 if not found. You can find an example in [the MicroPython CI test](./.github/workflows/ci-micropython.yml). - -#### Filesystem support - -With MicroPython, you can use the filesystem on the Pico. This becomes useful as more than one script file is used in your code. Just put a [LittleFS](https://github.com/littlefs-project/littlefs) formatted filesystem image called `littlefs.img` into the rp2040js root directory, and your `main.py` will be automatically started from there. - -A simple way to create a suitable LittleFS image containing your script files is outlined in [create_littlefs_image.py](https://github.com/tomods/GrinderController/blob/358ad3e0f795d8cc0bdf4f21bb35f806871d433f/tools/create_littlefs_image.py). -So, using [littlefs-python](https://pypi.org/project/littlefs-python/), you can do the following: - -```python -from littlefs import LittleFS -files = ['your.py', 'files.py', 'here.py', 'main.py'] -output_image = 'output/littlefs.img' # symlinked/copied to rp2040js root directory -lfs = LittleFS(block_size=4096, block_count=352, prog_size=256) -for filename in files: - with open(filename, 'rb') as src_file, lfs.open(filename, 'w') as lfs_file: - lfs_file.write(src_file.read()) -with open(output_image, 'wb') as fh: - fh.write(lfs.context.buffer) -``` - -Other ways of creating LittleFS images can be found [here](https://github.com/wokwi/littlefs-wasm) or [here](https://github.com/littlefs-project/littlefs#related-projects). - -Currently, the filesystem is not writeable, as the SSI peripheral required for flash writing is not implemented yet. If you're interested in hacking, see the discussion in https://github.com/wokwi/rp2040js/issues/88 for a workaround. - -### CircuitPython code - -To run the CircuitPython demo, you can follow the directions above for MicroPython, except download [adafruit-circuitpython-raspberry_pi_pico-en_US-8.0.2.uf2](https://adafruit-circuit-python.s3.amazonaws.com/bin/raspberry_pi_pico/en_US/adafruit-circuitpython-raspberry_pi_pico-en_US-8.0.2.uf2) instead of the MicroPython UF2 file. Place it in the rp2040js root directory, then run: - -``` -npm install -npm run start:circuitpython -``` - -and start the CircuitPython REPL! The rest of the experience is the same as the MicroPython demo (Ctrl+X to exit, using the `--image` and -`--gdb` options, etc). - -#### Filesystem support - -For CircuitPython, you can create a FAT12 filesystem in Linux using the `truncate` and `mkfs.vfat` utilities: - -```shell -truncate fat12.img -s 1M # make the image file -mkfs.vfat -F12 -S512 fat12.img # create the FAT12 filesystem -``` - -You can then mount the filesystem image and add files to it: - -```shell -mkdir fat12 # create the mounting folder if needed -sudo mount -o loop fat12.img fat12/ # mount the filesystem to the folder -sudo cp code.py fat12/ # copy code.py to the filesystem -sudo umount fat12/ # unmount the filesystem -``` - -While CircuitPython does not typically use a writeable filesystem, note that this functionality is unavailable (see MicroPython filesystem -support section for more details). - -## Learn more +## Layout -- [Live-coding stream playlist](https://www.youtube.com/playlist?list=PLLomdjsHtJTxT-vdJHwa3z62dFXZnzYBm) -- [Hackaday project page](https://hackaday.io/project/177082-raspberry-pi-pico-emulator) +- `src/riscv/` — the Hazard3 RISC-V CPU, assembler, and tests (c1570's, with our fixes). +- `src/rp2350.ts`, `src/rpchip.ts`, `src/*_rp2350.ts`, `src/peripherals/*_rp2350.ts` — the RP2350 + chip and its peripheral variants (c1570's). +- everything else — upstream wokwi/rp2040js (RP2040). ## License -Released under the MIT licence. Copyright (c) 2021-2023, Uri Shaked. +MIT — see [LICENSE](./LICENSE) and [CREDITS.md](./CREDITS.md). diff --git a/ROADMAP.md b/ROADMAP.md new file mode 100644 index 0000000000..b13491924a --- /dev/null +++ b/ROADMAP.md @@ -0,0 +1,106 @@ +# Roadmap + +This fork takes c1570's RP2350 / Hazard3 RISC-V work and re-bases it onto the **latest** upstream +wokwi/rp2040js, then hardens it. The RISC-V *core* is corrected and tested, and the RP2350 +*peripheral* layer is now parameterized (`tsc` is clean and the chip boots a real firmware). + +## Done — RISC-V core correctness + +An adversarial spec review of c1570's core found 19 confirmed defects; all are fixed and guarded by +falsifiable tests (`src/riscv/test/cpu-fixes.spec.ts`). + +| Area | Defect | Status | +|---|---|---| +| RV32M | `MUL` low word via float64 `*` (wrong > 2⁵³) | ✅ `Math.imul` | +| RV32M | `MULH` high word truncates toward zero (wrong for negatives) | ✅ BigInt | +| RV32M | `MULHSU` undecoded → core abort | ✅ implemented | +| RV32M | `MULHU` off-by-one near 2³² | ✅ BigInt | +| Trap | `ECALL`/`EBREAK` land at `mtvec+ilen` (skip handler insn) | ✅ `branch_taken` flag | +| Trap | jump/branch to address 0 dropped (sentinel collision) | ✅ `branch_taken` flag | +| Trap | `mstatus` on trap wiped MPP (was `&= 1<<7`) | ✅ clear only MIE | +| Reset | warm reset never restores PC | ✅ | +| RV32I | `SLTIU` immediate not sign-extended | ✅ | +| RV32I | `JALR` LSB not masked | ✅ | +| Zicsr | `CSRRC` gated on value, not `rs1` index | ✅ | +| Xh3irq | external IRQ 0 (TIMER0) never delivered | ✅ NOIRQ via bit 31 | +| Xh3irq | `mip.MEIP` gated by PPREEMPT not PREEMPT | ✅ | +| RVC | Zcb (`c.lbu/lhu/lh/sb/sh`, `c.zext/sext.b/h`, `c.mul`, `c.not`) | ✅ completed | +| Trap | illegal instruction `throw`s instead of `mcause=2` | ⏸ intentional debug aid | + +## Done — RP2350 peripheral parameterization (multi-chip) + +The peripheral layer is now chip-aware. `RP2040` and `RP2350` both implement a shared **`IRPChip`** +interface, peripherals depend on `IRPChip` instead of the concrete chip, and `GPIOPin` delegates its +function-select → peripheral-output dispatch to the chip (so each chip owns its own function map — +RP2350 adds `FUNCTION_PIO2`). `npx tsc --noEmit` is **clean** (was 63 errors). + +| Area | Change | Status | +|---|---|---| +| Core | `RP2040 implements IRPChip`; `BasePeripheral` holds `IRPChip` | ✅ | +| GPIO | `GPIOPin` → narrow `IGPIOChipHost`; chip-owned output dispatch; `FUNCTION_PIO2` | ✅ | +| RESETS | `reset_mask` per-chip (RP2350 = `0x1fffffff`, 29 blocks) — **was the boot-hang** | ✅ | +| TIMER | `timer_irq_base` param + RP2350 INTR/INTE/INTF/INTS offsets (shifted +8) | ✅ | +| PWM / ADC / USB | `IRQ`/`DREQ` base constructor params | ✅ | +| PIO | `IRPChip`, `dreq{Rx,Tx}_base`, `getPinValue`/`getPinOutputEnabled`, `gpiobase` field | ✅ | +| UART / SPI / I²C | `IRPChip`; numeric DREQ ids (the two chips' `DREQChannel` enums differ) | ✅ | +| DMA routing | peripherals raise DREQ via `IRPChip.dma_{set,clear}DREQ` | ✅ | + +The **`blink_simple`** integration test now passes (RP2350 boots its A2 bootrom, runs RISC-V +firmware, drives GPIO via SIO). The RESETS `reset_mask` fix was the boot-blocker: the bootrom +de-asserts a high-numbered reset block and spins on `RESET_DONE` for it. + +## Done — two RISC-V core trap bugs (`hello_timer` now passes) + +Lockstepping this engine against c1570's original (which passes both firmware tests) and bisecting +the first architectural divergence surfaced two real core bugs: + +| Bug | Symptom | Fix | +|---|---|---| +| `MEINEXT` reset value was 0 | reads as "IRQ 0, NOIRQ clear"; the `!NOIRQ` gate took a phantom IRQ 0 the moment interrupts were enabled, corrupting the stack — this stalled `hello_timer` | reset `MEINEXT` to NOIRQ (index 0 still deliverable) | +| trap target used raw `mtvec` | exceptions/direct interrupts must go to `mtvec & ~3`; a vectored mtvec (RP2350 = `0x20000001`) sent an `EBREAK` to odd `0x20000001` → crash | mask the MTVEC mode bits → BASE | + +`hello_timer` is now **un-skipped and passing** (250M-step run, exactly 19 timer-driven prints). The +phantom-IRQ fix also confirms the earlier `!NOIRQ` IRQ-0 gate is correct *given a correct reset*. + +## Done — `pio_blink` (PIO drives GPIO32 via GPIOBASE) + +The early crash was fixed by the MTVEC mask above; the remaining gap was the RP2350 **PIO pin-window** +feature. `pio_blink` runs the classic counter-blink (`pull / out y / mov x,y / set pins / jmp x--`) +on two PIO blocks — one driving GPIO3/4, one driving GPIO32/33 — and asserts exactly two rising +edges on each. GPIO32 is only reachable once a PIO block re-bases its internal 32-pin window: + +| Change | Why | Status | +|---|---|---| +| **GPIOBASE register** (`0x168`, `gpiobase = value & 16`) | re-bases the PIO's 32-pin window onto chip GPIO16..47, so internal pin 16 = GPIO32 | ✅ | +| `checkChangedPins` offset (loop 0..31, `gpio[pinIndex + gpiobase]`) | the old loop did `1 << gpioIndex` over `gpio.length`, which aliases pins 32..47 onto 0..15 (JS shifts are mod-32) and never applied the offset — GPIO16..47 were never notified | ✅ | +| **32-bit pad mask** (`isRp2040 ? 0x3fffffff : 0xffffffff`) | upstream hardcodes the RP2040 30-bit mask | ✅ | + +`pio_blink` is **un-skipped and passing** (gpio3toggle == 2, gpio32toggle == 2 over 2M steps; the +SDK's free-SM allocator places the GPIO0..31 program on PIO2 and the GPIO32 program on PIO1). The +surgical port deliberately does **not** adopt c1570's SM step-model rewrite (`curClockInt/Frac`, +`remainingDelay`, `machinesRunning`): the blink program uses the default clock divider (1.0), at +which the new fork's one-instruction-per-cycle model and c1570's divided model are identical, so the +working RP2040 step model is left untouched (verified: 348/348 tests pass). + +## Next — remaining RP2350 PIO features (deferred, not yet exercised) + +c1570 also implemented these RP2350 PIO behaviours; none are exercised by `pio_blink`, so each is +deferred to land with its own falsifiable test rather than ported unverified: + +- **`IN_COUNT`** masking — masks the low pins kept by `IN PINS` / `MOV x, PINS` (RP2350 only). +- **PIO IRQ-index mode** (`resolveIrqTarget`) — `WAIT IRQ` / `IRQ` instructions can target a + neighbouring PIO block (prev/next) or use the relative-index encoding. +- **Neighbour state-machine synchronous restart** — `CTRL` bits 16..25 enable/disable/clk-restart + SMs across adjacent PIO blocks atomically. +- **`FJOIN_RX`/`FJOIN_TX`** — joined 8-deep RX/TX FIFOs. +- **`WAIT PIN` gpiobase offset** — the pin-relative wait source should also honour `gpiobase` + (subtle: the absolute-GPIO wait source must not), so it is staged separately. + +Each peripheral's parameterization is also a natural **upstream PR to wokwi/rp2040js** ("make the +peripheral layer multi-chip"), see below. + +## Later — upstreaming to Wokwi + +Offer the work back to [wokwi/rp2040js](https://github.com/wokwi/rp2040js) as small, reviewable PRs +in the maintainer's preferred order (the chip-abstraction + GPIO/PIO first, then the RISC-V core +behind a flag) rather than one large drop. diff --git a/demo/bootrom_rp2350.ts b/demo/bootrom_rp2350.ts new file mode 100644 index 0000000000..e8bc6bb2dc --- /dev/null +++ b/demo/bootrom_rp2350.ts @@ -0,0 +1,8197 @@ +// RP2350 bootrom binary, built from https://github.com/raspberrypi/pico-bootrom-rp2350/releases/ +// revision: A2 (sha1 73d193dceddbd82d2235ef42d9173de8d353e703 bootrom-combined.bin) + +export const bootrom_rp2350_A2 = new Uint32Array([ + 0xf0000000, + 0x00000089, + 0x000002f9, + 0x000002f9, + 0x0202754d, + 0x00757cd4, + 0x43280035, + 0x30322029, + 0x52203432, + 0x62707361, + 0x79727265, + 0x20695020, + 0x0064744c, + 0x0718fe84, + 0x43d4f647, + 0xe0074684, + 0xd3002a10, + 0x484f3302, + 0x41d00092, + 0x181b0f00, + 0x885a8818, + 0x4584b158, + 0x420ad1f2, + 0x4011d0f0, + 0xd2030849, + 0xd3fb0852, + 0xe7f93302, + 0xfea41d18, + 0x47700738, + 0x373cfe16, + 0xf7ffb508, + 0x8800ffdb, + 0xfe06bc0c, + 0x4718273c, + 0x3080483f, + 0x4140f45f, + 0x22806001, + 0xf5006042, + 0x60013000, + 0x30c8483a, + 0x23072101, + 0x64a0f244, + 0x75e1f647, + 0xf04fc03e, + 0x68014050, + 0x4935bb29, + 0x7003f5a1, + 0x880af380, + 0xc0042200, + 0xd1fc4288, + 0xf003468d, + 0xb672bb49, + 0xe7fcbf30, + 0xc731fe18, + 0x6d20bf20, + 0xd3fb0840, + 0xb3086da0, + 0xc731fe08, + 0xbf204770, + 0xc735fe19, + 0x08896d21, + 0x6560d3f9, + 0xfe09bf40, + 0x4728c735, + 0x4f21bf20, + 0x068cf117, + 0x21002005, + 0x12a1f240, + 0x031ff1b1, + 0xee30c60f, + 0xd5f1f710, + 0xf04f3e10, + 0x21044450, + 0x6da160b9, + 0x0710ee8c, + 0xf07f68f2, + 0xec43031e, + 0x6d212770, + 0xd2f40849, + 0x056bf2af, + 0xf7ff2000, + 0xeeacffd3, + 0x28010730, + 0xf7ffd1ec, + 0xeeacffcd, + 0x60380731, + 0xffc8f7ff, + 0x0732eeac, + 0xf7ff4685, + 0xeeacffc3, + 0xf20f0733, + 0xf7ff0507, + 0x2100ffbd, + 0x603160b9, + 0xeeac60f1, + 0x47800734, + 0x0000e0b8, + 0x4a886866, + 0xe000ed08, + 0x400e020c, + 0xbfa02300, + 0xfe16b5f7, + 0x94014739, + 0x4c170087, + 0x60273705, + 0x4d16461c, + 0xb9f4b9ab, + 0x68134a14, + 0xd4fc079b, + 0x601f4b11, + 0xfe069b01, + 0xb0033739, + 0xb109bdf0, + 0xcb01f811, + 0xc004f8c5, + 0xb9443b01, + 0xd0eb2b00, + 0x682e2400, + 0x6c80f416, + 0x2c00d0f1, + 0x03f6d0f8, + 0x2b00d504, + 0x2300d1f5, + 0xe7f8682e, + 0xb10a68ae, + 0x6b01f802, + 0xe7d53c01, + 0x400d1000, + 0x400d0000, + 0xbf602305, + 0xf44fb508, + 0x21002202, + 0x5000f04f, + 0xf91df003, + 0x2302f44f, + 0x0770ec43, + 0x4292f44f, + 0x4d164b15, + 0xf5a3609a, + 0x4c1533ff, + 0x7394f5a3, + 0x200264ac, + 0x4a170701, + 0x3b0cc307, + 0x49162003, + 0xc3074a16, + 0x4280f44f, + 0xf8c34b0e, + 0x4b0e2280, + 0x3080f993, + 0xdb092b00, + 0xf0032101, + 0x4091021f, + 0x4a0a095b, + 0x672c009b, + 0x50d166ac, + 0x714af44f, + 0xf0074807, + 0xbf00feaa, + 0xe002ed00, + 0x40060000, + 0xacce009a, + 0xe000e100, + 0x50100400, + 0x4006200c, + 0x400e0000, + 0x20081fe1, + 0x13ffc000, + 0x13ffffe1, + 0xbf00bfc0, + 0x9a00e9dd, + 0xf5044c42, + 0x2600754a, + 0x42acc440, + 0x6aafd3fc, + 0x0777f097, + 0xee60d402, + 0xe0057730, + 0xf5144c3c, + 0xc4405580, + 0xd3fc42ac, + 0xf8c64e3a, + 0x4f37a000, + 0x66b0f244, + 0xc770ce70, + 0xf389c703, + 0xf383880a, + 0xeea38808, + 0x47900734, + 0xe7fdbf30, + 0xee00be00, + 0xee000720, + 0xfe850720, + 0xb403071e, + 0xf8d0482b, + 0x21000800, + 0xec4107c0, + 0x17d80770, + 0x0770ec41, + 0x0009f1d3, + 0xec4117c0, + 0xbc030770, + 0x2b14005b, + 0xd2e3469c, + 0x3734fe15, + 0xa305b508, + 0x881b4463, + 0x073efea5, + 0xbc084798, + 0x3734fe05, + 0xbf00bd00, + 0x33011f91, + 0x334106d5, + 0x05511f79, + 0x36113645, + 0x366335df, + 0x071afe84, + 0xd2062808, + 0xb10123c3, + 0x4a1523a5, + 0x20005483, + 0xf07fe001, + 0xfea40004, + 0x4770073a, + 0x071cfe84, + 0x480cb501, + 0x0354f8d0, + 0x9001b108, + 0x380ce001, + 0xfea49000, + 0xbd01073c, + 0xc738ee14, + 0x60084909, + 0x60084909, + 0x03890b89, + 0x4390688a, + 0xee04d1fc, + 0x4770c738, + 0x400e0000, + 0x50100000, + 0xe000ed08, + 0x400e03f0, + 0x40022000, + 0x40023000, + 0xbf00bfd0, + 0x41f0e92d, + 0xfe834605, + 0x2400071c, + 0x1847601c, + 0xbf1842a1, + 0x26013f01, + 0x0c02f04f, + 0xf3ef2103, + 0xb9308005, + 0x8094f3ef, + 0x0e00ea6f, + 0x0e01f01e, + 0xe845d00b, + 0xe847f480, + 0xe845f680, + 0xe847fc80, + 0xeea3f180, + 0xf04f073c, + 0xf3ef0e01, + 0x28008005, + 0xf3efd136, + 0xf0108094, + 0xd0090801, + 0xf4c0e845, + 0xf6c0e847, + 0xfcc0e845, + 0xf1c0e847, + 0x073ceea3, + 0xd84042bd, + 0x42844630, + 0xec4cd13d, + 0xf1b51770, + 0xd3385f80, + 0x42874822, + 0xeea3d21d, + 0x0d20073d, + 0x40f80fd7, + 0x0001f000, + 0x0d090fd7, + 0xf00140f9, + 0xee200101, + 0xf0032710, + 0x6018f95d, + 0x2a00681a, + 0xec44da23, + 0xeea36770, + 0x4628073e, + 0x81f0e8bd, + 0x0800f04f, + 0x4a13e7d4, + 0xd9144295, + 0x5280f502, + 0xd8104297, + 0x6c904a10, + 0xfa206c91, + 0xfa01f00e, + 0xf3c1f108, + 0xf0000140, + 0xf0030001, + 0x6018f93b, + 0x073deea3, + 0xeea3e7da, + 0xf04f073d, + 0x601a12c3, + 0xee60681b, + 0xeea33730, + 0xf06f073e, + 0xe7d40509, + 0x20082000, + 0x500fffff, + 0x40060000, + 0x210c2000, + 0xfe850002, + 0x05880710, + 0x60184b08, + 0x00924808, + 0x49084308, + 0x5852330c, + 0x0a090211, + 0xc3070e12, + 0xc3073308, + 0x0730fea5, + 0xbf004770, + 0x400d0000, + 0x60007200, + 0x00004930, + 0x1200f240, + 0x49034310, + 0x3111c90c, + 0x43087809, + 0xe0172101, + 0x400e0340, + 0x42402004, + 0xfe059901, + 0xbd161732, + 0xb5134623, + 0x4732fe15, + 0x07449401, + 0x0f64d2f2, + 0x01000900, + 0x24084320, + 0xf00043a0, + 0xe7ebf805, + 0xf000b501, + 0xbd02f801, + 0xfe14b5f7, + 0x94014734, + 0xec449c08, + 0x25000770, + 0x4c262602, + 0x60254276, + 0x60ae4d25, + 0x3632250f, + 0x40064005, + 0xd1092d0d, + 0x4d22b96e, + 0x69e561e5, + 0x4055426d, + 0x62636225, + 0xe01a62a2, + 0x61a36162, + 0x002b4a1c, + 0x2720b16e, + 0x403e0006, + 0xd0004238, + 0x4f192603, + 0x6dff65fe, + 0xd00242b7, + 0x42402004, + 0x2d00e01d, + 0xf240d1e1, + 0x69663358, + 0x54d64a13, + 0xf24061e5, + 0x220133e8, + 0x6063434b, + 0x6b194b10, + 0xd1024211, + 0x6359210c, + 0x2201631a, + 0x601a4b0d, + 0x05db2380, + 0xf2406023, + 0x40181300, + 0x9b01b918, + 0x3734fe04, + 0xbf30bdfe, + 0xbf00e7f8, + 0x400d8000, + 0x40018000, + 0xb007c0d3, + 0x401200fc, + 0x400e0000, + 0x40108000, + 0x4000a014, + 0xfe172120, + 0x2300c73b, + 0xfe17e004, + 0x000ac73b, + 0x01cb2102, + 0xb085b5f0, + 0x000d0004, + 0x93019200, + 0x4f184666, + 0x0e004b18, + 0x2301607b, + 0xf7ff4018, + 0x23a0fd8f, + 0x0a240224, + 0x4325ba24, + 0x035bb2aa, + 0x431a0c2d, + 0x607a432b, + 0x607b25c0, + 0x9b012200, + 0xf7ff9900, + 0x02adfd7e, + 0x21004b0c, + 0xab02607b, + 0x00221ddc, + 0xf7ff2301, + 0x2201fd74, + 0x42137823, + 0x4b07d003, + 0x422b681b, + 0xfe07d0ee, + 0xb005673b, + 0xbf00bdf0, + 0x400d0000, + 0x00100006, + 0x00100005, + 0x4003002c, + 0x06092110, + 0x18090c0a, + 0x3000f240, + 0xb5f02300, + 0x000eb089, + 0x93049002, + 0x3734fe17, + 0x9b029307, + 0xd40807db, + 0x98029b04, + 0xfc70f001, + 0xfe079b07, + 0xb0093734, + 0x188fbdf0, + 0xd83342b9, + 0x05642480, + 0xd32f42a1, + 0x055b2390, + 0xd82b429f, + 0x23809305, + 0x002503db, + 0x42ae18e4, + 0x0035d327, + 0xd90042a6, + 0x97010025, + 0xd90042a7, + 0x9b019401, + 0xd80442ab, + 0x429c9b05, + 0x2000d1eb, + 0x0028e7d8, + 0xfa38f000, + 0x98019003, + 0xf0003801, + 0x9a04fa33, + 0x18d31bab, + 0x30019a03, + 0x99031a82, + 0xf0019802, + 0x2800fc37, + 0xe7c3d0e6, + 0x4240200a, + 0x42afe7c0, + 0xe7dfd2d9, + 0xb089b5f0, + 0x93040006, + 0x373ffe14, + 0x4b809307, + 0x23846898, + 0x4384001c, + 0xd9042c7f, + 0xd0024218, + 0x42642413, + 0x2380e04e, + 0x4013025b, + 0x1e589301, + 0xb2db4183, + 0x23809303, + 0x4013029b, + 0x93000018, + 0x41434243, + 0x33010008, + 0x000340d8, + 0xb2952080, + 0x428202c0, + 0xe0d7d300, + 0x930218eb, + 0x0300f241, + 0x429a9a02, + 0xe0cfd900, + 0x23019a00, + 0xb9024331, + 0x001a3302, + 0x420b400a, + 0xe0c7d000, + 0x93052302, + 0xb1839b01, + 0x210e4b63, + 0x980562da, + 0xfe56f002, + 0x203a211c, + 0xfe52f002, + 0x213f220a, + 0xf000203a, + 0x2303fc55, + 0x9b029305, + 0xd81142ab, + 0x5770ec43, + 0x9b012400, + 0x2100b133, + 0xf0022002, + 0x2201fe3f, + 0x62da4b54, + 0xfe049b07, + 0x0020373f, + 0xbdf0b009, + 0x002a4951, + 0x099209ab, + 0x0092009b, + 0x5852585b, + 0x29009904, + 0xe070da00, + 0x430b0899, + 0x400b2103, + 0x29009904, + 0xe070db00, + 0x48482103, + 0x9a034011, + 0x60024c47, + 0x191200aa, + 0x9a036817, + 0x9a056002, + 0x0ffa4013, + 0x431307d2, + 0xd0002b00, + 0x9a03e06e, + 0x41821e50, + 0x400a3202, + 0x2770ec43, + 0x2b009b01, + 0x9b00d059, + 0xd0542b00, + 0x7104f244, + 0x88342210, + 0x4023c908, + 0x40582000, + 0xd1fc005b, + 0x40930fc3, + 0x431c3201, + 0xd1f32a16, + 0x43a3003b, + 0x02a4b11b, + 0x43e408a4, + 0x43a70a24, + 0xd14a2f00, + 0x213c002a, + 0xf0002002, + 0x213dfbeb, + 0x0a2a2002, + 0xfbe6f000, + 0x00390022, + 0xf0002002, + 0x0a22fbe1, + 0x20022101, + 0xfbdcf000, + 0x21200c22, + 0xf0002002, + 0x4c1dfbd7, + 0x60634b20, + 0xfb28f007, + 0x60634b1f, + 0xfb24f007, + 0x061b69a3, + 0x4b1dd4f8, + 0xf0076063, + 0x9b00fb1d, + 0x2302b1d3, + 0x350118f6, + 0x2103e76d, + 0xf04f400b, + 0x9804212f, + 0x0740ec41, + 0x0891e78a, + 0x22034311, + 0x6834e78b, + 0x9b00e7bf, + 0x4a11b12b, + 0x189b006b, + 0x8033881b, + 0x6037e7e5, + 0xe7e32304, + 0x42642404, + 0x2412e757, + 0xe7564264, + 0xe70a2405, + 0xe708240b, + 0x400e0800, + 0x401200fc, + 0x40120000, + 0x40121128, + 0x40134000, + 0x603a0100, + 0x503abf00, + 0x603a0200, + 0x40130000, + 0x238af04f, + 0xbe00e6e2, + 0xb093b5f0, + 0x000e9000, + 0xfe189201, + 0x93043732, + 0x9a01235f, + 0x93014013, + 0x079d9b00, + 0x250bd001, + 0xab01e04c, + 0x24019308, + 0xa9082300, + 0x93069305, + 0x4b339307, + 0xd0084222, + 0x02402080, + 0x48319005, + 0x60483402, + 0x30d00018, + 0x482f6088, + 0xd5020795, + 0x514800a5, + 0x07553401, + 0x25d0d50b, + 0x682d062d, + 0x40e86940, + 0x40282501, + 0xad039003, + 0x500d00a0, + 0x07103401, + 0x8a98d505, + 0x9002ad02, + 0x500d00a0, + 0x06d03401, + 0x2503d505, + 0x5505a805, + 0x500b00a0, + 0x06523401, + 0xf240d510, + 0x25010c30, + 0x449ca805, + 0x55051962, + 0xa9084665, + 0x507d00a7, + 0x33182501, + 0x00925485, + 0x50533402, + 0x250db9e6, + 0x9b04426d, + 0x3732fe08, + 0xb0130028, + 0xab05bdf0, + 0x00285cfa, + 0x19533201, + 0xd8f042b3, + 0x9900001d, + 0x00bb0080, + 0xa9081808, + 0x00925859, + 0xf0023701, + 0x42a7fc99, + 0xe7e4d1eb, + 0x27002201, + 0x00380015, + 0xbf00e7ed, + 0x400e0328, + 0x40000004, + 0x40120148, + 0x0005b5f0, + 0xfe17b085, + 0x4e203733, + 0x00309303, + 0x240e7883, + 0x07abb30b, + 0xb9f33c03, + 0x33880003, + 0x07d4681b, + 0x1d2ed41f, + 0x10bf1baf, + 0x1879240d, + 0xf248d413, + 0x401404f1, + 0x24c0602c, + 0x191b0524, + 0x94012400, + 0x90007800, + 0xf0000030, + 0x42a0fb4b, + 0x1b73db02, + 0x18c0109b, + 0x9b034244, + 0x3733fe07, + 0xb0054260, + 0x2903bdf0, + 0x001cd90d, + 0x41bc1e67, + 0x02247807, + 0x606c433c, + 0x4c056877, + 0x06b60ebe, + 0x60ac4334, + 0x002e60ef, + 0xe7cd3610, + 0x400e0360, + 0x03ffe000, + 0xc73ffe19, + 0xf240b948, + 0x4a053354, + 0x290058d0, + 0x50d1db00, + 0xc73ffe09, + 0x20054770, + 0xe7f94240, + 0x400e0000, + 0x0001b5f0, + 0x0714fe85, + 0x25062000, + 0x4a0b260f, + 0x00137814, + 0x42843308, + 0x2011dc04, + 0xfea54240, + 0xbdf00734, + 0x0017685a, + 0x2f02402f, + 0x08d2d103, + 0x42914032, + 0x3308d0f3, + 0xe7ec3001, + 0x400e0360, + 0xfe84b530, + 0x23f00714, + 0x18c2061b, + 0x049b2380, + 0xd21a429a, + 0x490e01c2, + 0x4d0e0f52, + 0x18520092, + 0x002b6851, + 0x030c001a, + 0x4002402c, + 0x0909089d, + 0x4019402a, + 0x4029085d, + 0xd206428a, + 0x40421912, + 0x40584013, + 0x0734fea4, + 0x200abd30, + 0xe7f94240, + 0x400d0030, + 0x00fff000, + 0xfe84b510, + 0xf240071e, + 0xf7ff4080, + 0x2064fbb9, + 0xfd3bf002, + 0x0fc04b15, + 0x22006018, + 0x615a4b14, + 0x625a61da, + 0x635a62da, + 0x4b1263da, + 0xf240001a, + 0x32181100, + 0x4293c302, + 0xf240d1fc, + 0x4a0e333c, + 0xf6405ad3, + 0x429372ff, + 0x223fd90c, + 0x1116f240, + 0x4a0a4013, + 0x605100db, + 0x185b4909, + 0x60592109, + 0x60532316, + 0x073efea4, + 0xbf00bd10, + 0x40040000, + 0x40030000, + 0x40043004, + 0x400e0000, + 0x40038000, + 0x40028000, + 0xfe85b530, + 0x20800712, + 0xf6402300, + 0x04c04400, + 0x4d06029a, + 0x40220099, + 0x19494302, + 0x600a3301, + 0xd1f52b08, + 0x0732fea5, + 0xbf00bd30, + 0x400d0034, + 0x0006b5f7, + 0xfe18000f, + 0x00043739, + 0x18859301, + 0x19091bb9, + 0xd20542ac, + 0x4b0722c0, + 0x681b0292, + 0xd0034213, + 0xfe089b01, + 0xbdf73739, + 0x34010020, + 0xfca3f7ff, + 0xe7eb34ff, + 0x4003002c, + 0xb085b5f0, + 0x00160004, + 0xfe149301, + 0x27c03735, + 0x18459303, + 0x42ac02bf, + 0x4b0ed203, + 0x423b681b, + 0x9b03d004, + 0x3735fe04, + 0xbdf0b005, + 0x421c1e73, + 0x1b2bd108, + 0xd30542b3, + 0x99010020, + 0xfc7bf7ff, + 0xe7e819a4, + 0xf7ff0020, + 0xf241fc75, + 0x18e40300, + 0xbf00e7e1, + 0x4003002c, + 0xb087b5f0, + 0x3731fe17, + 0xf7ff9305, + 0x2280fbbf, + 0x02522301, + 0x4f2f0011, + 0x603b4e2f, + 0x42136833, + 0x68b0d100, + 0x4003482d, + 0xd1f7428b, + 0x603b2301, + 0x333cf240, + 0x5ad34a2a, + 0x1e5a131b, + 0x33014193, + 0x23009303, + 0x238c9301, + 0x682c4d26, + 0x3b08439c, + 0x2300431c, + 0x602c9302, + 0x407ef240, + 0x60ac606c, + 0xf00260ec, + 0x9b01faf9, + 0x33029a02, + 0x0013409a, + 0x43132201, + 0x603b4a1c, + 0x60726072, + 0x68312202, + 0xd1fc4211, + 0x230c603b, + 0x40639a02, + 0x238cb1f2, + 0x602b4063, + 0x2380606b, + 0x4c144063, + 0x980160ab, + 0x607460eb, + 0xf9c2f7ff, + 0x340a4b0f, + 0xf7ff6073, + 0x6074f9bd, + 0xf9baf7ff, + 0x1c439a03, + 0x42939301, + 0x9b05d3c1, + 0x3731fe07, + 0xbdf0b007, + 0x001c2201, + 0xe7c09202, + 0x400d1000, + 0x400d0000, + 0x00010002, + 0x400e0000, + 0x40040008, + 0x0014ffff, + 0x001a00f5, + 0x0015b5f8, + 0xfe18001f, + 0xf0004736, + 0x1e06fd0f, + 0x0005da04, + 0x4736fe08, + 0xbdf80028, + 0xf0002100, + 0xb9b8f979, + 0x781b4b0e, + 0xd91642ab, + 0x061b23f0, + 0x002918ff, + 0x63377030, + 0xf0010030, + 0x2104fda5, + 0xf0000030, + 0x2800ffcd, + 0x0028d0e4, + 0xfe70f7ff, + 0xe7df0005, + 0x426d250e, + 0x2505e7dc, + 0xbf00e7fb, + 0x400e0360, + 0x0015b570, + 0x473efe16, + 0xfcdef000, + 0xdb032800, + 0xf0020029, + 0x2000fb7b, + 0x473efe06, + 0xb573bd70, + 0x001e0015, + 0x3737fe1a, + 0xf0009301, + 0x1e04fccd, + 0x2100db0a, + 0xf00030c8, + 0xb950f93b, + 0x00310022, + 0xf0020028, + 0x0004f8e7, + 0xfe0a9b01, + 0x00203737, + 0x240ebd76, + 0xe7f74264, + 0xb085b5f0, + 0x93010017, + 0x3735fe15, + 0xf0009303, + 0x1e04fcaf, + 0x2600db22, + 0xf0000031, + 0xf04ff8e5, + 0x60e313c3, + 0x4d1823f0, + 0x061b002a, + 0x63231bdb, + 0x18ff17fb, + 0x405f7066, + 0x32087aab, + 0x9b01b99b, + 0x62e362a7, + 0x23a5f04f, + 0x238060e3, + 0x425b786e, + 0x00204333, + 0xf002706b, + 0x706ef963, + 0xfe059b03, + 0xb0053735, + 0x23f0bdf0, + 0x061b7a29, + 0x320818f8, + 0xd9e442b1, + 0x58d300f3, + 0x09db04db, + 0xd1004298, + 0x360170ae, + 0xbf00e7f4, + 0x400e0358, + 0x0005b5f0, + 0xb085000f, + 0x3733fe19, + 0x93032280, + 0x05d24b1e, + 0x4e1e601a, + 0x22000033, + 0x701a3333, + 0xfddaf001, + 0xbb380004, + 0x93006a33, + 0xf640b313, + 0x429f73ff, + 0x22f0d926, + 0x06129b00, + 0x031b0b1b, + 0x0039189f, + 0x0200f241, + 0x93010028, + 0xfa9ef002, + 0xf7ff0038, + 0x217ffb27, + 0x9a019b00, + 0x1a9b3303, + 0x00385cea, + 0x54ea400a, + 0xf2410029, + 0xf7ff0200, + 0x6234fe61, + 0xffcaf000, + 0xfe099b03, + 0x00203733, + 0xbdf0b005, + 0x4264240d, + 0xbf00e7f6, + 0x400db000, + 0x400e0328, + 0xb5300003, + 0x0710fe84, + 0x20002280, + 0x42930492, + 0xf240d215, + 0x480b313c, + 0x5a410e1a, + 0x00801c90, + 0x240f4101, + 0x2000000d, + 0x42214025, + 0x0612d007, + 0xf2411a9b, + 0x40aa0200, + 0x419b4293, + 0xfea44258, + 0xbd300730, + 0x400e0000, + 0xfe1ab573, + 0x9301373d, + 0x061b23f0, + 0x002018c4, + 0xffd2f7ff, + 0x4a0fb1d0, + 0xb1bb7893, + 0x20007851, + 0x0ce401e4, + 0xd8044281, + 0x9b0120ff, + 0x373dfe0a, + 0x1c46bd76, + 0x58d300f3, + 0x0ced04dd, + 0xd30342ac, + 0x0cdb019b, + 0xd9f0429c, + 0xe7eb0030, + 0x42402001, + 0xbf00e7eb, + 0x400e0360, + 0xc73efe19, + 0xb2d24b06, + 0x43100400, + 0x02094a05, + 0x43084311, + 0xfe096018, + 0xf006c73e, + 0x0000bf47, + 0x40120100, + 0x7000c000, + 0xb5070003, + 0x2736fe16, + 0xf2409201, + 0x60813250, + 0x20aa4915, + 0x22775889, + 0xf002404a, + 0xec40fac8, + 0x00012708, + 0x42104011, + 0xf04fd101, + 0x208b11c3, + 0xf0026119, + 0x6158fab1, + 0xf002206c, + 0x6198faad, + 0x4a0a20d0, + 0x68000600, + 0x21016e12, + 0x400a40c2, + 0x701920e8, + 0x625b709a, + 0xfaa9f002, + 0x9b0161d8, + 0x3736fe06, + 0xbf00bd07, + 0x400e0000, + 0x401200fc, + 0x0004b537, + 0xfe1b000d, + 0x21003734, + 0xf7ff9301, + 0xf04fffbf, + 0x60e313c3, + 0x70632301, + 0xf04f6323, + 0x61e313c3, + 0x6300f240, + 0xb91580a3, + 0x789b4b05, + 0x23ffb91b, + 0x343c2501, + 0x9b017023, + 0x3734fe0b, + 0xbd3e0028, + 0x400e0360, + 0xb099b5f0, + 0xab1e9304, + 0xcb049207, + 0x781b9008, + 0x92009106, + 0xfe15930c, + 0x930e3737, + 0x689a4b6c, + 0x00192381, + 0x297f4391, + 0x421ad904, + 0x3b94d002, + 0xe0849300, + 0x2b009b00, + 0xe080d100, + 0xd9002b10, + 0x9b04e0bf, + 0xf0026818, + 0xb283f8d9, + 0x9309a80f, + 0xf93ef003, + 0x24029b07, + 0x930b0e1b, + 0x001f2300, + 0xf2489303, + 0x9a070300, + 0x920d401a, + 0x93029b07, + 0xb1439b0d, + 0x9b0b9a03, + 0x425a1a9b, + 0x9a074153, + 0x401a425b, + 0x9b049202, + 0x595b00a5, + 0x0018a90f, + 0xf0039301, + 0x9b04f8c8, + 0x195da90f, + 0x0030686e, + 0xf8c1f003, + 0x9b022210, + 0xd0094213, + 0x1cba9b06, + 0xd804429a, + 0x00bb9908, + 0x990118cb, + 0x0017c342, + 0xd44207f3, + 0x93011ca3, + 0x05f39a01, + 0x189b0f9b, + 0x9305001c, + 0xd50804f6, + 0x009b9a04, + 0x237f589c, + 0x3404401c, + 0x08a49b05, + 0x264018e4, + 0x401e9b02, + 0x429c9b09, + 0x9d01d85d, + 0xd84142ac, + 0x23009a01, + 0xd80042a2, + 0x9a011aa3, + 0x9b0618d4, + 0xd85a429f, + 0x33019b03, + 0x9a039303, + 0x42939b00, + 0x9b09d1a6, + 0xd152429c, + 0xa80fa910, + 0xf88ef003, + 0xf240980c, + 0x492832ec, + 0x28009b10, + 0x508bd03d, + 0x9b0e9700, + 0x3737fe05, + 0xb0199800, + 0x68abbdf0, + 0x0018a90f, + 0xf0039305, + 0x1d23f868, + 0xa90f68ec, + 0x93010020, + 0xf861f003, + 0x069b9b02, + 0x9b06d5ae, + 0x42931cba, + 0x9908d304, + 0x18cb00bb, + 0xc3129905, + 0xe7a30017, + 0x42ab9b05, + 0x2380d102, + 0x401e9e02, + 0x00ab9a04, + 0xa90f58d3, + 0x930a0018, + 0xf845f003, + 0x9b06b13e, + 0xd203429f, + 0x990a9a08, + 0x509900bb, + 0x35013701, + 0x2400e7a2, + 0x588ae7b3, + 0xd0bf429a, + 0x425b230f, + 0x2305e736, + 0x230de7fb, + 0x2310e7f9, + 0xbf00e7f7, + 0x400e0800, + 0x400e0000, + 0x0006b5f0, + 0xb087000c, + 0x3736fe14, + 0x23809305, + 0x002f4d25, + 0x602b025b, + 0x37886e8b, + 0xd0322b00, + 0x2a006fca, + 0x689ada2c, + 0x606a0028, + 0x92012201, + 0x3299000a, + 0x78129203, + 0x92002120, + 0x22103304, + 0xf7ff3008, + 0x2800fef1, + 0x6ee3db1a, + 0x189b6f62, + 0x603b3304, + 0x781b9b03, + 0x702b706b, + 0xee406fe3, + 0x34043710, + 0xf04f6fe3, + 0x40531213, + 0xec436932, + 0xec432708, + 0x9b052770, + 0x3736fe04, + 0xbdf0b007, + 0x6a332202, + 0x2300801a, + 0x603b2180, + 0x02894b07, + 0x04536cda, + 0x4313400b, + 0x005b22c0, + 0x401302d2, + 0x40534a03, + 0xe7e6606b, + 0x400e0360, + 0x401200fc, + 0xfc078000, + 0x4ff0e92d, + 0x4604b087, + 0x9203460f, + 0xfe14461e, + 0xf44f3732, + 0x21007200, + 0xf0019305, + 0xf44ffffc, + 0xec437300, + 0xf1040770, + 0xf1040840, + 0x22640584, + 0x46402100, + 0xffd3f001, + 0x46404629, + 0xf80df003, + 0x46392220, + 0xf0024640, + 0x2240ff7f, + 0x46404631, + 0xff7af002, + 0x46402220, + 0xf0029903, + 0x4629ff75, + 0xf0024640, + 0x4629ffcf, + 0xf0024640, + 0x2220fff6, + 0x46282100, + 0xffb3f001, + 0xf04f2301, + 0xf04f0b00, + 0xf1040a20, + 0xf88d09a8, + 0x22103013, + 0x49164640, + 0xff5af002, + 0x46402201, + 0x0113f10d, + 0xff54f002, + 0x46404629, + 0xffaef002, + 0xf0024640, + 0x4652ffe2, + 0x000beb09, + 0xf0014629, + 0xf89dff75, + 0x44d32013, + 0xf1bb3201, + 0xf88d0f7f, + 0xd80f2013, + 0x0a80f1cb, + 0x0f20f1ba, + 0x0220f04f, + 0x46404629, + 0xf04fbf28, + 0xf0020a20, + 0xe7d0ff31, + 0x400e0328, + 0x21002220, + 0xf1044628, + 0xf0010520, + 0x4649ff72, + 0xf0024628, + 0xf104ffcc, + 0xf50409c8, + 0x49a47a94, + 0xf0024628, + 0x4683ff01, + 0x46404649, + 0xffbff002, + 0x0f00f1bb, + 0x8157f2c0, + 0x46284641, + 0xfde0f002, + 0x0920f109, + 0xd1ea45d1, + 0x49994628, + 0xfeecf002, + 0xf2802800, + 0xee408178, + 0xf04f0710, + 0xf1040b00, + 0x461803c0, + 0xf1044639, + 0x93000ae0, + 0xff9ff002, + 0xf1074650, + 0xf0020120, + 0x4659ff9a, + 0xf0024650, + 0x2800feb6, + 0xf28046d9, + 0xee40815e, + 0x49880710, + 0xf0029800, + 0x4607fea5, + 0x46504985, + 0xfea0f002, + 0xf280455f, + 0x45588150, + 0x814df280, + 0x7710ec40, + 0x46204f80, + 0xf0024639, + 0x8007fd61, + 0x47788006, + 0x6062a085, + 0x4289a028, + 0xe8784983, + 0xffff0833, + 0x0360f104, + 0xf1044618, + 0x930201a0, + 0xfe93f002, + 0xf2802800, + 0xee408130, + 0xf5090710, + 0xf5047a00, + 0x463179c0, + 0xf5044648, + 0xf0027be0, + 0x4658ff58, + 0x0120f106, + 0xff53f002, + 0x73d0f504, + 0x99034618, + 0xf0029301, + 0x4968ff4c, + 0xf0024648, + 0xf10afe85, + 0x46820680, + 0x49644658, + 0xfe7ef002, + 0x0f00f1ba, + 0x8109f280, + 0xf2802800, + 0x36018106, + 0xa710ec40, + 0x46394620, + 0xfd1af002, + 0xb0e8900d, + 0x60d9da98, + 0x58c0589d, + 0x4958ffff, + 0xf0029801, + 0x2800fe48, + 0x80f1f280, + 0x0710ee40, + 0x46203602, + 0x36044639, + 0xfd04f002, + 0x2bdde81b, + 0x6026a062, + 0x6037a073, + 0xe124601b, + 0xffffe1a5, + 0x6819463b, + 0x31844628, + 0xfd36f002, + 0x46204639, + 0xff18f002, + 0x46394620, + 0xfcecf002, + 0xe0a5e024, + 0x4620ffff, + 0xfcd0f002, + 0x46204639, + 0xff0af002, + 0x46394620, + 0xfcdef002, + 0xca986018, + 0x498a4889, + 0x4a574946, + 0x4a3f492e, + 0xe1a5e124, + 0x44430558, + 0x02330332, + 0x09954559, + 0x49420559, + 0x22444334, + 0x24292244, + 0x4553493a, + 0x23a50333, + 0xffff60b1, + 0xf0024620, + 0x4620fca9, + 0xf0024639, + 0x4819fcbb, + 0x60426091, + 0xffff6053, + 0xf10725ff, + 0x46290a48, + 0xf0024620, + 0x4629fd02, + 0x98019003, + 0xfcfdf002, + 0x2b009b03, + 0x4923d15e, + 0xbf082800, + 0xf1044651, + 0xf0020080, + 0x4620fcea, + 0xfc86f002, + 0x46204639, + 0xfec0f002, + 0xd0522dff, + 0x46204639, + 0xfebaf002, + 0xd2dc3d01, + 0x49154620, + 0xfc8cf002, + 0x603a6029, + 0x4b92e81b, + 0xffff4ba3, + 0x4640490f, + 0xfdbbf002, + 0x4605490d, + 0xf0029802, + 0xea50fdb6, + 0xd55e0305, + 0x5720ec40, + 0x46204909, + 0x6680f506, + 0xf0023608, + 0x4119fc71, + 0xffff49ca, + 0x77a0f504, + 0x46384641, + 0xfda1f002, + 0xe0071e05, + 0x0000471c, + 0x000047c4, + 0x0000488c, + 0x0000484c, + 0x0610f106, + 0x4634db19, + 0xee603460, + 0xf2a45730, + 0xea4060ec, + 0xf0804000, + 0x9b0520a5, + 0x3732fe04, + 0xe8bdb007, + 0xee408ff0, + 0xe6a9b710, + 0x28009900, + 0x4659bf18, + 0x25fee79f, + 0xf504e78d, + 0x46497580, + 0x4b124628, + 0xf0024a12, + 0x4620fcb9, + 0xf0024911, + 0x498afc35, + 0x4a0effff, + 0x490c4628, + 0xfcb6f002, + 0x46484629, + 0xfd5cf002, + 0x46414605, + 0xf0024638, + 0x2d00fd6a, + 0x2800da07, + 0xec40da05, + 0xf1065710, + 0x34400420, + 0xf04fe7c3, + 0xe7c610d0, + 0x0000471c, + 0x0000488c, + 0x000047c4, + 0xfe18b082, + 0x9301373c, + 0xd1130783, + 0x43bff640, + 0xd9114299, + 0x689a4b09, + 0x00192381, + 0x297f4391, + 0x421ad903, + 0x2013d001, + 0x9b014240, + 0x373cfe08, + 0x4770b002, + 0xe7f7200b, + 0xe7f5200d, + 0x400e0800, + 0xfe14b510, + 0x0783c73a, + 0x23d0d511, + 0x681a061b, + 0x6e194b0f, + 0x41544254, + 0x40a32301, + 0xd0064219, + 0xb90a4b0c, + 0x33ff3315, + 0x605a2200, + 0x0743601a, + 0x4809d50b, + 0x4b09c0ff, + 0x32c3f04f, + 0x31c80019, + 0x604a600a, + 0x20012200, + 0xfe0462da, + 0xbd10c73a, + 0x401200fc, + 0x400e020c, + 0x400e080c, + 0x400e0328, + 0xc731fe1b, + 0x72fff644, + 0x0b812301, + 0xd0064291, + 0x0e422300, + 0xd1022a10, + 0x42824a03, + 0xfe0b415b, + 0x0018c731, + 0xbf004770, + 0x20081fff, + 0xb091b5f0, + 0x91029000, + 0x373efe1a, + 0x930e228b, + 0x9d029b00, + 0x355c691b, + 0x9b009301, + 0x405a695b, + 0x92062300, + 0x23009303, + 0xf04f63ab, + 0x930c13c3, + 0x9a069b01, + 0x3708ec42, + 0x930468eb, + 0xd1002b00, + 0x6a2be0d6, + 0x2b009305, + 0xe0d1d000, + 0xb92b78eb, + 0x9a019b05, + 0x9b06930b, + 0xd5054313, + 0x2b00786b, + 0xe20cd100, + 0x930b2301, + 0xf002a80f, + 0x2201fd63, + 0x689b9b00, + 0x4a6f609a, + 0x9b0060da, + 0xee2068db, + 0x9b003710, + 0x2b0068db, + 0xe0cfdb00, + 0xfe9af001, + 0x79eb9a00, + 0xb1936891, + 0x48672200, + 0x60c8608a, + 0x009b9904, + 0x930818cb, + 0x93073304, + 0x9b089209, + 0x681a9909, + 0x0e5b0053, + 0xd2004299, + 0x2200e0c8, + 0x9e0f9b00, + 0x93076a5b, + 0x689b9b00, + 0x4a5b609a, + 0x9b0b60da, + 0xd1002b00, + 0x78aae1a3, + 0x00929904, + 0xf002a80f, + 0xf640fcb6, + 0x9b071278, + 0x189ca80f, + 0xf0020021, + 0x9a01fcdb, + 0x2a009b0f, + 0xe195db00, + 0x2a0069ea, + 0xe1badb00, + 0x1e4a78a9, + 0x00084191, + 0xfe6cf001, + 0x0710ee40, + 0x1b9b78aa, + 0xec420092, + 0x23033770, + 0x63ab2045, + 0xfe17f001, + 0x4e454b44, + 0x2800001f, + 0xcf1fdb1e, + 0xb9d83f14, + 0x2201b9d3, + 0x42910412, + 0x4294d116, + 0x4ce6d114, + 0x42a36833, + 0x6973d110, + 0x2408f64a, + 0xd10b42a3, + 0x607a0092, + 0x2340687b, + 0x68fb60fb, + 0x61743c06, + 0x20012241, + 0xe00060fa, + 0xf6402000, + 0xf6401178, + 0x00041cb8, + 0x9a0479ab, + 0x18d3009b, + 0x98049a07, + 0x79691852, + 0x18410089, + 0x44609807, + 0xfcaaf7ff, + 0xf64ab13c, + 0x22802308, + 0x69736173, + 0x02524b27, + 0x6268635a, + 0x1313f04f, + 0xf04f4058, + 0x69ea1354, + 0xec434053, + 0x001a0708, + 0x42034002, + 0xf04fd101, + 0x622a12c3, + 0x9b002201, + 0x609a689b, + 0x60da4a1c, + 0x609a2200, + 0x60da4a16, + 0x6baa6a2b, + 0x009b0fdb, + 0x63ab4313, + 0x78db9b00, + 0x9b02726b, + 0x9b031d1a, + 0x9b0cb143, + 0xda052b00, + 0x99029b02, + 0x67cb6a5b, + 0x67d36a8b, + 0x99006bab, + 0x6a09b29b, + 0xd00042aa, + 0x029be132, + 0x9b0e800b, + 0x373efe0a, + 0xbdf0b011, + 0x3730ee60, + 0xbf00e72e, + 0x10000001, + 0x20000001, + 0x20000005, + 0x40010030, + 0x400e8000, + 0x40010000, + 0x10000005, + 0x6aa89b07, + 0x681e6859, + 0x000c689b, + 0x692b001f, + 0x20f0181b, + 0x181b0600, + 0x181b6be8, + 0x2388930a, + 0x4299055b, + 0x9b0ad201, + 0x2a0018cc, + 0x1a7bda01, + 0x2303001f, + 0xd037421c, + 0x00132200, + 0xd1002b00, + 0x9b00e0f5, + 0x78db9900, + 0x70cb3301, + 0x2b0068cb, + 0xf644da06, + 0x0ba371ff, + 0xd101428b, + 0xfd8ef001, + 0xec432301, + 0x2e002770, + 0x003ed13b, + 0x36033302, + 0x9b00439e, + 0x2b0068db, + 0x0e23da2f, + 0xd8022b10, + 0x051b23c0, + 0x003218e4, + 0x00202100, + 0xfc12f001, + 0x0770ec46, + 0xf002a90f, + 0x9b09fbd0, + 0x93093301, + 0x330c9b07, + 0xe6da9307, + 0xf7ff0020, + 0xb910fe6b, + 0x2b080e63, + 0x003bd1c0, + 0x41931e5a, + 0x1acb19e1, + 0x930d0018, + 0xfe5ef7ff, + 0x9b0db918, + 0x2b080e5b, + 0x0efad1b2, + 0x415a4253, + 0xee60e7af, + 0x00303730, + 0x9b08e7d8, + 0x2b00681b, + 0x0030da4d, + 0xfe4af7ff, + 0x28009b0a, + 0x2103d04d, + 0x692a2003, + 0x4031696b, + 0x420618d3, + 0xe092d000, + 0xd90042b2, + 0x19bae08f, + 0x4293920a, + 0xe08ad800, + 0xd9004296, + 0x9b00e087, + 0x2b0068db, + 0xee60db37, + 0x00343730, + 0x2b009b0b, + 0x9b03d0b3, + 0x692ab173, + 0x18d2699b, + 0xd8094296, + 0x781b9b03, + 0x189b009b, + 0x429a9a0a, + 0xf04fd302, + 0x930c23a5, + 0x2b100e23, + 0x23c0d802, + 0x18e4051b, + 0x003e2303, + 0x0032439e, + 0xa80f0021, + 0xfb49f002, + 0x421f2303, + 0xe790d100, + 0x00fb2201, + 0x409a4252, + 0x439059a0, + 0x69aae786, + 0x189b692b, + 0x009279ea, + 0x18f6189b, + 0x42b4e7af, + 0xf242d0c7, + 0x9b000200, + 0x801a6a1b, + 0xec410fa3, + 0x00313770, + 0x2b100e33, + 0x23c0d802, + 0x18f1051b, + 0x2203003b, + 0x43933303, + 0x0020001a, + 0xf001930d, + 0x9b0dfb82, + 0x0770ec43, + 0x9b01e7ac, + 0xda1e2b00, + 0xe6690033, + 0x1e53792a, + 0xd8242b07, + 0x63ab2302, + 0x990478eb, + 0x18cb009b, + 0x00899905, + 0x58595860, + 0xd1184288, + 0x31019905, + 0x428a9105, + 0x9b01d8f4, + 0x3710ee20, + 0x9a014b1f, + 0x622b4053, + 0x9b01e6b4, + 0xec429a06, + 0x9b063708, + 0x4b1a0fd9, + 0xf0010008, + 0x4043fcb9, + 0xf04fe7f1, + 0xe7ee13c3, + 0x800b01db, + 0x3350f240, + 0x58cb4914, + 0xec412177, + 0x98003738, + 0xb9a87840, + 0x91014059, + 0x6e9b9b02, + 0x9b02b1a3, + 0x6fdb3304, + 0xdb0f2b00, + 0x691b9b00, + 0xda0b2b00, + 0x00012001, + 0xfc96f001, + 0x95039001, + 0xe5ae0015, + 0x13c3f04f, + 0xe7e79301, + 0x13c3f04f, + 0x9d039306, + 0xbf00e7f3, + 0xa5c3a5c3, + 0x400e0000, + 0x00fabaa0, + 0x0004b5f0, + 0xfe18b087, + 0x93053735, + 0x93006a43, + 0xf2409a00, + 0x469443dc, + 0x185f4463, + 0x6a039303, + 0x68fb9301, + 0xd1002b00, + 0x0013e088, + 0x185d3340, + 0x930268ea, + 0xb35a6b03, + 0x6ae96afa, + 0xd021428a, + 0x428a2601, + 0x2600dc00, + 0x6c129a00, + 0xd12c429a, + 0x9a012320, + 0x80130020, + 0xf7ff9902, + 0x6a2bfd5d, + 0xda2f2b00, + 0xd1002e00, + 0xf240e068, + 0x9a0043dc, + 0x238058d5, + 0x18ed055b, + 0x9a012340, + 0x80132000, + 0xe0486222, + 0x6b686b7e, + 0xd9d94286, + 0xe7db2601, + 0x42dcf240, + 0x588a9900, + 0xd0044293, + 0xb9137a2b, + 0x2b007a3b, + 0x2601d14a, + 0xf240e00c, + 0x990042dc, + 0x4293588a, + 0x7a2bd006, + 0x2e00b923, + 0x7a3bd034, + 0xd1312b00, + 0x00206a23, + 0x62221c9a, + 0x99032220, + 0xf7ff805a, + 0x6a23fd21, + 0x62233b02, + 0x2b006a3b, + 0xf240da2c, + 0x990043dc, + 0x58cb6b22, + 0x429a2500, + 0xb91ed104, + 0x6c0d2380, + 0x18ed055b, + 0x449cf240, + 0x00229903, + 0xf0019802, + 0xec44fa96, + 0x23400770, + 0x9a012001, + 0xf2408053, + 0x4a093338, + 0x9b0550d5, + 0x3735fe08, + 0xbdf0b007, + 0x9a012320, + 0x80130020, + 0xf7ff9902, + 0x6a2bfcf1, + 0xdac32b00, + 0xe79b2500, + 0x400e0000, + 0x0718fe85, + 0x4b032280, + 0x601a0292, + 0x0738fea5, + 0xbf004770, + 0x4003202c, + 0x071afe85, + 0x4b0322c0, + 0x601a0292, + 0x073afea5, + 0xbf004770, + 0x4003302c, + 0xfe1ab513, + 0x4c0b373a, + 0x93016920, + 0x23f0b158, + 0x18c0061b, + 0xfb40f7fe, + 0x61232300, + 0x78223433, + 0x43133304, + 0xee837023, + 0x9b010713, + 0x373afe0a, + 0xbf00bd13, + 0x400e0328, + 0xb087b5f0, + 0x0016000c, + 0xfe1b9303, + 0x93053733, + 0x689a4b42, + 0x00192382, + 0x297f4391, + 0x421ad904, + 0x2013d002, + 0xe05a4240, + 0x42184b3d, + 0xe073d000, + 0x0f9b0583, + 0x2b009302, + 0xe06dd100, + 0x2f020c07, + 0xe069d900, + 0x061b23f0, + 0x003118e3, + 0x93010018, + 0xfa2af001, + 0x2004b908, + 0x0020e7e4, + 0xf81cf7ff, + 0x1e700005, + 0xf7ff1900, + 0x4285f817, + 0x2206d1f3, + 0x4253403a, + 0x9b02415a, + 0x005b3b01, + 0x238018d2, + 0x409304db, + 0xd10d2dff, + 0x68524a26, + 0x06920e92, + 0x2b004393, + 0xb9b7d1df, + 0x05244334, + 0xd0232c00, + 0xe7bf200b, + 0xdbd62d00, + 0x3261f240, + 0x5c8a491e, + 0xdad04295, + 0x3268f240, + 0x186d00ed, + 0x320458a9, + 0x400a58aa, + 0x2f01e7e2, + 0x4334d120, + 0x2c00b2e4, + 0x0032d1e6, + 0x98019903, + 0xfe0af7fe, + 0x9b052000, + 0x3733fe0b, + 0xbdf0b007, + 0x333cf240, + 0x00314a0e, + 0x22805ad3, + 0x425a4013, + 0x22804153, + 0x0252425b, + 0x9801431a, + 0xf7fe23d8, + 0xe7e7fe11, + 0x99010032, + 0xf0019803, + 0xe7e1fa19, + 0xe7832005, + 0x400e0800, + 0xfff8fcfe, + 0x400e0360, + 0x400e0000, + 0xc738ee19, + 0x0c800500, + 0x181b4b05, + 0x000bcb07, + 0x401a4311, + 0x43104008, + 0xc738ee09, + 0x00004770, + 0x4013c000, + 0xb09db5f0, + 0x900a0014, + 0x93049107, + 0x3739fe15, + 0x9b049312, + 0x009d2100, + 0x0020002a, + 0xf980f001, + 0x0770ec45, + 0x2b019b07, + 0x2000d105, + 0xfe059b12, + 0xb01d3739, + 0x9b07bdf0, + 0x42939a22, + 0x9b0ad8f5, + 0x6a59681b, + 0x1378f640, + 0x930518cb, + 0x1797f04f, + 0xf04f61e7, + 0x002213d0, + 0x9b0a6263, + 0x681b3210, + 0xcb213328, + 0x9b0ac221, + 0x009b68db, + 0x9b0761a3, + 0xf04f7023, + 0x22002396, + 0x9b046323, + 0x107cf640, + 0x2b1662e2, + 0x580bd127, + 0x32ff3243, + 0x4295b29d, + 0x0025d1cb, + 0x35540c1a, + 0x250f802a, + 0x2d014015, + 0x005dd10b, + 0x0fdb086d, + 0x7223500d, + 0x0300f247, + 0xf241401a, + 0x429a0300, + 0x2002d101, + 0xf04fe02c, + 0x622313c3, + 0x60e39b05, + 0x1213f04f, + 0xec426a63, + 0x20013758, + 0x9b04e7aa, + 0xd0002b10, + 0x5808e064, + 0x0003217f, + 0x2b0a400b, + 0xe79ed000, + 0xb2d30e02, + 0x2a00b252, + 0x0022da04, + 0x323c2501, + 0x400b7015, + 0xf8bcf001, + 0x2a01b282, + 0x2b10d9d9, + 0x0022d8d7, + 0x323db280, + 0x30017013, + 0x009b1c43, + 0x18d39a05, + 0x23009308, + 0x9b079309, + 0xd2004298, + 0x9002e03e, + 0x99079a07, + 0x9a021c13, + 0xd1c0428a, + 0x2770ec43, + 0x2b169b04, + 0x6ae3d106, + 0x9b0ab923, + 0x699b681b, + 0xdbb42b00, + 0xda222f00, + 0x071afe88, + 0x9a0978a3, + 0xd2004293, + 0x9b04e7ab, + 0xd0002b16, + 0x6ae0e210, + 0xec416b21, + 0xf04f0768, + 0x1ac92396, + 0x41991e4b, + 0x41981e43, + 0xb2c99b0a, + 0xf001681b, + 0x699afa3d, + 0x40534b67, + 0x0720ec43, + 0xfea861e7, + 0x2200073a, + 0xec426a23, + 0xe78d3770, + 0x0720ee00, + 0x93021c43, + 0x00819b05, + 0x930b185b, + 0x1d0a681b, + 0x9b059303, + 0x9b08189a, + 0x2770ec43, + 0xf0019803, + 0xb283f857, + 0x93009311, + 0xd1002b00, + 0x207fe7aa, + 0x40039b03, + 0xd1004283, + 0x2b47e7a4, + 0x9b00d110, + 0xd0002b02, + 0x9b03e765, + 0x2b010e1b, + 0x7063d102, + 0x70a36813, + 0x9a029b00, + 0x189b3b01, + 0xe00b9309, + 0xd1142b4b, + 0x3b029b00, + 0xd9002b07, + 0x9b02e751, + 0x9b0070e3, + 0x71233b01, + 0x9a089b00, + 0x009b9811, + 0x930818d3, + 0x9b023801, + 0x18c0b280, + 0x2b09e775, + 0xe07bd000, + 0x2b219b00, + 0xe73ad000, + 0x0e1b9b03, + 0x2b019306, + 0x466bd1e8, + 0xa8137a1b, + 0x33107163, + 0x466b71a3, + 0x9b057a1d, + 0x195d00ad, + 0xf872f002, + 0x00292240, + 0xf001a813, + 0xa914fffc, + 0xf002a813, + 0x204bf825, + 0xfeacf7ff, + 0x204b9001, + 0xfea8f7ff, + 0x9b012608, + 0x0a1b9f01, + 0x0a03439f, + 0x90034398, + 0xec439b03, + 0x9b067770, + 0xd039421f, + 0x930b0133, + 0x001a2300, + 0x0851980b, + 0x481f1809, + 0x5a090049, + 0x1880a814, + 0x0a0d7840, + 0x42451b40, + 0x46ac4145, + 0xa8122508, + 0x5c801940, + 0x1a41b2c9, + 0x41414248, + 0x40014660, + 0x3202185b, + 0xd9e32a1f, + 0xec412120, + 0x9a062770, + 0x40b29901, + 0x2100400a, + 0x1770ec42, + 0x1254f04f, + 0x39100019, + 0x41414248, + 0xf0010008, + 0x4042f97d, + 0x0017d504, + 0xec422210, + 0xe7833770, + 0x36019b03, + 0x087f085b, + 0x2e0c9303, + 0xf04fd1b8, + 0xe7f41797, + 0xa5c3a5af, + 0x40138000, + 0xd0002b48, + 0x9b03e0ed, + 0x00330e1e, + 0x41831e58, + 0x3301199b, + 0x9800105b, + 0x42833302, + 0xe6b2d000, + 0x63636813, + 0xd1002e00, + 0x9b04e74e, + 0xd0002b16, + 0x9b05e6a9, + 0x185b3108, + 0x9b05930f, + 0x93015a5b, + 0x889a9b08, + 0x2396f04f, + 0x2318405a, + 0x920e4373, + 0x42939a01, + 0xe696dc00, + 0x3350f240, + 0x58d14a81, + 0xdb002900, + 0x2300e0b8, + 0x920d001a, + 0x2596f04f, + 0x9b0d9306, + 0x33019a0f, + 0x0073930d, + 0x920c5ad2, + 0x32049a08, + 0x4a785ad3, + 0x9b0c9310, + 0x189b009b, + 0x689b681a, + 0xd5004313, + 0x9b0ce675, + 0xec429a10, + 0x980c3770, + 0xfdfef7ff, + 0x98109009, + 0xfdfaf7ff, + 0xec409b09, + 0x9b093770, + 0xd02f2b00, + 0xbb0b9b06, + 0xfab29a09, + 0xf1c2f282, + 0x33180220, + 0x3b184373, + 0x920618d2, + 0xf080fab0, + 0x0020f1c0, + 0x2596f04f, + 0x404518c0, + 0x43732318, + 0x429a9a01, + 0x9b09dd1e, + 0xd41b021b, + 0x9a0c0023, + 0x801a3350, + 0x1217f240, + 0xe013805a, + 0xec459b06, + 0xf04f3768, + 0x1aeb2396, + 0x41931e5a, + 0xec422201, + 0xe7e33770, + 0xec439b09, + 0x23180770, + 0x9a014373, + 0xdce3429a, + 0x2e003e01, + 0xe79ed000, + 0xec459b06, + 0xf04f3768, + 0x990e2396, + 0x4059405d, + 0x9b019a06, + 0x418942a9, + 0x41804293, + 0x42404249, + 0xf8bcf001, + 0xda002800, + 0x0025e613, + 0x882b3550, + 0x9b01b993, + 0xd90f4293, + 0x0c18f240, + 0xfb933b01, + 0x9a0ff6fc, + 0x00491c71, + 0x46625a89, + 0x1a9b4372, + 0x32520022, + 0x80138029, + 0x0730ee60, + 0x9b032218, + 0x0e1b9303, + 0x2300435a, + 0x99010018, + 0x41584291, + 0x0770ec43, + 0x9a019b01, + 0x9b0e62e3, + 0x9b0f6323, + 0xec43881b, + 0x9b0b2770, + 0x681b9a0d, + 0xec430e1b, + 0x6ae32770, + 0xec426b22, + 0x9b013768, + 0x9b0e62e3, + 0xe6776323, + 0x227758d3, + 0x3758ec42, + 0x9904e7f1, + 0xd0002916, + 0x2b03e66e, + 0x9b00d106, + 0xd0002b02, + 0x6813e5c7, + 0xe6656423, + 0xd1112b44, + 0x3b039b00, + 0xd9002b01, + 0x6813e5bd, + 0x64a39a00, + 0x689b9b0b, + 0x23006463, + 0xd1012a04, + 0x68db9b0b, + 0xe65164e3, + 0xd1062b05, + 0x2b029b00, + 0xe5aad000, + 0x63e36813, + 0x2b06e648, + 0xe645d000, + 0x9b032203, + 0x0e5b005b, + 0x9a004353, + 0x42933301, + 0xe59ad000, + 0x3b019b02, + 0xe63771e3, + 0x9a042310, + 0x2770ec43, + 0xbf00e5fe, + 0x400e0000, + 0x40134000, + 0xb0a7b5f0, + 0x00160005, + 0x9105001c, + 0x3732fe1b, + 0x93096a87, + 0xf7ff0038, + 0x2100f919, + 0x9b052201, + 0x18ff3801, + 0x6a2b0900, + 0x60274007, + 0x801aa80a, + 0x612166a1, + 0xf0003217, + 0x2318fea1, + 0x0770ec43, + 0x08b69b05, + 0x2301089a, + 0x930e425b, + 0x18b66aeb, + 0x920b950a, + 0x429e089b, + 0x001ed900, + 0x960c2300, + 0x9b0a9304, + 0x93066a5b, + 0xf6409a06, + 0x46941378, + 0x93034463, + 0x7d0aa90a, + 0x429a7d4b, + 0x2300d103, + 0x684b828b, + 0x68ca60cb, + 0x189b7d0b, + 0x4293690a, + 0x9a0ad054, + 0x6ad0684b, + 0x1ac60880, + 0xd10d4298, + 0x6a2b2202, + 0x2300801a, + 0x612366a3, + 0x93042300, + 0xfe0b9b09, + 0x98043732, + 0xbdf0b027, + 0xd3ef42b0, + 0x21a07d48, + 0x428e1a09, + 0x000edd00, + 0xdd1b2e00, + 0x00809903, + 0x6a911808, + 0x2a100e0a, + 0x22c0d802, + 0x18890512, + 0xdd002e80, + 0x009b2680, + 0x003a00b7, + 0xf00018c9, + 0xec47fe50, + 0x9a0b0770, + 0x1992ab0a, + 0x7d5a920b, + 0x755a1992, + 0xaa0a990e, + 0x29007d13, + 0x7d52da38, + 0x92079906, + 0x225ef240, + 0x0092189a, + 0x2701188a, + 0x4e752100, + 0x42989807, + 0xaa0ad80d, + 0x6851bb31, + 0x42996893, + 0xe79bd200, + 0x2b009b04, + 0x2204d0b4, + 0x801a6a2b, + 0xca01e7b2, + 0x1c584684, + 0x45b4b2c0, + 0xb109d111, + 0x7513aa0a, + 0x7d31ae0a, + 0xb9b17d77, + 0x7d722701, + 0xd3274297, + 0x2b006933, + 0xe795db00, + 0x33017d33, + 0x0003e01e, + 0xe7d30039, + 0xe7d67513, + 0x009b9903, + 0x585b4a5c, + 0xd0e54293, + 0x9b03e786, + 0x00bf1a7f, + 0x003a0089, + 0x18590018, + 0xfdf9f000, + 0x0770ec47, + 0x7d737d32, + 0x75731a9b, + 0x189b68f3, + 0x230060f3, + 0xe75b7533, + 0x98039b03, + 0x185b00b9, + 0x68185c41, + 0xfd86f000, + 0x2800b280, + 0xe765d100, + 0xd16029ff, + 0x42881e79, + 0xe75fd000, + 0x68994847, + 0x42819203, + 0xe759d000, + 0x0c03f240, + 0x68584661, + 0x400b17c3, + 0x6930181b, + 0x2800109b, + 0x68f0da4d, + 0xa80a6130, + 0xd94b429a, + 0x9303b2db, + 0x75039b03, + 0x2b0069eb, + 0xf240da4c, + 0x93001380, + 0x00393b6b, + 0xaa103bff, + 0xf7ffa80a, + 0x2800fc17, + 0x220fd062, + 0x931a9b05, + 0x881bab25, + 0x2a01401a, + 0x7829d002, + 0xd1572900, + 0x3150f240, + 0x5841482d, + 0xb1c86920, + 0x28006a60, + 0x2900d14e, + 0x6a21da05, + 0xda022900, + 0x29009917, + 0x2a01da46, + 0x2107d10c, + 0x0a1b78aa, + 0x4293400b, + 0x0023d006, + 0x881b3358, + 0x400b0a1b, + 0xd037429a, + 0x00212208, + 0x1d206a2b, + 0x319c801a, + 0xaa102316, + 0x183fe02c, + 0x2b00e763, + 0xe6fdd1b1, + 0x1ab26846, + 0x690218d3, + 0x42936043, + 0xe6f5d2ae, + 0x2380f240, + 0x93000039, + 0x2310aa10, + 0xfbccf7ff, + 0xd0a82800, + 0x692b6ea2, + 0x6fe2b14a, + 0x2b00b992, + 0x6fa3da05, + 0xda022b00, + 0x2b009b17, + 0x2310da0a, + 0x211cf240, + 0x6a2a0020, + 0x80131861, + 0xaa10305c, + 0xfd8ef000, + 0xe6b12301, + 0xffffded3, + 0xab123579, + 0x400e0000, + 0x0004b5f0, + 0xb085000d, + 0x3734fe19, + 0x00ca4e2c, + 0x93011992, + 0x6a476853, + 0x0fdb059b, + 0x00087043, + 0xf7fe9202, + 0x2300f8c1, + 0xdb014298, + 0x198300c0, + 0xf2409303, + 0x4a233358, + 0x56d3b26d, + 0x42ab2000, + 0x68e0d101, + 0xf0000fc0, + 0xf640fccf, + 0x003e1378, + 0xad026220, + 0x18ff3640, + 0x61332300, + 0xb1f3682b, + 0x681b2280, + 0x04d90552, + 0x0cdb019b, + 0x09c93301, + 0x1a5b031b, + 0x43d9188a, + 0x400b17c9, + 0x62a268e1, + 0x290062e3, + 0x18d2da04, + 0x055b2388, + 0xd806429a, + 0xf2410033, + 0x21000200, + 0xf7ff0020, + 0x6a23fe2d, + 0x1c9a3504, + 0xf2406222, + 0x18b6429c, + 0xd1d342be, + 0x62233b02, + 0xfe099b01, + 0xb0053734, + 0xbf00bdf0, + 0x400e0368, + 0x400e0000, + 0xb087b5f0, + 0x91030007, + 0xfe149202, + 0x93053737, + 0x24000003, + 0x33c89a02, + 0x4b2b701a, + 0x42a17819, + 0x2411dc02, + 0xe0454264, + 0x4b282006, + 0x18f600e6, + 0x40186873, + 0xd0432802, + 0x401a6832, + 0x003ad540, + 0x681532c4, + 0x40a22201, + 0xd0394215, + 0xb13a9a02, + 0x32c8003a, + 0xf2407895, + 0x40aa2200, + 0xd12f4213, + 0x28040025, + 0x9a03d107, + 0xd1292a00, + 0x0f1d065b, + 0xdc0042a9, + 0x00200025, + 0xf832f7fe, + 0x28009001, + 0x4a11db18, + 0x189b00c3, + 0x68db689a, + 0xd5174013, + 0x002937c8, + 0xf7ff0038, + 0x2104ff4f, + 0xf7ff0038, + 0x42acf977, + 0x2301d102, + 0xe0024058, + 0x051b6873, + 0xb938d4f9, + 0xfe049b05, + 0x00203737, + 0xbdf0b007, + 0xe7aa3401, + 0xe7f59c01, + 0x400e0360, + 0x400e0368, + 0xfe17b513, + 0x93013735, + 0x8ca34c12, + 0xb1d32000, + 0x00181de2, + 0xf0007fd1, + 0xb9a0fcd3, + 0x22020023, + 0x701a3333, + 0x781b3b02, + 0xd8032b7f, + 0x3048210b, + 0xfcc6f000, + 0x33080023, + 0xb1137fdb, + 0xf7fd2000, + 0x2300fcbb, + 0xee836263, + 0x9b010713, + 0x3735fe07, + 0xbf00bd16, + 0x400e0328, + 0x0005b5f0, + 0xb089000c, + 0x373dfe19, + 0xf7fe9303, + 0xee83feb7, + 0x6a630710, + 0xdb002b00, + 0x78ebe0df, + 0xec427b62, + 0x00263770, + 0x88333658, + 0x0f52055a, + 0x2130b922, + 0x2b10400b, + 0xe0d0d100, + 0x0e196963, + 0xd1032910, + 0x6c212380, + 0x1a5b055b, + 0xb9016c61, + 0x6ce16463, + 0x2a01b961, + 0x0020d024, + 0x6c612208, + 0xf0003048, + 0x2308fc1c, + 0x0770ec43, + 0x65232300, + 0x88332207, + 0x0a1b78a9, + 0x4291401a, + 0x2206d017, + 0xd1144213, + 0xf00020c9, + 0x2800fd28, + 0xe0a9da00, + 0xb9012010, + 0xf7fd1800, + 0x9b03fc63, + 0x373dfe09, + 0xbdf0b009, + 0x23f064e3, + 0x64a3061b, + 0x2201e7de, + 0x4e4e4b4d, + 0xeea3601a, + 0x6a630730, + 0x3710ee40, + 0x1154f04f, + 0x6ab24b4a, + 0x405a6a20, + 0xec414041, + 0xeea32720, + 0x206c0731, + 0xfcf4f000, + 0x6b670002, + 0xec476b20, + 0xf04f0768, + 0x1bc92196, + 0x41b91e4f, + 0x41b81e47, + 0xf000b2c9, + 0x2177fd39, + 0x40796ab7, + 0xf04f6aa7, + 0x46631c13, + 0xec47405f, + 0xec471708, + 0x4b371770, + 0x40533b05, + 0x0720ec43, + 0x0732eea3, + 0x0200f244, + 0x801a6a2b, + 0x7b220033, + 0x701a3333, + 0x22060023, + 0x881b3358, + 0x42130a1b, + 0xee00d001, + 0x68eb0720, + 0x3710ee40, + 0x2b006ab3, + 0x0022da0d, + 0x88123254, + 0xb1427b23, + 0x62726d62, + 0xd1342b00, + 0xff22f7ff, + 0xd0002800, + 0x7b23e797, + 0xd12c2b00, + 0xf934f7ff, + 0x20552201, + 0xf00075b2, + 0x2800fcae, + 0x6ce3da2a, + 0x2b020f1b, + 0x4b1ad103, + 0x6199491a, + 0x22010013, + 0x3770ec42, + 0x220068ae, + 0xa9040030, + 0xfcbdf000, + 0xec432304, + 0x23000770, + 0xeea36073, + 0x20040733, + 0x79696c63, + 0x93015628, + 0x93006d23, + 0x6ce26ca3, + 0xfa88f7fd, + 0x2300e7b9, + 0x001a490b, + 0xf7fd0018, + 0xe7cdfbe7, + 0x0730ee60, + 0x2004e7dc, + 0xe75a4240, + 0xe7fb200c, + 0x400e0800, + 0x400e0328, + 0xa5c3a5b4, + 0x40060000, + 0xacce00cf, + 0x00ffffff, + 0xb085b5f0, + 0xfe159001, + 0x9303373b, + 0x4c2a6c0b, + 0xda022b00, + 0x2a00029a, + 0x9801d149, + 0x6b06680d, + 0x42ae7b0a, + 0x2600d004, + 0xb13a6126, + 0xe03f250c, + 0x694ab122, + 0x199269ce, + 0x62223204, + 0xb96b195b, + 0xf7ff9801, + 0x0005fedd, + 0x62232300, + 0xff42f7fd, + 0xfe059b03, + 0x0028373b, + 0xbdf0b005, + 0x0d16051a, + 0x698dbb42, + 0x131b6aca, + 0x0b2d1aad, + 0x320c0032, + 0xda0b2b00, + 0x4000f240, + 0x4810181b, + 0x18120092, + 0x60102000, + 0x2e043601, + 0xe7d9d1f0, + 0x4000f240, + 0x4285002f, + 0x0007dd00, + 0x43180438, + 0x48074684, + 0x18120092, + 0x1bed4660, + 0x19db6010, + 0x250ae7ea, + 0xe7c9426d, + 0xe7fb2510, + 0x400e0328, + 0x400d0004, + 0x0004b5f0, + 0xfe16b087, + 0x93053738, + 0x055b2380, + 0xf2406283, + 0x4a86333c, + 0x22005ad3, + 0x0f1b051b, + 0xf241b113, + 0x409a0200, + 0x20074b82, + 0x62e2895b, + 0xfbf3f000, + 0x400317c0, + 0x031b3301, + 0x00239302, + 0x781a333c, + 0xd8042a7f, + 0x701a2210, + 0x3303f240, + 0x792080a3, + 0xf7fd7961, + 0x6a65fb07, + 0x3258f240, + 0x3340002b, + 0x4b729301, + 0x569b2000, + 0xda013301, + 0x0fc068e0, + 0xfa60f000, + 0x0200f241, + 0x21006220, + 0x9b010020, + 0xfbe0f7ff, + 0x90030007, + 0x13c3f04f, + 0x3250f240, + 0x588a4966, + 0xdb112a00, + 0x99026b22, + 0xd00d4291, + 0x369c002e, + 0x2a0068f2, + 0x002ad051, + 0x781232d8, + 0x0020b122, + 0xf7fe9901, + 0x6a33fd01, + 0xdb152b00, + 0xf2416a23, + 0x33020200, + 0xf2406223, + 0x002043dc, + 0x18eb9902, + 0xfbb6f7ff, + 0xb9000007, + 0x6a239f03, + 0x3b02215c, + 0x62230020, + 0xff5cf7fe, + 0x99010020, + 0xfce4f7fe, + 0xd1002f00, + 0x0020e07a, + 0xf7fe9901, + 0x002bf9fb, + 0x68da339c, + 0x6a1ab112, + 0xda192a00, + 0x2a0068e2, + 0x6d2ada16, + 0xd0212a00, + 0x49436c2b, + 0x4153425a, + 0x325af240, + 0x548b3b03, + 0x99010020, + 0xff04f7ff, + 0x4a3f6a23, + 0xf240801a, + 0x22ff335a, + 0x54ca493a, + 0xfe069b05, + 0xb0073738, + 0x6d2abdf0, + 0xd0b32a00, + 0x99010020, + 0xfcb0f7fe, + 0xe7ad6e6b, + 0x2b006a1b, + 0xf04fdae9, + 0x4e3323a5, + 0x61e30037, + 0x92023708, + 0x9a027833, + 0xd9de4293, + 0x0e9b683b, + 0xb363419b, + 0x2100f240, + 0x687b78a2, + 0x420b4091, + 0x2206d125, + 0x2b024013, + 0x0020d021, + 0xf7ff9902, + 0x2104fcd5, + 0xf7fe0020, + 0x6d2bfefd, + 0xb1b39003, + 0x9802b1d0, + 0xfd9ef7fd, + 0xf240b240, + 0x4a1b335a, + 0x54d09901, + 0x00209b03, + 0x6a23005a, + 0x62234313, + 0xfeb4f7ff, + 0x4a172300, + 0x6a23652b, + 0x9b02801a, + 0x33013708, + 0xe7c59302, + 0x2008466b, + 0xe7e45618, + 0x323c0022, + 0x3b017813, + 0x7013b25b, + 0xdc082b00, + 0x359c11db, + 0x00207013, + 0x60ef9901, + 0xf974f7fe, + 0x7923e798, + 0xb25b3b01, + 0x2b007123, + 0xe716db00, + 0x71232303, + 0x005b7963, + 0xe7107163, + 0x400e0000, + 0x401380a0, + 0xffff8000, + 0x400e0360, + 0xb089b5f0, + 0x0014000d, + 0xfe159003, + 0x00103738, + 0x30c82100, + 0xf0009307, + 0x9b03fa6f, + 0x4f4c4a4b, + 0x2b05189b, + 0x783bd90c, + 0xd1232b00, + 0x4b496879, + 0x06920e8a, + 0x602b4313, + 0x20116069, + 0xe0144240, + 0x0200f244, + 0x9201409a, + 0xb122783a, + 0xd1132b01, + 0x0300f248, + 0x687b9301, + 0x0e994a3e, + 0x430a0689, + 0x9a01c50c, + 0x421a20ff, + 0x9b07d0e7, + 0x3738fe05, + 0xbdf0b009, + 0x93012300, + 0x23000026, + 0x224036c4, + 0x00202131, + 0xf7fd6033, + 0x2800fcbb, + 0x2201dc1d, + 0x00110020, + 0xfca0f7ff, + 0xda102800, + 0x22800020, + 0x30c84b2d, + 0x78836cd9, + 0x409a0252, + 0xd03a4211, + 0x21012200, + 0xf7ff0020, + 0x2800fc8f, + 0x4a27db3d, + 0x189b00c3, + 0xc512cb12, + 0x783be7cf, + 0x1d222700, + 0x9b049304, + 0xddda42bb, + 0x00fb4921, + 0x2101185b, + 0x681b40b9, + 0x9901468c, + 0xd0034219, + 0x68314660, + 0x60314301, + 0x00112003, + 0x400309db, + 0x1898009b, + 0x90059302, + 0x42999b05, + 0x9b02d103, + 0x18d23701, + 0x6808e7df, + 0x42989b03, + 0x4663d103, + 0x43186830, + 0x31046030, + 0x2101e7ee, + 0x7083404b, + 0x0020000a, + 0xfc52f7ff, + 0xdac22800, + 0x2200e7ba, + 0x00110020, + 0xfc4af7ff, + 0xdaba2800, + 0xbf00e78f, + 0x1b7400aa, + 0x400e0360, + 0x03ffe000, + 0x401200fc, + 0x400e0368, + 0x400e036c, + 0x0004b5f0, + 0xfe1ab085, + 0x6a863738, + 0x6ac39303, + 0x199d0e77, + 0x41931e5a, + 0x0e6b1aed, + 0x23009300, + 0x0e6b9301, + 0xd104429f, + 0x3b08003b, + 0x415a425a, + 0x00309201, + 0xfb5cf7fe, + 0xd0262800, + 0xf7fe0028, + 0x2800fb57, + 0x42aed021, + 0x200ad902, + 0xe0174240, + 0x429f9b00, + 0x6a65d1f9, + 0x3640002e, + 0x23a5f04f, + 0x61e32001, + 0xf896f000, + 0x390423fc, + 0x700b6220, + 0x00330020, + 0x6ae22100, + 0xfa14f7ff, + 0x3811b970, + 0xfe0a9b03, + 0xb0053738, + 0x42aebdf0, + 0x9b00d8dd, + 0xd1da429f, + 0x2b009b01, + 0xe7d6d1dd, + 0xb1936d2b, + 0x359c2300, + 0x239060eb, + 0x00316aa2, + 0x055b0020, + 0xd205429a, + 0xfd72f7ff, + 0x4a046a23, + 0xe7df801a, + 0xfc6cf7ff, + 0x2011e7f8, + 0xbf00e7c0, + 0xffff8000, + 0x000db537, + 0x4735fe1a, + 0x93012300, + 0x12c3f04f, + 0x1100f240, + 0xf7fdab01, + 0x9a01f85b, + 0x2a000003, + 0xee40da09, + 0x22802710, + 0x18a90552, + 0xf2404803, + 0xf7fd1200, + 0xfe0af9d6, + 0xbd3e4735, + 0x00010300, + 0x000db573, + 0xfe140016, + 0x2300473e, + 0xf04f9301, + 0xab0122a5, + 0xf7fd0031, + 0x9a01f83b, + 0x20040003, + 0xda082a00, + 0x2710ee40, + 0x05522280, + 0x480318a9, + 0xf7fd0032, + 0xfe04f9b6, + 0xbd76473e, + 0x00020300, + 0x0710ee89, + 0x00c94a08, + 0x0b015850, + 0x43110302, + 0x40010900, + 0x4308200c, + 0xd1fc0a09, + 0x0f000700, + 0x0730eea9, + 0x00004770, + 0x4013fe04, + 0xc736fe19, + 0xd2000a00, + 0xfe09b2c0, + 0x4770c736, + 0x3803bfb0, + 0x4770d2fd, + 0xc738fe19, + 0x4904b128, + 0x0000f242, + 0x22001840, + 0xfe09600a, + 0x4770c738, + 0x400e035c, + 0xfe85bfe0, + 0x4684071c, + 0xd90a3a03, + 0x0300ea51, + 0xd106079b, + 0xbf001812, + 0xc008c908, + 0xd3fb4290, + 0x32031a12, + 0x3a01d003, + 0x54835c8b, + 0x4660d1fb, + 0x073cfea5, + 0x460a4770, + 0xbff02100, + 0x0710fe86, + 0x3a034684, + 0x0783d90b, + 0xf04fd109, + 0x43593301, + 0xbf001812, + 0x1b04f840, + 0xd3fb4290, + 0x32031a12, + 0x3a01d002, + 0xd1fc5481, + 0xfea64660, + 0x47700730, + 0xfe1abff0, + 0x4603c730, + 0x441ab11a, + 0x4290c002, + 0x1ac0d3fc, + 0xc730fe0a, + 0xbfe04770, + 0xc73afe19, + 0x4603b510, + 0x441ab122, + 0xc010c910, + 0xd3fb4290, + 0xfe091ac0, + 0xbd10c73a, + 0x0005b570, + 0xfe15000e, + 0xf7fd473a, + 0xb918fdcd, + 0xfe052000, + 0xbd70473a, + 0xd0fa2e00, + 0x19763e01, + 0xd8f542b5, + 0xf7fd0030, + 0x2800fdbf, + 0x2001d0f0, + 0x0e2d4075, + 0xe7ec43a8, + 0x0007b5f8, + 0x473efe15, + 0x66d8f244, + 0x198e2500, + 0x5d720029, + 0x31300038, + 0xf7fd3501, + 0x2d0efdf9, + 0xfe05d1f6, + 0xbdf8473e, + 0x0006b5f8, + 0x0014000f, + 0x0712fe89, + 0x1e5168d2, + 0x2101418a, + 0x2770ec41, + 0x002a009d, + 0xf7ff0021, + 0xec45ffb0, + 0x78250770, + 0x00ad0038, + 0x68e1002a, + 0xffa7f7ff, + 0x0770ec45, + 0xfea960f7, + 0xbdf80732, + 0x310e01c9, + 0x41d92307, + 0xbf56f7ff, + 0x0004b530, + 0x000db085, + 0x3734fe18, + 0x0002210c, + 0x9300a801, + 0xfa36f7fd, + 0x2301b988, + 0x9a0140ab, + 0x431a210c, + 0x9a029201, + 0x431aa801, + 0x9a039202, + 0x22804313, + 0x43220252, + 0xf7fd9303, + 0x9b00fa23, + 0x3734fe08, + 0xbd30b005, + 0xb085b5f0, + 0x000d0007, + 0x93010016, + 0x4737fe16, + 0x21012300, + 0x0c139303, + 0x00084399, + 0xf8cef000, + 0x0002ab03, + 0x00380029, + 0xff14f7fc, + 0x2b009b03, + 0xee40da06, + 0x00323710, + 0x9b010029, + 0xf8e4f7fd, + 0x4737fe06, + 0xbdf0b005, + 0x0004b570, + 0x673dfe18, + 0xfdccf7fd, + 0x0020b110, + 0xfc5af7ff, + 0x673dfe08, + 0xb573bd70, + 0xfe190016, + 0x2300473c, + 0xf04f9301, + 0x008d22a5, + 0x0029ab01, + 0xfeecf7fc, + 0x2b009b01, + 0xee40da05, + 0x00323710, + 0xf7fd08a9, + 0xfe09fa61, + 0xbd76473c, + 0x000db537, + 0x473dfe16, + 0x93012300, + 0x22a5f04f, + 0xab012108, + 0xfed4f7fc, + 0x00019b01, + 0xda062b00, + 0x3710ee40, + 0x00282280, + 0xf7ff0592, + 0xfe06fd47, + 0xbd3e473d, + 0xfe1ab510, + 0xb6724739, + 0x238af04f, + 0xff94f7ff, + 0xfe0ab662, + 0xbd104739, + 0x23002300, + 0xb573e78c, + 0xfe1b0016, + 0x2300473b, + 0xf04f9301, + 0x008d22a5, + 0x0029ab01, + 0xfeaaf7fc, + 0x2b009b01, + 0x0032da03, + 0xf7fd08a9, + 0xfe0bf99b, + 0xbd76473b, + 0xb505bf90, + 0x1734ee19, + 0xf805f000, + 0x4050bc04, + 0x1734ee09, + 0xbf90bd04, + 0xee1bb53f, + 0x2048573d, + 0xfd2cf7fe, + 0x204843c4, + 0xfd28f7fe, + 0xec4443c0, + 0xbc020770, + 0x015243ca, + 0x40c84051, + 0x10e1f04f, + 0x121ef04f, + 0x0052d200, + 0x40cc1a80, + 0x0200d200, + 0x0710ee20, + 0x573dfe0b, + 0xb532bd3e, + 0xc73eee1b, + 0x60842403, + 0x680d6903, + 0x61054015, + 0x3c01c108, + 0x9800d5f7, + 0x08881a09, + 0xee0b4050, + 0xbd32c73e, + 0xc733fe14, + 0xe0022000, + 0xc733fe14, + 0xf6c6201c, + 0x088070ff, + 0xbf602303, + 0x73f8f643, + 0x3b0854c3, + 0xfe04d2fc, + 0x4770c733, + 0xc736fe15, + 0xf04fb50c, + 0x4082121e, + 0x08434308, + 0x10e1f04f, + 0x1a8000c9, + 0x40584088, + 0x0710ee20, + 0xc736fe05, + 0xb5e0bd0c, + 0x2300b08b, + 0x62934a20, + 0x48214920, + 0xee306088, + 0xd733f710, + 0x93019300, + 0x000b2100, + 0x9c002002, + 0x60a03301, + 0x60a5f244, + 0xf64760e0, + 0x61206001, + 0x60a02003, + 0x33024817, + 0x30dc60e0, + 0x20016120, + 0x481560a0, + 0x60e03304, + 0x33104814, + 0x60a16120, + 0x60e14913, + 0x70fff6c2, + 0x61203320, + 0x33802105, + 0x93036061, + 0x2310480f, + 0x000c6ac1, + 0x9402401c, + 0xd01f4219, + 0x62c34b0c, + 0xfc79f7fc, + 0x93014b0b, + 0x93004b0b, + 0xbf00e7c8, + 0x400e0328, + 0x40060000, + 0xacce0001, + 0x400e0225, + 0x10000005, + 0x1fffffe1, + 0x20000005, + 0x40100000, + 0x5afe0010, + 0xe000edd0, + 0xe000ed90, + 0x689b4b6f, + 0x3336b94b, + 0x98020011, + 0x3b01c101, + 0x230cd1fc, + 0x3b0e7553, + 0x22016313, + 0x4b694252, + 0x605a601a, + 0x4b694a68, + 0x601a4c69, + 0x00194b69, + 0x681b601a, + 0x4b68680b, + 0x001d9306, + 0x64262601, + 0xf2416c27, + 0x60292107, + 0x37336327, + 0x63a121ff, + 0x60a162e1, + 0x30140020, + 0x58a122b8, + 0xd1fc2900, + 0xd00a3f01, + 0x3108bf80, + 0x606ac80c, + 0x3902606b, + 0x68aad1fa, + 0x365560e2, + 0x60e1e7e8, + 0x436662e1, + 0x35084c56, + 0xc40fcd0f, + 0x4435cd0f, + 0xf710ee30, + 0xd404d60a, + 0x0780ec41, + 0x2781ec43, + 0xee80bf40, + 0x20000715, + 0x1fdee890, + 0x2307f241, + 0x600b9906, + 0x990323b7, + 0x1770ec43, + 0xec434b49, + 0xeea05770, + 0x9c010735, + 0x2101cc0f, + 0x0770ec41, + 0x61a0f244, + 0x3770ec41, + 0x0736eea0, + 0xcb039b00, + 0x0200f640, + 0x0770ec42, + 0xec422205, + 0x4b3e1770, + 0x689b4a36, + 0xec424013, + 0x4b363770, + 0x685b2401, + 0x3770ec44, + 0x13c3f04f, + 0x220cf240, + 0x48384937, + 0x3204508b, + 0x3af9508b, + 0x3aff2100, + 0xfd90f7ff, + 0xec432318, + 0x4e330770, + 0x00324b33, + 0xc203cb03, + 0xf7fd2004, + 0xec44ffbd, + 0x4d300770, + 0x6cea2103, + 0x4e2f9607, + 0x200b2300, + 0x402246b4, + 0x46664249, + 0x330458f6, + 0x1b804026, + 0x2b201989, + 0x0003d1f7, + 0x3b08424e, + 0x3770ec46, + 0xf24043c9, + 0x0fcb0c08, + 0x21009301, + 0x0fc64663, + 0x414e4283, + 0x00309901, + 0xfed2f7ff, + 0x00012677, + 0x3050f240, + 0x40714b17, + 0x6ce95019, + 0x40215818, + 0x00104046, + 0xfec4f7ff, + 0x6708ec40, + 0x6770ec40, + 0x06124b16, + 0xeea0601a, + 0x4b150737, + 0xec426859, + 0x49141770, + 0x600a20f0, + 0xbf00e026, + 0x400d8000, + 0x400100ac, + 0x02020000, + 0x40022000, + 0x400f0100, + 0x40023000, + 0x400f8000, + 0x400e0328, + 0xf9351b28, + 0x40020000, + 0x400e0000, + 0x400e0338, + 0x400e03f8, + 0x40130000, + 0x401200fc, + 0x4013c100, + 0x4001a004, + 0x40018000, + 0x4001b004, + 0xfe41f7ff, + 0x4a802300, + 0xf0009900, + 0xeea0fd7f, + 0xee800739, + 0x20d10718, + 0xf7ff4b7c, + 0x001afe34, + 0x32089900, + 0xfd72f000, + 0x0739eea0, + 0x00104a78, + 0x30a86e6b, + 0xd1024223, + 0x42236803, + 0xf240d005, + 0x4974230c, + 0xee6058cb, + 0x23013730, + 0x666b4e72, + 0x430b0031, + 0xeea06003, + 0xf243073a, + 0x20400300, + 0x001c18d3, + 0x348c4308, + 0x60606020, + 0x60e060a0, + 0x33882020, + 0x60184308, + 0x0b9b6b93, + 0x6391d2fc, + 0x0b9b6b93, + 0xeea0d2fc, + 0x4b64073b, + 0xf240001a, + 0x32c01100, + 0x429ac302, + 0x4861d1fc, + 0xfc6ef7fc, + 0x001a4b60, + 0x1100f240, + 0xc3023218, + 0xd1fc429a, + 0x4a5d2300, + 0xf6406393, + 0x20264300, + 0xf7ff8293, + 0x2800fde2, + 0x4b59da02, + 0x8293891b, + 0x073ceea0, + 0xf6402380, + 0x4a5635f8, + 0x055b4c56, + 0x68136013, + 0x002a2100, + 0xf7ff0020, + 0xec45fca3, + 0x00200770, + 0xbf503850, + 0x25d02300, + 0x33099303, + 0x062d9301, + 0xf7ff2017, + 0x2101fc4b, + 0x980268ab, + 0x400a0eda, + 0x92021882, + 0x9a030f5b, + 0x18d3400b, + 0x9b019303, + 0x93013b01, + 0xd1eb2b00, + 0x33049a03, + 0x419b4293, + 0x9306425b, + 0x2310f240, + 0x58cb4936, + 0x3710ee20, + 0xdb2c2b00, + 0x000d4b3c, + 0x685b681a, + 0x93059204, + 0x335af240, + 0x52ca22ff, + 0x33029a01, + 0x483550ca, + 0xf7fd9900, + 0xf04ffab9, + 0x21f023a5, + 0x9b0160e3, + 0x70630609, + 0x185b6d2b, + 0xf6416323, + 0x80a30300, + 0x230cf240, + 0x2a0058ea, + 0xe05bdb00, + 0x34284b2b, + 0xc403cb03, + 0x2710ee40, + 0xf7ff4826, + 0x2300fb39, + 0x2b049b03, + 0xe0edd900, + 0xf7ff20b2, + 0x0006fd6c, + 0xf7ff2093, + 0xec40fd68, + 0x00356708, + 0x42064005, + 0xf04fd101, + 0x0fc015c3, + 0x0ff60040, + 0x43069b06, + 0xec422200, + 0xf2403770, + 0x4a0e2310, + 0x220058d3, + 0x42939202, + 0x4a16da09, + 0x431e6953, + 0x93026993, + 0x079b43f3, + 0xf04fd101, + 0x2d0025a5, + 0xe0cbdb00, + 0xbb68f7fc, + 0xe7fbe7fc, + 0x401000d0, + 0x400d8014, + 0x40100000, + 0x400e0000, + 0x5afe0000, + 0x4003a004, + 0x008006c0, + 0x40043004, + 0x400e0328, + 0x401380a0, + 0x40023000, + 0x50100408, + 0x400e0358, + 0x400e0340, + 0x400d8000, + 0xf7fe204b, + 0x0303fa51, + 0x4b5cd522, + 0x6ada0035, + 0x03534e5b, + 0x2301d519, + 0x432b2101, + 0xd00b420a, + 0x4a586033, + 0x9c059b04, + 0x60546013, + 0x3359f240, + 0x49552202, + 0xe79054ca, + 0x60134a54, + 0x0f5b0343, + 0x33014853, + 0xf7ff4358, + 0x2301fb87, + 0x6033432b, + 0x2b049b02, + 0xf240d9e5, + 0x4a4b2310, + 0xee6058d3, + 0x202e3730, + 0xfcedf7ff, + 0xda002800, + 0x200fe065, + 0xfce7f7ff, + 0xdb002800, + 0x4b46e05c, + 0x8b9a6a19, + 0x00588bdb, + 0x20809002, + 0x05802601, + 0xd3074281, + 0x4d410058, + 0x42a81808, + 0x4288d802, + 0x42464180, + 0x25010010, + 0x0c03f240, + 0x40284318, + 0x46600005, + 0x43054008, + 0xf640bb15, + 0x18d07cff, + 0xd31d4584, + 0x25010030, + 0x422e4028, + 0x40aad118, + 0x085b4d33, + 0x9d001952, + 0x60a8009b, + 0x18d34831, + 0x000d60e8, + 0xca40e001, + 0x429ac540, + 0x9b00d3fb, + 0x60d83004, + 0x482c9b02, + 0x62e362a1, + 0xfa68f7ff, + 0xf7ff204d, + 0x2800fca0, + 0xe728da00, + 0x0730ee60, + 0x373dfe14, + 0xf7fc9309, + 0xf7fcff93, + 0xf7fcff4f, + 0x0023fff1, + 0x333c2200, + 0x701a0020, + 0xf87ef7ff, + 0xfe049b09, + 0xe712373d, + 0x0730ee60, + 0xee40e7e0, + 0xe7fb0710, + 0xf7ff2074, + 0x2301fc7e, + 0x9a060005, + 0x2770ec43, + 0xe71e2600, + 0x4c154b14, + 0x4915689b, + 0x4b15b363, + 0x075b689b, + 0x6b23d128, + 0x0032680b, + 0x9b022101, + 0x1002f240, + 0xfbcaf7fc, + 0xbf00e024, + 0x40100000, + 0x4010302c, + 0x400e0358, + 0x400e0000, + 0x4010202c, + 0x0009eb10, + 0x401380a0, + 0x20081fff, + 0x40138000, + 0x20000001, + 0x50100408, + 0x400d8000, + 0x40010000, + 0x400e0800, + 0x40018000, + 0x680b6b22, + 0xd1d42a00, + 0xd4d207db, + 0x5730ee60, + 0xf2412280, + 0x4b7c0100, + 0x601a0452, + 0x2020505a, + 0xbf500600, + 0x029b2380, + 0x20836363, + 0xf7ff6b63, + 0x4a76fc2c, + 0x49761e05, + 0xe0cddb00, + 0x8a1b4b75, + 0x0c800498, + 0xf64060d0, + 0x041b20a0, + 0x181b0f9b, + 0x6013430b, + 0x2b006853, + 0xf248dafc, + 0xf7fc0000, + 0x2101fa8f, + 0xdb002d00, + 0x2507e0b8, + 0x89db4b69, + 0x40110bda, + 0x0a5a05d8, + 0x31010b1b, + 0x402a0dc0, + 0x4d65402b, + 0x031b0412, + 0x6029431a, + 0x60ea60a8, + 0x606a2200, + 0x17db682b, + 0x1c5a4013, + 0xd1f92bfe, + 0x22012300, + 0x0100f640, + 0x33206323, + 0x4b5b63e3, + 0x631a20a0, + 0x64a163da, + 0x21186619, + 0x05404b58, + 0x635961d9, + 0x631a619a, + 0xfa5af7fc, + 0xf7fe2059, + 0x0200f90f, + 0x2280d503, + 0x06124b52, + 0x9b03601a, + 0xd80b2b04, + 0xfe8cf7fc, + 0xff2ef7fc, + 0x20002106, + 0xfaf2f7fc, + 0x484c2100, + 0xfb56f7ff, + 0x0400f241, + 0x00222100, + 0xf7ff4849, + 0xec44fa95, + 0x4b480770, + 0x24009a07, + 0xc303ca03, + 0x20ff9901, + 0xfa22f7ff, + 0x00050021, + 0xf7ff20ff, + 0xec40fa1d, + 0x9b015770, + 0x009b4a40, + 0x601d189b, + 0x402b681b, + 0x425a1b5b, + 0x18e44153, + 0x33019b01, + 0x2b409301, + 0xee88d1e4, + 0x9b01071c, + 0x4770ec43, + 0xf7ff20b2, + 0x0003fb96, + 0xf7ff2093, + 0x0001fb92, + 0xf7ff2074, + 0x9a03fb8e, + 0xd8372a04, + 0x40534a30, + 0xec42404a, + 0x23013720, + 0x4c2e9a00, + 0x4b2e6093, + 0x9b0660d3, + 0xf7ff70a3, + 0xf7fffbb1, + 0x06b3fbb3, + 0x2048d40b, + 0xf8a8f7fe, + 0xd52d0780, + 0x899b4b1b, + 0x05db9302, + 0x2310d501, + 0x9b02431e, + 0x70237066, + 0xf2442100, + 0x9b000400, + 0x60999a00, + 0x48204b1f, + 0x002260d3, + 0xfa32f7ff, + 0x0770ec44, + 0xf908f7fc, + 0xe73b6011, + 0x20642305, + 0xe74e001a, + 0x4a1a4b19, + 0x22c0601a, + 0x06124b19, + 0x220b611a, + 0x635a4b18, + 0xee6063da, + 0xe7be0730, + 0x425b2301, + 0xe7d49302, + 0x4001a004, + 0x40048000, + 0x00fab000, + 0x401380a0, + 0x40058000, + 0x40012000, + 0x40108000, + 0x50112074, + 0x50100408, + 0x50100000, + 0x50100484, + 0x40120000, + 0xa5c3a5c3, + 0x50100480, + 0x10000001, + 0x20000001, + 0x13ffc000, + 0x400620a0, + 0xacce0002, + 0x40062000, + 0x40030000, + 0xfe1ab507, + 0x49083732, + 0xf0009301, + 0x4119f80f, + 0x60a4494a, + 0x4a59419a, + 0xffff6095, + 0xfe0a9b01, + 0xb0033732, + 0xfb04f85d, + 0x000047c4, + 0x3736fe1b, + 0x4604b4f8, + 0xf1ae460d, + 0xf9360601, + 0x1c7b7b02, + 0x1c73d104, + 0xfe0bbcf4, + 0x47182736, + 0x3300f3c7, + 0x3023f855, + 0x2203f3c7, + 0x1242eb04, + 0x1103f3c7, + 0x1141eb04, + 0x0003f3c7, + 0x1040eb04, + 0x3c42f3c7, + 0x0e14f20f, + 0xe01cf83e, + 0x9b01b408, + 0x3736fe0b, + 0x47f0bc08, + 0xbf00e7d9, + 0x420341a5, + 0x41294229, + 0x414141ef, + 0x411f42a7, + 0x1102f3c7, + 0x221cc002, + 0xf7ff2100, + 0xf347b97e, + 0x00891107, + 0x1949d4f4, + 0xfe19b518, + 0x22204739, + 0xf956f7ff, + 0x4739fe09, + 0x2240bd18, + 0xb950f7ff, + 0x4613001a, + 0xf0003264, + 0xfe87b86f, + 0x08ca0712, + 0xf0015c80, + 0x40d00207, + 0x0001f000, + 0x0732fea7, + 0xf07f4770, + 0xe0000700, + 0x107f2700, + 0xc73ffe1a, + 0xf8512600, + 0x25004026, + 0xbf1c4012, + 0x5026f852, + 0xf106407d, + 0x416c0601, + 0xf046bf18, + 0x40004600, + 0xc010bf18, + 0x0f08f016, + 0x2200d0eb, + 0xfe0a4152, + 0x4770c73f, + 0xb5f13700, + 0xf7ff2700, + 0xe8bdffdf, + 0xe06640f1, + 0xb5f01adb, + 0x0716fe87, + 0x0700f07f, + 0xffd4f7ff, + 0xfea74610, + 0xbdf00736, + 0x373cfe1b, + 0x000ab5fa, + 0x20000001, + 0xffc3f7ff, + 0x0ff09600, + 0x1890d001, + 0x9b013801, + 0x373cfe0b, + 0x0019bdfa, + 0x460bb5f8, + 0x1a924601, + 0xffd5f7ff, + 0x72a4f244, + 0xb5f8e000, + 0x461d4604, + 0xf7ff3300, + 0x1e41ffd4, + 0x0201ea15, + 0x00210020, + 0xf7ff1bff, + 0xfea7ffa7, + 0xbdf80737, + 0x460a4613, + 0x0712fe88, + 0x47f0e92d, + 0x27004694, + 0x220046be, + 0x46924690, + 0x003d59cc, + 0x5885d000, + 0x6002f85c, + 0x5866fbe4, + 0x6a1cb912, + 0xf904fb05, + 0xfbe9589e, + 0xb1125a66, + 0x50853a04, + 0x32043204, + 0xd1e92a20, + 0xfbe62601, + 0x3704ae68, + 0xf8c02f20, + 0xd1dea01c, + 0xfea84672, + 0xe8bd0732, + 0xb5fb47f0, + 0x0714fe88, + 0x46184601, + 0xf7ffb40e, + 0x0fc4ff9d, + 0x4321bc07, + 0x0001b111, + 0xff61f7ff, + 0x0734fea8, + 0xe92dbdfb, + 0xfe1841f7, + 0x2524873f, + 0xf1039801, + 0xf7ff0184, + 0x2700ff37, + 0x462124ff, + 0xf7ff1958, + 0xb907ff42, + 0x4606b188, + 0x98029901, + 0xf7ff460a, + 0xb12effa9, + 0x99029a00, + 0xf7ff9801, + 0xe003ffa3, + 0x99029801, + 0xff1ef7ff, + 0x3c012701, + 0x9800d5e5, + 0xf7ff9901, + 0x3520ff17, + 0xd1d72d64, + 0x873ffe08, + 0x81f7e8bd, + 0x273bfe14, + 0xf7ffb504, + 0x0fc0ff5d, + 0xfe14e004, + 0xb504273b, + 0xff56f7ff, + 0xbfb8b170, + 0x18494240, + 0x010ff171, + 0xfe14e00a, + 0xb504273b, + 0xff4af7ff, + 0x3001b910, + 0xe0013907, + 0x21002000, + 0xf9f8f7ff, + 0xfe04bc0c, + 0x4718273b, + 0x373ffe17, + 0xf7ffb51b, + 0x0004ffd7, + 0x9800d50c, + 0xf7ff9901, + 0x9800ff45, + 0xf7ff9901, + 0x2800ffd4, + 0xec44d502, + 0xe0010710, + 0x10c3f04f, + 0xfe07bc1e, + 0xbd00373f, + 0x6803b510, + 0x6003189b, + 0x4252188c, + 0xf0005ca0, + 0xd1fbf815, + 0x0733fea6, + 0xb510bd10, + 0x189b6803, + 0x000c6003, + 0xfe860892, + 0xd0040717, + 0xf000cc01, + 0x3a01f817, + 0xfea6d1fa, + 0xbd100737, + 0x0712fe86, + 0x68194b4a, + 0xd3fc0889, + 0x32017118, + 0x0732fea6, + 0xfe864770, + 0x680b0718, + 0x600b3304, + 0x0738fea6, + 0xfe864b42, + 0x68190716, + 0xd3fc0889, + 0xfea66058, + 0x47700736, + 0x3732ee19, + 0x000cb538, + 0x20806805, + 0xf7ff002a, + 0x2000ffdb, + 0x0e9b0693, + 0xd1f82b38, + 0xba000f68, + 0xffe4f7ff, + 0xba0000e8, + 0xffe1f7ff, + 0x08d2681a, + 0x2508d3fc, + 0xc9041959, + 0xba123d01, + 0xd1fac404, + 0xfe09bc08, + 0xbd303732, + 0xf7ffb533, + 0x215cffd9, + 0xf0009800, + 0x9901f80c, + 0xf7ff2220, + 0x9901ff97, + 0xf7ff9800, + 0xe8bdffcd, + 0x215c4033, + 0xb501e02b, + 0xf829f000, + 0xf0003804, + 0x1d01f807, + 0xf7ff2240, + 0xfea6ff85, + 0xbd010734, + 0x071afe86, + 0x2207f241, + 0x601a4b19, + 0x60032300, + 0x073afea6, + 0xb5014770, + 0x30042220, + 0xffa0f7fe, + 0x44102220, + 0xf7fe2100, + 0xe8bdffb8, + 0x21364001, + 0xf7ffb502, + 0xfea6ffd8, + 0xe8bd0735, + 0xfe864002, + 0x3004071c, + 0x5cc2233f, + 0x54c2404a, + 0xd5fa3b01, + 0x073cfea6, + 0xfe874770, + 0x2308071e, + 0xc904301c, + 0xf840ba12, + 0x3b012904, + 0xfea7d1f9, + 0x4770073e, + 0x400f8000, + 0xfe15b507, + 0x93013733, + 0xfdd2f7ff, + 0x41982249, + 0x49986081, + 0x48244849, + 0x0948235a, + 0x49352499, + 0x28224aa2, + 0x49a32249, + 0xffff2533, + 0xfe059b01, + 0xb0033733, + 0xfb04f85d, + 0xb089b5f0, + 0x0014000d, + 0xfe189000, + 0x92032738, + 0x99002200, + 0xdb0a4291, + 0x6820494b, + 0xd1064288, + 0x4a4a6861, + 0x68e1404a, + 0x42511a52, + 0x4948414a, + 0x6e484e48, + 0x6e496837, + 0x43386836, + 0x26014331, + 0x40304031, + 0xf8e2f7ff, + 0x00062100, + 0xd0232a00, + 0x483d6822, + 0x60219201, + 0x2770ec40, + 0x0f222704, + 0x2770ec47, + 0xec416822, + 0x68e22770, + 0xd0004282, + 0x2b00e033, + 0xe030d100, + 0x001c68a1, + 0x4a374836, + 0xc0a0cca0, + 0xd1102902, + 0x20a5f04f, + 0x2310f240, + 0x9b0050d0, + 0x3730ee60, + 0x0738eea0, + 0x70194b30, + 0xfe089b03, + 0xb0093738, + 0x2904bdf0, + 0x681bd102, + 0xe7ee6513, + 0xd1ec2903, + 0xdbea2e00, + 0xf7ff2036, + 0x2800f85c, + 0xf04fdbe5, + 0xf24024a5, + 0x50d4230c, + 0x6730ee60, + 0x0730ee60, + 0x2e00e7db, + 0xe031da00, + 0x4b202201, + 0x601a0028, + 0x2200a904, + 0xf867f7ff, + 0xec472704, + 0x23000770, + 0x9b00606b, + 0x3730ee60, + 0x4a17230d, + 0xeea07013, + 0xee600738, + 0x9b016730, + 0x686168e2, + 0x404b425b, + 0x3770ec42, + 0xec4368e3, + 0xfe882770, + 0x68a10710, + 0xf00368e0, + 0x2201fc9f, + 0x42520028, + 0xf7ffa904, + 0x43c0f842, + 0x0770ec47, + 0x606b2305, + 0xe7a42100, + 0xb007c0d3, + 0x4ff83f2d, + 0x401200fc, + 0x401000a8, + 0x400e0340, + 0x400e0000, + 0x400e0359, + 0x400e0800, + 0xbe00be00, + 0xbe00be00, + 0xbe00be00, + 0x2048b50f, + 0xfd32f7fd, + 0x41c8bc02, + 0xbe00bd0e, + 0x6850a201, + 0x88526891, + 0x04f54710, + 0x400e0360, + 0x400e033c, + 0x400e0000, + 0x7ec93663, + 0x35df7f3f, + 0x365d0381, + 0x0b850553, + 0x04096e01, + 0x011f0000, + 0x00000008, + 0x48010000, + 0x00000429, + 0x0008011f, + 0x00000001, + 0xdb134801, + 0x4b81478f, + 0x025d0e12, + 0xbe00000a, + 0x0000ad5b, + 0x0000366d, + 0x0000c78e, + 0x000007f0, + 0x0000f800, + 0x001fffff, + 0xfffffc2f, + 0xfffffffe, + 0xffffffff, + 0xffffffff, + 0xffffffff, + 0xffffffff, + 0xffffffff, + 0xffffffff, + 0xd2253531, + 0x77b5d811, + 0xc004a686, + 0x74e142d5, + 0x037f6ff7, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x74369e5d, + 0x99b40d00, + 0xa2a6a014, + 0x30562e37, + 0x00000049, + 0x00000000, + 0x00000000, + 0x00000000, + 0x000e90a1, + 0x000007a2, + 0x00000001, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x000003d1, + 0x00000001, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x0000471c, + 0x0000488c, + 0x487e2097, + 0xd7362e5a, + 0x29bc66db, + 0x231e2953, + 0x33fd129c, + 0x979f48c0, + 0xe9089f48, + 0x9981e643, + 0xd3dbabe2, + 0xb15ea6d2, + 0x1f1dc64d, + 0x8dfc5d5d, + 0xac19c136, + 0x70b6b59a, + 0xd4a582d6, + 0xcf3f851f, + 0x1219ca1c, + 0xa381c3d2, + 0x8ec6ce34, + 0xd8c36c4d, + 0xf418ba53, + 0x537053ec, + 0xbbcefcae, + 0x30a198de, + 0xc25ff948, + 0x446a2ad0, + 0xa3637755, + 0xf671d727, + 0xc2afcce5, + 0xa5495a07, + 0xbd3ab7c6, + 0xc198d9af, + 0x632ea0d8, + 0xcda8d7ef, + 0x5df148db, + 0x15ef5633, + 0xc7c96e54, + 0xec431492, + 0xc201767e, + 0x7bce0ef2, + 0x1315a22f, + 0xc374bb2a, + 0x32e0baa9, + 0xc7b977cc, + 0xb7efec04, + 0xbba21827, + 0x1e4de5ea, + 0x3fb97a19, + 0xd0364141, + 0xbfd25e8c, + 0xaf48a03b, + 0xbaaedce6, + 0xfffffffe, + 0xffffffff, + 0xffffffff, + 0xffffffff, + 0x5588b13f, + 0x29a47373, + 0x265d461c, + 0xefdb533f, + 0xf222f8fa, + 0x33333332, + 0x33333333, + 0x33333333, + 0x33333333, + 0x00000005, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000000, + 0x67d7d140, + 0x896cf214, + 0x0e7cf878, + 0x741496c2, + 0x5bcd07c6, + 0xe697f5e4, + 0x81c69bc5, + 0x9d671cd5, + 0x2fc9bebf, + 0x402da173, + 0x50b75fc4, + 0x45512319, + 0x00000001, + 0x00000000, + 0x00000000, + 0x00000000, + 0x03001000, + 0x0b021000, + 0xbb009154, + 0xeb0492a8, + 0xbaa2f001, + 0xf0032307, + 0x2300ba5b, + 0x4770bf60, + 0x1840b530, + 0x5c434249, + 0x0a1c3201, + 0xd10541ad, + 0x3101b25d, + 0x41aa5c44, + 0x5d631b14, + 0x35015553, + 0x3101d1fb, + 0xbd30d1ef, + 0x00006189, + 0xe7e22304, + 0xe7e02306, + 0x0f0b1882, + 0x2b403337, + 0x3b07d800, + 0x30017003, + 0x42900109, + 0x4770d1f5, + 0x78004806, + 0xb5384770, + 0x4d042305, + 0xbc10702b, + 0xffcbf7ff, + 0x2100b108, + 0xbd307029, + 0x50100c4f, + 0xbf602302, + 0x6945b570, + 0xb3150004, + 0x702b2300, + 0xfe1cf001, + 0xb9e378eb, + 0xb12e78a6, + 0x33090023, + 0x7fd90020, + 0xfdc8f001, + 0x22000023, + 0x701a3329, + 0xb15b786b, + 0x7963706a, + 0x3b013201, + 0x79a37163, + 0x78200031, + 0xf000405a, + 0xe002fbb9, + 0xf0000020, + 0xbd70f886, + 0xbf602301, + 0x0200f244, + 0x601a4b01, + 0x46c04770, + 0xe000e100, + 0x46c02102, + 0x7a03b570, + 0x000d0004, + 0x7800b99b, + 0xb91878a1, + 0x33024a0a, + 0x66931a5b, + 0xf8baf000, + 0x0300f640, + 0x43136802, + 0x69e36003, + 0xb12b7225, + 0x47980020, + 0x428be002, + 0x7201d200, + 0x46c0bd70, + 0x50112000, + 0xe0012100, + 0x210146c0, + 0x2500b570, + 0x6145000e, + 0xf0000004, + 0xb106f8c7, + 0x00237125, + 0x701d3329, + 0xb1237a23, + 0x722569e3, + 0x0020b10b, + 0x4b064798, + 0xb13b781b, + 0xb1296921, + 0xb91b6963, + 0x684a0020, + 0xf82df000, + 0x46c0bd70, + 0x501005c8, + 0xe0014800, + 0x50100a3c, + 0xb9317a01, + 0x69436901, + 0xd0024299, + 0xf000684a, + 0x4770b81c, + 0x49024801, + 0xe00b2200, + 0x50100970, + 0x501005a0, + 0x49024801, + 0xe0032200, + 0x5010099c, + 0x501005b4, + 0xb1337883, + 0xf000b507, + 0x2300f867, + 0xbc0f7103, + 0x4613469e, + 0xb5032201, + 0xfd99f001, + 0x4696bc07, + 0x22006141, + 0x22016182, + 0xb570708a, + 0x69630004, + 0x68dbb19b, + 0x7965b18b, + 0x7a23b17d, + 0x78a3b96b, + 0x0020b133, + 0xfd5ff001, + 0x42ab7963, + 0xe004d1ef, + 0x00202140, + 0xfd16f001, + 0xbd70e7e9, + 0x4c05b570, + 0x35144625, + 0xcc014606, + 0x47b0b100, + 0xd1fa42ac, + 0x0000bd70, + 0x50100a28, + 0xb5f70013, + 0x0c0ff240, + 0x1700f240, + 0x4e0f3358, + 0x93016001, + 0x18c9780b, + 0x2b05784b, + 0x4664d1fa, + 0x60d17888, + 0xb2404004, + 0x006343c5, + 0x195b0fed, + 0x0fc0061b, + 0x04004323, + 0x433b4303, + 0x00a46013, + 0x51a29b01, + 0x4293322c, + 0xbdf7d1e4, + 0x50100a28, + 0x00c04b02, + 0xb1014418, + 0x47703804, + 0x50100084, + 0x0006b5f8, + 0x360a0007, + 0x00047ff1, + 0xb9a93724, + 0x18c27883, + 0xb9337995, + 0xf7ff7800, + 0x006bffe9, + 0x880118c0, + 0x0023b2c9, + 0x77d93309, + 0x4a048c23, + 0x189b01ad, + 0x2301195d, + 0x77f36265, + 0xbdf80038, + 0x50100000, + 0x2601b5f8, + 0x788178c3, + 0x78000004, + 0xf7ff409e, + 0x4b14ffcd, + 0x4d146802, + 0x033f1cef, + 0xd014421a, + 0xb1137863, + 0x2b017963, + 0x2301d103, + 0x40537922, + 0x23807123, + 0x3502032a, + 0x662e032d, + 0x6e51025b, + 0xd102420e, + 0x2b003b01, + 0xf241d1f9, + 0x60030300, + 0x667e663e, + 0x33017863, + 0x23007163, + 0x330180e3, + 0xbdf87263, + 0x04000400, + 0x00050110, + 0x43582334, + 0xb5104b06, + 0x000418c0, + 0x3430608a, + 0x78232230, + 0xfba8f7fe, + 0x70232301, + 0xbd10bf40, + 0x50100a9c, + 0x6a46b5f8, + 0x78b30004, + 0xb1a30030, + 0xff8ef7ff, + 0x69e36961, + 0x0005000f, + 0x3b0169a0, + 0x22403740, + 0x4287400b, + 0x1a42d900, + 0x6a21712a, + 0x18c96828, + 0xfb88f7fe, + 0xf7ffe002, + 0x0005ff79, + 0x6963792a, + 0x6163189b, + 0x881b6aa3, + 0x22004798, + 0x569a4b09, + 0xdb0a2a00, + 0x2301211f, + 0x408b4011, + 0x060921d0, + 0xdc012a1f, + 0xe000620b, + 0x0030624b, + 0xfe58f7ff, + 0x46c0bdf8, + 0x50100480, + 0x2200b5f7, + 0x569a4b27, + 0xdb0a2a00, + 0x2301211f, + 0x408b4011, + 0x060921d0, + 0xdc012a1f, + 0xe000618b, + 0x694561cb, + 0x696e69ec, + 0x001f1e63, + 0x78839300, + 0x93004037, + 0xb11fb153, + 0xf7ff0028, + 0xe02fffa5, + 0x193269ab, + 0xd923429a, + 0xe0211b9c, + 0xff32f7ff, + 0x364069ab, + 0x429e9001, + 0x1e66d306, + 0x401e1e62, + 0xd108421a, + 0xe0060026, + 0x9e00003b, + 0x42a33340, + 0x42764176, + 0xb91f4026, + 0x6a280021, + 0xfb41f7fe, + 0x6a289b01, + 0x6819791a, + 0xf7fe19c0, + 0x0034fb1f, + 0xd0d12c00, + 0x00206aab, + 0x4798885b, + 0xd0cb2800, + 0x46c0bdf7, + 0x50100480, + 0x4e16b5f0, + 0x8833b085, + 0x000f0004, + 0x92012000, + 0x0005b30b, + 0x197a8873, + 0x220140d3, + 0xd0154213, + 0x88322380, + 0x19d2029b, + 0xb2921952, + 0xab02431a, + 0x21021d98, + 0xfdc6f7ff, + 0x42580003, + 0xb2c04158, + 0xab02b923, + 0x702388db, + 0x70630a1b, + 0x35019b01, + 0x42ab3402, + 0xb005d1de, + 0x46c0bdf0, + 0x50100c28, + 0xf245b510, + 0x4c05220d, + 0x65204905, + 0xf7ff2000, + 0x2001ff25, + 0x7020345b, + 0x46c0bd10, + 0x50100880, + 0x501008ac, + 0x0007b5f7, + 0xfec0f7ff, + 0x90016804, + 0x00202140, + 0xf7fe697e, + 0x4b1dfae0, + 0x781b2203, + 0x9300001d, + 0x3d8068f3, + 0x429a1ad6, + 0xf646d113, + 0x00220074, + 0xf7ff210d, + 0xf646fd6d, + 0x239c01ca, + 0x4b137423, + 0x781b9800, + 0x220a3894, + 0x18207223, + 0xfaa8f7fe, + 0x01b6e002, + 0x25001b76, + 0x23802240, + 0x1b9b1b52, + 0xd9004293, + 0xf6460013, + 0x220000d4, + 0x429a1964, + 0x18b1d205, + 0x5c410849, + 0x320254a1, + 0x18ede7f7, + 0x00389b01, + 0xf7ff711d, + 0xbdf7fd79, + 0x50100c4d, + 0x4b8cb5f0, + 0x68120015, + 0x9001b085, + 0xd000429a, + 0x4b89e0c1, + 0x429a686a, + 0xe0bcd000, + 0x12fcf240, + 0x58aa4b86, + 0xd000429a, + 0xf242e0b5, + 0x68ab0201, + 0x3a014013, + 0xd0004293, + 0xf240e0ad, + 0x692a1300, + 0xd000429a, + 0x68e8e0a7, + 0xf7fc69ef, + 0x2600fd01, + 0x68e8b120, + 0xf7fc30ff, + 0x0006fcfb, + 0x4c7868eb, + 0x4b789300, + 0xb11b781b, + 0x22102300, + 0xe08f61e3, + 0x69ab69e2, + 0xd102429a, + 0x429f6963, + 0xb18ed04b, + 0x18fb4b71, + 0xd8442b03, + 0x486d2164, + 0xfa5bf7fe, + 0x74a32301, + 0x61673b02, + 0x0160f640, + 0x486b2780, + 0xe02662e3, + 0xa8020039, + 0xfce4f7ff, + 0xdb302800, + 0x48632164, + 0xfa47f7fe, + 0x48659b02, + 0x09d204da, + 0x019b62a2, + 0x0cdb4a63, + 0x031b189b, + 0x9b0362e3, + 0x4100f240, + 0x0fdb049b, + 0xf24274e3, + 0x61670300, + 0x60a074a6, + 0xf7fe60e3, + 0x2180fa2e, + 0x485a2790, + 0x60610289, + 0x602008c9, + 0xfa25f7fe, + 0x686269ab, + 0xd8444293, + 0x230061e3, + 0x23a061a3, + 0x6263055b, + 0x2201e002, + 0x2780e03c, + 0x7ca22301, + 0x429a4033, + 0x22f0d135, + 0x46940612, + 0x4a4c9b00, + 0x93004463, + 0x98002300, + 0x415b4282, + 0xb3434333, + 0x69ab696a, + 0xd224429a, + 0x48462130, + 0xf9fdf7fe, + 0x696a9b01, + 0x63636aa1, + 0x68eb6223, + 0x185b9800, + 0x6322493f, + 0x42886423, + 0xb2d9d801, + 0x0021b989, + 0x700f3160, + 0x21fdf245, + 0xf24063e1, + 0x65a11100, + 0x20010021, + 0x70083162, + 0x35206ae1, + 0x428b6565, + 0x2220d305, + 0x43138a23, + 0x20008223, + 0x211fe049, + 0x40884011, + 0x68210952, + 0x18890092, + 0x4202680a, + 0x2280d1f3, + 0x05926a65, + 0xd20842ab, + 0x41b64293, + 0x46b44276, + 0x41b64295, + 0x45b44276, + 0x4295d003, + 0x4293d202, + 0x6263d300, + 0xb9da7ca2, + 0x03da2501, + 0x40950ed2, + 0x061222f0, + 0x68a6189a, + 0x00920c52, + 0x681618b2, + 0xd10d422e, + 0x031b0b1b, + 0xf24164a3, + 0x64630300, + 0x432b6813, + 0x23206013, + 0x433b0022, + 0x70133260, + 0xf24569a3, + 0x330122fd, + 0x680b61a3, + 0x43033463, + 0x2001600b, + 0xf7ff490e, + 0x2001fdbf, + 0xb0057020, + 0x46c0bdf0, + 0x0a324655, + 0x9e5d5157, + 0x0ab16f30, + 0x501008dc, + 0x50100b01, + 0x1b7400a9, + 0x50100b1c, + 0x20081c00, + 0x00010001, + 0x13ffc000, + 0x01ffff01, + 0x50100910, + 0x68934a02, + 0x60933b40, + 0x46c04770, + 0x501005d8, + 0x4b09b510, + 0x78926a5a, + 0xf245b112, + 0xe00154f1, + 0x64d1f644, + 0x6ad94a05, + 0x30016a90, + 0x1c4a6290, + 0x4a0362da, + 0xbd1047a0, + 0x5010082c, + 0x501005d8, + 0x5010062c, + 0xb120b570, + 0x00804b13, + 0x680418c0, + 0x4c12e002, + 0x3c2cb101, + 0x69657963, + 0x71633301, + 0x0020b91d, + 0xfc44f7ff, + 0x782be014, + 0x2301b113, + 0xe00f706b, + 0x71a278a3, + 0x68ebb10b, + 0x0020b113, + 0xfa1ff001, + 0xb92b78eb, + 0x0020692b, + 0x612b3b01, + 0xfa20f001, + 0x46c0bd70, + 0x50100a28, + 0x5010099c, + 0xb5700003, + 0x60604c09, + 0xb1732000, + 0x6a684d08, + 0xfc1ef7ff, + 0x6a6b4807, + 0xd1014283, + 0x00183b2c, + 0xfc16f7ff, + 0x20012300, + 0xbd707263, + 0x50100870, + 0x50100880, + 0x50100a68, + 0x4d09b570, + 0x6d6b6a82, + 0x429a0004, + 0x6840d10a, + 0xffdaf7ff, + 0x6babb918, + 0x189b6a62, + 0x480263ab, + 0xfd36f7ff, + 0x46c0bd70, + 0x50100880, + 0x7805b570, + 0x00eb4a0d, + 0x2200189b, + 0x605a2140, + 0x7844601a, + 0x40a14e0a, + 0x18518872, + 0x80718402, + 0x2174b155, + 0x3920b904, + 0x18520649, + 0x3b807881, + 0x601a4351, + 0x605a404a, + 0x46c0bd70, + 0x50100080, + 0x501005c8, + 0x0003b510, + 0x49022201, + 0xf7ff4802, + 0xbd10fc3e, + 0x50100618, + 0x501009c8, + 0xb5102200, + 0x210d4c07, + 0x48071da3, + 0xf00177da, + 0x220df99c, + 0xf7fe0021, + 0xf246f899, + 0xf7ff50f1, + 0xbd10ffe3, + 0x501005d8, + 0x501009c8, + 0x490bb510, + 0x7fda1d4b, + 0xd1062a01, + 0x1300f240, + 0x848b4808, + 0xfba6f7ff, + 0x2a02e008, + 0x2200d104, + 0x77da4805, + 0xfb9ef7ff, + 0xffd4f7ff, + 0x46c0bd10, + 0x501005d8, + 0x501009c8, + 0x501009f4, + 0x4c28b570, + 0x6a226801, + 0x68430005, + 0xd1324291, + 0x69a2bb6b, + 0x429a69e3, + 0x7ce1d12d, + 0x7ca2bb59, + 0x2380b16a, + 0x059b6a62, + 0x4149429a, + 0x42494b1e, + 0x21a0400b, + 0x185b0549, + 0x1a9b2003, + 0x2180e004, + 0x6aa22004, + 0x18520549, + 0x6966491a, + 0xd101428e, + 0xe0032110, + 0x428e3101, + 0x2120d101, + 0xf2404308, + 0xf7ff11f4, + 0xb130fb20, + 0x8a222380, + 0x2340e001, + 0x43138a22, + 0x4b0d8223, + 0x6a9a6829, + 0xd1104291, + 0xb15a686a, + 0x731a2201, + 0x73da3206, + 0x765a3219, + 0x769a3a1e, + 0x77da3305, + 0xff94f7ff, + 0xf7ff4804, + 0xbd70fc7f, + 0x501008dc, + 0x0c082000, + 0x501005d8, + 0x5010082c, + 0xe48bff59, + 0x4b082100, + 0x1d5ab510, + 0x688277d1, + 0x7b01b132, + 0x297f2202, + 0x3a01d900, + 0x77da3305, + 0xff76f7ff, + 0x46c0bd10, + 0x501005d8, + 0xb5702300, + 0x1d654c11, + 0x622377eb, + 0x33027b05, + 0xd9002d7f, + 0x429a3b01, + 0x1d62d004, + 0x230277d3, + 0xe00e7323, + 0x428b6883, + 0x1d60d005, + 0x428b77c2, + 0x2202d201, + 0x428b7322, + 0x000bd900, + 0x62232001, + 0xf7ffb913, + 0x2000ff4f, + 0x46c0bd70, + 0x501005d8, + 0x0004b570, + 0x3410000e, + 0x0a09cc22, + 0x4319062b, + 0xba09ba2b, + 0x4a1db29b, + 0xd1002e01, + 0x4c1d4a1c, + 0x62e16262, + 0x02590032, + 0xffc2f7ff, + 0x4b1ab368, + 0x2d3f6a1d, + 0x6a9ad927, + 0x32010021, + 0xf246629a, + 0x62a2722c, + 0x233f4a15, + 0xf2406222, + 0x61e22200, + 0x439d2200, + 0x61a56162, + 0xf2453202, + 0xf00123c1, + 0x68e3f8d8, + 0x09ad353f, + 0x60e3195b, + 0x195b6923, + 0x2e016123, + 0x0021d104, + 0xf7ff4805, + 0xe004fb33, + 0x645c4b03, + 0xf7ffe001, + 0xbd70ff05, + 0x501009f4, + 0x501009c8, + 0x5010082c, + 0x501005d8, + 0x5010062c, + 0x7a03b510, + 0x4b03b92b, + 0x7fdb3306, + 0xf7ffb10b, + 0xbd10fedb, + 0x501005d8, + 0x0005b570, + 0xf7ff480c, + 0x68a9fb6d, + 0x00047903, + 0xd9004299, + 0x22010019, + 0xf7ff0028, + 0xb150ff6d, + 0x20c1f245, + 0x6a134a05, + 0x68917123, + 0x1acbb2db, + 0xf7ff6093, + 0xbd70feb1, + 0x501009c8, + 0x501005d8, + 0xf644b510, + 0x220123e1, + 0x48034902, + 0xfae9f7ff, + 0x46c0bd10, + 0x501005a0, + 0x50100970, + 0x785a4b02, + 0x601a4b02, + 0x46c04770, + 0x501005c8, + 0x50110000, + 0xb085b5f0, + 0x0007ae03, + 0x0030000c, + 0x22010011, + 0xf7ff9301, + 0xb3a8fc29, + 0x72fdf64f, + 0x3b018833, + 0x4293b29b, + 0x2500d82e, + 0x57757833, + 0xd8022c7f, + 0xda042d00, + 0x2d00e026, + 0x227fdb01, + 0x227f4014, + 0x419242a2, + 0x42520fed, + 0x40ab4094, + 0xb2db1c20, + 0x429cb2e4, + 0x1c18d900, + 0x78734a0f, + 0xb2c48812, + 0x2280189b, + 0x0292b29b, + 0x2301431a, + 0x00381c61, + 0xf7ff4399, + 0xb928f9db, + 0x2380b115, + 0x431c0864, + 0xe0060020, + 0x9b012000, + 0xb1135c1b, + 0x3001543b, + 0xb005e7f9, + 0x46c0bdf0, + 0x50100c28, + 0x000db5f7, + 0xf2400010, + 0x00142100, + 0xff0bf7fd, + 0x0023b9ed, + 0x211f220e, + 0x33c30020, + 0x701a33ff, + 0x711a3a0d, + 0x811a3a02, + 0x729a3204, + 0x30b94a4d, + 0x68526893, + 0x30ff434b, + 0xa901189b, + 0x93012204, + 0xfed6f7fd, + 0x13fef240, + 0x52e24a47, + 0x2d01e088, + 0x211fd11b, + 0x00204a43, + 0x68526893, + 0xf646434b, + 0x189b117a, + 0x93012240, + 0xfec2f7fd, + 0xa9010020, + 0x30272204, + 0xfebcf7fd, + 0x7398f246, + 0x22080020, + 0x302b210b, + 0xffebf000, + 0xf240e7dc, + 0x1eab1201, + 0xd80a4293, + 0xd9012b80, + 0xe7fb3b81, + 0xd15f2b00, + 0x60233b08, + 0x60633307, + 0x1f6ee05a, + 0x2e1f3eff, + 0x2e00d82e, + 0xf246d154, + 0x226871c0, + 0xf0000020, + 0xf646ffde, + 0x2226012e, + 0x00200007, + 0xffd7f000, + 0x2100f240, + 0x00200005, + 0xfea5f7fd, + 0x1047f646, + 0x212e0022, + 0xf93cf7ff, + 0x7398f246, + 0x210b2208, + 0xf0000020, + 0x0022ffb4, + 0x324e4b1c, + 0x82e381e3, + 0x85e361e6, + 0x63e786e3, + 0x81138013, + 0xe02765e5, + 0x3dff3d25, + 0xd123076b, + 0xb9cd08ed, + 0x71c0f246, + 0x00202268, + 0xffabf000, + 0x42ac1825, + 0x7823d018, + 0xd10b2b01, + 0x22064b0e, + 0x00206819, + 0xf92af7ff, + 0x53f0f647, + 0x68192206, + 0xf924f7ff, + 0xe7ec3401, + 0xd1052d01, + 0x012ef646, + 0x00202226, + 0xff8ff000, + 0xbdfe2000, + 0x50100480, + 0xffffaa55, + 0xffff8299, + 0x40000014, + 0x0007b5f8, + 0xfa2ef7ff, + 0x68047903, + 0xd0002b1f, + 0x4b5fe0b1, + 0x429a6822, + 0xe0acd000, + 0x2b007b63, + 0xe0a8d000, + 0x337f7b22, + 0x401e0016, + 0xd000421a, + 0x7ba3e0a1, + 0x2b0f3b01, + 0xe09cd900, + 0x4b564d55, + 0x6863602b, + 0x68a3606b, + 0x7be360ab, + 0xd10c2b03, + 0x48522112, + 0xf000732e, + 0x2212ff10, + 0xf7fd4950, + 0x73eefe0d, + 0x76ae766e, + 0x73eee065, + 0x76ae766e, + 0x2b23732e, + 0xd832d04d, + 0xd03e2b1a, + 0x2b00d82a, + 0x2b12d05d, + 0xe06cd000, + 0x769ff246, + 0x48432124, + 0xfef3f000, + 0xf6460005, + 0x002a10ce, + 0xf7ff210b, + 0x2380f8a5, + 0x706b0028, + 0x00332209, + 0x30082108, + 0xff1bf000, + 0x7398f246, + 0x220a0028, + 0x30102110, + 0xff13f000, + 0x220b0028, + 0x1d332104, + 0xf0003020, + 0xe030ff0c, + 0xd03b2b1b, + 0xd0482b1e, + 0x2b2ae041, + 0xd805d012, + 0xd01c2b25, + 0x2b282101, + 0xe038d00d, + 0xd03c2b2f, + 0xd03a2b35, + 0x2104e033, + 0xf0004827, + 0x2303febc, + 0xe0166003, + 0x00202102, + 0xfddcf7ff, + 0x210ce039, + 0x15e1f646, + 0xf0004820, + 0x220cfeae, + 0x2108e006, + 0x15d9f646, + 0xf000481c, + 0x2208fea6, + 0xf7fd0029, + 0x0020fda3, + 0xfe22f7ff, + 0x1debe023, + 0xb1a37fdb, + 0x732b2301, + 0x73eb18db, + 0xe00d3338, + 0x7ce32203, + 0x2b024013, + 0x3507d109, + 0x77eb3b01, + 0x2301e005, + 0x3304732b, + 0x331b73eb, + 0x0020766b, + 0xfd6ef7ff, + 0x2103e007, + 0xf7ff4808, + 0x2103f8a3, + 0xf7ff4808, + 0x0038f89f, + 0xf866f7ff, + 0x46c0bdf8, + 0x43425355, + 0x501005d8, + 0x53425355, + 0x501009c8, + 0x501005e5, + 0x501009f4, + 0x480db510, + 0xff02f000, + 0x7a5b4b0c, + 0xf7ffb10b, + 0x2110f82f, + 0xf7fd4809, + 0x4b09fd78, + 0x00192200, + 0x700a3164, + 0x31650019, + 0x0019700a, + 0x31303331, + 0x701a700a, + 0x46c0bd10, + 0x50100a3c, + 0x50100870, + 0x50100a9c, + 0xb5104b0e, + 0x4c0e781a, + 0x3204b94a, + 0x6322490d, + 0x63d14a0d, + 0x41cdf245, + 0x220161d1, + 0x2128701a, + 0xf7fd4807, + 0x2370fd50, + 0x73632200, + 0x75233b66, + 0x48054b06, + 0xf00061da, + 0xbd10fec7, + 0x50100c4e, + 0x501005d8, + 0x50100604, + 0x501009c8, + 0x501008dc, + 0x0004b510, + 0x70184b06, + 0x206ff644, + 0xf8cef7ff, + 0xffe4f7fe, + 0xf7ffb11c, + 0xf7ffffcb, + 0xbd10ffa7, + 0x501005c8, + 0x2000b510, + 0xffeaf7ff, + 0x4b032201, + 0x601a4252, + 0x651a659a, + 0x46c0bd10, + 0x50113000, + 0x2503b5f0, + 0xb0874cba, + 0x40357866, + 0xd1002d03, + 0x23002500, + 0x2b0056e3, + 0x211fdb24, + 0x40192201, + 0x21d0408a, + 0x2b1f0609, + 0x638adc01, + 0x63cae000, + 0x00984ab0, + 0x22401881, + 0x407a680f, + 0x403a27c0, + 0x19c04fad, + 0x22056002, + 0xd50106f6, + 0x0205f241, + 0x00db48aa, + 0x605a181b, + 0x0300f243, + 0xf24018c9, + 0x600b1300, + 0x220868a1, + 0xf7fe48a5, + 0x2208ff9b, + 0xf7fe6861, + 0xf646ff97, + 0x23a60481, + 0x70134aa1, + 0x4ea1b1ed, + 0x00212220, + 0xf7fd0030, + 0x2700fcb9, + 0x70f72320, + 0x2d0170b3, + 0x0021d10d, + 0x337e4a99, + 0x489a7013, + 0x31202217, + 0xfcaaf7fd, + 0x003b0034, + 0x72f77135, + 0x2301e011, + 0x71330034, + 0x002172f7, + 0x4a944e93, + 0x31090030, + 0xf85ef7ff, + 0x1319f246, + 0x23026073, + 0xd111421d, + 0x21173b01, + 0x4f8e4359, + 0x31094e8e, + 0x0030003a, + 0xf7ff1861, + 0x2203f84d, + 0x605a4b8b, + 0xf246613b, + 0x607303c9, + 0x0354f646, + 0xf64646c0, + 0x2d0102b8, + 0x3304d100, + 0x210c4d85, + 0xa803606a, + 0x60ac2259, + 0xf7fe60eb, + 0xb978ff41, + 0x9a059903, + 0x9b040008, + 0x40034310, + 0x4313400a, + 0xd505025a, + 0x2102487c, + 0x80434a7c, + 0xff30f7fe, + 0x487b2380, + 0x6003025b, + 0xf2402380, + 0x045b1400, + 0x806c62c3, + 0xfb80f7ff, + 0x806c4876, + 0xfb7cf7ff, + 0x2039f245, + 0x1380f240, + 0x4d73806b, + 0xfffef7fe, + 0x00282121, + 0xfc5ff7fd, + 0x3cff2309, + 0x3303676b, + 0x642c67ab, + 0xff2ef7ff, + 0x4a6d4b6c, + 0x4b6d64eb, + 0xf7fe601a, + 0x2301ff4d, + 0x93004063, + 0xf3bfb672, + 0x25348f5f, + 0x435d9b00, + 0x18ed4b67, + 0x3630002e, + 0xb2d17832, + 0x4c65b17a, + 0x00292230, + 0xf7fd0020, + 0x2300fc1f, + 0xb6627033, + 0x782b3531, + 0x2b002701, + 0xe157d000, + 0xb662e006, + 0xd0002c01, + 0x9100e159, + 0xe7d89c00, + 0xfeeaf7fe, + 0xd0002800, + 0x0023e149, + 0x781d332c, + 0x06eb1eee, + 0x2300d505, + 0xfeb3f7fe, + 0xd8592e01, + 0x2e01e13e, + 0xe13bd800, + 0xd10f2d01, + 0x332d0023, + 0x000a7819, + 0x419a1e53, + 0xb2d24b4a, + 0x701a3365, + 0xd0002902, + 0x4b49e11d, + 0xe11a77dd, + 0xd1412d05, + 0x6a256a67, + 0x696308bf, + 0x1d2e3f01, + 0x00b90030, + 0xf7fd9301, + 0x7c23fbf6, + 0xd1062b01, + 0x00390030, + 0x23099a01, + 0xfe85f7fe, + 0x2b02e007, + 0x0030d108, + 0x9a010039, + 0xf7fe2308, + 0x6028fe7c, + 0xe01c2300, + 0xd10e2b03, + 0x602b0028, + 0x30089901, + 0xfe70f7fe, + 0xda021e03, + 0x32110002, + 0x17dad10f, + 0x606b4313, + 0x270be7ec, + 0xd0002b04, + 0x0032e0f2, + 0x4b2c602b, + 0xc283cb83, + 0x6013681b, + 0x6828e7e0, + 0xdb002800, + 0xe0dfe0f1, + 0x2b011fab, + 0x2202d859, + 0x68e67d23, + 0x40d61ad2, + 0x18b68a22, + 0x2f000c37, + 0x6a20d177, + 0x2d066a61, + 0xf7fdd13e, + 0x7d23fbac, + 0x6a616a20, + 0xd03d2b00, + 0x029b2380, + 0xe039431e, + 0x50100480, + 0x40038004, + 0x40039004, + 0x40028000, + 0x50100b08, + 0x50100c4d, + 0x50100c2d, + 0x50100c36, + 0x50100a20, + 0x501009c8, + 0x50100a3c, + 0x50100a94, + 0x5010085c, + 0x501005c8, + 0x50100c28, + 0x0002005c, + 0x50100970, + 0x5010099c, + 0x50110000, + 0x20010000, + 0x000113f0, + 0x50110090, + 0x50100a9c, + 0x50100940, + 0x501005df, + 0x501008ec, + 0x2380b113, + 0x431e029b, + 0x027f2780, + 0x4332003a, + 0xfe1af7fe, + 0xd0002800, + 0x235fe082, + 0x439a002a, + 0x0023b16a, + 0x781a332e, + 0x332f0023, + 0x4b467819, + 0x7819b121, + 0x42912706, + 0xe077d000, + 0x06ab701a, + 0x2d3fd402, + 0xe062d82a, + 0x05336966, + 0x2705b10b, + 0x6927e06c, + 0x0d18053b, + 0xd1f82b00, + 0x228023f0, + 0x18f3061b, + 0x42930492, + 0x2704d901, + 0x23f0e05e, + 0x061b19f7, + 0x429318fb, + 0x42b7d8f7, + 0x2800d90b, + 0x23f0d14e, + 0x18f0061b, + 0xf7fe2302, + 0xf241fdc0, + 0x18f60300, + 0x2800e7f1, + 0xe041d0d3, + 0xf7fb68e0, + 0xb26dfda3, + 0x68e0b160, + 0x18c06a63, + 0xf7fb3801, + 0xb128fd9b, + 0x6a2168e0, + 0x2d006a62, + 0xe024da22, + 0x2d0068e3, + 0xf647db08, + 0x428b6100, + 0x6a62d804, + 0x428b189b, + 0xe7c8d916, + 0x208026f0, + 0x19990636, + 0x42810480, + 0x6a62d8c1, + 0x1992189a, + 0xd8bc4282, + 0x2b00b2db, + 0x6a20d1ab, + 0xda0a2d00, + 0xf7fe2301, + 0xe00bfd86, + 0x68e16a62, + 0xf7fd6a20, + 0x2000facd, + 0xf240e006, + 0x23031200, + 0xfd79f7fe, + 0xd0f62800, + 0x13baf646, + 0x781f1a1b, + 0x2707e000, + 0xb6726067, + 0x68a34806, + 0xb6624798, + 0xbf20e6a6, + 0x93002301, + 0x0018e6a2, + 0x46c0e7ec, + 0x50100c2c, + 0x50100940, + 0xf646b510, + 0xf7fe0068, + 0x4b04fd5c, + 0x2b01789b, + 0xf000d101, + 0xf7fffb1d, + 0x46c0fd9f, + 0x50100480, + 0xb5102200, + 0x48074b06, + 0x7a1b725a, + 0xd9002b7f, + 0x4905382c, + 0x22b5f644, + 0xfe16f7fe, + 0x46c0bd10, + 0x50100870, + 0x50100a68, + 0x5010048c, + 0x6a824b06, + 0xb5106d5b, + 0xd105429a, + 0xf7ff6840, + 0xb908f977, + 0xffdef7ff, + 0x46c0bd10, + 0x50100880, + 0xb087b5f0, + 0xf7fe9005, + 0x7903fe65, + 0x2b206805, + 0xe0c2d000, + 0x682a4b67, + 0xd000429a, + 0x4e66e0bd, + 0x00342130, + 0xf7fd0030, + 0x4a64fa7c, + 0x68133c2c, + 0x3b014f63, + 0x62e36013, + 0x2000686b, + 0x7a2a6563, + 0x9201603b, + 0x2201723a, + 0x692a607a, + 0x92027278, + 0x63a26422, + 0x9b01696a, + 0x63e29203, + 0x7c290032, + 0x7011322d, + 0x401a227f, + 0x290c1e51, + 0xe094d900, + 0x1c14f646, + 0x43512103, + 0x91044662, + 0x7a699b04, + 0x42915cd2, + 0xe086d000, + 0x60782210, + 0x785b4463, + 0x42139300, + 0x18b6d00b, + 0x00320029, + 0xc9493110, + 0x6809c249, + 0x22106011, + 0x43939b00, + 0x9b009300, + 0x061a68ee, + 0x065ad514, + 0x2300d508, + 0x7d2963a3, + 0x33048a6a, + 0x3b02b101, + 0xe0084353, + 0x069b9b00, + 0xf240d504, + 0x429e1300, + 0xe004d909, + 0x93009b03, + 0x42b39b00, + 0x9b01d003, + 0xd1522b0a, + 0x9b04e005, + 0x33029a01, + 0x2a0a4463, + 0x4832d10e, + 0x69aa9b02, + 0x00184003, + 0x69eb9903, + 0xfcd1f7fe, + 0x2800230a, + 0xf7ffd142, + 0xe048ff4f, + 0x2b00781b, + 0xf240d039, + 0x44a40c58, + 0x70134662, + 0x22020023, + 0x701a335a, + 0x727b2301, + 0xf246b336, + 0xf6457030, + 0x492263a9, + 0x64e162a0, + 0xf2406221, + 0x61e11100, + 0x61a62100, + 0x00216161, + 0xfaf9f000, + 0x363f68e3, + 0x199b09b6, + 0x692360e3, + 0x6123199b, + 0x2b7f7a2b, + 0x4b17d803, + 0x619c6263, + 0x4661e019, + 0x39584815, + 0xf7fe6260, + 0xe012fd4d, + 0xf6450030, + 0x490b62d5, + 0xfdfaf7fe, + 0x2303e00b, + 0x2302e000, + 0x4c0d607b, + 0xf7fe0020, + 0x0020fcc7, + 0xf7fe382c, + 0x9805fcc3, + 0xfc8cf7fe, + 0xbdf0b007, + 0x431fd10b, + 0x501008ac, + 0x50100b04, + 0x50100870, + 0xfffffeff, + 0x501004a0, + 0x50100a3c, + 0x50100a68, + 0x780b2260, + 0xb5102000, + 0x2a40401a, + 0xb25bd11b, + 0x4283784a, + 0x2a42da10, + 0x88ccd115, + 0xd1122c10, + 0x48090021, + 0xfa77f000, + 0x49080022, + 0xf974f7fd, + 0xfa14f7ff, + 0xe0062001, + 0xd1042a41, + 0xfc02f7ff, + 0xfce2f7fe, + 0xbd10e7f6, + 0x50100970, + 0x50100870, + 0x780b2260, + 0xb5102000, + 0x2a20401a, + 0xb25bd12b, + 0x4283784a, + 0x2afeda10, + 0x884cd125, + 0x88cbbb1c, + 0x4811b30b, + 0xfd44f7fe, + 0x701c6803, + 0x71032301, + 0xf9ecf7ff, + 0xe0162001, + 0xd1142aff, + 0xb993884b, + 0xb98388cb, + 0x7a1a4b09, + 0xd1012a03, + 0x721a3a01, + 0x781a3334, + 0xd1012a03, + 0x701a3a01, + 0xfbecf7ff, + 0xfcaaf7fe, + 0xbd10e7e6, + 0x50100970, + 0x501009c8, + 0xb5f74ba8, + 0x03fb681f, + 0xe169d400, + 0x24014da6, + 0xf0000028, + 0x002bfabd, + 0x3330221f, + 0x701c4ea3, + 0x7833712c, + 0x42a2401a, + 0xe0bbd100, + 0xd1002a02, + 0x2a00e0e3, + 0xe0e7d000, + 0x00182160, + 0x90004008, + 0xd000420b, + 0xb25be09e, + 0xdb002b00, + 0x0028e080, + 0xfcf6f7fe, + 0x78739001, + 0x2b066805, + 0x2b08d007, + 0x2b00d06b, + 0xe0cfd000, + 0x1924802b, + 0x8872e068, + 0x29030a11, + 0xd804d035, + 0xd0102901, + 0xd01c2902, + 0x290fe0c2, + 0xe0bfd000, + 0x11edf646, + 0x00282221, + 0xf8e2f7fd, + 0x24214b86, + 0x776b781b, + 0x4b85e050, + 0x68592212, + 0xf7fd0028, + 0x0028f8d7, + 0x21002203, + 0xf7fe3008, + 0x2412fdbf, + 0xb2d2e042, + 0xd0002a00, + 0x4b7ce0a2, + 0x68990028, + 0x788b78cc, + 0x431c0224, + 0xf7fd0022, + 0x2201f8c1, + 0x1de82107, + 0xfdaaf7fe, + 0xb2d2e02e, + 0x4b74b93a, + 0x602b0022, + 0xf7fe1ca8, + 0x2404fda1, + 0x1e51e024, + 0x29029c00, + 0xf646d818, + 0x0089035c, + 0x320358cb, + 0x1ca8219e, + 0xf95ef7ff, + 0x287f0044, + 0xb2e4d901, + 0x0023e00a, + 0xb13b2100, + 0x18aa085a, + 0x555a7852, + 0x7051195a, + 0xe7f63b02, + 0x34022303, + 0x706b702c, + 0x4b5ee002, + 0x702b781b, + 0xb2d388f2, + 0xd90042a2, + 0x9a01b2e3, + 0xe0517113, + 0x2b057873, + 0x2b09d002, + 0xe055d00d, + 0x1e5a8873, + 0xd8512a7e, + 0x00284a53, + 0x49547053, + 0x5241f245, + 0xfbfaf7fe, + 0x8870e0b0, + 0xd8452801, + 0xf7ffb2c0, + 0xe0a7fb4b, + 0x2b017873, + 0x88b3d13e, + 0xd13b2b07, + 0x2b409b00, + 0xf644d138, + 0x002823e1, + 0xf7fe4947, + 0xe099fbee, + 0x88b34a43, + 0xb3697811, + 0x420b21fe, + 0x68d2d12a, + 0x009bb2db, + 0xb3285898, + 0xb9236843, + 0x78332260, + 0xd0064213, + 0x0031e01e, + 0x28004798, + 0xe081d000, + 0x88b2e7f4, + 0xb9aa0a12, + 0x2b00b25b, + 0x7874da12, + 0x4830b984, + 0xfc2af7fe, + 0x601c6803, + 0x71032302, + 0xf8d2f7ff, + 0x88b2e06e, + 0x2a80b31a, + 0x492cd023, + 0xb9b97809, + 0xf7fe4827, + 0x4c2cfc3b, + 0xf7fe0020, + 0x0020fc37, + 0x382c2101, + 0xfb40f7fe, + 0x00202101, + 0xfb3cf7fe, + 0x68c1e056, + 0x428a7889, + 0x3401d00c, + 0xd0e72c05, + 0x00a14822, + 0x68081809, + 0xd1f22800, + 0x481ee7f5, + 0x0028e000, + 0x42132260, + 0xb25bd1da, + 0x2b007872, + 0x2a00da13, + 0x8873d1d4, + 0xd1d12b00, + 0x2d0288f5, + 0x2401d1ce, + 0x480e7a03, + 0x41a4429c, + 0xfbe4f7fe, + 0x42646803, + 0x7105601c, + 0x2a01e7b8, + 0x2a03d002, + 0xe7bdd01e, + 0x2b008873, + 0x7a02d1ba, + 0xd8022a02, + 0xfb25f7fe, + 0x7103e01a, + 0x46c0e018, + 0x50110098, + 0x50100970, + 0x50100000, + 0x50100c4d, + 0x501005c8, + 0x04090304, + 0x501005a0, + 0x5010099c, + 0x50100a28, + 0x2b008873, + 0x2102d19c, + 0xfae6f7fe, + 0xfb38f7fe, + 0x4b1b2280, + 0x651a0292, + 0xf710ee30, + 0x06fbd617, + 0x4e18d515, + 0xb1946db4, + 0xf0a4fa94, + 0xf080fab0, + 0x40852501, + 0x6df22101, + 0x402a4b11, + 0x4381659d, + 0x419a1e53, + 0xf7fe0840, + 0x43acfe6f, + 0x04fbe7eb, + 0xf7ffd505, + 0x2280fa8f, + 0x03124b09, + 0xf240651a, + 0x421f33e0, + 0x4b07d00a, + 0x2b006d1b, + 0x2280da04, + 0x06124b03, + 0xe001651a, + 0xfa7cf7ff, + 0x46c0bdf7, + 0x50113000, + 0x50110000, + 0xf2464f23, + 0xf2465551, + 0x2003565d, + 0x20706278, + 0xf24062f8, + 0x63383001, + 0x7398f246, + 0x33017818, + 0x47a8b108, + 0x4b1be7fa, + 0x47b02200, + 0x44020212, + 0xd1fa429a, + 0x47b04b18, + 0x28770004, + 0x2872d014, + 0x47a8d00c, + 0xd0f52863, + 0xd1f42878, + 0x1003f240, + 0x4a112101, + 0x035b2341, + 0xba37f7fe, + 0x33017818, + 0x06d847a8, + 0xe004d1fa, + 0x701847b0, + 0x06d83301, + 0x0020d1fa, + 0xe7de47a8, + 0x098969b9, + 0xaffcf4bf, + 0x47707038, + 0x094069b8, + 0xaffcf4bf, + 0x47707838, + 0x40070000, + 0x56ff8be4, + 0x20000000, + 0xb5f82200, + 0x7a41000b, + 0x72020004, + 0xf240b919, + 0x43134200, + 0xf241e003, + 0x72424100, + 0x78a1430b, + 0xf248b111, + 0x43130200, + 0x26017922, + 0x1e680015, + 0x40724185, + 0x71227820, + 0x431d036d, + 0xfb02f7fe, + 0x220079e7, + 0x18c0007b, + 0xb2ad0023, + 0x80053329, + 0x7963701a, + 0x3b016962, + 0x68d37163, + 0x60d33b01, + 0xb10b7863, + 0x71e6407e, + 0xb502bdf8, + 0xfaf2f7fe, + 0x7101bc06, + 0x46966800, + 0xbf13f7fc, + 0xf7fe302c, + 0x6943ba63, + 0x701a2201, + 0x4093685b, + 0x7234f246, + 0x47105ad2, + 0xb5107a03, + 0xb1336941, + 0x70cb2301, + 0x61432300, + 0x60cb610b, + 0x690be00e, + 0x780bb963, + 0x2201b953, + 0x614370ca, + 0xb10b688b, + 0xe0034798, + 0xb1096981, + 0xfa6af7fe, + 0x2000bd10, + 0xf246c10d, + 0x5c80703e, + 0x60486008, + 0xb5314770, + 0x1a6c466d, + 0x00a008a4, + 0xf7fe4685, + 0x00a1ff7b, + 0x68284602, + 0xf7fc602a, + 0x46adfebb, + 0xb5f0bd31, + 0x1f8db087, + 0x4669000e, + 0xaf002400, + 0x607a6178, + 0x781388aa, + 0x3307009b, + 0x00db08db, + 0x469d1acb, + 0x785360bb, + 0x60fb613b, + 0x781b88ab, + 0xd91042a3, + 0x0062882b, + 0x886a5ad3, + 0x5d12217f, + 0xf7ff6978, + 0x68baffce, + 0x50d000a3, + 0x340168fb, + 0x60fb181b, + 0x2400e7ea, + 0x697a0030, + 0xf7fe6879, + 0x68fef941, + 0x781a88ab, + 0xd91b42a2, + 0x789a191b, + 0x1ab6693b, + 0x613b1a9b, + 0x697b6939, + 0x19981859, + 0xfe78f7fc, + 0x00a368ba, + 0x006258d3, + 0x882b1af6, + 0x5ad36979, + 0x1988886a, + 0x217f5d12, + 0xffa1f7ff, + 0xe7df3401, + 0x68f846bd, + 0xbdf0b007, + 0x0004b510, + 0xf9a4f7fe, + 0x302c0020, + 0xf9a0f7fe, + 0xbe00bd10, + 0x51455135, + 0x4e1d0073, + 0x49bd4e41, + 0x5ef54d15, + 0x01035765, + 0x72010100, + 0x62707361, + 0x79727265, + 0x632e6970, + 0x68006d6f, + 0x73707474, + 0x722f2f3a, + 0x62707361, + 0x79727265, + 0x632e6970, + 0x642f6d6f, + 0x63697665, + 0x50522f65, + 0x65763f32, + 0x6f697372, + 0x78013d6e, + 0x78787878, + 0x78787878, + 0x52007878, + 0x62707361, + 0x79727265, + 0x20695020, + 0x33325052, + 0x52003035, + 0x31004950, + 0x69726300, + 0x736e6576, + 0x00000000, + 0x67536743, + 0x67986753, + 0x67b0678b, + 0x693e6975, + 0x6d74683c, + 0x683c3e6c, + 0x3e646165, + 0x74656d3c, + 0x74682061, + 0x652d7074, + 0x76697571, + 0x6572223d, + 0x73657266, + 0x63202268, + 0x65746e6f, + 0x223d746e, + 0x52553b30, + 0x27273d4c, + 0x3c3e2f22, + 0x6236fa2f, + 0x3e79646f, + 0x69646552, + 0x74636572, + 0x20676e69, + 0x3c206f74, + 0x657248fd, + 0x3e29fd66, + 0xfd612f3c, + 0x25fc622b, + 0x6efb2f3c, + 0x697867b6, + 0x46556943, + 0x6f422032, + 0x6f6c746f, + 0x72656461, + 0x2e317620, + 0x6f4d0a30, + 0x3a6c6564, + 0x6f420a20, + 0x2d647261, + 0x0bfd4449, + 0x50100a20, + 0x50100a94, + 0x00006a0e, + 0x00006a1b, + 0x50100b08, + 0x50100a28, + 0x50100970, + 0x00004d15, + 0x01fc000a, + 0x00000603, + 0x00020008, + 0x37020901, + 0x00010200, + 0x04091980, + 0x08020000, + 0x07005006, + 0x40028105, + 0x05070000, + 0x00400202, + 0x01040900, + 0x00ff0200, + 0x05070000, + 0x00400203, + 0x84050700, + 0x00004002, + 0x02100112, + 0x40000000, + 0x000f2e8a, + 0x02010100, + 0x00140103, + 0x49570003, + 0x4253554e, + 0x28010480, + 0x69766544, + 0x6e496563, + 0x66726574, + 0x47656361, + 0x00444955, + 0x63627b4e, + 0x38393337, + 0x372d3163, + 0x2d646333, + 0x37626334, + 0x6238392d, + 0x31392d38, + 0x66386133, + 0x62376163, + 0x007d3666, + 0x01000000, + 0x000c0100, + 0x20000803, + 0x08408008, + 0x00008080, + 0x02000010, + 0x04030004, + 0x00100400, + 0x05b01000, + 0x0506d005, + 0x740307d0, + 0x02290212, + 0x200b0127, + 0x002801f6, + 0x25000064, + 0x01fb0039, + 0x4908f925, + 0x5845444e, + 0x544825fd, + 0x20f2214d, + 0x4620f902, + 0x46555f4f, + 0x54585432, + 0xfb0320f1, + 0x0c0c0d49, + 0x3ceb0e0f, + 0x57534d90, + 0x2e344e49, + 0x08020031, + 0x00020001, + 0xf8000002, + 0x00010081, + 0x00010001, + 0xffff0000, + 0x00000003, + 0x00000029, + 0x20202000, + 0x20202020, + 0x20202020, + 0x31544146, + 0x20202036, + 0x0800feeb, + 0x0b0a0808, + 0x08080808, + 0x0c090504, + 0x100f0e0d, + 0x00000911, + 0x001f0202, + 0xe5200000, + 0xff030001, + 0x020000ff, + 0x00000000, + 0xff030000, + 0x020002ff, + 0x210f0500, + 0x101c0100, + 0x60df0005, + 0x4589d8dd, + 0xd29c4cc7, + 0x649e9d65, + 0x00009f8a, + 0x00000603, + 0x61520001, + 0x65627073, + 0x20797272, + 0x52006950, + 0x35333250, + 0x6f422030, + 0x0000746f, + 0x00be00be, + 0x6af86af8, + 0x6b1c6b1c, + 0x6ade6ade, + 0x6b846b44, + 0x6ba06ba0, + 0x6ccc6ccc, + 0x6bb06bb0, + 0x6bdc6bdc, + 0x6d0c6c08, + 0x6d906d90, + 0x6de86dcc, + 0x6e106df8, + 0x6e246e24, + 0x6e406e40, + 0x6e5c6e5c, + 0x6e786e78, + 0x6e946e94, + 0x6ea06ea0, + 0x6eac6eac, + 0x6ec46ec4, + 0x6edc6edc, + 0x6e0a6e0a, + 0x6f586efc, + 0x6ff86f98, + 0x704c704c, + 0x70887088, + 0x70a470a4, + 0x70a470a4, + 0x70fa70fa, + 0x71a871a8, + 0x71047104, + 0x71a871a8, + 0x6c3c6c34, + 0x6c606c44, + 0x6c8c6c74, + 0x6cb46c88, + 0x6c266bd6, + 0x6cc46cdc, + 0x6b7e6cfc, + 0x6cf66d04, + 0x80009406, + 0x4887de13, + 0x808290a2, + 0x45b98622, + 0x24f19f82, + 0xfffe0493, + 0x4896d8b3, + 0x000e0663, + 0x41c6d733, + 0x8802c218, + 0xbfdd4e7d, + 0x0837c68b, + 0x2076c6b3, + 0x20764633, + 0xc40b4298, + 0xc4191067, + 0x408004b3, + 0x489758b3, + 0x00871733, + 0x8802c218, + 0x0837c68b, + 0x2076c6b3, + 0x20764633, + 0xc40b4298, + 0x04931067, + 0x58b3fff4, + 0xc4094897, + 0x00875733, + 0x8802c218, + 0xbfed4701, + 0x0867ce0b, + 0x207e4e33, + 0x0837c68b, + 0x2076c6b3, + 0x20764633, + 0x000e2403, + 0x0006ae03, + 0x4897d493, + 0x0733e4c1, + 0x4eb3008e, + 0x48b301c7, + 0xfeb3408e, + 0x38b3011e, + 0xc21801c7, + 0x87338802, + 0xaabd03c6, + 0x0837c68b, + 0x2076c6b3, + 0x20764633, + 0x0006ae03, + 0x0867c40b, + 0x4897d493, + 0xa0b9d4e9, + 0x0887c60b, + 0x20764633, + 0x0ff7f713, + 0x8802c218, + 0x0887c60b, + 0x20764633, + 0x00062e03, + 0x07339fe1, + 0x4eb300fe, + 0x48b301c7, + 0xfeb340fe, + 0x38b3011e, + 0xc21801c7, + 0xf7338802, + 0x880201c6, + 0x0887c60b, + 0x20764633, + 0x00062e03, + 0x0ff7f413, + 0x408e0733, + 0x00ee4eb3, + 0x408748b3, + 0x011efeb3, + 0x008e38b3, + 0x0018c893, + 0x8802c218, + 0x20764633, + 0x0837c68b, + 0x2076c6b3, + 0x0c67c40b, + 0x21e42433, + 0xae038400, + 0x42140006, + 0x07338402, + 0x389341c0, + 0x7eb30017, + 0xa0f901c7, + 0x01c6f733, + 0x8802c218, + 0x01c6c733, + 0x8802c218, + 0x74138736, + 0x04930ffe, + 0x4ee30200, + 0x2893ea94, + 0xf8b30214, + 0x071300d8, + 0xa04d0000, + 0x74138736, + 0xcc490ffe, + 0x02000493, + 0xec9441e3, + 0xb7c582fd, + 0x7e138736, + 0x03630ffe, + 0x44fd080e, + 0x01c4d363, + 0xbda94e01, + 0xfffe4e13, + 0x011e0433, + 0x00868733, + 0x00143493, + 0x0114f4b3, + 0x00d73433, + 0x009468b3, + 0x01c74433, + 0x40de44b3, + 0x00947eb3, + 0x8802c218, + 0x0ffe7413, + 0x6086d733, + 0x5893c019, + 0xa83d01f7, + 0x04038613, + 0xbd718436, + 0x0887c60b, + 0x20764633, + 0x00062683, + 0x0ff7fe13, + 0x41c68733, + 0x00e6ceb3, + 0x41c748b3, + 0x011efeb3, + 0x01c6b8b3, + 0x0018c893, + 0x47138802, + 0xa019fffe, + 0x01c6e733, + 0x8802c218, + 0x41c6f733, + 0x8802c218, + 0x0487c40b, + 0xcc291475, + 0x4877d413, + 0x0077f493, + 0x20946633, + 0x0c37c68b, + 0x2076c433, + 0xff168493, + 0x00042e03, + 0x0e13e099, + 0xd4130025, + 0xec094897, + 0x20764433, + 0xff160493, + 0xe0994014, + 0x00250693, + 0x4887d413, + 0x9e36f451, + 0x20764433, + 0xff360493, + 0x1c048163, + 0x867214f9, + 0x2023c09d, + 0x880201c4, + 0x0c37c40b, + 0x20744433, + 0xd4134010, + 0xe4014877, + 0xd5267fe3, + 0x0493a029, + 0xac230015, + 0x75130293, + 0x8802ffe6, + 0x0887c58b, + 0x2075c5b3, + 0x04939fe1, + 0x98f10025, + 0x2097c7b3, + 0xc1844384, + 0xce0b8802, + 0xa0391067, + 0x0867ce0b, + 0x207e4e33, + 0x000e2e03, + 0x0837c68b, + 0x2076c6b3, + 0x46334294, + 0x80822076, + 0x96f237d5, + 0x4897d413, + 0x4200e401, + 0x8802c280, + 0x8e804200, + 0x84038802, + 0xa81d0006, + 0x96f237e1, + 0x4897d413, + 0x4200f86d, + 0x88028a80, + 0x96f23f65, + 0x4897d413, + 0x0e041b63, + 0xc2004280, + 0xa4838802, + 0xa8d10343, + 0x96f23745, + 0x4897d413, + 0x8280e401, + 0x8802c200, + 0xbfed86c0, + 0x0837c68b, + 0x2076c6b3, + 0x20764633, + 0xc48b4280, + 0xc6b31067, + 0x42002084, + 0x8802c280, + 0x0837c68b, + 0x2076c6b3, + 0x20764633, + 0xc40b4284, + 0x46b31067, + 0x42802094, + 0x8802c200, + 0x0837c68b, + 0x2076c6b3, + 0x20764633, + 0xc48b4280, + 0x86b31067, + 0x42000084, + 0x88028a80, + 0x0837c68b, + 0x2076c6b3, + 0x20764633, + 0xc40b4284, + 0x06b31067, + 0x82800094, + 0x8802c200, + 0x26b33f19, + 0x420020de, + 0x88028e80, + 0x26b33729, + 0x868020de, + 0x8802c200, + 0x0343a483, + 0x0887c58b, + 0x2075c5b3, + 0xc6b39fe1, + 0x41802097, + 0x8802c280, + 0x0343a483, + 0x0887c58b, + 0x2075c5b3, + 0xc6b39fe1, + 0x42802097, + 0x8802c180, + 0x00250493, + 0xc60b98f1, + 0x46330887, + 0xf4132076, + 0x44b30ff7, + 0xc2042094, + 0x86808802, + 0x8802c200, + 0x4887d413, + 0xd413ec59, + 0xe40d4897, + 0x07f7f413, + 0x0343ae03, + 0x4877d493, + 0x0433c099, + 0x4e334080, + 0x7e1321c4, + 0xaa23ffce, + 0xa40303c3, + 0x6c630483, + 0x8802108e, + 0x0837c68b, + 0x2076c6b3, + 0x20764633, + 0xc40b4294, + 0x36690467, + 0x0a0e0406, + 0x9eed9ee5, + 0x9ee1a021, + 0x9ee9a011, + 0x8802c214, + 0x4897d413, + 0x10041f63, + 0x0343a683, + 0x1ff7f493, + 0x60249413, + 0x8633040a, + 0xaa234086, + 0xa40302c3, + 0x64630483, + 0xf5930c86, + 0x86630ff7, + 0xa40300b4, + 0x16f10383, + 0x86b2c280, + 0x4e01d1f9, + 0x0001a0e1, + 0x4887d413, + 0x4633c405, + 0x42102076, + 0x48b7d693, + 0x00163613, + 0x00d60b63, + 0x1037c40b, + 0x4897d493, + 0x2533049a, + 0x952620a4, + 0x88020509, + 0x0837c68b, + 0x2076c6b3, + 0x20764633, + 0xc40b4284, + 0x14610c67, + 0x147dcc01, + 0x1479c801, + 0x1c041263, + 0x6984d493, + 0xa02984c1, + 0x6104d493, + 0x6984d493, + 0x8802c204, + 0x4897d413, + 0x8e13e421, + 0x26830343, + 0xf593000e, + 0xc9990ff7, + 0x60159493, + 0x489595b3, + 0xc6334280, + 0xc2002074, + 0xf5fd0691, + 0x4887d413, + 0x4280c811, + 0x20230691, + 0x75e300de, + 0x7513ab24, + 0x8802ffe4, + 0x000e0463, + 0x00de2023, + 0x67ad8802, + 0x4887d593, + 0x8f820599, + 0x0887ce0b, + 0x207e4e33, + 0x000e2683, + 0x0ff7f593, + 0x60159493, + 0x489595b3, + 0x2074c633, + 0xc2804200, + 0xf5fd0691, + 0x000e0463, + 0x00de2023, + 0x440d8802, + 0x0c57c48b, + 0x12941263, + 0x8f8245a5, + 0x0887c60b, + 0x20764e33, + 0x000e2683, + 0x85be9fe1, + 0x48c7d433, + 0x4e01c011, + 0x0001b7b5, + 0x0897c40b, + 0x340dc411, + 0x26342008, + 0x463a3c2c, + 0x4887de13, + 0x1e7de311, + 0x000e0663, + 0xa5339fe5, + 0x050920a7, + 0x00018802, + 0xfe0888e3, + 0xc4e3b7ed, + 0xb7ddfe0e, + 0xfe0882e3, + 0xbff1d365, + 0xfc074de3, + 0xdb79bfe1, + 0x01d74633, + 0xfc0648e3, + 0x0963b7e9, + 0x45a10a0e, + 0x07d68f82, + 0x953e87d1, + 0x88020509, + 0x00055e03, + 0x54130509, + 0xcc0d48fe, + 0x48ee5413, + 0x5413c035, + 0xc85148ce, + 0x00150493, + 0x0293ac23, + 0xc0078593, + 0x005e1413, + 0x08b445b3, + 0x859d058e, + 0x48de5413, + 0x48be5493, + 0x20942433, + 0x8c2d045a, + 0x88029522, + 0x08fe44b3, + 0x74b380b1, + 0xf593089e, + 0xa4b34007, + 0x440b2095, + 0x44330c8e, + 0xc58b2074, + 0x85931447, + 0xe199fdc5, + 0x8802c004, + 0xed9515e1, + 0x88028c24, + 0x48ce5413, + 0xd413f445, + 0xe41548a7, + 0xe405880d, + 0x1857c40b, + 0xc4191411, + 0xc419147d, + 0xec011479, + 0x8f8245a9, + 0x8f8245ad, + 0x8f8245b1, + 0x9f824591, + 0x00055e03, + 0x45950509, + 0xc56c9f82, + 0x8593659d, + 0x83aa4d65, + 0xc0061171, + 0x8fae83aa, + 0x9f824581, + 0x641d1171, + 0x1d440413, + 0x8802c022, + 0x9f824585, + 0x0003a503, + 0x01114082, + 0xb8728082, + 0xf0000937, + 0x0313631d, + 0x6f1da2c3, + 0xaacf0f13, + 0x0813681d, + 0x888373c8, + 0xa5030453, + 0x8e8303c3, + 0x0efe0443, + 0x0403a703, + 0xae238082, + 0x82a302a3, + 0xa0230513, + 0xd41304e3, + 0x822301fe, + 0xc0060483, + 0x8082ba72, + 0xfc810113, + 0xc22ec02a, + 0xc636c432, + 0xca3ec83a, + 0xce46cc42, + 0xd21ad016, + 0xd672d41e, + 0xda7ad876, + 0x45028082, + 0x46224592, + 0x474246b2, + 0x486247d2, + 0x528248f2, + 0x53a25312, + 0x5ec25e32, + 0x01135f52, + 0x80820381, + 0xbffd9002, + 0x88029002, + 0x00f7f413, + 0x03634489, + 0xb71d0094, + 0x4847d613, + 0x9f8245b5, + 0x440b8802, + 0x46330c8e, + 0x76932074, + 0x16e10ffe, + 0x0206c663, + 0x16f9ca91, + 0x16e9ca99, + 0x16f1ce81, + 0xb711c291, + 0x8802c214, + 0x0343a403, + 0xa403a031, + 0xa0190483, + 0x04638403, + 0x8802c200, + 0xf4934401, + 0xc0990016, + 0x04738403, + 0x0046f493, + 0x24b3f4f5, + 0x35930007, + 0xa6b30017, + 0xd59320b4, + 0xa4b301fe, + 0xc6b320b8, + 0x06f22096, + 0xb7f98c55, + 0x00f7f413, + 0x20744433, + 0x76934000, + 0x16e10ffe, + 0x0206c663, + 0x16f9ca81, + 0x16e9ca91, + 0x16f1ca99, + 0xbd61c689, + 0xaa239871, + 0x88020283, + 0x0483a423, + 0x76138802, + 0x45b50014, + 0x88029f82, + 0x0046f493, + 0x5713f4ed, + 0x458501e4, + 0x40e58733, + 0x00341e93, + 0x49d45893, + 0x440b8802, + 0x14710c4e, + 0x6363448d, + 0xbda10094, + 0x04378802, + 0x0463ffa0, + 0x900200c4, + 0x45bd8802, + 0x44029f82, + 0x84020111, + 0x08fe4433, + 0xe97ff4b7, + 0x97f48493, + 0x00941563, + 0x32800513, + 0x44338802, + 0x549308fe, + 0xf4930184, + 0xc4930ec4, + 0xe8810ec4, + 0x1144448b, + 0xe09914f5, + 0x8eba577d, + 0x05b78802, + 0x8c0df04f, + 0xe0118041, + 0xbd6da895, + 0x04c38323, + 0x30047073, + 0x6073e219, + 0x80823004, + 0x74d42805, + 0x740a74d4, + 0x741e7418, + 0x74107446, + 0x7462745e, + 0x78d0747c, + 0x76167704, + 0x7c387c9e, + 0x7c307c6e, + 0x796874ea, + 0x76ec7ca4, + 0x00017484, + 0x0c47c40b, + 0xffc58bbd, + 0x201424b3, + 0x1459849c, + 0x08045963, + 0x20338782, + 0x88020000, + 0x00c3a403, + 0xb7dd0441, + 0x10500073, + 0x20338802, + 0x88020010, + 0x0c8e458b, + 0x2075c5b3, + 0x0ffe7413, + 0x08844433, + 0x48ce5493, + 0x48de5e13, + 0x09c4f4b3, + 0xc1809c45, + 0xa4038802, + 0x849e0003, + 0x45d183a2, + 0xc0104090, + 0x04110491, + 0xf9fd15fd, + 0x814a8802, + 0x0531a095, + 0x0003a403, + 0x400f84b7, + 0x02040593, + 0xc0d04010, + 0x6de30411, + 0x8802feb4, + 0x05136511, + 0x88026a05, + 0x400e0137, + 0x20810113, + 0x400e01b7, + 0x27818193, + 0x84feaee5, + 0x00291563, + 0xa1034901, + 0x45890343, + 0x841e9f82, + 0x404c4008, + 0x44544410, + 0xc0089782, + 0x458d8fa6, + 0x15639f82, + 0x09370009, + 0x814af000, + 0x0383a403, + 0x01246463, + 0xe0cff06f, + 0xffe47513, + 0xa6838802, + 0x95b604c3, + 0x8693669d, + 0x818c1e26, + 0x20d5a5b3, + 0x05378582, + 0x10734000, + 0x814dbe05, + 0x30451073, + 0x8718b5d9, + 0x28f3832a, + 0x0837f140, + 0x9663400e, + 0x47830008, + 0x555133e8, + 0x0793c7d1, + 0x87b31140, + 0xb87e02f8, + 0x983e7179, + 0x21082483, + 0x58dcc8a9, + 0x07b7c2be, + 0xc4beffa0, + 0x11400793, + 0x02f888b3, + 0x04379b79, + 0xc81a400e, + 0xcc32ca2e, + 0xc6bace36, + 0x01010913, + 0x944665a1, + 0x85934641, + 0x850acc25, + 0x21242823, + 0x67a12df1, + 0xcc07d783, + 0x854a858a, + 0x00f11723, + 0x28233199, + 0x61452094, + 0x2503be7e, + 0xc5112088, + 0x2783ccaa, + 0x97aa20c8, + 0x0837b755, + 0x0813400e, + 0x983e1008, + 0x400e0537, + 0x0513ccc2, + 0xb7e52085, + 0x90028082, + 0x34009073, + 0x342020f3, + 0x0800da63, + 0xc27e1161, + 0x2d2939a5, + 0x4f923959, + 0x20f30121, + 0x00733400, + 0x86b73020, + 0x86930000, + 0x87aacd46, + 0x1613a029, + 0x26b36026, + 0x868820d6, + 0x86b0c115, + 0x98e30691, + 0xf733fea7, + 0xd76500c5, + 0x60171713, + 0x16339f75, + 0x060600e6, + 0x60261613, + 0x20d62533, + 0x82868082, + 0x850837c9, + 0x06178282, + 0x4a080000, + 0x46504a4c, + 0x7d7e8602, + 0xac260000, + 0x81368932, + 0x400e0537, + 0x32800593, + 0x659d2599, + 0x60658593, + 0x25294641, + 0xc944c900, + 0xa0199902, + 0x3ea58132, + 0x10500073, + 0x5185bff5, + 0x651d5105, + 0x5a050513, + 0x30551073, + 0x28754505, + 0xf1402573, + 0x0537e129, + 0x0113400e, + 0x059320c5, + 0x25110540, + 0x02252a23, + 0x8593658d, + 0xdd0c7615, + 0x0613661d, + 0xdd506846, + 0x859365a1, + 0xbe05cc25, + 0x2033bf70, + 0x4b2c0000, + 0xdce305fa, + 0xcb68fe05, + 0x00102033, + 0x07378782, + 0x5073d000, + 0x4f2cbf03, + 0x05fe4b2c, + 0xfe05cde3, + 0x8793679d, + 0x45016da7, + 0x05933fd9, + 0xf5edfff5, + 0x107337f9, + 0x37e13055, + 0x37d1812a, + 0x8793679d, + 0x3f756d07, + 0x5073842a, + 0x9402bf00, + 0x2033b795, + 0x4b280000, + 0x5ce3057e, + 0x4f28fe05, + 0x8082dd55, + 0x840ab852, + 0x812ec191, + 0x00157613, + 0x00e7f231, + 0x81220005, + 0x0001be52, + 0xffe50513, + 0xfe055ee3, + 0x47858082, + 0x00f57733, + 0x06b7c305, + 0x8693400e, + 0x277320c6, + 0xc319f140, + 0x11468693, + 0xc2984701, + 0x1363c2d8, + 0x808200f5, + 0xdc7ff76f, + 0x000018c1, + 0x0509851c, + 0x00a7d413, + 0x206424b3, + 0xf6138484, + 0x84820077, + 0x07b70000, + 0x050e5010, + 0x08078793, + 0x953ec199, + 0x05118082, + 0xb872bfed, + 0x02954783, + 0x02450913, + 0x8138ef8d, + 0x00e507b3, + 0x0067c483, + 0x4781842a, + 0x4581eb01, + 0x37f18108, + 0x20a4a533, + 0x9fe1851c, + 0x02f40423, + 0x02045783, + 0x50100737, + 0x97ba049a, + 0xd05c97a6, + 0x04a34785, + 0x854a02f4, + 0xb872be72, + 0x00050423, + 0x00954783, + 0xebb9842a, + 0x4005e793, + 0x00444703, + 0x34b3802c, + 0x969300e0, + 0x471300f5, + 0x04b60017, + 0x8cd58008, + 0x00e40223, + 0x49038cdd, + 0x3f850074, + 0x20a92533, + 0x8d049ce9, + 0x00544783, + 0x02a317fd, + 0x485800f4, + 0x17fd475c, + 0x020404a3, + 0x805cc75c, + 0x4913c789, + 0x03a30019, + 0xbe720124, + 0x4005e793, + 0x28c79793, + 0x000504a3, + 0x495cb755, + 0x8b984705, + 0x43dc6719, + 0x73470713, + 0x20e7a7b3, + 0x878885aa, + 0x872aac7d, + 0x300475f3, + 0xf1402673, + 0x11400793, + 0x02f607b3, + 0x400e06b7, + 0x96be5551, + 0x2106a683, + 0x06b7e29d, + 0x8693400e, + 0x97b62086, + 0x00072803, + 0x00472883, + 0x43d44388, + 0x0107a023, + 0x0117a223, + 0xc354c308, + 0xe6114501, + 0x400e07b7, + 0x8f234705, + 0x907332e7, + 0x80823005, + 0x000825b7, + 0x20000537, + 0x2ed1b842, + 0x400e0537, + 0x0b000593, + 0x27850513, + 0x862a26d9, + 0x87936715, + 0x07130001, + 0xdfd89407, + 0x173765a1, + 0xdbd85010, + 0xcb258593, + 0xc5070713, + 0x00018513, + 0x08e7ac23, + 0x33adc7b8, + 0x00251793, + 0x400d1737, + 0xc31c0795, + 0x400d0837, + 0xea998736, + 0x06b7e315, + 0x4298400d, + 0xff758b09, + 0x400d1737, + 0x8082c31c, + 0x00082883, + 0x4008f313, + 0x02030263, + 0xa019df79, + 0x00082883, + 0x00f89313, + 0xfc0349e3, + 0x00882883, + 0x0023c601, + 0x06050116, + 0xb7c1177d, + 0xc303c581, + 0x05850005, + 0x00682223, + 0xbfc916fd, + 0x842ab862, + 0xc38d485c, + 0xcf9947dc, + 0x00544483, + 0x4783cc81, + 0xeb890084, + 0xcb81803c, + 0x35f18522, + 0x00544783, + 0xfe9790e3, + 0x0593be62, + 0x85220400, + 0xbfc935a9, + 0x4944b872, + 0x8023c4a9, + 0x842a0004, + 0x80fc2a51, + 0x4903ef9d, + 0x06630024, + 0x45830009, + 0x85220284, + 0x04a3351d, + 0x80dc0204, + 0x80a3c385, + 0x47830004, + 0x46030054, + 0x17fd0064, + 0x00f402a3, + 0x85ca8008, + 0x00164613, + 0xaa51ba72, + 0xba728522, + 0xbe72b741, + 0x0a418793, + 0x479cb896, + 0x9763842a, + 0x07b710b7, + 0x87835010, + 0x41084807, + 0x0007ca63, + 0x16b3467d, + 0x073728f0, + 0x6863d000, + 0xcf1402f6, + 0x4c4c4940, + 0x01442903, + 0xfff58493, + 0x79b3813c, + 0xcf850099, + 0x00098d63, + 0x02442903, + 0x00294783, + 0x854ae7ad, + 0x84aa3bb9, + 0xcf54a079, + 0x4c1cbfd1, + 0x00b90733, + 0x00e7f463, + 0x412785b3, + 0x541cddf1, + 0x20f187a8, + 0x4501d971, + 0xc62ebe96, + 0x4c1c3b1d, + 0x04090913, + 0x45b28a2a, + 0x02f96263, + 0xe0918cfd, + 0x946384ae, + 0x50080009, + 0x50082c39, + 0x000a2583, + 0x004a4603, + 0x2af9954e, + 0xb7c985a6, + 0x04098493, + 0x00b4b4b3, + 0x8ced14fd, + 0x854abfe9, + 0x485839dd, + 0x17fd4c5c, + 0x05934c14, + 0x84aa0407, + 0x06138ff9, + 0xf4630400, + 0x863300b6, + 0x822340e6, + 0x500c00c4, + 0x408895be, + 0xc7032245, + 0x485c0044, + 0xc85c97ba, + 0x8788541c, + 0x07b720a9, + 0x87835010, + 0xca634807, + 0x467d0007, + 0x28f016b3, + 0xd0000737, + 0x00f66663, + 0x854ad314, + 0xb7853545, + 0xbfe5d354, + 0x290399f9, + 0x07b703c5, + 0xdd4cffa0, + 0x5d0465a1, + 0xcb258593, + 0xf0efdd1c, + 0x2e23eccf, + 0xdc040324, + 0xc683bf35, + 0x87930a01, + 0x872a0001, + 0x00d78533, + 0xc150c10c, + 0xbd4d85ba, + 0x00854683, + 0x495085aa, + 0x4a1ce689, + 0x821ce795, + 0x4705e785, + 0x47818a78, + 0xc681c9dc, + 0xc65cca1c, + 0x46088082, + 0xb7d1c111, + 0xc7994d9c, + 0xac23c9dc, + 0x8bb80005, + 0xbbdd852e, + 0xb8628082, + 0x0a418793, + 0x439cc521, + 0x20f54533, + 0x47834100, + 0x07850054, + 0x00f402a3, + 0xe0b14844, + 0x00844783, + 0x8008eb85, + 0xe511802c, + 0x8f8d4789, + 0x50112737, + 0x3ef1d73c, + 0x9793411c, + 0xc11c28b7, + 0x04234789, + 0x4c5c00f4, + 0x8522cf81, + 0x8782ba62, + 0xb7c143c0, + 0x95634705, + 0x478900e7, + 0x00f40423, + 0x809cbe62, + 0x4785c781, + 0xbfdd88dc, + 0x00c40323, + 0xc399803c, + 0xc39944dc, + 0x31958522, + 0xf3ed80fc, + 0x17fd489c, + 0x8522c89c, + 0xbf3dba62, + 0x0793b892, + 0x04b70500, + 0xa7035011, + 0x80230984, + 0x87930af1, + 0x5bd40001, + 0x08d7a223, + 0x1c6347c1, + 0x4ca002f7, + 0x50113a37, + 0x8023e401, + 0xbe920a01, + 0x60141513, + 0x28a01933, + 0x45934cf0, + 0x7633fff5, + 0x2c2300c9, + 0x3633052a, + 0x898500c0, + 0x37258105, + 0x41247433, + 0x6795bfd1, + 0x9787a583, + 0x05018513, + 0xb7e13371, + 0x851385aa, + 0x46310a41, + 0x963686aa, + 0x00d5e733, + 0xe30d8b0d, + 0xf8631675, + 0x419800c6, + 0x0591c298, + 0xece30691, + 0x060dfec6, + 0x00c6f863, + 0x8a988198, + 0x06850585, + 0xfec6ece3, + 0x862e8082, + 0x86aa4581, + 0xf7139636, + 0xe30d0036, + 0xfa631675, + 0xf5b300c6, + 0xc5b308b5, + 0xc28c08b5, + 0xeee30691, + 0x060dfec6, + 0x00c6f663, + 0x06858a8c, + 0xfec6eee3, + 0x577d8082, + 0x8082c298, + 0x1c0005b7, + 0x05218908, + 0xfeb56ee3, + 0x16008082, + 0xc7453423, + 0x4945f147, + 0xe9b48954, + 0x1600c4bc, + 0xd2453423, + 0x4545f147, + 0x45b44545, + 0x00004545, + 0x00055253, + 0x18c1bc1d, + 0x00175347, + 0x81bff76f, + 0x7e1509c1, + 0x00104353, + 0x504c7e35, + 0xf76f0007, + 0x0eb9809f, + 0x00175047, + 0xffeff76f, + 0x7e2d0acd, + 0x00174247, + 0xff2ff76f, + 0x7e4d0b85, + 0x00174146, + 0xfe6ff76f, + 0x7e250bc5, + 0x00174252, + 0xfdaff76f, + 0x7e450571, + 0x0017414f, + 0xfceff76f, + 0x7e3d09b9, + 0x00074649, + 0xfc2ff76f, + 0x41520c1d, + 0xf76f0007, + 0x0ca1fb8f, + 0x00075845, + 0xfaeff76f, + 0x45520d65, + 0xf76f0007, + 0x0d0dfa4f, + 0x00075052, + 0xf9aff76f, + 0x43460cd1, + 0xf76f0007, + 0x3711f90f, + 0x00075843, + 0xf86ff76f, + 0x4d5804f1, + 0xf76f0007, + 0x04f5f7cf, + 0x00174f46, + 0xf72ff76f, + 0x7e1d06e3, + 0x00074352, + 0xf66ff76f, + 0x42560b61, + 0x03d50004, + 0x00045053, + 0x42410361, + 0xf76f0007, + 0x0e55f50f, + 0x00074245, + 0xf46ff76f, + 0x49430f9d, + 0xf76f0007, + 0x0f11f3cf, + 0x00075547, + 0xf32ff76f, + 0x53530ed7, + 0xb4950001, + 0x00405247, + 0x54507df0, + 0x46bc0040, + 0x00404658, + 0x444646c4, + 0x46c00040, + 0x00000000, + 0x312e22fa, + 0x7cd46a2c, + 0x75c275fe, + 0x847ff06f, + 0xe97fe97f, + 0xc730fe16, + 0x5000e92d, + 0x0e9ff20f, + 0xba77f7f8, + 0xe97fe97f, + 0xe01b46fc, + 0xe97fe97f, + 0xe01746fc, + 0xe97fe97f, + 0xe01346fc, + 0xe97fe97f, + 0xe00f46fc, + 0xe97fe97f, + 0xe00b46fc, + 0xe97fe97f, + 0xe00746fc, + 0xe97fe97f, + 0xe00346fc, + 0xe97fe97f, + 0xe7ff46fc, + 0x0718fe88, + 0xf2afb502, + 0xebbc0e40, + 0xfe160c0e, + 0xf8cde730, + 0xea5fe000, + 0xf1bc0cdc, + 0xd2180f08, + 0xe04cf8df, + 0xe00cf81e, + 0x4e0eea5e, + 0x0f02f01e, + 0xea5fd111, + 0xfe402e0e, + 0xf244e710, + 0xf1bc6ec8, + 0xd2060f08, + 0xc01cf83e, + 0x0e0ff20f, + 0x0738fea8, + 0x20054760, + 0x2004e000, + 0xe8bd4240, + 0x46724002, + 0x46f44673, + 0x8c00f38e, + 0x1730fe06, + 0x47744671, + 0x400e03f0, + 0x4605b5f7, + 0x4616460f, + 0xfe19461c, + 0x93013736, + 0x93002300, + 0x2301f3c5, + 0xf3c02b02, + 0xd1274002, + 0xf280fab0, + 0xf384fab4, + 0x095b0952, + 0xd11f429a, + 0xbf183802, + 0x46012001, + 0xfc1af7fb, + 0xb16c4602, + 0x4620466b, + 0xf7f84631, + 0x9b00fa61, + 0x2b004604, + 0x9b01db04, + 0x3736fe09, + 0xbdf0b003, + 0xee409b00, + 0x46233710, + 0x46394632, + 0xf7f84628, + 0xe7f0fbd6, + 0x0004f06f, + 0xb507e7ed, + 0x373bfe1a, + 0x23009301, + 0x12c3f04f, + 0x21019300, + 0xf7f8466b, + 0x9a00fa3f, + 0x2a004603, + 0xee40da07, + 0xf7f82710, + 0x1e03fe2f, + 0xf06fbfb8, + 0x9a010309, + 0x273bfe0a, + 0xb0034618, + 0xfb04f85d, + 0x0716fe85, + 0x1210f240, + 0x6a994b03, + 0xd0fc4211, + 0xfea5629a, + 0x47700736, + 0x401200fc, + 0xbf602304, + 0xfe17b570, + 0xb4c06730, + 0xf3ef466c, + 0xb119850a, + 0xf3862600, + 0x468d880a, + 0x0730fea8, + 0xf3854780, + 0x46a5880a, + 0x407ce8bd, + 0x0718ee80, + 0x2730fe07, + 0xeea84770, + 0x4401073c, + 0x880af380, + 0x4a07468d, + 0x8888f382, + 0x1040f644, + 0x318c4905, + 0xe8902200, + 0x600a1ff8, + 0x073deea8, + 0x00004704, + 0x50101000, + 0xe000ed08 +]) diff --git a/demo/riscv_blink/blink_simple.c b/demo/riscv_blink/blink_simple.c new file mode 100644 index 0000000000..24a669a045 --- /dev/null +++ b/demo/riscv_blink/blink_simple.c @@ -0,0 +1,39 @@ +/** + * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "pico/stdlib.h" +#include "pico/multicore.h" + +#define LED_DELAY_US 1000 +#define SECOND_LED_DELAY_US 400 +#define SECOND_LED_PIN 2 + +// Initialize the GPIO for the LED +void pico_led_init(void) { + gpio_init(PICO_DEFAULT_LED_PIN); + gpio_set_dir(PICO_DEFAULT_LED_PIN, GPIO_OUT); + gpio_init(SECOND_LED_PIN); + gpio_set_dir(SECOND_LED_PIN, GPIO_OUT); +} + +void blink_led(uint gpio, uint delay) { + while (true) { + gpio_put(gpio, true); + busy_wait_us(delay); + gpio_put(gpio, false); + busy_wait_us(delay); + } +} + +void core1_loop() { + blink_led(SECOND_LED_PIN, SECOND_LED_DELAY_US); +} + +int main() { + pico_led_init(); + multicore_launch_core1(core1_loop); + blink_led(PICO_DEFAULT_LED_PIN, LED_DELAY_US); +} diff --git a/demo/riscv_blink/blink_simple.dis b/demo/riscv_blink/blink_simple.dis new file mode 100644 index 0000000000..9ac931a51b --- /dev/null +++ b/demo/riscv_blink/blink_simple.dis @@ -0,0 +1,2308 @@ + +/home/malte/project/private/pico-examples/blink_simple/blink_simple/blink_simple.elf: file format elf32-littleriscv + +Sections: +Idx Name Size VMA LMA File off Algn + 0 .text 000017e0 20000000 20000000 00001000 2**6 + CONTENTS, ALLOC, LOAD, READONLY, CODE + 1 .rodata 000000e4 200017e0 200017e0 000027e0 2**2 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 2 .binary_info 00000018 200018c4 200018c4 000028c4 2**2 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 3 .data 00000064 200018dc 200018dc 000028dc 2**2 + CONTENTS, ALLOC, LOAD, DATA + 4 .tdata 00000000 20001940 20001940 00002940 2**0 + CONTENTS, ALLOC, LOAD, DATA, THREAD_LOCAL + 5 .uninitialized_data 00000000 20001940 20001940 00002940 2**0 + CONTENTS + 6 .tbss 00000000 20001940 20001940 00000000 2**0 + ALLOC, THREAD_LOCAL + 7 .bss 000001fc 20001940 20001940 00002940 2**3 + ALLOC + 8 .heap 00000800 20001b3c 20001b3c 00002940 2**2 + CONTENTS, READONLY + 9 .scratch_x 00000000 20080000 20080000 00003140 2**0 + CONTENTS + 10 .scratch_y 00000000 20081000 20081000 00003140 2**0 + CONTENTS + 11 .stack1_dummy 00000800 20080000 20080000 00003000 2**2 + ALLOC + 12 .stack_dummy 00000800 20081000 20081000 00003140 2**5 + CONTENTS, READONLY + 13 .debug_info 0001ac67 00000000 00000000 00003940 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 14 .debug_abbrev 00005101 00000000 00000000 0001e5a7 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 15 .debug_loclists 0000d5e0 00000000 00000000 000236a8 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 16 .debug_aranges 00000b08 00000000 00000000 00030c88 2**3 + CONTENTS, READONLY, DEBUGGING, OCTETS + 17 .debug_rnglists 00003321 00000000 00000000 00031790 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 18 .debug_line 0001ad20 00000000 00000000 00034ab1 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 19 .debug_str 000045d4 00000000 00000000 0004f7d1 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 20 .debug_line_str 00001d72 00000000 00000000 00053da5 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 21 .comment 00000035 00000000 00000000 00055b17 2**0 + CONTENTS, READONLY + 22 .riscv.attributes 0000006a 00000000 00000000 00055b4c 2**0 + CONTENTS, READONLY + 23 .debug_frame 000022c0 00000000 00000000 00055bb8 2**2 + CONTENTS, READONLY, DEBUGGING, OCTETS + +/home/malte/project/private/pico-examples/blink_simple/blink_simple/blink_simple.elf: file format elf32-littleriscv + + +Disassembly of section .text: + +20000000 <__VECTOR_TABLE>: +20000000: 1a00006f j 200001a0 <__default_isrs_start> + ... +2000000c: 1960006f j 200001a2 + ... +2000001c: 1840006f j 200001a0 <__default_isrs_start> + ... + +2000002c : +2000002c: 715d addi sp,sp,-80 +2000002e: c006 sw ra,0(sp) +20000030: c216 sw t0,4(sp) +20000032: c41a sw t1,8(sp) +20000034: c61e sw t2,12(sp) +20000036: c82a sw a0,16(sp) +20000038: ca2e sw a1,20(sp) +2000003a: cc32 sw a2,24(sp) +2000003c: ce36 sw a3,28(sp) +2000003e: d03a sw a4,32(sp) +20000040: d23e sw a5,36(sp) +20000042: d442 sw a6,40(sp) +20000044: d646 sw a7,44(sp) +20000046: d872 sw t3,48(sp) +20000048: da76 sw t4,52(sp) +2000004a: dc7a sw t5,56(sp) +2000004c: de7e sw t6,60(sp) +2000004e: 34102573 csrr a0,mepc +20000052: 300025f3 csrr a1,mstatus +20000056: c0aa sw a0,64(sp) +20000058: c2ae sw a1,68(sp) + +2000005a : +2000005a: be516673 csrrsi a2,0xbe5,2 +2000005e: c4b2 sw a2,72(sp) + +20000060 : +20000060: be40e573 csrrsi a0,0xbe4,1 +20000064: 02054163 bltz a0,20000086 + +20000068 : +20000068: 30046073 csrsi mstatus,8 +2000006c: 200005b7 lui a1,0x20000 +20000070: 95aa add a1,a1,a0 +20000072: 0d05a583 lw a1,208(a1) # 200000d0 <__soft_vector_table> +20000076: 000580e7 jalr a1 +2000007a: 30047073 csrci mstatus,8 + +2000007e : +2000007e: be40e573 csrrsi a0,0xbe4,1 +20000082: fe0553e3 bgez a0,20000068 + +20000086 : +20000086: 4506 lw a0,64(sp) +20000088: 4596 lw a1,68(sp) +2000008a: 4626 lw a2,72(sp) +2000008c: 34151073 csrw mepc,a0 +20000090: 30059073 csrw mstatus,a1 +20000094: be561073 csrw 0xbe5,a2 +20000098: 4082 lw ra,0(sp) +2000009a: 4292 lw t0,4(sp) +2000009c: 4322 lw t1,8(sp) +2000009e: 43b2 lw t2,12(sp) +200000a0: 45d2 lw a1,20(sp) +200000a2: 4662 lw a2,24(sp) +200000a4: 46f2 lw a3,28(sp) +200000a6: 5702 lw a4,32(sp) +200000a8: 5792 lw a5,36(sp) +200000aa: 5822 lw a6,40(sp) +200000ac: 58b2 lw a7,44(sp) +200000ae: 5e42 lw t3,48(sp) +200000b0: 5ed2 lw t4,52(sp) +200000b2: 5f62 lw t5,56(sp) +200000b4: 5ff2 lw t6,60(sp) + +200000b6 : +200000b6: be402573 csrr a0,0xbe4 +200000ba: fa0550e3 bgez a0,2000005a +200000be: 4542 lw a0,16(sp) +200000c0: 6161 addi sp,sp,80 +200000c2: 30200073 mret +200000c6: 00000013 nop +200000ca: 00000013 nop +200000ce: 0001 nop + +200000d0 <__soft_vector_table>: +200000d0: 200001a4 .word 0x200001a4 +200000d4: 200001a4 .word 0x200001a4 +200000d8: 200001a4 .word 0x200001a4 +200000dc: 200001a4 .word 0x200001a4 +200000e0: 200001a4 .word 0x200001a4 +200000e4: 200001a4 .word 0x200001a4 +200000e8: 200001a4 .word 0x200001a4 +200000ec: 200001a4 .word 0x200001a4 +200000f0: 200001a4 .word 0x200001a4 +200000f4: 200001a4 .word 0x200001a4 +200000f8: 200001a4 .word 0x200001a4 +200000fc: 200001a4 .word 0x200001a4 +20000100: 200001a4 .word 0x200001a4 +20000104: 200001a4 .word 0x200001a4 +20000108: 200001a4 .word 0x200001a4 +2000010c: 200001a4 .word 0x200001a4 +20000110: 200001a4 .word 0x200001a4 +20000114: 200001a4 .word 0x200001a4 +20000118: 200001a4 .word 0x200001a4 +2000011c: 200001a4 .word 0x200001a4 +20000120: 200001a4 .word 0x200001a4 +20000124: 200001a4 .word 0x200001a4 +20000128: 200001a4 .word 0x200001a4 +2000012c: 200001a4 .word 0x200001a4 +20000130: 200001a4 .word 0x200001a4 +20000134: 200001a4 .word 0x200001a4 +20000138: 200001a4 .word 0x200001a4 +2000013c: 200001a4 .word 0x200001a4 +20000140: 200001a4 .word 0x200001a4 +20000144: 200001a4 .word 0x200001a4 +20000148: 200001a4 .word 0x200001a4 +2000014c: 200001a4 .word 0x200001a4 +20000150: 200001a4 .word 0x200001a4 +20000154: 200001a4 .word 0x200001a4 +20000158: 200001a4 .word 0x200001a4 +2000015c: 200001a4 .word 0x200001a4 +20000160: 200001a4 .word 0x200001a4 +20000164: 200001a4 .word 0x200001a4 +20000168: 200001a4 .word 0x200001a4 +2000016c: 200001a4 .word 0x200001a4 +20000170: 200001a4 .word 0x200001a4 +20000174: 200001a4 .word 0x200001a4 +20000178: 200001a4 .word 0x200001a4 +2000017c: 200001a4 .word 0x200001a4 +20000180: 200001a4 .word 0x200001a4 +20000184: 200001a4 .word 0x200001a4 +20000188: 200001a4 .word 0x200001a4 +2000018c: 200001a4 .word 0x200001a4 +20000190: 200001a4 .word 0x200001a4 +20000194: 200001a4 .word 0x200001a4 +20000198: 200001a4 .word 0x200001a4 +2000019c: 200001a4 .word 0x200001a4 + +200001a0 <__default_isrs_start>: +200001a0: 9002 ebreak + +200001a2 : +200001a2: 9002 ebreak + +200001a4 <__unhandled_user_irq>: +200001a4: 8109 srli a0,a0,0x2 +200001a6: 9002 ebreak + +200001a8 <__default_isrs_end>: + ... + +200001c0 <__bi_54>: +200001c0: 0006 5052 b3ab 5360 1870 2000 ..RP..`Sp.. + +200001cc <__bi_42>: +200001cc: 0006 5052 1c86 0203 1880 2000 ..RP....... + +200001d8 <__bi_34>: +200001d8: 0006 5052 2254 9da2 1890 2000 ..RPT"..... + +200001e4 : +200001e4: ebf2 .insn 2, 0xebf2 +200001e6: 7188 .insn 2, 0x7188 +200001e8: 18c4 addi s1,sp,116 +200001ea: 2000 .insn 2, 0x2000 +200001ec: 18dc addi a5,sp,116 +200001ee: 2000 .insn 2, 0x2000 +200001f0: 0278 addi a4,sp,268 +200001f2: 2000 .insn 2, 0x2000 +200001f4: a390 .insn 2, 0xa390 +200001f6: e71a .insn 2, 0xe71a + +200001f8 <__binary_info_header_end>: +200001f8: ffffded3 .insn 4, 0xffffded3 +200001fc: 0142 slli sp,sp,0x10 +200001fe: 1101 addi sp,sp,-32 +20000200: 0344 addi s1,sp,388 +20000202: 0000 unimp +20000204: 0222 slli tp,tp,0x8 +20000206: 2000 .insn 2, 0x2000 +20000208: 2000 .insn 2, 0x2000 +2000020a: 2008 .insn 2, 0x2008 +2000020c: 00000203 lb tp,0(zero) # 0 +20000210: 0000 unimp +20000212: 2000 .insn 2, 0x2000 +20000214: 06ff 0000 0000 0000 .insn 10, 0x357900000000000006ff +2000021c: 3579 +2000021e: ab12 .insn 2, 0xab12 + +20000220 <__embedded_block_end>: +20000220: a009 j 20000222 <_reset_handler> + +20000222 <_reset_handler>: +20000222: 00002197 auipc gp,0x2 +20000226: 10618193 addi gp,gp,262 # 20002328 <__global_pointer$> +2000022a: 00082117 auipc sp,0x82 +2000022e: dd610113 addi sp,sp,-554 # 20082000 <__StackTop> +20000232: 00000517 auipc a0,0x0 +20000236: dcf50513 addi a0,a0,-561 # 20000001 <__VECTOR_TABLE+0x1> +2000023a: 30551073 csrw mtvec,a0 +2000023e: f1402573 csrr a0,mhartid +20000242: e125 bnez a0,200002a2 +20000244: 00001597 auipc a1,0x1 +20000248: 6fc58593 addi a1,a1,1788 # 20001940 +2000024c: 81418613 addi a2,gp,-2028 # 20001b3c <__bss_end__> +20000250: a021 j 20000258 + +20000252 : +20000252: 0005a023 sw zero,0(a1) +20000256: 0591 addi a1,a1,4 + +20000258 : +20000258: fec59de3 bne a1,a2,20000252 + +2000025c : +2000025c: 108010ef jal 20001364 +20000260: 2ae9 jal 2000043a
+20000262: 0fc010ef jal 2000135e +20000266: 9002 ebreak +20000268: bffd j 20000266 + +2000026a : +2000026a: 4188 lw a0,0(a1) +2000026c: c208 sw a0,0(a2) +2000026e: 0591 addi a1,a1,4 +20000270: 0611 addi a2,a2,4 + +20000272 : +20000272: fed66ce3 bltu a2,a3,2000026a +20000276: 8082 ret + +20000278 : +20000278: 200018dc .word 0x200018dc +2000027c: 200018dc .word 0x200018dc +20000280: 20001940 .word 0x20001940 +20000284: 20080000 .word 0x20080000 +20000288: 20080000 .word 0x20080000 +2000028c: 20080000 .word 0x20080000 +20000290: 20081000 .word 0x20081000 +20000294: 20081000 .word 0x20081000 +20000298: 20081000 .word 0x20081000 +2000029c: 00000000 .word 0x00000000 +200002a0: 8082 ret + +200002a2 : +200002a2: 6521 lui a0,0x8 +200002a4: dfc50513 addi a0,a0,-516 # 7dfc +200002a8: 8502 jr a0 + ... + +200002ac : +200002ac: 1101 addi sp,sp,-32 +200002ae: d00007b7 lui a5,0xd0000 +200002b2: cc22 sw s0,24(sp) +200002b4: ca26 sw s1,20(sp) +200002b6: c84a sw s2,16(sp) +200002b8: c64e sw s3,12(sp) +200002ba: ce06 sw ra,28(sp) +200002bc: 0007a983 lw s3,0(a5) # d0000000 <__StackTop+0xaff7e000> +200002c0: 842a mv s0,a0 +200002c2: 892e mv s2,a1 +200002c4: 84b2 mv s1,a2 +200002c6: a821 j 200002de +200002c8: 0330000f fence rw,rw +200002cc: 00070023 sb zero,0(a4) +200002d0: 3007a073 csrs mstatus,a5 +200002d4: 854a mv a0,s2 +200002d6: 85a6 mv a1,s1 +200002d8: 271000ef jal 20000d48 +200002dc: e531 bnez a0,20000328 +200002de: 401c lw a5,0(s0) +200002e0: 30047773 csrrci a4,mstatus,8 +200002e4: 00379693 slli a3,a5,0x3 +200002e8: 28d016b3 bset a3,zero,a3 +200002ec: 9bf1 andi a5,a5,-4 +200002ee: 44d7a62f amoor.w.aq a2,a3,(a5) +200002f2: 8e75 and a2,a2,a3 +200002f4: fe6d bnez a2,200002ee +200002f6: 0330000f fence rw,rw +200002fa: 00440683 lb a3,4(s0) +200002fe: 00877793 andi a5,a4,8 +20000302: 4018 lw a4,0(s0) +20000304: fc06d2e3 bgez a3,200002c8 +20000308: 01340223 sb s3,4(s0) +2000030c: 0330000f fence rw,rw +20000310: 00070023 sb zero,0(a4) +20000314: 3007a073 csrs mstatus,a5 +20000318: 40f2 lw ra,28(sp) +2000031a: 4462 lw s0,24(sp) +2000031c: 44d2 lw s1,20(sp) +2000031e: 4942 lw s2,16(sp) +20000320: 49b2 lw s3,12(sp) +20000322: 4505 li a0,1 +20000324: 6105 addi sp,sp,32 +20000326: 8082 ret +20000328: 40f2 lw ra,28(sp) +2000032a: 4462 lw s0,24(sp) +2000032c: 44d2 lw s1,20(sp) +2000032e: 4942 lw s2,16(sp) +20000330: 49b2 lw s3,12(sp) +20000332: 4501 li a0,0 +20000334: 6105 addi sp,sp,32 +20000336: 8082 ret + +20000338 : +20000338: 411c lw a5,0(a0) +2000033a: 300476f3 csrrci a3,mstatus,8 +2000033e: 00379813 slli a6,a5,0x3 +20000342: 29001833 bset a6,zero,a6 +20000346: 9bf1 andi a5,a5,-4 +20000348: 4507a8af amoor.w.aq a7,a6,(a5) +2000034c: 0108f8b3 and a7,a7,a6 +20000350: fe089ce3 bnez a7,20000348 +20000354: 0330000f fence rw,rw +20000358: 00450803 lb a6,4(a0) +2000035c: 0086f793 andi a5,a3,8 +20000360: 4114 lw a3,0(a0) +20000362: 02084263 bltz a6,20000386 +20000366: 0330000f fence rw,rw +2000036a: 00068023 sb zero,0(a3) +2000036e: 3007a073 csrs mstatus,a5 +20000372: d00007b7 lui a5,0xd0000 +20000376: 00078703 lb a4,0(a5) # d0000000 <__StackTop+0xaff7e000> +2000037a: 4781 li a5,0 +2000037c: 01071463 bne a4,a6,20000384 +20000380: 853e mv a0,a5 +20000382: 8082 ret +20000384: b725 j 200002ac +20000386: d0000637 lui a2,0xd0000 +2000038a: 4210 lw a2,0(a2) +2000038c: 00c50223 sb a2,4(a0) +20000390: 0330000f fence rw,rw +20000394: 00068023 sb zero,0(a3) +20000398: 3007a073 csrs mstatus,a5 +2000039c: 4785 li a5,1 +2000039e: 853e mv a0,a5 +200003a0: 8082 ret + +200003a2 : +200003a2: 411c lw a5,0(a0) +200003a4: 30047773 csrrci a4,mstatus,8 +200003a8: 00379693 slli a3,a5,0x3 +200003ac: 28d016b3 bset a3,zero,a3 +200003b0: 9bf1 andi a5,a5,-4 +200003b2: 44d7a62f amoor.w.aq a2,a3,(a5) +200003b6: 8e75 and a2,a2,a3 +200003b8: fe6d bnez a2,200003b2 +200003ba: 0330000f fence rw,rw +200003be: 57fd li a5,-1 +200003c0: 00f50223 sb a5,4(a0) +200003c4: 411c lw a5,0(a0) +200003c6: 0330000f fence rw,rw +200003ca: 00078023 sb zero,0(a5) +200003ce: 00877793 andi a5,a4,8 +200003d2: 3007a073 csrs mstatus,a5 +200003d6: 00102033 sgtz zero,ra +200003da: 8082 ret + +200003dc : +200003dc: 1141 addi sp,sp,-16 +200003de: 4565 li a0,25 +200003e0: c606 sw ra,12(sp) +200003e2: c422 sw s0,8(sp) +200003e4: 2885 jal 20000454 +200003e6: d0000437 lui s0,0xd0000 +200003ea: 020007b7 lui a5,0x2000 +200003ee: dc1c sw a5,56(s0) +200003f0: 4509 li a0,2 +200003f2: 208d jal 20000454 +200003f4: 4791 li a5,4 +200003f6: 40b2 lw ra,12(sp) +200003f8: dc1c sw a5,56(s0) +200003fa: 4422 lw s0,8(sp) +200003fc: 0141 addi sp,sp,16 +200003fe: 8082 ret + +20000400 : +20000400: 1141 addi sp,sp,-16 +20000402: c422 sw s0,8(sp) +20000404: c226 sw s1,4(sp) +20000406: c04a sw s2,0(sp) +20000408: c606 sw ra,12(sp) +2000040a: 28a014b3 bset s1,zero,a0 +2000040e: 842e mv s0,a1 +20000410: d0000937 lui s2,0xd0000 +20000414: 8522 mv a0,s0 +20000416: 00992c23 sw s1,24(s2) # d0000018 <__StackTop+0xaff7e018> +2000041a: 4581 li a1,0 +2000041c: 2a5000ef jal 20000ec0 +20000420: 8522 mv a0,s0 +20000422: 02992023 sw s1,32(s2) +20000426: 4581 li a1,0 +20000428: 299000ef jal 20000ec0 +2000042c: b7e5 j 20000414 + +2000042e : +2000042e: 1141 addi sp,sp,-16 +20000430: 19000593 li a1,400 +20000434: 4509 li a0,2 +20000436: c606 sw ra,12(sp) +20000438: 37e1 jal 20000400 + +2000043a
: +2000043a: 1141 addi sp,sp,-16 +2000043c: c606 sw ra,12(sp) +2000043e: 3f79 jal 200003dc +20000440: 20000537 lui a0,0x20000 +20000444: 42e50513 addi a0,a0,1070 # 2000042e +20000448: 2d0010ef jal 20001718 +2000044c: 3e800593 li a1,1000 +20000450: 4565 li a0,25 +20000452: 377d jal 20000400 + +20000454 : +20000454: 28a016b3 bset a3,zero,a0 +20000458: d0000737 lui a4,0xd0000 +2000045c: 400387b7 lui a5,0x40038 +20000460: c334 sw a3,64(a4) +20000462: 0791 addi a5,a5,4 # 40038004 <__StackTop+0x1ffb6004> +20000464: d314 sw a3,32(a4) +20000466: 20f547b3 sh2add a5,a0,a5 +2000046a: 4398 lw a4,0(a5) +2000046c: 6685 lui a3,0x1 +2000046e: 96be add a3,a3,a5 +20000470: 04074713 xori a4,a4,64 +20000474: 0c077713 andi a4,a4,192 +20000478: 40028637 lui a2,0x40028 +2000047c: c298 sw a4,0(a3) +2000047e: 20c56533 sh3add a0,a0,a2 +20000482: 4715 li a4,5 +20000484: 668d lui a3,0x3 +20000486: c158 sw a4,4(a0) +20000488: 97b6 add a5,a5,a3 +2000048a: 10000713 li a4,256 +2000048e: c398 sw a4,0(a5) +20000490: 8082 ret + +20000492 : +20000492: 7139 addi sp,sp,-64 +20000494: 20001337 lui t1,0x20001 +20000498: cc22 sw s0,24(sp) +2000049a: 842a mv s0,a0 +2000049c: 7e030513 addi a0,t1,2016 # 200017e0 +200004a0: ce06 sw ra,28(sp) +200004a2: d22e sw a1,36(sp) +200004a4: d432 sw a2,40(sp) +200004a6: d636 sw a3,44(sp) +200004a8: d83a sw a4,48(sp) +200004aa: da3e sw a5,52(sp) +200004ac: dc42 sw a6,56(sp) +200004ae: de46 sw a7,60(sp) +200004b0: 172010ef jal 20001622 <__wrap_puts> +200004b4: cc01 beqz s0,200004cc +200004b6: 104c addi a1,sp,36 +200004b8: 8522 mv a0,s0 +200004ba: c62e sw a1,12(sp) +200004bc: 64d000ef jal 20001308 +200004c0: 20001537 lui a0,0x20001 +200004c4: 7f050513 addi a0,a0,2032 # 200017f0 +200004c8: 15a010ef jal 20001622 <__wrap_puts> +200004cc: 4505 li a0,1 +200004ce: 68d000ef jal 2000135a <_exit> + +200004d2 : +200004d2: 300476f3 csrrci a3,mstatus,8 +200004d6: 20002737 lui a4,0x20002 +200004da: acb70713 addi a4,a4,-1333 # 20001acb <_sw_spin_locks+0xb> +200004de: 00371813 slli a6,a4,0x3 +200004e2: 29001833 bset a6,zero,a6 +200004e6: 9b71 andi a4,a4,-4 +200004e8: 450728af amoor.w.aq a7,a6,(a4) +200004ec: 0108f8b3 and a7,a7,a6 +200004f0: fe089ce3 bnez a7,200004e8 +200004f4: 0330000f fence rw,rw +200004f8: 0035d713 srli a4,a1,0x3 +200004fc: 953a add a0,a0,a4 +200004fe: 00054703 lbu a4,0(a0) +20000502: 0075f793 andi a5,a1,7 +20000506: 28f017b3 bset a5,zero,a5 +2000050a: 00f77833 and a6,a4,a5 +2000050e: 02081163 bnez a6,20000530 +20000512: 8f5d or a4,a4,a5 +20000514: 00e50023 sb a4,0(a0) +20000518: 0330000f fence rw,rw +2000051c: 200027b7 lui a5,0x20002 +20000520: ac078793 addi a5,a5,-1344 # 20001ac0 <_sw_spin_locks> +20000524: 000785a3 sb zero,11(a5) +20000528: 8aa1 andi a3,a3,8 +2000052a: 3006a073 csrs mstatus,a3 +2000052e: 8082 ret +20000530: 1141 addi sp,sp,-16 +20000532: 8532 mv a0,a2 +20000534: c606 sw ra,12(sp) +20000536: 3fb1 jal 20000492 + +20000538 : +20000538: 20002737 lui a4,0x20002 +2000053c: 8f474503 lbu a0,-1804(a4) # 200018f4 +20000540: 46dd li a3,23 +20000542: 00150793 addi a5,a0,1 +20000546: 0ff7f793 zext.b a5,a5 +2000054a: 00f6f363 bgeu a3,a5,20000550 +2000054e: 47c1 li a5,16 +20000550: 8ef70a23 sb a5,-1804(a4) +20000554: 8082 ret + +20000556 : +20000556: 200026b7 lui a3,0x20002 +2000055a: ac068693 addi a3,a3,-1344 # 20001ac0 <_sw_spin_locks> +2000055e: 4781 li a5,0 +20000560: 02000613 li a2,32 +20000564: 0330000f fence rw,rw +20000568: 00f68733 add a4,a3,a5 +2000056c: 00070023 sb zero,0(a4) +20000570: 0785 addi a5,a5,1 +20000572: fec799e3 bne a5,a2,20000564 +20000576: 8082 ret + +20000578 : +20000578: 4681 li a3,0 +2000057a: 483d li a6,15 +2000057c: 451d li a0,7 +2000057e: 03400593 li a1,52 +20000582: 0036f793 andi a5,a3,3 +20000586: 078a slli a5,a5,0x2 +20000588: 00f81733 sll a4,a6,a5 +2000058c: 0026d613 srli a2,a3,0x2 +20000590: 0742 slli a4,a4,0x10 +20000592: 8f51 or a4,a4,a2 +20000594: be373073 csrc 0xbe3,a4 +20000598: 00f517b3 sll a5,a0,a5 +2000059c: 07c2 slli a5,a5,0x10 +2000059e: 8fd1 or a5,a5,a2 +200005a0: be37a073 csrs 0xbe3,a5 +200005a4: 0685 addi a3,a3,1 +200005a6: fcb69ee3 bne a3,a1,20000582 +200005aa: 8082 ret + +200005ac : +200005ac: 00555793 srli a5,a0,0x5 +200005b0: 0786 slli a5,a5,0x1 +200005b2: 28a01533 bset a0,zero,a0 +200005b6: 76c1 lui a3,0xffff0 +200005b8: 8ee9 and a3,a3,a0 +200005ba: 00178713 addi a4,a5,1 +200005be: 0542 slli a0,a0,0x10 +200005c0: 8f55 or a4,a4,a3 +200005c2: 8d5d or a0,a0,a5 +200005c4: c991 beqz a1,200005d8 +200005c6: be253073 csrc 0xbe2,a0 +200005ca: be273073 csrc 0xbe2,a4 +200005ce: be052073 csrs 0xbe0,a0 +200005d2: be072073 csrs 0xbe0,a4 +200005d6: 8082 ret +200005d8: be053073 csrc 0xbe0,a0 +200005dc: be073073 csrc 0xbe0,a4 +200005e0: 8082 ret + +200005e2 : +200005e2: 00455793 srli a5,a0,0x4 +200005e6: be07a7f3 csrrs a5,0xbe0,a5 +200005ea: 83c1 srli a5,a5,0x10 +200005ec: 893d andi a0,a0,15 +200005ee: 48a7d533 bext a0,a5,a0 +200005f2: 8082 ret + +200005f4 : +200005f4: 1141 addi sp,sp,-16 +200005f6: c226 sw s1,4(sp) +200005f8: c606 sw ra,12(sp) +200005fa: c422 sw s0,8(sp) +200005fc: c04a sw s2,0(sp) +200005fe: 84ae mv s1,a1 +20000600: 30047973 csrrci s2,mstatus,8 +20000604: 200027b7 lui a5,0x20002 +20000608: ac978793 addi a5,a5,-1335 # 20001ac9 <_sw_spin_locks+0x9> +2000060c: 00379713 slli a4,a5,0x3 +20000610: 28e01733 bset a4,zero,a4 +20000614: 9bf1 andi a5,a5,-4 +20000616: 44e7a6af amoor.w.aq a3,a4,(a5) +2000061a: 8ef9 and a3,a3,a4 +2000061c: feed bnez a3,20000616 +2000061e: 0330000f fence rw,rw +20000622: 305027f3 csrr a5,mtvec +20000626: 03450513 addi a0,a0,52 +2000062a: 9bf1 andi a5,a5,-4 +2000062c: 20f547b3 sh2add a5,a0,a5 +20000630: 4398 lw a4,0(a5) +20000632: 200007b7 lui a5,0x20000 +20000636: 1a478793 addi a5,a5,420 # 200001a4 <__unhandled_user_irq> +2000063a: 00251413 slli s0,a0,0x2 +2000063e: 00f70663 beq a4,a5,2000064a +20000642: 00e58463 beq a1,a4,2000064a +20000646: 2c9000ef jal 2000110e +2000064a: 305027f3 csrr a5,mtvec +2000064e: 9bf1 andi a5,a5,-4 +20000650: 97a2 add a5,a5,s0 +20000652: c384 sw s1,0(a5) +20000654: 0330000f fence rw,rw +20000658: 0330000f fence rw,rw +2000065c: 200027b7 lui a5,0x20002 +20000660: ac078793 addi a5,a5,-1344 # 20001ac0 <_sw_spin_locks> +20000664: 000784a3 sb zero,9(a5) +20000668: 00897793 andi a5,s2,8 +2000066c: 3007a073 csrs mstatus,a5 +20000670: 40b2 lw ra,12(sp) +20000672: 4422 lw s0,8(sp) +20000674: 4492 lw s1,4(sp) +20000676: 4902 lw s2,0(sp) +20000678: 0141 addi sp,sp,16 +2000067a: 8082 ret + +2000067c : +2000067c: 200027b7 lui a5,0x20002 +20000680: ac078793 addi a5,a5,-1344 # 20001ac0 <_sw_spin_locks> +20000684: 97ae add a5,a5,a1 +20000686: c11c sw a5,0(a0) +20000688: 8082 ret + +2000068a : +2000068a: 1101 addi sp,sp,-32 +2000068c: cc22 sw s0,24(sp) +2000068e: ca26 sw s1,20(sp) +20000690: 20002437 lui s0,0x20002 +20000694: 200024b7 lui s1,0x20002 +20000698: ce06 sw ra,28(sp) +2000069a: 8f840793 addi a5,s0,-1800 # 200018f8 +2000069e: 90848493 addi s1,s1,-1784 # 20001908 <__pre_init_runtime_init_bootrom_reset> +200006a2: 0297f863 bgeu a5,s1,200006d2 +200006a6: c84a sw s2,16(sp) +200006a8: c64e sw s3,12(sp) +200006aa: 8f840413 addi s0,s0,-1800 +200006ae: 59fd li s3,-1 +200006b0: 0ff00913 li s2,255 +200006b4: 401c lw a5,0(s0) +200006b6: c39d beqz a5,200006dc +200006b8: 3541 jal 20000538 +200006ba: 85aa mv a1,a0 +200006bc: 8522 mv a0,s0 +200006be: 3f7d jal 2000067c +200006c0: 01241223 sh s2,4(s0) +200006c4: 0330000f fence rw,rw +200006c8: 0421 addi s0,s0,8 +200006ca: fe9465e3 bltu s0,s1,200006b4 +200006ce: 4942 lw s2,16(sp) +200006d0: 49b2 lw s3,12(sp) +200006d2: 40f2 lw ra,28(sp) +200006d4: 4462 lw s0,24(sp) +200006d6: 44d2 lw s1,20(sp) +200006d8: 6105 addi sp,sp,32 +200006da: 8082 ret +200006dc: 3db1 jal 20000538 +200006de: 85aa mv a1,a0 +200006e0: 8522 mv a0,s0 +200006e2: 3f69 jal 2000067c +200006e4: 01340223 sb s3,4(s0) +200006e8: 0330000f fence rw,rw +200006ec: 0421 addi s0,s0,8 +200006ee: fc9463e3 bltu s0,s1,200006b4 +200006f2: bff1 j 200006ce + +200006f4 : +200006f4: 200026b7 lui a3,0x20002 +200006f8: b286a783 lw a5,-1240(a3) # 20001b28 +200006fc: 30047773 csrrci a4,mstatus,8 +20000700: 00379613 slli a2,a5,0x3 +20000704: 28c01633 bset a2,zero,a2 +20000708: 9bf1 andi a5,a5,-4 +2000070a: 44c7a5af amoor.w.aq a1,a2,(a5) +2000070e: 8df1 and a1,a1,a2 +20000710: fded bnez a1,2000070a +20000712: 0330000f fence rw,rw +20000716: b286a783 lw a5,-1240(a3) +2000071a: 0330000f fence rw,rw +2000071e: 00078023 sb zero,0(a5) +20000722: 00877793 andi a5,a4,8 +20000726: 3007a073 csrs mstatus,a5 +2000072a: 00102033 sgtz zero,ra +2000072e: 4501 li a0,0 +20000730: 4581 li a1,0 +20000732: 8082 ret + +20000734 : +20000734: 715d addi sp,sp,-80 +20000736: c686 sw ra,76(sp) +20000738: c4a2 sw s0,72(sp) +2000073a: c2a6 sw s1,68(sp) +2000073c: c0ca sw s2,64(sp) +2000073e: de4e sw s3,60(sp) +20000740: dc52 sw s4,56(sp) +20000742: da56 sw s5,52(sp) +20000744: d85a sw s6,48(sp) +20000746: d65e sw s7,44(sp) +20000748: d462 sw s8,40(sp) +2000074a: d266 sw s9,36(sp) +2000074c: d06a sw s10,32(sp) +2000074e: ce6e sw s11,28(sp) +20000750: be5027f3 csrr a5,0xbe5 +20000754: 01079713 slli a4,a5,0x10 +20000758: 32074863 bltz a4,20000a88 +2000075c: 0047d993 srli s3,a5,0x4 +20000760: 1ff9f793 andi a5,s3,511 +20000764: 8389 srli a5,a5,0x2 +20000766: 0039f993 andi s3,s3,3 +2000076a: 29301a33 bset s4,zero,s3 +2000076e: 400b0937 lui s2,0x400b0 +20000772: 34079663 bnez a5,20000abe +20000776: 20002737 lui a4,0x20002 +2000077a: 2137c7b3 sh2add a5,a5,s3 +2000077e: b0870713 addi a4,a4,-1272 # 20001b08 +20000782: 20e7c7b3 sh2add a5,a5,a4 +20000786: 0007aa83 lw s5,0(a5) +2000078a: 678d lui a5,0x3 +2000078c: 04478793 addi a5,a5,68 # 3044 +20000790: 97ca add a5,a5,s2 +20000792: 2129c9b3 sh2add s3,s3,s2 +20000796: 008a8b13 addi s6,s5,8 +2000079a: 0147a023 sw s4,0(a5) +2000079e: 547d li s0,-1 +200007a0: 54fd li s1,-1 +200007a2: 008a9d03 lh s10,8(s5) +200007a6: 03492e23 sw s4,60(s2) # 400b003c <__StackTop+0x2002e03c> +200007aa: 080d5163 bgez s10,2000082c +200007ae: 004ad783 lhu a5,4(s5) +200007b2: 60579793 sext.h a5,a5 +200007b6: 1407dc63 bgez a5,2000090e +200007ba: 006ac783 lbu a5,6(s5) +200007be: 1e079463 bnez a5,200009a6 +200007c2: 008a9683 lh a3,8(s5) +200007c6: 0406c263 bltz a3,2000080a +200007ca: 014aa703 lw a4,20(s5) +200007ce: 20d6a6b3 sh1add a3,a3,a3 +200007d2: 57fd li a5,-1 +200007d4: 20e6e6b3 sh3add a3,a3,a4 +200007d8: 0086ab83 lw s7,8(a3) +200007dc: 00c6ac03 lw s8,12(a3) +200007e0: 2afb8163 beq s7,a5,20000a82 +200007e4: 02892703 lw a4,40(s2) +200007e8: 0109a783 lw a5,16(s3) +200007ec: 40eb86b3 sub a3,s7,a4 +200007f0: 8f99 sub a5,a5,a4 +200007f2: 00f6f463 bgeu a3,a5,200007fa +200007f6: 0179a823 sw s7,16(s3) +200007fa: 854a mv a0,s2 +200007fc: 254d jal 20000e9e +200007fe: 0185c663 blt a1,s8,2000080a +20000802: fabc10e3 bne s8,a1,200007a2 +20000806: f9757ee3 bgeu a0,s7,200007a2 +2000080a: 00102033 sgtz zero,ra +2000080e: 40b6 lw ra,76(sp) +20000810: 4426 lw s0,72(sp) +20000812: 4496 lw s1,68(sp) +20000814: 4906 lw s2,64(sp) +20000816: 59f2 lw s3,60(sp) +20000818: 5a62 lw s4,56(sp) +2000081a: 5ad2 lw s5,52(sp) +2000081c: 5b42 lw s6,48(sp) +2000081e: 5bb2 lw s7,44(sp) +20000820: 5c22 lw s8,40(sp) +20000822: 5c92 lw s9,36(sp) +20000824: 5d02 lw s10,32(sp) +20000826: 4df2 lw s11,28(sp) +20000828: 6161 addi sp,sp,80 +2000082a: 8082 ret +2000082c: 014aa783 lw a5,20(s5) +20000830: 21ad2bb3 sh1add s7,s10,s10 +20000834: 854a mv a0,s2 +20000836: 20fbebb3 sh3add s7,s7,a5 +2000083a: 00cbac03 lw s8,12(s7) +2000083e: 008bac83 lw s9,8(s7) +20000842: 2db1 jal 20000e9e +20000844: f785c5e3 blt a1,s8,200007ae +20000848: 1cbc0963 beq s8,a1,20000a1a +2000084c: 1c0c4b63 bltz s8,20000a22 +20000850: 010ba703 lw a4,16(s7) +20000854: 200007b7 lui a5,0x20000 +20000858: 73478793 addi a5,a5,1844 # 20000734 +2000085c: 014ba583 lw a1,20(s7) +20000860: 24f70563 beq a4,a5,20000aaa +20000864: 008a9783 lh a5,8(s5) +20000868: 002bd503 lhu a0,2(s7) +2000086c: 07c2 slli a5,a5,0x10 +2000086e: 8d5d or a0,a0,a5 +20000870: 9702 jalr a4 +20000872: 872e mv a4,a1 +20000874: 8daa mv s11,a0 +20000876: 00ede7b3 or a5,s11,a4 +2000087a: 1a078463 beqz a5,20000a22 +2000087e: 20075b63 bgez a4,20000a94 +20000882: 41bc86b3 sub a3,s9,s11 +20000886: 00dcbcb3 sltu s9,s9,a3 +2000088a: 40ec07b3 sub a5,s8,a4 +2000088e: 419787b3 sub a5,a5,s9 +20000892: 000b9703 lh a4,0(s7) +20000896: 00dba423 sw a3,8(s7) +2000089a: 00fba623 sw a5,12(s7) +2000089e: f00748e3 bltz a4,200007ae +200008a2: 014aa503 lw a0,20(s5) +200008a6: 20e72833 sh1add a6,a4,a4 +200008aa: 00171613 slli a2,a4,0x1 +200008ae: 20a86833 sh3add a6,a6,a0 +200008b2: 00c82583 lw a1,12(a6) +200008b6: 00882883 lw a7,8(a6) +200008ba: eeb7cae3 blt a5,a1,200007ae +200008be: 00f59463 bne a1,a5,200008c6 +200008c2: ef16e6e3 bltu a3,a7,200007ae +200008c6: 00ea9423 sh a4,8(s5) +200008ca: 008a8813 addi a6,s5,8 +200008ce: a031 j 200008da +200008d0: 00862883 lw a7,8(a2) # 40028008 <__StackTop+0x1ffa6008> +200008d4: 464c lw a1,12(a2) +200008d6: 00171613 slli a2,a4,0x1 +200008da: 963a add a2,a2,a4 +200008dc: 20a66633 sh3add a2,a2,a0 +200008e0: 00b7cd63 blt a5,a1,200008fa +200008e4: 1ef58163 beq a1,a5,20000ac6 +200008e8: 00061703 lh a4,0(a2) +200008ec: 8832 mv a6,a2 +200008ee: 20e72633 sh1add a2,a4,a4 +200008f2: 20a66633 sh3add a2,a2,a0 +200008f6: fc075de3 bgez a4,200008d0 +200008fa: 00eb9023 sh a4,0(s7) +200008fe: 01a81023 sh s10,0(a6) +20000902: 004ad783 lhu a5,4(s5) +20000906: 60579793 sext.h a5,a5 +2000090a: ea07c8e3 bltz a5,200007ba +2000090e: 010aa783 lw a5,16(s5) +20000912: 30047773 csrrci a4,mstatus,8 +20000916: 00379693 slli a3,a5,0x3 +2000091a: 28d016b3 bset a3,zero,a3 +2000091e: 9bf1 andi a5,a5,-4 +20000920: 44d7a62f amoor.w.aq a2,a3,(a5) +20000924: 8e75 and a2,a2,a3 +20000926: fe6d bnez a2,20000920 +20000928: 0330000f fence rw,rw +2000092c: 004ad883 lhu a7,4(s5) +20000930: 57fd li a5,-1 +20000932: 00fa9223 sh a5,4(s5) +20000936: 60589893 sext.h a7,a7 +2000093a: 010aa783 lw a5,16(s5) +2000093e: 0330000f fence rw,rw +20000942: 00078023 sb zero,0(a5) +20000946: 00877793 andi a5,a4,8 +2000094a: 3007a073 csrs mstatus,a5 +2000094e: e608c6e3 bltz a7,200007ba +20000952: 014aa503 lw a0,20(s5) +20000956: 008a9703 lh a4,8(s5) +2000095a: 2118a833 sh1add a6,a7,a7 +2000095e: 20a86833 sh3add a6,a6,a0 +20000962: 00882303 lw t1,8(a6) +20000966: 00c82603 lw a2,12(a6) +2000096a: 85da mv a1,s6 +2000096c: 00075a63 bgez a4,20000980 +20000970: a839 j 2000098e +20000972: 0ec68c63 beq a3,a2,20000a6a +20000976: 00079703 lh a4,0(a5) +2000097a: 85be mv a1,a5 +2000097c: 00074963 bltz a4,2000098e +20000980: 20e727b3 sh1add a5,a4,a4 +20000984: 20a7e7b3 sh3add a5,a5,a0 +20000988: 47d4 lw a3,12(a5) +2000098a: fed654e3 bge a2,a3,20000972 +2000098e: 01159023 sh a7,0(a1) +20000992: 00081883 lh a7,0(a6) +20000996: 00e81023 sh a4,0(a6) +2000099a: fa08dee3 bgez a7,20000956 +2000099e: 006ac783 lbu a5,6(s5) +200009a2: e20780e3 beqz a5,200007c2 +200009a6: 000a8323 sb zero,6(s5) +200009aa: 008a9703 lh a4,8(s5) +200009ae: 557d li a0,-1 +200009b0: 835a mv t1,s6 +200009b2: e4a70ce3 beq a4,a0,2000080a +200009b6: 014aa883 lw a7,20(s5) +200009ba: 20e727b3 sh1add a5,a4,a4 +200009be: 86ba mv a3,a4 +200009c0: 2117e7b3 sh3add a5,a5,a7 +200009c4: 0027d603 lhu a2,2(a5) +200009c8: 85ba mv a1,a4 +200009ca: 883a mv a6,a4 +200009cc: 60561613 sext.h a2,a2 +200009d0: 00079703 lh a4,0(a5) +200009d4: 02064363 bltz a2,200009fa +200009d8: 833e mv t1,a5 +200009da: dea706e3 beq a4,a0,200007c6 +200009de: 20e727b3 sh1add a5,a4,a4 +200009e2: 2117e7b3 sh3add a5,a5,a7 +200009e6: 0027d603 lhu a2,2(a5) +200009ea: 85ba mv a1,a4 +200009ec: 883a mv a6,a4 +200009ee: 60561613 sext.h a2,a2 +200009f2: 00079703 lh a4,0(a5) +200009f6: fe0651e3 bgez a2,200009d8 +200009fa: c780 sw s0,8(a5) +200009fc: c7c4 sw s1,12(a5) +200009fe: 00d58a63 beq a1,a3,20000a12 +20000a02: 00e31023 sh a4,0(t1) +20000a06: 008ad683 lhu a3,8(s5) +20000a0a: 00d79023 sh a3,0(a5) +20000a0e: 00ba9423 sh a1,8(s5) +20000a12: 86c2 mv a3,a6 +20000a14: fca715e3 bne a4,a0,200009de +20000a18: b37d j 200007c6 +20000a1a: d9956ae3 bltu a0,s9,200007ae +20000a1e: e20c59e3 bgez s8,20000850 +20000a22: 000bd703 lhu a4,0(s7) +20000a26: 010aa783 lw a5,16(s5) +20000a2a: 00ea9423 sh a4,8(s5) +20000a2e: 30047773 csrrci a4,mstatus,8 +20000a32: 00379693 slli a3,a5,0x3 +20000a36: 28d016b3 bset a3,zero,a3 +20000a3a: 9bf1 andi a5,a5,-4 +20000a3c: 44d7a62f amoor.w.aq a2,a3,(a5) +20000a40: 8e75 and a2,a2,a3 +20000a42: fe6d bnez a2,20000a3c +20000a44: 0330000f fence rw,rw +20000a48: 002ad683 lhu a3,2(s5) +20000a4c: 010aa783 lw a5,16(s5) +20000a50: 00db9023 sh a3,0(s7) +20000a54: 01aa9123 sh s10,2(s5) +20000a58: 0330000f fence rw,rw +20000a5c: 00078023 sb zero,0(a5) +20000a60: 00877793 andi a5,a4,8 +20000a64: 3007a073 csrs mstatus,a5 +20000a68: b399 j 200007ae +20000a6a: 4794 lw a3,8(a5) +20000a6c: f0d375e3 bgeu t1,a3,20000976 +20000a70: 01159023 sh a7,0(a1) +20000a74: 00081883 lh a7,0(a6) +20000a78: 00e81023 sh a4,0(a6) +20000a7c: ec08dde3 bgez a7,20000956 +20000a80: bf39 j 2000099e +20000a82: d77c11e3 bne s8,s7,200007e4 +20000a86: bb95 j 200007fa +20000a88: 4a05 li s4,1 +20000a8a: 87d2 mv a5,s4 +20000a8c: 4981 li s3,0 +20000a8e: 400b8937 lui s2,0x400b8 +20000a92: b1d5 j 20000776 +20000a94: 854a mv a0,s2 +20000a96: c63a sw a4,12(sp) +20000a98: 2119 jal 20000e9e +20000a9a: 4732 lw a4,12(sp) +20000a9c: 01b506b3 add a3,a0,s11 +20000aa0: 00a6b7b3 sltu a5,a3,a0 +20000aa4: 972e add a4,a4,a1 +20000aa6: 97ba add a5,a5,a4 +20000aa8: b3ed j 20000892 +20000aaa: 499c lw a5,16(a1) +20000aac: 852e mv a0,a1 +20000aae: c62e sw a1,12(sp) +20000ab0: 9782 jalr a5 +20000ab2: d925 beqz a0,20000a22 +20000ab4: 45b2 lw a1,12(sp) +20000ab6: 0005ad83 lw s11,0(a1) +20000aba: 41d8 lw a4,4(a1) +20000abc: bb6d j 20000876 +20000abe: 4785 li a5,1 +20000ac0: 400b8937 lui s2,0x400b8 +20000ac4: b94d j 20000776 +20000ac6: e316f1e3 bgeu a3,a7,200008e8 +20000aca: bd05 j 200008fa + +20000acc : +20000acc: 1101 addi sp,sp,-32 +20000ace: cc22 sw s0,24(sp) +20000ad0: 20002437 lui s0,0x20002 +20000ad4: 8dc40413 addi s0,s0,-1828 # 200018dc +20000ad8: 481c lw a5,16(s0) +20000ada: ce06 sw ra,28(sp) +20000adc: cb91 beqz a5,20000af0 +20000ade: 4462 lw s0,24(sp) +20000ae0: 40f2 lw ra,28(sp) +20000ae2: 20002537 lui a0,0x20002 +20000ae6: b2850513 addi a0,a0,-1240 # 20001b28 +20000aea: 45a9 li a1,10 +20000aec: 6105 addi sp,sp,32 +20000aee: b679 j 2000067c +20000af0: 458d li a1,3 +20000af2: 400b0537 lui a0,0x400b0 +20000af6: ca26 sw s1,20(sp) +20000af8: c84a sw s2,16(sp) +20000afa: c64e sw s3,12(sp) +20000afc: c452 sw s4,8(sp) +20000afe: 2641 jal 20000e7e +20000b00: 400b0a37 lui s4,0x400b0 +20000b04: 448d li s1,3 +20000b06: 01442623 sw s4,12(s0) +20000b0a: 343d jal 20000538 +20000b0c: d00007b7 lui a5,0xd0000 +20000b10: 00940023 sb s1,0(s0) +20000b14: 20002737 lui a4,0x20002 +20000b18: 0007a803 lw a6,0(a5) # d0000000 <__StackTop+0xaff7e000> +20000b1c: ac070713 addi a4,a4,-1344 # 20001ac0 <_sw_spin_locks> +20000b20: 485c lw a5,20(s0) +20000b22: 972a add a4,a4,a0 +20000b24: 001106b7 lui a3,0x110 +20000b28: c818 sw a4,16(s0) +20000b2a: 567d li a2,-1 +20000b2c: 16fd addi a3,a3,-1 # 10ffff +20000b2e: 45bd li a1,15 +20000b30: 4709 li a4,2 +20000b32: 010400a3 sb a6,1(s0) +20000b36: c414 sw a3,8(s0) +20000b38: 00b41123 sh a1,2(s0) +20000b3c: 00c41223 sh a2,4(s0) +20000b40: 04e79423 sh a4,72(a5) +20000b44: 4921 li s2,8 +20000b46: 4f11 li t5,4 +20000b48: 4e95 li t4,5 +20000b4a: 4e19 li t3,6 +20000b4c: 431d li t1,7 +20000b4e: 48a5 li a7,9 +20000b50: 4829 li a6,10 +20000b52: 46b5 li a3,13 +20000b54: 4739 li a4,14 +20000b56: 4985 li s3,1 +20000b58: 452d li a0,11 +20000b5a: 45b1 li a1,12 +20000b5c: 06979023 sh s1,96(a5) +20000b60: 07e79c23 sh t5,120(a5) +20000b64: 09d79823 sh t4,144(a5) +20000b68: 0bc79423 sh t3,168(a5) +20000b6c: 0c679023 sh t1,192(a5) +20000b70: 0f179823 sh a7,240(a5) +20000b74: 11079423 sh a6,264(a5) +20000b78: 12a79023 sh a0,288(a5) +20000b7c: 12b79c23 sh a1,312(a5) +20000b80: 14d79823 sh a3,336(a5) +20000b84: 16e79423 sh a4,360(a5) +20000b88: 00c79023 sh a2,0(a5) +20000b8c: 03379823 sh s3,48(a5) +20000b90: 0d279c23 sh s2,216(a5) +20000b94: 00079c23 sh zero,24(a5) +20000b98: 200005b7 lui a1,0x20000 +20000b9c: 032a2023 sw s2,32(s4) # 400b0020 <__StackTop+0x2002e020> +20000ba0: 200027b7 lui a5,0x20002 +20000ba4: 8526 mv a0,s1 +20000ba6: 73458593 addi a1,a1,1844 # 20000734 +20000baa: b087aa23 sw s0,-1260(a5) # 20001b14 +20000bae: 3499 jal 200005f4 +20000bb0: 85ce mv a1,s3 +20000bb2: 8526 mv a0,s1 +20000bb4: 3ae5 jal 200005ac +20000bb6: 400b27b7 lui a5,0x400b2 +20000bba: 4462 lw s0,24(sp) +20000bbc: 44d2 lw s1,20(sp) +20000bbe: 49b2 lw s3,12(sp) +20000bc0: 4a22 lw s4,8(sp) +20000bc2: 40f2 lw ra,28(sp) +20000bc4: 0527a023 sw s2,64(a5) # 400b2040 <__StackTop+0x20030040> +20000bc8: 4942 lw s2,16(sp) +20000bca: 20002537 lui a0,0x20002 +20000bce: b2850513 addi a0,a0,-1240 # 20001b28 +20000bd2: 45a9 li a1,10 +20000bd4: 6105 addi sp,sp,32 +20000bd6: b45d j 2000067c + +20000bd8 : +20000bd8: 87aa mv a5,a0 +20000bda: 4908 lw a0,16(a0) +20000bdc: 30047873 csrrci a6,mstatus,8 +20000be0: 00351893 slli a7,a0,0x3 +20000be4: 291018b3 bset a7,zero,a7 +20000be8: 9971 andi a0,a0,-4 +20000bea: 4515232f amoor.w.aq t1,a7,(a0) +20000bee: 01137333 and t1,t1,a7 +20000bf2: fe031ce3 bnez t1,20000bea +20000bf6: 0330000f fence rw,rw +20000bfa: 00279303 lh t1,2(a5) +20000bfe: 0147a883 lw a7,20(a5) +20000c02: 00887513 andi a0,a6,8 +20000c06: 20632833 sh1add a6,t1,t1 +20000c0a: 21186833 sh3add a6,a6,a7 +20000c0e: 0107a883 lw a7,16(a5) +20000c12: 08034b63 bltz t1,20000ca8 +20000c16: 00085e03 lhu t3,0(a6) +20000c1a: 01c79123 sh t3,2(a5) +20000c1e: 0330000f fence rw,rw +20000c22: 00088023 sb zero,0(a7) +20000c26: 30052073 csrs mstatus,a0 +20000c2a: 00285883 lhu a7,2(a6) +20000c2e: 4e05 li t3,1 +20000c30: 01031513 slli a0,t1,0x10 +20000c34: 98f2 add a7,a7,t3 +20000c36: 08c6 slli a7,a7,0x11 +20000c38: 0118d893 srli a7,a7,0x11 +20000c3c: 0bc8f8b3 maxu a7,a7,t3 +20000c40: 00e82a23 sw a4,20(a6) +20000c44: 00d82823 sw a3,16(a6) +20000c48: 00b82423 sw a1,8(a6) +20000c4c: 00c82623 sw a2,12(a6) +20000c50: 01181123 sh a7,2(a6) +20000c54: 01156533 or a0,a0,a7 +20000c58: 4b98 lw a4,16(a5) +20000c5a: 300476f3 csrrci a3,mstatus,8 +20000c5e: 00371613 slli a2,a4,0x3 +20000c62: 28c01633 bset a2,zero,a2 +20000c66: 9b71 andi a4,a4,-4 +20000c68: 44c725af amoor.w.aq a1,a2,(a4) +20000c6c: 8df1 and a1,a1,a2 +20000c6e: fded bnez a1,20000c68 +20000c70: 0330000f fence rw,rw +20000c74: 0047d603 lhu a2,4(a5) +20000c78: 4b98 lw a4,16(a5) +20000c7a: 00c81023 sh a2,0(a6) +20000c7e: 00679223 sh t1,4(a5) +20000c82: 0330000f fence rw,rw +20000c86: 00070023 sb zero,0(a4) +20000c8a: 0086f713 andi a4,a3,8 +20000c8e: 30072073 csrs mstatus,a4 +20000c92: 0007c703 lbu a4,0(a5) +20000c96: 47dc lw a5,12(a5) +20000c98: 6689 lui a3,0x2 +20000c9a: 04468693 addi a3,a3,68 # 2044 +20000c9e: 28e01733 bset a4,zero,a4 +20000ca2: 97b6 add a5,a5,a3 +20000ca4: c398 sw a4,0(a5) +20000ca6: 8082 ret +20000ca8: 0330000f fence rw,rw +20000cac: 00088023 sb zero,0(a7) +20000cb0: 30052073 csrs mstatus,a0 +20000cb4: 557d li a0,-1 +20000cb6: 8082 ret + +20000cb8 : +20000cb8: 00a55703 lhu a4,10(a0) +20000cbc: 4105d793 srai a5,a1,0x10 +20000cc0: 04e7d863 bge a5,a4,20000d10 +20000cc4: 4954 lw a3,20(a0) +20000cc6: 20f7a7b3 sh1add a5,a5,a5 +20000cca: 4918 lw a4,16(a0) +20000ccc: 20d7e7b3 sh3add a5,a5,a3 +20000cd0: 300476f3 csrrci a3,mstatus,8 +20000cd4: 00371613 slli a2,a4,0x3 +20000cd8: 28c01633 bset a2,zero,a2 +20000cdc: 9b71 andi a4,a4,-4 +20000cde: 44c7282f amoor.w.aq a6,a2,(a4) +20000ce2: 00c87833 and a6,a6,a2 +20000ce6: fe081ce3 bnez a6,20000cde +20000cea: 0330000f fence rw,rw +20000cee: 0027d603 lhu a2,2(a5) +20000cf2: 0805c5b3 zext.h a1,a1 +20000cf6: 0086f713 andi a4,a3,8 +20000cfa: 080646b3 zext.h a3,a2 +20000cfe: 00b60b63 beq a2,a1,20000d14 +20000d02: 491c lw a5,16(a0) +20000d04: 0330000f fence rw,rw +20000d08: 00078023 sb zero,0(a5) +20000d0c: 30072073 csrs mstatus,a4 +20000d10: 4501 li a0,0 +20000d12: 8082 ret +20000d14: 28f69693 bseti a3,a3,0xf +20000d18: 00d79123 sh a3,2(a5) +20000d1c: 4785 li a5,1 +20000d1e: 00f50323 sb a5,6(a0) +20000d22: 4914 lw a3,16(a0) +20000d24: 0330000f fence rw,rw +20000d28: 00068023 sb zero,0(a3) +20000d2c: 30072073 csrs mstatus,a4 +20000d30: 00054683 lbu a3,0(a0) +20000d34: 4558 lw a4,12(a0) +20000d36: 6609 lui a2,0x2 +20000d38: 04460613 addi a2,a2,68 # 2044 +20000d3c: 28d016b3 bset a3,zero,a3 +20000d40: 9732 add a4,a4,a2 +20000d42: 853e mv a0,a5 +20000d44: c314 sw a3,0(a4) +20000d46: 8082 ret + +20000d48 : +20000d48: 1141 addi sp,sp,-16 +20000d4a: c422 sw s0,8(sp) +20000d4c: c226 sw s1,4(sp) +20000d4e: c606 sw ra,12(sp) +20000d50: 84aa mv s1,a0 +20000d52: 842e mv s0,a1 +20000d54: be502773 csrr a4,0xbe5 +20000d58: 01071793 slli a5,a4,0x10 +20000d5c: 0407da63 bgez a5,20000db0 +20000d60: c04a sw s2,0(sp) +20000d62: 20002937 lui s2,0x20002 +20000d66: 8dc90793 addi a5,s2,-1828 # 200018dc +20000d6a: 0007c703 lbu a4,0(a5) +20000d6e: 47dc lw a5,12(a5) +20000d70: 20f74733 sh2add a4,a4,a5 +20000d74: 579c lw a5,40(a5) +20000d76: 4b18 lw a4,16(a4) +20000d78: 40f506b3 sub a3,a0,a5 +20000d7c: 8f1d sub a4,a4,a5 +20000d7e: 04e6ed63 bltu a3,a4,20000dd8 +20000d82: 00002033 sltz zero,zero +20000d86: 400b07b7 lui a5,0x400b0 +20000d8a: 53d8 lw a4,36(a5) +20000d8c: 4501 li a0,0 +20000d8e: 0ab76963 bltu a4,a1,20000e40 +20000d92: 579c lw a5,40(a5) +20000d94: 8f0d sub a4,a4,a1 +20000d96: 4902 lw s2,0(sp) +20000d98: 0097b533 sltu a0,a5,s1 +20000d9c: 00e03733 snez a4,a4 +20000da0: 00153513 seqz a0,a0 +20000da4: 8d59 or a0,a0,a4 +20000da6: 40b2 lw ra,12(sp) +20000da8: 4422 lw s0,8(sp) +20000daa: 4492 lw s1,4(sp) +20000dac: 0141 addi sp,sp,16 +20000dae: 8082 ret +20000db0: 400b07b7 lui a5,0x400b0 +20000db4: 53d8 lw a4,36(a5) +20000db6: 4501 li a0,0 +20000db8: feb767e3 bltu a4,a1,20000da6 +20000dbc: 579c lw a5,40(a5) +20000dbe: 40b2 lw ra,12(sp) +20000dc0: 4422 lw s0,8(sp) +20000dc2: 0097b533 sltu a0,a5,s1 +20000dc6: 8f0d sub a4,a4,a1 +20000dc8: 00e03733 snez a4,a4 +20000dcc: 00153513 seqz a0,a0 +20000dd0: 4492 lw s1,4(sp) +20000dd2: 8d59 or a0,a0,a4 +20000dd4: 0141 addi sp,sp,16 +20000dd6: 8082 ret +20000dd8: 28d9 jal 20000eae +20000dda: 40a48533 sub a0,s1,a0 +20000dde: 00a4b533 sltu a0,s1,a0 +20000de2: 40b405b3 sub a1,s0,a1 +20000de6: 8d89 sub a1,a1,a0 +20000de8: 0605c263 bltz a1,20000e4c +20000dec: 200006b7 lui a3,0x20000 +20000df0: 85a6 mv a1,s1 +20000df2: 6f468693 addi a3,a3,1780 # 200006f4 +20000df6: 4701 li a4,0 +20000df8: 8622 mv a2,s0 +20000dfa: 8dc90513 addi a0,s2,-1828 +20000dfe: 3be9 jal 20000bd8 +20000e00: 85aa mv a1,a0 +20000e02: 04a05563 blez a0,20000e4c +20000e06: 400b07b7 lui a5,0x400b0 +20000e0a: 53d8 lw a4,36(a5) +20000e0c: 04876a63 bltu a4,s0,20000e60 +20000e10: 579c lw a5,40(a5) +20000e12: 0497e563 bltu a5,s1,20000e5c +20000e16: 8dc90513 addi a0,s2,-1828 +20000e1a: 3d79 jal 20000cb8 +20000e1c: 400b0737 lui a4,0x400b0 +20000e20: 535c lw a5,36(a4) +20000e22: 4501 li a0,0 +20000e24: 0087ee63 bltu a5,s0,20000e40 +20000e28: 5714 lw a3,40(a4) +20000e2a: 8f81 sub a5,a5,s0 +20000e2c: 00f03733 snez a4,a5 +20000e30: 0096b7b3 sltu a5,a3,s1 +20000e34: 0017b793 seqz a5,a5 +20000e38: 4902 lw s2,0(sp) +20000e3a: 00f76533 or a0,a4,a5 +20000e3e: b7a5 j 20000da6 +20000e40: 40b2 lw ra,12(sp) +20000e42: 4422 lw s0,8(sp) +20000e44: 4902 lw s2,0(sp) +20000e46: 4492 lw s1,4(sp) +20000e48: 0141 addi sp,sp,16 +20000e4a: 8082 ret +20000e4c: 400b0737 lui a4,0x400b0 +20000e50: 535c lw a5,36(a4) +20000e52: 0087fa63 bgeu a5,s0,20000e66 +20000e56: 4902 lw s2,0(sp) +20000e58: 4501 li a0,0 +20000e5a: b7b1 j 20000da6 +20000e5c: fa871de3 bne a4,s0,20000e16 +20000e60: 00002033 sltz zero,zero +20000e64: bf4d j 20000e16 +20000e66: 5718 lw a4,40(a4) +20000e68: 8f81 sub a5,a5,s0 +20000e6a: 00f037b3 snez a5,a5 +20000e6e: 00973733 sltu a4,a4,s1 +20000e72: 00173713 seqz a4,a4 +20000e76: 4902 lw s2,0(sp) +20000e78: 00e7e533 or a0,a5,a4 +20000e7c: b72d j 20000da6 + +20000e7e : +20000e7e: bff487b7 lui a5,0xbff48 +20000e82: 97aa add a5,a5,a0 +20000e84: 20002537 lui a0,0x20002 +20000e88: 0017b793 seqz a5,a5 +20000e8c: b2c50513 addi a0,a0,-1236 # 20001b2c +20000e90: 20001637 lui a2,0x20001 +20000e94: 953e add a0,a0,a5 +20000e96: 7f460613 addi a2,a2,2036 # 200017f4 +20000e9a: e38ff06f j 200004d2 + +20000e9e : +20000e9e: 514c lw a1,36(a0) +20000ea0: 87aa mv a5,a0 +20000ea2: 5788 lw a0,40(a5) +20000ea4: 872e mv a4,a1 +20000ea6: 53cc lw a1,36(a5) +20000ea8: feb71de3 bne a4,a1,20000ea2 +20000eac: 8082 ret + +20000eae : +20000eae: 400b07b7 lui a5,0x400b0 +20000eb2: 53cc lw a1,36(a5) +20000eb4: 5788 lw a0,40(a5) +20000eb6: 872e mv a4,a1 +20000eb8: 53cc lw a1,36(a5) +20000eba: fee59de3 bne a1,a4,20000eb4 +20000ebe: 8082 ret + +20000ec0 : +20000ec0: 400b0737 lui a4,0x400b0 +20000ec4: 535c lw a5,36(a4) +20000ec6: 02872803 lw a6,40(a4) # 400b0028 <__StackTop+0x2002e028> +20000eca: 86be mv a3,a5 +20000ecc: 535c lw a5,36(a4) +20000ece: fed79ce3 bne a5,a3,20000ec6 +20000ed2: 01050633 add a2,a0,a6 +20000ed6: 95be add a1,a1,a5 +20000ed8: 00a63733 sltu a4,a2,a0 +20000edc: 972e add a4,a4,a1 +20000ede: 02f76c63 bltu a4,a5,20000f16 +20000ee2: 02e78863 beq a5,a4,20000f12 +20000ee6: 400b07b7 lui a5,0x400b0 +20000eea: 53dc lw a5,36(a5) +20000eec: 00e7f763 bgeu a5,a4,20000efa +20000ef0: 400b06b7 lui a3,0x400b0 +20000ef4: 52dc lw a5,36(a3) +20000ef6: fee7efe3 bltu a5,a4,20000ef4 +20000efa: 00e79b63 bne a5,a4,20000f10 +20000efe: 400b0737 lui a4,0x400b0 +20000f02: a021 j 20000f0a +20000f04: 5354 lw a3,36(a4) +20000f06: 00f69563 bne a3,a5,20000f10 +20000f0a: 5714 lw a3,40(a4) +20000f0c: fec6ece3 bltu a3,a2,20000f04 +20000f10: 8082 ret +20000f12: fd067ae3 bgeu a2,a6,20000ee6 +20000f16: 400b07b7 lui a5,0x400b0 +20000f1a: 53dc lw a5,36(a5) +20000f1c: 577d li a4,-1 +20000f1e: 863a mv a2,a4 +20000f20: fce798e3 bne a5,a4,20000ef0 +20000f24: 863e mv a2,a5 +20000f26: bfe1 j 20000efe + +20000f28 : +20000f28: 400107b7 lui a5,0x40010 +20000f2c: 20a52733 sh1add a4,a0,a0 +20000f30: 20f74733 sh2add a4,a4,a5 +20000f34: 00472803 lw a6,4(a4) # 400b0004 <__StackTop+0x2002e004> +20000f38: 67c1 lui a5,0x10 +20000f3a: 00f87363 bgeu a6,a5,20000f40 +20000f3e: c35c sw a5,4(a4) +20000f40: ffc50813 addi a6,a0,-4 +20000f44: 4785 li a5,1 +20000f46: 0707f663 bgeu a5,a6,20000fb2 +20000f4a: 20002337 lui t1,0x20002 +20000f4e: ae030313 addi t1,t1,-1312 # 20001ae0 +20000f52: 206547b3 sh2add a5,a0,t1 +20000f56: 0007a883 lw a7,0(a5) # 10000 +20000f5a: 678d lui a5,0x3 +20000f5c: 97ba add a5,a5,a4 +20000f5e: 28b01e13 bseti t3,zero,0xb +20000f62: 01c7a023 sw t3,0(a5) # 3000 +20000f66: 050a slli a0,a0,0x2 +20000f68: 02089963 bnez a7,20000f9a +20000f6c: 00072883 lw a7,0(a4) +20000f70: 0616 slli a2,a2,0x5 +20000f72: 6785 lui a5,0x1 +20000f74: 01164633 xor a2,a2,a7 +20000f78: 0e067613 andi a2,a2,224 +20000f7c: 97ba add a5,a5,a4 +20000f7e: c390 sw a2,0(a5) +20000f80: 4605 li a2,1 +20000f82: 07067163 bgeu a2,a6,20000fe4 +20000f86: 6789 lui a5,0x2 +20000f88: 97ba add a5,a5,a4 +20000f8a: 28b01613 bseti a2,zero,0xb +20000f8e: c390 sw a2,0(a5) +20000f90: 951a add a0,a0,t1 +20000f92: 67c1 lui a5,0x10 +20000f94: c114 sw a3,0(a0) +20000f96: c35c sw a5,4(a4) +20000f98: 8082 ret +20000f9a: 01432783 lw a5,20(t1) +20000f9e: 0317d7b3 divu a5,a5,a7 +20000fa2: 0785 addi a5,a5,1 # 10001 +20000fa4: 20f7a7b3 sh1add a5,a5,a5 +20000fa8: ffe78793 addi a5,a5,-2 +20000fac: fe07dee3 bgez a5,20000fa8 +20000fb0: bf75 j 20000f6c +20000fb2: f8f59ce3 bne a1,a5,20000f4a +20000fb6: 678d lui a5,0x3 +20000fb8: 97ba add a5,a5,a4 +20000fba: 480d li a6,3 +20000fbc: 0107a023 sw a6,0(a5) # 3000 +20000fc0: 471c lw a5,8(a4) +20000fc2: 8b85 andi a5,a5,1 +20000fc4: dff5 beqz a5,20000fc0 +20000fc6: 00072803 lw a6,0(a4) +20000fca: 0616 slli a2,a2,0x5 +20000fcc: 6785 lui a5,0x1 +20000fce: 01064633 xor a2,a2,a6 +20000fd2: 0e067613 andi a2,a2,224 +20000fd6: 97ba add a5,a5,a4 +20000fd8: 20002337 lui t1,0x20002 +20000fdc: 050a slli a0,a0,0x2 +20000fde: c390 sw a2,0(a5) +20000fe0: ae030313 addi t1,t1,-1312 # 20001ae0 +20000fe4: 00072803 lw a6,0(a4) +20000fe8: 28b01633 bset a2,zero,a1 +20000fec: 0105c5b3 xor a1,a1,a6 +20000ff0: 898d andi a1,a1,3 +20000ff2: c38c sw a1,0(a5) +20000ff4: 471c lw a5,8(a4) +20000ff6: 8ff1 and a5,a5,a2 +20000ff8: dff5 beqz a5,20000ff4 +20000ffa: b771 j 20000f86 + +20000ffc : +20000ffc: 200027b7 lui a5,0x20002 +20001000: ae078793 addi a5,a5,-1312 # 20001ae0 +20001004: 20f54533 sh2add a0,a0,a5 +20001008: 4108 lw a0,0(a0) +2000100a: 8082 ret + +2000100c : +2000100c: 00b727b7 lui a5,0xb72 +20001010: b0078793 addi a5,a5,-1280 # b71b00 +20001014: 02b7d7b3 divu a5,a5,a1 +20001018: 00052883 lw a7,0(a0) +2000101c: 06c2 slli a3,a3,0x10 +2000101e: 0732 slli a4,a4,0xc +20001020: 00e6e833 or a6,a3,a4 +20001024: 02f65633 divu a2,a2,a5 +20001028: 0408c463 bltz a7,20001070 +2000102c: 400587b7 lui a5,0x40058 +20001030: 6711 lui a4,0x4 +20001032: 06f50063 beq a0,a5,20001092 +20001036: 400227b7 lui a5,0x40022 +2000103a: c398 sw a4,0(a5) +2000103c: 400206b7 lui a3,0x40020 +20001040: 400237b7 lui a5,0x40023 +20001044: c398 sw a4,0(a5) +20001046: 06a1 addi a3,a3,8 # 40020008 <__StackTop+0x1ff9e008> +20001048: 429c lw a5,0(a3) +2000104a: 40f777b3 andn a5,a4,a5 +2000104e: ffed bnez a5,20001048 +20001050: 670d lui a4,0x3 +20001052: c10c sw a1,0(a0) +20001054: 0711 addi a4,a4,4 # 3004 +20001056: c510 sw a2,8(a0) +20001058: 972a add a4,a4,a0 +2000105a: 02100793 li a5,33 +2000105e: c31c sw a5,0(a4) +20001060: 411c lw a5,0(a0) +20001062: fe07dfe3 bgez a5,20001060 +20001066: 01052623 sw a6,12(a0) +2000106a: 47a1 li a5,8 +2000106c: c31c sw a5,0(a4) +2000106e: 8082 ret +20001070: 411c lw a5,0(a0) +20001072: 03f7f793 andi a5,a5,63 +20001076: fab79be3 bne a5,a1,2000102c +2000107a: 451c lw a5,8(a0) +2000107c: 07d2 slli a5,a5,0x14 +2000107e: 83d1 srli a5,a5,0x14 +20001080: fac796e3 bne a5,a2,2000102c +20001084: 455c lw a5,12(a0) +20001086: 00077737 lui a4,0x77 +2000108a: 8ff9 and a5,a5,a4 +2000108c: fb0790e3 bne a5,a6,2000102c +20001090: 8082 ret +20001092: 6721 lui a4,0x8 +20001094: b74d j 20001036 + +20001096 : +20001096: 401087b7 lui a5,0x40108 +2000109a: 20a52533 sh1add a0,a0,a0 +2000109e: 20f54533 sh2add a0,a0,a5 +200010a2: c14c sw a1,4(a0) +200010a4: 4785 li a5,1 +200010a6: c11c sw a5,0(a0) +200010a8: 8082 ret + +200010aa : +200010aa: 67a1 lui a5,0x8 +200010ac: dfa78793 addi a5,a5,-518 # 7dfa +200010b0: 0007d783 lhu a5,0(a5) +200010b4: 4585 li a1,1 +200010b6: 8782 jr a5 + +200010b8 : +200010b8: 400e17b7 lui a5,0x400e1 +200010bc: 82878793 addi a5,a5,-2008 # 400e0828 <__StackTop+0x2005e828> +200010c0: 4398 lw a4,0(a5) +200010c2: df7d beqz a4,200010c0 +200010c4: 0330000f fence rw,rw +200010c8: 8082 ret + +200010ca : +200010ca: 400e17b7 lui a5,0x400e1 +200010ce: 873e mv a4,a5 +200010d0: 82c70713 addi a4,a4,-2004 # 782c +200010d4: 80c78793 addi a5,a5,-2036 # 400e080c <__StackTop+0x2005e80c> +200010d8: 0330000f fence rw,rw +200010dc: 0007a023 sw zero,0(a5) +200010e0: 0791 addi a5,a5,4 +200010e2: fee79be3 bne a5,a4,200010d8 +200010e6: 8082 ret + +200010e8 : +200010e8: 6785 lui a5,0x1 +200010ea: aa078793 addi a5,a5,-1376 # aa0 +200010ee: 40048737 lui a4,0x40048 +200010f2: c31c sw a5,0(a4) +200010f4: 02f00793 li a5,47 +200010f8: c75c sw a5,12(a4) +200010fa: 00fab6b7 lui a3,0xfab +200010fe: 4004a7b7 lui a5,0x4004a +20001102: c394 sw a3,0(a5) +20001104: 435c lw a5,4(a4) +20001106: fe07dfe3 bgez a5,20001104 +2000110a: 8082 ret + +2000110c : +2000110c: 8082 ret + +2000110e : +2000110e: 20002537 lui a0,0x20002 +20001112: 1141 addi sp,sp,-16 +20001114: 81850513 addi a0,a0,-2024 # 20001818 +20001118: c606 sw ra,12(sp) +2000111a: b78ff0ef jal 20000492 + +2000111e : +2000111e: 1141 addi sp,sp,-16 +20001120: c422 sw s0,8(sp) +20001122: c226 sw s1,4(sp) +20001124: 20002437 lui s0,0x20002 +20001128: 200024b7 lui s1,0x20002 +2000112c: c606 sw ra,12(sp) +2000112e: 90840793 addi a5,s0,-1784 # 20001908 <__pre_init_runtime_init_bootrom_reset> +20001132: 94048493 addi s1,s1,-1728 # 20001940 +20001136: 0097f963 bgeu a5,s1,20001148 +2000113a: 90840413 addi s0,s0,-1784 +2000113e: 401c lw a5,0(s0) +20001140: 0411 addi s0,s0,4 +20001142: 9782 jalr a5 +20001144: fe946de3 bltu s0,s1,2000113e +20001148: 40b2 lw ra,12(sp) +2000114a: 4422 lw s0,8(sp) +2000114c: 4492 lw s1,4(sp) +2000114e: 0141 addi sp,sp,16 +20001150: 8082 ret + +20001152 : +20001152: 1141 addi sp,sp,-16 +20001154: c422 sw s0,8(sp) +20001156: c226 sw s1,4(sp) +20001158: 20002437 lui s0,0x20002 +2000115c: 200024b7 lui s1,0x20002 +20001160: c606 sw ra,12(sp) +20001162: 93040793 addi a5,s0,-1744 # 20001930 <__pre_init_first_per_core_initializer> +20001166: 94048493 addi s1,s1,-1728 # 20001940 +2000116a: 0097f963 bgeu a5,s1,2000117c +2000116e: 93040413 addi s0,s0,-1744 +20001172: 401c lw a5,0(s0) +20001174: 0411 addi s0,s0,4 +20001176: 9782 jalr a5 +20001178: fe946de3 bltu s0,s1,20001172 +2000117c: 40b2 lw ra,12(sp) +2000117e: 4422 lw s0,8(sp) +20001180: 4492 lw s1,4(sp) +20001182: 0141 addi sp,sp,16 +20001184: 8082 ret + +20001186 : +20001186: efef47b7 lui a5,0xefef4 +2000118a: b7f78793 addi a5,a5,-1153 # efef3b7f <__StackTop+0xcfe71b7f> +2000118e: 400226b7 lui a3,0x40022 +20001192: 03f40737 lui a4,0x3f40 +20001196: c29c sw a5,0(a3) +20001198: 1759 addi a4,a4,-10 # 3f3fff6 +2000119a: 400237b7 lui a5,0x40023 +2000119e: 400206b7 lui a3,0x40020 +200011a2: c398 sw a4,0(a5) +200011a4: 06a1 addi a3,a3,8 # 40020008 <__StackTop+0x1ff9e008> +200011a6: 429c lw a5,0(a3) +200011a8: 40f777b3 andn a5,a4,a5 +200011ac: ffed bnez a5,200011a6 +200011ae: 8082 ret + +200011b0 : +200011b0: 501107b7 lui a5,0x50110 +200011b4: 47f8 lw a4,76(a5) +200011b6: 67a1 lui a5,0x8 +200011b8: 00f70363 beq a4,a5,200011be +200011bc: 8082 ret +200011be: 501127b7 lui a5,0x50112 +200011c2: 00040737 lui a4,0x40 +200011c6: c7f8 sw a4,76(a5) +200011c8: 8082 ret + +200011ca : +200011ca: 20000737 lui a4,0x20000 +200011ce: 177d addi a4,a4,-1 # 1fffffff +200011d0: 400237b7 lui a5,0x40023 +200011d4: 400206b7 lui a3,0x40020 +200011d8: c398 sw a4,0(a5) +200011da: 06a1 addi a3,a3,8 # 40020008 <__StackTop+0x1ff9e008> +200011dc: 429c lw a5,0(a3) +200011de: 40f777b3 andn a5,a4,a5 +200011e2: ffed bnez a5,200011dc +200011e4: 8082 ret + +200011e6 : +200011e6: 6515 lui a0,0x5 +200011e8: 1141 addi sp,sp,-16 +200011ea: 25350513 addi a0,a0,595 # 5253 +200011ee: c606 sw ra,12(sp) +200011f0: 3d6d jal 200010aa +200011f2: 40b2 lw ra,12(sp) +200011f4: 87aa mv a5,a0 +200011f6: 4511 li a0,4 +200011f8: 0141 addi sp,sp,16 +200011fa: 8782 jr a5 + +200011fc : +200011fc: 6515 lui a0,0x5 +200011fe: 1141 addi sp,sp,-16 +20001200: 25350513 addi a0,a0,595 # 5253 +20001204: c606 sw ra,12(sp) +20001206: 3555 jal 200010aa +20001208: 40b2 lw ra,12(sp) +2000120a: 87aa mv a5,a0 +2000120c: 4505 li a0,1 +2000120e: 0141 addi sp,sp,16 +20001210: 8782 jr a5 + +20001212 : +20001212: b44ff06f j 20000556 + +20001216 : +20001216: 1141 addi sp,sp,-16 +20001218: c422 sw s0,8(sp) +2000121a: c606 sw ra,12(sp) +2000121c: c226 sw s1,4(sp) +2000121e: c04a sw s2,0(sp) +20001220: 40010437 lui s0,0x40010 +20001224: 08042223 sw zero,132(s0) # 40010084 <__StackTop+0x1ff8e084> +20001228: 35c1 jal 200010e8 +2000122a: 400137b7 lui a5,0x40013 +2000122e: 4705 li a4,1 +20001230: dfd8 sw a4,60(a5) +20001232: 407c lw a5,68(s0) +20001234: fee79fe3 bne a5,a4,20001232 +20001238: 470d li a4,3 +2000123a: 400137b7 lui a5,0x40013 +2000123e: db98 sw a4,48(a5) +20001240: 4405 li s0,1 +20001242: 40010737 lui a4,0x40010 +20001246: 5f1c lw a5,56(a4) +20001248: fe879fe3 bne a5,s0,20001246 +2000124c: 59683637 lui a2,0x59683 +20001250: 85a2 mv a1,s0 +20001252: f0060613 addi a2,a2,-256 # 59682f00 <__StackTop+0x39600f00> +20001256: 4709 li a4,2 +20001258: 4695 li a3,5 +2000125a: 40050537 lui a0,0x40050 +2000125e: 337d jal 2000100c +20001260: 4715 li a4,5 +20001262: 47869637 lui a2,0x47869 +20001266: 86ba mv a3,a4 +20001268: 85a2 mv a1,s0 +2000126a: c0060613 addi a2,a2,-1024 # 47868c00 <__StackTop+0x277e6c00> +2000126e: 40058537 lui a0,0x40058 +20001272: 3b69 jal 2000100c +20001274: 00b726b7 lui a3,0xb72 +20001278: b0068693 addi a3,a3,-1280 # b71b00 +2000127c: 4601 li a2,0 +2000127e: 4589 li a1,2 +20001280: 4511 li a0,4 +20001282: 315d jal 20000f28 +20001284: 08f0d6b7 lui a3,0x8f0d +20001288: 85a2 mv a1,s0 +2000128a: 18068693 addi a3,a3,384 # 8f0d180 +2000128e: 4601 li a2,0 +20001290: 4515 li a0,5 +20001292: 3959 jal 20000f28 +20001294: 02dc76b7 lui a3,0x2dc7 +20001298: c0068693 addi a3,a3,-1024 # 2dc6c00 +2000129c: 4601 li a2,0 +2000129e: 4581 li a1,0 +200012a0: 4521 li a0,8 +200012a2: 3159 jal 20000f28 +200012a4: 02dc76b7 lui a3,0x2dc7 +200012a8: c0068693 addi a3,a3,-1024 # 2dc6c00 +200012ac: 4601 li a2,0 +200012ae: 4581 li a1,0 +200012b0: 4525 li a0,9 +200012b2: 399d jal 20000f28 +200012b4: 08f0d6b7 lui a3,0x8f0d +200012b8: 18068693 addi a3,a3,384 # 8f0d180 +200012bc: 4601 li a2,0 +200012be: 4581 li a1,0 +200012c0: 4519 li a0,6 +200012c2: 319d jal 20000f28 +200012c4: 08f0d6b7 lui a3,0x8f0d +200012c8: 18068693 addi a3,a3,384 # 8f0d180 +200012cc: 4601 li a2,0 +200012ce: 4581 li a1,0 +200012d0: 451d li a0,7 +200012d2: 3999 jal 20000f28 +200012d4: 4511 li a0,4 +200012d6: 331d jal 20000ffc +200012d8: 431be7b7 lui a5,0x431be +200012dc: e8378793 addi a5,a5,-381 # 431bde83 <__StackTop+0x2313be83> +200012e0: 02f534b3 mulhu s1,a0,a5 +200012e4: 4401 li s0,0 +200012e6: 4919 li s2,6 +200012e8: 80c9 srli s1,s1,0x12 +200012ea: 8522 mv a0,s0 +200012ec: 85a6 mv a1,s1 +200012ee: 0405 addi s0,s0,1 +200012f0: 335d jal 20001096 +200012f2: ff241ce3 bne s0,s2,200012ea +200012f6: 40b2 lw ra,12(sp) +200012f8: 4422 lw s0,8(sp) +200012fa: 4492 lw s1,4(sp) +200012fc: 4902 lw s2,0(sp) +200012fe: 0141 addi sp,sp,16 +20001300: 8082 ret + +20001302 <_out_char>: +20001302: e111 bnez a0,20001306 <_out_char+0x4> +20001304: 8082 ret +20001306: a441 j 20001586 <__wrap_putchar> + +20001308 : +20001308: 200027b7 lui a5,0x20002 +2000130c: b307a783 lw a5,-1232(a5) # 20001b30 +20001310: 1101 addi sp,sp,-32 +20001312: ce06 sw ra,28(sp) +20001314: cf91 beqz a5,20001330 +20001316: 86aa mv a3,a0 +20001318: 20001537 lui a0,0x20001 +2000131c: 872e mv a4,a1 +2000131e: 30250513 addi a0,a0,770 # 20001302 <_out_char> +20001322: 006c addi a1,sp,12 +20001324: 567d li a2,-1 +20001326: 9782 jalr a5 +20001328: 40f2 lw ra,28(sp) +2000132a: 4505 li a0,1 +2000132c: 6105 addi sp,sp,32 +2000132e: 8082 ret +20001330: 2ccd jal 20001622 <__wrap_puts> +20001332: 40f2 lw ra,28(sp) +20001334: 4501 li a0,0 +20001336: 6105 addi sp,sp,32 +20001338: 8082 ret + +2000133a : +2000133a: 450d li a0,3 +2000133c: be251073 csrw 0xbe2,a0 +20001340: 157d addi a0,a0,-1 +20001342: fe055de3 bgez a0,2000133c +20001346: 6505 lui a0,0x1 +20001348: 80050513 addi a0,a0,-2048 # 800 +2000134c: 30451073 csrw mie,a0 +20001350: 30046073 csrsi mstatus,8 +20001354: 34001073 csrw mscratch,zero +20001358: 8082 ret + +2000135a <_exit>: +2000135a: 9002 ebreak +2000135c: bffd j 2000135a <_exit> + +2000135e : +2000135e: 1141 addi sp,sp,-16 +20001360: c606 sw ra,12(sp) +20001362: 3fe5 jal 2000135a <_exit> + +20001364 : +20001364: 1141 addi sp,sp,-16 +20001366: c422 sw s0,8(sp) +20001368: c226 sw s1,4(sp) +2000136a: c606 sw ra,12(sp) +2000136c: 20002437 lui s0,0x20002 +20001370: 337d jal 2000111e +20001372: 200024b7 lui s1,0x20002 +20001376: 94040793 addi a5,s0,-1728 # 20001940 +2000137a: 94048493 addi s1,s1,-1728 # 20001940 +2000137e: 0097f963 bgeu a5,s1,20001390 +20001382: 94040413 addi s0,s0,-1728 +20001386: 401c lw a5,0(s0) +20001388: 0411 addi s0,s0,4 +2000138a: 9782 jalr a5 +2000138c: fe946de3 bltu s0,s1,20001386 +20001390: 40b2 lw ra,12(sp) +20001392: 4422 lw s0,8(sp) +20001394: 4492 lw s1,4(sp) +20001396: 0141 addi sp,sp,16 +20001398: 8082 ret + +2000139a : +2000139a: 411c lw a5,0(a0) +2000139c: 852e mv a0,a1 +2000139e: 85b2 mv a1,a2 +200013a0: 8782 jr a5 + +200013a2 : +200013a2: 01554783 lbu a5,21(a0) +200013a6: 1101 addi sp,sp,-32 +200013a8: ca26 sw s1,20(sp) +200013aa: c64e sw s3,12(sp) +200013ac: c452 sw s4,8(sp) +200013ae: ce06 sw ra,28(sp) +200013b0: 89aa mv s3,a0 +200013b2: 8a2e mv s4,a1 +200013b4: 84b2 mv s1,a2 +200013b6: c7e9 beqz a5,20001480 +200013b8: 04c05863 blez a2,20001408 +200013bc: 0005c703 lbu a4,0(a1) +200013c0: 47a9 li a5,10 +200013c2: 06f70963 beq a4,a5,20001434 +200013c6: 4705 li a4,1 +200013c8: 4781 li a5,0 +200013ca: 04e48563 beq s1,a4,20001414 +200013ce: cc22 sw s0,24(sp) +200013d0: c84a sw s2,16(sp) +200013d2: c256 sw s5,4(sp) +200013d4: 001a0913 addi s2,s4,1 +200013d8: 4405 li s0,1 +200013da: 4aa9 li s5,10 +200013dc: 00094703 lbu a4,0(s2) +200013e0: 86a2 mv a3,s0 +200013e2: 0405 addi s0,s0,1 +200013e4: 07570663 beq a4,s5,20001450 +200013e8: 0905 addi s2,s2,1 +200013ea: fe8499e3 bne s1,s0,200013dc +200013ee: 4462 lw s0,24(sp) +200013f0: 4942 lw s2,16(sp) +200013f2: 4a92 lw s5,4(sp) +200013f4: 0297c063 blt a5,s1,20001414 +200013f8: 9a26 add s4,s4,s1 +200013fa: fffa4783 lbu a5,-1(s4) +200013fe: 17cd addi a5,a5,-13 +20001400: 0017b793 seqz a5,a5 +20001404: 00f98a23 sb a5,20(s3) +20001408: 40f2 lw ra,28(sp) +2000140a: 44d2 lw s1,20(sp) +2000140c: 49b2 lw s3,12(sp) +2000140e: 4a22 lw s4,8(sp) +20001410: 6105 addi sp,sp,32 +20001412: 8082 ret +20001414: 0009a703 lw a4,0(s3) +20001418: 00fa0533 add a0,s4,a5 +2000141c: 40f485b3 sub a1,s1,a5 +20001420: 9702 jalr a4 +20001422: 9a26 add s4,s4,s1 +20001424: fffa4783 lbu a5,-1(s4) +20001428: 17cd addi a5,a5,-13 +2000142a: 0017b793 seqz a5,a5 +2000142e: 00f98a23 sb a5,20(s3) +20001432: bfd9 j 20001408 +20001434: 01454783 lbu a5,20(a0) +20001438: f7d9 bnez a5,200013c6 +2000143a: 411c lw a5,0(a0) +2000143c: 20002537 lui a0,0x20002 +20001440: 8c050513 addi a0,a0,-1856 # 200018c0 +20001444: 4589 li a1,2 +20001446: 9782 jalr a5 +20001448: 4785 li a5,1 +2000144a: f8f492e3 bne s1,a5,200013ce +2000144e: b76d j 200013f8 +20001450: fff94603 lbu a2,-1(s2) +20001454: 4735 li a4,13 +20001456: f8e609e3 beq a2,a4,200013e8 +2000145a: 40f685b3 sub a1,a3,a5 +2000145e: 00fa0533 add a0,s4,a5 +20001462: 00d7d563 bge a5,a3,2000146c +20001466: 0009a783 lw a5,0(s3) +2000146a: 9782 jalr a5 +2000146c: 0009a783 lw a5,0(s3) +20001470: 20002537 lui a0,0x20002 +20001474: 8c050513 addi a0,a0,-1856 # 200018c0 +20001478: 4589 li a1,2 +2000147a: 9782 jalr a5 +2000147c: 87a2 mv a5,s0 +2000147e: b7ad j 200013e8 +20001480: 411c lw a5,0(a0) +20001482: 40f2 lw ra,28(sp) +20001484: 44d2 lw s1,20(sp) +20001486: 49b2 lw s3,12(sp) +20001488: 8552 mv a0,s4 +2000148a: 4a22 lw s4,8(sp) +2000148c: 85b2 mv a1,a2 +2000148e: 6105 addi sp,sp,32 +20001490: 8782 jr a5 + +20001492 : +20001492: 7139 addi sp,sp,-64 +20001494: dc22 sw s0,56(sp) +20001496: da26 sw s1,52(sp) +20001498: d84a sw s2,48(sp) +2000149a: d64e sw s3,44(sp) +2000149c: de06 sw ra,60(sp) +2000149e: 89b2 mv s3,a2 +200014a0: d452 sw s4,40(sp) +200014a2: d256 sw s5,36(sp) +200014a4: d05a sw s6,32(sp) +200014a6: 892a mv s2,a0 +200014a8: 84ae mv s1,a1 +200014aa: 8436 mv s0,a3 +200014ac: 3409 jal 20000eae +200014ae: 000f47b7 lui a5,0xf4 +200014b2: 24078793 addi a5,a5,576 # f4240 +200014b6: 97aa add a5,a5,a0 +200014b8: 00a7b533 sltu a0,a5,a0 +200014bc: 80000737 lui a4,0x80000 +200014c0: 00b50633 add a2,a0,a1 +200014c4: 177d addi a4,a4,-1 # 7fffffff <__StackTop+0x5ff7dfff> +200014c6: 85be mv a1,a5 +200014c8: 00c77463 bgeu a4,a2,200014d0 +200014cc: 863a mv a2,a4 +200014ce: 55fd li a1,-1 +200014d0: 20002ab7 lui s5,0x20002 +200014d4: 900a8513 addi a0,s5,-1792 # 20001900 +200014d8: e61fe0ef jal 20000338 +200014dc: 57fd li a5,-1 +200014de: 8b2a mv s6,a0 +200014e0: 08f48f63 beq s1,a5,2000157e +200014e4: c439 beqz s0,20001532 +200014e6: 20001a37 lui s4,0x20001 +200014ea: 3a2a0a13 addi s4,s4,930 # 200013a2 +200014ee: 8101a403 lw s0,-2032(gp) # 20001b38 +200014f2: c01d beqz s0,20001518 +200014f4: 04099463 bnez s3,2000153c +200014f8: a019 j 200014fe +200014fa: 4800 lw s0,16(s0) +200014fc: cc11 beqz s0,20001518 +200014fe: 401c lw a5,0(s0) +20001500: 8626 mv a2,s1 +20001502: 85ca mv a1,s2 +20001504: 8522 mv a0,s0 +20001506: dbf5 beqz a5,200014fa +20001508: 80c1a783 lw a5,-2036(gp) # 20001b34 +2000150c: c399 beqz a5,20001512 +2000150e: fef416e3 bne s0,a5,200014fa +20001512: 9a02 jalr s4 +20001514: 4800 lw s0,16(s0) +20001516: f465 bnez s0,200014fe +20001518: 040b1e63 bnez s6,20001574 +2000151c: 50f2 lw ra,60(sp) +2000151e: 5462 lw s0,56(sp) +20001520: 5942 lw s2,48(sp) +20001522: 59b2 lw s3,44(sp) +20001524: 5a22 lw s4,40(sp) +20001526: 5a92 lw s5,36(sp) +20001528: 5b02 lw s6,32(sp) +2000152a: 8526 mv a0,s1 +2000152c: 54d2 lw s1,52(sp) +2000152e: 6121 addi sp,sp,64 +20001530: 8082 ret +20001532: 20001a37 lui s4,0x20001 +20001536: 39aa0a13 addi s4,s4,922 # 2000139a +2000153a: bf55 j 200014ee +2000153c: ce5e sw s7,28(sp) +2000153e: 4ba9 li s7,10 +20001540: a019 j 20001546 +20001542: 4800 lw s0,16(s0) +20001544: c40d beqz s0,2000156e +20001546: 401c lw a5,0(s0) +20001548: 8626 mv a2,s1 +2000154a: 85ca mv a1,s2 +2000154c: 8522 mv a0,s0 +2000154e: dbf5 beqz a5,20001542 +20001550: 80c1a783 lw a5,-2036(gp) # 20001b34 +20001554: c399 beqz a5,2000155a +20001556: fe8796e3 bne a5,s0,20001542 +2000155a: 9a02 jalr s4 +2000155c: 8522 mv a0,s0 +2000155e: 00f10593 addi a1,sp,15 +20001562: 4605 li a2,1 +20001564: 017107a3 sb s7,15(sp) +20001568: 9a02 jalr s4 +2000156a: 4800 lw s0,16(s0) +2000156c: fc69 bnez s0,20001546 +2000156e: 4bf2 lw s7,28(sp) +20001570: fa0b06e3 beqz s6,2000151c +20001574: 900a8513 addi a0,s5,-1792 +20001578: e2bfe0ef jal 200003a2 +2000157c: b745 j 2000151c +2000157e: 854a mv a0,s2 +20001580: 2aed jal 2000177a +20001582: 84aa mv s1,a0 +20001584: b785 j 200014e4 + +20001586 <__wrap_putchar>: +20001586: 7179 addi sp,sp,-48 +20001588: d226 sw s1,36(sp) +2000158a: d606 sw ra,44(sp) +2000158c: d422 sw s0,40(sp) +2000158e: ce4e sw s3,28(sp) +20001590: cc52 sw s4,24(sp) +20001592: 84aa mv s1,a0 +20001594: 00a107a3 sb a0,15(sp) +20001598: 917ff0ef jal 20000eae +2000159c: 000f47b7 lui a5,0xf4 +200015a0: 24078793 addi a5,a5,576 # f4240 +200015a4: 97aa add a5,a5,a0 +200015a6: 00a7b633 sltu a2,a5,a0 +200015aa: 80000737 lui a4,0x80000 +200015ae: 962e add a2,a2,a1 +200015b0: 177d addi a4,a4,-1 # 7fffffff <__StackTop+0x5ff7dfff> +200015b2: 85be mv a1,a5 +200015b4: 00c77463 bgeu a4,a2,200015bc <__wrap_putchar+0x36> +200015b8: 863a mv a2,a4 +200015ba: 55fd li a1,-1 +200015bc: 20002a37 lui s4,0x20002 +200015c0: 900a0513 addi a0,s4,-1792 # 20001900 +200015c4: d75fe0ef jal 20000338 +200015c8: 8101a403 lw s0,-2032(gp) # 20001b38 +200015cc: 89aa mv s3,a0 +200015ce: c405 beqz s0,200015f6 <__wrap_putchar+0x70> +200015d0: d04a sw s2,32(sp) +200015d2: a019 j 200015d8 <__wrap_putchar+0x52> +200015d4: 4800 lw s0,16(s0) +200015d6: cc19 beqz s0,200015f4 <__wrap_putchar+0x6e> +200015d8: 401c lw a5,0(s0) +200015da: 4605 li a2,1 +200015dc: 00f10593 addi a1,sp,15 +200015e0: 8522 mv a0,s0 +200015e2: dbed beqz a5,200015d4 <__wrap_putchar+0x4e> +200015e4: 80c1a783 lw a5,-2036(gp) # 20001b34 +200015e8: c399 beqz a5,200015ee <__wrap_putchar+0x68> +200015ea: fef415e3 bne s0,a5,200015d4 <__wrap_putchar+0x4e> +200015ee: 3b55 jal 200013a2 +200015f0: 4800 lw s0,16(s0) +200015f2: f07d bnez s0,200015d8 <__wrap_putchar+0x52> +200015f4: 5902 lw s2,32(sp) +200015f6: 00099a63 bnez s3,2000160a <__wrap_putchar+0x84> +200015fa: 50b2 lw ra,44(sp) +200015fc: 5422 lw s0,40(sp) +200015fe: 49f2 lw s3,28(sp) +20001600: 4a62 lw s4,24(sp) +20001602: 8526 mv a0,s1 +20001604: 5492 lw s1,36(sp) +20001606: 6145 addi sp,sp,48 +20001608: 8082 ret +2000160a: 900a0513 addi a0,s4,-1792 +2000160e: d95fe0ef jal 200003a2 +20001612: 50b2 lw ra,44(sp) +20001614: 5422 lw s0,40(sp) +20001616: 49f2 lw s3,28(sp) +20001618: 4a62 lw s4,24(sp) +2000161a: 8526 mv a0,s1 +2000161c: 5492 lw s1,36(sp) +2000161e: 6145 addi sp,sp,48 +20001620: 8082 ret + +20001622 <__wrap_puts>: +20001622: 1141 addi sp,sp,-16 +20001624: c606 sw ra,12(sp) +20001626: c422 sw s0,8(sp) +20001628: c226 sw s1,4(sp) +2000162a: 842a mv s0,a0 +2000162c: 22b9 jal 2000177a +2000162e: 84aa mv s1,a0 +20001630: 4685 li a3,1 +20001632: 8522 mv a0,s0 +20001634: 85a6 mv a1,s1 +20001636: 8636 mv a2,a3 +20001638: 3da9 jal 20001492 +2000163a: 8101a403 lw s0,-2032(gp) # 20001b38 +2000163e: c411 beqz s0,2000164a <__wrap_puts+0x28> +20001640: 405c lw a5,4(s0) +20001642: cb91 beqz a5,20001656 <__wrap_puts+0x34> +20001644: 9782 jalr a5 +20001646: 4800 lw s0,16(s0) +20001648: fc65 bnez s0,20001640 <__wrap_puts+0x1e> +2000164a: 40b2 lw ra,12(sp) +2000164c: 4422 lw s0,8(sp) +2000164e: 8526 mv a0,s1 +20001650: 4492 lw s1,4(sp) +20001652: 0141 addi sp,sp,16 +20001654: 8082 ret +20001656: 4800 lw s0,16(s0) +20001658: f465 bnez s0,20001640 <__wrap_puts+0x1e> +2000165a: 40b2 lw ra,12(sp) +2000165c: 4422 lw s0,8(sp) +2000165e: 8526 mv a0,s1 +20001660: 4492 lw s1,4(sp) +20001662: 0141 addi sp,sp,16 +20001664: 8082 ret + +20001666 : +20001666: 4502 lw a0,0(sp) +20001668: 4592 lw a1,4(sp) +2000166a: 4622 lw a2,8(sp) +2000166c: 41b2 lw gp,12(sp) +2000166e: 0141 addi sp,sp,16 +20001670: 8602 jr a2 + +20001672 : +20001672: 1141 addi sp,sp,-16 +20001674: c422 sw s0,8(sp) +20001676: c606 sw ra,12(sp) +20001678: 842a mv s0,a0 +2000167a: 3ce1 jal 20001152 +2000167c: 87a2 mv a5,s0 +2000167e: 4422 lw s0,8(sp) +20001680: 40b2 lw ra,12(sp) +20001682: 0141 addi sp,sp,16 +20001684: 8782 jr a5 + +20001686 : +20001686: 7139 addi sp,sp,-64 +20001688: da26 sw s1,52(sp) +2000168a: 84aa mv s1,a0 +2000168c: 4565 li a0,25 +2000168e: de06 sw ra,60(sp) +20001690: dc22 sw s0,56(sp) +20001692: d84a sw s2,48(sp) +20001694: d64e sw s3,44(sp) +20001696: 892e mv s2,a1 +20001698: 89b2 mv s3,a2 +2000169a: f49fe0ef jal 200005e2 +2000169e: 4581 li a1,0 +200016a0: 842a mv s0,a0 +200016a2: 4565 li a0,25 +200016a4: f09fe0ef jal 200005ac +200016a8: 4785 li a5,1 +200016aa: c402 sw zero,8(sp) +200016ac: c602 sw zero,12(sp) +200016ae: ca4e sw s3,20(sp) +200016b0: cc4a sw s2,24(sp) +200016b2: ce26 sw s1,28(sp) +200016b4: c83e sw a5,16(sp) +200016b6: 002c addi a1,sp,8 +200016b8: 4681 li a3,0 +200016ba: 4601 li a2,0 +200016bc: d0000737 lui a4,0xd0000 +200016c0: 4519 li a0,6 +200016c2: ca85 beqz a3,200016f2 +200016c4: 4b3c lw a5,80(a4) +200016c6: 8b89 andi a5,a5,2 +200016c8: dff5 beqz a5,200016c4 +200016ca: cb74 sw a3,84(a4) +200016cc: 00102033 sgtz zero,ra +200016d0: 4b3c lw a5,80(a4) +200016d2: 8b85 andi a5,a5,1 +200016d4: e791 bnez a5,200016e0 +200016d6: 00002033 sltz zero,zero +200016da: 4b3c lw a5,80(a4) +200016dc: 8b85 andi a5,a5,1 +200016de: dfe5 beqz a5,200016d6 +200016e0: 4f3c lw a5,88(a4) +200016e2: 00d78e63 beq a5,a3,200016fe +200016e6: 4601 li a2,0 +200016e8: 20b647b3 sh2add a5,a2,a1 +200016ec: 4394 lw a3,0(a5) +200016ee: bfd1 j 200016c2 +200016f0: 4f3c lw a5,88(a4) +200016f2: 4b3c lw a5,80(a4) +200016f4: 8b85 andi a5,a5,1 +200016f6: ffed bnez a5,200016f0 +200016f8: 00102033 sgtz zero,ra +200016fc: b7e1 j 200016c4 +200016fe: 0605 addi a2,a2,1 +20001700: fea614e3 bne a2,a0,200016e8 +20001704: 85a2 mv a1,s0 +20001706: 5462 lw s0,56(sp) +20001708: 50f2 lw ra,60(sp) +2000170a: 54d2 lw s1,52(sp) +2000170c: 5942 lw s2,48(sp) +2000170e: 59b2 lw s3,44(sp) +20001710: 4565 li a0,25 +20001712: 6121 addi sp,sp,64 +20001714: e99fe06f j 200005ac + +20001718 : +20001718: 200817b7 lui a5,0x20081 +2000171c: 20080737 lui a4,0x20080 +20001720: 80078693 addi a3,a5,-2048 # 20080800 <__StackOneBottom> +20001724: 00070713 mv a4,a4 +20001728: 04e6e263 bltu a3,a4,2000176c +2000172c: 200816b7 lui a3,0x20081 +20001730: 200815b7 lui a1,0x20081 +20001734: 80078813 addi a6,a5,-2048 +20001738: ffc68693 addi a3,a3,-4 # 20080ffc <__StackOneBottom+0x7fc> +2000173c: ff058593 addi a1,a1,-16 # 20080ff0 <__StackOneBottom+0x7f0> +20001740: 80078793 addi a5,a5,-2048 +20001744: 30502673 csrr a2,mtvec +20001748: 888e mv a7,gp +2000174a: 20001737 lui a4,0x20001 +2000174e: 0116a023 sw a7,0(a3) +20001752: 67270713 addi a4,a4,1650 # 20001672 +20001756: 200016b7 lui a3,0x20001 +2000175a: 7ea7a823 sw a0,2032(a5) +2000175e: 7f07aa23 sw a6,2036(a5) +20001762: 7ee7ac23 sw a4,2040(a5) +20001766: 66668513 addi a0,a3,1638 # 20001666 +2000176a: bf31 j 20001686 +2000176c: 587d li a6,-1 +2000176e: 87c2 mv a5,a6 +20001770: 7fb00693 li a3,2043 +20001774: 7ef00593 li a1,2031 +20001778: b7f1 j 20001744 + +2000177a : +2000177a: 00357793 andi a5,a0,3 +2000177e: 872a mv a4,a0 +20001780: ef9d bnez a5,200017be +20001782: 7f7f86b7 lui a3,0x7f7f8 +20001786: f7f68693 addi a3,a3,-129 # 7f7f7f7f <__StackTop+0x5f775f7f> +2000178a: 55fd li a1,-1 +2000178c: 4310 lw a2,0(a4) +2000178e: 0711 addi a4,a4,4 +20001790: 00d677b3 and a5,a2,a3 +20001794: 97b6 add a5,a5,a3 +20001796: 8fd1 or a5,a5,a2 +20001798: 8fd5 or a5,a5,a3 +2000179a: feb789e3 beq a5,a1,2000178c +2000179e: ffc74683 lbu a3,-4(a4) +200017a2: 40a707b3 sub a5,a4,a0 +200017a6: ca8d beqz a3,200017d8 +200017a8: ffd74683 lbu a3,-3(a4) +200017ac: c29d beqz a3,200017d2 +200017ae: ffe74503 lbu a0,-2(a4) +200017b2: 00a03533 snez a0,a0 +200017b6: 953e add a0,a0,a5 +200017b8: 1579 addi a0,a0,-2 +200017ba: 8082 ret +200017bc: d2f9 beqz a3,20001782 +200017be: 00074783 lbu a5,0(a4) +200017c2: 0705 addi a4,a4,1 +200017c4: 00377693 andi a3,a4,3 +200017c8: fbf5 bnez a5,200017bc +200017ca: 8f09 sub a4,a4,a0 +200017cc: fff70513 addi a0,a4,-1 +200017d0: 8082 ret +200017d2: ffd78513 addi a0,a5,-3 +200017d6: 8082 ret +200017d8: ffc78513 addi a0,a5,-4 +200017dc: 8082 ret + ... diff --git a/demo/riscv_blink/blink_simple.hex b/demo/riscv_blink/blink_simple.hex new file mode 100644 index 0000000000..16d2a17360 --- /dev/null +++ b/demo/riscv_blink/blink_simple.hex @@ -0,0 +1,409 @@ +:020000042000DA +:100000006F00001A00000000000000006F0060197F +:100010000000000000000000000000006F00401819 +:100020000000000000000000000000005D7106C03C +:1000300016C21AC41EC62AC82ECA32CC36CE3AD030 +:100040003ED242D446D672D876DA7ADC7EDE73258A +:100050001034F3250030AAC0AEC2736651BEB2C4DC +:1000600073E540BE6341050273600430B7050020AC +:10007000AA9583A5050DE78005007370043073E52C +:1000800040BEE35305FE06459645264673101534DB +:1000900073900530731056BE824092422243B243A1 +:1000A000D2456246F246025792572258B258425EF3 +:1000B000D25E625FF25F732540BEE35005FA4245AF +:1000C0006161730020301300000013000000010084 +:1000D000A4010020A4010020A4010020A40100200C +:1000E000A4010020A4010020A4010020A4010020FC +:1000F000A4010020A4010020A4010020A4010020EC +:10010000A4010020A4010020A4010020A4010020DB +:10011000A4010020A4010020A4010020A4010020CB +:10012000A4010020A4010020A4010020A4010020BB +:10013000A4010020A4010020A4010020A4010020AB +:10014000A4010020A4010020A4010020A40100209B +:10015000A4010020A4010020A4010020A40100208B +:10016000A4010020A4010020A4010020A40100207B +:10017000A4010020A4010020A4010020A40100206B +:10018000A4010020A4010020A4010020A40100205B +:10019000A4010020A4010020A4010020A40100204B +:1001A000029002900981029000000000000000000F +:1001B000000000000000000000000000000000003F +:1001C00006005250ABB36053701800200600525026 +:1001D000861C030280180020060052505422A29D63 +:1001E00090180020F2EB8871C4180020DC18002061 +:1001F0007802002090A31AE7D3DEFFFF420101112D +:100200004403000022020020002008200302000016 +:1002100000000020FF06000000000000793512AB4E +:1002200009A0972100009381611017210800130194 +:1002300061DD170500001305F5DC731055307325DB +:1002400040F125E1971500009385C56F1386418124 +:1002500021A023A005009105E39DC5FEEF108010AD +:10026000E92AEF10C00F0290FDBF884108C2910536 +:100270001106E36CD6FE8280DC180020DC1800201A +:10028000401900200000082000000820000008207D +:1002900000100820001008200010082000000000B6 +:1002A000828021651305C5DF028500000111B707B3 +:1002B00000D022CC26CA4AC84EC606CE83A9070063 +:1002C0002A842E89B28421A80F003003230007005E +:1002D00073A007304A85A685EF00102731E51C4042 +:1002E0007377043093963700B316D028F19B2FA66E +:1002F000D744758E6DFE0F0030038306440093775C +:1003000087001840E3D206FC230234010F003003BB +:100310002300070073A00730F2406244D2444249F0 +:10032000B249054505618280F2406244D2444249A7 +:10033000B2490145056182801C41F376043013986F +:10034000370033180029F19BAFA80745B3F808011F +:10035000E39C08FE0F0030030308450093F7860076 +:100360001441634208020F0030032380060073A08B +:100370000730B70700D003870700814763140701E0 +:100380003E85828025B7370600D010422302C50083 +:100390000F0030032380060073A0073085473E8599 +:1003A00082801C417377043093963700B316D028AF +:1003B000F19B2FA6D744758E6DFE0F003003FD57BD +:1003C0002302F5001C410F003003238007009377C0 +:1003D000870073A0073033201000828041116545EB +:1003E00006C622C48528370400D0B70700021CDCEB +:1003F00009458D209147B2401CDC22444101828096 +:10040000411122C426C24AC006C6B314A0282E84B5 +:10041000370900D02285232C99008145EF00502A0E +:100420002285232099028145EF009029E5B74111EB +:1004300093050019094506C6E137411106C6793F03 +:10044000370500201305E542EF10002D9305803E8F +:1004500065457D37B316A028370700D0B78703401E +:1004600034C3910714D3B347F52098438566BE96ED +:10047000134707041377070C3786024098C2336589 +:10048000C52015478D6658C1B6971307001098C34D +:10049000828039713713002022CC2A841305037E11 +:1004A00006CE2ED232D436D63AD83EDA42DC46DEFA +:1004B000EF10201701CC4C1022852EC6EF00D0641F +:1004C000371500201305057FEF10A0150545EF0037 +:1004D000D068F3760430372700201307B7AC131821 +:1004E000370033180029719BAF280745B3F808017E +:1004F000E39C08FE0F00300313D735003A950347FD +:10050000050093F77500B317F0283378F7006311EF +:1005100008025D8F2300E5000F003003B72700209D +:10052000938707ACA3850700A18A73A00630828059 +:100530004111328506C6B13F372700200345478F5A +:10054000DD469307150093F7F70F63F3F600C147F5 +:10055000230AF78E8280B7260020938606AC814757 +:10056000130600020F0030033387F6002300070054 +:100570008507E399C7FE828081463D481D45930566 +:10058000400393F736008A073317F80013D6260086 +:100590004207518F733037BEB317F500C207D18FB2 +:1005A00073A037BE8506E39EB6FC82809357550044 +:1005B00086073315A028C176E98E138717004205F8 +:1005C000558F5D8D91C9733025BE733027BE732062 +:1005D00005BE732007BE8280733005BE733007BE30 +:1005E000828093574500F3A707BEC1833D8933D569 +:1005F000A7488280411126C206C622C44AC0AE84E2 +:1006000073790430B7270020938797AC139737008E +:100610003317E028F19BAFA6E744F98EEDFE0F00FB +:100620003003F327503013054503F19BB347F52002 +:100630009843B70700209387471A131425006306D1 +:10064000F7006384E500EF00902CF3275030F19B16 +:10065000A29784C30F0030030F003003B727002098 +:10066000938707ACA38407009377890073A00730B2 +:10067000B24022449244024941018280B7270020BF +:10068000938707ACAE971CC18280011122CC26CA89 +:1006900037240020B724002006CE9307848F93844C +:1006A000849063F897024AC84EC61304848FFD599C +:1006B0001309F00F1C409DC34135AA8522857D3F5B +:1006C000231224010F0030032104E36594FE424904 +:1006D000B249F2406244D24405618280B13DAA85AC +:1006E0002285693F230234010F0030032104E363B4 +:1006F00094FCF1BFB726002083A786B2737704303D +:10070000139637003316C028F19BAFA5C744F18D6F +:10071000EDFD0F00300383A786B20F003003238066 +:1007200007009377870073A007303320100001453E +:10073000814582805D7186C6A2C4A6C2CAC04EDE53 +:1007400052DC56DA5AD85ED662D466D26AD06ECE01 +:10075000F32750BE139707016348073293D9470028 +:1007600093F7F91F898393F93900331A3029370930 +:100770000B406396073437270020B3C73721130790 +:1007800087B0B3C7E72083AA07008D679387470424 +:10079000CA97B3C92921138B8A0023A047017D542E +:1007A000FD54039D8A00232E490363510D0883D70E +:1007B0004A009397576063DC071483C76A00639409 +:1007C000071E83968A0063C2060403A74A01B3A6E4 +:1007D000D620FD57B3E6E62083AB860003ACC60007 +:1007E0006381FB2A0327890283A70901B386EB40B3 +:1007F000998F63F4F60023A879014A854D2563C6D5 +:100800008501E310BCFAE37E75F933201000B64091 +:10081000264496440649F259625AD25A425BB25B68 +:10082000225C925C025DF24D6161828083A74A0185 +:10083000B32BAD214A85B3EBFB2003ACCB0083ACDB +:100840008B00B12DE3C585F76309BC1C634B0C1C01 +:1008500003A70B01B70700209387477383A54B01BC +:100860006305F72483978A0003D52B00C2075D8DAB +:1008700002972E87AA8DB3E7ED006384071A635BA6 +:100880000720B386BC41B3BCDC00B307EC40B387A0 +:10089000974103970B0023A4DB0023A6FB00E3484A +:1008A00007F003A54A013328E72013161700336821 +:1008B000A8208325C80083288800E3CAB7EE639484 +:1008C000F500E3E616EF2394EA0013888A0031A0CE +:1008D000832886004C46131617003A963366A620E6 +:1008E00063CDB7006381F51E0317060032883326F7 +:1008F000E7203366A620E35D07FC2390EB0023107E +:10090000A80183D74A0093975760E3C807EA83A7F3 +:100910000A017377043093963700B316D028F19B01 +:100920002FA6D744758E6DFE0F00300383D84A0082 +:10093000FD572392FA009398586083A70A010F008D +:100940003003238007009377870073A00730E3C646 +:1009500008E603A54A0103978A0033A818213368E3 +:10096000A820032388000326C800DA85635A0700FD +:1009700039A8638CC60E03970700BE85634907003C +:10098000B327E720B3E7A720D447E354D6FE23904C +:100990001501831808002310E800E3DE08FA83C776 +:1009A0006A00E38007E223830A0003978A007D55EB +:1009B0005A83E30CA7E483A84A01B327E720BA8649 +:1009C000B3E7172103D62700BA853A881316566075 +:1009D00003970700634306023E83E306A7DEB327BF +:1009E000E720B3E7172103D62700BA853A88131604 +:1009F000566003970700E35106FE80C7C4C7638AA9 +:100A0000D5002310E30083D68A002390D7002394D7 +:100A1000BA00C286E315A7FC7DB3E36A95D9E35912 +:100A20000CE203D70B0083A70A012394EA00737733 +:100A3000043093963700B316D028F19B2FA6D744E5 +:100A4000758E6DFE0F00300383D62A0083A70A013E +:100A50002390DB002391AA010F00300323800700BD +:100A60009377870073A0073099B39447E375D3F069 +:100A700023901501831808002310E800E3DD08EC3B +:100A800039BFE3117CD795BB054AD28781493789A5 +:100A90000B40D5B14A853AC619213247B306B50194 +:100AA000B3B7A6002E97BA97EDB39C492E852EC6F4 +:100AB000829725D9B24583AD0500D8416DBB8547E6 +:100AC00037890B404DB9E3F116E305BD011122CC86 +:100AD000372400201304C48D1C4806CE91CB6244F9 +:100AE000F24037250020130585B2A945056179B686 +:100AF0008D4537050B4026CA4AC84EC652C441260A +:100B0000370A0B408D44232644013D34B70700D0FB +:100B1000230094003727002003A80700130707AC21 +:100B20005C482A97B706110018C87D56FD16BD45CA +:100B30000947A300040114C42311B4002312C40004 +:100B40002394E7042149114F954E194E1D43A548A2 +:100B50002948B546394785492D45B1452390970623 +:100B6000239CE7072398D7092394C70B2390670C8E +:100B70002398170F239407112390A712239CB712D1 +:100B80002398D7142394E7162390C700239837039C +:100B9000239C270D239C0700B705002023202A0350 +:100BA000B727002026859385457323AA87B09934FB +:100BB000CE852685E53AB7270B406244D244B24938 +:100BC000224AF24023A02705424937250020130579 +:100BD00085B2A94505615DB4AA87084973780430D8 +:100BE00093183500B318102971992F2315453373C5 +:100BF0001301E31C03FE0F0030030393270083A8B7 +:100C0000470113758800332863203368182183A8AF +:100C10000701634B0308035E08002391C7010F001F +:100C20003003238008007320053083582800054EC8 +:100C300013150301F298C60893D81801B3F8C80B2E +:100C4000232AE8002328D8002324B8002326C8003C +:100C50002311180133651501984BF37604301316F0 +:100C600037003316C028719BAF25C744F18DEDFDC9 +:100C70000F00300303D64700984B2310C80023927F +:100C800067000F0030032300070013F7860073206E +:100C9000073003C70700DC4789669386460433178D +:100CA000E028B69798C382800F00300323800800A5 +:100CB000732005307D5582800357A50093D70541E9 +:100CC00063D8E7045449B3A7F7201849B3E7D720FE +:100CD000F3760430131637003316C028719B2F2883 +:100CE000C7443378C800E31C08FE0F00300303D666 +:100CF0002700B3C5050813F78600B3460608630B43 +:100D0000B6001C490F003003238007007320073012 +:100D1000014582809396F6282391D70085472303C7 +:100D2000F50014490F0030032380060073200730BC +:100D3000834605005845096613064604B316D028B5 +:100D400032973E8514C38280411122C426C206C652 +:100D5000AA842E84732750BE9317070163DA070411 +:100D60004AC0372900209307C98D03C70700DC4715 +:100D70003347F7209C57184BB306F5401D8F63EDA2 +:100D8000E60433200000B7070B40D85301456369E0 +:100D9000B70A9C570D8F024933B597003337E000EF +:100DA00013351500598DB24022449244410182808E +:100DB000B7070B40D8530145E367B7FE9C57B240D5 +:100DC000224433B597000D8F3337E00013351500FB +:100DD0009244598D41018280D9283385A44033B58E +:100DE000A400B305B440898D63C20506B706002090 +:100DF000A6859386466F014722861305C98DE93B78 +:100E0000AA856355A004B7070B40D853636A8704CB +:100E10009C5763E597041305C98D793D37070B404F +:100E20005C53014563EE87001457818F3337F00020 +:100E3000B3B7960093B7170002493365F700A5B71B +:100E4000B2402244024992444101828037070B405C +:100E50005C5363FA870002490145B1B7E31D87FA85 +:100E6000332000004DBF1857818FB337F000333760 +:100E7000970013371700024933E5E7002DB7B7870E +:100E8000F4BFAA973725002093B717001305C5B202 +:100E9000371600203E951306467F6FF08FE34C51C6 +:100EA000AA8788572E87CC53E31DB7FE8280B707E9 +:100EB0000B40CC5388572E87CC53E39DE5FE8280B0 +:100EC00037070B405C5303288702BE865C53E39CC4 +:100ED000D7FE33060501BE953337A6002E97636C07 +:100EE000F7026388E702B7070B40DC5363F7E700BC +:100EF000B7060B40DC52E3EFE7FE639BE7003707E2 +:100F00000B4021A054536395F6001457E3ECC6FE42 +:100F10008280E37A06FDB7070B40DC537D573A86A3 +:100F2000E398E7FC3E86E1BFB70701403327A520E1 +:100F30003347F72003284700C1676373F8005CC399 +:100F40001308C5FF854763F60707372300201303FF +:100F500003AEB347652083A807008D67BA97131EB9 +:100F6000B02823A0C7010A05639908028328070057 +:100F700016068567334616011376060EBA9790C398 +:100F80000546637106078967BA971316B02890C3A0 +:100F90001A95C16714C15CC3828083274301B3D70C +:100FA00017038507B3A7F7209387E7FFE3DE07FE64 +:100FB00075BFE39CF5F88D67BA970D4823A007012C +:100FC0001C47858BF5DF0328070016068567334627 +:100FD00006011376060EBA97372300200A0590C340 +:100FE000130303AE032807003316B028B3C5050169 +:100FF0008D898CC31C47F18FF5DF71B7B7270020AF +:10100000938707AE3345F52008418280B727B700A4 +:10101000938707B0B3D7B70283280500C20632070B +:1010200033E8E6003356F60263C40804B787054088 +:1010300011676300F506B727024098C3B706024060 +:10104000B737024098C3A1069C42B377F740EDFF43 +:101050000D670CC1110710C52A97930710021CC316 +:101060001C41E3DF07FE23260501A1471CC3828044 +:101070001C4193F7F703E39BB7FA1C45D207D183D2 +:10108000E396C7FA5C4537770700F98FE39007FBD3 +:10109000828021674DB7B78710403325A52033459F +:1010A000F5204CC185471CC18280A1679387A7DFCB +:1010B00083D7070085458287B7170E4093878782BD +:1010C00098437DDF0F0030038280B7170E403E87C4 +:1010D0001307C7829387C7800F00300323A0070040 +:1010E0009107E39BE7FE82808567938707AA37878E +:1010F00004401CC39307F0025CC7B7B6FA00B7A759 +:10110000044094C35C43E3DF07FE8280828037257E +:10111000002041111305858106C6EFF08FB74111FC +:1011200022C426C237240020B724002006C6930715 +:1011300084909384049463F99700130484901C4072 +:1011400011048297E36D94FEB2402244924441011F +:101150008280411122C426C237240020B7240020F7 +:1011600006C6930704939384049463F997001304C9 +:1011700004931C4011048297E36D94FEB240224414 +:10118000924441018280B747EFEF9387F7B7B726C4 +:1011900002403707F4039CC25917B7370240B7061D +:1011A000024098C3A1069C42B377F740EDFF8280CE +:1011B000B7071150F847A1676303F7008280B7278C +:1011C000115037070400F8C78280370700207D17C9 +:1011D000B7370240B706024098C3A1069C42B377D6 +:1011E000F740EDFF8280156541111305352506C6D0 +:1011F0006D3DB240AA8711454101828715654111B5 +:101200001305352506C65535B240AA870545410167 +:1012100082876FF04FB4411122C406C626C24AC06D +:101220003704014023220408C135B7370140054780 +:10123000D8DF7C40E39FE7FE0D47B737014098DBDE +:101240000544370701401C5FE39F87FE3736685926 +:10125000A285130606F009479546370505407D33FC +:10126000154737968647BA86A285130606C0378586 +:101270000540693BB726B700938606B0014689450D +:1012800011455D31B7D6F008A28593860618014650 +:1012900015455939B776DC02938606C0014681456B +:1012A00021455931B776DC02938606C00146814557 +:1012B00025459D39B7D6F008938606180146814525 +:1012C00019459D31B7D6F008938606180146814529 +:1012D0001D45993911451D33B7E71B43938737E8FF +:1012E000B334F50201441949C9802285A685050455 +:1012F0005D33E31C24FFB240224492440249410181 +:10130000828011E1828041A4B727002083A707B320 +:10131000011106CE91CFAA86371500202E8713051E +:1013200025306C007D568297F2400545056182802C +:10133000CD2CF2400145056182800D45731025BE1C +:101340007D15E35D05FE05651305058073104530C9 +:10135000736004307310003482800290FDBF41112D +:1013600006C6E53F411122C426C206C63724002026 +:101370007D33B7240020930704949384049463F985 +:101380009700130404941C4011048297E36D94FEAB +:10139000B24022449244410182801C412E85B28594 +:1013A000828783475501011126CA4EC652C406CE14 +:1013B000AA892E8AB284E9C76358C00403C705000E +:1013C000A9476309F706054781476385E40422CCF2 +:1013D0004AC856C213091A000544A94A034709001E +:1013E000A2860504630657070509E39984FE624453 +:1013F0004249924A63C09702269A8347FAFFCD1763 +:1014000093B71700238AF900F240D244B249224A26 +:101410000561828003A709003305FA00B385F44013 +:101420000297269A8347FAFFCD1793B71700238AAE +:10143000F900D9BF83474501D9F71C413725002062 +:101440001305058C894582978547E392F4F86DB7BB +:101450000346F9FF3547E309E6F8B385F64033055F +:10146000FA0063D5D70083A70900829783A70900F4 +:10147000372500201305058C89458297A287ADB7D3 +:101480001C41F240D244B2495285224AB2850561DC +:101490008287397122DC26DA4AD84ED606DEB28936 +:1014A00052D456D25AD02A89AE8436840934B747EA +:1014B0000F0093870724AA9733B5A700370700804A +:1014C0003306B5007D17BE856374C7003A86FD55A7 +:1014D000B72A002013850A90EFE01FE6FD572A8BFC +:1014E000638FF40839C4371A0020130A2A3A03A478 +:1014F00001811DC06394090419A0004811CC1C404F +:101500002686CA852285F5DB83A7C18099C3E316A9 +:10151000F4FE029A004865F4631E0B04F250625414 +:101520004259B259225A925A025B2685D2542161FD +:101530008280371A0020130AAA3955BF5ECEA94B04 +:1015400019A000480DC41C402686CA852285F5DBFB +:1015500083A7C18099C3E39687FE029A22859305EB +:10156000F1000546A3077101029A004869FCF24B9D +:10157000E3060BFA13850A90EFE0BFE245B74A8510 +:10158000ED2AAA8485B7797126D206D622D44ECE0A +:1015900052CCAA84A307A100EFF07F91B7470F00B8 +:1015A00093870724AA9733B6A700370700802E96A3 +:1015B0007D17BE856374C7003A86FD55372A002023 +:1015C00013050A90EFE05FD703A40181AA8905C43F +:1015D0004AD019A0004819CC1C4005469305F100DB +:1015E0002285EDDB83A7C18099C3E315F4FE553B4B +:1015F00000487DF00259639A0900B2502254F24922 +:10160000624A268592544561828013050A90EFE074 +:101610005FD9B2502254F249624A268592544561FC +:101620008280411106C622C426C22A84B922AA8415 +:1016300085462285A6853686A93D03A4018111C46D +:101640005C4091CB8297004865FCB24022442685DD +:10165000924441018280004865F4B24022442685CC +:10166000924441018280024592452246B2414101A5 +:101670000286411122C406C62A84E13CA287224484 +:10168000B24041018287397126DAAA84654506DEB7 +:1016900022DC4AD84ED62E89B289EFE09FF48145EC +:1016A0002A846545EFE09FF0854702C402C64ECA12 +:1016B0004ACC26CE3EC82C0081460146370700D0D2 +:1016C000194585CA3C4B898BF5DF74CB332010005C +:1016D0003C4B858B91E7332000003C4B858BE5DF4D +:1016E0003C4F638ED7000146B347B6209443D1BF29 +:1016F0003C4F3C4B858BEDFF33201000E1B70506D6 +:10170000E314A6FEA2856254F250D2544259B25953 +:10171000654521616FE09FE9B7170820370708206A +:10172000938607801307070063E2E604B7160820D4 +:10173000B7150820138807809386C6FF938505FF99 +:1017400093870780732650308E883717002023A098 +:10175000160113072767B716002023A8A77E23AA20 +:10176000077F23ACE77E1385666631BF7D58C2874D +:101770009306B07F9305F07EF1B7937735002A8703 +:101780009DEFB7867F7F9386F6F7FD5510431107CF +:10179000B377D600B697D18FD58FE389B7FE83464E +:1017A000C7FFB307A7408DCA8346D7FF9DC2034535 +:1017B000E7FF3335A0003E9579158280F9D2834743 +:1017C0000700050793763700F5FB098F1305F7FF30 +:1017D00082801385D7FF82801385C7FF8280000037 +:1017E0000A2A2A2A2050414E4943202A2A2A0A003E +:1017F0000A000000486172647761726520616C6163 +:10180000726D20256420616C726561647920636C5F +:1018100061696D65640000004861726420617373E2 +:101820006572740052656C656173650068747470EC +:10183000733A2F2F6769746875622E636F6D2F720C +:10184000617370626572727970692F7069636F2D50 +:101850006578616D706C65732F747265652F48458E +:1018600041442F626C696E6B5F73696D706C6500CB +:10187000322E312E300000007069636F320000009C +:10188000626C696E6B5F73696D706C65000000005F +:101890004A616E2032352032303235000600525017 +:1018A000D3F0754224180020060052509A2356188F +:1018B0002C18002006005250BBFF3CB678180020C0 +:0418C0000D0A00000D +:1018C4009C180020A8180020C0010020B418002093 +:0818D400CC010020D801002026 +:1018DC0000000000000000000000000000000000FC +:1018EC000000000040190020100000000000000063 +:1018FC00000000000000000000000000E6110020C5 +:10190C0086110020B011002016120020CA110020F0 +:10191C00CA10002012120020B81000208A060020E5 +:10192C00CC0A00200C110020FC1100203A130020DE +:04193C00780500200A +:0400000520000220B5 +:00000001FF diff --git a/demo/riscv_blink/blink_simple.uf2 b/demo/riscv_blink/blink_simple.uf2 new file mode 100644 index 0000000000..3dbacdf150 Binary files /dev/null and b/demo/riscv_blink/blink_simple.uf2 differ diff --git a/demo/riscv_pio_blink/blink.c b/demo/riscv_pio_blink/blink.c new file mode 100644 index 0000000000..d332f4bfc9 --- /dev/null +++ b/demo/riscv_pio_blink/blink.c @@ -0,0 +1,99 @@ +/** + * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include + +#include "pico/stdlib.h" +#include "hardware/pio.h" +#include "hardware/clocks.h" +#include "blink.pio.h" + +void blink_pin_forever(PIO pio, uint sm, uint offset, uint pin, uint freq); + +// by default flash leds on gpios 3-4 +#ifndef PIO_BLINK_LED1_GPIO +#define PIO_BLINK_LED1_GPIO 3 +#endif + +// flash leds on 32-33 +#define PIO_BLINK_LED3_GPIO 32 + +int main() { + setup_default_uart(); + + assert(PIO_BLINK_LED1_GPIO < 31); + assert(PIO_BLINK_LED3_GPIO < 31 || PIO_BLINK_LED3_GPIO >= 32); + + PIO pio[2]; + uint sm[2]; + uint offset[2]; + + // Find a free pio and state machine and add the program + bool rc = pio_claim_free_sm_and_add_program_for_gpio_range(&blink_program, &pio[0], &sm[0], &offset[0], PIO_BLINK_LED1_GPIO, 2, true); + hard_assert(rc); + printf("Loaded program at %u on pio %u\n", offset[0], PIO_NUM(pio[0])); + + // Start led1 flashing + blink_pin_forever(pio[0], sm[0], offset[0], PIO_BLINK_LED1_GPIO, 100); + + // Claim the next state machine and start led2 flashing + pio_sm_claim(pio[0], sm[0] + 1); + blink_pin_forever(pio[0], sm[0] + 1, offset[0], PIO_BLINK_LED1_GPIO + 1, 90); + + if (PIO_BLINK_LED3_GPIO >= 32) { + // Find a free pio and state machine and add the program + rc = pio_claim_free_sm_and_add_program_for_gpio_range(&blink_program, &pio[1], &sm[1], &offset[1], PIO_BLINK_LED3_GPIO, 2, true); + printf("Loaded program at %u on pio %u\n", offset[1], PIO_NUM(pio[1])); + } else { + // no need to load the program again + rc = true; + pio[1] = pio[0]; + sm[1] = sm[0] + 2; + offset[1] = offset[0]; + pio_sm_claim(pio[1], sm[1]); + } + hard_assert(rc); + + // Start led3 flashing + blink_pin_forever(pio[1], sm[1], offset[1], PIO_BLINK_LED3_GPIO, 80); + + // Claim the next state machine and start led4 flashing + pio_sm_claim(pio[1], sm[1] + 1); + blink_pin_forever(pio[1], sm[1] + 1, offset[1], PIO_BLINK_LED3_GPIO + 1, 70); + + // free up pio resources + pio_sm_unclaim(pio[1], sm[1] + 1); + if (PIO_BLINK_LED3_GPIO >= 32) { + pio_remove_program_and_unclaim_sm(&blink_program, pio[1], sm[1], offset[1]); + } else { + pio_sm_unclaim(pio[1], sm[1]); + } + pio_sm_unclaim(pio[0], sm[0] + 1); + pio_remove_program_and_unclaim_sm(&blink_program, pio[0], sm[0], offset[0]); + + // the program exits but the pio keeps running! + printf("All leds should be flashing\n"); + int l1 = 0; + int l2 = 0; + while(1) { + int l1_new = gpio_get(PIO_BLINK_LED1_GPIO); + int l2_new = gpio_get(PIO_BLINK_LED3_GPIO); + if(l1_new != l1) printf("led pin 3: %d\n", l1_new); + if(l2_new != l2) printf("led pin 32: %d\n", l2_new); + l1 = l1_new; l2 = l2_new; + } +} + +void blink_pin_forever(PIO pio, uint sm, uint offset, uint pin, uint freq) { + blink_program_init(pio, sm, offset, pin); + pio_sm_set_enabled(pio, sm, true); + + printf("Blinking pin %d at %d Hz\n", pin, freq); + + // PIO counter program takes 3 more cycles in total than we pass as + // input (wait for n + 1; mov; jmp) + pio->txf[sm] = (clock_get_hz(clk_sys) / (2 * freq)) - 3; +} diff --git a/demo/riscv_pio_blink/pio_blink.dis b/demo/riscv_pio_blink/pio_blink.dis new file mode 100644 index 0000000000..7a5152f329 --- /dev/null +++ b/demo/riscv_pio_blink/pio_blink.dis @@ -0,0 +1,9238 @@ + +/home/malte/project/private/pico-examples/pio/pio_blink/pio_blink.elf: file format elf32-littleriscv + +Sections: +Idx Name Size VMA LMA File off Algn + 0 .text 000067f8 20000000 20000000 00001000 2**6 + CONTENTS, ALLOC, LOAD, READONLY, CODE + 1 .rodata 0000063c 200067f8 200067f8 000077f8 2**3 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 2 .binary_info 00000024 20006e34 20006e34 00007e34 2**2 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 3 .data 000000b8 20006e58 20006e58 00007e58 2**2 + CONTENTS, ALLOC, LOAD, DATA + 4 .tdata 00000000 20006f10 20006f10 00007f10 2**0 + CONTENTS, ALLOC, LOAD, DATA, THREAD_LOCAL + 5 .uninitialized_data 00000000 20006f10 20006f10 00007f10 2**0 + CONTENTS + 6 .tbss 00000000 20006f10 20006f10 00000000 2**0 + ALLOC, THREAD_LOCAL + 7 .bss 00000220 20006f10 20006f10 00007f10 2**3 + ALLOC + 8 .heap 00000800 20007130 20007130 00007f10 2**2 + CONTENTS, READONLY + 9 .scratch_x 00000000 20080000 20080000 00008710 2**0 + CONTENTS + 10 .scratch_y 00000000 20081000 20081000 00008710 2**0 + CONTENTS + 11 .stack_dummy 00000800 20081000 20081000 00008720 2**5 + CONTENTS, READONLY + 12 .debug_info 00022f46 00000000 00000000 00008f20 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 13 .debug_abbrev 00006bab 00000000 00000000 0002be66 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 14 .debug_loclists 00017e7e 00000000 00000000 00032a11 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 15 .debug_aranges 00000dc8 00000000 00000000 0004a890 2**3 + CONTENTS, READONLY, DEBUGGING, OCTETS + 16 .debug_rnglists 0000510f 00000000 00000000 0004b658 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 17 .debug_line 0002b519 00000000 00000000 00050767 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 18 .debug_str 0000559c 00000000 00000000 0007bc80 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 19 .debug_line_str 0000218a 00000000 00000000 0008121c 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 20 .comment 00000035 00000000 00000000 000833a6 2**0 + CONTENTS, READONLY + 21 .riscv.attributes 0000006a 00000000 00000000 000833db 2**0 + CONTENTS, READONLY + 22 .debug_frame 000027e8 00000000 00000000 00083448 2**2 + CONTENTS, READONLY, DEBUGGING, OCTETS + +/home/malte/project/private/pico-examples/pio/pio_blink/pio_blink.elf: file format elf32-littleriscv + + +Disassembly of section .text: + +20000000 <__VECTOR_TABLE>: +20000000: 1a00006f j 200001a0 <__default_isrs_start> + ... +2000000c: 1960006f j 200001a2 + ... +2000001c: 1840006f j 200001a0 <__default_isrs_start> + ... + +2000002c : +2000002c: 715d addi sp,sp,-80 +2000002e: c006 sw ra,0(sp) +20000030: c216 sw t0,4(sp) +20000032: c41a sw t1,8(sp) +20000034: c61e sw t2,12(sp) +20000036: c82a sw a0,16(sp) +20000038: ca2e sw a1,20(sp) +2000003a: cc32 sw a2,24(sp) +2000003c: ce36 sw a3,28(sp) +2000003e: d03a sw a4,32(sp) +20000040: d23e sw a5,36(sp) +20000042: d442 sw a6,40(sp) +20000044: d646 sw a7,44(sp) +20000046: d872 sw t3,48(sp) +20000048: da76 sw t4,52(sp) +2000004a: dc7a sw t5,56(sp) +2000004c: de7e sw t6,60(sp) +2000004e: 34102573 csrr a0,mepc +20000052: 300025f3 csrr a1,mstatus +20000056: c0aa sw a0,64(sp) +20000058: c2ae sw a1,68(sp) + +2000005a : +2000005a: be516673 csrrsi a2,0xbe5,2 +2000005e: c4b2 sw a2,72(sp) + +20000060 : +20000060: be40e573 csrrsi a0,0xbe4,1 +20000064: 02054163 bltz a0,20000086 + +20000068 : +20000068: 30046073 csrsi mstatus,8 +2000006c: 200005b7 lui a1,0x20000 +20000070: 95aa add a1,a1,a0 +20000072: 0d05a583 lw a1,208(a1) # 200000d0 <__soft_vector_table> +20000076: 000580e7 jalr a1 +2000007a: 30047073 csrci mstatus,8 + +2000007e : +2000007e: be40e573 csrrsi a0,0xbe4,1 +20000082: fe0553e3 bgez a0,20000068 + +20000086 : +20000086: 4506 lw a0,64(sp) +20000088: 4596 lw a1,68(sp) +2000008a: 4626 lw a2,72(sp) +2000008c: 34151073 csrw mepc,a0 +20000090: 30059073 csrw mstatus,a1 +20000094: be561073 csrw 0xbe5,a2 +20000098: 4082 lw ra,0(sp) +2000009a: 4292 lw t0,4(sp) +2000009c: 4322 lw t1,8(sp) +2000009e: 43b2 lw t2,12(sp) +200000a0: 45d2 lw a1,20(sp) +200000a2: 4662 lw a2,24(sp) +200000a4: 46f2 lw a3,28(sp) +200000a6: 5702 lw a4,32(sp) +200000a8: 5792 lw a5,36(sp) +200000aa: 5822 lw a6,40(sp) +200000ac: 58b2 lw a7,44(sp) +200000ae: 5e42 lw t3,48(sp) +200000b0: 5ed2 lw t4,52(sp) +200000b2: 5f62 lw t5,56(sp) +200000b4: 5ff2 lw t6,60(sp) + +200000b6 : +200000b6: be402573 csrr a0,0xbe4 +200000ba: fa0550e3 bgez a0,2000005a +200000be: 4542 lw a0,16(sp) +200000c0: 6161 addi sp,sp,80 +200000c2: 30200073 mret +200000c6: 00000013 nop +200000ca: 00000013 nop +200000ce: 0001 nop + +200000d0 <__soft_vector_table>: +200000d0: 200001a4 .word 0x200001a4 +200000d4: 200001a4 .word 0x200001a4 +200000d8: 200001a4 .word 0x200001a4 +200000dc: 200001a4 .word 0x200001a4 +200000e0: 200001a4 .word 0x200001a4 +200000e4: 200001a4 .word 0x200001a4 +200000e8: 200001a4 .word 0x200001a4 +200000ec: 200001a4 .word 0x200001a4 +200000f0: 200001a4 .word 0x200001a4 +200000f4: 200001a4 .word 0x200001a4 +200000f8: 200001a4 .word 0x200001a4 +200000fc: 200001a4 .word 0x200001a4 +20000100: 200001a4 .word 0x200001a4 +20000104: 200001a4 .word 0x200001a4 +20000108: 200001a4 .word 0x200001a4 +2000010c: 200001a4 .word 0x200001a4 +20000110: 200001a4 .word 0x200001a4 +20000114: 200001a4 .word 0x200001a4 +20000118: 200001a4 .word 0x200001a4 +2000011c: 200001a4 .word 0x200001a4 +20000120: 200001a4 .word 0x200001a4 +20000124: 200001a4 .word 0x200001a4 +20000128: 200001a4 .word 0x200001a4 +2000012c: 200001a4 .word 0x200001a4 +20000130: 200001a4 .word 0x200001a4 +20000134: 200001a4 .word 0x200001a4 +20000138: 200001a4 .word 0x200001a4 +2000013c: 200001a4 .word 0x200001a4 +20000140: 200001a4 .word 0x200001a4 +20000144: 200001a4 .word 0x200001a4 +20000148: 200001a4 .word 0x200001a4 +2000014c: 200001a4 .word 0x200001a4 +20000150: 200001a4 .word 0x200001a4 +20000154: 200001a4 .word 0x200001a4 +20000158: 200001a4 .word 0x200001a4 +2000015c: 200001a4 .word 0x200001a4 +20000160: 200001a4 .word 0x200001a4 +20000164: 200001a4 .word 0x200001a4 +20000168: 200001a4 .word 0x200001a4 +2000016c: 200001a4 .word 0x200001a4 +20000170: 200001a4 .word 0x200001a4 +20000174: 200001a4 .word 0x200001a4 +20000178: 200001a4 .word 0x200001a4 +2000017c: 200001a4 .word 0x200001a4 +20000180: 200001a4 .word 0x200001a4 +20000184: 200001a4 .word 0x200001a4 +20000188: 200001a4 .word 0x200001a4 +2000018c: 200001a4 .word 0x200001a4 +20000190: 200001a4 .word 0x200001a4 +20000194: 200001a4 .word 0x200001a4 +20000198: 200001a4 .word 0x200001a4 +2000019c: 200001a4 .word 0x200001a4 + +200001a0 <__default_isrs_start>: +200001a0: 9002 ebreak + +200001a2 : +200001a2: 9002 ebreak + +200001a4 <__unhandled_user_irq>: +200001a4: 8109 srli a0,a0,0x2 +200001a6: 9002 ebreak + +200001a8 <__default_isrs_end>: + ... + +200001c0 <__bi_54>: +200001c0: 0006 5052 b3ab 5360 6908 2000 ..RP..`S.i. + +200001cc <__bi_42>: +200001cc: 0006 5052 1c86 0203 6924 2000 ..RP....$i. + +200001d8 <__bi_34>: +200001d8: 0006 5052 2254 9da2 6930 2000 ..RPT"..0i. + +200001e4 : +200001e4: ebf2 .insn 2, 0xebf2 +200001e6: 7188 .insn 2, 0x7188 +200001e8: 6e34 .insn 2, 0x6e34 +200001ea: 2000 .insn 2, 0x2000 +200001ec: 6e58 .insn 2, 0x6e58 +200001ee: 2000 .insn 2, 0x2000 +200001f0: 0278 addi a4,sp,268 +200001f2: 2000 .insn 2, 0x2000 +200001f4: a390 .insn 2, 0xa390 +200001f6: e71a .insn 2, 0xe71a + +200001f8 <__binary_info_header_end>: +200001f8: ffffded3 .insn 4, 0xffffded3 +200001fc: 0142 slli sp,sp,0x10 +200001fe: 1101 addi sp,sp,-32 +20000200: 0344 addi s1,sp,388 +20000202: 0000 unimp +20000204: 0222 slli tp,tp,0x8 +20000206: 2000 .insn 2, 0x2000 +20000208: 2000 .insn 2, 0x2000 +2000020a: 2008 .insn 2, 0x2008 +2000020c: 00000203 lb tp,0(zero) # 0 +20000210: 0000 unimp +20000212: 2000 .insn 2, 0x2000 +20000214: 06ff 0000 0000 0000 .insn 10, 0x357900000000000006ff +2000021c: 3579 +2000021e: ab12 .insn 2, 0xab12 + +20000220 <__embedded_block_end>: +20000220: a009 j 20000222 <_reset_handler> + +20000222 <_reset_handler>: +20000222: 00007197 auipc gp,0x7 +20000226: 6e218193 addi gp,gp,1762 # 20007904 <__global_pointer$> +2000022a: 00082117 auipc sp,0x82 +2000022e: dd610113 addi sp,sp,-554 # 20082000 <__StackTop> +20000232: 00000517 auipc a0,0x0 +20000236: dcf50513 addi a0,a0,-561 # 20000001 <__VECTOR_TABLE+0x1> +2000023a: 30551073 csrw mtvec,a0 +2000023e: f1402573 csrr a0,mhartid +20000242: e125 bnez a0,200002a2 +20000244: 00007597 auipc a1,0x7 +20000248: ccc58593 addi a1,a1,-820 # 20006f10 +2000024c: 82c18613 addi a2,gp,-2004 # 20007130 <__bss_end__> +20000250: a021 j 20000258 + +20000252 : +20000252: 0005a023 sw zero,0(a1) +20000256: 0591 addi a1,a1,4 + +20000258 : +20000258: fec59de3 bne a1,a2,20000252 + +2000025c : +2000025c: 188030ef jal 200033e4 +20000260: 24b1 jal 200004ac
+20000262: 17c030ef jal 200033de +20000266: 9002 ebreak +20000268: bffd j 20000266 + +2000026a : +2000026a: 4188 lw a0,0(a1) +2000026c: c208 sw a0,0(a2) +2000026e: 0591 addi a1,a1,4 +20000270: 0611 addi a2,a2,4 + +20000272 : +20000272: fed66ce3 bltu a2,a3,2000026a +20000276: 8082 ret + +20000278 : +20000278: 20006e58 .word 0x20006e58 +2000027c: 20006e58 .word 0x20006e58 +20000280: 20006f10 .word 0x20006f10 +20000284: 20080000 .word 0x20080000 +20000288: 20080000 .word 0x20080000 +2000028c: 20080000 .word 0x20080000 +20000290: 20081000 .word 0x20081000 +20000294: 20081000 .word 0x20081000 +20000298: 20081000 .word 0x20081000 +2000029c: 00000000 .word 0x00000000 +200002a0: 8082 ret + +200002a2 : +200002a2: 6521 lui a0,0x8 +200002a4: dfc50513 addi a0,a0,-516 # 7dfc +200002a8: 8502 jr a0 + ... + +200002ac : +200002ac: 1101 addi sp,sp,-32 +200002ae: d00007b7 lui a5,0xd0000 +200002b2: cc22 sw s0,24(sp) +200002b4: ca26 sw s1,20(sp) +200002b6: c84a sw s2,16(sp) +200002b8: c64e sw s3,12(sp) +200002ba: ce06 sw ra,28(sp) +200002bc: 0007a983 lw s3,0(a5) # d0000000 <__StackTop+0xaff7e000> +200002c0: 842a mv s0,a0 +200002c2: 892e mv s2,a1 +200002c4: 84b2 mv s1,a2 +200002c6: a821 j 200002de +200002c8: 0330000f fence rw,rw +200002cc: 00070023 sb zero,0(a4) +200002d0: 3007a073 csrs mstatus,a5 +200002d4: 854a mv a0,s2 +200002d6: 85a6 mv a1,s1 +200002d8: 188010ef jal 20001460 +200002dc: e531 bnez a0,20000328 +200002de: 401c lw a5,0(s0) +200002e0: 30047773 csrrci a4,mstatus,8 +200002e4: 00379693 slli a3,a5,0x3 +200002e8: 28d016b3 bset a3,zero,a3 +200002ec: 9bf1 andi a5,a5,-4 +200002ee: 44d7a62f amoor.w.aq a2,a3,(a5) +200002f2: 8e75 and a2,a2,a3 +200002f4: fe6d bnez a2,200002ee +200002f6: 0330000f fence rw,rw +200002fa: 00440683 lb a3,4(s0) +200002fe: 00877793 andi a5,a4,8 +20000302: 4018 lw a4,0(s0) +20000304: fc06d2e3 bgez a3,200002c8 +20000308: 01340223 sb s3,4(s0) +2000030c: 0330000f fence rw,rw +20000310: 00070023 sb zero,0(a4) +20000314: 3007a073 csrs mstatus,a5 +20000318: 40f2 lw ra,28(sp) +2000031a: 4462 lw s0,24(sp) +2000031c: 44d2 lw s1,20(sp) +2000031e: 4942 lw s2,16(sp) +20000320: 49b2 lw s3,12(sp) +20000322: 4505 li a0,1 +20000324: 6105 addi sp,sp,32 +20000326: 8082 ret +20000328: 40f2 lw ra,28(sp) +2000032a: 4462 lw s0,24(sp) +2000032c: 44d2 lw s1,20(sp) +2000032e: 4942 lw s2,16(sp) +20000330: 49b2 lw s3,12(sp) +20000332: 4501 li a0,0 +20000334: 6105 addi sp,sp,32 +20000336: 8082 ret + +20000338 : +20000338: 411c lw a5,0(a0) +2000033a: 300476f3 csrrci a3,mstatus,8 +2000033e: 00379813 slli a6,a5,0x3 +20000342: 29001833 bset a6,zero,a6 +20000346: 9bf1 andi a5,a5,-4 +20000348: 4507a8af amoor.w.aq a7,a6,(a5) +2000034c: 0108f8b3 and a7,a7,a6 +20000350: fe089ce3 bnez a7,20000348 +20000354: 0330000f fence rw,rw +20000358: 00450803 lb a6,4(a0) +2000035c: 0086f793 andi a5,a3,8 +20000360: 4114 lw a3,0(a0) +20000362: 02084263 bltz a6,20000386 +20000366: 0330000f fence rw,rw +2000036a: 00068023 sb zero,0(a3) +2000036e: 3007a073 csrs mstatus,a5 +20000372: d00007b7 lui a5,0xd0000 +20000376: 00078703 lb a4,0(a5) # d0000000 <__StackTop+0xaff7e000> +2000037a: 4781 li a5,0 +2000037c: 01071463 bne a4,a6,20000384 +20000380: 853e mv a0,a5 +20000382: 8082 ret +20000384: b725 j 200002ac +20000386: d0000637 lui a2,0xd0000 +2000038a: 4210 lw a2,0(a2) +2000038c: 00c50223 sb a2,4(a0) +20000390: 0330000f fence rw,rw +20000394: 00068023 sb zero,0(a3) +20000398: 3007a073 csrs mstatus,a5 +2000039c: 4785 li a5,1 +2000039e: 853e mv a0,a5 +200003a0: 8082 ret + +200003a2 : +200003a2: 411c lw a5,0(a0) +200003a4: 30047773 csrrci a4,mstatus,8 +200003a8: 00379693 slli a3,a5,0x3 +200003ac: 28d016b3 bset a3,zero,a3 +200003b0: 9bf1 andi a5,a5,-4 +200003b2: 44d7a62f amoor.w.aq a2,a3,(a5) +200003b6: 8e75 and a2,a2,a3 +200003b8: fe6d bnez a2,200003b2 +200003ba: 0330000f fence rw,rw +200003be: 57fd li a5,-1 +200003c0: 00f50223 sb a5,4(a0) +200003c4: 411c lw a5,0(a0) +200003c6: 0330000f fence rw,rw +200003ca: 00078023 sb zero,0(a5) +200003ce: 00877793 andi a5,a4,8 +200003d2: 3007a073 csrs mstatus,a5 +200003d6: 00102033 sgtz zero,ra +200003da: 8082 ret + +200003dc : +200003dc: afe007b7 lui a5,0xafe00 +200003e0: 97aa add a5,a5,a0 +200003e2: 715d addi sp,sp,-80 +200003e4: 83d1 srli a5,a5,0x14 +200003e6: c0ca sw s2,64(sp) +200003e8: de4e sw s3,60(sp) +200003ea: 892a mv s2,a0 +200003ec: 89ae mv s3,a1 +200003ee: 8536 mv a0,a3 +200003f0: 00678593 addi a1,a5,6 # afe00006 <__StackTop+0x8fd7e006> +200003f4: c686 sw ra,76(sp) +200003f6: c4a2 sw s0,72(sp) +200003f8: c2a6 sw s1,68(sp) +200003fa: 8436 mv s0,a3 +200003fc: 84b2 mv s1,a2 +200003fe: 2401 jal 200005fe +20000400: 4705 li a4,1 +20000402: 8622 mv a2,s0 +20000404: 85ce mv a1,s3 +20000406: 86ba mv a3,a4 +20000408: 854a mv a0,s2 +2000040a: 754030ef jal 20003b5e +2000040e: 00248713 addi a4,s1,2 +20000412: 00748693 addi a3,s1,7 +20000416: 00541793 slli a5,s0,0x5 +2000041a: 06b2 slli a3,a3,0xc +2000041c: 071e slli a4,a4,0x7 +2000041e: 0406 slli s0,s0,0x1 +20000420: 3e07f793 andi a5,a5,992 +20000424: 8f55 or a4,a4,a3 +20000426: 85ce mv a1,s3 +20000428: 854a mv a0,s2 +2000042a: 68c1 lui a7,0x10 +2000042c: 8626 mv a2,s1 +2000042e: 000c0837 lui a6,0xc0 +20000432: c1f46413 ori s0,s0,-993 +20000436: 29a79793 bseti a5,a5,0x1a +2000043a: 0874 addi a3,sp,28 +2000043c: d622 sw s0,44(sp) +2000043e: ce46 sw a7,28(sp) +20000440: d03a sw a4,32(sp) +20000442: d242 sw a6,36(sp) +20000444: d43e sw a5,40(sp) +20000446: 7aa030ef jal 20003bf0 +2000044a: 40b6 lw ra,76(sp) +2000044c: 4426 lw s0,72(sp) +2000044e: 4496 lw s1,68(sp) +20000450: 4906 lw s2,64(sp) +20000452: 59f2 lw s3,60(sp) +20000454: 6161 addi sp,sp,80 +20000456: 8082 ret + +20000458 : +20000458: 1101 addi sp,sp,-32 +2000045a: ce06 sw ra,28(sp) +2000045c: cc22 sw s0,24(sp) +2000045e: ca26 sw s1,20(sp) +20000460: c84a sw s2,16(sp) +20000462: c64e sw s3,12(sp) +20000464: 892a mv s2,a0 +20000466: 84ba mv s1,a4 +20000468: 89b6 mv s3,a3 +2000046a: 842e mv s0,a1 +2000046c: 3f85 jal 200003dc +2000046e: 00092783 lw a5,0(s2) +20000472: 20006537 lui a0,0x20006 +20000476: 85ce mv a1,s3 +20000478: 288797b3 bset a5,a5,s0 +2000047c: 00f92023 sw a5,0(s2) +20000480: 8626 mv a2,s1 +20000482: 7f850513 addi a0,a0,2040 # 200067f8 +20000486: 3ca030ef jal 20003850 <__wrap_printf> +2000048a: 4515 li a0,5 +2000048c: 3b8010ef jal 20001844 +20000490: 0486 slli s1,s1,0x1 +20000492: 02955533 divu a0,a0,s1 +20000496: 21244433 sh2add s0,s0,s2 +2000049a: 40f2 lw ra,28(sp) +2000049c: 44d2 lw s1,20(sp) +2000049e: 4942 lw s2,16(sp) +200004a0: 49b2 lw s3,12(sp) +200004a2: 1575 addi a0,a0,-3 +200004a4: c808 sw a0,16(s0) +200004a6: 4462 lw s0,24(sp) +200004a8: 6105 addi sp,sp,32 +200004aa: 8082 ret + +200004ac
: +200004ac: 7139 addi sp,sp,-64 +200004ae: dc22 sw s0,56(sp) +200004b0: de06 sw ra,60(sp) +200004b2: da26 sw s1,52(sp) +200004b4: d84a sw s2,48(sp) +200004b6: d64e sw s3,44(sp) +200004b8: d452 sw s4,40(sp) +200004ba: d256 sw s5,36(sp) +200004bc: 20007437 lui s0,0x20007 +200004c0: 2a2d jal 200005fa +200004c2: 0834 addi a3,sp,24 +200004c4: 0810 addi a2,sp,16 +200004c6: 002c addi a1,sp,8 +200004c8: d8c40513 addi a0,s0,-628 # 20006d8c +200004cc: 4805 li a6,1 +200004ce: 4789 li a5,2 +200004d0: 470d li a4,3 +200004d2: 05b030ef jal 20003d2c +200004d6: 10050c63 beqz a0,200005ee +200004da: 4622 lw a2,8(sp) +200004dc: afe004b7 lui s1,0xafe00 +200004e0: 45e2 lw a1,24(sp) +200004e2: 9626 add a2,a2,s1 +200004e4: 20007937 lui s2,0x20007 +200004e8: 8251 srli a2,a2,0x14 +200004ea: 81490513 addi a0,s2,-2028 # 20006814 +200004ee: 362030ef jal 20003850 <__wrap_printf> +200004f2: 4662 lw a2,24(sp) +200004f4: 45c2 lw a1,16(sp) +200004f6: 4522 lw a0,8(sp) +200004f8: 06400713 li a4,100 +200004fc: 468d li a3,3 +200004fe: 3fa9 jal 20000458 +20000500: 45c2 lw a1,16(sp) +20000502: 4522 lw a0,8(sp) +20000504: 0585 addi a1,a1,1 +20000506: 5f4030ef jal 20003afa +2000050a: 45c2 lw a1,16(sp) +2000050c: 4662 lw a2,24(sp) +2000050e: 4522 lw a0,8(sp) +20000510: 0585 addi a1,a1,1 +20000512: 05a00713 li a4,90 +20000516: 4691 li a3,4 +20000518: 3781 jal 20000458 +2000051a: 0850 addi a2,sp,20 +2000051c: 006c addi a1,sp,12 +2000051e: 4789 li a5,2 +20000520: 0874 addi a3,sp,28 +20000522: d8c40513 addi a0,s0,-628 +20000526: 4805 li a6,1 +20000528: 02000713 li a4,32 +2000052c: 001030ef jal 20003d2c +20000530: 4632 lw a2,12(sp) +20000532: 45f2 lw a1,28(sp) +20000534: 87aa mv a5,a0 +20000536: 9626 add a2,a2,s1 +20000538: 81490513 addi a0,s2,-2028 +2000053c: 84be mv s1,a5 +2000053e: 8251 srli a2,a2,0x14 +20000540: 310030ef jal 20003850 <__wrap_printf> +20000544: c8c5 beqz s1,200005f4 +20000546: 4672 lw a2,28(sp) +20000548: 45d2 lw a1,20(sp) +2000054a: 4532 lw a0,12(sp) +2000054c: 05000713 li a4,80 +20000550: 02000693 li a3,32 +20000554: 3711 jal 20000458 +20000556: 45d2 lw a1,20(sp) +20000558: 4532 lw a0,12(sp) +2000055a: 4981 li s3,0 +2000055c: 0585 addi a1,a1,1 +2000055e: 59c030ef jal 20003afa +20000562: 45d2 lw a1,20(sp) +20000564: 4672 lw a2,28(sp) +20000566: 4532 lw a0,12(sp) +20000568: 04600713 li a4,70 +2000056c: 02100693 li a3,33 +20000570: 0585 addi a1,a1,1 +20000572: 35dd jal 20000458 +20000574: 45d2 lw a1,20(sp) +20000576: 4532 lw a0,12(sp) +20000578: 20007ab7 lui s5,0x20007 +2000057c: 0585 addi a1,a1,1 +2000057e: 5cc030ef jal 20003b4a +20000582: 46f2 lw a3,28(sp) +20000584: 4652 lw a2,20(sp) +20000586: 45b2 lw a1,12(sp) +20000588: d8c40513 addi a0,s0,-628 +2000058c: 20007a37 lui s4,0x20007 +20000590: 239030ef jal 20003fc8 +20000594: 45c2 lw a1,16(sp) +20000596: 4522 lw a0,8(sp) +20000598: d0000937 lui s2,0xd0000 +2000059c: 0585 addi a1,a1,1 +2000059e: 5ac030ef jal 20003b4a +200005a2: 46e2 lw a3,24(sp) +200005a4: 4642 lw a2,16(sp) +200005a6: 45a2 lw a1,8(sp) +200005a8: d8c40513 addi a0,s0,-628 +200005ac: 21d030ef jal 20003fc8 +200005b0: 20007537 lui a0,0x20007 +200005b4: 83450513 addi a0,a0,-1996 # 20006834 +200005b8: 190030ef jal 20003748 <__wrap_puts> +200005bc: 4781 li a5,0 +200005be: 00492403 lw s0,4(s2) # d0000004 <__StackTop+0xaff7e004> +200005c2: 00892483 lw s1,8(s2) +200005c6: 850a8513 addi a0,s5,-1968 # 20006850 +200005ca: 48345413 bexti s0,s0,0x3 +200005ce: 85a2 mv a1,s0 +200005d0: 8885 andi s1,s1,1 +200005d2: 00878463 beq a5,s0,200005da +200005d6: 27a030ef jal 20003850 <__wrap_printf> +200005da: 85a6 mv a1,s1 +200005dc: 864a0513 addi a0,s4,-1948 # 20006864 +200005e0: 00998463 beq s3,s1,200005e8 +200005e4: 26c030ef jal 20003850 <__wrap_printf> +200005e8: 89a6 mv s3,s1 +200005ea: 87a2 mv a5,s0 +200005ec: bfc9 j 200005be +200005ee: 368010ef jal 20001956 +200005f2: b5e5 j 200004da +200005f4: 362010ef jal 20001956 +200005f8: b7b9 j 20000546 + +200005fa : +200005fa: 4180306f j 20003a12 + +200005fe : +200005fe: 400387b7 lui a5,0x40038 +20000602: 0791 addi a5,a5,4 # 40038004 <__StackTop+0x1ffb6004> +20000604: 20f547b3 sh2add a5,a0,a5 +20000608: 4398 lw a4,0(a5) +2000060a: 6685 lui a3,0x1 +2000060c: 96be add a3,a3,a5 +2000060e: 04074713 xori a4,a4,64 +20000612: 0c077713 andi a4,a4,192 +20000616: 40028637 lui a2,0x40028 +2000061a: c298 sw a4,0(a3) +2000061c: 20c56533 sh3add a0,a0,a2 +20000620: 670d lui a4,0x3 +20000622: 97ba add a5,a5,a4 +20000624: c14c sw a1,4(a0) +20000626: 10000713 li a4,256 +2000062a: c398 sw a4,0(a5) +2000062c: 8082 ret + +2000062e : +2000062e: 7139 addi sp,sp,-64 +20000630: 20007337 lui t1,0x20007 +20000634: cc22 sw s0,24(sp) +20000636: 842a mv s0,a0 +20000638: 87430513 addi a0,t1,-1932 # 20006874 +2000063c: ce06 sw ra,28(sp) +2000063e: d22e sw a1,36(sp) +20000640: d432 sw a2,40(sp) +20000642: d636 sw a3,44(sp) +20000644: d83a sw a4,48(sp) +20000646: da3e sw a5,52(sp) +20000648: dc42 sw a6,56(sp) +2000064a: de46 sw a7,60(sp) +2000064c: 0fc030ef jal 20003748 <__wrap_puts> +20000650: cc01 beqz s0,20000668 +20000652: 104c addi a1,sp,36 +20000654: 8522 mv a0,s0 +20000656: c62e sw a1,12(sp) +20000658: 535020ef jal 2000338c +2000065c: 20007537 lui a0,0x20007 +20000660: 88450513 addi a0,a0,-1916 # 20006884 +20000664: 0e4030ef jal 20003748 <__wrap_puts> +20000668: 4505 li a0,1 +2000066a: 571020ef jal 200033da <_exit> + +2000066e : +2000066e: 30047573 csrrci a0,mstatus,8 +20000672: 200077b7 lui a5,0x20007 +20000676: 09b78793 addi a5,a5,155 # 2000709b <_sw_spin_locks+0xb> +2000067a: 00379713 slli a4,a5,0x3 +2000067e: 28e01733 bset a4,zero,a4 +20000682: 9bf1 andi a5,a5,-4 +20000684: 44e7a6af amoor.w.aq a3,a4,(a5) +20000688: 8ef9 and a3,a3,a4 +2000068a: feed bnez a3,20000684 +2000068c: 0330000f fence rw,rw +20000690: 8082 ret + +20000692 : +20000692: 0330000f fence rw,rw +20000696: 200077b7 lui a5,0x20007 +2000069a: 09078793 addi a5,a5,144 # 20007090 <_sw_spin_locks> +2000069e: 000785a3 sb zero,11(a5) +200006a2: 8921 andi a0,a0,8 +200006a4: 30052073 csrs mstatus,a0 +200006a8: 8082 ret + +200006aa : +200006aa: 300476f3 csrrci a3,mstatus,8 +200006ae: 20007737 lui a4,0x20007 +200006b2: 09b70713 addi a4,a4,155 # 2000709b <_sw_spin_locks+0xb> +200006b6: 00371813 slli a6,a4,0x3 +200006ba: 29001833 bset a6,zero,a6 +200006be: 9b71 andi a4,a4,-4 +200006c0: 450728af amoor.w.aq a7,a6,(a4) +200006c4: 0108f8b3 and a7,a7,a6 +200006c8: fe089ce3 bnez a7,200006c0 +200006cc: 0330000f fence rw,rw +200006d0: 0035d713 srli a4,a1,0x3 +200006d4: 953a add a0,a0,a4 +200006d6: 00054703 lbu a4,0(a0) +200006da: 0075f793 andi a5,a1,7 +200006de: 28f017b3 bset a5,zero,a5 +200006e2: 00f77833 and a6,a4,a5 +200006e6: 02081163 bnez a6,20000708 +200006ea: 8f5d or a4,a4,a5 +200006ec: 00e50023 sb a4,0(a0) +200006f0: 0330000f fence rw,rw +200006f4: 200077b7 lui a5,0x20007 +200006f8: 09078793 addi a5,a5,144 # 20007090 <_sw_spin_locks> +200006fc: 000785a3 sb zero,11(a5) +20000700: 8aa1 andi a3,a3,8 +20000702: 3006a073 csrs mstatus,a3 +20000706: 8082 ret +20000708: 1141 addi sp,sp,-16 +2000070a: 8532 mv a0,a2 +2000070c: c606 sw ra,12(sp) +2000070e: 3705 jal 2000062e + +20000710 : +20000710: 30047873 csrrci a6,mstatus,8 +20000714: 200077b7 lui a5,0x20007 +20000718: 09b78793 addi a5,a5,155 # 2000709b <_sw_spin_locks+0xb> +2000071c: 00379893 slli a7,a5,0x3 +20000720: 291018b3 bset a7,zero,a7 +20000724: 9bf1 andi a5,a5,-4 +20000726: 4517a32f amoor.w.aq t1,a7,(a5) +2000072a: 01137333 and t1,t1,a7 +2000072e: fe031ce3 bnez t1,20000726 +20000732: 0330000f fence rw,rw +20000736: 00887e13 andi t3,a6,8 +2000073a: 00c6f663 bgeu a3,a2,20000746 +2000073e: a099 j 20000784 +20000740: 0605 addi a2,a2,1 # 40028001 <__StackTop+0x1ffa6001> +20000742: 06c6e163 bltu a3,a2,200007a4 +20000746: 00365793 srli a5,a2,0x3 +2000074a: 97aa add a5,a5,a0 +2000074c: 0007c883 lbu a7,0(a5) +20000750: 00767813 andi a6,a2,7 +20000754: 29001833 bset a6,zero,a6 +20000758: 0108f333 and t1,a7,a6 +2000075c: fe0312e3 bnez t1,20000740 +20000760: 0108e8b3 or a7,a7,a6 +20000764: 01178023 sb a7,0(a5) +20000768: 8532 mv a0,a2 +2000076a: 0330000f fence rw,rw +2000076e: 200077b7 lui a5,0x20007 +20000772: 09078793 addi a5,a5,144 # 20007090 <_sw_spin_locks> +20000776: 000785a3 sb zero,11(a5) +2000077a: 300e2073 csrs mstatus,t3 +2000077e: 00054e63 bltz a0,2000079a +20000782: 8082 ret +20000784: 0330000f fence rw,rw +20000788: 200077b7 lui a5,0x20007 +2000078c: 09078793 addi a5,a5,144 # 20007090 <_sw_spin_locks> +20000790: 000785a3 sb zero,11(a5) +20000794: 300e2073 csrs mstatus,t3 +20000798: 557d li a0,-1 +2000079a: d5e5 beqz a1,20000782 +2000079c: 1141 addi sp,sp,-16 +2000079e: 853a mv a0,a4 +200007a0: c606 sw ra,12(sp) +200007a2: 3571 jal 2000062e +200007a4: 557d li a0,-1 +200007a6: b7d1 j 2000076a + +200007a8 : +200007a8: 30047773 csrrci a4,mstatus,8 +200007ac: 200077b7 lui a5,0x20007 +200007b0: 09b78793 addi a5,a5,155 # 2000709b <_sw_spin_locks+0xb> +200007b4: 00379693 slli a3,a5,0x3 +200007b8: 28d016b3 bset a3,zero,a3 +200007bc: 9bf1 andi a5,a5,-4 +200007be: 44d7a62f amoor.w.aq a2,a3,(a5) +200007c2: 8e75 and a2,a2,a3 +200007c4: fe6d bnez a2,200007be +200007c6: 0330000f fence rw,rw +200007ca: 0035d793 srli a5,a1,0x3 +200007ce: 953e add a0,a0,a5 +200007d0: 00054783 lbu a5,0(a0) +200007d4: 899d andi a1,a1,7 +200007d6: 48b797b3 bclr a5,a5,a1 +200007da: 00f50023 sb a5,0(a0) +200007de: 0330000f fence rw,rw +200007e2: 200077b7 lui a5,0x20007 +200007e6: 09078793 addi a5,a5,144 # 20007090 <_sw_spin_locks> +200007ea: 000785a3 sb zero,11(a5) +200007ee: 00877793 andi a5,a4,8 +200007f2: 3007a073 csrs mstatus,a5 +200007f6: 8082 ret + +200007f8 : +200007f8: 20007737 lui a4,0x20007 +200007fc: ed074503 lbu a0,-304(a4) # 20006ed0 +20000800: 46dd li a3,23 +20000802: 00150793 addi a5,a0,1 +20000806: 0ff7f793 zext.b a5,a5 +2000080a: 00f6f363 bgeu a3,a5,20000810 +2000080e: 47c1 li a5,16 +20000810: ecf70823 sb a5,-304(a4) +20000814: 8082 ret + +20000816 : +20000816: 200076b7 lui a3,0x20007 +2000081a: 09068693 addi a3,a3,144 # 20007090 <_sw_spin_locks> +2000081e: 4781 li a5,0 +20000820: 02000613 li a2,32 +20000824: 0330000f fence rw,rw +20000828: 00f68733 add a4,a3,a5 +2000082c: 00070023 sb zero,0(a4) +20000830: 0785 addi a5,a5,1 +20000832: fec799e3 bne a5,a2,20000824 +20000836: 8082 ret + +20000838 : +20000838: 4681 li a3,0 +2000083a: 483d li a6,15 +2000083c: 451d li a0,7 +2000083e: 03400593 li a1,52 +20000842: 0036f793 andi a5,a3,3 +20000846: 078a slli a5,a5,0x2 +20000848: 00f81733 sll a4,a6,a5 +2000084c: 0026d613 srli a2,a3,0x2 +20000850: 0742 slli a4,a4,0x10 +20000852: 8f51 or a4,a4,a2 +20000854: be373073 csrc 0xbe3,a4 +20000858: 00f517b3 sll a5,a0,a5 +2000085c: 07c2 slli a5,a5,0x10 +2000085e: 8fd1 or a5,a5,a2 +20000860: be37a073 csrs 0xbe3,a5 +20000864: 0685 addi a3,a3,1 +20000866: fcb69ee3 bne a3,a1,20000842 +2000086a: 8082 ret + +2000086c : +2000086c: 00555793 srli a5,a0,0x5 +20000870: 0786 slli a5,a5,0x1 +20000872: 28a01533 bset a0,zero,a0 +20000876: 76c1 lui a3,0xffff0 +20000878: 8ee9 and a3,a3,a0 +2000087a: 00178713 addi a4,a5,1 +2000087e: 0542 slli a0,a0,0x10 +20000880: 8f55 or a4,a4,a3 +20000882: 8d5d or a0,a0,a5 +20000884: c991 beqz a1,20000898 +20000886: be253073 csrc 0xbe2,a0 +2000088a: be273073 csrc 0xbe2,a4 +2000088e: be052073 csrs 0xbe0,a0 +20000892: be072073 csrs 0xbe0,a4 +20000896: 8082 ret +20000898: be053073 csrc 0xbe0,a0 +2000089c: be073073 csrc 0xbe0,a4 +200008a0: 8082 ret + +200008a2 : +200008a2: 1141 addi sp,sp,-16 +200008a4: c226 sw s1,4(sp) +200008a6: c606 sw ra,12(sp) +200008a8: c422 sw s0,8(sp) +200008aa: c04a sw s2,0(sp) +200008ac: 84ae mv s1,a1 +200008ae: 30047973 csrrci s2,mstatus,8 +200008b2: 200077b7 lui a5,0x20007 +200008b6: 09978793 addi a5,a5,153 # 20007099 <_sw_spin_locks+0x9> +200008ba: 00379713 slli a4,a5,0x3 +200008be: 28e01733 bset a4,zero,a4 +200008c2: 9bf1 andi a5,a5,-4 +200008c4: 44e7a6af amoor.w.aq a3,a4,(a5) +200008c8: 8ef9 and a3,a3,a4 +200008ca: feed bnez a3,200008c4 +200008cc: 0330000f fence rw,rw +200008d0: 305027f3 csrr a5,mtvec +200008d4: 03450513 addi a0,a0,52 +200008d8: 9bf1 andi a5,a5,-4 +200008da: 20f547b3 sh2add a5,a0,a5 +200008de: 4398 lw a4,0(a5) +200008e0: 200007b7 lui a5,0x20000 +200008e4: 1a478793 addi a5,a5,420 # 200001a4 <__unhandled_user_irq> +200008e8: 00251413 slli s0,a0,0x2 +200008ec: 00f70663 beq a4,a5,200008f8 +200008f0: 00e58463 beq a1,a4,200008f8 +200008f4: 062010ef jal 20001956 +200008f8: 305027f3 csrr a5,mtvec +200008fc: 9bf1 andi a5,a5,-4 +200008fe: 97a2 add a5,a5,s0 +20000900: c384 sw s1,0(a5) +20000902: 0330000f fence rw,rw +20000906: 0330000f fence rw,rw +2000090a: 200077b7 lui a5,0x20007 +2000090e: 09078793 addi a5,a5,144 # 20007090 <_sw_spin_locks> +20000912: 000784a3 sb zero,9(a5) +20000916: 00897793 andi a5,s2,8 +2000091a: 3007a073 csrs mstatus,a5 +2000091e: 40b2 lw ra,12(sp) +20000920: 4422 lw s0,8(sp) +20000922: 4492 lw s1,4(sp) +20000924: 4902 lw s2,0(sp) +20000926: 0141 addi sp,sp,16 +20000928: 8082 ret + +2000092a : +2000092a: 7179 addi sp,sp,-48 +2000092c: d606 sw ra,44(sp) +2000092e: d04a sw s2,32(sp) +20000930: cc52 sw s4,24(sp) +20000932: ca56 sw s5,20(sp) +20000934: c85a sw s6,16(sp) +20000936: 30047973 csrrci s2,mstatus,8 +2000093a: 200077b7 lui a5,0x20007 +2000093e: 09978793 addi a5,a5,153 # 20007099 <_sw_spin_locks+0x9> +20000942: 00379713 slli a4,a5,0x3 +20000946: 28e01733 bset a4,zero,a4 +2000094a: 9bf1 andi a5,a5,-4 +2000094c: 44e7a6af amoor.w.aq a3,a4,(a5) +20000950: 8ef9 and a3,a3,a4 +20000952: feed bnez a3,2000094c +20000954: 0330000f fence rw,rw +20000958: 305027f3 csrr a5,mtvec +2000095c: 03450713 addi a4,a0,52 +20000960: 9bf1 andi a5,a5,-4 +20000962: 20f747b3 sh2add a5,a4,a5 +20000966: 0007aa83 lw s5,0(a5) +2000096a: 200007b7 lui a5,0x20000 +2000096e: 1a478b13 addi s6,a5,420 # 200001a4 <__unhandled_user_irq> +20000972: 00271a13 slli s4,a4,0x2 +20000976: 0b6a8763 beq s5,s6,20000a24 +2000097a: d422 sw s0,40(sp) +2000097c: 842e mv s0,a1 +2000097e: 0cba8e63 beq s5,a1,20000a5a +20000982: d226 sw s1,36(sp) +20000984: 200074b7 lui s1,0x20007 +20000988: e5848493 addi s1,s1,-424 # 20006e58 <__binary_info_end> +2000098c: 409a8733 sub a4,s5,s1 +20000990: 02f00793 li a5,47 +20000994: 08e7e663 bltu a5,a4,20000a20 +20000998: ce4e sw s3,28(sp) +2000099a: c65e sw s7,12(sp) +2000099c: c462 sw s8,8(sp) +2000099e: 00455793 srli a5,a0,0x4 +200009a2: be07a7f3 csrrs a5,0xbe0,a5 +200009a6: 00f57b93 andi s7,a0,15 +200009aa: 28a01733 bset a4,zero,a0 +200009ae: 00555993 srli s3,a0,0x5 +200009b2: 83c1 srli a5,a5,0x10 +200009b4: 01071c13 slli s8,a4,0x10 +200009b8: 0986 slli s3,s3,0x1 +200009ba: 29701bb3 bset s7,zero,s7 +200009be: 00fbfbb3 and s7,s7,a5 +200009c2: 013c6c33 or s8,s8,s3 +200009c6: be0c3073 csrc 0xbe0,s8 +200009ca: 77c1 lui a5,0xffff0 +200009cc: 8f7d and a4,a4,a5 +200009ce: 0985 addi s3,s3,1 +200009d0: 00e9e9b3 or s3,s3,a4 +200009d4: be09b073 csrc 0xbe0,s3 +200009d8: 0330000f fence rw,rw +200009dc: be5027f3 csrr a5,0xbe5 +200009e0: 01079713 slli a4,a5,0x10 +200009e4: 4801 li a6,0 +200009e6: 1e075063 bgez a4,20000bc6 +200009ea: 87d6 mv a5,s5 +200009ec: 4501 li a0,0 +200009ee: 4398 lw a4,0(a5) +200009f0: 43d4 lw a3,4(a5) +200009f2: 00877613 andi a2,a4,8 +200009f6: 80077713 andi a4,a4,-2048 +200009fa: 48b71713 bclri a4,a4,0xb +200009fe: 4146d593 srai a1,a3,0x14 +20000a02: e219 bnez a2,20000a08 +20000a04: 00b706b3 add a3,a4,a1 +20000a08: 04d40d63 beq s0,a3,20000a62 +20000a0c: 00a78703 lb a4,10(a5) # ffff000a <__StackTop+0xdff6e00a> +20000a10: 853e mv a0,a5 +20000a12: 20e727b3 sh1add a5,a4,a4 +20000a16: 18074c63 bltz a4,20000bae +20000a1a: 2097c7b3 sh2add a5,a5,s1 +20000a1e: bfc1 j 200009ee +20000a20: 5422 lw s0,40(sp) +20000a22: 5492 lw s1,36(sp) +20000a24: 305027f3 csrr a5,mtvec +20000a28: 9bf1 andi a5,a5,-4 +20000a2a: 97d2 add a5,a5,s4 +20000a2c: 0157a023 sw s5,0(a5) +20000a30: 0330000f fence rw,rw +20000a34: 0330000f fence rw,rw +20000a38: 200077b7 lui a5,0x20007 +20000a3c: 09078793 addi a5,a5,144 # 20007090 <_sw_spin_locks> +20000a40: 000784a3 sb zero,9(a5) +20000a44: 00897913 andi s2,s2,8 +20000a48: 30092073 csrs mstatus,s2 +20000a4c: 50b2 lw ra,44(sp) +20000a4e: 5902 lw s2,32(sp) +20000a50: 4a62 lw s4,24(sp) +20000a52: 4ad2 lw s5,20(sp) +20000a54: 4b42 lw s6,16(sp) +20000a56: 6145 addi sp,sp,48 +20000a58: 8082 ret +20000a5a: 5422 lw s0,40(sp) +20000a5c: 1a478a93 addi s5,a5,420 +20000a60: b7d1 j 20000a24 +20000a62: 00a78603 lb a2,10(a5) +20000a66: 18064563 bltz a2,20000bf0 +20000a6a: 20c62733 sh1add a4,a2,a2 +20000a6e: 20974733 sh2add a4,a4,s1 +20000a72: 4314 lw a3,0(a4) +20000a74: 00161593 slli a1,a2,0x1 +20000a78: 4358 lw a4,4(a4) +20000a7a: 0086f513 andi a0,a3,8 +20000a7e: e519 bnez a0,20000a8c +20000a80: 8006f693 andi a3,a3,-2048 +20000a84: 48b69693 bclri a3,a3,0xb +20000a88: 8751 srai a4,a4,0x14 +20000a8a: 9736 add a4,a4,a3 +20000a8c: 03578363 beq a5,s5,20000ab2 +20000a90: 00171693 slli a3,a4,0x1 +20000a94: 6505 lui a0,0x1 +20000a96: 8ee9 and a3,a3,a0 +20000a98: 96ba add a3,a3,a4 +20000a9a: 8006f693 andi a3,a3,-2048 +20000a9e: 48b69693 bclri a3,a3,0xb +20000aa2: 0752 slli a4,a4,0x14 +20000aa4: 0b76e693 ori a3,a3,183 +20000aa8: 0e776713 ori a4,a4,231 +20000aac: c394 sw a3,0(a5) +20000aae: 28f71713 bseti a4,a4,0xf +20000ab2: 00c586b3 add a3,a1,a2 +20000ab6: 2096c833 sh2add a6,a3,s1 +20000aba: 00b84503 lbu a0,11(a6) # c000b +20000abe: c3d8 sw a4,4(a5) +20000ac0: 6731 lui a4,0xc +20000ac2: 00a785a3 sb a0,11(a5) +20000ac6: 00a80883 lb a7,10(a6) +20000aca: 00269513 slli a0,a3,0x2 +20000ace: e4270713 addi a4,a4,-446 # be42 +20000ad2: 01178523 sb a7,10(a5) +20000ad6: 0a08cf63 bltz a7,20000b94 +20000ada: 00885683 lhu a3,8(a6) +20000ade: 0521 addi a0,a0,8 # 1008 +20000ae0: 9526 add a0,a0,s1 +20000ae2: 0016d813 srli a6,a3,0x1 +20000ae6: 00369713 slli a4,a3,0x3 +20000aea: 04087893 andi a7,a6,64 +20000aee: 02077713 andi a4,a4,32 +20000af2: 01176733 or a4,a4,a7 +20000af6: 00169313 slli t1,a3,0x1 +20000afa: 00878893 addi a7,a5,8 +20000afe: 41170733 sub a4,a4,a7 +20000b02: 08037313 andi t1,t1,128 +20000b06: 30087893 andi a7,a6,768 +20000b0a: 971a add a4,a4,t1 +20000b0c: 0026d813 srli a6,a3,0x2 +20000b10: 00269313 slli t1,a3,0x2 +20000b14: 829d srli a3,a3,0x7 +20000b16: 9746 add a4,a4,a7 +20000b18: 8ac1 andi a3,a3,16 +20000b1a: 40037893 andi a7,t1,1024 +20000b1e: 00e87313 andi t1,a6,14 +20000b22: 0066e6b3 or a3,a3,t1 +20000b26: 9746 add a4,a4,a7 +20000b28: 9736 add a4,a4,a3 +20000b2a: 28b01893 bseti a7,zero,0xb +20000b2e: 972a add a4,a4,a0 +20000b30: 01187833 and a6,a6,a7 +20000b34: 41070733 sub a4,a4,a6 +20000b38: 00171693 slli a3,a4,0x1 +20000b3c: 00375513 srli a0,a4,0x3 +20000b40: 6305 lui t1,0x1 +20000b42: 00771813 slli a6,a4,0x7 +20000b46: 8911 andi a0,a0,4 +20000b48: 0066f6b3 and a3,a3,t1 +20000b4c: 01187833 and a6,a6,a7 +20000b50: 8ec9 or a3,a3,a0 +20000b52: 00171513 slli a0,a4,0x1 +20000b56: 0106e6b3 or a3,a3,a6 +20000b5a: 60057513 andi a0,a0,1536 +20000b5e: 00275813 srli a6,a4,0x2 +20000b62: 8ec9 or a3,a3,a0 +20000b64: 10087813 andi a6,a6,256 +20000b68: 00171513 slli a0,a4,0x1 +20000b6c: 0106e6b3 or a3,a3,a6 +20000b70: 08057513 andi a0,a0,128 +20000b74: 00175813 srli a6,a4,0x1 +20000b78: 8ec9 or a3,a3,a0 +20000b7a: 04087813 andi a6,a6,64 +20000b7e: 00271513 slli a0,a4,0x2 +20000b82: 0106e733 or a4,a3,a6 +20000b86: 03857693 andi a3,a0,56 +20000b8a: 6529 lui a0,0xa +20000b8c: 8f55 or a4,a4,a3 +20000b8e: 00150693 addi a3,a0,1 # a001 +20000b92: 8f55 or a4,a4,a3 +20000b94: 200076b7 lui a3,0x20007 +20000b98: 1046c503 lbu a0,260(a3) # 20007104 +20000b9c: 95b2 add a1,a1,a2 +20000b9e: 2095c5b3 sh2add a1,a1,s1 +20000ba2: 00e79423 sh a4,8(a5) +20000ba6: 00a58523 sb a0,10(a1) +20000baa: 10c68223 sb a2,260(a3) +20000bae: 020b9863 bnez s7,20000bde +20000bb2: be0c3073 csrc 0xbe0,s8 +20000bb6: be09b073 csrc 0xbe0,s3 +20000bba: 5422 lw s0,40(sp) +20000bbc: 5492 lw s1,36(sp) +20000bbe: 49f2 lw s3,28(sp) +20000bc0: 4bb2 lw s7,12(sp) +20000bc2: 4c22 lw s8,8(sp) +20000bc4: b585 j 20000a24 +20000bc6: 8391 srli a5,a5,0x4 +20000bc8: c266 sw s9,4(sp) +20000bca: 1ff7fc93 andi s9,a5,511 +20000bce: 01950463 beq a0,s9,20000bd6 +20000bd2: 585000ef jal 20001956 +20000bd6: 034c8813 addi a6,s9,52 +20000bda: 4c92 lw s9,4(sp) +20000bdc: b539 j 200009ea +20000bde: be2c3073 csrc 0xbe2,s8 +20000be2: be29b073 csrc 0xbe2,s3 +20000be6: be0c2073 csrs 0xbe0,s8 +20000bea: be09a073 csrs 0xbe0,s3 +20000bee: b7f1 j 20000bba +20000bf0: 02081f63 bnez a6,20000c2e +20000bf4: c15d beqz a0,20000c9a +20000bf6: 7771 lui a4,0xffffc +20000bf8: e4270713 addi a4,a4,-446 # ffffbe42 <__StackTop+0xdff79e42> +20000bfc: 56fd li a3,-1 +20000bfe: 00e51423 sh a4,8(a0) +20000c02: 00d50523 sb a3,10(a0) +20000c06: 40978733 sub a4,a5,s1 +20000c0a: aaaab6b7 lui a3,0xaaaab +20000c0e: aab68693 addi a3,a3,-1365 # aaaaaaab <__StackTop+0x8aa28aab> +20000c12: 8709 srai a4,a4,0x2 +20000c14: 02d70733 mul a4,a4,a3 +20000c18: 200076b7 lui a3,0x20007 +20000c1c: 1046c603 lbu a2,260(a3) # 20007104 +20000c20: 00c78523 sb a2,10(a5) +20000c24: 10e68223 sb a4,260(a3) +20000c28: f80b85e3 beqz s7,20000bb2 +20000c2c: bf4d j 20000bde +20000c2e: 200076b7 lui a3,0x20007 +20000c32: 00878713 addi a4,a5,8 +20000c36: e9468693 addi a3,a3,-364 # 20006e94 +20000c3a: 8e99 sub a3,a3,a4 +20000c3c: 00169713 slli a4,a3,0x1 +20000c40: 6605 lui a2,0x1 +20000c42: 0036d593 srli a1,a3,0x3 +20000c46: 8f71 and a4,a4,a2 +20000c48: 8991 andi a1,a1,4 +20000c4a: 00769613 slli a2,a3,0x7 +20000c4e: 28b01513 bseti a0,zero,0xb +20000c52: 8f4d or a4,a4,a1 +20000c54: 8e69 and a2,a2,a0 +20000c56: 00169593 slli a1,a3,0x1 +20000c5a: 8f51 or a4,a4,a2 +20000c5c: 6005f593 andi a1,a1,1536 +20000c60: 0026d613 srli a2,a3,0x2 +20000c64: 8f4d or a4,a4,a1 +20000c66: 10067613 andi a2,a2,256 +20000c6a: 00169593 slli a1,a3,0x1 +20000c6e: 8f51 or a4,a4,a2 +20000c70: 0805f593 andi a1,a1,128 +20000c74: 0016d613 srli a2,a3,0x1 +20000c78: 8f4d or a4,a4,a1 +20000c7a: 04067613 andi a2,a2,64 +20000c7e: 068a slli a3,a3,0x2 +20000c80: 8f51 or a4,a4,a2 +20000c82: 0386f693 andi a3,a3,56 +20000c86: 8f55 or a4,a4,a3 +20000c88: 00176713 ori a4,a4,1 +20000c8c: 28d71713 bseti a4,a4,0xd +20000c90: 00e79423 sh a4,8(a5) +20000c94: f00b8fe3 beqz s7,20000bb2 +20000c98: b799 j 20000bde +20000c9a: 8ada mv s5,s6 +20000c9c: b7ad j 20000c06 + +20000c9e : +20000c9e: be5027f3 csrr a5,0xbe5 +20000ca2: 01079713 slli a4,a5,0x10 +20000ca6: 4581 li a1,0 +20000ca8: 00074963 bltz a4,20000cba +20000cac: 8391 srli a5,a5,0x4 +20000cae: 1ff7f793 andi a5,a5,511 +20000cb2: 03478793 addi a5,a5,52 +20000cb6: 00279593 slli a1,a5,0x2 +20000cba: 30047673 csrrci a2,mstatus,8 +20000cbe: 200077b7 lui a5,0x20007 +20000cc2: 09978793 addi a5,a5,153 # 20007099 <_sw_spin_locks+0x9> +20000cc6: 00379713 slli a4,a5,0x3 +20000cca: 28e01733 bset a4,zero,a4 +20000cce: 9bf1 andi a5,a5,-4 +20000cd0: 44e7a6af amoor.w.aq a3,a4,(a5) +20000cd4: 8ef9 and a3,a3,a4 +20000cd6: feed bnez a3,20000cd0 +20000cd8: 0330000f fence rw,rw +20000cdc: 20007737 lui a4,0x20007 +20000ce0: e5870713 addi a4,a4,-424 # 20006e58 <__binary_info_end> +20000ce4: 40e507b3 sub a5,a0,a4 +20000ce8: aaaab6b7 lui a3,0xaaaab +20000cec: aab68693 addi a3,a3,-1365 # aaaaaaab <__StackTop+0x8aa28aab> +20000cf0: 8789 srai a5,a5,0x2 +20000cf2: 02d787b3 mul a5,a5,a3 +20000cf6: 60479793 sext.b a5,a5 +20000cfa: 305026f3 csrr a3,mtvec +20000cfe: 9af1 andi a3,a3,-4 +20000d00: 96ae add a3,a3,a1 +20000d02: 4294 lw a3,0(a3) +20000d04: 04a68763 beq a3,a0,20000d52 +20000d08: 00a70683 lb a3,10(a4) +20000d0c: 04f68d63 beq a3,a5,20000d66 +20000d10: 01670683 lb a3,22(a4) +20000d14: 06f68763 beq a3,a5,20000d82 +20000d18: 02270683 lb a3,34(a4) +20000d1c: 06f68563 beq a3,a5,20000d86 +20000d20: 02e70683 lb a3,46(a4) +20000d24: 06f68363 beq a3,a5,20000d8a +20000d28: 20007737 lui a4,0x20007 +20000d2c: 10474683 lbu a3,260(a4) # 20007104 +20000d30: 10f70223 sb a5,260(a4) +20000d34: 00d50523 sb a3,10(a0) +20000d38: 0330000f fence rw,rw +20000d3c: 200077b7 lui a5,0x20007 +20000d40: 09078793 addi a5,a5,144 # 20007090 <_sw_spin_locks> +20000d44: 000784a3 sb zero,9(a5) +20000d48: 00867793 andi a5,a2,8 +20000d4c: 3007a073 csrs mstatus,a5 +20000d50: 8082 ret +20000d52: 30502773 csrr a4,mtvec +20000d56: 200006b7 lui a3,0x20000 +20000d5a: 9b71 andi a4,a4,-4 +20000d5c: 972e add a4,a4,a1 +20000d5e: 1a468693 addi a3,a3,420 # 200001a4 <__unhandled_user_irq> +20000d62: c314 sw a3,0(a4) +20000d64: b7d1 j 20000d28 +20000d66: 4681 li a3,0 +20000d68: 20d6a6b3 sh1add a3,a3,a3 +20000d6c: 75f1 lui a1,0xffffc +20000d6e: 20e6c6b3 sh2add a3,a3,a4 +20000d72: 587d li a6,-1 +20000d74: e4258713 addi a4,a1,-446 # ffffbe42 <__StackTop+0xdff79e42> +20000d78: 01068523 sb a6,10(a3) +20000d7c: 00e69423 sh a4,8(a3) +20000d80: b765 j 20000d28 +20000d82: 4685 li a3,1 +20000d84: b7d5 j 20000d68 +20000d86: 4689 li a3,2 +20000d88: b7c5 j 20000d68 +20000d8a: 468d li a3,3 +20000d8c: bff1 j 20000d68 + +20000d8e : +20000d8e: 200077b7 lui a5,0x20007 +20000d92: 09078793 addi a5,a5,144 # 20007090 <_sw_spin_locks> +20000d96: 97ae add a5,a5,a1 +20000d98: c11c sw a5,0(a0) +20000d9a: 8082 ret + +20000d9c : +20000d9c: 1101 addi sp,sp,-32 +20000d9e: cc22 sw s0,24(sp) +20000da0: ca26 sw s1,20(sp) +20000da2: 20007437 lui s0,0x20007 +20000da6: 200074b7 lui s1,0x20007 +20000daa: ce06 sw ra,28(sp) +20000dac: ed440793 addi a5,s0,-300 # 20006ed4 +20000db0: edc48493 addi s1,s1,-292 # 20006edc <__pre_init_runtime_init_early_resets> +20000db4: 0297f863 bgeu a5,s1,20000de4 +20000db8: c84a sw s2,16(sp) +20000dba: c64e sw s3,12(sp) +20000dbc: ed440413 addi s0,s0,-300 +20000dc0: 59fd li s3,-1 +20000dc2: 0ff00913 li s2,255 +20000dc6: 401c lw a5,0(s0) +20000dc8: c39d beqz a5,20000dee +20000dca: 343d jal 200007f8 +20000dcc: 85aa mv a1,a0 +20000dce: 8522 mv a0,s0 +20000dd0: 3f7d jal 20000d8e +20000dd2: 01241223 sh s2,4(s0) +20000dd6: 0330000f fence rw,rw +20000dda: 0421 addi s0,s0,8 +20000ddc: fe9465e3 bltu s0,s1,20000dc6 +20000de0: 4942 lw s2,16(sp) +20000de2: 49b2 lw s3,12(sp) +20000de4: 40f2 lw ra,28(sp) +20000de6: 4462 lw s0,24(sp) +20000de8: 44d2 lw s1,20(sp) +20000dea: 6105 addi sp,sp,32 +20000dec: 8082 ret +20000dee: 3429 jal 200007f8 +20000df0: 85aa mv a1,a0 +20000df2: 8522 mv a0,s0 +20000df4: 3f69 jal 20000d8e +20000df6: 01340223 sb s3,4(s0) +20000dfa: 0330000f fence rw,rw +20000dfe: 0421 addi s0,s0,8 +20000e00: fc9463e3 bltu s0,s1,20000dc6 +20000e04: bff1 j 20000de0 + +20000e06 : +20000e06: 200076b7 lui a3,0x20007 +20000e0a: 1086a783 lw a5,264(a3) # 20007108 +20000e0e: 30047773 csrrci a4,mstatus,8 +20000e12: 00379613 slli a2,a5,0x3 +20000e16: 28c01633 bset a2,zero,a2 +20000e1a: 9bf1 andi a5,a5,-4 +20000e1c: 44c7a5af amoor.w.aq a1,a2,(a5) +20000e20: 8df1 and a1,a1,a2 +20000e22: fded bnez a1,20000e1c +20000e24: 0330000f fence rw,rw +20000e28: 1086a783 lw a5,264(a3) +20000e2c: 0330000f fence rw,rw +20000e30: 00078023 sb zero,0(a5) +20000e34: 00877793 andi a5,a4,8 +20000e38: 3007a073 csrs mstatus,a5 +20000e3c: 00102033 sgtz zero,ra +20000e40: 4501 li a0,0 +20000e42: 4581 li a1,0 +20000e44: 8082 ret + +20000e46 : +20000e46: 715d addi sp,sp,-80 +20000e48: c686 sw ra,76(sp) +20000e4a: c4a2 sw s0,72(sp) +20000e4c: c2a6 sw s1,68(sp) +20000e4e: c0ca sw s2,64(sp) +20000e50: de4e sw s3,60(sp) +20000e52: dc52 sw s4,56(sp) +20000e54: da56 sw s5,52(sp) +20000e56: d85a sw s6,48(sp) +20000e58: d65e sw s7,44(sp) +20000e5a: d462 sw s8,40(sp) +20000e5c: d266 sw s9,36(sp) +20000e5e: d06a sw s10,32(sp) +20000e60: ce6e sw s11,28(sp) +20000e62: be5027f3 csrr a5,0xbe5 +20000e66: 01079713 slli a4,a5,0x10 +20000e6a: 32074863 bltz a4,2000119a +20000e6e: 0047d993 srli s3,a5,0x4 +20000e72: 1ff9f793 andi a5,s3,511 +20000e76: 8389 srli a5,a5,0x2 +20000e78: 0039f993 andi s3,s3,3 +20000e7c: 29301a33 bset s4,zero,s3 +20000e80: 400b0937 lui s2,0x400b0 +20000e84: 34079663 bnez a5,200011d0 +20000e88: 20007737 lui a4,0x20007 +20000e8c: 2137c7b3 sh2add a5,a5,s3 +20000e90: 0e470713 addi a4,a4,228 # 200070e4 +20000e94: 20e7c7b3 sh2add a5,a5,a4 +20000e98: 0007aa83 lw s5,0(a5) +20000e9c: 678d lui a5,0x3 +20000e9e: 04478793 addi a5,a5,68 # 3044 +20000ea2: 97ca add a5,a5,s2 +20000ea4: 2129c9b3 sh2add s3,s3,s2 +20000ea8: 008a8b13 addi s6,s5,8 +20000eac: 0147a023 sw s4,0(a5) +20000eb0: 547d li s0,-1 +20000eb2: 54fd li s1,-1 +20000eb4: 008a9d03 lh s10,8(s5) +20000eb8: 03492e23 sw s4,60(s2) # 400b003c <__StackTop+0x2002e03c> +20000ebc: 080d5163 bgez s10,20000f3e +20000ec0: 004ad783 lhu a5,4(s5) +20000ec4: 60579793 sext.h a5,a5 +20000ec8: 1407dc63 bgez a5,20001020 +20000ecc: 006ac783 lbu a5,6(s5) +20000ed0: 1e079463 bnez a5,200010b8 +20000ed4: 008a9683 lh a3,8(s5) +20000ed8: 0406c263 bltz a3,20000f1c +20000edc: 014aa703 lw a4,20(s5) +20000ee0: 20d6a6b3 sh1add a3,a3,a3 +20000ee4: 57fd li a5,-1 +20000ee6: 20e6e6b3 sh3add a3,a3,a4 +20000eea: 0086ab83 lw s7,8(a3) +20000eee: 00c6ac03 lw s8,12(a3) +20000ef2: 2afb8163 beq s7,a5,20001194 +20000ef6: 02892703 lw a4,40(s2) +20000efa: 0109a783 lw a5,16(s3) +20000efe: 40eb86b3 sub a3,s7,a4 +20000f02: 8f99 sub a5,a5,a4 +20000f04: 00f6f463 bgeu a3,a5,20000f0c +20000f08: 0179a823 sw s7,16(s3) +20000f0c: 854a mv a0,s2 +20000f0e: 2565 jal 200015b6 +20000f10: 0185c663 blt a1,s8,20000f1c +20000f14: fabc10e3 bne s8,a1,20000eb4 +20000f18: f9757ee3 bgeu a0,s7,20000eb4 +20000f1c: 00102033 sgtz zero,ra +20000f20: 40b6 lw ra,76(sp) +20000f22: 4426 lw s0,72(sp) +20000f24: 4496 lw s1,68(sp) +20000f26: 4906 lw s2,64(sp) +20000f28: 59f2 lw s3,60(sp) +20000f2a: 5a62 lw s4,56(sp) +20000f2c: 5ad2 lw s5,52(sp) +20000f2e: 5b42 lw s6,48(sp) +20000f30: 5bb2 lw s7,44(sp) +20000f32: 5c22 lw s8,40(sp) +20000f34: 5c92 lw s9,36(sp) +20000f36: 5d02 lw s10,32(sp) +20000f38: 4df2 lw s11,28(sp) +20000f3a: 6161 addi sp,sp,80 +20000f3c: 8082 ret +20000f3e: 014aa783 lw a5,20(s5) +20000f42: 21ad2bb3 sh1add s7,s10,s10 +20000f46: 854a mv a0,s2 +20000f48: 20fbebb3 sh3add s7,s7,a5 +20000f4c: 00cbac03 lw s8,12(s7) +20000f50: 008bac83 lw s9,8(s7) +20000f54: 258d jal 200015b6 +20000f56: f785c5e3 blt a1,s8,20000ec0 +20000f5a: 1cbc0963 beq s8,a1,2000112c +20000f5e: 1c0c4b63 bltz s8,20001134 +20000f62: 010ba703 lw a4,16(s7) +20000f66: 200017b7 lui a5,0x20001 +20000f6a: e4678793 addi a5,a5,-442 # 20000e46 +20000f6e: 014ba583 lw a1,20(s7) +20000f72: 24f70563 beq a4,a5,200011bc +20000f76: 008a9783 lh a5,8(s5) +20000f7a: 002bd503 lhu a0,2(s7) +20000f7e: 07c2 slli a5,a5,0x10 +20000f80: 8d5d or a0,a0,a5 +20000f82: 9702 jalr a4 +20000f84: 872e mv a4,a1 +20000f86: 8daa mv s11,a0 +20000f88: 00ede7b3 or a5,s11,a4 +20000f8c: 1a078463 beqz a5,20001134 +20000f90: 20075b63 bgez a4,200011a6 +20000f94: 41bc86b3 sub a3,s9,s11 +20000f98: 00dcbcb3 sltu s9,s9,a3 +20000f9c: 40ec07b3 sub a5,s8,a4 +20000fa0: 419787b3 sub a5,a5,s9 +20000fa4: 000b9703 lh a4,0(s7) +20000fa8: 00dba423 sw a3,8(s7) +20000fac: 00fba623 sw a5,12(s7) +20000fb0: f00748e3 bltz a4,20000ec0 +20000fb4: 014aa503 lw a0,20(s5) +20000fb8: 20e72833 sh1add a6,a4,a4 +20000fbc: 00171613 slli a2,a4,0x1 +20000fc0: 20a86833 sh3add a6,a6,a0 +20000fc4: 00c82583 lw a1,12(a6) +20000fc8: 00882883 lw a7,8(a6) +20000fcc: eeb7cae3 blt a5,a1,20000ec0 +20000fd0: 00f59463 bne a1,a5,20000fd8 +20000fd4: ef16e6e3 bltu a3,a7,20000ec0 +20000fd8: 00ea9423 sh a4,8(s5) +20000fdc: 008a8813 addi a6,s5,8 +20000fe0: a031 j 20000fec +20000fe2: 00862883 lw a7,8(a2) # 1008 +20000fe6: 464c lw a1,12(a2) +20000fe8: 00171613 slli a2,a4,0x1 +20000fec: 963a add a2,a2,a4 +20000fee: 20a66633 sh3add a2,a2,a0 +20000ff2: 00b7cd63 blt a5,a1,2000100c +20000ff6: 1ef58163 beq a1,a5,200011d8 +20000ffa: 00061703 lh a4,0(a2) +20000ffe: 8832 mv a6,a2 +20001000: 20e72633 sh1add a2,a4,a4 +20001004: 20a66633 sh3add a2,a2,a0 +20001008: fc075de3 bgez a4,20000fe2 +2000100c: 00eb9023 sh a4,0(s7) +20001010: 01a81023 sh s10,0(a6) +20001014: 004ad783 lhu a5,4(s5) +20001018: 60579793 sext.h a5,a5 +2000101c: ea07c8e3 bltz a5,20000ecc +20001020: 010aa783 lw a5,16(s5) +20001024: 30047773 csrrci a4,mstatus,8 +20001028: 00379693 slli a3,a5,0x3 +2000102c: 28d016b3 bset a3,zero,a3 +20001030: 9bf1 andi a5,a5,-4 +20001032: 44d7a62f amoor.w.aq a2,a3,(a5) +20001036: 8e75 and a2,a2,a3 +20001038: fe6d bnez a2,20001032 +2000103a: 0330000f fence rw,rw +2000103e: 004ad883 lhu a7,4(s5) +20001042: 57fd li a5,-1 +20001044: 00fa9223 sh a5,4(s5) +20001048: 60589893 sext.h a7,a7 +2000104c: 010aa783 lw a5,16(s5) +20001050: 0330000f fence rw,rw +20001054: 00078023 sb zero,0(a5) +20001058: 00877793 andi a5,a4,8 +2000105c: 3007a073 csrs mstatus,a5 +20001060: e608c6e3 bltz a7,20000ecc +20001064: 014aa503 lw a0,20(s5) +20001068: 008a9703 lh a4,8(s5) +2000106c: 2118a833 sh1add a6,a7,a7 +20001070: 20a86833 sh3add a6,a6,a0 +20001074: 00882303 lw t1,8(a6) +20001078: 00c82603 lw a2,12(a6) +2000107c: 85da mv a1,s6 +2000107e: 00075a63 bgez a4,20001092 +20001082: a839 j 200010a0 +20001084: 0ec68c63 beq a3,a2,2000117c +20001088: 00079703 lh a4,0(a5) +2000108c: 85be mv a1,a5 +2000108e: 00074963 bltz a4,200010a0 +20001092: 20e727b3 sh1add a5,a4,a4 +20001096: 20a7e7b3 sh3add a5,a5,a0 +2000109a: 47d4 lw a3,12(a5) +2000109c: fed654e3 bge a2,a3,20001084 +200010a0: 01159023 sh a7,0(a1) +200010a4: 00081883 lh a7,0(a6) +200010a8: 00e81023 sh a4,0(a6) +200010ac: fa08dee3 bgez a7,20001068 +200010b0: 006ac783 lbu a5,6(s5) +200010b4: e20780e3 beqz a5,20000ed4 +200010b8: 000a8323 sb zero,6(s5) +200010bc: 008a9703 lh a4,8(s5) +200010c0: 557d li a0,-1 +200010c2: 835a mv t1,s6 +200010c4: e4a70ce3 beq a4,a0,20000f1c +200010c8: 014aa883 lw a7,20(s5) +200010cc: 20e727b3 sh1add a5,a4,a4 +200010d0: 86ba mv a3,a4 +200010d2: 2117e7b3 sh3add a5,a5,a7 +200010d6: 0027d603 lhu a2,2(a5) +200010da: 85ba mv a1,a4 +200010dc: 883a mv a6,a4 +200010de: 60561613 sext.h a2,a2 +200010e2: 00079703 lh a4,0(a5) +200010e6: 02064363 bltz a2,2000110c +200010ea: 833e mv t1,a5 +200010ec: dea706e3 beq a4,a0,20000ed8 +200010f0: 20e727b3 sh1add a5,a4,a4 +200010f4: 2117e7b3 sh3add a5,a5,a7 +200010f8: 0027d603 lhu a2,2(a5) +200010fc: 85ba mv a1,a4 +200010fe: 883a mv a6,a4 +20001100: 60561613 sext.h a2,a2 +20001104: 00079703 lh a4,0(a5) +20001108: fe0651e3 bgez a2,200010ea +2000110c: c780 sw s0,8(a5) +2000110e: c7c4 sw s1,12(a5) +20001110: 00d58a63 beq a1,a3,20001124 +20001114: 00e31023 sh a4,0(t1) # 1000 +20001118: 008ad683 lhu a3,8(s5) +2000111c: 00d79023 sh a3,0(a5) +20001120: 00ba9423 sh a1,8(s5) +20001124: 86c2 mv a3,a6 +20001126: fca715e3 bne a4,a0,200010f0 +2000112a: b37d j 20000ed8 +2000112c: d9956ae3 bltu a0,s9,20000ec0 +20001130: e20c59e3 bgez s8,20000f62 +20001134: 000bd703 lhu a4,0(s7) +20001138: 010aa783 lw a5,16(s5) +2000113c: 00ea9423 sh a4,8(s5) +20001140: 30047773 csrrci a4,mstatus,8 +20001144: 00379693 slli a3,a5,0x3 +20001148: 28d016b3 bset a3,zero,a3 +2000114c: 9bf1 andi a5,a5,-4 +2000114e: 44d7a62f amoor.w.aq a2,a3,(a5) +20001152: 8e75 and a2,a2,a3 +20001154: fe6d bnez a2,2000114e +20001156: 0330000f fence rw,rw +2000115a: 002ad683 lhu a3,2(s5) +2000115e: 010aa783 lw a5,16(s5) +20001162: 00db9023 sh a3,0(s7) +20001166: 01aa9123 sh s10,2(s5) +2000116a: 0330000f fence rw,rw +2000116e: 00078023 sb zero,0(a5) +20001172: 00877793 andi a5,a4,8 +20001176: 3007a073 csrs mstatus,a5 +2000117a: b399 j 20000ec0 +2000117c: 4794 lw a3,8(a5) +2000117e: f0d375e3 bgeu t1,a3,20001088 +20001182: 01159023 sh a7,0(a1) +20001186: 00081883 lh a7,0(a6) +2000118a: 00e81023 sh a4,0(a6) +2000118e: ec08dde3 bgez a7,20001068 +20001192: bf39 j 200010b0 +20001194: d77c11e3 bne s8,s7,20000ef6 +20001198: bb95 j 20000f0c +2000119a: 4a05 li s4,1 +2000119c: 87d2 mv a5,s4 +2000119e: 4981 li s3,0 +200011a0: 400b8937 lui s2,0x400b8 +200011a4: b1d5 j 20000e88 +200011a6: 854a mv a0,s2 +200011a8: c63a sw a4,12(sp) +200011aa: 2131 jal 200015b6 +200011ac: 4732 lw a4,12(sp) +200011ae: 01b506b3 add a3,a0,s11 +200011b2: 00a6b7b3 sltu a5,a3,a0 +200011b6: 972e add a4,a4,a1 +200011b8: 97ba add a5,a5,a4 +200011ba: b3ed j 20000fa4 +200011bc: 499c lw a5,16(a1) +200011be: 852e mv a0,a1 +200011c0: c62e sw a1,12(sp) +200011c2: 9782 jalr a5 +200011c4: d925 beqz a0,20001134 +200011c6: 45b2 lw a1,12(sp) +200011c8: 0005ad83 lw s11,0(a1) +200011cc: 41d8 lw a4,4(a1) +200011ce: bb6d j 20000f88 +200011d0: 4785 li a5,1 +200011d2: 400b8937 lui s2,0x400b8 +200011d6: b94d j 20000e88 +200011d8: e316f1e3 bgeu a3,a7,20000ffa +200011dc: bd05 j 2000100c + +200011de : +200011de: 1101 addi sp,sp,-32 +200011e0: cc22 sw s0,24(sp) +200011e2: 20007437 lui s0,0x20007 +200011e6: ea040413 addi s0,s0,-352 # 20006ea0 +200011ea: 481c lw a5,16(s0) +200011ec: ce06 sw ra,28(sp) +200011ee: cb91 beqz a5,20001202 +200011f0: 4462 lw s0,24(sp) +200011f2: 40f2 lw ra,28(sp) +200011f4: 20007537 lui a0,0x20007 +200011f8: 10850513 addi a0,a0,264 # 20007108 +200011fc: 45a9 li a1,10 +200011fe: 6105 addi sp,sp,32 +20001200: b679 j 20000d8e +20001202: 458d li a1,3 +20001204: 400b0537 lui a0,0x400b0 +20001208: ca26 sw s1,20(sp) +2000120a: c84a sw s2,16(sp) +2000120c: c64e sw s3,12(sp) +2000120e: c452 sw s4,8(sp) +20001210: 2659 jal 20001596 +20001212: 400b0a37 lui s4,0x400b0 +20001216: 448d li s1,3 +20001218: 01442623 sw s4,12(s0) +2000121c: ddcff0ef jal 200007f8 +20001220: d00007b7 lui a5,0xd0000 +20001224: 00940023 sb s1,0(s0) +20001228: 20007737 lui a4,0x20007 +2000122c: 0007a803 lw a6,0(a5) # d0000000 <__StackTop+0xaff7e000> +20001230: 09070713 addi a4,a4,144 # 20007090 <_sw_spin_locks> +20001234: 485c lw a5,20(s0) +20001236: 972a add a4,a4,a0 +20001238: 001106b7 lui a3,0x110 +2000123c: c818 sw a4,16(s0) +2000123e: 567d li a2,-1 +20001240: 16fd addi a3,a3,-1 # 10ffff +20001242: 45bd li a1,15 +20001244: 4709 li a4,2 +20001246: 010400a3 sb a6,1(s0) +2000124a: c414 sw a3,8(s0) +2000124c: 00b41123 sh a1,2(s0) +20001250: 00c41223 sh a2,4(s0) +20001254: 04e79423 sh a4,72(a5) +20001258: 4921 li s2,8 +2000125a: 4f11 li t5,4 +2000125c: 4e95 li t4,5 +2000125e: 4e19 li t3,6 +20001260: 431d li t1,7 +20001262: 48a5 li a7,9 +20001264: 4829 li a6,10 +20001266: 46b5 li a3,13 +20001268: 4739 li a4,14 +2000126a: 4985 li s3,1 +2000126c: 452d li a0,11 +2000126e: 45b1 li a1,12 +20001270: 06979023 sh s1,96(a5) +20001274: 07e79c23 sh t5,120(a5) +20001278: 09d79823 sh t4,144(a5) +2000127c: 0bc79423 sh t3,168(a5) +20001280: 0c679023 sh t1,192(a5) +20001284: 0f179823 sh a7,240(a5) +20001288: 11079423 sh a6,264(a5) +2000128c: 12a79023 sh a0,288(a5) +20001290: 12b79c23 sh a1,312(a5) +20001294: 14d79823 sh a3,336(a5) +20001298: 16e79423 sh a4,360(a5) +2000129c: 00c79023 sh a2,0(a5) +200012a0: 03379823 sh s3,48(a5) +200012a4: 0d279c23 sh s2,216(a5) +200012a8: 00079c23 sh zero,24(a5) +200012ac: 200015b7 lui a1,0x20001 +200012b0: 032a2023 sw s2,32(s4) # 400b0020 <__StackTop+0x2002e020> +200012b4: 200077b7 lui a5,0x20007 +200012b8: 8526 mv a0,s1 +200012ba: e4658593 addi a1,a1,-442 # 20000e46 +200012be: 0e87a823 sw s0,240(a5) # 200070f0 +200012c2: de0ff0ef jal 200008a2 +200012c6: 85ce mv a1,s3 +200012c8: 8526 mv a0,s1 +200012ca: da2ff0ef jal 2000086c +200012ce: 400b27b7 lui a5,0x400b2 +200012d2: 4462 lw s0,24(sp) +200012d4: 44d2 lw s1,20(sp) +200012d6: 49b2 lw s3,12(sp) +200012d8: 4a22 lw s4,8(sp) +200012da: 40f2 lw ra,28(sp) +200012dc: 0527a023 sw s2,64(a5) # 400b2040 <__StackTop+0x20030040> +200012e0: 4942 lw s2,16(sp) +200012e2: 20007537 lui a0,0x20007 +200012e6: 10850513 addi a0,a0,264 # 20007108 +200012ea: 45a9 li a1,10 +200012ec: 6105 addi sp,sp,32 +200012ee: b445 j 20000d8e + +200012f0 : +200012f0: 87aa mv a5,a0 +200012f2: 4908 lw a0,16(a0) +200012f4: 30047873 csrrci a6,mstatus,8 +200012f8: 00351893 slli a7,a0,0x3 +200012fc: 291018b3 bset a7,zero,a7 +20001300: 9971 andi a0,a0,-4 +20001302: 4515232f amoor.w.aq t1,a7,(a0) +20001306: 01137333 and t1,t1,a7 +2000130a: fe031ce3 bnez t1,20001302 +2000130e: 0330000f fence rw,rw +20001312: 00279303 lh t1,2(a5) +20001316: 0147a883 lw a7,20(a5) +2000131a: 00887513 andi a0,a6,8 +2000131e: 20632833 sh1add a6,t1,t1 +20001322: 21186833 sh3add a6,a6,a7 +20001326: 0107a883 lw a7,16(a5) +2000132a: 08034b63 bltz t1,200013c0 +2000132e: 00085e03 lhu t3,0(a6) +20001332: 01c79123 sh t3,2(a5) +20001336: 0330000f fence rw,rw +2000133a: 00088023 sb zero,0(a7) # 10000 +2000133e: 30052073 csrs mstatus,a0 +20001342: 00285883 lhu a7,2(a6) +20001346: 4e05 li t3,1 +20001348: 01031513 slli a0,t1,0x10 +2000134c: 98f2 add a7,a7,t3 +2000134e: 08c6 slli a7,a7,0x11 +20001350: 0118d893 srli a7,a7,0x11 +20001354: 0bc8f8b3 maxu a7,a7,t3 +20001358: 00e82a23 sw a4,20(a6) +2000135c: 00d82823 sw a3,16(a6) +20001360: 00b82423 sw a1,8(a6) +20001364: 00c82623 sw a2,12(a6) +20001368: 01181123 sh a7,2(a6) +2000136c: 01156533 or a0,a0,a7 +20001370: 4b98 lw a4,16(a5) +20001372: 300476f3 csrrci a3,mstatus,8 +20001376: 00371613 slli a2,a4,0x3 +2000137a: 28c01633 bset a2,zero,a2 +2000137e: 9b71 andi a4,a4,-4 +20001380: 44c725af amoor.w.aq a1,a2,(a4) +20001384: 8df1 and a1,a1,a2 +20001386: fded bnez a1,20001380 +20001388: 0330000f fence rw,rw +2000138c: 0047d603 lhu a2,4(a5) +20001390: 4b98 lw a4,16(a5) +20001392: 00c81023 sh a2,0(a6) +20001396: 00679223 sh t1,4(a5) +2000139a: 0330000f fence rw,rw +2000139e: 00070023 sb zero,0(a4) +200013a2: 0086f713 andi a4,a3,8 +200013a6: 30072073 csrs mstatus,a4 +200013aa: 0007c703 lbu a4,0(a5) +200013ae: 47dc lw a5,12(a5) +200013b0: 6689 lui a3,0x2 +200013b2: 04468693 addi a3,a3,68 # 2044 +200013b6: 28e01733 bset a4,zero,a4 +200013ba: 97b6 add a5,a5,a3 +200013bc: c398 sw a4,0(a5) +200013be: 8082 ret +200013c0: 0330000f fence rw,rw +200013c4: 00088023 sb zero,0(a7) +200013c8: 30052073 csrs mstatus,a0 +200013cc: 557d li a0,-1 +200013ce: 8082 ret + +200013d0 : +200013d0: 00a55703 lhu a4,10(a0) +200013d4: 4105d793 srai a5,a1,0x10 +200013d8: 04e7d863 bge a5,a4,20001428 +200013dc: 4954 lw a3,20(a0) +200013de: 20f7a7b3 sh1add a5,a5,a5 +200013e2: 4918 lw a4,16(a0) +200013e4: 20d7e7b3 sh3add a5,a5,a3 +200013e8: 300476f3 csrrci a3,mstatus,8 +200013ec: 00371613 slli a2,a4,0x3 +200013f0: 28c01633 bset a2,zero,a2 +200013f4: 9b71 andi a4,a4,-4 +200013f6: 44c7282f amoor.w.aq a6,a2,(a4) +200013fa: 00c87833 and a6,a6,a2 +200013fe: fe081ce3 bnez a6,200013f6 +20001402: 0330000f fence rw,rw +20001406: 0027d603 lhu a2,2(a5) +2000140a: 0805c5b3 zext.h a1,a1 +2000140e: 0086f713 andi a4,a3,8 +20001412: 080646b3 zext.h a3,a2 +20001416: 00b60b63 beq a2,a1,2000142c +2000141a: 491c lw a5,16(a0) +2000141c: 0330000f fence rw,rw +20001420: 00078023 sb zero,0(a5) +20001424: 30072073 csrs mstatus,a4 +20001428: 4501 li a0,0 +2000142a: 8082 ret +2000142c: 28f69693 bseti a3,a3,0xf +20001430: 00d79123 sh a3,2(a5) +20001434: 4785 li a5,1 +20001436: 00f50323 sb a5,6(a0) +2000143a: 4914 lw a3,16(a0) +2000143c: 0330000f fence rw,rw +20001440: 00068023 sb zero,0(a3) +20001444: 30072073 csrs mstatus,a4 +20001448: 00054683 lbu a3,0(a0) +2000144c: 4558 lw a4,12(a0) +2000144e: 6609 lui a2,0x2 +20001450: 04460613 addi a2,a2,68 # 2044 +20001454: 28d016b3 bset a3,zero,a3 +20001458: 9732 add a4,a4,a2 +2000145a: 853e mv a0,a5 +2000145c: c314 sw a3,0(a4) +2000145e: 8082 ret + +20001460 : +20001460: 1141 addi sp,sp,-16 +20001462: c422 sw s0,8(sp) +20001464: c226 sw s1,4(sp) +20001466: c606 sw ra,12(sp) +20001468: 84aa mv s1,a0 +2000146a: 842e mv s0,a1 +2000146c: be502773 csrr a4,0xbe5 +20001470: 01071793 slli a5,a4,0x10 +20001474: 0407da63 bgez a5,200014c8 +20001478: c04a sw s2,0(sp) +2000147a: 20007937 lui s2,0x20007 +2000147e: ea090793 addi a5,s2,-352 # 20006ea0 +20001482: 0007c703 lbu a4,0(a5) +20001486: 47dc lw a5,12(a5) +20001488: 20f74733 sh2add a4,a4,a5 +2000148c: 579c lw a5,40(a5) +2000148e: 4b18 lw a4,16(a4) +20001490: 40f506b3 sub a3,a0,a5 +20001494: 8f1d sub a4,a4,a5 +20001496: 04e6ed63 bltu a3,a4,200014f0 +2000149a: 00002033 sltz zero,zero +2000149e: 400b07b7 lui a5,0x400b0 +200014a2: 53d8 lw a4,36(a5) +200014a4: 4501 li a0,0 +200014a6: 0ab76963 bltu a4,a1,20001558 +200014aa: 579c lw a5,40(a5) +200014ac: 8f0d sub a4,a4,a1 +200014ae: 4902 lw s2,0(sp) +200014b0: 0097b533 sltu a0,a5,s1 +200014b4: 00e03733 snez a4,a4 +200014b8: 00153513 seqz a0,a0 +200014bc: 8d59 or a0,a0,a4 +200014be: 40b2 lw ra,12(sp) +200014c0: 4422 lw s0,8(sp) +200014c2: 4492 lw s1,4(sp) +200014c4: 0141 addi sp,sp,16 +200014c6: 8082 ret +200014c8: 400b07b7 lui a5,0x400b0 +200014cc: 53d8 lw a4,36(a5) +200014ce: 4501 li a0,0 +200014d0: feb767e3 bltu a4,a1,200014be +200014d4: 579c lw a5,40(a5) +200014d6: 40b2 lw ra,12(sp) +200014d8: 4422 lw s0,8(sp) +200014da: 0097b533 sltu a0,a5,s1 +200014de: 8f0d sub a4,a4,a1 +200014e0: 00e03733 snez a4,a4 +200014e4: 00153513 seqz a0,a0 +200014e8: 4492 lw s1,4(sp) +200014ea: 8d59 or a0,a0,a4 +200014ec: 0141 addi sp,sp,16 +200014ee: 8082 ret +200014f0: 28d9 jal 200015c6 +200014f2: 40a48533 sub a0,s1,a0 +200014f6: 00a4b533 sltu a0,s1,a0 +200014fa: 40b405b3 sub a1,s0,a1 +200014fe: 8d89 sub a1,a1,a0 +20001500: 0605c263 bltz a1,20001564 +20001504: 200016b7 lui a3,0x20001 +20001508: 85a6 mv a1,s1 +2000150a: e0668693 addi a3,a3,-506 # 20000e06 +2000150e: 4701 li a4,0 +20001510: 8622 mv a2,s0 +20001512: ea090513 addi a0,s2,-352 +20001516: 3be9 jal 200012f0 +20001518: 85aa mv a1,a0 +2000151a: 04a05563 blez a0,20001564 +2000151e: 400b07b7 lui a5,0x400b0 +20001522: 53d8 lw a4,36(a5) +20001524: 04876a63 bltu a4,s0,20001578 +20001528: 579c lw a5,40(a5) +2000152a: 0497e563 bltu a5,s1,20001574 +2000152e: ea090513 addi a0,s2,-352 +20001532: 3d79 jal 200013d0 +20001534: 400b0737 lui a4,0x400b0 +20001538: 535c lw a5,36(a4) +2000153a: 4501 li a0,0 +2000153c: 0087ee63 bltu a5,s0,20001558 +20001540: 5714 lw a3,40(a4) +20001542: 8f81 sub a5,a5,s0 +20001544: 00f03733 snez a4,a5 +20001548: 0096b7b3 sltu a5,a3,s1 +2000154c: 0017b793 seqz a5,a5 +20001550: 4902 lw s2,0(sp) +20001552: 00f76533 or a0,a4,a5 +20001556: b7a5 j 200014be +20001558: 40b2 lw ra,12(sp) +2000155a: 4422 lw s0,8(sp) +2000155c: 4902 lw s2,0(sp) +2000155e: 4492 lw s1,4(sp) +20001560: 0141 addi sp,sp,16 +20001562: 8082 ret +20001564: 400b0737 lui a4,0x400b0 +20001568: 535c lw a5,36(a4) +2000156a: 0087fa63 bgeu a5,s0,2000157e +2000156e: 4902 lw s2,0(sp) +20001570: 4501 li a0,0 +20001572: b7b1 j 200014be +20001574: fa871de3 bne a4,s0,2000152e +20001578: 00002033 sltz zero,zero +2000157c: bf4d j 2000152e +2000157e: 5718 lw a4,40(a4) +20001580: 8f81 sub a5,a5,s0 +20001582: 00f037b3 snez a5,a5 +20001586: 00973733 sltu a4,a4,s1 +2000158a: 00173713 seqz a4,a4 +2000158e: 4902 lw s2,0(sp) +20001590: 00e7e533 or a0,a5,a4 +20001594: b72d j 200014be + +20001596 : +20001596: bff487b7 lui a5,0xbff48 +2000159a: 97aa add a5,a5,a0 +2000159c: 20007537 lui a0,0x20007 +200015a0: 0017b793 seqz a5,a5 +200015a4: 10c50513 addi a0,a0,268 # 2000710c +200015a8: 20007637 lui a2,0x20007 +200015ac: 953e add a0,a0,a5 +200015ae: 88860613 addi a2,a2,-1912 # 20006888 +200015b2: 8f8ff06f j 200006aa + +200015b6 : +200015b6: 514c lw a1,36(a0) +200015b8: 87aa mv a5,a0 +200015ba: 5788 lw a0,40(a5) +200015bc: 872e mv a4,a1 +200015be: 53cc lw a1,36(a5) +200015c0: feb71de3 bne a4,a1,200015ba +200015c4: 8082 ret + +200015c6 : +200015c6: 400b07b7 lui a5,0x400b0 +200015ca: 53cc lw a1,36(a5) +200015cc: 5788 lw a0,40(a5) +200015ce: 872e mv a4,a1 +200015d0: 53cc lw a1,36(a5) +200015d2: fee59de3 bne a1,a4,200015cc +200015d6: 8082 ret + +200015d8 : +200015d8: 400b0737 lui a4,0x400b0 +200015dc: 535c lw a5,36(a4) +200015de: 02872803 lw a6,40(a4) # 400b0028 <__StackTop+0x2002e028> +200015e2: 86be mv a3,a5 +200015e4: 535c lw a5,36(a4) +200015e6: fed79ce3 bne a5,a3,200015de +200015ea: 01050633 add a2,a0,a6 +200015ee: 95be add a1,a1,a5 +200015f0: 00a63733 sltu a4,a2,a0 +200015f4: 972e add a4,a4,a1 +200015f6: 02f76c63 bltu a4,a5,2000162e +200015fa: 02e78863 beq a5,a4,2000162a +200015fe: 400b07b7 lui a5,0x400b0 +20001602: 53dc lw a5,36(a5) +20001604: 00e7f763 bgeu a5,a4,20001612 +20001608: 400b06b7 lui a3,0x400b0 +2000160c: 52dc lw a5,36(a3) +2000160e: fee7efe3 bltu a5,a4,2000160c +20001612: 00e79b63 bne a5,a4,20001628 +20001616: 400b0737 lui a4,0x400b0 +2000161a: a021 j 20001622 +2000161c: 5354 lw a3,36(a4) +2000161e: 00f69563 bne a3,a5,20001628 +20001622: 5714 lw a3,40(a4) +20001624: fec6ece3 bltu a3,a2,2000161c +20001628: 8082 ret +2000162a: fd067ae3 bgeu a2,a6,200015fe +2000162e: 400b07b7 lui a5,0x400b0 +20001632: 53dc lw a5,36(a5) +20001634: 577d li a4,-1 +20001636: 863a mv a2,a4 +20001638: fce798e3 bne a5,a4,20001608 +2000163c: 863e mv a2,a5 +2000163e: bfe1 j 20001616 + +20001640 : +20001640: 1101 addi sp,sp,-32 +20001642: cc22 sw s0,24(sp) +20001644: 842a mv s0,a0 +20001646: 4519 li a0,6 +20001648: ca26 sw s1,20(sp) +2000164a: ce06 sw ra,28(sp) +2000164c: 84ae mv s1,a1 +2000164e: 2add jal 20001844 +20001650: c155 beqz a0,200016f4 +20001652: c84a sw s2,16(sp) +20001654: c64e sw s3,12(sp) +20001656: 400787b7 lui a5,0x40078 +2000165a: 04000737 lui a4,0x4000 +2000165e: 0ef40d63 beq s0,a5,20001758 +20001662: 400227b7 lui a5,0x40022 +20001666: c398 sw a4,0(a5) +20001668: 400206b7 lui a3,0x40020 +2000166c: 400237b7 lui a5,0x40023 +20001670: c398 sw a4,0(a5) +20001672: 06a1 addi a3,a3,8 # 40020008 <__StackTop+0x1ff9e008> +20001674: 429c lw a5,0(a3) +20001676: 40f777b3 andn a5,a4,a5 +2000167a: ffed bnez a5,20001674 +2000167c: bff887b7 lui a5,0xbff88 +20001680: 97a2 add a5,a5,s0 +20001682: 80c18713 addi a4,gp,-2036 # 20007110 +20001686: 0017b793 seqz a5,a5 +2000168a: 20e7a7b3 sh1add a5,a5,a4 +2000168e: 4519 li a0,6 +20001690: 10000713 li a4,256 +20001694: 00e79023 sh a4,0(a5) # bff88000 <__StackTop+0x9ff06000> +20001698: 2275 jal 20001844 +2000169a: 00351793 slli a5,a0,0x3 +2000169e: 0297d7b3 divu a5,a5,s1 +200016a2: 0785 addi a5,a5,1 +200016a4: 0077d713 srli a4,a5,0x7 +200016a8: eb39 bnez a4,200016fe +200016aa: 04000993 li s3,64 +200016ae: 4685 li a3,1 +200016b0: d054 sw a3,36(s0) +200016b2: d418 sw a4,40(s0) +200016b4: 03042903 lw s2,48(s0) +200016b8: 00197793 andi a5,s2,1 +200016bc: e3bd bnez a5,20001722 +200016be: 6485 lui s1,0x1 +200016c0: 02c48493 addi s1,s1,44 # 102c +200016c4: 94a2 add s1,s1,s0 +200016c6: 545c lw a5,44(s0) +200016c8: 0004a023 sw zero,0(s1) +200016cc: 03242823 sw s2,48(s0) +200016d0: 4519 li a0,6 +200016d2: 2a8d jal 20001844 +200016d4: 545c lw a5,44(s0) +200016d6: 050a slli a0,a0,0x2 +200016d8: 03355533 divu a0,a0,s3 +200016dc: 0707c793 xori a5,a5,112 +200016e0: 07e7f793 andi a5,a5,126 +200016e4: c09c sw a5,0(s1) +200016e6: 30100693 li a3,769 +200016ea: 4942 lw s2,16(sp) +200016ec: 49b2 lw s3,12(sp) +200016ee: 470d li a4,3 +200016f0: d814 sw a3,48(s0) +200016f2: c438 sw a4,72(s0) +200016f4: 40f2 lw ra,28(sp) +200016f6: 4462 lw s0,24(sp) +200016f8: 44d2 lw s1,20(sp) +200016fa: 6105 addi sp,sp,32 +200016fc: 8082 ret +200016fe: 6641 lui a2,0x10 +20001700: 1679 addi a2,a2,-2 # fffe +20001702: 66c1 lui a3,0x10 +20001704: 04e67d63 bgeu a2,a4,2000175e +20001708: 16fd addi a3,a3,-1 # ffff +2000170a: d054 sw a3,36(s0) +2000170c: 4701 li a4,0 +2000170e: d418 sw a4,40(s0) +20001710: 03042903 lw s2,48(s0) +20001714: 004009b7 lui s3,0x400 +20001718: fc098993 addi s3,s3,-64 # 3fffc0 +2000171c: 00197793 andi a5,s2,1 +20001720: dfd9 beqz a5,200016be +20001722: 678d lui a5,0x3 +20001724: 03078793 addi a5,a5,48 # 3030 +20001728: 97a2 add a5,a5,s0 +2000172a: 30100713 li a4,769 +2000172e: c398 sw a4,0(a5) +20001730: 5044 lw s1,36(s0) +20001732: 541c lw a5,40(s0) +20001734: 4519 li a0,6 +20001736: 049a slli s1,s1,0x6 +20001738: 94be add s1,s1,a5 +2000173a: 2229 jal 20001844 +2000173c: 8f2b87b7 lui a5,0x8f2b8 +20001740: b7578793 addi a5,a5,-1163 # 8f2b7b75 <__StackTop+0x6f235b75> +20001744: 02f537b3 mulhu a5,a0,a5 +20001748: 00a49513 slli a0,s1,0xa +2000174c: 4581 li a1,0 +2000174e: 83ad srli a5,a5,0xb +20001750: 02f55533 divu a0,a0,a5 +20001754: 3551 jal 200015d8 +20001756: b7a5 j 200016be +20001758: 08000737 lui a4,0x8000 +2000175c: b719 j 20001662 +2000175e: 8385 srli a5,a5,0x1 +20001760: 03f7f793 andi a5,a5,63 +20001764: 00671993 slli s3,a4,0x6 +20001768: 86ba mv a3,a4 +2000176a: 99be add s3,s3,a5 +2000176c: 873e mv a4,a5 +2000176e: b789 j 200016b0 + +20001770 : +20001770: 400107b7 lui a5,0x40010 +20001774: 20a52733 sh1add a4,a0,a0 +20001778: 20f74733 sh2add a4,a4,a5 +2000177c: 00472803 lw a6,4(a4) # 8000004 +20001780: 67c1 lui a5,0x10 +20001782: 00f87363 bgeu a6,a5,20001788 +20001786: c35c sw a5,4(a4) +20001788: ffc50813 addi a6,a0,-4 +2000178c: 4785 li a5,1 +2000178e: 0707f663 bgeu a5,a6,200017fa +20001792: 20007337 lui t1,0x20007 +20001796: 0bc30313 addi t1,t1,188 # 200070bc +2000179a: 206547b3 sh2add a5,a0,t1 +2000179e: 0007a883 lw a7,0(a5) # 10000 +200017a2: 678d lui a5,0x3 +200017a4: 97ba add a5,a5,a4 +200017a6: 28b01e13 bseti t3,zero,0xb +200017aa: 01c7a023 sw t3,0(a5) # 3000 +200017ae: 050a slli a0,a0,0x2 +200017b0: 02089963 bnez a7,200017e2 +200017b4: 00072883 lw a7,0(a4) +200017b8: 0616 slli a2,a2,0x5 +200017ba: 6785 lui a5,0x1 +200017bc: 01164633 xor a2,a2,a7 +200017c0: 0e067613 andi a2,a2,224 +200017c4: 97ba add a5,a5,a4 +200017c6: c390 sw a2,0(a5) +200017c8: 4605 li a2,1 +200017ca: 07067163 bgeu a2,a6,2000182c +200017ce: 6789 lui a5,0x2 +200017d0: 97ba add a5,a5,a4 +200017d2: 28b01613 bseti a2,zero,0xb +200017d6: c390 sw a2,0(a5) +200017d8: 951a add a0,a0,t1 +200017da: 67c1 lui a5,0x10 +200017dc: c114 sw a3,0(a0) +200017de: c35c sw a5,4(a4) +200017e0: 8082 ret +200017e2: 01432783 lw a5,20(t1) +200017e6: 0317d7b3 divu a5,a5,a7 +200017ea: 0785 addi a5,a5,1 # 10001 +200017ec: 20f7a7b3 sh1add a5,a5,a5 +200017f0: ffe78793 addi a5,a5,-2 +200017f4: fe07dee3 bgez a5,200017f0 +200017f8: bf75 j 200017b4 +200017fa: f8f59ce3 bne a1,a5,20001792 +200017fe: 678d lui a5,0x3 +20001800: 97ba add a5,a5,a4 +20001802: 480d li a6,3 +20001804: 0107a023 sw a6,0(a5) # 3000 +20001808: 471c lw a5,8(a4) +2000180a: 8b85 andi a5,a5,1 +2000180c: dff5 beqz a5,20001808 +2000180e: 00072803 lw a6,0(a4) +20001812: 0616 slli a2,a2,0x5 +20001814: 6785 lui a5,0x1 +20001816: 01064633 xor a2,a2,a6 +2000181a: 0e067613 andi a2,a2,224 +2000181e: 97ba add a5,a5,a4 +20001820: 20007337 lui t1,0x20007 +20001824: 050a slli a0,a0,0x2 +20001826: c390 sw a2,0(a5) +20001828: 0bc30313 addi t1,t1,188 # 200070bc +2000182c: 00072803 lw a6,0(a4) +20001830: 28b01633 bset a2,zero,a1 +20001834: 0105c5b3 xor a1,a1,a6 +20001838: 898d andi a1,a1,3 +2000183a: c38c sw a1,0(a5) +2000183c: 471c lw a5,8(a4) +2000183e: 8ff1 and a5,a5,a2 +20001840: dff5 beqz a5,2000183c +20001842: b771 j 200017ce + +20001844 : +20001844: 200077b7 lui a5,0x20007 +20001848: 0bc78793 addi a5,a5,188 # 200070bc +2000184c: 20f54533 sh2add a0,a0,a5 +20001850: 4108 lw a0,0(a0) +20001852: 8082 ret + +20001854 : +20001854: 00b727b7 lui a5,0xb72 +20001858: b0078793 addi a5,a5,-1280 # b71b00 +2000185c: 02b7d7b3 divu a5,a5,a1 +20001860: 00052883 lw a7,0(a0) +20001864: 06c2 slli a3,a3,0x10 +20001866: 0732 slli a4,a4,0xc +20001868: 00e6e833 or a6,a3,a4 +2000186c: 02f65633 divu a2,a2,a5 +20001870: 0408c463 bltz a7,200018b8 +20001874: 400587b7 lui a5,0x40058 +20001878: 6711 lui a4,0x4 +2000187a: 06f50063 beq a0,a5,200018da +2000187e: 400227b7 lui a5,0x40022 +20001882: c398 sw a4,0(a5) +20001884: 400206b7 lui a3,0x40020 +20001888: 400237b7 lui a5,0x40023 +2000188c: c398 sw a4,0(a5) +2000188e: 06a1 addi a3,a3,8 # 40020008 <__StackTop+0x1ff9e008> +20001890: 429c lw a5,0(a3) +20001892: 40f777b3 andn a5,a4,a5 +20001896: ffed bnez a5,20001890 +20001898: 670d lui a4,0x3 +2000189a: c10c sw a1,0(a0) +2000189c: 0711 addi a4,a4,4 # 3004 +2000189e: c510 sw a2,8(a0) +200018a0: 972a add a4,a4,a0 +200018a2: 02100793 li a5,33 +200018a6: c31c sw a5,0(a4) +200018a8: 411c lw a5,0(a0) +200018aa: fe07dfe3 bgez a5,200018a8 +200018ae: 01052623 sw a6,12(a0) +200018b2: 47a1 li a5,8 +200018b4: c31c sw a5,0(a4) +200018b6: 8082 ret +200018b8: 411c lw a5,0(a0) +200018ba: 03f7f793 andi a5,a5,63 +200018be: fab79be3 bne a5,a1,20001874 +200018c2: 451c lw a5,8(a0) +200018c4: 07d2 slli a5,a5,0x14 +200018c6: 83d1 srli a5,a5,0x14 +200018c8: fac796e3 bne a5,a2,20001874 +200018cc: 455c lw a5,12(a0) +200018ce: 00077737 lui a4,0x77 +200018d2: 8ff9 and a5,a5,a4 +200018d4: fb0790e3 bne a5,a6,20001874 +200018d8: 8082 ret +200018da: 6721 lui a4,0x8 +200018dc: b74d j 2000187e + +200018de : +200018de: 401087b7 lui a5,0x40108 +200018e2: 20a52533 sh1add a0,a0,a0 +200018e6: 20f54533 sh2add a0,a0,a5 +200018ea: c14c sw a1,4(a0) +200018ec: 4785 li a5,1 +200018ee: c11c sw a5,0(a0) +200018f0: 8082 ret + +200018f2 : +200018f2: 67a1 lui a5,0x8 +200018f4: dfa78793 addi a5,a5,-518 # 7dfa +200018f8: 0007d783 lhu a5,0(a5) +200018fc: 4585 li a1,1 +200018fe: 8782 jr a5 + +20001900 : +20001900: 400e17b7 lui a5,0x400e1 +20001904: 82878793 addi a5,a5,-2008 # 400e0828 <__StackTop+0x2005e828> +20001908: 4398 lw a4,0(a5) +2000190a: df7d beqz a4,20001908 +2000190c: 0330000f fence rw,rw +20001910: 8082 ret + +20001912 : +20001912: 400e17b7 lui a5,0x400e1 +20001916: 873e mv a4,a5 +20001918: 82c70713 addi a4,a4,-2004 # 782c +2000191c: 80c78793 addi a5,a5,-2036 # 400e080c <__StackTop+0x2005e80c> +20001920: 0330000f fence rw,rw +20001924: 0007a023 sw zero,0(a5) +20001928: 0791 addi a5,a5,4 +2000192a: fee79be3 bne a5,a4,20001920 +2000192e: 8082 ret + +20001930 : +20001930: 6785 lui a5,0x1 +20001932: aa078793 addi a5,a5,-1376 # aa0 +20001936: 40048737 lui a4,0x40048 +2000193a: c31c sw a5,0(a4) +2000193c: 02f00793 li a5,47 +20001940: c75c sw a5,12(a4) +20001942: 00fab6b7 lui a3,0xfab +20001946: 4004a7b7 lui a5,0x4004a +2000194a: c394 sw a3,0(a5) +2000194c: 435c lw a5,4(a4) +2000194e: fe07dfe3 bgez a5,2000194c +20001952: 8082 ret + +20001954 : +20001954: 8082 ret + +20001956 : +20001956: 20007537 lui a0,0x20007 +2000195a: 1141 addi sp,sp,-16 +2000195c: 8ac50513 addi a0,a0,-1876 # 200068ac +20001960: c606 sw ra,12(sp) +20001962: ccdfe0ef jal 2000062e + +20001966 : +20001966: 1141 addi sp,sp,-16 +20001968: c422 sw s0,8(sp) +2000196a: c226 sw s1,4(sp) +2000196c: 20007437 lui s0,0x20007 +20001970: 200074b7 lui s1,0x20007 +20001974: c606 sw ra,12(sp) +20001976: edc40793 addi a5,s0,-292 # 20006edc <__pre_init_runtime_init_early_resets> +2000197a: f1048493 addi s1,s1,-240 # 20006f10 +2000197e: 0097f963 bgeu a5,s1,20001990 +20001982: edc40413 addi s0,s0,-292 +20001986: 401c lw a5,0(s0) +20001988: 0411 addi s0,s0,4 +2000198a: 9782 jalr a5 +2000198c: fe946de3 bltu s0,s1,20001986 +20001990: 40b2 lw ra,12(sp) +20001992: 4422 lw s0,8(sp) +20001994: 4492 lw s1,4(sp) +20001996: 0141 addi sp,sp,16 +20001998: 8082 ret + +2000199a : +2000199a: efef47b7 lui a5,0xefef4 +2000199e: b7f78793 addi a5,a5,-1153 # efef3b7f <__StackTop+0xcfe71b7f> +200019a2: 400226b7 lui a3,0x40022 +200019a6: 03f40737 lui a4,0x3f40 +200019aa: c29c sw a5,0(a3) +200019ac: 1759 addi a4,a4,-10 # 3f3fff6 +200019ae: 400237b7 lui a5,0x40023 +200019b2: 400206b7 lui a3,0x40020 +200019b6: c398 sw a4,0(a5) +200019b8: 06a1 addi a3,a3,8 # 40020008 <__StackTop+0x1ff9e008> +200019ba: 429c lw a5,0(a3) +200019bc: 40f777b3 andn a5,a4,a5 +200019c0: ffed bnez a5,200019ba +200019c2: 8082 ret + +200019c4 : +200019c4: 501107b7 lui a5,0x50110 +200019c8: 47f8 lw a4,76(a5) +200019ca: 67a1 lui a5,0x8 +200019cc: 00f70363 beq a4,a5,200019d2 +200019d0: 8082 ret +200019d2: 501127b7 lui a5,0x50112 +200019d6: 00040737 lui a4,0x40 +200019da: c7f8 sw a4,76(a5) +200019dc: 8082 ret + +200019de : +200019de: 20000737 lui a4,0x20000 +200019e2: 177d addi a4,a4,-1 # 1fffffff +200019e4: 400237b7 lui a5,0x40023 +200019e8: 400206b7 lui a3,0x40020 +200019ec: c398 sw a4,0(a5) +200019ee: 06a1 addi a3,a3,8 # 40020008 <__StackTop+0x1ff9e008> +200019f0: 429c lw a5,0(a3) +200019f2: 40f777b3 andn a5,a4,a5 +200019f6: ffed bnez a5,200019f0 +200019f8: 8082 ret + +200019fa : +200019fa: 6515 lui a0,0x5 +200019fc: 1141 addi sp,sp,-16 +200019fe: 25350513 addi a0,a0,595 # 5253 +20001a02: c606 sw ra,12(sp) +20001a04: 35fd jal 200018f2 +20001a06: 40b2 lw ra,12(sp) +20001a08: 87aa mv a5,a0 +20001a0a: 4505 li a0,1 +20001a0c: 0141 addi sp,sp,16 +20001a0e: 8782 jr a5 + +20001a10 : +20001a10: e07fe06f j 20000816 + +20001a14 : +20001a14: 1141 addi sp,sp,-16 +20001a16: c422 sw s0,8(sp) +20001a18: c606 sw ra,12(sp) +20001a1a: c226 sw s1,4(sp) +20001a1c: c04a sw s2,0(sp) +20001a1e: 40010437 lui s0,0x40010 +20001a22: 08042223 sw zero,132(s0) # 40010084 <__StackTop+0x1ff8e084> +20001a26: 3729 jal 20001930 +20001a28: 400137b7 lui a5,0x40013 +20001a2c: 4705 li a4,1 +20001a2e: dfd8 sw a4,60(a5) +20001a30: 407c lw a5,68(s0) +20001a32: fee79fe3 bne a5,a4,20001a30 +20001a36: 470d li a4,3 +20001a38: 400137b7 lui a5,0x40013 +20001a3c: db98 sw a4,48(a5) +20001a3e: 4405 li s0,1 +20001a40: 40010737 lui a4,0x40010 +20001a44: 5f1c lw a5,56(a4) +20001a46: fe879fe3 bne a5,s0,20001a44 +20001a4a: 59683637 lui a2,0x59683 +20001a4e: 85a2 mv a1,s0 +20001a50: f0060613 addi a2,a2,-256 # 59682f00 <__StackTop+0x39600f00> +20001a54: 4709 li a4,2 +20001a56: 4695 li a3,5 +20001a58: 40050537 lui a0,0x40050 +20001a5c: 3be5 jal 20001854 +20001a5e: 4715 li a4,5 +20001a60: 47869637 lui a2,0x47869 +20001a64: 86ba mv a3,a4 +20001a66: 85a2 mv a1,s0 +20001a68: c0060613 addi a2,a2,-1024 # 47868c00 <__StackTop+0x277e6c00> +20001a6c: 40058537 lui a0,0x40058 +20001a70: 33d5 jal 20001854 +20001a72: 00b726b7 lui a3,0xb72 +20001a76: b0068693 addi a3,a3,-1280 # b71b00 +20001a7a: 4601 li a2,0 +20001a7c: 4589 li a1,2 +20001a7e: 4511 li a0,4 +20001a80: 39c5 jal 20001770 +20001a82: 08f0d6b7 lui a3,0x8f0d +20001a86: 85a2 mv a1,s0 +20001a88: 18068693 addi a3,a3,384 # 8f0d180 +20001a8c: 4601 li a2,0 +20001a8e: 4515 li a0,5 +20001a90: 31c5 jal 20001770 +20001a92: 02dc76b7 lui a3,0x2dc7 +20001a96: c0068693 addi a3,a3,-1024 # 2dc6c00 +20001a9a: 4601 li a2,0 +20001a9c: 4581 li a1,0 +20001a9e: 4521 li a0,8 +20001aa0: 39c1 jal 20001770 +20001aa2: 02dc76b7 lui a3,0x2dc7 +20001aa6: c0068693 addi a3,a3,-1024 # 2dc6c00 +20001aaa: 4601 li a2,0 +20001aac: 4581 li a1,0 +20001aae: 4525 li a0,9 +20001ab0: 31c1 jal 20001770 +20001ab2: 08f0d6b7 lui a3,0x8f0d +20001ab6: 18068693 addi a3,a3,384 # 8f0d180 +20001aba: 4601 li a2,0 +20001abc: 4581 li a1,0 +20001abe: 4519 li a0,6 +20001ac0: 3945 jal 20001770 +20001ac2: 08f0d6b7 lui a3,0x8f0d +20001ac6: 18068693 addi a3,a3,384 # 8f0d180 +20001aca: 4601 li a2,0 +20001acc: 4581 li a1,0 +20001ace: 451d li a0,7 +20001ad0: 3145 jal 20001770 +20001ad2: 4511 li a0,4 +20001ad4: 3b85 jal 20001844 +20001ad6: 431be7b7 lui a5,0x431be +20001ada: e8378793 addi a5,a5,-381 # 431bde83 <__StackTop+0x2313be83> +20001ade: 02f534b3 mulhu s1,a0,a5 +20001ae2: 4401 li s0,0 +20001ae4: 4919 li s2,6 +20001ae6: 80c9 srli s1,s1,0x12 +20001ae8: 8522 mv a0,s0 +20001aea: 85a6 mv a1,s1 +20001aec: 0405 addi s0,s0,1 +20001aee: 3bc5 jal 200018de +20001af0: ff241ce3 bne s0,s2,20001ae8 +20001af4: 40b2 lw ra,12(sp) +20001af6: 4422 lw s0,8(sp) +20001af8: 4492 lw s1,4(sp) +20001afa: 4902 lw s2,0(sp) +20001afc: 0141 addi sp,sp,16 +20001afe: 8082 ret + +20001b00 <_out_null>: +20001b00: 8082 ret + +20001b02 <_out_rev>: +20001b02: 7179 addi sp,sp,-48 +20001b04: d422 sw s0,40(sp) +20001b06: ce4e sw s3,28(sp) +20001b08: cc52 sw s4,24(sp) +20001b0a: ca56 sw s5,20(sp) +20001b0c: c85a sw s6,16(sp) +20001b0e: c65e sw s7,12(sp) +20001b10: c462 sw s8,8(sp) +20001b12: c266 sw s9,4(sp) +20001b14: d606 sw ra,44(sp) +20001b16: 8cc6 mv s9,a7 +20001b18: d226 sw s1,36(sp) +20001b1a: d04a sw s2,32(sp) +20001b1c: 0038f893 andi a7,a7,3 +20001b20: 89aa mv s3,a0 +20001b22: 8a2e mv s4,a1 +20001b24: 8b32 mv s6,a2 +20001b26: 8ab6 mv s5,a3 +20001b28: 8bba mv s7,a4 +20001b2a: 843e mv s0,a5 +20001b2c: 8c42 mv s8,a6 +20001b2e: 06089f63 bnez a7,20001bac <_out_rev+0xaa> +20001b32: 40f80933 sub s2,a6,a5 +20001b36: 9932 add s2,s2,a2 +20001b38: 84b2 mv s1,a2 +20001b3a: 0707fd63 bgeu a5,a6,20001bb4 <_out_rev+0xb2> +20001b3e: 8626 mv a2,s1 +20001b40: 86d6 mv a3,s5 +20001b42: 0485 addi s1,s1,1 +20001b44: 85d2 mv a1,s4 +20001b46: 02000513 li a0,32 +20001b4a: 9982 jalr s3 +20001b4c: ff2499e3 bne s1,s2,20001b3e <_out_rev+0x3c> +20001b50: c021 beqz s0,20001b90 <_out_rev+0x8e> +20001b52: 9922 add s2,s2,s0 +20001b54: 40890633 sub a2,s2,s0 +20001b58: 147d addi s0,s0,-1 +20001b5a: 008b87b3 add a5,s7,s0 +20001b5e: 0007c503 lbu a0,0(a5) +20001b62: 86d6 mv a3,s5 +20001b64: 85d2 mv a1,s4 +20001b66: 84ca mv s1,s2 +20001b68: 9982 jalr s3 +20001b6a: f46d bnez s0,20001b54 <_out_rev+0x52> +20001b6c: 002cfc93 andi s9,s9,2 +20001b70: 020c8063 beqz s9,20001b90 <_out_rev+0x8e> +20001b74: 41648b33 sub s6,s1,s6 +20001b78: 018b7c63 bgeu s6,s8,20001b90 <_out_rev+0x8e> +20001b7c: 8626 mv a2,s1 +20001b7e: 86d6 mv a3,s5 +20001b80: 85d2 mv a1,s4 +20001b82: 02000513 li a0,32 +20001b86: 0b05 addi s6,s6,1 +20001b88: 0485 addi s1,s1,1 +20001b8a: 9982 jalr s3 +20001b8c: ff8b68e3 bltu s6,s8,20001b7c <_out_rev+0x7a> +20001b90: 50b2 lw ra,44(sp) +20001b92: 5422 lw s0,40(sp) +20001b94: 5902 lw s2,32(sp) +20001b96: 49f2 lw s3,28(sp) +20001b98: 4a62 lw s4,24(sp) +20001b9a: 4ad2 lw s5,20(sp) +20001b9c: 4b42 lw s6,16(sp) +20001b9e: 4bb2 lw s7,12(sp) +20001ba0: 4c22 lw s8,8(sp) +20001ba2: 4c92 lw s9,4(sp) +20001ba4: 8526 mv a0,s1 +20001ba6: 5492 lw s1,36(sp) +20001ba8: 6145 addi sp,sp,48 +20001baa: 8082 ret +20001bac: 8932 mv s2,a2 +20001bae: 84b2 mv s1,a2 +20001bb0: f3cd bnez a5,20001b52 <_out_rev+0x50> +20001bb2: bf6d j 20001b6c <_out_rev+0x6a> +20001bb4: 8932 mv s2,a2 +20001bb6: ffd1 bnez a5,20001b52 <_out_rev+0x50> +20001bb8: bfe1 j 20001b90 <_out_rev+0x8e> + +20001bba <_ntoa_format>: +20001bba: 42a2 lw t0,8(sp) +20001bbc: 8fc2 mv t6,a6 +20001bbe: 4e02 lw t3,0(sp) +20001bc0: 0022fe93 andi t4,t0,2 +20001bc4: 4812 lw a6,4(sp) +20001bc6: 833e mv t1,a5 +20001bc8: 040e9663 bnez t4,20001c14 <_ntoa_format+0x5a> +20001bcc: 0c081863 bnez a6,20001c9c <_ntoa_format+0xe2> +20001bd0: 05c7f263 bgeu a5,t3,20001c14 <_ntoa_format+0x5a> +20001bd4: 0012f393 andi t2,t0,1 +20001bd8: 02000e93 li t4,32 +20001bdc: 03000f13 li t5,48 +20001be0: 01d30963 beq t1,t4,20001bf2 <_ntoa_format+0x38> +20001be4: 0305 addi t1,t1,1 +20001be6: 006707b3 add a5,a4,t1 +20001bea: ffe78fa3 sb t5,-1(a5) +20001bee: ffc369e3 bltu t1,t3,20001be0 <_ntoa_format+0x26> +20001bf2: 06038263 beqz t2,20001c56 <_ntoa_format+0x9c> +20001bf6: 02000e93 li t4,32 +20001bfa: 03000f13 li t5,48 +20001bfe: 01037b63 bgeu t1,a6,20001c14 <_ntoa_format+0x5a> +20001c02: 0dd30463 beq t1,t4,20001cca <_ntoa_format+0x110> +20001c06: 0305 addi t1,t1,1 +20001c08: 006707b3 add a5,a4,t1 +20001c0c: ffe78fa3 sb t5,-1(a5) +20001c10: ff0319e3 bne t1,a6,20001c02 <_ntoa_format+0x48> +20001c14: 0102f793 andi a5,t0,16 +20001c18: cbb5 beqz a5,20001c8c <_ntoa_format+0xd2> +20001c1a: 4002f793 andi a5,t0,1024 +20001c1e: e7b1 bnez a5,20001c6a <_ntoa_format+0xb0> +20001c20: 04031163 bnez t1,20001c62 <_ntoa_format+0xa8> +20001c24: 47c1 li a5,16 +20001c26: 16f88363 beq a7,a5,20001d8c <_ntoa_format+0x1d2> +20001c2a: 4789 li a5,2 +20001c2c: 16f88f63 beq a7,a5,20001daa <_ntoa_format+0x1f0> +20001c30: 03000793 li a5,48 +20001c34: 00f70023 sb a5,0(a4) # 40010000 <__StackTop+0x1ff8e000> +20001c38: 4305 li t1,1 +20001c3a: 060f9b63 bnez t6,20001cb0 <_ntoa_format+0xf6> +20001c3e: 0042f793 andi a5,t0,4 +20001c42: c3f5 beqz a5,20001d26 <_ntoa_format+0x16c> +20001c44: 006708b3 add a7,a4,t1 +20001c48: 02b00e13 li t3,43 +20001c4c: 00130793 addi a5,t1,1 +20001c50: 01c88023 sb t3,0(a7) +20001c54: a091 j 20001c98 <_ntoa_format+0xde> +20001c56: 0102f793 andi a5,t0,16 +20001c5a: cb8d beqz a5,20001c8c <_ntoa_format+0xd2> +20001c5c: 4002f793 andi a5,t0,1024 +20001c60: e789 bnez a5,20001c6a <_ntoa_format+0xb0> +20001c62: 0a6e0363 beq t3,t1,20001d08 <_ntoa_format+0x14e> +20001c66: 0a680163 beq a6,t1,20001d08 <_ntoa_format+0x14e> +20001c6a: 47c1 li a5,16 +20001c6c: 06f88863 beq a7,a5,20001cdc <_ntoa_format+0x122> +20001c70: 4789 li a5,2 +20001c72: 08f88463 beq a7,a5,20001cfa <_ntoa_format+0x140> +20001c76: 02000793 li a5,32 +20001c7a: 00f30d63 beq t1,a5,20001c94 <_ntoa_format+0xda> +20001c7e: 879a mv a5,t1 +20001c80: 0305 addi t1,t1,1 +20001c82: 97ba add a5,a5,a4 +20001c84: 03000893 li a7,48 +20001c88: 01178023 sb a7,0(a5) +20001c8c: 02000793 li a5,32 +20001c90: faf315e3 bne t1,a5,20001c3a <_ntoa_format+0x80> +20001c94: 02000793 li a5,32 +20001c98: 8896 mv a7,t0 +20001c9a: b5a5 j 20001b02 <_out_rev> +20001c9c: 0012f393 andi t2,t0,1 +20001ca0: 02038263 beqz t2,20001cc4 <_ntoa_format+0x10a> +20001ca4: 080f8d63 beqz t6,20001d3e <_ntoa_format+0x184> +20001ca8: 187d addi a6,a6,-1 +20001caa: f3c7e7e3 bltu a5,t3,20001bd8 <_ntoa_format+0x1e> +20001cae: b7a1 j 20001bf6 <_ntoa_format+0x3c> +20001cb0: 006708b3 add a7,a4,t1 +20001cb4: 02d00e13 li t3,45 +20001cb8: 01c88023 sb t3,0(a7) +20001cbc: 00130793 addi a5,t1,1 +20001cc0: 8896 mv a7,t0 +20001cc2: b581 j 20001b02 <_out_rev> +20001cc4: f1c7eae3 bltu a5,t3,20001bd8 <_ntoa_format+0x1e> +20001cc8: b7b1 j 20001c14 <_ntoa_format+0x5a> +20001cca: 0102f793 andi a5,t0,16 +20001cce: d3f9 beqz a5,20001c94 <_ntoa_format+0xda> +20001cd0: 4002f793 andi a5,t0,1024 +20001cd4: d7d9 beqz a5,20001c62 <_ntoa_format+0xa8> +20001cd6: 47c1 li a5,16 +20001cd8: faf89ee3 bne a7,a5,20001c94 <_ntoa_format+0xda> +20001cdc: 0202f793 andi a5,t0,32 +20001ce0: cba5 beqz a5,20001d50 <_ntoa_format+0x196> +20001ce2: 02000793 li a5,32 +20001ce6: faf307e3 beq t1,a5,20001c94 <_ntoa_format+0xda> +20001cea: 006707b3 add a5,a4,t1 +20001cee: 05800893 li a7,88 +20001cf2: 01178023 sb a7,0(a5) +20001cf6: 0305 addi t1,t1,1 +20001cf8: bfbd j 20001c76 <_ntoa_format+0xbc> +20001cfa: 02000793 li a5,32 +20001cfe: f8f30be3 beq t1,a5,20001c94 <_ntoa_format+0xda> +20001d02: 879a mv a5,t1 +20001d04: 0305 addi t1,t1,1 +20001d06: a811 j 20001d1a <_ntoa_format+0x160> +20001d08: fff30793 addi a5,t1,-1 +20001d0c: cfb1 beqz a5,20001d68 <_ntoa_format+0x1ae> +20001d0e: 4e41 li t3,16 +20001d10: 0bc88363 beq a7,t3,20001db6 <_ntoa_format+0x1fc> +20001d14: 4e09 li t3,2 +20001d16: f7c896e3 bne a7,t3,20001c82 <_ntoa_format+0xc8> +20001d1a: 97ba add a5,a5,a4 +20001d1c: 06200893 li a7,98 +20001d20: 01178023 sb a7,0(a5) +20001d24: bf89 j 20001c76 <_ntoa_format+0xbc> +20001d26: 0082f893 andi a7,t0,8 +20001d2a: 879a mv a5,t1 +20001d2c: f60886e3 beqz a7,20001c98 <_ntoa_format+0xde> +20001d30: 933a add t1,t1,a4 +20001d32: 02000893 li a7,32 +20001d36: 0785 addi a5,a5,1 +20001d38: 01130023 sb a7,0(t1) +20001d3c: bfb1 j 20001c98 <_ntoa_format+0xde> +20001d3e: 00c2f793 andi a5,t0,12 +20001d42: 00f037b3 snez a5,a5 +20001d46: 40f80833 sub a6,a6,a5 +20001d4a: e9c367e3 bltu t1,t3,20001bd8 <_ntoa_format+0x1e> +20001d4e: b565 j 20001bf6 <_ntoa_format+0x3c> +20001d50: 02000793 li a5,32 +20001d54: f4f300e3 beq t1,a5,20001c94 <_ntoa_format+0xda> +20001d58: 006707b3 add a5,a4,t1 +20001d5c: 07800893 li a7,120 +20001d60: 01178023 sb a7,0(a5) +20001d64: 0305 addi t1,t1,1 +20001d66: bf01 j 20001c76 <_ntoa_format+0xbc> +20001d68: 47c1 li a5,16 +20001d6a: ecf890e3 bne a7,a5,20001c2a <_ntoa_format+0x70> +20001d6e: 0202f793 andi a5,t0,32 +20001d72: cf9d beqz a5,20001db0 <_ntoa_format+0x1f6> +20001d74: 05800893 li a7,88 +20001d78: 03000793 li a5,48 +20001d7c: 01170023 sb a7,0(a4) +20001d80: 00f700a3 sb a5,1(a4) +20001d84: 4309 li t1,2 +20001d86: ea0f8ce3 beqz t6,20001c3e <_ntoa_format+0x84> +20001d8a: b71d j 20001cb0 <_ntoa_format+0xf6> +20001d8c: 0202f793 andi a5,t0,32 +20001d90: c385 beqz a5,20001db0 <_ntoa_format+0x1f6> +20001d92: 05800793 li a5,88 +20001d96: 03000893 li a7,48 +20001d9a: 00f70023 sb a5,0(a4) +20001d9e: 011700a3 sb a7,1(a4) +20001da2: 4309 li t1,2 +20001da4: e80f8de3 beqz t6,20001c3e <_ntoa_format+0x84> +20001da8: b721 j 20001cb0 <_ntoa_format+0xf6> +20001daa: 06200793 li a5,98 +20001dae: b7e5 j 20001d96 <_ntoa_format+0x1dc> +20001db0: 07800793 li a5,120 +20001db4: b7cd j 20001d96 <_ntoa_format+0x1dc> +20001db6: ffe30893 addi a7,t1,-2 +20001dba: 0202fe13 andi t3,t0,32 +20001dbe: 98ba add a7,a7,a4 +20001dc0: 000e0763 beqz t3,20001dce <_ntoa_format+0x214> +20001dc4: 05800e13 li t3,88 +20001dc8: 01c88023 sb t3,0(a7) +20001dcc: bd5d j 20001c82 <_ntoa_format+0xc8> +20001dce: 07800e13 li t3,120 +20001dd2: 01c88023 sb t3,0(a7) +20001dd6: b575 j 20001c82 <_ntoa_format+0xc8> + +20001dd8 <_out_char>: +20001dd8: e111 bnez a0,20001ddc <_out_char+0x4> +20001dda: 8082 ret +20001ddc: 0d10106f j 200036ac <__wrap_putchar> + +20001de0 <_out_fct>: +20001de0: c501 beqz a0,20001de8 <_out_fct+0x8> +20001de2: 419c lw a5,0(a1) +20001de4: 41cc lw a1,4(a1) +20001de6: 8782 jr a5 +20001de8: 8082 ret + +20001dea <_ftoa>: +20001dea: 7131 addi sp,sp,-192 +20001dec: d94a sw s2,176(sp) +20001dee: d74e sw s3,172(sp) +20001df0: d552 sw s4,168(sp) +20001df2: d15a sw s6,160(sp) +20001df4: 892a mv s2,a0 +20001df6: 89ae mv s3,a1 +20001df8: 8b32 mv s6,a2 +20001dfa: 8a36 mv s4,a3 +20001dfc: 853a mv a0,a4 +20001dfe: 85be mv a1,a5 +20001e00: 863a mv a2,a4 +20001e02: 86be mv a3,a5 +20001e04: dd22 sw s0,184(sp) +20001e06: db26 sw s1,180(sp) +20001e08: d356 sw s5,164(sp) +20001e0a: cf5e sw s7,156(sp) +20001e0c: df06 sw ra,188(sp) +20001e0e: cd62 sw s8,152(sp) +20001e10: cb66 sw s9,148(sp) +20001e12: 4b8e lw s7,192(sp) +20001e14: 84ba mv s1,a4 +20001e16: 843e mv s0,a5 +20001e18: c042 sw a6,0(sp) +20001e1a: 8ac6 mv s5,a7 +20001e1c: 73c040ef jal 20006558 <__unorddf2> +20001e20: 46051b63 bnez a0,20002296 <_ftoa+0x4ac> +20001e24: 200077b7 lui a5,0x20007 +20001e28: d987a603 lw a2,-616(a5) # 20006d98 +20001e2c: d9c7a683 lw a3,-612(a5) +20001e30: 8526 mv a0,s1 +20001e32: 85a2 mv a1,s0 +20001e34: c96a sw s10,144(sp) +20001e36: c76e sw s11,140(sp) +20001e38: 055030ef jal 2000568c <__ledf2> +20001e3c: 20054963 bltz a0,2000204e <_ftoa+0x264> +20001e40: 200077b7 lui a5,0x20007 +20001e44: da07a603 lw a2,-608(a5) # 20006da0 +20001e48: da47a683 lw a3,-604(a5) +20001e4c: 8526 mv a0,s1 +20001e4e: 85a2 mv a1,s0 +20001e50: 77e030ef jal 200055ce <__gedf2> +20001e54: 18a04d63 bgtz a0,20001fee <_ftoa+0x204> +20001e58: 200077b7 lui a5,0x20007 +20001e5c: c426 sw s1,8(sp) +20001e5e: c622 sw s0,12(sp) +20001e60: 4522 lw a0,8(sp) +20001e62: 45b2 lw a1,12(sp) +20001e64: da87a603 lw a2,-600(a5) # 20006da8 +20001e68: dac7a683 lw a3,-596(a5) +20001e6c: 762030ef jal 200055ce <__gedf2> +20001e70: 14a04563 bgtz a0,20001fba <_ftoa+0x1d0> +20001e74: 200077b7 lui a5,0x20007 +20001e78: c826 sw s1,16(sp) +20001e7a: ca22 sw s0,20(sp) +20001e7c: 4542 lw a0,16(sp) +20001e7e: 45d2 lw a1,20(sp) +20001e80: db07a603 lw a2,-592(a5) # 20006db0 +20001e84: db47a683 lw a3,-588(a5) +20001e88: 005030ef jal 2000568c <__ledf2> +20001e8c: 12054763 bltz a0,20001fba <_ftoa+0x1d0> +20001e90: cc26 sw s1,24(sp) +20001e92: ce22 sw s0,28(sp) +20001e94: 4562 lw a0,24(sp) +20001e96: 45f2 lw a1,28(sp) +20001e98: 4601 li a2,0 +20001e9a: 4681 li a3,0 +20001e9c: 7f0030ef jal 2000568c <__ledf2> +20001ea0: 18054a63 bltz a0,20002034 <_ftoa+0x24a> +20001ea4: dc02 sw zero,56(sp) +20001ea6: 400bf793 andi a5,s7,1024 +20001eaa: e399 bnez a5,20001eb0 <_ftoa+0xc6> +20001eac: 4799 li a5,6 +20001eae: c03e sw a5,0(sp) +20001eb0: 4682 lw a3,0(sp) +20001eb2: 06010d13 addi s10,sp,96 +20001eb6: 87ea mv a5,s10 +20001eb8: fe068893 addi a7,a3,-32 +20001ebc: 4625 li a2,9 +20001ebe: 03000593 li a1,48 +20001ec2: 22d67263 bgeu a2,a3,200020e6 <_ftoa+0x2fc> +20001ec6: 00b78023 sb a1,0(a5) +20001eca: 16fd addi a3,a3,-1 +20001ecc: 0785 addi a5,a5,1 +20001ece: ff169ae3 bne a3,a7,20001ec2 <_ftoa+0xd8> +20001ed2: 02000c93 li s9,32 +20001ed6: d026 sw s1,32(sp) +20001ed8: d222 sw s0,36(sp) +20001eda: 5502 lw a0,32(sp) +20001edc: 5592 lw a1,36(sp) +20001ede: c046 sw a7,0(sp) +20001ee0: 6b4040ef jal 20006594 <__fixdfsi> +20001ee4: 4882 lw a7,0(sp) +20001ee6: 200076b7 lui a3,0x20007 +20001eea: bd868693 addi a3,a3,-1064 # 20006bd8 +20001eee: 20d8e6b3 sh3add a3,a7,a3 +20001ef2: 0046a803 lw a6,4(a3) +20001ef6: 429c lw a5,0(a3) +20001ef8: cc46 sw a7,24(sp) +20001efa: c242 sw a6,4(sp) +20001efc: c03e sw a5,0(sp) +20001efe: 8daa mv s11,a0 +20001f00: 752040ef jal 20006652 <__floatsidf> +20001f04: d426 sw s1,40(sp) +20001f06: d622 sw s0,44(sp) +20001f08: 862a mv a2,a0 +20001f0a: 86ae mv a3,a1 +20001f0c: 5522 lw a0,40(sp) +20001f0e: 55b2 lw a1,44(sp) +20001f10: 593030ef jal 20005ca2 <__subdf3> +20001f14: 4602 lw a2,0(sp) +20001f16: 4692 lw a3,4(sp) +20001f18: 035030ef jal 2000574c <__muldf3> +20001f1c: 8c2e mv s8,a1 +20001f1e: c82a sw a0,16(sp) +20001f20: 6da040ef jal 200065fa <__fixunsdfsi> +20001f24: c42a sw a0,8(sp) +20001f26: 7a2040ef jal 200066c8 <__floatunsidf> +20001f2a: 47c2 lw a5,16(sp) +20001f2c: da62 sw s8,52(sp) +20001f2e: 862a mv a2,a0 +20001f30: d83e sw a5,48(sp) +20001f32: 86ae mv a3,a1 +20001f34: 5542 lw a0,48(sp) +20001f36: 55d2 lw a1,52(sp) +20001f38: 20007c37 lui s8,0x20007 +20001f3c: 567030ef jal 20005ca2 <__subdf3> +20001f40: db8c2603 lw a2,-584(s8) # 20006db8 +20001f44: dbcc2683 lw a3,-580(s8) +20001f48: c82a sw a0,16(sp) +20001f4a: d02e sw a1,32(sp) +20001f4c: 682030ef jal 200055ce <__gedf2> +20001f50: 4322 lw t1,8(sp) +20001f52: 48e2 lw a7,24(sp) +20001f54: 28a05763 blez a0,200021e2 <_ftoa+0x3f8> +20001f58: 0305 addi t1,t1,1 +20001f5a: 851a mv a0,t1 +20001f5c: c846 sw a7,16(sp) +20001f5e: c41a sw t1,8(sp) +20001f60: 768040ef jal 200066c8 <__floatunsidf> +20001f64: 862a mv a2,a0 +20001f66: 86ae mv a3,a1 +20001f68: 4502 lw a0,0(sp) +20001f6a: 4592 lw a1,4(sp) +20001f6c: 720030ef jal 2000568c <__ledf2> +20001f70: 4322 lw t1,8(sp) +20001f72: 48c2 lw a7,16(sp) +20001f74: 00a04463 bgtz a0,20001f7c <_ftoa+0x192> +20001f78: 0d85 addi s11,s11,1 +20001f7a: 4301 li t1,0 +20001f7c: 16088a63 beqz a7,200020f0 <_ftoa+0x306> +20001f80: ccccd537 lui a0,0xccccd +20001f84: ccd50513 addi a0,a0,-819 # cccccccd <__StackTop+0xacc4accd> +20001f88: 02000e13 li t3,32 +20001f8c: 4ea5 li t4,9 +20001f8e: 2dcc8263 beq s9,t3,20002252 <_ftoa+0x468> +20001f92: 02a33733 mulhu a4,t1,a0 +20001f96: 0c85 addi s9,s9,1 +20001f98: 019d06b3 add a3,s10,s9 +20001f9c: 18fd addi a7,a7,-1 +20001f9e: 830d srli a4,a4,0x3 +20001fa0: 20e747b3 sh2add a5,a4,a4 +20001fa4: 0786 slli a5,a5,0x1 +20001fa6: 40f307b3 sub a5,t1,a5 +20001faa: 03078793 addi a5,a5,48 +20001fae: fef68fa3 sb a5,-1(a3) +20001fb2: 286ef063 bgeu t4,t1,20002232 <_ftoa+0x448> +20001fb6: 833a mv t1,a4 +20001fb8: bfd9 j 20001f8e <_ftoa+0x1a4> +20001fba: dc26 sw s1,56(sp) +20001fbc: de22 sw s0,60(sp) +20001fbe: 546a lw s0,184(sp) +20001fc0: c1de sw s7,192(sp) +20001fc2: 5762 lw a4,56(sp) +20001fc4: 57f2 lw a5,60(sp) +20001fc6: 4802 lw a6,0(sp) +20001fc8: 4d4a lw s10,144(sp) +20001fca: 4dba lw s11,140(sp) +20001fcc: 50fa lw ra,188(sp) +20001fce: 54da lw s1,180(sp) +20001fd0: 4bfa lw s7,156(sp) +20001fd2: 4c6a lw s8,152(sp) +20001fd4: 4cda lw s9,148(sp) +20001fd6: 88d6 mv a7,s5 +20001fd8: 86d2 mv a3,s4 +20001fda: 5a9a lw s5,164(sp) +20001fdc: 5a2a lw s4,168(sp) +20001fde: 865a mv a2,s6 +20001fe0: 85ce mv a1,s3 +20001fe2: 5b0a lw s6,160(sp) +20001fe4: 59ba lw s3,172(sp) +20001fe6: 854a mv a0,s2 +20001fe8: 594a lw s2,176(sp) +20001fea: 6129 addi sp,sp,192 +20001fec: ae35 j 20002328 <_etoa> +20001fee: 004bf793 andi a5,s7,4 +20001ff2: eb9d bnez a5,20002028 <_ftoa+0x23e> +20001ff4: 20007737 lui a4,0x20007 +20001ff8: 94470713 addi a4,a4,-1724 # 20006944 +20001ffc: 478d li a5,3 +20001ffe: 546a lw s0,184(sp) +20002000: 4d4a lw s10,144(sp) +20002002: 4dba lw s11,140(sp) +20002004: 50fa lw ra,188(sp) +20002006: 54da lw s1,180(sp) +20002008: 4c6a lw s8,152(sp) +2000200a: 4cda lw s9,148(sp) +2000200c: 88de mv a7,s7 +2000200e: 8856 mv a6,s5 +20002010: 4bfa lw s7,156(sp) +20002012: 5a9a lw s5,164(sp) +20002014: 86d2 mv a3,s4 +20002016: 865a mv a2,s6 +20002018: 5a2a lw s4,168(sp) +2000201a: 5b0a lw s6,160(sp) +2000201c: 85ce mv a1,s3 +2000201e: 854a mv a0,s2 +20002020: 59ba lw s3,172(sp) +20002022: 594a lw s2,176(sp) +20002024: 6129 addi sp,sp,192 +20002026: bcf1 j 20001b02 <_out_rev> +20002028: 20007737 lui a4,0x20007 +2000202c: 93c70713 addi a4,a4,-1732 # 2000693c +20002030: 4791 li a5,4 +20002032: b7f1 j 20001ffe <_ftoa+0x214> +20002034: c8a6 sw s1,80(sp) +20002036: caa2 sw s0,84(sp) +20002038: 4646 lw a2,80(sp) +2000203a: 46d6 lw a3,84(sp) +2000203c: 4501 li a0,0 +2000203e: 4581 li a1,0 +20002040: 463030ef jal 20005ca2 <__subdf3> +20002044: 4785 li a5,1 +20002046: 84aa mv s1,a0 +20002048: 842e mv s0,a1 +2000204a: dc3e sw a5,56(sp) +2000204c: bda9 j 20001ea6 <_ftoa+0xbc> +2000204e: 003bf793 andi a5,s7,3 +20002052: 84da mv s1,s6 +20002054: e395 bnez a5,20002078 <_ftoa+0x28e> +20002056: 4791 li a5,4 +20002058: 0357f063 bgeu a5,s5,20002078 <_ftoa+0x28e> +2000205c: ffcb0413 addi s0,s6,-4 +20002060: 015404b3 add s1,s0,s5 +20002064: 845a mv s0,s6 +20002066: 8622 mv a2,s0 +20002068: 86d2 mv a3,s4 +2000206a: 0405 addi s0,s0,1 +2000206c: 85ce mv a1,s3 +2000206e: 02000513 li a0,32 +20002072: 9902 jalr s2 +20002074: fe9419e3 bne s0,s1,20002066 <_ftoa+0x27c> +20002078: 20007437 lui s0,0x20007 +2000207c: 94c40c13 addi s8,s0,-1716 # 2000694c +20002080: 94c40413 addi s0,s0,-1716 +20002084: 1c71 addi s8,s8,-4 +20002086: 00940cb3 add s9,s0,s1 +2000208a: 00344503 lbu a0,3(s0) +2000208e: 408c8633 sub a2,s9,s0 +20002092: 86d2 mv a3,s4 +20002094: 85ce mv a1,s3 +20002096: 147d addi s0,s0,-1 +20002098: 9902 jalr s2 +2000209a: ff8418e3 bne s0,s8,2000208a <_ftoa+0x2a0> +2000209e: 002bfb93 andi s7,s7,2 +200020a2: 0491 addi s1,s1,4 +200020a4: 020b8163 beqz s7,200020c6 <_ftoa+0x2dc> +200020a8: 416487b3 sub a5,s1,s6 +200020ac: 0157fd63 bgeu a5,s5,200020c6 <_ftoa+0x2dc> +200020b0: 8626 mv a2,s1 +200020b2: 86d2 mv a3,s4 +200020b4: 85ce mv a1,s3 +200020b6: 02000513 li a0,32 +200020ba: 0485 addi s1,s1,1 +200020bc: 9902 jalr s2 +200020be: 416487b3 sub a5,s1,s6 +200020c2: ff57e7e3 bltu a5,s5,200020b0 <_ftoa+0x2c6> +200020c6: 4d4a lw s10,144(sp) +200020c8: 4dba lw s11,140(sp) +200020ca: 50fa lw ra,188(sp) +200020cc: 546a lw s0,184(sp) +200020ce: 594a lw s2,176(sp) +200020d0: 59ba lw s3,172(sp) +200020d2: 5a2a lw s4,168(sp) +200020d4: 5a9a lw s5,164(sp) +200020d6: 5b0a lw s6,160(sp) +200020d8: 4bfa lw s7,156(sp) +200020da: 4c6a lw s8,152(sp) +200020dc: 4cda lw s9,148(sp) +200020de: 8526 mv a0,s1 +200020e0: 54da lw s1,180(sp) +200020e2: 6129 addi sp,sp,192 +200020e4: 8082 ret +200020e6: 4782 lw a5,0(sp) +200020e8: 88b6 mv a7,a3 +200020ea: 40d78cb3 sub s9,a5,a3 +200020ee: b3e5 j 20001ed6 <_ftoa+0xec> +200020f0: 856e mv a0,s11 +200020f2: 560040ef jal 20006652 <__floatsidf> +200020f6: c4a6 sw s1,72(sp) +200020f8: c6a2 sw s0,76(sp) +200020fa: 862a mv a2,a0 +200020fc: 86ae mv a3,a1 +200020fe: 4526 lw a0,72(sp) +20002100: 45b6 lw a1,76(sp) +20002102: 3a1030ef jal 20005ca2 <__subdf3> +20002106: db8c2403 lw s0,-584(s8) +2000210a: dbcc2483 lw s1,-580(s8) +2000210e: c02a sw a0,0(sp) +20002110: 8622 mv a2,s0 +20002112: 86a6 mv a3,s1 +20002114: 8c2e mv s8,a1 +20002116: 576030ef jal 2000568c <__ledf2> +2000211a: 00054d63 bltz a0,20002134 <_ftoa+0x34a> +2000211e: 4782 lw a5,0(sp) +20002120: cee2 sw s8,92(sp) +20002122: 45f6 lw a1,92(sp) +20002124: ccbe sw a5,88(sp) +20002126: 4566 lw a0,88(sp) +20002128: 8622 mv a2,s0 +2000212a: 86a6 mv a3,s1 +2000212c: 4a2030ef jal 200055ce <__gedf2> +20002130: 14a05863 blez a0,20002280 <_ftoa+0x496> +20002134: 66666537 lui a0,0x66666 +20002138: 66750513 addi a0,a0,1639 # 66666667 <__StackTop+0x465e4667> +2000213c: 02000893 li a7,32 +20002140: a01d j 20002166 <_ftoa+0x37c> +20002142: 02ad97b3 mulh a5,s11,a0 +20002146: 0c85 addi s9,s9,1 +20002148: 019d06b3 add a3,s10,s9 +2000214c: 8789 srai a5,a5,0x2 +2000214e: 8f99 sub a5,a5,a4 +20002150: 20f7c733 sh2add a4,a5,a5 +20002154: 0706 slli a4,a4,0x1 +20002156: 40ed8db3 sub s11,s11,a4 +2000215a: 030d8713 addi a4,s11,48 +2000215e: fee68fa3 sb a4,-1(a3) +20002162: 8dbe mv s11,a5 +20002164: cf9d beqz a5,200021a2 <_ftoa+0x3b8> +20002166: 41fdd713 srai a4,s11,0x1f +2000216a: fd1c9ce3 bne s9,a7,20002142 <_ftoa+0x358> +2000216e: 003bf693 andi a3,s7,3 +20002172: 4605 li a2,1 +20002174: 04c69963 bne a3,a2,200021c6 <_ftoa+0x3dc> +20002178: 040a8763 beqz s5,200021c6 <_ftoa+0x3dc> +2000217c: 57e2 lw a5,56(sp) +2000217e: cbd1 beqz a5,20002212 <_ftoa+0x428> +20002180: 1afd addi s5,s5,-1 +20002182: 055cf263 bgeu s9,s5,200021c6 <_ftoa+0x3dc> +20002186: 02000613 li a2,32 +2000218a: 03000593 li a1,48 +2000218e: 02cc8c63 beq s9,a2,200021c6 <_ftoa+0x3dc> +20002192: 0c85 addi s9,s9,1 +20002194: 019d07b3 add a5,s10,s9 +20002198: feb78fa3 sb a1,-1(a5) +2000219c: ff5ce9e3 bltu s9,s5,2000218e <_ftoa+0x3a4> +200021a0: a031 j 200021ac <_ftoa+0x3c2> +200021a2: 003bf693 andi a3,s7,3 +200021a6: 4605 li a2,1 +200021a8: 16c68563 beq a3,a2,20002312 <_ftoa+0x528> +200021ac: 02000693 li a3,32 +200021b0: 00dc8b63 beq s9,a3,200021c6 <_ftoa+0x3dc> +200021b4: 57e2 lw a5,56(sp) +200021b6: cba5 beqz a5,20002226 <_ftoa+0x43c> +200021b8: 02d00613 li a2,45 +200021bc: 002c86b3 add a3,s9,sp +200021c0: 06c68023 sb a2,96(a3) +200021c4: 0c85 addi s9,s9,1 +200021c6: 876a mv a4,s10 +200021c8: 88de mv a7,s7 +200021ca: 8856 mv a6,s5 +200021cc: 87e6 mv a5,s9 +200021ce: 86d2 mv a3,s4 +200021d0: 865a mv a2,s6 +200021d2: 85ce mv a1,s3 +200021d4: 854a mv a0,s2 +200021d6: 92dff0ef jal 20001b02 <_out_rev> +200021da: 84aa mv s1,a0 +200021dc: 4d4a lw s10,144(sp) +200021de: 4dba lw s11,140(sp) +200021e0: b5ed j 200020ca <_ftoa+0x2e0> +200021e2: 47c2 lw a5,16(sp) +200021e4: c446 sw a7,8(sp) +200021e6: c01a sw t1,0(sp) +200021e8: c0be sw a5,64(sp) +200021ea: 5782 lw a5,32(sp) +200021ec: 4506 lw a0,64(sp) +200021ee: c2be sw a5,68(sp) +200021f0: 200077b7 lui a5,0x20007 +200021f4: 4596 lw a1,68(sp) +200021f6: db87a603 lw a2,-584(a5) # 20006db8 +200021fa: dbc7a683 lw a3,-580(a5) +200021fe: 48e030ef jal 2000568c <__ledf2> +20002202: 4302 lw t1,0(sp) +20002204: 48a2 lw a7,8(sp) +20002206: d6054be3 bltz a0,20001f7c <_ftoa+0x192> +2000220a: 08031063 bnez t1,2000228a <_ftoa+0x4a0> +2000220e: 0305 addi t1,t1,1 +20002210: b3b5 j 20001f7c <_ftoa+0x192> +20002212: 00cbf693 andi a3,s7,12 +20002216: cafd beqz a3,2000230c <_ftoa+0x522> +20002218: 1afd addi s5,s5,-1 +2000221a: f75ce6e3 bltu s9,s5,20002186 <_ftoa+0x39c> +2000221e: 02000693 li a3,32 +20002222: fadc82e3 beq s9,a3,200021c6 <_ftoa+0x3dc> +20002226: 004bf693 andi a3,s7,4 +2000222a: ce95 beqz a3,20002266 <_ftoa+0x47c> +2000222c: 02b00613 li a2,43 +20002230: b771 j 200021bc <_ftoa+0x3d2> +20002232: 03cc8063 beq s9,t3,20002252 <_ftoa+0x468> +20002236: 98e6 add a7,a7,s9 +20002238: 03000593 li a1,48 +2000223c: 02000613 li a2,32 +20002240: 01988c63 beq a7,s9,20002258 <_ftoa+0x46e> +20002244: 0c85 addi s9,s9,1 +20002246: 019d07b3 add a5,s10,s9 +2000224a: feb78fa3 sb a1,-1(a5) +2000224e: fecc99e3 bne s9,a2,20002240 <_ftoa+0x456> +20002252: 02000c93 li s9,32 +20002256: bdf9 j 20002134 <_ftoa+0x34a> +20002258: 988a add a7,a7,sp +2000225a: 02e00693 li a3,46 +2000225e: 0c85 addi s9,s9,1 +20002260: 06d88023 sb a3,96(a7) +20002264: bdc1 j 20002134 <_ftoa+0x34a> +20002266: 008bf693 andi a3,s7,8 +2000226a: deb1 beqz a3,200021c6 <_ftoa+0x3dc> +2000226c: 02000613 li a2,32 +20002270: 00cc87b3 add a5,s9,a2 +20002274: 002786b3 add a3,a5,sp +20002278: 04c68023 sb a2,64(a3) +2000227c: 0c85 addi s9,s9,1 +2000227e: b7a1 j 200021c6 <_ftoa+0x3dc> +20002280: 001d8813 addi a6,s11,1 +20002284: ffe87d93 andi s11,a6,-2 +20002288: b575 j 20002134 <_ftoa+0x34a> +2000228a: 00137693 andi a3,t1,1 +2000228e: ce0687e3 beqz a3,20001f7c <_ftoa+0x192> +20002292: 0305 addi t1,t1,1 +20002294: b1e5 j 20001f7c <_ftoa+0x192> +20002296: 003bf793 andi a5,s7,3 +2000229a: 845a mv s0,s6 +2000229c: e38d bnez a5,200022be <_ftoa+0x4d4> +2000229e: 478d li a5,3 +200022a0: 0157ff63 bgeu a5,s5,200022be <_ftoa+0x4d4> +200022a4: ffdb0413 addi s0,s6,-3 +200022a8: 9456 add s0,s0,s5 +200022aa: 84da mv s1,s6 +200022ac: 8626 mv a2,s1 +200022ae: 86d2 mv a3,s4 +200022b0: 0485 addi s1,s1,1 +200022b2: 85ce mv a1,s3 +200022b4: 02000513 li a0,32 +200022b8: 9902 jalr s2 +200022ba: fe9419e3 bne s0,s1,200022ac <_ftoa+0x4c2> +200022be: 200074b7 lui s1,0x20007 +200022c2: 94848493 addi s1,s1,-1720 # 20006948 +200022c6: ffd48c93 addi s9,s1,-3 +200022ca: 8c22 mv s8,s0 +200022cc: 0024c503 lbu a0,2(s1) +200022d0: 8662 mv a2,s8 +200022d2: 86d2 mv a3,s4 +200022d4: 85ce mv a1,s3 +200022d6: 14fd addi s1,s1,-1 +200022d8: 0c05 addi s8,s8,1 +200022da: 9902 jalr s2 +200022dc: ff9498e3 bne s1,s9,200022cc <_ftoa+0x4e2> +200022e0: 002bfb93 andi s7,s7,2 +200022e4: 00340493 addi s1,s0,3 +200022e8: de0b81e3 beqz s7,200020ca <_ftoa+0x2e0> +200022ec: 416487b3 sub a5,s1,s6 +200022f0: dd57fde3 bgeu a5,s5,200020ca <_ftoa+0x2e0> +200022f4: 8626 mv a2,s1 +200022f6: 86d2 mv a3,s4 +200022f8: 85ce mv a1,s3 +200022fa: 02000513 li a0,32 +200022fe: 0485 addi s1,s1,1 +20002300: 9902 jalr s2 +20002302: 416487b3 sub a5,s1,s6 +20002306: ff57e7e3 bltu a5,s5,200022f4 <_ftoa+0x50a> +2000230a: b3c1 j 200020ca <_ftoa+0x2e0> +2000230c: e75cede3 bltu s9,s5,20002186 <_ftoa+0x39c> +20002310: bd5d j 200021c6 <_ftoa+0x3dc> +20002312: e80a8de3 beqz s5,200021ac <_ftoa+0x3c2> +20002316: 57e2 lw a5,56(sp) +20002318: ee078de3 beqz a5,20002212 <_ftoa+0x428> +2000231c: 1afd addi s5,s5,-1 +2000231e: e75ce4e3 bltu s9,s5,20002186 <_ftoa+0x39c> +20002322: e91c9be3 bne s9,a7,200021b8 <_ftoa+0x3ce> +20002326: b545 j 200021c6 <_ftoa+0x3dc> + +20002328 <_etoa>: +20002328: 710d addi sp,sp,-352 +2000232a: 15212823 sw s2,336(sp) +2000232e: 15312623 sw s3,332(sp) +20002332: 15412423 sw s4,328(sp) +20002336: 13b12623 sw s11,300(sp) +2000233a: 892a mv s2,a0 +2000233c: 89ae mv s3,a1 +2000233e: 8db2 mv s11,a2 +20002340: 8a36 mv s4,a3 +20002342: 853a mv a0,a4 +20002344: 85be mv a1,a5 +20002346: 863a mv a2,a4 +20002348: 86be mv a3,a5 +2000234a: 14812c23 sw s0,344(sp) +2000234e: 14912a23 sw s1,340(sp) +20002352: 15512223 sw s5,324(sp) +20002356: 13a12823 sw s10,304(sp) +2000235a: 14112e23 sw ra,348(sp) +2000235e: 16012d03 lw s10,352(sp) +20002362: 843a mv s0,a4 +20002364: 84be mv s1,a5 +20002366: c1c2 sw a6,192(sp) +20002368: 8ac6 mv s5,a7 +2000236a: 1ee040ef jal 20006558 <__unorddf2> +2000236e: 1a051f63 bnez a0,2000252c <_etoa+0x204> +20002372: 200077b7 lui a5,0x20007 +20002376: da07a603 lw a2,-608(a5) # 20006da0 +2000237a: da47a683 lw a3,-604(a5) +2000237e: 8522 mv a0,s0 +20002380: 85a6 mv a1,s1 +20002382: 13812c23 sw s8,312(sp) +20002386: 13912a23 sw s9,308(sp) +2000238a: 244030ef jal 200055ce <__gedf2> +2000238e: 18a04b63 bgtz a0,20002524 <_etoa+0x1fc> +20002392: 200077b7 lui a5,0x20007 +20002396: d987a603 lw a2,-616(a5) # 20006d98 +2000239a: d9c7a683 lw a3,-612(a5) +2000239e: 8522 mv a0,s0 +200023a0: 85a6 mv a1,s1 +200023a2: 15612023 sw s6,320(sp) +200023a6: 13712e23 sw s7,316(sp) +200023aa: 2e2030ef jal 2000568c <__ledf2> +200023ae: 1c054063 bltz a0,2000256e <_etoa+0x246> +200023b2: cc22 sw s0,24(sp) +200023b4: ce26 sw s1,28(sp) +200023b6: 4562 lw a0,24(sp) +200023b8: 45f2 lw a1,28(sp) +200023ba: 4601 li a2,0 +200023bc: 4681 li a3,0 +200023be: 2ce030ef jal 2000568c <__ledf2> +200023c2: 69f49b13 binvi s6,s1,0x1f +200023c6: 00054463 bltz a0,200023ce <_etoa+0xa6> +200023ca: cc22 sw s0,24(sp) +200023cc: 8b26 mv s6,s1 +200023ce: 28b01793 bseti a5,zero,0xb +200023d2: 00fd76b3 and a3,s10,a5 +200023d6: 400d7713 andi a4,s10,1024 +200023da: c3ba sw a4,196(sp) +200023dc: c836 sw a3,16(sp) +200023de: 016467b3 or a5,s0,s6 +200023e2: 18071f63 bnez a4,20002580 <_etoa+0x258> +200023e6: 1e079863 bnez a5,200025d6 <_etoa+0x2ae> +200023ea: 4e069e63 bnez a3,200028e6 <_etoa+0x5be> +200023ee: 4799 li a5,6 +200023f0: c1be sw a5,192(sp) +200023f2: 002d7c93 andi s9,s10,2 +200023f6: 4e0c9a63 bnez s9,200028ea <_etoa+0x5c2> +200023fa: 4c11 li s8,4 +200023fc: 0b8af7b3 maxu a5,s5,s8 +20002400: 17f1 addi a5,a5,-4 +20002402: c83e sw a5,16(sp) +20002404: 4b81 li s7,0 +20002406: d022 sw s0,32(sp) +20002408: d226 sw s1,36(sp) +2000240a: 5502 lw a0,32(sp) +2000240c: 5592 lw a1,36(sp) +2000240e: 4601 li a2,0 +20002410: 4681 li a3,0 +20002412: 27a030ef jal 2000568c <__ledf2> +20002416: 4e054463 bltz a0,200028fe <_etoa+0x5d6> +2000241a: 47e2 lw a5,24(sp) +2000241c: df5a sw s6,188(sp) +2000241e: dd3e sw a5,184(sp) +20002420: 576a lw a4,184(sp) +20002422: 57fa lw a5,188(sp) +20002424: 480e lw a6,192(sp) +20002426: 48c2 lw a7,16(sp) +20002428: fffd7693 andi a3,s10,-1 +2000242c: 48b69693 bclri a3,a3,0xb +20002430: 485d5d13 bexti s10,s10,0x5 +20002434: c036 sw a3,0(sp) +20002436: 866e mv a2,s11 +20002438: 86d2 mv a3,s4 +2000243a: 85ce mv a1,s3 +2000243c: 854a mv a0,s2 +2000243e: 1d7d addi s10,s10,-1 +20002440: 9abff0ef jal 20001dea <_ftoa> +20002444: 020d7d13 andi s10,s10,32 +20002448: 862a mv a2,a0 +2000244a: 86d2 mv a3,s4 +2000244c: 045d0513 addi a0,s10,69 +20002450: 85ce mv a1,s3 +20002452: 00160413 addi s0,a2,1 +20002456: 9902 jalr s2 +20002458: 417006b3 neg a3,s7 +2000245c: ccccd337 lui t1,0xccccd +20002460: 1c7d addi s8,s8,-1 +20002462: 0adbe6b3 max a3,s7,a3 +20002466: 01fbd813 srli a6,s7,0x1f +2000246a: 0218 addi a4,sp,256 +2000246c: ccd30313 addi t1,t1,-819 # cccccccd <__StackTop+0xacc4accd> +20002470: 4781 li a5,0 +20002472: 4e25 li t3,9 +20002474: 02000e93 li t4,32 +20002478: a019 j 2000247e <_etoa+0x156> +2000247a: 03d78463 beq a5,t4,200024a2 <_etoa+0x17a> +2000247e: 0266b633 mulhu a2,a3,t1 +20002482: 0785 addi a5,a5,1 +20002484: 8536 mv a0,a3 +20002486: 00f708b3 add a7,a4,a5 +2000248a: 820d srli a2,a2,0x3 +2000248c: 20c645b3 sh2add a1,a2,a2 +20002490: 0586 slli a1,a1,0x1 +20002492: 8e8d sub a3,a3,a1 +20002494: 03068693 addi a3,a3,48 +20002498: fed88fa3 sb a3,-1(a7) +2000249c: 86b2 mv a3,a2 +2000249e: fcae6ee3 bltu t3,a0,2000247a <_etoa+0x152> +200024a2: 4695 li a3,5 +200024a4: c436 sw a3,8(sp) +200024a6: c262 sw s8,4(sp) +200024a8: c002 sw zero,0(sp) +200024aa: 8622 mv a2,s0 +200024ac: 48a9 li a7,10 +200024ae: 86d2 mv a3,s4 +200024b0: 85ce mv a1,s3 +200024b2: 854a mv a0,s2 +200024b4: f06ff0ef jal 20001bba <_ntoa_format> +200024b8: 020c8a63 beqz s9,200024ec <_etoa+0x1c4> +200024bc: 41b50433 sub s0,a0,s11 +200024c0: 03547663 bgeu s0,s5,200024ec <_etoa+0x1c4> +200024c4: 84aa mv s1,a0 +200024c6: 008d8633 add a2,s11,s0 +200024ca: 86d2 mv a3,s4 +200024cc: 85ce mv a1,s3 +200024ce: 02000513 li a0,32 +200024d2: 0405 addi s0,s0,1 +200024d4: 9902 jalr s2 +200024d6: ff5468e3 bltu s0,s5,200024c6 <_etoa+0x19e> +200024da: 41b48733 sub a4,s1,s11 +200024de: 0705 addi a4,a4,1 +200024e0: 8526 mv a0,s1 +200024e2: 4781 li a5,0 +200024e4: 40eaf863 bgeu s5,a4,200028f4 <_etoa+0x5cc> +200024e8: 0505 addi a0,a0,1 +200024ea: 953e add a0,a0,a5 +200024ec: 15c12083 lw ra,348(sp) +200024f0: 15812403 lw s0,344(sp) +200024f4: 14012b03 lw s6,320(sp) +200024f8: 13c12b83 lw s7,316(sp) +200024fc: 13812c03 lw s8,312(sp) +20002500: 13412c83 lw s9,308(sp) +20002504: 15412483 lw s1,340(sp) +20002508: 15012903 lw s2,336(sp) +2000250c: 14c12983 lw s3,332(sp) +20002510: 14812a03 lw s4,328(sp) +20002514: 14412a83 lw s5,324(sp) +20002518: 13012d03 lw s10,304(sp) +2000251c: 12c12d83 lw s11,300(sp) +20002520: 6135 addi sp,sp,352 +20002522: 8082 ret +20002524: 13812c03 lw s8,312(sp) +20002528: 13412c83 lw s9,308(sp) +2000252c: c822 sw s0,16(sp) +2000252e: ca26 sw s1,20(sp) +20002530: 4742 lw a4,16(sp) +20002532: 47d2 lw a5,20(sp) +20002534: 480e lw a6,192(sp) +20002536: 17a12023 sw s10,352(sp) +2000253a: 88d6 mv a7,s5 +2000253c: 86d2 mv a3,s4 +2000253e: 866e mv a2,s11 +20002540: 85ce mv a1,s3 +20002542: 854a mv a0,s2 +20002544: 15812403 lw s0,344(sp) +20002548: 15c12083 lw ra,348(sp) +2000254c: 15412483 lw s1,340(sp) +20002550: 15012903 lw s2,336(sp) +20002554: 14c12983 lw s3,332(sp) +20002558: 14812a03 lw s4,328(sp) +2000255c: 14412a83 lw s5,324(sp) +20002560: 13012d03 lw s10,304(sp) +20002564: 12c12d83 lw s11,300(sp) +20002568: 6135 addi sp,sp,352 +2000256a: 881ff06f j 20001dea <_ftoa> +2000256e: 14012b03 lw s6,320(sp) +20002572: 13c12b83 lw s7,316(sp) +20002576: 13812c03 lw s8,312(sp) +2000257a: 13412c83 lw s9,308(sp) +2000257e: b77d j 2000252c <_etoa+0x204> +20002580: efa9 bnez a5,200025da <_etoa+0x2b2> +20002582: e60688e3 beqz a3,200023f2 <_etoa+0xca> +20002586: 4b81 li s7,0 +20002588: 478e lw a5,192(sp) +2000258a: 4c01 li s8,0 +2000258c: 38fbc763 blt s7,a5,2000291a <_etoa+0x5f2> +20002590: c5a2 sw s0,200(sp) +20002592: c7a6 sw s1,204(sp) +20002594: 452e lw a0,200(sp) +20002596: 45be lw a1,204(sp) +20002598: 4601 li a2,0 +2000259a: 4681 li a3,0 +2000259c: 0f0030ef jal 2000568c <__ledf2> +200025a0: 32054c63 bltz a0,200028d8 <_etoa+0x5b0> +200025a4: d1a2 sw s0,224(sp) +200025a6: d3da sw s6,228(sp) +200025a8: 570e lw a4,224(sp) +200025aa: 579e lw a5,228(sp) +200025ac: 48bd1d13 bclri s10,s10,0xb +200025b0: 400d6d13 ori s10,s10,1024 +200025b4: 8862 mv a6,s8 +200025b6: 14012b03 lw s6,320(sp) +200025ba: 13c12b83 lw s7,316(sp) +200025be: 13812c03 lw s8,312(sp) +200025c2: 13412c83 lw s9,308(sp) +200025c6: 17a12023 sw s10,352(sp) +200025ca: 88d6 mv a7,s5 +200025cc: 86d2 mv a3,s4 +200025ce: 866e mv a2,s11 +200025d0: 85ce mv a1,s3 +200025d2: 854a mv a0,s2 +200025d4: bf85 j 20002544 <_etoa+0x21c> +200025d6: 4799 li a5,6 +200025d8: c1be sw a5,192(sp) +200025da: 014b5513 srli a0,s6,0x14 +200025de: 7ff57513 andi a0,a0,2047 +200025e2: c0150513 addi a0,a0,-1023 +200025e6: 06c040ef jal 20006652 <__floatsidf> +200025ea: 200077b7 lui a5,0x20007 +200025ee: dc07a603 lw a2,-576(a5) # 20006dc0 +200025f2: dc47a683 lw a3,-572(a5) +200025f6: 156030ef jal 2000574c <__muldf3> +200025fa: 200077b7 lui a5,0x20007 +200025fe: dc87a603 lw a2,-568(a5) # 20006dc8 +20002602: dcc7a683 lw a3,-564(a5) +20002606: 114020ef jal 2000471a <__adddf3> +2000260a: 00cb1793 slli a5,s6,0xc +2000260e: 3ff00637 lui a2,0x3ff00 +20002612: 83b1 srli a5,a5,0xc +20002614: 8fd1 or a5,a5,a2 +20002616: d63e sw a5,44(sp) +20002618: d422 sw s0,40(sp) +2000261a: 200077b7 lui a5,0x20007 +2000261e: dd07a603 lw a2,-560(a5) # 20006dd0 +20002622: dd47a683 lw a3,-556(a5) +20002626: 8c2a mv s8,a0 +20002628: 8bae mv s7,a1 +2000262a: 5522 lw a0,40(sp) +2000262c: 55b2 lw a1,44(sp) +2000262e: 674030ef jal 20005ca2 <__subdf3> +20002632: 200077b7 lui a5,0x20007 +20002636: dd87a603 lw a2,-552(a5) # 20006dd8 +2000263a: ddc7a683 lw a3,-548(a5) +2000263e: 10e030ef jal 2000574c <__muldf3> +20002642: d862 sw s8,48(sp) +20002644: da5e sw s7,52(sp) +20002646: 862a mv a2,a0 +20002648: 86ae mv a3,a1 +2000264a: 5542 lw a0,48(sp) +2000264c: 55d2 lw a1,52(sp) +2000264e: 0cc020ef jal 2000471a <__adddf3> +20002652: 743030ef jal 20006594 <__fixdfsi> +20002656: 8baa mv s7,a0 +20002658: 7fb030ef jal 20006652 <__floatsidf> +2000265c: 200077b7 lui a5,0x20007 +20002660: de07a603 lw a2,-544(a5) # 20006de0 +20002664: de47a683 lw a3,-540(a5) +20002668: 8caa mv s9,a0 +2000266a: 8c2e mv s8,a1 +2000266c: 0e0030ef jal 2000574c <__muldf3> +20002670: 200077b7 lui a5,0x20007 +20002674: db87a603 lw a2,-584(a5) # 20006db8 +20002678: dbc7a683 lw a3,-580(a5) +2000267c: 09e020ef jal 2000471a <__adddf3> +20002680: 715030ef jal 20006594 <__fixdfsi> +20002684: 20007737 lui a4,0x20007 +20002688: dc66 sw s9,56(sp) +2000268a: de62 sw s8,60(sp) +2000268c: de872603 lw a2,-536(a4) # 20006de8 +20002690: 87aa mv a5,a0 +20002692: 55f2 lw a1,60(sp) +20002694: 5562 lw a0,56(sp) +20002696: dec72683 lw a3,-532(a4) +2000269a: 8c3e mv s8,a5 +2000269c: 0b0030ef jal 2000574c <__muldf3> +200026a0: 8caa mv s9,a0 +200026a2: 8562 mv a0,s8 +200026a4: d462 sw s8,40(sp) +200026a6: 8c2e mv s8,a1 +200026a8: 7ab030ef jal 20006652 <__floatsidf> +200026ac: 200077b7 lui a5,0x20007 +200026b0: df07a603 lw a2,-528(a5) # 20006df0 +200026b4: df47a683 lw a3,-524(a5) +200026b8: 094030ef jal 2000574c <__muldf3> +200026bc: c0e6 sw s9,64(sp) +200026be: c2e2 sw s8,68(sp) +200026c0: 862a mv a2,a0 +200026c2: 86ae mv a3,a1 +200026c4: 4506 lw a0,64(sp) +200026c6: 4596 lw a1,68(sp) +200026c8: 5da030ef jal 20005ca2 <__subdf3> +200026cc: c4aa sw a0,72(sp) +200026ce: c6ae sw a1,76(sp) +200026d0: 4626 lw a2,72(sp) +200026d2: 46b6 lw a3,76(sp) +200026d4: dc2a sw a0,56(sp) +200026d6: d82e sw a1,48(sp) +200026d8: 074030ef jal 2000574c <__muldf3> +200026dc: 57c2 lw a5,48(sp) +200026de: 5762 lw a4,56(sp) +200026e0: 8caa mv s9,a0 +200026e2: cabe sw a5,84(sp) +200026e4: c8ba sw a4,80(sp) +200026e6: ccba sw a4,88(sp) +200026e8: cebe sw a5,92(sp) +200026ea: 8c2e mv s8,a1 +200026ec: 4646 lw a2,80(sp) +200026ee: 46d6 lw a3,84(sp) +200026f0: 4566 lw a0,88(sp) +200026f2: 45f6 lw a1,92(sp) +200026f4: c0be sw a5,64(sp) +200026f6: 024020ef jal 2000471a <__adddf3> +200026fa: 200076b7 lui a3,0x20007 +200026fe: d0e6 sw s9,96(sp) +20002700: d2e2 sw s8,100(sp) +20002702: 88aa mv a7,a0 +20002704: 882e mv a6,a1 +20002706: df86a603 lw a2,-520(a3) # 20006df8 +2000270a: 5506 lw a0,96(sp) +2000270c: dfc6a683 lw a3,-516(a3) +20002710: 5596 lw a1,100(sp) +20002712: dc46 sw a7,56(sp) +20002714: d842 sw a6,48(sp) +20002716: 0cb020ef jal 20004fe0 <__divdf3> +2000271a: 20007337 lui t1,0x20007 +2000271e: e0032603 lw a2,-512(t1) # 20006e00 +20002722: e0432683 lw a3,-508(t1) +20002726: 7f5010ef jal 2000471a <__adddf3> +2000272a: d4e6 sw s9,104(sp) +2000272c: d6e2 sw s8,108(sp) +2000272e: 862a mv a2,a0 +20002730: 86ae mv a3,a1 +20002732: 5526 lw a0,104(sp) +20002734: 55b6 lw a1,108(sp) +20002736: 0ab020ef jal 20004fe0 <__divdf3> +2000273a: 200076b7 lui a3,0x20007 +2000273e: e086a603 lw a2,-504(a3) # 20006e08 +20002742: e0c6a683 lw a3,-500(a3) +20002746: 7d5010ef jal 2000471a <__adddf3> +2000274a: d8e6 sw s9,112(sp) +2000274c: dae2 sw s8,116(sp) +2000274e: 862a mv a2,a0 +20002750: 86ae mv a3,a1 +20002752: 5546 lw a0,112(sp) +20002754: 55d6 lw a1,116(sp) +20002756: 08b020ef jal 20004fe0 <__divdf3> +2000275a: 4726 lw a4,72(sp) +2000275c: 4786 lw a5,64(sp) +2000275e: 8c2a mv s8,a0 +20002760: dcba sw a4,120(sp) +20002762: debe sw a5,124(sp) +20002764: 200077b7 lui a5,0x20007 +20002768: e107a503 lw a0,-496(a5) # 20006e10 +2000276c: 5666 lw a2,120(sp) +2000276e: 56f6 lw a3,124(sp) +20002770: 8cae mv s9,a1 +20002772: e147a583 lw a1,-492(a5) +20002776: 52c030ef jal 20005ca2 <__subdf3> +2000277a: c162 sw s8,128(sp) +2000277c: c366 sw s9,132(sp) +2000277e: 862a mv a2,a0 +20002780: 86ae mv a3,a1 +20002782: 450a lw a0,128(sp) +20002784: 459a lw a1,132(sp) +20002786: 795010ef jal 2000471a <__adddf3> +2000278a: 5842 lw a6,48(sp) +2000278c: 58e2 lw a7,56(sp) +2000278e: 862a mv a2,a0 +20002790: c742 sw a6,140(sp) +20002792: c546 sw a7,136(sp) +20002794: 86ae mv a3,a1 +20002796: 452a lw a0,136(sp) +20002798: 45ba lw a1,140(sp) +2000279a: 047020ef jal 20004fe0 <__divdf3> +2000279e: 200077b7 lui a5,0x20007 +200027a2: e187a603 lw a2,-488(a5) # 20006e18 +200027a6: e1c7a683 lw a3,-484(a5) +200027aa: 771010ef jal 2000471a <__adddf3> +200027ae: 57a2 lw a5,40(sp) +200027b0: 4701 li a4,0 +200027b2: c93a sw a4,144(sp) +200027b4: 3ff78793 addi a5,a5,1023 +200027b8: 07d2 slli a5,a5,0x14 +200027ba: cb3e sw a5,148(sp) +200027bc: 46da lw a3,148(sp) +200027be: 464a lw a2,144(sp) +200027c0: 78d020ef jal 2000574c <__muldf3> +200027c4: cd2a sw a0,152(sp) +200027c6: d82a sw a0,48(sp) +200027c8: cf2e sw a1,156(sp) +200027ca: d42e sw a1,40(sp) +200027cc: d122 sw s0,160(sp) +200027ce: d35a sw s6,164(sp) +200027d0: 466a lw a2,152(sp) +200027d2: 46fa lw a3,156(sp) +200027d4: 550a lw a0,160(sp) +200027d6: 559a lw a1,164(sp) +200027d8: 6b5020ef jal 2000568c <__ledf2> +200027dc: 57a2 lw a5,40(sp) +200027de: 5742 lw a4,48(sp) +200027e0: 20007337 lui t1,0x20007 +200027e4: 00055f63 bgez a0,20002802 <_etoa+0x4da> +200027e8: c9ba sw a4,208(sp) +200027ea: cbbe sw a5,212(sp) +200027ec: 454e lw a0,208(sp) +200027ee: 45de lw a1,212(sp) +200027f0: e0032603 lw a2,-512(t1) # 20006e00 +200027f4: e0432683 lw a3,-508(t1) +200027f8: 1bfd addi s7,s7,-1 +200027fa: 7e6020ef jal 20004fe0 <__divdf3> +200027fe: 872a mv a4,a0 +20002800: 87ae mv a5,a1 +20002802: 063b8693 addi a3,s7,99 +20002806: 0c600593 li a1,198 +2000280a: 863a mv a2,a4 +2000280c: 853e mv a0,a5 +2000280e: 002d7c93 andi s9,s10,2 +20002812: 02d5eb63 bltu a1,a3,20002848 <_etoa+0x520> +20002816: 46c2 lw a3,16(sp) +20002818: 4c11 li s8,4 +2000281a: e2b1 bnez a3,2000285e <_etoa+0x536> +2000281c: 015c7763 bgeu s8,s5,2000282a <_etoa+0x502> +20002820: 100c9163 bnez s9,20002922 <_etoa+0x5fa> +20002824: ffca8693 addi a3,s5,-4 +20002828: c836 sw a3,16(sp) +2000282a: bc0b8ee3 beqz s7,20002406 <_etoa+0xde> +2000282e: db5a sw s6,180(sp) +20002830: d53a sw a4,168(sp) +20002832: d922 sw s0,176(sp) +20002834: d73e sw a5,172(sp) +20002836: 562a lw a2,168(sp) +20002838: 56ba lw a3,172(sp) +2000283a: 554a lw a0,176(sp) +2000283c: 55da lw a1,180(sp) +2000283e: 7a2020ef jal 20004fe0 <__divdf3> +20002842: cc2a sw a0,24(sp) +20002844: 8b2e mv s6,a1 +20002846: b6c1 j 20002406 <_etoa+0xde> +20002848: 46c2 lw a3,16(sp) +2000284a: 4c15 li s8,5 +2000284c: ea89 bnez a3,2000285e <_etoa+0x536> +2000284e: ff5c70e3 bgeu s8,s5,2000282e <_etoa+0x506> +20002852: 0c0c9c63 bnez s9,2000292a <_etoa+0x602> +20002856: ffba8693 addi a3,s5,-5 +2000285a: c836 sw a3,16(sp) +2000285c: bfc9 j 2000282e <_etoa+0x506> +2000285e: d43e sw a5,40(sp) +20002860: c83a sw a4,16(sp) +20002862: 8e49 or a2,a2,a0 +20002864: d20602e3 beqz a2,20002588 <_etoa+0x260> +20002868: cda2 sw s0,216(sp) +2000286a: cfda sw s6,220(sp) +2000286c: 200076b7 lui a3,0x20007 +20002870: e206a603 lw a2,-480(a3) # 20006e20 +20002874: 456e lw a0,216(sp) +20002876: 45fe lw a1,220(sp) +20002878: e246a683 lw a3,-476(a3) +2000287c: 553020ef jal 200055ce <__gedf2> +20002880: 4742 lw a4,16(sp) +20002882: 57a2 lw a5,40(sp) +20002884: 02054263 bltz a0,200028a8 <_etoa+0x580> +20002888: 200076b7 lui a3,0x20007 +2000288c: d5a2 sw s0,232(sp) +2000288e: d7da sw s6,236(sp) +20002890: e286a603 lw a2,-472(a3) # 20006e28 +20002894: 552e lw a0,232(sp) +20002896: 55be lw a1,236(sp) +20002898: e2c6a683 lw a3,-468(a3) +2000289c: 5f1020ef jal 2000568c <__ledf2> +200028a0: ce0544e3 bltz a0,20002588 <_etoa+0x260> +200028a4: 4742 lw a4,16(sp) +200028a6: 57a2 lw a5,40(sp) +200028a8: 468e lw a3,192(sp) +200028aa: ce91 beqz a3,200028c6 <_etoa+0x59e> +200028ac: 461e lw a2,196(sp) +200028ae: ce01 beqz a2,200028c6 <_etoa+0x59e> +200028b0: 16fd addi a3,a3,-1 +200028b2: c1b6 sw a3,192(sp) +200028b4: 015c7563 bgeu s8,s5,200028be <_etoa+0x596> +200028b8: 040c8b63 beqz s9,2000290e <_etoa+0x5e6> +200028bc: 4c89 li s9,2 +200028be: c802 sw zero,16(sp) +200028c0: f60b97e3 bnez s7,2000282e <_etoa+0x506> +200028c4: b689 j 20002406 <_etoa+0xde> +200028c6: ff5c7ce3 bgeu s8,s5,200028be <_etoa+0x596> +200028ca: 040c8263 beqz s9,2000290e <_etoa+0x5e6> +200028ce: c802 sw zero,16(sp) +200028d0: 4c89 li s9,2 +200028d2: f40b9ee3 bnez s7,2000282e <_etoa+0x506> +200028d6: be05 j 20002406 <_etoa+0xde> +200028d8: 69fb1b13 binvi s6,s6,0x1f +200028dc: d9a2 sw s0,240(sp) +200028de: dbda sw s6,244(sp) +200028e0: 574e lw a4,240(sp) +200028e2: 57de lw a5,244(sp) +200028e4: b1e1 j 200025ac <_etoa+0x284> +200028e6: 4c15 li s8,5 +200028e8: b165 j 20002590 <_etoa+0x268> +200028ea: c802 sw zero,16(sp) +200028ec: 4b81 li s7,0 +200028ee: 4c89 li s9,2 +200028f0: 4c11 li s8,4 +200028f2: be11 j 20002406 <_etoa+0xde> +200028f4: fffd8793 addi a5,s11,-1 +200028f8: 97d6 add a5,a5,s5 +200028fa: 8f85 sub a5,a5,s1 +200028fc: b6f5 j 200024e8 <_etoa+0x1c0> +200028fe: 47e2 lw a5,24(sp) +20002900: 69fb1b13 binvi s6,s6,0x1f +20002904: dfda sw s6,252(sp) +20002906: ddbe sw a5,248(sp) +20002908: 576e lw a4,248(sp) +2000290a: 57fe lw a5,252(sp) +2000290c: be21 j 20002424 <_etoa+0xfc> +2000290e: 418a86b3 sub a3,s5,s8 +20002912: c836 sw a3,16(sp) +20002914: f00b9de3 bnez s7,2000282e <_etoa+0x506> +20002918: b4fd j 20002406 <_etoa+0xde> +2000291a: 41778c33 sub s8,a5,s7 +2000291e: 1c7d addi s8,s8,-1 +20002920: b985 j 20002590 <_etoa+0x268> +20002922: 4c89 li s9,2 +20002924: f00b95e3 bnez s7,2000282e <_etoa+0x506> +20002928: bcf9 j 20002406 <_etoa+0xde> +2000292a: 4c89 li s9,2 +2000292c: b709 j 2000282e <_etoa+0x506> + +2000292e <_vsnprintf>: +2000292e: 200037b7 lui a5,0x20003 +20002932: 7135 addi sp,sp,-160 +20002934: 92e78793 addi a5,a5,-1746 # 2000292e <_vsnprintf> +20002938: cd22 sw s0,152(sp) +2000293a: c552 sw s4,136(sp) +2000293c: dae6 sw s9,116(sp) +2000293e: d8ea sw s10,112(sp) +20002940: d6ee sw s11,108(sp) +20002942: cf06 sw ra,156(sp) +20002944: cb26 sw s1,148(sp) +20002946: 80f1a823 sw a5,-2032(gp) # 20007114 +2000294a: 8cae mv s9,a1 +2000294c: 8a32 mv s4,a2 +2000294e: 8436 mv s0,a3 +20002950: 8d3a mv s10,a4 +20002952: 8daa mv s11,a0 +20002954: 3a058163 beqz a1,20002cf6 <_vsnprintf+0x3c8> +20002958: 00044503 lbu a0,0(s0) +2000295c: 4481 li s1,0 +2000295e: 3a050563 beqz a0,20002d08 <_vsnprintf+0x3da> +20002962: c74e sw s3,140(sp) +20002964: c356 sw s5,132(sp) +20002966: c15a sw s6,128(sp) +20002968: dede sw s7,124(sp) +2000296a: 49c1 li s3,16 +2000296c: 02500b93 li s7,37 +20002970: 20007ab7 lui s5,0x20007 +20002974: 4b25 li s6,9 +20002976: a811 j 2000298a <_vsnprintf+0x5c> +20002978: 8626 mv a2,s1 +2000297a: 86d2 mv a3,s4 +2000297c: 85e6 mv a1,s9 +2000297e: 0485 addi s1,s1,1 +20002980: 9d82 jalr s11 +20002982: 00044503 lbu a0,0(s0) +20002986: 12050063 beqz a0,20002aa6 <_vsnprintf+0x178> +2000298a: 0405 addi s0,s0,1 +2000298c: ff7516e3 bne a0,s7,20002978 <_vsnprintf+0x4a> +20002990: 4681 li a3,0 +20002992: 00044503 lbu a0,0(s0) +20002996: 00140713 addi a4,s0,1 +2000299a: fe050793 addi a5,a0,-32 +2000299e: 0ff7f793 zext.b a5,a5 +200029a2: 00f9e863 bltu s3,a5,200029b2 <_vsnprintf+0x84> +200029a6: a3ca8613 addi a2,s5,-1476 # 20006a3c <__bi_48+0xc> +200029aa: 20c7c7b3 sh2add a5,a5,a2 +200029ae: 439c lw a5,0(a5) +200029b0: 8782 jr a5 +200029b2: fd050793 addi a5,a0,-48 +200029b6: 0ff7f793 zext.b a5,a5 +200029ba: 08fb7d63 bgeu s6,a5,20002a54 <_vsnprintf+0x126> +200029be: 02a00793 li a5,42 +200029c2: 4881 li a7,0 +200029c4: 1af50363 beq a0,a5,20002b6a <_vsnprintf+0x23c> +200029c8: 02e00793 li a5,46 +200029cc: 4801 li a6,0 +200029ce: 0af50963 beq a0,a5,20002a80 <_vsnprintf+0x152> +200029d2: f9850793 addi a5,a0,-104 +200029d6: 0ff7f793 zext.b a5,a5 +200029da: 4649 li a2,18 +200029dc: 04f66363 bltu a2,a5,20002a22 <_vsnprintf+0xf4> +200029e0: 20007637 lui a2,0x20007 +200029e4: a8060613 addi a2,a2,-1408 # 20006a80 <__bi_48+0x50> +200029e8: 20c7c7b3 sh2add a5,a5,a2 +200029ec: 439c lw a5,0(a5) +200029ee: 8782 jr a5 +200029f0: 0016e693 ori a3,a3,1 +200029f4: 843a mv s0,a4 +200029f6: bf71 j 20002992 <_vsnprintf+0x64> +200029f8: 0026e693 ori a3,a3,2 +200029fc: 843a mv s0,a4 +200029fe: bf51 j 20002992 <_vsnprintf+0x64> +20002a00: 0046e693 ori a3,a3,4 +20002a04: 843a mv s0,a4 +20002a06: b771 j 20002992 <_vsnprintf+0x64> +20002a08: 0106e693 ori a3,a3,16 +20002a0c: 843a mv s0,a4 +20002a0e: b751 j 20002992 <_vsnprintf+0x64> +20002a10: 0086e693 ori a3,a3,8 +20002a14: 843a mv s0,a4 +20002a16: bfb5 j 20002992 <_vsnprintf+0x64> +20002a18: 00144503 lbu a0,1(s0) +20002a1c: 1006e693 ori a3,a3,256 +20002a20: 0705 addi a4,a4,1 +20002a22: 06700793 li a5,103 +20002a26: 843a mv s0,a4 +20002a28: 0aa7e763 bltu a5,a0,20002ad6 <_vsnprintf+0x1a8> +20002a2c: 02400793 li a5,36 +20002a30: f4a7f4e3 bgeu a5,a0,20002978 <_vsnprintf+0x4a> +20002a34: fdb50793 addi a5,a0,-37 +20002a38: 0ff7f793 zext.b a5,a5 +20002a3c: 04200713 li a4,66 +20002a40: f2f76ce3 bltu a4,a5,20002978 <_vsnprintf+0x4a> +20002a44: 20007737 lui a4,0x20007 +20002a48: acc70713 addi a4,a4,-1332 # 20006acc <__bi_48+0x9c> +20002a4c: 20e7c7b3 sh2add a5,a5,a4 +20002a50: 439c lw a5,0(a5) +20002a52: 8782 jr a5 +20002a54: 4881 li a7,0 +20002a56: 2118c8b3 sh2add a7,a7,a7 +20002a5a: 20a8a8b3 sh1add a7,a7,a0 +20002a5e: 00074503 lbu a0,0(a4) +20002a62: 843a mv s0,a4 +20002a64: fd088893 addi a7,a7,-48 +20002a68: fd050793 addi a5,a0,-48 +20002a6c: 0ff7f793 zext.b a5,a5 +20002a70: 0705 addi a4,a4,1 +20002a72: fefb72e3 bgeu s6,a5,20002a56 <_vsnprintf+0x128> +20002a76: 02e00793 li a5,46 +20002a7a: 4801 li a6,0 +20002a7c: f4f51be3 bne a0,a5,200029d2 <_vsnprintf+0xa4> +20002a80: 00144503 lbu a0,1(s0) +20002a84: 47a5 li a5,9 +20002a86: 4006e693 ori a3,a3,1024 +20002a8a: fd050593 addi a1,a0,-48 +20002a8e: 0ff5f593 zext.b a1,a1 +20002a92: 863a mv a2,a4 +20002a94: 28b7fe63 bgeu a5,a1,20002d30 <_vsnprintf+0x402> +20002a98: 02a00793 li a5,42 +20002a9c: 2af50e63 beq a0,a5,20002d58 <_vsnprintf+0x42a> +20002aa0: 843a mv s0,a4 +20002aa2: 0705 addi a4,a4,1 +20002aa4: b73d j 200029d2 <_vsnprintf+0xa4> +20002aa6: 49ba lw s3,140(sp) +20002aa8: 4a9a lw s5,132(sp) +20002aaa: 4b0a lw s6,128(sp) +20002aac: 5bf6 lw s7,124(sp) +20002aae: 8426 mv s0,s1 +20002ab0: 0144e463 bltu s1,s4,20002ab8 <_vsnprintf+0x18a> +20002ab4: fffa0493 addi s1,s4,-1 +20002ab8: 86d2 mv a3,s4 +20002aba: 8626 mv a2,s1 +20002abc: 85e6 mv a1,s9 +20002abe: 4501 li a0,0 +20002ac0: 9d82 jalr s11 +20002ac2: 40fa lw ra,156(sp) +20002ac4: 8522 mv a0,s0 +20002ac6: 446a lw s0,152(sp) +20002ac8: 44da lw s1,148(sp) +20002aca: 4a2a lw s4,136(sp) +20002acc: 5cd6 lw s9,116(sp) +20002ace: 5d46 lw s10,112(sp) +20002ad0: 5db6 lw s11,108(sp) +20002ad2: 610d addi sp,sp,160 +20002ad4: 8082 ret +20002ad6: f9750713 addi a4,a0,-105 +20002ada: 0ff77713 zext.b a4,a4 +20002ade: 47bd li a5,15 +20002ae0: e8e7ece3 bltu a5,a4,20002978 <_vsnprintf+0x4a> +20002ae4: 6625 lui a2,0x9 +20002ae6: 04160613 addi a2,a2,65 # 9041 +20002aea: 28e017b3 bset a5,zero,a4 +20002aee: 8ff1 and a5,a5,a2 +20002af0: 22079063 bnez a5,20002d10 <_vsnprintf+0x3e2> +20002af4: 4629 li a2,10 +20002af6: 08c70463 beq a4,a2,20002b7e <_vsnprintf+0x250> +20002afa: 461d li a2,7 +20002afc: e6c71ee3 bne a4,a2,20002978 <_vsnprintf+0x4a> +20002b00: 000d2703 lw a4,0(s10) +20002b04: 0d11 addi s10,s10,4 +20002b06: 26071463 bnez a4,20002d6e <_vsnprintf+0x440> +20002b0a: fef6f593 andi a1,a3,-17 +20002b0e: 4006f693 andi a3,a3,1024 +20002b12: 0215e593 ori a1,a1,33 +20002b16: 0098 addi a4,sp,64 +20002b18: ea9d bnez a3,20002b4e <_vsnprintf+0x220> +20002b1a: 0098 addi a4,sp,64 +20002b1c: 4325 li t1,9 +20002b1e: 48bd li a7,15 +20002b20: 02000e13 li t3,32 +20002b24: a021 j 20002b2c <_vsnprintf+0x1fe> +20002b26: 03c78463 beq a5,t3,20002b4e <_vsnprintf+0x220> +20002b2a: 86b2 mv a3,a2 +20002b2c: 00f6fe93 andi t4,a3,15 +20002b30: 037e8513 addi a0,t4,55 +20002b34: 01d36463 bltu t1,t4,20002b3c <_vsnprintf+0x20e> +20002b38: 030e8513 addi a0,t4,48 +20002b3c: 0785 addi a5,a5,1 +20002b3e: 00f70633 add a2,a4,a5 +20002b42: fea60fa3 sb a0,-1(a2) +20002b46: 0046d613 srli a2,a3,0x4 +20002b4a: fcd8eee3 bltu a7,a3,20002b26 <_vsnprintf+0x1f8> +20002b4e: 46a1 li a3,8 +20002b50: c042 sw a6,0(sp) +20002b52: c42e sw a1,8(sp) +20002b54: 8626 mv a2,s1 +20002b56: c236 sw a3,4(sp) +20002b58: 48c1 li a7,16 +20002b5a: 4801 li a6,0 +20002b5c: 86d2 mv a3,s4 +20002b5e: 85e6 mv a1,s9 +20002b60: 856e mv a0,s11 +20002b62: 858ff0ef jal 20001bba <_ntoa_format> +20002b66: 84aa mv s1,a0 +20002b68: bd29 j 20002982 <_vsnprintf+0x54> +20002b6a: 000d2883 lw a7,0(s10) +20002b6e: 0d11 addi s10,s10,4 +20002b70: 0808c263 bltz a7,20002bf4 <_vsnprintf+0x2c6> +20002b74: 00144503 lbu a0,1(s0) +20002b78: 843a mv s0,a4 +20002b7a: 0705 addi a4,a4,1 +20002b7c: b5b1 j 200029c8 <_vsnprintf+0x9a> +20002b7e: 004d0793 addi a5,s10,4 +20002b82: c94a sw s2,144(sp) +20002b84: dce2 sw s8,120(sp) +20002b86: ce3e sw a5,28(sp) +20002b88: 000d2903 lw s2,0(s10) +20002b8c: 567d li a2,-1 +20002b8e: 00080363 beqz a6,20002b94 <_vsnprintf+0x266> +20002b92: 8642 mv a2,a6 +20002b94: 00094503 lbu a0,0(s2) +20002b98: 964a add a2,a2,s2 +20002b9a: 87ca mv a5,s2 +20002b9c: 50050763 beqz a0,200030aa <_vsnprintf+0x77c> +20002ba0: 26f60163 beq a2,a5,20002e02 <_vsnprintf+0x4d4> +20002ba4: 0017c703 lbu a4,1(a5) +20002ba8: 0785 addi a5,a5,1 +20002baa: fb7d bnez a4,20002ba0 <_vsnprintf+0x272> +20002bac: 41278733 sub a4,a5,s2 +20002bb0: 4006f793 andi a5,a3,1024 +20002bb4: 8a89 andi a3,a3,2 +20002bb6: 24078d63 beqz a5,20002e10 <_vsnprintf+0x4e2> +20002bba: 0b075733 minu a4,a4,a6 +20002bbe: 5e068963 beqz a3,200031b0 <_vsnprintf+0x882> +20002bc2: 4689 li a3,2 +20002bc4: 00980c33 add s8,a6,s1 +20002bc8: d046 sw a7,32(sp) +20002bca: 87a6 mv a5,s1 +20002bcc: 8d36 mv s10,a3 +20002bce: d23a sw a4,36(sp) +20002bd0: d422 sw s0,40(sp) +20002bd2: 28fc0d63 beq s8,a5,20002e6c <_vsnprintf+0x53e> +20002bd6: 86d2 mv a3,s4 +20002bd8: 863e mv a2,a5 +20002bda: 85e6 mv a1,s9 +20002bdc: 00178413 addi s0,a5,1 +20002be0: 9d82 jalr s11 +20002be2: 40940733 sub a4,s0,s1 +20002be6: 974a add a4,a4,s2 +20002be8: 00074503 lbu a0,0(a4) +20002bec: 28050663 beqz a0,20002e78 <_vsnprintf+0x54a> +20002bf0: 87a2 mv a5,s0 +20002bf2: b7c5 j 20002bd2 <_vsnprintf+0x2a4> +20002bf4: 00144503 lbu a0,1(s0) +20002bf8: 0026e693 ori a3,a3,2 +20002bfc: 843a mv s0,a4 +20002bfe: 411008b3 neg a7,a7 +20002c02: 0705 addi a4,a4,1 +20002c04: b3d1 j 200029c8 <_vsnprintf+0x9a> +20002c06: 00144503 lbu a0,1(s0) +20002c0a: 06c00793 li a5,108 +20002c0e: e0f517e3 bne a0,a5,20002a1c <_vsnprintf+0xee> +20002c12: 00244503 lbu a0,2(s0) +20002c16: 3006e693 ori a3,a3,768 +20002c1a: 00340713 addi a4,s0,3 +20002c1e: b511 j 20002a22 <_vsnprintf+0xf4> +20002c20: 00144503 lbu a0,1(s0) +20002c24: 2006e693 ori a3,a3,512 +20002c28: 0705 addi a4,a4,1 +20002c2a: bbe5 j 20002a22 <_vsnprintf+0xf4> +20002c2c: 00144503 lbu a0,1(s0) +20002c30: 06800793 li a5,104 +20002c34: 20f50e63 beq a0,a5,20002e50 <_vsnprintf+0x522> +20002c38: 0806e693 ori a3,a3,128 +20002c3c: 0705 addi a4,a4,1 +20002c3e: b3d5 j 20002a22 <_vsnprintf+0xf4> +20002c40: 06700793 li a5,103 +20002c44: 12f50963 beq a0,a5,20002d76 <_vsnprintf+0x448> +20002c48: 04700793 li a5,71 +20002c4c: 1af50663 beq a0,a5,20002df8 <_vsnprintf+0x4ca> +20002c50: 04500793 li a5,69 +20002c54: 1af50463 beq a0,a5,20002dfc <_vsnprintf+0x4ce> +20002c58: 0d1d addi s10,s10,7 +20002c5a: ff8d7d13 andi s10,s10,-8 +20002c5e: 000d2703 lw a4,0(s10) +20002c62: 004d2783 lw a5,4(s10) +20002c66: 8626 mv a2,s1 +20002c68: c036 sw a3,0(sp) +20002c6a: 85e6 mv a1,s9 +20002c6c: 86d2 mv a3,s4 +20002c6e: 856e mv a0,s11 +20002c70: eb8ff0ef jal 20002328 <_etoa> +20002c74: 0d21 addi s10,s10,8 +20002c76: 84aa mv s1,a0 +20002c78: b329 j 20002982 <_vsnprintf+0x54> +20002c7a: 04600793 li a5,70 +20002c7e: 0ef50f63 beq a0,a5,20002d7c <_vsnprintf+0x44e> +20002c82: 0d1d addi s10,s10,7 +20002c84: ff8d7d13 andi s10,s10,-8 +20002c88: 000d2703 lw a4,0(s10) +20002c8c: 004d2783 lw a5,4(s10) +20002c90: 8626 mv a2,s1 +20002c92: c036 sw a3,0(sp) +20002c94: 85e6 mv a1,s9 +20002c96: 86d2 mv a3,s4 +20002c98: 856e mv a0,s11 +20002c9a: 950ff0ef jal 20001dea <_ftoa> +20002c9e: 0d21 addi s10,s10,8 +20002ca0: 84aa mv s1,a0 +20002ca2: b1c5 j 20002982 <_vsnprintf+0x54> +20002ca4: 8626 mv a2,s1 +20002ca6: 86d2 mv a3,s4 +20002ca8: 85e6 mv a1,s9 +20002caa: 02500513 li a0,37 +20002cae: 0485 addi s1,s1,1 +20002cb0: 9d82 jalr s11 +20002cb2: b9c1 j 20002982 <_vsnprintf+0x54> +20002cb4: 004d0793 addi a5,s10,4 +20002cb8: c94a sw s2,144(sp) +20002cba: 8a89 andi a3,a3,2 +20002cbc: ce3e sw a5,28(sp) +20002cbe: 00148913 addi s2,s1,1 +20002cc2: 1c068263 beqz a3,20002e86 <_vsnprintf+0x558> +20002cc6: 000d4503 lbu a0,0(s10) +20002cca: d046 sw a7,32(sp) +20002ccc: 8626 mv a2,s1 +20002cce: 86d2 mv a3,s4 +20002cd0: 85e6 mv a1,s9 +20002cd2: 9d82 jalr s11 +20002cd4: 5882 lw a7,32(sp) +20002cd6: 4785 li a5,1 +20002cd8: 94c6 add s1,s1,a7 +20002cda: 3f17f963 bgeu a5,a7,200030cc <_vsnprintf+0x79e> +20002cde: 864a mv a2,s2 +20002ce0: 86d2 mv a3,s4 +20002ce2: 0905 addi s2,s2,1 +20002ce4: 85e6 mv a1,s9 +20002ce6: 02000513 li a0,32 +20002cea: 9d82 jalr s11 +20002cec: fe9919e3 bne s2,s1,20002cde <_vsnprintf+0x3b0> +20002cf0: 4d72 lw s10,28(sp) +20002cf2: 494a lw s2,144(sp) +20002cf4: b179 j 20002982 <_vsnprintf+0x54> +20002cf6: 00044503 lbu a0,0(s0) +20002cfa: 20002337 lui t1,0x20002 +20002cfe: b0030d93 addi s11,t1,-1280 # 20001b00 <_out_null> +20002d02: 4481 li s1,0 +20002d04: c4051fe3 bnez a0,20002962 <_vsnprintf+0x34> +20002d08: 4401 li s0,0 +20002d0a: db44e7e3 bltu s1,s4,20002ab8 <_vsnprintf+0x18a> +20002d0e: b35d j 20002ab4 <_vsnprintf+0x186> +20002d10: 06f00793 li a5,111 +20002d14: 06f50763 beq a0,a5,20002d82 <_vsnprintf+0x454> +20002d18: 26a7fe63 bgeu a5,a0,20002f94 <_vsnprintf+0x666> +20002d1c: c94a sw s2,144(sp) +20002d1e: 07800793 li a5,120 +20002d22: 36f50263 beq a0,a5,20003086 <_vsnprintf+0x758> +20002d26: 4629 li a2,10 +20002d28: 9abd andi a3,a3,-17 +20002d2a: 8332 mv t1,a2 +20002d2c: 4e81 li t4,0 +20002d2e: a8b1 j 20002d8a <_vsnprintf+0x45c> +20002d30: 873e mv a4,a5 +20002d32: 21084833 sh2add a6,a6,a6 +20002d36: 0605 addi a2,a2,1 +20002d38: 20a82833 sh1add a6,a6,a0 +20002d3c: 00064503 lbu a0,0(a2) +20002d40: fd080813 addi a6,a6,-48 +20002d44: fd050793 addi a5,a0,-48 +20002d48: 0ff7f793 zext.b a5,a5 +20002d4c: fef773e3 bgeu a4,a5,20002d32 <_vsnprintf+0x404> +20002d50: 8432 mv s0,a2 +20002d52: 00160713 addi a4,a2,1 +20002d56: b9b5 j 200029d2 <_vsnprintf+0xa4> +20002d58: 000d2803 lw a6,0(s10) +20002d5c: 00244503 lbu a0,2(s0) +20002d60: 0409 addi s0,s0,2 +20002d62: 00140713 addi a4,s0,1 +20002d66: 0a086833 max a6,a6,zero +20002d6a: 0d11 addi s10,s10,4 +20002d6c: b19d j 200029d2 <_vsnprintf+0xa4> +20002d6e: 0216e593 ori a1,a3,33 +20002d72: 86ba mv a3,a4 +20002d74: b35d j 20002b1a <_vsnprintf+0x1ec> +20002d76: 28b69693 bseti a3,a3,0xb +20002d7a: bdf9 j 20002c58 <_vsnprintf+0x32a> +20002d7c: 0206e693 ori a3,a3,32 +20002d80: b709 j 20002c82 <_vsnprintf+0x354> +20002d82: 4621 li a2,8 +20002d84: c94a sw s2,144(sp) +20002d86: 8332 mv t1,a2 +20002d88: 4e81 li t4,0 +20002d8a: 4006f513 andi a0,a3,1024 +20002d8e: ff36fe13 andi t3,a3,-13 +20002d92: c119 beqz a0,20002d98 <_vsnprintf+0x46a> +20002d94: ff26fe13 andi t3,a3,-14 +20002d98: 200e7593 andi a1,t3,512 +20002d9c: 32059a63 bnez a1,200030d0 <_vsnprintf+0x7a2> +20002da0: 100e7793 andi a5,t3,256 +20002da4: 004d0913 addi s2,s10,4 +20002da8: 4e079d63 bnez a5,200032a2 <_vsnprintf+0x974> +20002dac: 040e7713 andi a4,t3,64 +20002db0: 2e071663 bnez a4,2000309c <_vsnprintf+0x76e> +20002db4: 080e7713 andi a4,t3,128 +20002db8: 58070263 beqz a4,2000333c <_vsnprintf+0xa0e> +20002dbc: 000d5603 lhu a2,0(s10) +20002dc0: 34061b63 bnez a2,20003116 <_vsnprintf+0x7e8> +20002dc4: fefe7e13 andi t3,t3,-17 +20002dc8: 34050763 beqz a0,20003116 <_vsnprintf+0x7e8> +20002dcc: 4781 li a5,0 +20002dce: 0098 addi a4,sp,64 +20002dd0: c246 sw a7,4(sp) +20002dd2: c472 sw t3,8(sp) +20002dd4: c042 sw a6,0(sp) +20002dd6: 889a mv a7,t1 +20002dd8: 8626 mv a2,s1 +20002dda: 4801 li a6,0 +20002ddc: a25d j 20002f82 <_vsnprintf+0x654> +20002dde: 05800793 li a5,88 +20002de2: 06f50e63 beq a0,a5,20002e5e <_vsnprintf+0x530> +20002de6: 06200793 li a5,98 +20002dea: 10f51463 bne a0,a5,20002ef2 <_vsnprintf+0x5c4> +20002dee: 4609 li a2,2 +20002df0: c94a sw s2,144(sp) +20002df2: 8332 mv t1,a2 +20002df4: 4e81 li t4,0 +20002df6: bf51 j 20002d8a <_vsnprintf+0x45c> +20002df8: 28b69693 bseti a3,a3,0xb +20002dfc: 0206e693 ori a3,a3,32 +20002e00: bda1 j 20002c58 <_vsnprintf+0x32a> +20002e02: 4006f793 andi a5,a3,1024 +20002e06: 41260733 sub a4,a2,s2 +20002e0a: 8a89 andi a3,a3,2 +20002e0c: da0797e3 bnez a5,20002bba <_vsnprintf+0x28c> +20002e10: 34068b63 beqz a3,20003166 <_vsnprintf+0x838> +20002e14: 4689 li a3,2 +20002e16: 87a2 mv a5,s0 +20002e18: 8c36 mv s8,a3 +20002e1a: d046 sw a7,32(sp) +20002e1c: d23a sw a4,36(sp) +20002e1e: 8426 mv s0,s1 +20002e20: 8d3e mv s10,a5 +20002e22: 8622 mv a2,s0 +20002e24: 86d2 mv a3,s4 +20002e26: 85e6 mv a1,s9 +20002e28: 9d82 jalr s11 +20002e2a: 0405 addi s0,s0,1 +20002e2c: 40940733 sub a4,s0,s1 +20002e30: 974a add a4,a4,s2 +20002e32: 00074503 lbu a0,0(a4) +20002e36: f575 bnez a0,20002e22 <_vsnprintf+0x4f4> +20002e38: 5882 lw a7,32(sp) +20002e3a: 5712 lw a4,36(sp) +20002e3c: 87ea mv a5,s10 +20002e3e: 8d22 mv s10,s0 +20002e40: 86e2 mv a3,s8 +20002e42: 843e mv s0,a5 +20002e44: 84ea mv s1,s10 +20002e46: e6d1 bnez a3,20002ed2 <_vsnprintf+0x5a4> +20002e48: 4d72 lw s10,28(sp) +20002e4a: 494a lw s2,144(sp) +20002e4c: 5c66 lw s8,120(sp) +20002e4e: be15 j 20002982 <_vsnprintf+0x54> +20002e50: 00244503 lbu a0,2(s0) +20002e54: 0c06e693 ori a3,a3,192 +20002e58: 00340713 addi a4,s0,3 +20002e5c: b6d9 j 20002a22 <_vsnprintf+0xf4> +20002e5e: 4641 li a2,16 +20002e60: c94a sw s2,144(sp) +20002e62: 0206e693 ori a3,a3,32 +20002e66: 8332 mv t1,a2 +20002e68: 4e81 li t4,0 +20002e6a: b705 j 20002d8a <_vsnprintf+0x45c> +20002e6c: 5882 lw a7,32(sp) +20002e6e: 5712 lw a4,36(sp) +20002e70: 5422 lw s0,40(sp) +20002e72: 86ea mv a3,s10 +20002e74: 84e2 mv s1,s8 +20002e76: bfc1 j 20002e46 <_vsnprintf+0x518> +20002e78: 86ea mv a3,s10 +20002e7a: 8d22 mv s10,s0 +20002e7c: 5882 lw a7,32(sp) +20002e7e: 5712 lw a4,36(sp) +20002e80: 5422 lw s0,40(sp) +20002e82: 84ea mv s1,s10 +20002e84: b7c9 j 20002e46 <_vsnprintf+0x518> +20002e86: 4785 li a5,1 +20002e88: 2317fc63 bgeu a5,a7,200030c0 <_vsnprintf+0x792> +20002e8c: 87a2 mv a5,s0 +20002e8e: fff48913 addi s2,s1,-1 +20002e92: dce2 sw s8,120(sp) +20002e94: 9946 add s2,s2,a7 +20002e96: d046 sw a7,32(sp) +20002e98: 8426 mv s0,s1 +20002e9a: 8c3e mv s8,a5 +20002e9c: 8622 mv a2,s0 +20002e9e: 86d2 mv a3,s4 +20002ea0: 0405 addi s0,s0,1 +20002ea2: 85e6 mv a1,s9 +20002ea4: 02000513 li a0,32 +20002ea8: 9d82 jalr s11 +20002eaa: ff2419e3 bne s0,s2,20002e9c <_vsnprintf+0x56e> +20002eae: 5882 lw a7,32(sp) +20002eb0: 000d4503 lbu a0,0(s10) +20002eb4: 87e2 mv a5,s8 +20002eb6: 8c22 mv s8,s0 +20002eb8: 8662 mv a2,s8 +20002eba: 86d2 mv a3,s4 +20002ebc: 85e6 mv a1,s9 +20002ebe: 843e mv s0,a5 +20002ec0: 94c6 add s1,s1,a7 +20002ec2: 9d82 jalr s11 +20002ec4: 5c66 lw s8,120(sp) +20002ec6: 4d72 lw s10,28(sp) +20002ec8: 494a lw s2,144(sp) +20002eca: bc65 j 20002982 <_vsnprintf+0x54> +20002ecc: 8a89 andi a3,a3,2 +20002ece: 48068563 beqz a3,20003358 <_vsnprintf+0xa2a> +20002ed2: 8c26 mv s8,s1 +20002ed4: f7177ae3 bgeu a4,a7,20002e48 <_vsnprintf+0x51a> +20002ed8: 98a6 add a7,a7,s1 +20002eda: 40e884b3 sub s1,a7,a4 +20002ede: 8662 mv a2,s8 +20002ee0: 86d2 mv a3,s4 +20002ee2: 0c05 addi s8,s8,1 +20002ee4: 85e6 mv a1,s9 +20002ee6: 02000513 li a0,32 +20002eea: 9d82 jalr s11 +20002eec: fe9c19e3 bne s8,s1,20002ede <_vsnprintf+0x5b0> +20002ef0: bfa1 j 20002e48 <_vsnprintf+0x51a> +20002ef2: 4006f613 andi a2,a3,1024 +20002ef6: fef6fe13 andi t3,a3,-17 +20002efa: e655 bnez a2,20002fa6 <_vsnprintf+0x678> +20002efc: 200e7513 andi a0,t3,512 +20002f00: e945 bnez a0,20002fb0 <_vsnprintf+0x682> +20002f02: c94a sw s2,144(sp) +20002f04: 100e7793 andi a5,t3,256 +20002f08: 004d0913 addi s2,s10,4 +20002f0c: 2a079b63 bnez a5,200031c2 <_vsnprintf+0x894> +20002f10: 040e7713 andi a4,t3,64 +20002f14: 16071563 bnez a4,2000307e <_vsnprintf+0x750> +20002f18: 080e7713 andi a4,t3,128 +20002f1c: 40070563 beqz a4,20003326 <_vsnprintf+0x9f8> +20002f20: 000d1703 lh a4,0(s10) +20002f24: 40f75693 srai a3,a4,0xf +20002f28: 00d745b3 xor a1,a4,a3 +20002f2c: 8d95 sub a1,a1,a3 +20002f2e: 0805c5b3 zext.h a1,a1 +20002f32: 01f75693 srli a3,a4,0x1f +20002f36: 28070263 beqz a4,200031ba <_vsnprintf+0x88c> +20002f3a: 862e mv a2,a1 +20002f3c: ccccdeb7 lui t4,0xccccd +20002f40: ccde8e93 addi t4,t4,-819 # cccccccd <__StackTop+0xacc4accd> +20002f44: 0098 addi a4,sp,64 +20002f46: 4f25 li t5,9 +20002f48: 02000f93 li t6,32 +20002f4c: a019 j 20002f52 <_vsnprintf+0x624> +20002f4e: 03f78463 beq a5,t6,20002f76 <_vsnprintf+0x648> +20002f52: 03d635b3 mulhu a1,a2,t4 +20002f56: 0785 addi a5,a5,1 +20002f58: 8332 mv t1,a2 +20002f5a: 00f702b3 add t0,a4,a5 +20002f5e: 818d srli a1,a1,0x3 +20002f60: 20b5c533 sh2add a0,a1,a1 +20002f64: 0506 slli a0,a0,0x1 +20002f66: 8e09 sub a2,a2,a0 +20002f68: 03060613 addi a2,a2,48 +20002f6c: fec28fa3 sb a2,-1(t0) +20002f70: 862e mv a2,a1 +20002f72: fc6f6ee3 bltu t5,t1,20002f4e <_vsnprintf+0x620> +20002f76: c246 sw a7,4(sp) +20002f78: c042 sw a6,0(sp) +20002f7a: c472 sw t3,8(sp) +20002f7c: 8836 mv a6,a3 +20002f7e: 8626 mv a2,s1 +20002f80: 48a9 li a7,10 +20002f82: 86d2 mv a3,s4 +20002f84: 85e6 mv a1,s9 +20002f86: 856e mv a0,s11 +20002f88: c33fe0ef jal 20001bba <_ntoa_format> +20002f8c: 8d4a mv s10,s2 +20002f8e: 84aa mv s1,a0 +20002f90: 494a lw s2,144(sp) +20002f92: bac5 j 20002982 <_vsnprintf+0x54> +20002f94: 06900793 li a5,105 +20002f98: fef6fe13 andi t3,a3,-17 +20002f9c: 3af51663 bne a0,a5,20003348 <_vsnprintf+0xa1a> +20002fa0: 4006f613 andi a2,a3,1024 +20002fa4: de21 beqz a2,20002efc <_vsnprintf+0x5ce> +20002fa6: fee6fe13 andi t3,a3,-18 +20002faa: 40000613 li a2,1024 +20002fae: b7b9 j 20002efc <_vsnprintf+0x5ce> +20002fb0: 0d1d addi s10,s10,7 +20002fb2: ff8d7d13 andi s10,s10,-8 +20002fb6: 004d2683 lw a3,4(s10) +20002fba: 000d2583 lw a1,0(s10) +20002fbe: 0d21 addi s10,s10,8 +20002fc0: 01f6df13 srli t5,a3,0x1f +20002fc4: 00d5e7b3 or a5,a1,a3 +20002fc8: c3f9 beqz a5,2000308e <_vsnprintf+0x760> +20002fca: 41f6d793 srai a5,a3,0x1f +20002fce: 8dbd xor a1,a1,a5 +20002fd0: 40f58733 sub a4,a1,a5 +20002fd4: 8ebd xor a3,a3,a5 +20002fd6: 40f687b3 sub a5,a3,a5 +20002fda: 00e5b6b3 sltu a3,a1,a4 +20002fde: c94a sw s2,144(sp) +20002fe0: dce2 sw s8,120(sp) +20002fe2: 40d786b3 sub a3,a5,a3 +20002fe6: 85ba mv a1,a4 +20002fe8: ccccd537 lui a0,0xccccd +20002fec: 8eaa mv t4,a0 +20002fee: ccce8e93 addi t4,t4,-820 +20002ff2: ccd50513 addi a0,a0,-819 # cccccccd <__StackTop+0xacc4accd> +20002ff6: 4781 li a5,0 +20002ff8: 0098 addi a4,sp,64 +20002ffa: 02000f93 li t6,32 +20002ffe: 8936 mv s2,a3 +20003000: 01258633 add a2,a1,s2 +20003004: 00b636b3 sltu a3,a2,a1 +20003008: 9636 add a2,a2,a3 +2000300a: 02a636b3 mulhu a3,a2,a0 +2000300e: 834a mv t1,s2 +20003010: 0785 addi a5,a5,1 +20003012: 00f702b3 add t0,a4,a5 +20003016: 83ae mv t2,a1 +20003018: 0026dc13 srli s8,a3,0x2 +2000301c: 9af1 andi a3,a3,-4 +2000301e: 96e2 add a3,a3,s8 +20003020: 8e15 sub a2,a2,a3 +20003022: 40c58633 sub a2,a1,a2 +20003026: 00c5b6b3 sltu a3,a1,a2 +2000302a: 40d906b3 sub a3,s2,a3 +2000302e: 03d60c33 mul s8,a2,t4 +20003032: 02a686b3 mul a3,a3,a0 +20003036: 02a63933 mulhu s2,a2,a0 +2000303a: 96e2 add a3,a3,s8 +2000303c: 02a60633 mul a2,a2,a0 +20003040: 96ca add a3,a3,s2 +20003042: 01f69c13 slli s8,a3,0x1f +20003046: 0016d913 srli s2,a3,0x1 +2000304a: 8205 srli a2,a2,0x1 +2000304c: 00cc6633 or a2,s8,a2 +20003050: 20c646b3 sh2add a3,a2,a2 +20003054: 0686 slli a3,a3,0x1 +20003056: 40d586b3 sub a3,a1,a3 +2000305a: 03068693 addi a3,a3,48 +2000305e: fed28fa3 sb a3,-1(t0) +20003062: 85b2 mv a1,a2 +20003064: 02030f63 beqz t1,200030a2 <_vsnprintf+0x774> +20003068: f9f79ce3 bne a5,t6,20003000 <_vsnprintf+0x6d2> +2000306c: 494a lw s2,144(sp) +2000306e: 5c66 lw s8,120(sp) +20003070: c246 sw a7,4(sp) +20003072: c042 sw a6,0(sp) +20003074: c472 sw t3,8(sp) +20003076: 887a mv a6,t5 +20003078: 8626 mv a2,s1 +2000307a: 48a9 li a7,10 +2000307c: b4c5 j 20002b5c <_vsnprintf+0x22e> +2000307e: 000d4703 lbu a4,0(s10) +20003082: 85ba mv a1,a4 +20003084: b57d j 20002f32 <_vsnprintf+0x604> +20003086: 4641 li a2,16 +20003088: 8332 mv t1,a2 +2000308a: 4e81 li t4,0 +2000308c: b9fd j 20002d8a <_vsnprintf+0x45c> +2000308e: 2a061a63 bnez a2,20003342 <_vsnprintf+0xa14> +20003092: c94a sw s2,144(sp) +20003094: dce2 sw s8,120(sp) +20003096: 4581 li a1,0 +20003098: 4681 li a3,0 +2000309a: b7b9 j 20002fe8 <_vsnprintf+0x6ba> +2000309c: 000d4603 lbu a2,0(s10) +200030a0: b305 j 20002dc0 <_vsnprintf+0x492> +200030a2: 46a5 li a3,9 +200030a4: fc76e2e3 bltu a3,t2,20003068 <_vsnprintf+0x73a> +200030a8: b7d1 j 2000306c <_vsnprintf+0x73e> +200030aa: 4006f713 andi a4,a3,1024 +200030ae: e0070fe3 beqz a4,20002ecc <_vsnprintf+0x59e> +200030b2: 0026f713 andi a4,a3,2 +200030b6: 28070f63 beqz a4,20003354 <_vsnprintf+0xa26> +200030ba: 4701 li a4,0 +200030bc: 8c26 mv s8,s1 +200030be: bd19 j 20002ed4 <_vsnprintf+0x5a6> +200030c0: 000d4503 lbu a0,0(s10) +200030c4: 8626 mv a2,s1 +200030c6: 86d2 mv a3,s4 +200030c8: 85e6 mv a1,s9 +200030ca: 9d82 jalr s11 +200030cc: 84ca mv s1,s2 +200030ce: b10d j 20002cf0 <_vsnprintf+0x3c2> +200030d0: 0d1d addi s10,s10,7 +200030d2: ff8d7d13 andi s10,s10,-8 +200030d6: 000d2f03 lw t5,0(s10) +200030da: 004d2903 lw s2,4(s10) +200030de: dce2 sw s8,120(sp) +200030e0: 0d21 addi s10,s10,8 +200030e2: 012f67b3 or a5,t5,s2 +200030e6: 12079e63 bnez a5,20003222 <_vsnprintf+0x8f4> +200030ea: fefe7e13 andi t3,t3,-17 +200030ee: 12050a63 beqz a0,20003222 <_vsnprintf+0x8f4> +200030f2: 4c01 li s8,0 +200030f4: 0098 addi a4,sp,64 +200030f6: c246 sw a7,4(sp) +200030f8: c042 sw a6,0(sp) +200030fa: 87e2 mv a5,s8 +200030fc: 8626 mv a2,s1 +200030fe: c472 sw t3,8(sp) +20003100: 889a mv a7,t1 +20003102: 4801 li a6,0 +20003104: 86d2 mv a3,s4 +20003106: 85e6 mv a1,s9 +20003108: 856e mv a0,s11 +2000310a: ab1fe0ef jal 20001bba <_ntoa_format> +2000310e: 84aa mv s1,a0 +20003110: 494a lw s2,144(sp) +20003112: 5c66 lw s8,120(sp) +20003114: b0bd j 20002982 <_vsnprintf+0x54> +20003116: 485e5693 bexti a3,t3,0x5 +2000311a: 06100713 li a4,97 +2000311e: c299 beqz a3,20003124 <_vsnprintf+0x7f6> +20003120: 04100713 li a4,65 +20003124: ff670f13 addi t5,a4,-10 +20003128: 4525 li a0,9 +2000312a: 0098 addi a4,sp,64 +2000312c: 02000e93 li t4,32 +20003130: a00d j 20003152 <_vsnprintf+0x824> +20003132: 03068693 addi a3,a3,48 +20003136: 0ff6f693 zext.b a3,a3 +2000313a: 0785 addi a5,a5,1 +2000313c: 00f705b3 add a1,a4,a5 +20003140: fed58fa3 sb a3,-1(a1) +20003144: 026656b3 divu a3,a2,t1 +20003148: c86664e3 bltu a2,t1,20002dd0 <_vsnprintf+0x4a2> +2000314c: c9d782e3 beq a5,t4,20002dd0 <_vsnprintf+0x4a2> +20003150: 8636 mv a2,a3 +20003152: 026675b3 remu a1,a2,t1 +20003156: 0ff5f693 zext.b a3,a1 +2000315a: fcb57ce3 bgeu a0,a1,20003132 <_vsnprintf+0x804> +2000315e: 96fa add a3,a3,t5 +20003160: 0ff6f693 zext.b a3,a3 +20003164: bfd9 j 2000313a <_vsnprintf+0x80c> +20003166: 1f177e63 bgeu a4,a7,20003362 <_vsnprintf+0xa34> +2000316a: 00988d33 add s10,a7,s1 +2000316e: 87a2 mv a5,s0 +20003170: 40ed0d33 sub s10,s10,a4 +20003174: 8426 mv s0,s1 +20003176: 8c36 mv s8,a3 +20003178: d046 sw a7,32(sp) +2000317a: d242 sw a6,36(sp) +2000317c: 84be mv s1,a5 +2000317e: 8622 mv a2,s0 +20003180: 86d2 mv a3,s4 +20003182: 0405 addi s0,s0,1 +20003184: 85e6 mv a1,s9 +20003186: 02000513 li a0,32 +2000318a: 9d82 jalr s11 +2000318c: ffa419e3 bne s0,s10,2000317e <_vsnprintf+0x850> +20003190: 5882 lw a7,32(sp) +20003192: 00094503 lbu a0,0(s2) +20003196: 87a6 mv a5,s1 +20003198: 5812 lw a6,36(sp) +2000319a: 84a2 mv s1,s0 +2000319c: 86e2 mv a3,s8 +2000319e: 843e mv s0,a5 +200031a0: 00188713 addi a4,a7,1 +200031a4: ca0502e3 beqz a0,20002e48 <_vsnprintf+0x51a> +200031a8: c60c07e3 beqz s8,20002e16 <_vsnprintf+0x4e8> +200031ac: 4681 li a3,0 +200031ae: bc19 j 20002bc4 <_vsnprintf+0x296> +200031b0: 1b177763 bgeu a4,a7,2000335e <_vsnprintf+0xa30> +200031b4: 40000693 li a3,1024 +200031b8: bf4d j 2000316a <_vsnprintf+0x83c> +200031ba: 0098 addi a4,sp,64 +200031bc: da061de3 bnez a2,20002f76 <_vsnprintf+0x648> +200031c0: bbb5 j 20002f3c <_vsnprintf+0x60e> +200031c2: 000d2783 lw a5,0(s10) +200031c6: 01f7d693 srli a3,a5,0x1f +200031ca: 16078563 beqz a5,20003334 <_vsnprintf+0xa06> +200031ce: 40f00633 neg a2,a5 +200031d2: 0ac7e633 max a2,a5,a2 +200031d6: ccccdeb7 lui t4,0xccccd +200031da: ccde8e93 addi t4,t4,-819 # cccccccd <__StackTop+0xacc4accd> +200031de: 0098 addi a4,sp,64 +200031e0: 4f25 li t5,9 +200031e2: 02000f93 li t6,32 +200031e6: a019 j 200031ec <_vsnprintf+0x8be> +200031e8: 03f50563 beq a0,t6,20003212 <_vsnprintf+0x8e4> +200031ec: 03d635b3 mulhu a1,a2,t4 +200031f0: 0505 addi a0,a0,1 +200031f2: 00a702b3 add t0,a4,a0 +200031f6: 8332 mv t1,a2 +200031f8: 818d srli a1,a1,0x3 +200031fa: 20b5c7b3 sh2add a5,a1,a1 +200031fe: 0786 slli a5,a5,0x1 +20003200: 40f607b3 sub a5,a2,a5 +20003204: 03078793 addi a5,a5,48 +20003208: fef28fa3 sb a5,-1(t0) +2000320c: 862e mv a2,a1 +2000320e: fc6f6de3 bltu t5,t1,200031e8 <_vsnprintf+0x8ba> +20003212: c246 sw a7,4(sp) +20003214: c042 sw a6,0(sp) +20003216: c472 sw t3,8(sp) +20003218: 8836 mv a6,a3 +2000321a: 87aa mv a5,a0 +2000321c: 8626 mv a2,s1 +2000321e: 48a9 li a7,10 +20003220: b38d j 20002f82 <_vsnprintf+0x654> +20003222: 485e5713 bexti a4,t3,0x5 +20003226: 06100793 li a5,97 +2000322a: c319 beqz a4,20003230 <_vsnprintf+0x902> +2000322c: 04100793 li a5,65 +20003230: 17d9 addi a5,a5,-10 +20003232: 0098 addi a4,sp,64 +20003234: d426 sw s1,40(sp) +20003236: d86e sw s11,48(sp) +20003238: da66 sw s9,52(sp) +2000323a: dc52 sw s4,56(sp) +2000323c: de22 sw s0,60(sp) +2000323e: 4c01 li s8,0 +20003240: ce72 sw t3,28(sp) +20003242: d046 sw a7,32(sp) +20003244: d242 sw a6,36(sp) +20003246: d61a sw t1,44(sp) +20003248: 84fa mv s1,t5 +2000324a: 8a32 mv s4,a2 +2000324c: 8cf6 mv s9,t4 +2000324e: 8dba mv s11,a4 +20003250: 843e mv s0,a5 +20003252: a805 j 20003282 <_vsnprintf+0x954> +20003254: 03050793 addi a5,a0,48 +20003258: 0ff7f793 zext.b a5,a5 +2000325c: 0c05 addi s8,s8,1 +2000325e: 018d86b3 add a3,s11,s8 +20003262: fef68fa3 sb a5,-1(a3) +20003266: 8652 mv a2,s4 +20003268: 4681 li a3,0 +2000326a: 8526 mv a0,s1 +2000326c: 85ca mv a1,s2 +2000326e: 5b5000ef jal 20004022 <__udivdi3> +20003272: 092c8d63 beq s9,s2,2000330c <_vsnprintf+0x9de> +20003276: 02000793 li a5,32 +2000327a: 08fc0b63 beq s8,a5,20003310 <_vsnprintf+0x9e2> +2000327e: 84aa mv s1,a0 +20003280: 892e mv s2,a1 +20003282: 8652 mv a2,s4 +20003284: 4681 li a3,0 +20003286: 8526 mv a0,s1 +20003288: 85ca mv a1,s2 +2000328a: 120010ef jal 200043aa <__umoddi3> +2000328e: 0ff57513 zext.b a0,a0 +20003292: 47a5 li a5,9 +20003294: fca7f0e3 bgeu a5,a0,20003254 <_vsnprintf+0x926> +20003298: 008507b3 add a5,a0,s0 +2000329c: 0ff7f793 zext.b a5,a5 +200032a0: bf75 j 2000325c <_vsnprintf+0x92e> +200032a2: 000d2783 lw a5,0(s10) +200032a6: e789 bnez a5,200032b0 <_vsnprintf+0x982> +200032a8: fefe7e13 andi t3,t3,-17 +200032ac: 0098 addi a4,sp,64 +200032ae: e929 bnez a0,20003300 <_vsnprintf+0x9d2> +200032b0: 485e5693 bexti a3,t3,0x5 +200032b4: 06100713 li a4,97 +200032b8: c299 beqz a3,200032be <_vsnprintf+0x990> +200032ba: 04100713 li a4,65 +200032be: ff670f13 addi t5,a4,-10 +200032c2: 4ea5 li t4,9 +200032c4: 0098 addi a4,sp,64 +200032c6: 02000513 li a0,32 +200032ca: a00d j 200032ec <_vsnprintf+0x9be> +200032cc: 03068693 addi a3,a3,48 +200032d0: 0ff6f693 zext.b a3,a3 +200032d4: 0585 addi a1,a1,1 +200032d6: 00b70633 add a2,a4,a1 +200032da: fed60fa3 sb a3,-1(a2) +200032de: 0267d6b3 divu a3,a5,t1 +200032e2: 0067ef63 bltu a5,t1,20003300 <_vsnprintf+0x9d2> +200032e6: 00a58d63 beq a1,a0,20003300 <_vsnprintf+0x9d2> +200032ea: 87b6 mv a5,a3 +200032ec: 0267f633 remu a2,a5,t1 +200032f0: 0ff67693 zext.b a3,a2 +200032f4: fccefce3 bgeu t4,a2,200032cc <_vsnprintf+0x99e> +200032f8: 96fa add a3,a3,t5 +200032fa: 0ff6f693 zext.b a3,a3 +200032fe: bfd9 j 200032d4 <_vsnprintf+0x9a6> +20003300: c246 sw a7,4(sp) +20003302: c472 sw t3,8(sp) +20003304: c042 sw a6,0(sp) +20003306: 889a mv a7,t1 +20003308: 87ae mv a5,a1 +2000330a: b4f9 j 20002dd8 <_vsnprintf+0x4aa> +2000330c: f744f5e3 bgeu s1,s4,20003276 <_vsnprintf+0x948> +20003310: 876e mv a4,s11 +20003312: 4e72 lw t3,28(sp) +20003314: 5882 lw a7,32(sp) +20003316: 5812 lw a6,36(sp) +20003318: 54a2 lw s1,40(sp) +2000331a: 5332 lw t1,44(sp) +2000331c: 5cd2 lw s9,52(sp) +2000331e: 5a62 lw s4,56(sp) +20003320: 5472 lw s0,60(sp) +20003322: 5dc2 lw s11,48(sp) +20003324: bbc9 j 200030f6 <_vsnprintf+0x7c8> +20003326: 000d2703 lw a4,0(s10) +2000332a: 40e005b3 neg a1,a4 +2000332e: 0ab765b3 max a1,a4,a1 +20003332: b101 j 20002f32 <_vsnprintf+0x604> +20003334: 0098 addi a4,sp,64 +20003336: ec061ee3 bnez a2,20003212 <_vsnprintf+0x8e4> +2000333a: bd71 j 200031d6 <_vsnprintf+0x8a8> +2000333c: 000d2603 lw a2,0(s10) +20003340: b441 j 20002dc0 <_vsnprintf+0x492> +20003342: 4781 li a5,0 +20003344: 0098 addi a4,sp,64 +20003346: b32d j 20003070 <_vsnprintf+0x742> +20003348: 4629 li a2,10 +2000334a: c94a sw s2,144(sp) +2000334c: 86f2 mv a3,t3 +2000334e: 8332 mv t1,a2 +20003350: 4e81 li t4,0 +20003352: bc25 j 20002d8a <_vsnprintf+0x45c> +20003354: 40000693 li a3,1024 +20003358: e00899e3 bnez a7,2000316a <_vsnprintf+0x83c> +2000335c: b4f5 j 20002e48 <_vsnprintf+0x51a> +2000335e: 0705 addi a4,a4,1 +20003360: b095 j 20002bc4 <_vsnprintf+0x296> +20003362: 0705 addi a4,a4,1 +20003364: bc4d j 20002e16 <_vsnprintf+0x4e8> + +20003366 : +20003366: 1101 addi sp,sp,-32 +20003368: 200028b7 lui a7,0x20002 +2000336c: 882a mv a6,a0 +2000336e: 87ae mv a5,a1 +20003370: 8736 mv a4,a3 +20003372: 002c addi a1,sp,8 +20003374: 86b2 mv a3,a2 +20003376: de088513 addi a0,a7,-544 # 20001de0 <_out_fct> +2000337a: 567d li a2,-1 +2000337c: ce06 sw ra,28(sp) +2000337e: c442 sw a6,8(sp) +20003380: c63e sw a5,12(sp) +20003382: dacff0ef jal 2000292e <_vsnprintf> +20003386: 40f2 lw ra,28(sp) +20003388: 6105 addi sp,sp,32 +2000338a: 8082 ret + +2000338c : +2000338c: 8101a783 lw a5,-2032(gp) # 20007114 +20003390: 1101 addi sp,sp,-32 +20003392: ce06 sw ra,28(sp) +20003394: cf91 beqz a5,200033b0 +20003396: 86aa mv a3,a0 +20003398: 20002537 lui a0,0x20002 +2000339c: 872e mv a4,a1 +2000339e: dd850513 addi a0,a0,-552 # 20001dd8 <_out_char> +200033a2: 006c addi a1,sp,12 +200033a4: 567d li a2,-1 +200033a6: 9782 jalr a5 +200033a8: 40f2 lw ra,28(sp) +200033aa: 4505 li a0,1 +200033ac: 6105 addi sp,sp,32 +200033ae: 8082 ret +200033b0: 2e61 jal 20003748 <__wrap_puts> +200033b2: 40f2 lw ra,28(sp) +200033b4: 4501 li a0,0 +200033b6: 6105 addi sp,sp,32 +200033b8: 8082 ret + +200033ba : +200033ba: 450d li a0,3 +200033bc: be251073 csrw 0xbe2,a0 +200033c0: 157d addi a0,a0,-1 +200033c2: fe055de3 bgez a0,200033bc +200033c6: 6505 lui a0,0x1 +200033c8: 80050513 addi a0,a0,-2048 # 800 +200033cc: 30451073 csrw mie,a0 +200033d0: 30046073 csrsi mstatus,8 +200033d4: 34001073 csrw mscratch,zero +200033d8: 8082 ret + +200033da <_exit>: +200033da: 9002 ebreak +200033dc: bffd j 200033da <_exit> + +200033de : +200033de: 1141 addi sp,sp,-16 +200033e0: c606 sw ra,12(sp) +200033e2: 3fe5 jal 200033da <_exit> + +200033e4 : +200033e4: 1141 addi sp,sp,-16 +200033e6: c422 sw s0,8(sp) +200033e8: c226 sw s1,4(sp) +200033ea: c606 sw ra,12(sp) +200033ec: 20007437 lui s0,0x20007 +200033f0: d76fe0ef jal 20001966 +200033f4: 200074b7 lui s1,0x20007 +200033f8: f1040793 addi a5,s0,-240 # 20006f10 +200033fc: f1048493 addi s1,s1,-240 # 20006f10 +20003400: 0097f963 bgeu a5,s1,20003412 +20003404: f1040413 addi s0,s0,-240 +20003408: 401c lw a5,0(s0) +2000340a: 0411 addi s0,s0,4 +2000340c: 9782 jalr a5 +2000340e: fe946de3 bltu s0,s1,20003408 +20003412: 40b2 lw ra,12(sp) +20003414: 4422 lw s0,8(sp) +20003416: 4492 lw s1,4(sp) +20003418: 0141 addi sp,sp,16 +2000341a: 8082 ret + +2000341c : +2000341c: 411c lw a5,0(a0) +2000341e: 852e mv a0,a1 +20003420: 85b2 mv a1,a2 +20003422: 8782 jr a5 + +20003424 : +20003424: 01554783 lbu a5,21(a0) +20003428: 1101 addi sp,sp,-32 +2000342a: ca26 sw s1,20(sp) +2000342c: c64e sw s3,12(sp) +2000342e: c452 sw s4,8(sp) +20003430: ce06 sw ra,28(sp) +20003432: 89aa mv s3,a0 +20003434: 8a2e mv s4,a1 +20003436: 84b2 mv s1,a2 +20003438: c7e9 beqz a5,20003502 +2000343a: 04c05863 blez a2,2000348a +2000343e: 0005c703 lbu a4,0(a1) +20003442: 47a9 li a5,10 +20003444: 06f70963 beq a4,a5,200034b6 +20003448: 4705 li a4,1 +2000344a: 4781 li a5,0 +2000344c: 04e48563 beq s1,a4,20003496 +20003450: cc22 sw s0,24(sp) +20003452: c84a sw s2,16(sp) +20003454: c256 sw s5,4(sp) +20003456: 001a0913 addi s2,s4,1 +2000345a: 4405 li s0,1 +2000345c: 4aa9 li s5,10 +2000345e: 00094703 lbu a4,0(s2) +20003462: 86a2 mv a3,s0 +20003464: 0405 addi s0,s0,1 +20003466: 07570663 beq a4,s5,200034d2 +2000346a: 0905 addi s2,s2,1 +2000346c: fe8499e3 bne s1,s0,2000345e +20003470: 4462 lw s0,24(sp) +20003472: 4942 lw s2,16(sp) +20003474: 4a92 lw s5,4(sp) +20003476: 0297c063 blt a5,s1,20003496 +2000347a: 9a26 add s4,s4,s1 +2000347c: fffa4783 lbu a5,-1(s4) +20003480: 17cd addi a5,a5,-13 +20003482: 0017b793 seqz a5,a5 +20003486: 00f98a23 sb a5,20(s3) +2000348a: 40f2 lw ra,28(sp) +2000348c: 44d2 lw s1,20(sp) +2000348e: 49b2 lw s3,12(sp) +20003490: 4a22 lw s4,8(sp) +20003492: 6105 addi sp,sp,32 +20003494: 8082 ret +20003496: 0009a703 lw a4,0(s3) +2000349a: 00fa0533 add a0,s4,a5 +2000349e: 40f485b3 sub a1,s1,a5 +200034a2: 9702 jalr a4 +200034a4: 9a26 add s4,s4,s1 +200034a6: fffa4783 lbu a5,-1(s4) +200034aa: 17cd addi a5,a5,-13 +200034ac: 0017b793 seqz a5,a5 +200034b0: 00f98a23 sb a5,20(s3) +200034b4: bfd9 j 2000348a +200034b6: 01454783 lbu a5,20(a0) +200034ba: f7d9 bnez a5,20003448 +200034bc: 411c lw a5,0(a0) +200034be: 20007537 lui a0,0x20007 +200034c2: e3050513 addi a0,a0,-464 # 20006e30 +200034c6: 4589 li a1,2 +200034c8: 9782 jalr a5 +200034ca: 4785 li a5,1 +200034cc: f8f492e3 bne s1,a5,20003450 +200034d0: b76d j 2000347a +200034d2: fff94603 lbu a2,-1(s2) +200034d6: 4735 li a4,13 +200034d8: f8e609e3 beq a2,a4,2000346a +200034dc: 40f685b3 sub a1,a3,a5 +200034e0: 00fa0533 add a0,s4,a5 +200034e4: 00d7d563 bge a5,a3,200034ee +200034e8: 0009a783 lw a5,0(s3) +200034ec: 9782 jalr a5 +200034ee: 0009a783 lw a5,0(s3) +200034f2: 20007537 lui a0,0x20007 +200034f6: e3050513 addi a0,a0,-464 # 20006e30 +200034fa: 4589 li a1,2 +200034fc: 9782 jalr a5 +200034fe: 87a2 mv a5,s0 +20003500: b7ad j 2000346a +20003502: 411c lw a5,0(a0) +20003504: 40f2 lw ra,28(sp) +20003506: 44d2 lw s1,20(sp) +20003508: 49b2 lw s3,12(sp) +2000350a: 8552 mv a0,s4 +2000350c: 4a22 lw s4,8(sp) +2000350e: 85b2 mv a1,a2 +20003510: 6105 addi sp,sp,32 +20003512: 8782 jr a5 + +20003514 : +20003514: 419c lw a5,0(a1) +20003516: 1101 addi sp,sp,-32 +20003518: ca26 sw s1,20(sp) +2000351a: c84a sw s2,16(sp) +2000351c: ce06 sw ra,28(sp) +2000351e: 08000713 li a4,128 +20003522: 84ae mv s1,a1 +20003524: 892a mv s2,a0 +20003526: 00e78d63 beq a5,a4,20003540 +2000352a: 00178713 addi a4,a5,1 +2000352e: c098 sw a4,0(s1) +20003530: 94be add s1,s1,a5 +20003532: 01248223 sb s2,4(s1) +20003536: 40f2 lw ra,28(sp) +20003538: 44d2 lw s1,20(sp) +2000353a: 4942 lw s2,16(sp) +2000353c: 6105 addi sp,sp,32 +2000353e: 8082 ret +20003540: cc22 sw s0,24(sp) +20003542: 8181a403 lw s0,-2024(gp) # 2000711c +20003546: c64e sw s3,12(sp) +20003548: c452 sw s4,8(sp) +2000354a: 00458993 addi s3,a1,4 +2000354e: e01d bnez s0,20003574 +20003550: 4705 li a4,1 +20003552: 4781 li a5,0 +20003554: 4462 lw s0,24(sp) +20003556: 49b2 lw s3,12(sp) +20003558: 4a22 lw s4,8(sp) +2000355a: c098 sw a4,0(s1) +2000355c: 94be add s1,s1,a5 +2000355e: 01248223 sb s2,4(s1) +20003562: 40f2 lw ra,28(sp) +20003564: 44d2 lw s1,20(sp) +20003566: 4942 lw s2,16(sp) +20003568: 6105 addi sp,sp,32 +2000356a: 8082 ret +2000356c: 4090 lw a2,0(s1) +2000356e: 3d5d jal 20003424 +20003570: 4800 lw s0,16(s0) +20003572: dc79 beqz s0,20003550 +20003574: 401c lw a5,0(s0) +20003576: 85ce mv a1,s3 +20003578: 8522 mv a0,s0 +2000357a: dbfd beqz a5,20003570 +2000357c: 8141a783 lw a5,-2028(gp) # 20007118 +20003580: d7f5 beqz a5,2000356c +20003582: fe8797e3 bne a5,s0,20003570 +20003586: 4090 lw a2,0(s1) +20003588: 3d71 jal 20003424 +2000358a: b7dd j 20003570 + +2000358c : +2000358c: 7139 addi sp,sp,-64 +2000358e: dc22 sw s0,56(sp) +20003590: da26 sw s1,52(sp) +20003592: d84a sw s2,48(sp) +20003594: d64e sw s3,44(sp) +20003596: de06 sw ra,60(sp) +20003598: 89b2 mv s3,a2 +2000359a: d452 sw s4,40(sp) +2000359c: d256 sw s5,36(sp) +2000359e: d05a sw s6,32(sp) +200035a0: 892a mv s2,a0 +200035a2: 84ae mv s1,a1 +200035a4: 8436 mv s0,a3 +200035a6: 820fe0ef jal 200015c6 +200035aa: 000f47b7 lui a5,0xf4 +200035ae: 24078793 addi a5,a5,576 # f4240 +200035b2: 97aa add a5,a5,a0 +200035b4: 00a7b533 sltu a0,a5,a0 +200035b8: 80000737 lui a4,0x80000 +200035bc: 00b50633 add a2,a0,a1 +200035c0: 177d addi a4,a4,-1 # 7fffffff <__StackTop+0x5ff7dfff> +200035c2: 85be mv a1,a5 +200035c4: 00c77463 bgeu a4,a2,200035cc +200035c8: 863a mv a2,a4 +200035ca: 55fd li a1,-1 +200035cc: 20007ab7 lui s5,0x20007 +200035d0: ed4a8513 addi a0,s5,-300 # 20006ed4 +200035d4: d65fc0ef jal 20000338 +200035d8: 57fd li a5,-1 +200035da: 8b2a mv s6,a0 +200035dc: 08f48f63 beq s1,a5,2000367a +200035e0: c439 beqz s0,2000362e +200035e2: 20003a37 lui s4,0x20003 +200035e6: 424a0a13 addi s4,s4,1060 # 20003424 +200035ea: 8181a403 lw s0,-2024(gp) # 2000711c +200035ee: c01d beqz s0,20003614 +200035f0: 04099463 bnez s3,20003638 +200035f4: a019 j 200035fa +200035f6: 4800 lw s0,16(s0) +200035f8: cc11 beqz s0,20003614 +200035fa: 401c lw a5,0(s0) +200035fc: 8626 mv a2,s1 +200035fe: 85ca mv a1,s2 +20003600: 8522 mv a0,s0 +20003602: dbf5 beqz a5,200035f6 +20003604: 8141a783 lw a5,-2028(gp) # 20007118 +20003608: c399 beqz a5,2000360e +2000360a: fef416e3 bne s0,a5,200035f6 +2000360e: 9a02 jalr s4 +20003610: 4800 lw s0,16(s0) +20003612: f465 bnez s0,200035fa +20003614: 040b1e63 bnez s6,20003670 +20003618: 50f2 lw ra,60(sp) +2000361a: 5462 lw s0,56(sp) +2000361c: 5942 lw s2,48(sp) +2000361e: 59b2 lw s3,44(sp) +20003620: 5a22 lw s4,40(sp) +20003622: 5a92 lw s5,36(sp) +20003624: 5b02 lw s6,32(sp) +20003626: 8526 mv a0,s1 +20003628: 54d2 lw s1,52(sp) +2000362a: 6121 addi sp,sp,64 +2000362c: 8082 ret +2000362e: 20003a37 lui s4,0x20003 +20003632: 41ca0a13 addi s4,s4,1052 # 2000341c +20003636: bf55 j 200035ea +20003638: ce5e sw s7,28(sp) +2000363a: 4ba9 li s7,10 +2000363c: a019 j 20003642 +2000363e: 4800 lw s0,16(s0) +20003640: c40d beqz s0,2000366a +20003642: 401c lw a5,0(s0) +20003644: 8626 mv a2,s1 +20003646: 85ca mv a1,s2 +20003648: 8522 mv a0,s0 +2000364a: dbf5 beqz a5,2000363e +2000364c: 8141a783 lw a5,-2028(gp) # 20007118 +20003650: c399 beqz a5,20003656 +20003652: fe8796e3 bne a5,s0,2000363e +20003656: 9a02 jalr s4 +20003658: 8522 mv a0,s0 +2000365a: 00f10593 addi a1,sp,15 +2000365e: 4605 li a2,1 +20003660: 017107a3 sb s7,15(sp) +20003664: 9a02 jalr s4 +20003666: 4800 lw s0,16(s0) +20003668: fc69 bnez s0,20003642 +2000366a: 4bf2 lw s7,28(sp) +2000366c: fa0b06e3 beqz s6,20003618 +20003670: ed4a8513 addi a0,s5,-300 +20003674: d2ffc0ef jal 200003a2 +20003678: b745 j 20003618 +2000367a: 854a mv a0,s2 +2000367c: 116030ef jal 20006792 +20003680: 84aa mv s1,a0 +20003682: bfb9 j 200035e0 + +20003684 : +20003684: 8181a783 lw a5,-2024(gp) # 2000711c +20003688: 81818713 addi a4,gp,-2024 # 2000711c +2000368c: c799 beqz a5,2000369a +2000368e: 00a78963 beq a5,a0,200036a0 +20003692: 01078713 addi a4,a5,16 +20003696: 4b9c lw a5,16(a5) +20003698: fbfd bnez a5,2000368e +2000369a: c191 beqz a1,2000369e +2000369c: c308 sw a0,0(a4) +2000369e: 8082 ret +200036a0: fdfd bnez a1,2000369e +200036a2: 4b94 lw a3,16(a5) +200036a4: c314 sw a3,0(a4) +200036a6: 0007a823 sw zero,16(a5) +200036aa: 8082 ret + +200036ac <__wrap_putchar>: +200036ac: 7179 addi sp,sp,-48 +200036ae: d226 sw s1,36(sp) +200036b0: d606 sw ra,44(sp) +200036b2: d422 sw s0,40(sp) +200036b4: ce4e sw s3,28(sp) +200036b6: cc52 sw s4,24(sp) +200036b8: 84aa mv s1,a0 +200036ba: 00a107a3 sb a0,15(sp) +200036be: f09fd0ef jal 200015c6 +200036c2: 000f47b7 lui a5,0xf4 +200036c6: 24078793 addi a5,a5,576 # f4240 +200036ca: 97aa add a5,a5,a0 +200036cc: 00a7b633 sltu a2,a5,a0 +200036d0: 80000737 lui a4,0x80000 +200036d4: 962e add a2,a2,a1 +200036d6: 177d addi a4,a4,-1 # 7fffffff <__StackTop+0x5ff7dfff> +200036d8: 85be mv a1,a5 +200036da: 00c77463 bgeu a4,a2,200036e2 <__wrap_putchar+0x36> +200036de: 863a mv a2,a4 +200036e0: 55fd li a1,-1 +200036e2: 20007a37 lui s4,0x20007 +200036e6: ed4a0513 addi a0,s4,-300 # 20006ed4 +200036ea: c4ffc0ef jal 20000338 +200036ee: 8181a403 lw s0,-2024(gp) # 2000711c +200036f2: 89aa mv s3,a0 +200036f4: c405 beqz s0,2000371c <__wrap_putchar+0x70> +200036f6: d04a sw s2,32(sp) +200036f8: a019 j 200036fe <__wrap_putchar+0x52> +200036fa: 4800 lw s0,16(s0) +200036fc: cc19 beqz s0,2000371a <__wrap_putchar+0x6e> +200036fe: 401c lw a5,0(s0) +20003700: 4605 li a2,1 +20003702: 00f10593 addi a1,sp,15 +20003706: 8522 mv a0,s0 +20003708: dbed beqz a5,200036fa <__wrap_putchar+0x4e> +2000370a: 8141a783 lw a5,-2028(gp) # 20007118 +2000370e: c399 beqz a5,20003714 <__wrap_putchar+0x68> +20003710: fef415e3 bne s0,a5,200036fa <__wrap_putchar+0x4e> +20003714: 3b01 jal 20003424 +20003716: 4800 lw s0,16(s0) +20003718: f07d bnez s0,200036fe <__wrap_putchar+0x52> +2000371a: 5902 lw s2,32(sp) +2000371c: 00099a63 bnez s3,20003730 <__wrap_putchar+0x84> +20003720: 50b2 lw ra,44(sp) +20003722: 5422 lw s0,40(sp) +20003724: 49f2 lw s3,28(sp) +20003726: 4a62 lw s4,24(sp) +20003728: 8526 mv a0,s1 +2000372a: 5492 lw s1,36(sp) +2000372c: 6145 addi sp,sp,48 +2000372e: 8082 ret +20003730: ed4a0513 addi a0,s4,-300 +20003734: c6ffc0ef jal 200003a2 +20003738: 50b2 lw ra,44(sp) +2000373a: 5422 lw s0,40(sp) +2000373c: 49f2 lw s3,28(sp) +2000373e: 4a62 lw s4,24(sp) +20003740: 8526 mv a0,s1 +20003742: 5492 lw s1,36(sp) +20003744: 6145 addi sp,sp,48 +20003746: 8082 ret + +20003748 <__wrap_puts>: +20003748: 1141 addi sp,sp,-16 +2000374a: c606 sw ra,12(sp) +2000374c: c422 sw s0,8(sp) +2000374e: c226 sw s1,4(sp) +20003750: 842a mv s0,a0 +20003752: 040030ef jal 20006792 +20003756: 84aa mv s1,a0 +20003758: 4685 li a3,1 +2000375a: 8522 mv a0,s0 +2000375c: 85a6 mv a1,s1 +2000375e: 8636 mv a2,a3 +20003760: 3535 jal 2000358c +20003762: 8181a403 lw s0,-2024(gp) # 2000711c +20003766: c411 beqz s0,20003772 <__wrap_puts+0x2a> +20003768: 405c lw a5,4(s0) +2000376a: cb91 beqz a5,2000377e <__wrap_puts+0x36> +2000376c: 9782 jalr a5 +2000376e: 4800 lw s0,16(s0) +20003770: fc65 bnez s0,20003768 <__wrap_puts+0x20> +20003772: 40b2 lw ra,12(sp) +20003774: 4422 lw s0,8(sp) +20003776: 8526 mv a0,s1 +20003778: 4492 lw s1,4(sp) +2000377a: 0141 addi sp,sp,16 +2000377c: 8082 ret +2000377e: 4800 lw s0,16(s0) +20003780: f465 bnez s0,20003768 <__wrap_puts+0x20> +20003782: 40b2 lw ra,12(sp) +20003784: 4422 lw s0,8(sp) +20003786: 8526 mv a0,s1 +20003788: 4492 lw s1,4(sp) +2000378a: 0141 addi sp,sp,16 +2000378c: 8082 ret + +2000378e <__wrap_vprintf>: +2000378e: 7171 addi sp,sp,-176 +20003790: d522 sw s0,168(sp) +20003792: d326 sw s1,164(sp) +20003794: d706 sw ra,172(sp) +20003796: d14a sw s2,160(sp) +20003798: cf4e sw s3,156(sp) +2000379a: cb56 sw s5,148(sp) +2000379c: 842a mv s0,a0 +2000379e: 84ae mv s1,a1 +200037a0: e27fd0ef jal 200015c6 +200037a4: 000f47b7 lui a5,0xf4 +200037a8: 24078793 addi a5,a5,576 # f4240 +200037ac: 97aa add a5,a5,a0 +200037ae: 00a7b633 sltu a2,a5,a0 +200037b2: 80000737 lui a4,0x80000 +200037b6: 962e add a2,a2,a1 +200037b8: 177d addi a4,a4,-1 # 7fffffff <__StackTop+0x5ff7dfff> +200037ba: 85be mv a1,a5 +200037bc: 00c77463 bgeu a4,a2,200037c4 <__wrap_vprintf+0x36> +200037c0: 863a mv a2,a4 +200037c2: 55fd li a1,-1 +200037c4: 200079b7 lui s3,0x20007 +200037c8: ed498513 addi a0,s3,-300 # 20006ed4 +200037cc: b6dfc0ef jal 20000338 +200037d0: 892a mv s2,a0 +200037d2: 20003537 lui a0,0x20003 +200037d6: 86a6 mv a3,s1 +200037d8: 8622 mv a2,s0 +200037da: 006c addi a1,sp,12 +200037dc: 51450513 addi a0,a0,1300 # 20003514 +200037e0: c602 sw zero,12(sp) +200037e2: 3651 jal 20003366 +200037e4: 47b2 lw a5,12(sp) +200037e6: 8181a403 lw s0,-2024(gp) # 2000711c +200037ea: 84aa mv s1,a0 +200037ec: c3b9 beqz a5,20003832 <__wrap_vprintf+0xa4> +200037ee: cd52 sw s4,152(sp) +200037f0: e015 bnez s0,20003814 <__wrap_vprintf+0x86> +200037f2: 4a6a lw s4,152(sp) +200037f4: c602 sw zero,12(sp) +200037f6: 04091863 bnez s2,20003846 <__wrap_vprintf+0xb8> +200037fa: 50ba lw ra,172(sp) +200037fc: 542a lw s0,168(sp) +200037fe: 590a lw s2,160(sp) +20003800: 49fa lw s3,156(sp) +20003802: 4ada lw s5,148(sp) +20003804: 8526 mv a0,s1 +20003806: 549a lw s1,164(sp) +20003808: 614d addi sp,sp,176 +2000380a: 8082 ret +2000380c: 4632 lw a2,12(sp) +2000380e: 3919 jal 20003424 +20003810: 4800 lw s0,16(s0) +20003812: cc01 beqz s0,2000382a <__wrap_vprintf+0x9c> +20003814: 401c lw a5,0(s0) +20003816: 080c addi a1,sp,16 +20003818: 8522 mv a0,s0 +2000381a: dbfd beqz a5,20003810 <__wrap_vprintf+0x82> +2000381c: 8141a783 lw a5,-2028(gp) # 20007118 +20003820: d7f5 beqz a5,2000380c <__wrap_vprintf+0x7e> +20003822: fe8785e3 beq a5,s0,2000380c <__wrap_vprintf+0x7e> +20003826: 4800 lw s0,16(s0) +20003828: f475 bnez s0,20003814 <__wrap_vprintf+0x86> +2000382a: 8181a403 lw s0,-2024(gp) # 2000711c +2000382e: 4a6a lw s4,152(sp) +20003830: c602 sw zero,12(sp) +20003832: d071 beqz s0,200037f6 <__wrap_vprintf+0x68> +20003834: 405c lw a5,4(s0) +20003836: c791 beqz a5,20003842 <__wrap_vprintf+0xb4> +20003838: 9782 jalr a5 +2000383a: 4800 lw s0,16(s0) +2000383c: dc4d beqz s0,200037f6 <__wrap_vprintf+0x68> +2000383e: 405c lw a5,4(s0) +20003840: ffe5 bnez a5,20003838 <__wrap_vprintf+0xaa> +20003842: 4800 lw s0,16(s0) +20003844: b7fd j 20003832 <__wrap_vprintf+0xa4> +20003846: ed498513 addi a0,s3,-300 +2000384a: b59fc0ef jal 200003a2 +2000384e: b775 j 200037fa <__wrap_vprintf+0x6c> + +20003850 <__wrap_printf>: +20003850: 7139 addi sp,sp,-64 +20003852: 02410313 addi t1,sp,36 +20003856: d22e sw a1,36(sp) +20003858: 859a mv a1,t1 +2000385a: ce06 sw ra,28(sp) +2000385c: d432 sw a2,40(sp) +2000385e: d636 sw a3,44(sp) +20003860: d83a sw a4,48(sp) +20003862: da3e sw a5,52(sp) +20003864: dc42 sw a6,56(sp) +20003866: de46 sw a7,60(sp) +20003868: c61a sw t1,12(sp) +2000386a: 3715 jal 2000378e <__wrap_vprintf> +2000386c: 40f2 lw ra,28(sp) +2000386e: 6121 addi sp,sp,64 +20003870: 8082 ret + +20003872 : +20003872: 02b05e63 blez a1,200038ae +20003876: 8241a703 lw a4,-2012(gp) # 20007128 +2000387a: bff887b7 lui a5,0xbff88 +2000387e: 97ba add a5,a5,a4 +20003880: 0017b793 seqz a5,a5 +20003884: 80c18693 addi a3,gp,-2036 # 20007110 +20003888: 20d7a7b3 sh1add a5,a5,a3 +2000388c: 00079803 lh a6,0(a5) # bff88000 <__StackTop+0x9ff06000> +20003890: 00b50633 add a2,a0,a1 +20003894: 45b5 li a1,13 +20003896: 00054683 lbu a3,0(a0) +2000389a: 00d80b63 beq a6,a3,200038b0 +2000389e: 4f1c lw a5,24(a4) +200038a0: 0207f793 andi a5,a5,32 +200038a4: ffed bnez a5,2000389e +200038a6: c314 sw a3,0(a4) +200038a8: 0505 addi a0,a0,1 +200038aa: fec516e3 bne a0,a2,20003896 +200038ae: 8082 ret +200038b0: 4f1c lw a5,24(a4) +200038b2: 0207f793 andi a5,a5,32 +200038b6: ffed bnez a5,200038b0 +200038b8: c30c sw a1,0(a4) +200038ba: b7d5 j 2000389e + +200038bc : +200038bc: 8201a803 lw a6,-2016(gp) # 20007124 +200038c0: 862a mv a2,a0 +200038c2: 06b05163 blez a1,20003924 +200038c6: 8241a703 lw a4,-2012(gp) # 20007128 +200038ca: 4501 li a0,0 +200038cc: 4f1c lw a5,24(a4) +200038ce: 8bc1 andi a5,a5,16 +200038d0: eb9d bnez a5,20003906 +200038d2: 0505 addi a0,a0,1 +200038d4: 4f1c lw a5,24(a4) +200038d6: 8bc1 andi a5,a5,16 +200038d8: fff5 bnez a5,200038d4 +200038da: 4314 lw a3,0(a4) +200038dc: 00a607b3 add a5,a2,a0 +200038e0: fed78fa3 sb a3,-1(a5) +200038e4: fea594e3 bne a1,a0,200038cc +200038e8: 00080d63 beqz a6,20003902 +200038ec: 05000793 li a5,80 +200038f0: df1c sw a5,56(a4) +200038f2: 5b5c lw a5,52(a4) +200038f4: 6685 lui a3,0x1 +200038f6: 03468693 addi a3,a3,52 # 1034 +200038fa: 0387f793 andi a5,a5,56 +200038fe: 9736 add a4,a4,a3 +20003900: c31c sw a5,0(a4) +20003902: 852e mv a0,a1 +20003904: 8082 ret +20003906: 00080d63 beqz a6,20003920 +2000390a: 05000793 li a5,80 +2000390e: df1c sw a5,56(a4) +20003910: 5b5c lw a5,52(a4) +20003912: 6685 lui a3,0x1 +20003914: 03468693 addi a3,a3,52 # 1034 +20003918: 0387f793 andi a5,a5,56 +2000391c: 9736 add a4,a4,a3 +2000391e: c31c sw a5,0(a4) +20003920: c10d beqz a0,20003942 +20003922: 8082 ret +20003924: 00080f63 beqz a6,20003942 +20003928: 8241a783 lw a5,-2012(gp) # 20007128 +2000392c: 05000713 li a4,80 +20003930: 6685 lui a3,0x1 +20003932: df98 sw a4,56(a5) +20003934: 5bd8 lw a4,52(a5) +20003936: 03468693 addi a3,a3,52 # 1034 +2000393a: 97b6 add a5,a5,a3 +2000393c: 03877713 andi a4,a4,56 +20003940: c398 sw a4,0(a5) +20003942: 5575 li a0,-3 +20003944: 8082 ret + +20003946 : +20003946: 8201a783 lw a5,-2016(gp) # 20007124 +2000394a: cb81 beqz a5,2000395a +2000394c: 8241a703 lw a4,-2012(gp) # 20007128 +20003950: 81c1a503 lw a0,-2020(gp) # 20007120 +20003954: 02072c23 sw zero,56(a4) +20003958: 8782 jr a5 +2000395a: 8082 ret + +2000395c : +2000395c: 8241a703 lw a4,-2012(gp) # 20007128 +20003960: 4f1c lw a5,24(a4) +20003962: 8ba1 andi a5,a5,8 +20003964: fff5 bnez a5,20003960 +20003966: 8082 ret + +20003968 : +20003968: 1141 addi sp,sp,-16 +2000396a: c04a sw s2,0(sp) +2000396c: 8241a603 lw a2,-2012(gp) # 20007128 +20003970: 400787b7 lui a5,0x40078 +20003974: c422 sw s0,8(sp) +20003976: 40f607b3 sub a5,a2,a5 +2000397a: 0017b793 seqz a5,a5 +2000397e: c226 sw s1,4(sp) +20003980: c606 sw ra,12(sp) +20003982: 02178413 addi s0,a5,33 # 40078021 <__StackTop+0x1fff6021> +20003986: 8201a783 lw a5,-2016(gp) # 20007124 +2000398a: c901 beqz a0,2000399a +2000398c: cf9d beqz a5,200039ca +2000398e: 40b2 lw ra,12(sp) +20003990: 4422 lw s0,8(sp) +20003992: 4492 lw s1,4(sp) +20003994: 4902 lw s2,0(sp) +20003996: 0141 addi sp,sp,16 +20003998: 8082 ret +2000399a: dbf5 beqz a5,2000398e +2000399c: 8522 mv a0,s0 +2000399e: 02062c23 sw zero,56(a2) +200039a2: 4581 li a1,0 +200039a4: ec9fc0ef jal 2000086c +200039a8: 200045b7 lui a1,0x20004 +200039ac: 8522 mv a0,s0 +200039ae: 94658593 addi a1,a1,-1722 # 20003946 +200039b2: f79fc0ef jal 2000092a +200039b6: 40b2 lw ra,12(sp) +200039b8: 4422 lw s0,8(sp) +200039ba: 8201a023 sw zero,-2016(gp) # 20007124 +200039be: 8001ae23 sw zero,-2020(gp) # 20007120 +200039c2: 4492 lw s1,4(sp) +200039c4: 4902 lw s2,0(sp) +200039c6: 0141 addi sp,sp,16 +200039c8: 8082 ret +200039ca: 86ae mv a3,a1 +200039cc: 200045b7 lui a1,0x20004 +200039d0: 872a mv a4,a0 +200039d2: 8522 mv a0,s0 +200039d4: 94658593 addi a1,a1,-1722 # 20003946 +200039d8: 82e1a023 sw a4,-2016(gp) # 20007124 +200039dc: 80d1ae23 sw a3,-2020(gp) # 20007120 +200039e0: ec3fc0ef jal 200008a2 +200039e4: 8522 mv a0,s0 +200039e6: 4585 li a1,1 +200039e8: e85fc0ef jal 2000086c +200039ec: 8241a783 lw a5,-2012(gp) # 20007128 +200039f0: 05000713 li a4,80 +200039f4: 6685 lui a3,0x1 +200039f6: df98 sw a4,56(a5) +200039f8: 5bd8 lw a4,52(a5) +200039fa: 40b2 lw ra,12(sp) +200039fc: 4422 lw s0,8(sp) +200039fe: 03468693 addi a3,a3,52 # 1034 +20003a02: 97b6 add a5,a5,a3 +20003a04: 03877713 andi a4,a4,56 +20003a08: c398 sw a4,0(a5) +20003a0a: 4492 lw s1,4(sp) +20003a0c: 4902 lw s2,0(sp) +20003a0e: 0141 addi sp,sp,16 +20003a10: 8082 ret + +20003a12 : +20003a12: 20007637 lui a2,0x20007 +20003a16: 20007737 lui a4,0x20007 +20003a1a: 200077b7 lui a5,0x20007 +20003a1e: 1141 addi sp,sp,-16 +20003a20: e5464603 lbu a2,-428(a2) # 20006e54 <__bi_ptr45.13> +20003a24: e5074703 lbu a4,-432(a4) # 20006e50 <__bi_ptr49.12> +20003a28: e4c7c783 lbu a5,-436(a5) # 20006e4c <__bi_ptr50.11> +20003a2c: c422 sw s0,8(sp) +20003a2e: 400706b7 lui a3,0x40070 +20003a32: 4589 li a1,2 +20003a34: 4501 li a0,0 +20003a36: c606 sw ra,12(sp) +20003a38: 82d1a223 sw a3,-2012(gp) # 20007128 +20003a3c: bc3fc0ef jal 200005fe +20003a40: 4589 li a1,2 +20003a42: 4505 li a0,1 +20003a44: bbbfc0ef jal 200005fe +20003a48: 8241a503 lw a0,-2012(gp) # 20007128 +20003a4c: 65f1 lui a1,0x1c +20003a4e: 20058593 addi a1,a1,512 # 1c200 +20003a52: beffd0ef jal 20001640 +20003a56: 4422 lw s0,8(sp) +20003a58: 40b2 lw ra,12(sp) +20003a5a: 20007537 lui a0,0x20007 +20003a5e: eb850513 addi a0,a0,-328 # 20006eb8 +20003a62: 4585 li a1,1 +20003a64: 0141 addi sp,sp,16 +20003a66: b939 j 20003684 + +20003a68 : +20003a68: 16852703 lw a4,360(a0) +20003a6c: 0075c783 lbu a5,7(a1) +20003a70: 882a mv a6,a0 +20003a72: cf25 beqz a4,20003aea +20003a74: 8b85 andi a5,a5,1 +20003a76: efb5 bnez a5,20003af2 +20003a78: 00558783 lb a5,5(a1) +20003a7c: 0007c463 bltz a5,20003a84 +20003a80: 06f61963 bne a2,a5,20003af2 +20003a84: afe007b7 lui a5,0xafe00 +20003a88: 0045c503 lbu a0,4(a1) +20003a8c: 97c2 add a5,a5,a6 +20003a8e: 20007e37 lui t3,0x20007 +20003a92: 83d1 srli a5,a5,0x14 +20003a94: 0b0e0e13 addi t3,t3,176 # 200070b0 <_used_instruction_space> +20003a98: 21c7c733 sh2add a4,a5,t3 +20003a9c: 00072f03 lw t5,0(a4) +20003aa0: 28a01eb3 bset t4,zero,a0 +20003aa4: 1efd addi t4,t4,-1 +20003aa6: 00ce9eb3 sll t4,t4,a2 +20003aaa: 01df7733 and a4,t5,t4 +20003aae: 00279313 slli t1,a5,0x2 +20003ab2: e331 bnez a4,20003af6 +20003ab4: 419c lw a5,0(a1) +20003ab6: c11d beqz a0,20003adc +20003ab8: 20f52533 sh1add a0,a0,a5 +20003abc: 85b2 mv a1,a2 +20003abe: 6889 lui a7,0x2 +20003ac0: 0007d683 lhu a3,0(a5) # afe00000 <__StackTop+0x8fd7e000> +20003ac4: 01058713 addi a4,a1,16 +20003ac8: 21074733 sh2add a4,a4,a6 +20003acc: 0789 addi a5,a5,2 +20003ace: 0116f363 bgeu a3,a7,20003ad4 +20003ad2: 96b2 add a3,a3,a2 +20003ad4: c714 sw a3,8(a4) +20003ad6: 0585 addi a1,a1,1 +20003ad8: fea794e3 bne a5,a0,20003ac0 +20003adc: 9e1a add t3,t3,t1 +20003ade: 01df6f33 or t5,t5,t4 +20003ae2: 01ee2023 sw t5,0(t3) +20003ae6: 8532 mv a0,a2 +20003ae8: 8082 ret +20003aea: 8b91 andi a5,a5,4 +20003aec: 5555 li a0,-11 +20003aee: d7c9 beqz a5,20003a78 +20003af0: 8082 ret +20003af2: 5555 li a0,-11 +20003af4: 8082 ret +20003af6: 555d li a0,-9 +20003af8: 8082 ret + +20003afa : +20003afa: afe007b7 lui a5,0xafe00 +20003afe: 97aa add a5,a5,a0 +20003b00: 83d1 srli a5,a5,0x14 +20003b02: 4709 li a4,2 +20003b04: 02e78963 beq a5,a4,20003b36 +20003b08: 4705 li a4,1 +20003b0a: 00e78c63 beq a5,a4,20003b22 +20003b0e: 20007637 lui a2,0x20007 +20003b12: 98060613 addi a2,a2,-1664 # 20006980 +20003b16: 20b7c5b3 sh2add a1,a5,a1 +20003b1a: 82818513 addi a0,gp,-2008 # 2000712c +20003b1e: b8dfc06f j 200006aa +20003b22: 20007637 lui a2,0x20007 +20003b26: 9c060613 addi a2,a2,-1600 # 200069c0 +20003b2a: 20b7c5b3 sh2add a1,a5,a1 +20003b2e: 82818513 addi a0,gp,-2008 # 2000712c +20003b32: b79fc06f j 200006aa +20003b36: 20007637 lui a2,0x20007 +20003b3a: 99c60613 addi a2,a2,-1636 # 2000699c +20003b3e: 20b7c5b3 sh2add a1,a5,a1 +20003b42: 82818513 addi a0,gp,-2008 # 2000712c +20003b46: b65fc06f j 200006aa + +20003b4a : +20003b4a: afe007b7 lui a5,0xafe00 +20003b4e: 953e add a0,a0,a5 +20003b50: 8151 srli a0,a0,0x14 +20003b52: 20b545b3 sh2add a1,a0,a1 +20003b56: 82818513 addi a0,gp,-2008 # 2000712c +20003b5a: c4ffc06f j 200007a8 + +20003b5e : +20003b5e: 16852783 lw a5,360(a0) +20003b62: 8e1d sub a2,a2,a5 +20003b64: 47fd li a5,31 +20003b66: 08c7e363 bltu a5,a2,20003bec +20003b6a: 20b5a7b3 sh1add a5,a1,a1 +20003b6e: 680d lui a6,0x3 +20003b70: 20a7e8b3 sh3add a7,a5,a0 +20003b74: 0cc80813 addi a6,a6,204 # 30cc +20003b78: 0dc8ae83 lw t4,220(a7) # 20dc +20003b7c: 010887b3 add a5,a7,a6 +20003b80: 00020337 lui t1,0x20 +20003b84: 0cc8ae03 lw t3,204(a7) +20003b88: 6839 lui a6,0xe +20003b8a: 0067a023 sw t1,0(a5) # afe00000 <__StackTop+0x8fd7e000> +20003b8e: 08080813 addi a6,a6,128 # e080 +20003b92: 00159313 slli t1,a1,0x1 +20003b96: e739 bnez a4,20003be4 +20003b98: 4895 li a7,5 +20003b9a: 02d8f563 bgeu a7,a3,20003bc4 +20003b9e: 00b30733 add a4,t1,a1 +20003ba2: 20a76733 sh3add a4,a4,a0 +20003ba6: 00561793 slli a5,a2,0x5 +20003baa: 29a79793 bseti a5,a5,0x1a +20003bae: 29c79793 bseti a5,a5,0x1c +20003bb2: 0cf72e23 sw a5,220(a4) +20003bb6: 0615 addi a2,a2,5 +20003bb8: 16ed addi a3,a3,-5 # 4006fffb <__StackTop+0x1ffedffb> +20003bba: 0d072c23 sw a6,216(a4) +20003bbe: 8a7d andi a2,a2,31 +20003bc0: fed8e3e3 bltu a7,a3,20003ba6 +20003bc4: 0616 slli a2,a2,0x5 +20003bc6: 932e add t1,t1,a1 +20003bc8: 06ea slli a3,a3,0x1a +20003bca: 20a36533 sh3add a0,t1,a0 +20003bce: 8ed1 or a3,a3,a2 +20003bd0: 0cd52e23 sw a3,220(a0) +20003bd4: 0d052c23 sw a6,216(a0) +20003bd8: 0dd52e23 sw t4,220(a0) +20003bdc: 0dc52623 sw t3,204(a0) +20003be0: 4501 li a0,0 +20003be2: 8082 ret +20003be4: 6839 lui a6,0xe +20003be6: 09f80813 addi a6,a6,159 # e09f +20003bea: b77d j 20003b98 +20003bec: 556d li a0,-5 +20003bee: 8082 ret + +20003bf0 : +20003bf0: 411c lw a5,0(a0) +20003bf2: 48b797b3 bclr a5,a5,a1 +20003bf6: c11c sw a5,0(a0) +20003bf8: ced9 beqz a3,20003c96 +20003bfa: 4a9c lw a5,16(a3) +20003bfc: 4298 lw a4,0(a3) +20003bfe: 0086ae83 lw t4,8(a3) +20003c02: 20b5a8b3 sh1add a7,a1,a1 +20003c06: 20a8e8b3 sh3add a7,a7,a0 +20003c0a: fff7c813 not a6,a5 +20003c0e: 0ce8a423 sw a4,200(a7) +20003c12: 00108e37 lui t3,0x108 +20003c16: 00485713 srli a4,a6,0x4 +20003c1a: 421e0e13 addi t3,t3,1057 # 108421 +20003c1e: 00185313 srli t1,a6,0x1 +20003c22: 0dd8a823 sw t4,208(a7) +20003c26: 01c77733 and a4,a4,t3 +20003c2a: 01037333 and t1,t1,a6 +20003c2e: 16852e03 lw t3,360(a0) +20003c32: 8385 srli a5,a5,0x1 +20003c34: 00e37333 and t1,t1,a4 +20003c38: 00e7f833 and a6,a5,a4 +20003c3c: 00159793 slli a5,a1,0x1 +20003c40: 02030063 beqz t1,20003c60 +20003c44: 01c86833 or a6,a6,t3 +20003c48: 0e081063 bnez a6,20003d28 +20003c4c: 0046a303 lw t1,4(a3) +20003c50: 46d4 lw a3,12(a3) +20003c52: 00b78733 add a4,a5,a1 +20003c56: 20a76733 sh3add a4,a4,a0 +20003c5a: 0c672623 sw t1,204(a4) +20003c5e: a02d j 20003c88 +20003c60: 0a081663 bnez a6,20003d0c +20003c64: 00c6a803 lw a6,12(a3) +20003c68: 0046a303 lw t1,4(a3) +20003c6c: 86c2 mv a3,a6 +20003c6e: fe0e02e3 beqz t3,20003c52 +20003c72: 01475693 srli a3,a4,0x14 +20003c76: 06f2 slli a3,a3,0x1c +20003c78: 0066c6b3 xor a3,a3,t1 +20003c7c: 0cd8a623 sw a3,204(a7) +20003c80: 0732 slli a4,a4,0xc +20003c82: 8321 srli a4,a4,0x8 +20003c84: 010746b3 xor a3,a4,a6 +20003c88: 00b78733 add a4,a5,a1 +20003c8c: 20a76733 sh3add a4,a4,a0 +20003c90: 0cd72e23 sw a3,220(a4) +20003c94: a02d j 20003cbe +20003c96: 20b5a7b3 sh1add a5,a1,a1 +20003c9a: 20a7e7b3 sh3add a5,a5,a0 +20003c9e: 6741 lui a4,0x10 +20003ca0: 0ce7a423 sw a4,200(a5) +20003ca4: 000c0737 lui a4,0xc0 +20003ca8: 0ce7a823 sw a4,208(a5) +20003cac: 677d lui a4,0x1f +20003cae: 16852683 lw a3,360(a0) +20003cb2: 0ce7a623 sw a4,204(a5) +20003cb6: 0c07ae23 sw zero,220(a5) +20003cba: 00159793 slli a5,a1,0x1 +20003cbe: 97ae add a5,a5,a1 +20003cc0: 078e slli a5,a5,0x3 +20003cc2: 0d078713 addi a4,a5,208 +20003cc6: 972a add a4,a4,a0 +20003cc8: 6685 lui a3,0x1 +20003cca: 9736 add a4,a4,a3 +20003ccc: 80000837 lui a6,0x80000 +20003cd0: 010106b7 lui a3,0x1010 +20003cd4: 01072023 sw a6,0(a4) # 1f000 +20003cd8: 10168693 addi a3,a3,257 # 1010101 +20003cdc: 01072023 sw a6,0(a4) +20003ce0: 00b69733 sll a4,a3,a1 +20003ce4: 00458813 addi a6,a1,4 +20003ce8: 6689 lui a3,0x2 +20003cea: c518 sw a4,8(a0) +20003cec: 29001833 bset a6,zero,a6 +20003cf0: 00d50733 add a4,a0,a3 +20003cf4: 05a1 addi a1,a1,8 +20003cf6: 01072023 sw a6,0(a4) +20003cfa: 28b015b3 bset a1,zero,a1 +20003cfe: 953e add a0,a0,a5 +20003d00: 8a7d andi a2,a2,31 +20003d02: c30c sw a1,0(a4) +20003d04: 0cc52c23 sw a2,216(a0) +20003d08: 4501 li a0,0 +20003d0a: 8082 ret +20003d0c: 000e0e63 beqz t3,20003d28 +20003d10: 0046a303 lw t1,4(a3) # 2004 +20003d14: 01475813 srli a6,a4,0x14 +20003d18: 0872 slli a6,a6,0x1c +20003d1a: 00684833 xor a6,a6,t1 +20003d1e: 0d08a623 sw a6,204(a7) +20003d22: 00c6a803 lw a6,12(a3) +20003d26: bfa9 j 20003c80 +20003d28: 5555 li a0,-11 +20003d2a: 8082 ret + +20003d2c : +20003d2c: 7159 addi sp,sp,-112 +20003d2e: ccd2 sw s4,88(sp) +20003d30: d686 sw ra,108(sp) +20003d32: d4a2 sw s0,104(sp) +20003d34: d2a6 sw s1,100(sp) +20003d36: d0ca sw s2,96(sp) +20003d38: cece sw s3,92(sp) +20003d3a: cad6 sw s5,84(sp) +20003d3c: c8da sw s6,80(sp) +20003d3e: c6de sw s7,76(sp) +20003d40: c4e2 sw s8,72(sp) +20003d42: c2e6 sw s9,68(sp) +20003d44: c0ea sw s10,64(sp) +20003d46: de6e sw s11,60(sp) +20003d48: c63e sw a5,12(sp) +20003d4a: ca2a sw a0,20(sp) +20003d4c: cc32 sw a2,24(sp) +20003d4e: ce36 sw a3,28(sp) +20003d50: 8a2e mv s4,a1 +20003d52: cb99 beqz a5,20003d68 +20003d54: fff70693 addi a3,a4,-1 +20003d58: 96be add a3,a3,a5 +20003d5a: 8311 srli a4,a4,0x4 +20003d5c: 8291 srli a3,a3,0x4 +20003d5e: 28e017b3 bset a5,zero,a4 +20003d62: 28d797b3 bset a5,a5,a3 +20003d66: c63e sw a5,12(sp) +20003d68: 00180793 addi a5,a6,1 # 80000001 <__StackTop+0x5ff7e001> +20003d6c: c43e sw a5,8(sp) +20003d6e: 4b01 li s6,0 +20003d70: 200074b7 lui s1,0x20007 +20003d74: 50200c37 lui s8,0x50200 +20003d78: 02c10b93 addi s7,sp,44 +20003d7c: 4a91 li s5,4 +20003d7e: 00200937 lui s2,0x200 +20003d82: afe009b7 lui s3,0xafe00 +20003d86: 01890cb3 add s9,s2,s8 +20003d8a: 019a2023 sw s9,0(s4) +20003d8e: 040b0f63 beqz s6,20003dec +20003d92: 8d5e mv s10,s7 +20003d94: 4d81 li s11,0 +20003d96: 9cce add s9,s9,s3 +20003d98: 014cdc93 srli s9,s9,0x14 +20003d9c: 0c8a slli s9,s9,0x2 +20003d9e: 003c8693 addi a3,s9,3 +20003da2: 8666 mv a2,s9 +20003da4: 9e448713 addi a4,s1,-1564 # 200069e4 +20003da8: 4581 li a1,0 +20003daa: 82818513 addi a0,gp,-2008 # 2000712c +20003dae: 963fc0ef jal 20000710 +20003db2: 419507b3 sub a5,a0,s9 +20003db6: 60479793 sext.b a5,a5 +20003dba: 19954363 blt a0,s9,20003f40 +20003dbe: 00fd0023 sb a5,0(s10) +20003dc2: 1607c063 bltz a5,20003f22 +20003dc6: 0d85 addi s11,s11,1 +20003dc8: 0d5d8c63 beq s11,s5,20003ea0 +20003dcc: 000a2c83 lw s9,0(s4) +20003dd0: 0d05 addi s10,s10,1 +20003dd2: b7d1 j 20003d96 +20003dd4: fff00737 lui a4,0xfff00 +20003dd8: 00e906b3 add a3,s2,a4 +20003ddc: 501007b7 lui a5,0x50100 +20003de0: 08e68a63 beq a3,a4,20003e74 +20003de4: 97ca add a5,a5,s2 +20003de6: 00fa2023 sw a5,0(s4) +20003dea: 8936 mv s2,a3 +20003dec: 01495c93 srli s9,s2,0x14 +20003df0: 0c8a slli s9,s9,0x2 +20003df2: 003c8693 addi a3,s9,3 +20003df6: 8666 mv a2,s9 +20003df8: 9e448713 addi a4,s1,-1564 +20003dfc: 4581 li a1,0 +20003dfe: 82818513 addi a0,gp,-2008 # 2000712c +20003e02: 90ffc0ef jal 20000710 +20003e06: 419507b3 sub a5,a0,s9 +20003e0a: 60479793 sext.b a5,a5 +20003e0e: fd9543e3 blt a0,s9,20003dd4 +20003e12: 02f10623 sb a5,44(sp) +20003e16: fa07cfe3 bltz a5,20003dd4 +20003e1a: 855fc0ef jal 2000066e +20003e1e: 000a2683 lw a3,0(s4) +20003e22: 8caa mv s9,a0 +20003e24: 4d85 li s11,1 +20003e26: 1686a783 lw a5,360(a3) +20003e2a: c3dd beqz a5,20003ed0 +20003e2c: 47b2 lw a5,12(sp) +20003e2e: 8b85 andi a5,a5,1 +20003e30: c3dd beqz a5,20003ed6 +20003e32: 8566 mv a0,s9 +20003e34: 85ffc0ef jal 20000692 +20003e38: 57d5 li a5,-11 +20003e3a: 4d01 li s10,0 +20003e3c: c83e sw a5,16(sp) +20003e3e: afe00cb7 lui s9,0xafe00 +20003e42: 000a2783 lw a5,0(s4) +20003e46: 01ab86b3 add a3,s7,s10 +20003e4a: 00068583 lb a1,0(a3) +20003e4e: 97e6 add a5,a5,s9 +20003e50: 83d1 srli a5,a5,0x14 +20003e52: 20b7c5b3 sh2add a1,a5,a1 +20003e56: 82818513 addi a0,gp,-2008 # 2000712c +20003e5a: 0d05 addi s10,s10,1 +20003e5c: 94dfc0ef jal 200007a8 +20003e60: ffbd61e3 bltu s10,s11,20003e42 +20003e64: 47c2 lw a5,16(sp) +20003e66: 1407da63 bgez a5,20003fba +20003e6a: fff007b7 lui a5,0xfff00 +20003e6e: 993e add s2,s2,a5 +20003e70: f0f91be3 bne s2,a5,20003d86 +20003e74: 47a2 lw a5,8(sp) +20003e76: 0b05 addi s6,s6,1 +20003e78: f0fb13e3 bne s6,a5,20003d7e +20003e7c: 000a2023 sw zero,0(s4) +20003e80: 4501 li a0,0 +20003e82: 50b6 lw ra,108(sp) +20003e84: 5426 lw s0,104(sp) +20003e86: 5496 lw s1,100(sp) +20003e88: 5906 lw s2,96(sp) +20003e8a: 49f6 lw s3,92(sp) +20003e8c: 4a66 lw s4,88(sp) +20003e8e: 4ad6 lw s5,84(sp) +20003e90: 4b46 lw s6,80(sp) +20003e92: 4bb6 lw s7,76(sp) +20003e94: 4c26 lw s8,72(sp) +20003e96: 4c96 lw s9,68(sp) +20003e98: 4d06 lw s10,64(sp) +20003e9a: 5df2 lw s11,60(sp) +20003e9c: 6165 addi sp,sp,112 +20003e9e: 8082 ret +20003ea0: fcefc0ef jal 2000066e +20003ea4: 000a2683 lw a3,0(s4) +20003ea8: 20007737 lui a4,0x20007 +20003eac: 0b070713 addi a4,a4,176 # 200070b0 <_used_instruction_space> +20003eb0: 013687b3 add a5,a3,s3 +20003eb4: 83d1 srli a5,a5,0x14 +20003eb6: 20e7c7b3 sh2add a5,a5,a4 +20003eba: 439c lw a5,0(a5) +20003ebc: 8caa mv s9,a0 +20003ebe: f7a5 bnez a5,20003e26 +20003ec0: 47b2 lw a5,12(sp) +20003ec2: 078a slli a5,a5,0x2 +20003ec4: 8bc1 andi a5,a5,16 +20003ec6: 16f6a423 sw a5,360(a3) +20003eca: 1686a783 lw a5,360(a3) +20003ece: ffb9 bnez a5,20003e2c +20003ed0: 47b2 lw a5,12(sp) +20003ed2: 8b91 andi a5,a5,4 +20003ed4: ffb9 bnez a5,20003e32 +20003ed6: 4652 lw a2,20(sp) +20003ed8: afe00737 lui a4,0xafe00 +20003edc: 9736 add a4,a4,a3 +20003ede: 00464883 lbu a7,4(a2) +20003ee2: 200077b7 lui a5,0x20007 +20003ee6: 00560603 lb a2,5(a2) +20003eea: 0b078793 addi a5,a5,176 # 200070b0 <_used_instruction_space> +20003eee: 8351 srli a4,a4,0x14 +20003ef0: 20f74733 sh2add a4,a4,a5 +20003ef4: 291015b3 bset a1,zero,a7 +20003ef8: 02000793 li a5,32 +20003efc: 4308 lw a0,0(a4) +20003efe: 15fd addi a1,a1,-1 +20003f00: 411787b3 sub a5,a5,a7 +20003f04: 06064263 bltz a2,20003f68 +20003f08: 00c7c663 blt a5,a2,20003f14 +20003f0c: 00c597b3 sll a5,a1,a2 +20003f10: 8fe9 and a5,a5,a0 +20003f12: c7bd beqz a5,20003f80 +20003f14: 8566 mv a0,s9 +20003f16: f7cfc0ef jal 20000692 +20003f1a: 57fd li a5,-1 +20003f1c: 4d01 li s10,0 +20003f1e: c83e sw a5,16(sp) +20003f20: bf39 j 20003e3e +20003f22: 020d9663 bnez s11,20003f4e +20003f26: fff00737 lui a4,0xfff00 +20003f2a: 00e907b3 add a5,s2,a4 +20003f2e: f4e783e3 beq a5,a4,20003e74 +20003f32: 50100cb7 lui s9,0x50100 +20003f36: 9cca add s9,s9,s2 +20003f38: 019a2023 sw s9,0(s4) +20003f3c: 893e mv s2,a5 +20003f3e: bd91 j 20003d92 +20003f40: 002d87b3 add a5,s11,sp +20003f44: 577d li a4,-1 +20003f46: 02e78623 sb a4,44(a5) +20003f4a: fc0d8ee3 beqz s11,20003f26 +20003f4e: fff007b7 lui a5,0xfff00 +20003f52: 00f90733 add a4,s2,a5 +20003f56: f0f70fe3 beq a4,a5,20003e74 +20003f5a: 50100cb7 lui s9,0x50100 +20003f5e: 9cca add s9,s9,s2 +20003f60: 019a2023 sw s9,0(s4) +20003f64: 893a mv s2,a4 +20003f66: b535 j 20003d92 +20003f68: 0407c263 bltz a5,20003fac +20003f6c: 58fd li a7,-1 +20003f6e: a019 j 20003f74 +20003f70: 03178e63 beq a5,a7,20003fac +20003f74: 00f59733 sll a4,a1,a5 +20003f78: 8f69 and a4,a4,a0 +20003f7a: 863e mv a2,a5 +20003f7c: 17fd addi a5,a5,-1 # ffefffff <__StackTop+0xdfe7dfff> +20003f7e: fb6d bnez a4,20003f70 +20003f80: 45d2 lw a1,20(sp) +20003f82: 8536 mv a0,a3 +20003f84: ae5ff0ef jal 20003a68 +20003f88: c82a sw a0,16(sp) +20003f8a: 02054a63 bltz a0,20003fbe +20003f8e: 02c10783 lb a5,44(sp) +20003f92: 4762 lw a4,24(sp) +20003f94: 8566 mv a0,s9 +20003f96: c31c sw a5,0(a4) +20003f98: 4742 lw a4,16(sp) +20003f9a: 47f2 lw a5,28(sp) +20003f9c: c398 sw a4,0(a5) +20003f9e: ef4fc0ef jal 20000692 +20003fa2: 4705 li a4,1 +20003fa4: 00ed8b63 beq s11,a4,20003fba +20003fa8: 8d3a mv s10,a4 +20003faa: bd51 j 20003e3e +20003fac: 8566 mv a0,s9 +20003fae: ee4fc0ef jal 20000692 +20003fb2: 57dd li a5,-9 +20003fb4: 4d01 li s10,0 +20003fb6: c83e sw a5,16(sp) +20003fb8: b559 j 20003e3e +20003fba: 4505 li a0,1 +20003fbc: b5d9 j 20003e82 +20003fbe: 8566 mv a0,s9 +20003fc0: ed2fc0ef jal 20000692 +20003fc4: 4d01 li s10,0 +20003fc6: bda5 j 20003e3e + +20003fc8 : +20003fc8: 1141 addi sp,sp,-16 +20003fca: c606 sw ra,12(sp) +20003fcc: c422 sw s0,8(sp) +20003fce: c226 sw s1,4(sp) +20003fd0: c04a sw s2,0(sp) +20003fd2: 00454783 lbu a5,4(a0) +20003fd6: 842e mv s0,a1 +20003fd8: 8932 mv s2,a2 +20003fda: 28f017b3 bset a5,zero,a5 +20003fde: 17fd addi a5,a5,-1 +20003fe0: 00d794b3 sll s1,a5,a3 +20003fe4: e8afc0ef jal 2000066e +20003fe8: afe007b7 lui a5,0xafe00 +20003fec: 97a2 add a5,a5,s0 +20003fee: 20007737 lui a4,0x20007 +20003ff2: 83d1 srli a5,a5,0x14 +20003ff4: 0b070713 addi a4,a4,176 # 200070b0 <_used_instruction_space> +20003ff8: 20e7c733 sh2add a4,a5,a4 +20003ffc: 4314 lw a3,0(a4) +20003ffe: 00279413 slli s0,a5,0x2 +20004002: 4096f7b3 andn a5,a3,s1 +20004006: c31c sw a5,0(a4) +20004008: e8afc0ef jal 20000692 +2000400c: 012405b3 add a1,s0,s2 +20004010: 4422 lw s0,8(sp) +20004012: 40b2 lw ra,12(sp) +20004014: 4492 lw s1,4(sp) +20004016: 4902 lw s2,0(sp) +20004018: 82818513 addi a0,gp,-2008 # 2000712c +2000401c: 0141 addi sp,sp,16 +2000401e: f8afc06f j 200007a8 + +20004022 <__udivdi3>: +20004022: 8832 mv a6,a2 +20004024: 88aa mv a7,a0 +20004026: 872e mv a4,a1 +20004028: ead5 bnez a3,200040dc <__udivdi3+0xba> +2000402a: 0ec5ff63 bgeu a1,a2,20004128 <__udivdi3+0x106> +2000402e: 67c1 lui a5,0x10 +20004030: 18f66c63 bltu a2,a5,200041c8 <__udivdi3+0x1a6> +20004034: 010007b7 lui a5,0x1000 +20004038: 46e1 li a3,24 +2000403a: 00f67363 bgeu a2,a5,20004040 <__udivdi3+0x1e> +2000403e: 46c1 li a3,16 +20004040: 200077b7 lui a5,0x20007 +20004044: 00d65333 srl t1,a2,a3 +20004048: c8c78793 addi a5,a5,-884 # 20006c8c <__clz_tab> +2000404c: 979a add a5,a5,t1 +2000404e: 0007c783 lbu a5,0(a5) +20004052: 02000313 li t1,32 +20004056: 97b6 add a5,a5,a3 +20004058: 40f306b3 sub a3,t1,a5 +2000405c: 00f30b63 beq t1,a5,20004072 <__udivdi3+0x50> +20004060: 00d59733 sll a4,a1,a3 +20004064: 00f557b3 srl a5,a0,a5 +20004068: 8f5d or a4,a4,a5 +2000406a: 00d61833 sll a6,a2,a3 +2000406e: 00d518b3 sll a7,a0,a3 +20004072: 01085613 srli a2,a6,0x10 +20004076: 02c75533 divu a0,a4,a2 +2000407a: 01081693 slli a3,a6,0x10 +2000407e: 82c1 srli a3,a3,0x10 +20004080: 0108d793 srli a5,a7,0x10 +20004084: 02c77733 remu a4,a4,a2 +20004088: 02a685b3 mul a1,a3,a0 +2000408c: 0742 slli a4,a4,0x10 +2000408e: 8fd9 or a5,a5,a4 +20004090: 00b7fa63 bgeu a5,a1,200040a4 <__udivdi3+0x82> +20004094: 97c2 add a5,a5,a6 +20004096: fff50713 addi a4,a0,-1 +2000409a: 0107e463 bltu a5,a6,200040a2 <__udivdi3+0x80> +2000409e: 2eb7ef63 bltu a5,a1,2000439c <__udivdi3+0x37a> +200040a2: 853a mv a0,a4 +200040a4: 8f8d sub a5,a5,a1 +200040a6: 02c7d733 divu a4,a5,a2 +200040aa: 08c2 slli a7,a7,0x10 +200040ac: 0108d893 srli a7,a7,0x10 +200040b0: 02c7f7b3 remu a5,a5,a2 +200040b4: 02e686b3 mul a3,a3,a4 +200040b8: 07c2 slli a5,a5,0x10 +200040ba: 00f8e8b3 or a7,a7,a5 +200040be: 00d8fb63 bgeu a7,a3,200040d4 <__udivdi3+0xb2> +200040c2: 98c2 add a7,a7,a6 +200040c4: fff70793 addi a5,a4,-1 +200040c8: 0108e563 bltu a7,a6,200040d2 <__udivdi3+0xb0> +200040cc: 1779 addi a4,a4,-2 +200040ce: 00d8e363 bltu a7,a3,200040d4 <__udivdi3+0xb2> +200040d2: 873e mv a4,a5 +200040d4: 0542 slli a0,a0,0x10 +200040d6: 8d59 or a0,a0,a4 +200040d8: 4581 li a1,0 +200040da: 8082 ret +200040dc: 00d5f563 bgeu a1,a3,200040e6 <__udivdi3+0xc4> +200040e0: 4581 li a1,0 +200040e2: 4501 li a0,0 +200040e4: 8082 ret +200040e6: 67c1 lui a5,0x10 +200040e8: 18f6e863 bltu a3,a5,20004278 <__udivdi3+0x256> +200040ec: 010007b7 lui a5,0x1000 +200040f0: 4861 li a6,24 +200040f2: 00f6f363 bgeu a3,a5,200040f8 <__udivdi3+0xd6> +200040f6: 4841 li a6,16 +200040f8: 200077b7 lui a5,0x20007 +200040fc: 0106d733 srl a4,a3,a6 +20004100: c8c78793 addi a5,a5,-884 # 20006c8c <__clz_tab> +20004104: 97ba add a5,a5,a4 +20004106: 0007c703 lbu a4,0(a5) +2000410a: 02000793 li a5,32 +2000410e: 9742 add a4,a4,a6 +20004110: 40e788b3 sub a7,a5,a4 +20004114: 16e79863 bne a5,a4,20004284 <__udivdi3+0x262> +20004118: 26b6e463 bltu a3,a1,20004380 <__udivdi3+0x35e> +2000411c: 00c53533 sltu a0,a0,a2 +20004120: 00153513 seqz a0,a0 +20004124: 4581 li a1,0 +20004126: 8082 ret +20004128: c655 beqz a2,200041d4 <__udivdi3+0x1b2> +2000412a: 67c1 lui a5,0x10 +2000412c: 24f67263 bgeu a2,a5,20004370 <__udivdi3+0x34e> +20004130: 10063713 sltiu a4,a2,256 +20004134: 00173713 seqz a4,a4 +20004138: 070e slli a4,a4,0x3 +2000413a: 00e656b3 srl a3,a2,a4 +2000413e: 200077b7 lui a5,0x20007 +20004142: c8c78793 addi a5,a5,-884 # 20006c8c <__clz_tab> +20004146: 97b6 add a5,a5,a3 +20004148: 0007c783 lbu a5,0(a5) +2000414c: 02000693 li a3,32 +20004150: 97ba add a5,a5,a4 +20004152: 40f68eb3 sub t4,a3,a5 +20004156: 08f69f63 bne a3,a5,200041f4 <__udivdi3+0x1d2> +2000415a: 40c587b3 sub a5,a1,a2 +2000415e: 01065693 srli a3,a2,0x10 +20004162: 0642 slli a2,a2,0x10 +20004164: 8241 srli a2,a2,0x10 +20004166: 4585 li a1,1 +20004168: 02d7d533 divu a0,a5,a3 +2000416c: 0108d713 srli a4,a7,0x10 +20004170: 02d7f7b3 remu a5,a5,a3 +20004174: 02c50333 mul t1,a0,a2 +20004178: 07c2 slli a5,a5,0x10 +2000417a: 8fd9 or a5,a5,a4 +2000417c: 0067fa63 bgeu a5,t1,20004190 <__udivdi3+0x16e> +20004180: 97c2 add a5,a5,a6 +20004182: fff50713 addi a4,a0,-1 +20004186: 0107e463 bltu a5,a6,2000418e <__udivdi3+0x16c> +2000418a: 2067e663 bltu a5,t1,20004396 <__udivdi3+0x374> +2000418e: 853a mv a0,a4 +20004190: 406787b3 sub a5,a5,t1 +20004194: 02d7d733 divu a4,a5,a3 +20004198: 08c2 slli a7,a7,0x10 +2000419a: 0108d893 srli a7,a7,0x10 +2000419e: 02d7f7b3 remu a5,a5,a3 +200041a2: 02c70633 mul a2,a4,a2 +200041a6: 07c2 slli a5,a5,0x10 +200041a8: 00f8e8b3 or a7,a7,a5 +200041ac: 00c8fb63 bgeu a7,a2,200041c2 <__udivdi3+0x1a0> +200041b0: 98c2 add a7,a7,a6 +200041b2: fff70793 addi a5,a4,-1 +200041b6: 0108e563 bltu a7,a6,200041c0 <__udivdi3+0x19e> +200041ba: 1779 addi a4,a4,-2 +200041bc: 00c8e363 bltu a7,a2,200041c2 <__udivdi3+0x1a0> +200041c0: 873e mv a4,a5 +200041c2: 0542 slli a0,a0,0x10 +200041c4: 8d59 or a0,a0,a4 +200041c6: 8082 ret +200041c8: 10063693 sltiu a3,a2,256 +200041cc: 0016b693 seqz a3,a3 +200041d0: 068e slli a3,a3,0x3 +200041d2: b5bd j 20004040 <__udivdi3+0x1e> +200041d4: 200077b7 lui a5,0x20007 +200041d8: 4681 li a3,0 +200041da: c8c78793 addi a5,a5,-884 # 20006c8c <__clz_tab> +200041de: 97b6 add a5,a5,a3 +200041e0: 0007c783 lbu a5,0(a5) +200041e4: 4701 li a4,0 +200041e6: 02000693 li a3,32 +200041ea: 97ba add a5,a5,a4 +200041ec: 40f68eb3 sub t4,a3,a5 +200041f0: f6f685e3 beq a3,a5,2000415a <__udivdi3+0x138> +200041f4: 01d61833 sll a6,a2,t4 +200041f8: 00f5d333 srl t1,a1,a5 +200041fc: 01085693 srli a3,a6,0x10 +20004200: 02d35e33 divu t3,t1,a3 +20004204: 01081613 slli a2,a6,0x10 +20004208: 01d595b3 sll a1,a1,t4 +2000420c: 8241 srli a2,a2,0x10 +2000420e: 00f557b3 srl a5,a0,a5 +20004212: 8fcd or a5,a5,a1 +20004214: 0107d713 srli a4,a5,0x10 +20004218: 01d518b3 sll a7,a0,t4 +2000421c: 02d37333 remu t1,t1,a3 +20004220: 03c605b3 mul a1,a2,t3 +20004224: 0342 slli t1,t1,0x10 +20004226: 00676733 or a4,a4,t1 +2000422a: 00b77b63 bgeu a4,a1,20004240 <__udivdi3+0x21e> +2000422e: 9742 add a4,a4,a6 +20004230: fffe0513 addi a0,t3,-1 +20004234: 15076d63 bltu a4,a6,2000438e <__udivdi3+0x36c> +20004238: 14b77b63 bgeu a4,a1,2000438e <__udivdi3+0x36c> +2000423c: 1e79 addi t3,t3,-2 +2000423e: 9742 add a4,a4,a6 +20004240: 8f0d sub a4,a4,a1 +20004242: 02d75533 divu a0,a4,a3 +20004246: 07c2 slli a5,a5,0x10 +20004248: 83c1 srli a5,a5,0x10 +2000424a: 02d77733 remu a4,a4,a3 +2000424e: 02a60333 mul t1,a2,a0 +20004252: 0742 slli a4,a4,0x10 +20004254: 8fd9 or a5,a5,a4 +20004256: 0067fb63 bgeu a5,t1,2000426c <__udivdi3+0x24a> +2000425a: 97c2 add a5,a5,a6 +2000425c: fff50713 addi a4,a0,-1 +20004260: 1307e363 bltu a5,a6,20004386 <__udivdi3+0x364> +20004264: 1267f163 bgeu a5,t1,20004386 <__udivdi3+0x364> +20004268: 1579 addi a0,a0,-2 +2000426a: 97c2 add a5,a5,a6 +2000426c: 010e1593 slli a1,t3,0x10 +20004270: 8dc9 or a1,a1,a0 +20004272: 406787b3 sub a5,a5,t1 +20004276: bdcd j 20004168 <__udivdi3+0x146> +20004278: 1006b813 sltiu a6,a3,256 +2000427c: 00183813 seqz a6,a6 +20004280: 080e slli a6,a6,0x3 +20004282: bd9d j 200040f8 <__udivdi3+0xd6> +20004284: 00e65e33 srl t3,a2,a4 +20004288: 011696b3 sll a3,a3,a7 +2000428c: 00de6e33 or t3,t3,a3 +20004290: 00e5d833 srl a6,a1,a4 +20004294: 010e5e93 srli t4,t3,0x10 +20004298: 03d857b3 divu a5,a6,t4 +2000429c: 010e1313 slli t1,t3,0x10 +200042a0: 011595b3 sll a1,a1,a7 +200042a4: 01035313 srli t1,t1,0x10 +200042a8: 00e55733 srl a4,a0,a4 +200042ac: 8f4d or a4,a4,a1 +200042ae: 01075693 srli a3,a4,0x10 +200042b2: 01161633 sll a2,a2,a7 +200042b6: 03d87833 remu a6,a6,t4 +200042ba: 02f305b3 mul a1,t1,a5 +200042be: 0842 slli a6,a6,0x10 +200042c0: 0106e6b3 or a3,a3,a6 +200042c4: 00b6fb63 bgeu a3,a1,200042da <__udivdi3+0x2b8> +200042c8: 96f2 add a3,a3,t3 +200042ca: fff78813 addi a6,a5,-1 +200042ce: 0dc6e263 bltu a3,t3,20004392 <__udivdi3+0x370> +200042d2: 0cb6f063 bgeu a3,a1,20004392 <__udivdi3+0x370> +200042d6: 17f9 addi a5,a5,-2 +200042d8: 96f2 add a3,a3,t3 +200042da: 8e8d sub a3,a3,a1 +200042dc: 03d6d833 divu a6,a3,t4 +200042e0: 0742 slli a4,a4,0x10 +200042e2: 8341 srli a4,a4,0x10 +200042e4: 03d6f6b3 remu a3,a3,t4 +200042e8: 030305b3 mul a1,t1,a6 +200042ec: 06c2 slli a3,a3,0x10 +200042ee: 8f55 or a4,a4,a3 +200042f0: 00b77b63 bgeu a4,a1,20004306 <__udivdi3+0x2e4> +200042f4: 9772 add a4,a4,t3 +200042f6: fff80693 addi a3,a6,-1 +200042fa: 09c76863 bltu a4,t3,2000438a <__udivdi3+0x368> +200042fe: 08b77663 bgeu a4,a1,2000438a <__udivdi3+0x368> +20004302: 1879 addi a6,a6,-2 +20004304: 9772 add a4,a4,t3 +20004306: 07c2 slli a5,a5,0x10 +20004308: 01081693 slli a3,a6,0x10 +2000430c: 01061313 slli t1,a2,0x10 +20004310: 0107e7b3 or a5,a5,a6 +20004314: 82c1 srli a3,a3,0x10 +20004316: 01035313 srli t1,t1,0x10 +2000431a: 0107d813 srli a6,a5,0x10 +2000431e: 8241 srli a2,a2,0x10 +20004320: 02680e33 mul t3,a6,t1 +20004324: 8f0d sub a4,a4,a1 +20004326: 02668333 mul t1,a3,t1 +2000432a: 02c686b3 mul a3,a3,a2 +2000432e: 01035593 srli a1,t1,0x10 +20004332: 96f2 add a3,a3,t3 +20004334: 96ae add a3,a3,a1 +20004336: 02c80833 mul a6,a6,a2 +2000433a: 01c6f463 bgeu a3,t3,20004342 <__udivdi3+0x320> +2000433e: 6641 lui a2,0x10 +20004340: 9832 add a6,a6,a2 +20004342: 0106d613 srli a2,a3,0x10 +20004346: 9642 add a2,a2,a6 +20004348: 02c76063 bltu a4,a2,20004368 <__udivdi3+0x346> +2000434c: 00c70563 beq a4,a2,20004356 <__udivdi3+0x334> +20004350: 853e mv a0,a5 +20004352: 4581 li a1,0 +20004354: 8082 ret +20004356: 0342 slli t1,t1,0x10 +20004358: 01035313 srli t1,t1,0x10 +2000435c: 06c2 slli a3,a3,0x10 +2000435e: 01151533 sll a0,a0,a7 +20004362: 969a add a3,a3,t1 +20004364: fed576e3 bgeu a0,a3,20004350 <__udivdi3+0x32e> +20004368: fff78513 addi a0,a5,-1 +2000436c: 4581 li a1,0 +2000436e: 8082 ret +20004370: 010007b7 lui a5,0x1000 +20004374: 02f67763 bgeu a2,a5,200043a2 <__udivdi3+0x380> +20004378: 01065693 srli a3,a2,0x10 +2000437c: 4741 li a4,16 +2000437e: b3c1 j 2000413e <__udivdi3+0x11c> +20004380: 4581 li a1,0 +20004382: 4505 li a0,1 +20004384: 8082 ret +20004386: 853a mv a0,a4 +20004388: b5d5 j 2000426c <__udivdi3+0x24a> +2000438a: 8836 mv a6,a3 +2000438c: bfad j 20004306 <__udivdi3+0x2e4> +2000438e: 8e2a mv t3,a0 +20004390: bd45 j 20004240 <__udivdi3+0x21e> +20004392: 87c2 mv a5,a6 +20004394: b799 j 200042da <__udivdi3+0x2b8> +20004396: 1579 addi a0,a0,-2 +20004398: 97c2 add a5,a5,a6 +2000439a: bbdd j 20004190 <__udivdi3+0x16e> +2000439c: 1579 addi a0,a0,-2 +2000439e: 97c2 add a5,a5,a6 +200043a0: b311 j 200040a4 <__udivdi3+0x82> +200043a2: 01865693 srli a3,a2,0x18 +200043a6: 4761 li a4,24 +200043a8: bb59 j 2000413e <__udivdi3+0x11c> + +200043aa <__umoddi3>: +200043aa: 8832 mv a6,a2 +200043ac: 88aa mv a7,a0 +200043ae: 832e mv t1,a1 +200043b0: 872e mv a4,a1 +200043b2: e6cd bnez a3,2000445c <__umoddi3+0xb2> +200043b4: 0ec5ff63 bgeu a1,a2,200044b2 <__umoddi3+0x108> +200043b8: 67c1 lui a5,0x10 +200043ba: 18f66263 bltu a2,a5,2000453e <__umoddi3+0x194> +200043be: 010007b7 lui a5,0x1000 +200043c2: 46e1 li a3,24 +200043c4: 00f67363 bgeu a2,a5,200043ca <__umoddi3+0x20> +200043c8: 46c1 li a3,16 +200043ca: 200077b7 lui a5,0x20007 +200043ce: 00d65333 srl t1,a2,a3 +200043d2: c8c78793 addi a5,a5,-884 # 20006c8c <__clz_tab> +200043d6: 979a add a5,a5,t1 +200043d8: 0007c783 lbu a5,0(a5) +200043dc: 02000313 li t1,32 +200043e0: 97b6 add a5,a5,a3 +200043e2: 40f306b3 sub a3,t1,a5 +200043e6: 00f30b63 beq t1,a5,200043fc <__umoddi3+0x52> +200043ea: 00d59733 sll a4,a1,a3 +200043ee: 00f557b3 srl a5,a0,a5 +200043f2: 8f5d or a4,a4,a5 +200043f4: 00d61833 sll a6,a2,a3 +200043f8: 00d518b3 sll a7,a0,a3 +200043fc: 01085593 srli a1,a6,0x10 +20004400: 02b75633 divu a2,a4,a1 +20004404: 01081313 slli t1,a6,0x10 +20004408: 01035313 srli t1,t1,0x10 +2000440c: 0108d793 srli a5,a7,0x10 +20004410: 02b77733 remu a4,a4,a1 +20004414: 02660633 mul a2,a2,t1 +20004418: 0742 slli a4,a4,0x10 +2000441a: 8fd9 or a5,a5,a4 +2000441c: 00c7f763 bgeu a5,a2,2000442a <__umoddi3+0x80> +20004420: 97c2 add a5,a5,a6 +20004422: 0107e463 bltu a5,a6,2000442a <__umoddi3+0x80> +20004426: 2ec7e463 bltu a5,a2,2000470e <__umoddi3+0x364> +2000442a: 8f91 sub a5,a5,a2 +2000442c: 02b7d733 divu a4,a5,a1 +20004430: 01089513 slli a0,a7,0x10 +20004434: 8141 srli a0,a0,0x10 +20004436: 02b7f7b3 remu a5,a5,a1 +2000443a: 02670733 mul a4,a4,t1 +2000443e: 07c2 slli a5,a5,0x10 +20004440: 8d5d or a0,a0,a5 +20004442: 00e57863 bgeu a0,a4,20004452 <__umoddi3+0xa8> +20004446: 9542 add a0,a0,a6 +20004448: 01056563 bltu a0,a6,20004452 <__umoddi3+0xa8> +2000444c: 00e57363 bgeu a0,a4,20004452 <__umoddi3+0xa8> +20004450: 9542 add a0,a0,a6 +20004452: 8d19 sub a0,a0,a4 +20004454: 00d55533 srl a0,a0,a3 +20004458: 4581 li a1,0 +2000445a: 8082 ret +2000445c: 00d5f363 bgeu a1,a3,20004462 <__umoddi3+0xb8> +20004460: 8082 ret +20004462: 67c1 lui a5,0x10 +20004464: 16f6eb63 bltu a3,a5,200045da <__umoddi3+0x230> +20004468: 010007b7 lui a5,0x1000 +2000446c: 4861 li a6,24 +2000446e: 00f6f363 bgeu a3,a5,20004474 <__umoddi3+0xca> +20004472: 4841 li a6,16 +20004474: 200077b7 lui a5,0x20007 +20004478: 0106d733 srl a4,a3,a6 +2000447c: c8c78793 addi a5,a5,-884 # 20006c8c <__clz_tab> +20004480: 97ba add a5,a5,a4 +20004482: 0007c703 lbu a4,0(a5) +20004486: 02000793 li a5,32 +2000448a: 9742 add a4,a4,a6 +2000448c: 40e78833 sub a6,a5,a4 +20004490: 14e79b63 bne a5,a4,200045e6 <__umoddi3+0x23c> +20004494: 00b6e463 bltu a3,a1,2000449c <__umoddi3+0xf2> +20004498: 00c56a63 bltu a0,a2,200044ac <__umoddi3+0x102> +2000449c: 40c508b3 sub a7,a0,a2 +200044a0: 01153333 sltu t1,a0,a7 +200044a4: 40d586b3 sub a3,a1,a3 +200044a8: 40668333 sub t1,a3,t1 +200044ac: 8546 mv a0,a7 +200044ae: 859a mv a1,t1 +200044b0: 8082 ret +200044b2: ce41 beqz a2,2000454a <__umoddi3+0x1a0> +200044b4: 67c1 lui a5,0x10 +200044b6: 24f67063 bgeu a2,a5,200046f6 <__umoddi3+0x34c> +200044ba: 10063713 sltiu a4,a2,256 +200044be: 00173713 seqz a4,a4 +200044c2: 070e slli a4,a4,0x3 +200044c4: 00e656b3 srl a3,a2,a4 +200044c8: 200077b7 lui a5,0x20007 +200044cc: c8c78793 addi a5,a5,-884 # 20006c8c <__clz_tab> +200044d0: 97b6 add a5,a5,a3 +200044d2: 0007c783 lbu a5,0(a5) +200044d6: 02000313 li t1,32 +200044da: 97ba add a5,a5,a4 +200044dc: 40f306b3 sub a3,t1,a5 +200044e0: 08f31563 bne t1,a5,2000456a <__umoddi3+0x1c0> +200044e4: 40c58733 sub a4,a1,a2 +200044e8: 01065313 srli t1,a2,0x10 +200044ec: 0642 slli a2,a2,0x10 +200044ee: 8241 srli a2,a2,0x10 +200044f0: 026755b3 divu a1,a4,t1 +200044f4: 0108d793 srli a5,a7,0x10 +200044f8: 02677733 remu a4,a4,t1 +200044fc: 02c585b3 mul a1,a1,a2 +20004500: 0742 slli a4,a4,0x10 +20004502: 8fd9 or a5,a5,a4 +20004504: 00b7f863 bgeu a5,a1,20004514 <__umoddi3+0x16a> +20004508: 97c2 add a5,a5,a6 +2000450a: 0107e563 bltu a5,a6,20004514 <__umoddi3+0x16a> +2000450e: 00b7f363 bgeu a5,a1,20004514 <__umoddi3+0x16a> +20004512: 97c2 add a5,a5,a6 +20004514: 8f8d sub a5,a5,a1 +20004516: 0267d733 divu a4,a5,t1 +2000451a: 08c2 slli a7,a7,0x10 +2000451c: 0108d893 srli a7,a7,0x10 +20004520: 0267f7b3 remu a5,a5,t1 +20004524: 02c70733 mul a4,a4,a2 +20004528: 01079513 slli a0,a5,0x10 +2000452c: 00a8e533 or a0,a7,a0 +20004530: f0e56be3 bltu a0,a4,20004446 <__umoddi3+0x9c> +20004534: 8d19 sub a0,a0,a4 +20004536: 00d55533 srl a0,a0,a3 +2000453a: 4581 li a1,0 +2000453c: 8082 ret +2000453e: 10063693 sltiu a3,a2,256 +20004542: 0016b693 seqz a3,a3 +20004546: 068e slli a3,a3,0x3 +20004548: b549 j 200043ca <__umoddi3+0x20> +2000454a: 200077b7 lui a5,0x20007 +2000454e: 4681 li a3,0 +20004550: c8c78793 addi a5,a5,-884 # 20006c8c <__clz_tab> +20004554: 97b6 add a5,a5,a3 +20004556: 0007c783 lbu a5,0(a5) +2000455a: 4701 li a4,0 +2000455c: 02000313 li t1,32 +20004560: 97ba add a5,a5,a4 +20004562: 40f306b3 sub a3,t1,a5 +20004566: f6f30fe3 beq t1,a5,200044e4 <__umoddi3+0x13a> +2000456a: 00d61833 sll a6,a2,a3 +2000456e: 00f5de33 srl t3,a1,a5 +20004572: 01085313 srli t1,a6,0x10 +20004576: 026e5eb3 divu t4,t3,t1 +2000457a: 01081613 slli a2,a6,0x10 +2000457e: 00d595b3 sll a1,a1,a3 +20004582: 00f55733 srl a4,a0,a5 +20004586: 8241 srli a2,a2,0x10 +20004588: 8f4d or a4,a4,a1 +2000458a: 01075793 srli a5,a4,0x10 +2000458e: 00d518b3 sll a7,a0,a3 +20004592: 026e7e33 remu t3,t3,t1 +20004596: 02ce85b3 mul a1,t4,a2 +2000459a: 0e42 slli t3,t3,0x10 +2000459c: 01c7e7b3 or a5,a5,t3 +200045a0: 00b7f863 bgeu a5,a1,200045b0 <__umoddi3+0x206> +200045a4: 97c2 add a5,a5,a6 +200045a6: 0107e563 bltu a5,a6,200045b0 <__umoddi3+0x206> +200045aa: 00b7f363 bgeu a5,a1,200045b0 <__umoddi3+0x206> +200045ae: 97c2 add a5,a5,a6 +200045b0: 8f8d sub a5,a5,a1 +200045b2: 0267d5b3 divu a1,a5,t1 +200045b6: 0742 slli a4,a4,0x10 +200045b8: 8341 srli a4,a4,0x10 +200045ba: 0267f7b3 remu a5,a5,t1 +200045be: 02c585b3 mul a1,a1,a2 +200045c2: 07c2 slli a5,a5,0x10 +200045c4: 8f5d or a4,a4,a5 +200045c6: 00b77863 bgeu a4,a1,200045d6 <__umoddi3+0x22c> +200045ca: 9742 add a4,a4,a6 +200045cc: 01076563 bltu a4,a6,200045d6 <__umoddi3+0x22c> +200045d0: 00b77363 bgeu a4,a1,200045d6 <__umoddi3+0x22c> +200045d4: 9742 add a4,a4,a6 +200045d6: 8f0d sub a4,a4,a1 +200045d8: bf21 j 200044f0 <__umoddi3+0x146> +200045da: 1006b813 sltiu a6,a3,256 +200045de: 00183813 seqz a6,a6 +200045e2: 080e slli a6,a6,0x3 +200045e4: bd41 j 20004474 <__umoddi3+0xca> +200045e6: 010696b3 sll a3,a3,a6 +200045ea: 00e658b3 srl a7,a2,a4 +200045ee: 00d8e8b3 or a7,a7,a3 +200045f2: 00e5d333 srl t1,a1,a4 +200045f6: 0108de13 srli t3,a7,0x10 +200045fa: 03c356b3 divu a3,t1,t3 +200045fe: 01089e93 slli t4,a7,0x10 +20004602: 010ede93 srli t4,t4,0x10 +20004606: 00e557b3 srl a5,a0,a4 +2000460a: 010595b3 sll a1,a1,a6 +2000460e: 8ddd or a1,a1,a5 +20004610: 0105d793 srli a5,a1,0x10 +20004614: 01061633 sll a2,a2,a6 +20004618: 01051533 sll a0,a0,a6 +2000461c: 03c37333 remu t1,t1,t3 +20004620: 02de8f33 mul t5,t4,a3 +20004624: 0342 slli t1,t1,0x10 +20004626: 0067e7b3 or a5,a5,t1 +2000462a: 01e7fb63 bgeu a5,t5,20004640 <__umoddi3+0x296> +2000462e: 97c6 add a5,a5,a7 +20004630: fff68313 addi t1,a3,-1 +20004634: 0d17eb63 bltu a5,a7,2000470a <__umoddi3+0x360> +20004638: 0de7f963 bgeu a5,t5,2000470a <__umoddi3+0x360> +2000463c: 16f9 addi a3,a3,-2 +2000463e: 97c6 add a5,a5,a7 +20004640: 41e787b3 sub a5,a5,t5 +20004644: 03c7df33 divu t5,a5,t3 +20004648: 05c2 slli a1,a1,0x10 +2000464a: 81c1 srli a1,a1,0x10 +2000464c: 03c7f7b3 remu a5,a5,t3 +20004650: 03ee8eb3 mul t4,t4,t5 +20004654: 07c2 slli a5,a5,0x10 +20004656: 8fcd or a5,a5,a1 +20004658: 01d7fb63 bgeu a5,t4,2000466e <__umoddi3+0x2c4> +2000465c: 97c6 add a5,a5,a7 +2000465e: ffff0593 addi a1,t5,-1 +20004662: 0b17e263 bltu a5,a7,20004706 <__umoddi3+0x35c> +20004666: 0bd7f063 bgeu a5,t4,20004706 <__umoddi3+0x35c> +2000466a: 1f79 addi t5,t5,-2 +2000466c: 97c6 add a5,a5,a7 +2000466e: 06c2 slli a3,a3,0x10 +20004670: 010f1e13 slli t3,t5,0x10 +20004674: 01e6e6b3 or a3,a3,t5 +20004678: 01061313 slli t1,a2,0x10 +2000467c: 010e5e13 srli t3,t3,0x10 +20004680: 01035313 srli t1,t1,0x10 +20004684: 82c1 srli a3,a3,0x10 +20004686: 01065f13 srli t5,a2,0x10 +2000468a: 02668fb3 mul t6,a3,t1 +2000468e: 41d785b3 sub a1,a5,t4 +20004692: 026e0333 mul t1,t3,t1 +20004696: 03ee0e33 mul t3,t3,t5 +2000469a: 01035793 srli a5,t1,0x10 +2000469e: 9e7e add t3,t3,t6 +200046a0: 97f2 add a5,a5,t3 +200046a2: 03e686b3 mul a3,a3,t5 +200046a6: 01f7f463 bgeu a5,t6,200046ae <__umoddi3+0x304> +200046aa: 6e41 lui t3,0x10 +200046ac: 96f2 add a3,a3,t3 +200046ae: 0107de13 srli t3,a5,0x10 +200046b2: 0342 slli t1,t1,0x10 +200046b4: 01035313 srli t1,t1,0x10 +200046b8: 07c2 slli a5,a5,0x10 +200046ba: 96f2 add a3,a3,t3 +200046bc: 979a add a5,a5,t1 +200046be: 02d5e463 bltu a1,a3,200046e6 <__umoddi3+0x33c> +200046c2: 02d58063 beq a1,a3,200046e2 <__umoddi3+0x338> +200046c6: 40f507b3 sub a5,a0,a5 +200046ca: 00f53533 sltu a0,a0,a5 +200046ce: 8d95 sub a1,a1,a3 +200046d0: 8d89 sub a1,a1,a0 +200046d2: 00e59733 sll a4,a1,a4 +200046d6: 0107d533 srl a0,a5,a6 +200046da: 0105d5b3 srl a1,a1,a6 +200046de: 8d59 or a0,a0,a4 +200046e0: 8082 ret +200046e2: fef572e3 bgeu a0,a5,200046c6 <__umoddi3+0x31c> +200046e6: 40c78633 sub a2,a5,a2 +200046ea: 00c7b7b3 sltu a5,a5,a2 +200046ee: 97c6 add a5,a5,a7 +200046f0: 8e9d sub a3,a3,a5 +200046f2: 87b2 mv a5,a2 +200046f4: bfc9 j 200046c6 <__umoddi3+0x31c> +200046f6: 010007b7 lui a5,0x1000 +200046fa: 00f67c63 bgeu a2,a5,20004712 <__umoddi3+0x368> +200046fe: 01065693 srli a3,a2,0x10 +20004702: 4741 li a4,16 +20004704: b3d1 j 200044c8 <__umoddi3+0x11e> +20004706: 8f2e mv t5,a1 +20004708: b79d j 2000466e <__umoddi3+0x2c4> +2000470a: 869a mv a3,t1 +2000470c: bf15 j 20004640 <__umoddi3+0x296> +2000470e: 97c2 add a5,a5,a6 +20004710: bb29 j 2000442a <__umoddi3+0x80> +20004712: 01865693 srli a3,a2,0x18 +20004716: 4761 li a4,24 +20004718: bb45 j 200044c8 <__umoddi3+0x11e> + +2000471a <__adddf3>: +2000471a: 00100337 lui t1,0x100 +2000471e: 1101 addi sp,sp,-32 +20004720: 137d addi t1,t1,-1 # fffff +20004722: 0146d713 srli a4,a3,0x14 +20004726: 00b377b3 and a5,t1,a1 +2000472a: 00d37833 and a6,t1,a3 +2000472e: c256 sw s5,4(sp) +20004730: 0145da93 srli s5,a1,0x14 +20004734: 078e slli a5,a5,0x3 +20004736: ca26 sw s1,20(sp) +20004738: c452 sw s4,8(sp) +2000473a: 7ffafa93 andi s5,s5,2047 +2000473e: 01d55a13 srli s4,a0,0x1d +20004742: 01f5d493 srli s1,a1,0x1f +20004746: 080e slli a6,a6,0x3 +20004748: 7ff77593 andi a1,a4,2047 +2000474c: ce06 sw ra,28(sp) +2000474e: 01d65713 srli a4,a2,0x1d +20004752: cc22 sw s0,24(sp) +20004754: c84a sw s2,16(sp) +20004756: c64e sw s3,12(sp) +20004758: 82fd srli a3,a3,0x1f +2000475a: 00fa6a33 or s4,s4,a5 +2000475e: 88b2 mv a7,a2 +20004760: 40ba87b3 sub a5,s5,a1 +20004764: 01076733 or a4,a4,a6 +20004768: 00351e13 slli t3,a0,0x3 +2000476c: 00361e93 slli t4,a2,0x3 +20004770: 0ed48963 beq s1,a3,20004862 <__adddf3+0x148> +20004774: 04f05563 blez a5,200047be <__adddf3+0xa4> +20004778: 16059263 bnez a1,200048dc <__adddf3+0x1c2> +2000477c: 01d766b3 or a3,a4,t4 +20004780: 30068163 beqz a3,20004a82 <__adddf3+0x368> +20004784: fff78693 addi a3,a5,-1 # ffffff +20004788: 62068c63 beqz a3,20004dc0 <__adddf3+0x6a6> +2000478c: 7ff00613 li a2,2047 +20004790: 3ac78663 beq a5,a2,20004b3c <__adddf3+0x422> +20004794: 03800613 li a2,56 +20004798: 56d65f63 bge a2,a3,20004d16 <__adddf3+0x5fc> +2000479c: fffe0413 addi s0,t3,-1 # ffff +200047a0: 008e3e33 sltu t3,t3,s0 +200047a4: 41ca0a33 sub s4,s4,t3 +200047a8: 008a1693 slli a3,s4,0x8 +200047ac: 00800737 lui a4,0x800 +200047b0: 8abe mv s5,a5 +200047b2: 0406da63 bgez a3,20004806 <__adddf3+0xec> +200047b6: fff70a13 addi s4,a4,-1 # 7fffff +200047ba: 547d li s0,-1 +200047bc: a2b9 j 2000490a <__adddf3+0x1f0> +200047be: 1a078463 beqz a5,20004966 <__adddf3+0x24c> +200047c2: 415587b3 sub a5,a1,s5 +200047c6: 3c0a9d63 bnez s5,20004ba0 <__adddf3+0x486> +200047ca: 01ca6633 or a2,s4,t3 +200047ce: 58060063 beqz a2,20004d4e <__adddf3+0x634> +200047d2: fff78613 addi a2,a5,-1 +200047d6: 6a060763 beqz a2,20004e84 <__adddf3+0x76a> +200047da: 7ff00513 li a0,2047 +200047de: 62a78f63 beq a5,a0,20004e1c <__adddf3+0x702> +200047e2: 03800513 li a0,56 +200047e6: 74c55663 bge a0,a2,20004f32 <__adddf3+0x818> +200047ea: fffe8413 addi s0,t4,-1 +200047ee: 008ebeb3 sltu t4,t4,s0 +200047f2: 41d70a33 sub s4,a4,t4 +200047f6: 008a1613 slli a2,s4,0x8 +200047fa: 00800737 lui a4,0x800 +200047fe: 7c064163 bltz a2,20004fc0 <__adddf3+0x8a6> +20004802: 84b6 mv s1,a3 +20004804: 8abe mv s5,a5 +20004806: 00440793 addi a5,s0,4 +2000480a: 0087b433 sltu s0,a5,s0 +2000480e: 9a22 add s4,s4,s0 +20004810: 843e mv s0,a5 +20004812: 008a1793 slli a5,s4,0x8 +20004816: 2007dd63 bgez a5,20004a30 <__adddf3+0x316> +2000481a: 001a8793 addi a5,s5,1 +2000481e: 7ff00713 li a4,2047 +20004822: 8826 mv a6,s1 +20004824: 20e78a63 beq a5,a4,20004a38 <__adddf3+0x31e> +20004828: ff800737 lui a4,0xff800 +2000482c: 177d addi a4,a4,-1 # ff7fffff <__StackTop+0xdf77dfff> +2000482e: 7ff7f793 andi a5,a5,2047 +20004832: 00ea7733 and a4,s4,a4 +20004836: 01d71613 slli a2,a4,0x1d +2000483a: 800d srli s0,s0,0x3 +2000483c: 0726 slli a4,a4,0x9 +2000483e: 8e41 or a2,a2,s0 +20004840: 8331 srli a4,a4,0xc +20004842: 40f2 lw ra,28(sp) +20004844: 4462 lw s0,24(sp) +20004846: 07d2 slli a5,a5,0x14 +20004848: 8fd9 or a5,a5,a4 +2000484a: 01f81713 slli a4,a6,0x1f +2000484e: 8fd9 or a5,a5,a4 +20004850: 44d2 lw s1,20(sp) +20004852: 4942 lw s2,16(sp) +20004854: 49b2 lw s3,12(sp) +20004856: 4a22 lw s4,8(sp) +20004858: 4a92 lw s5,4(sp) +2000485a: 8532 mv a0,a2 +2000485c: 85be mv a1,a5 +2000485e: 6105 addi sp,sp,32 +20004860: 8082 ret +20004862: 8826 mv a6,s1 +20004864: 1cf05d63 blez a5,20004a3e <__adddf3+0x324> +20004868: 16059263 bnez a1,200049cc <__adddf3+0x2b2> +2000486c: 01d766b3 or a3,a4,t4 +20004870: 20068963 beqz a3,20004a82 <__adddf3+0x368> +20004874: fff78693 addi a3,a5,-1 +20004878: 4e068e63 beqz a3,20004d74 <__adddf3+0x65a> +2000487c: 7ff00613 li a2,2047 +20004880: 5ac78963 beq a5,a2,20004e32 <__adddf3+0x718> +20004884: 03800613 li a2,56 +20004888: 62d65c63 bge a2,a3,20004ec0 <__adddf3+0x7a6> +2000488c: 008a1693 slli a3,s4,0x8 +20004890: 00800737 lui a4,0x800 +20004894: 001e0413 addi s0,t3,1 +20004898: 8abe mv s5,a5 +2000489a: f606d6e3 bgez a3,20004806 <__adddf3+0xec> +2000489e: 8a3a mv s4,a4 +200048a0: 4401 li s0,0 +200048a2: 0a85 addi s5,s5,1 +200048a4: 7ff00793 li a5,2047 +200048a8: 18fa8763 beq s5,a5,20004a36 <__adddf3+0x31c> +200048ac: ff8007b7 lui a5,0xff800 +200048b0: 17fd addi a5,a5,-1 # ff7fffff <__StackTop+0xdf77dfff> +200048b2: 00fa77b3 and a5,s4,a5 +200048b6: 00145713 srli a4,s0,0x1 +200048ba: 8805 andi s0,s0,1 +200048bc: 01f79693 slli a3,a5,0x1f +200048c0: 8f41 or a4,a4,s0 +200048c2: 0017da13 srli s4,a5,0x1 +200048c6: 00e6e433 or s0,a3,a4 +200048ca: 00747793 andi a5,s0,7 +200048ce: d3b1 beqz a5,20004812 <__adddf3+0xf8> +200048d0: 00f47793 andi a5,s0,15 +200048d4: 4711 li a4,4 +200048d6: f2e78ee3 beq a5,a4,20004812 <__adddf3+0xf8> +200048da: b735 j 20004806 <__adddf3+0xec> +200048dc: 7ff00693 li a3,2047 +200048e0: 24da8e63 beq s5,a3,20004b3c <__adddf3+0x422> +200048e4: 03800693 li a3,56 +200048e8: 1cf6d263 bge a3,a5,20004aac <__adddf3+0x392> +200048ec: fffe0413 addi s0,t3,-1 +200048f0: 008e3e33 sltu t3,t3,s0 +200048f4: 41ca0a33 sub s4,s4,t3 +200048f8: 008a1713 slli a4,s4,0x8 +200048fc: 008007b7 lui a5,0x800 +20004900: f00753e3 bgez a4,20004806 <__adddf3+0xec> +20004904: fff78a13 addi s4,a5,-1 # 7fffff +20004908: 547d li s0,-1 +2000490a: 8552 mv a0,s4 +2000490c: 619010ef jal 20006724 <__clzsi2> +20004910: ff850793 addi a5,a0,-8 +20004914: 02000713 li a4,32 +20004918: 40f706b3 sub a3,a4,a5 +2000491c: 00d456b3 srl a3,s0,a3 +20004920: 00fa1a33 sll s4,s4,a5 +20004924: 0146e6b3 or a3,a3,s4 +20004928: 00f41433 sll s0,s0,a5 +2000492c: 2f57c763 blt a5,s5,20004c1a <__adddf3+0x500> +20004930: 415787b3 sub a5,a5,s5 +20004934: 0785 addi a5,a5,1 +20004936: 8f1d sub a4,a4,a5 +20004938: 00e41633 sll a2,s0,a4 +2000493c: 00c03633 snez a2,a2 +20004940: 00f45a33 srl s4,s0,a5 +20004944: 01466633 or a2,a2,s4 +20004948: 00e69733 sll a4,a3,a4 +2000494c: 00c76433 or s0,a4,a2 +20004950: 00f6da33 srl s4,a3,a5 +20004954: 014467b3 or a5,s0,s4 +20004958: 4a81 li s5,0 +2000495a: fba5 bnez a5,200048ca <__adddf3+0x1b0> +2000495c: 8826 mv a6,s1 +2000495e: 4781 li a5,0 +20004960: 4701 li a4,0 +20004962: 4601 li a2,0 +20004964: bdf9 j 20004842 <__adddf3+0x128> +20004966: 001a8793 addi a5,s5,1 +2000496a: 7fe7f793 andi a5,a5,2046 +2000496e: 28079263 bnez a5,20004bf2 <__adddf3+0x4d8> +20004972: 01ca67b3 or a5,s4,t3 +20004976: 01d76633 or a2,a4,t4 +2000497a: 3e0a9163 bnez s5,20004d5c <__adddf3+0x642> +2000497e: 52078b63 beqz a5,20004eb4 <__adddf3+0x79a> +20004982: 20060563 beqz a2,20004b8c <__adddf3+0x472> +20004986: 41de05b3 sub a1,t3,t4 +2000498a: 00be3633 sltu a2,t3,a1 +2000498e: 40ea07b3 sub a5,s4,a4 +20004992: 8f91 sub a5,a5,a2 +20004994: 00879613 slli a2,a5,0x8 +20004998: 5c065f63 bgez a2,20004f76 <__adddf3+0x85c> +2000499c: 41ce8e33 sub t3,t4,t3 +200049a0: 01cebeb3 sltu t4,t4,t3 +200049a4: 41470733 sub a4,a4,s4 +200049a8: 41d70733 sub a4,a4,t4 +200049ac: 00ee67b3 or a5,t3,a4 +200049b0: 8472 mv s0,t3 +200049b2: 84b6 mv s1,a3 +200049b4: d7c5 beqz a5,2000495c <__adddf3+0x242> +200049b6: 00871793 slli a5,a4,0x8 +200049ba: 6007d763 bgez a5,20004fc8 <__adddf3+0x8ae> +200049be: ff8007b7 lui a5,0xff800 +200049c2: 17fd addi a5,a5,-1 # ff7fffff <__StackTop+0xdf77dfff> +200049c4: 8f7d and a4,a4,a5 +200049c6: 8836 mv a6,a3 +200049c8: 4785 li a5,1 +200049ca: b5b5 j 20004836 <__adddf3+0x11c> +200049cc: 7ff00693 li a3,2047 +200049d0: 16da8663 beq s5,a3,20004b3c <__adddf3+0x422> +200049d4: 03800693 li a3,56 +200049d8: 2cf6c263 blt a3,a5,20004c9c <__adddf3+0x582> +200049dc: 008006b7 lui a3,0x800 +200049e0: 8f55 or a4,a4,a3 +200049e2: 46fd li a3,31 +200049e4: 40f6c863 blt a3,a5,20004df4 <__adddf3+0x6da> +200049e8: 02000613 li a2,32 +200049ec: 8e1d sub a2,a2,a5 +200049ee: 00c716b3 sll a3,a4,a2 +200049f2: 00ce9633 sll a2,t4,a2 +200049f6: 00fedeb3 srl t4,t4,a5 +200049fa: 00f75733 srl a4,a4,a5 +200049fe: 00c03633 snez a2,a2 +20004a02: 01d6e6b3 or a3,a3,t4 +20004a06: 00c6e7b3 or a5,a3,a2 +20004a0a: 9a3a add s4,s4,a4 +20004a0c: 9e3e add t3,t3,a5 +20004a0e: 00fe37b3 sltu a5,t3,a5 +20004a12: 9a3e add s4,s4,a5 +20004a14: 8472 mv s0,t3 +20004a16: 008a1793 slli a5,s4,0x8 +20004a1a: e807c4e3 bltz a5,200048a2 <__adddf3+0x188> +20004a1e: 00747793 andi a5,s0,7 +20004a22: 5a078c63 beqz a5,20004fda <__adddf3+0x8c0> +20004a26: 00f47793 andi a5,s0,15 +20004a2a: 4711 li a4,4 +20004a2c: dce79de3 bne a5,a4,20004806 <__adddf3+0xec> +20004a30: 87d6 mv a5,s5 +20004a32: 800d srli s0,s0,0x3 +20004a34: a891 j 20004a88 <__adddf3+0x36e> +20004a36: 87d6 mv a5,s5 +20004a38: 4701 li a4,0 +20004a3a: 4601 li a2,0 +20004a3c: b519 j 20004842 <__adddf3+0x128> +20004a3e: 10078963 beqz a5,20004b50 <__adddf3+0x436> +20004a42: 415587b3 sub a5,a1,s5 +20004a46: 260a9463 bnez s5,20004cae <__adddf3+0x594> +20004a4a: 01ca66b3 or a3,s4,t3 +20004a4e: 4c068d63 beqz a3,20004f28 <__adddf3+0x80e> +20004a52: fff78693 addi a3,a5,-1 +20004a56: 30068f63 beqz a3,20004d74 <__adddf3+0x65a> +20004a5a: 7ff00613 li a2,2047 +20004a5e: 3ec78463 beq a5,a2,20004e46 <__adddf3+0x72c> +20004a62: 03800613 li a2,56 +20004a66: 52d65b63 bge a2,a3,20004f9c <__adddf3+0x882> +20004a6a: 00871693 slli a3,a4,0x8 +20004a6e: 00800a37 lui s4,0x800 +20004a72: 8abe mv s5,a5 +20004a74: 4401 li s0,0 +20004a76: e206c6e3 bltz a3,200048a2 <__adddf3+0x188> +20004a7a: 001e8413 addi s0,t4,1 +20004a7e: 8a3a mv s4,a4 +20004a80: b359 j 20004806 <__adddf3+0xec> +20004a82: 00351413 slli s0,a0,0x3 +20004a86: 800d srli s0,s0,0x3 +20004a88: 01da1613 slli a2,s4,0x1d +20004a8c: 7ff00693 li a3,2047 +20004a90: 8e41 or a2,a2,s0 +20004a92: 003a5713 srli a4,s4,0x3 +20004a96: 08d79863 bne a5,a3,20004b26 <__adddf3+0x40c> +20004a9a: 8e59 or a2,a2,a4 +20004a9c: ca59 beqz a2,20004b32 <__adddf3+0x418> +20004a9e: 4801 li a6,0 +20004aa0: 7ff00793 li a5,2047 +20004aa4: 00080737 lui a4,0x80 +20004aa8: 4601 li a2,0 +20004aaa: bb61 j 20004842 <__adddf3+0x128> +20004aac: 008006b7 lui a3,0x800 +20004ab0: 8f55 or a4,a4,a3 +20004ab2: 46fd li a3,31 +20004ab4: 18f6c063 blt a3,a5,20004c34 <__adddf3+0x51a> +20004ab8: 02000693 li a3,32 +20004abc: 8e9d sub a3,a3,a5 +20004abe: 00d71433 sll s0,a4,a3 +20004ac2: 00de96b3 sll a3,t4,a3 +20004ac6: 00fedeb3 srl t4,t4,a5 +20004aca: 00d036b3 snez a3,a3 +20004ace: 01d46433 or s0,s0,t4 +20004ad2: 00f75733 srl a4,a4,a5 +20004ad6: 8c55 or s0,s0,a3 +20004ad8: 40ea0a33 sub s4,s4,a4 +20004adc: 408e0433 sub s0,t3,s0 +20004ae0: 008e3e33 sltu t3,t3,s0 +20004ae4: 41ca0a33 sub s4,s4,t3 +20004ae8: 008a1793 slli a5,s4,0x8 +20004aec: f207d9e3 bgez a5,20004a1e <__adddf3+0x304> +20004af0: 0a26 slli s4,s4,0x9 +20004af2: 009a5a13 srli s4,s4,0x9 +20004af6: e00a1ae3 bnez s4,2000490a <__adddf3+0x1f0> +20004afa: 8522 mv a0,s0 +20004afc: 429010ef jal 20006724 <__clzsi2> +20004b00: 01850793 addi a5,a0,24 +20004b04: 477d li a4,31 +20004b06: e0f757e3 bge a4,a5,20004914 <__adddf3+0x1fa> +20004b0a: 1561 addi a0,a0,-8 +20004b0c: 00a416b3 sll a3,s0,a0 +20004b10: 1557d663 bge a5,s5,20004c5c <__adddf3+0x542> +20004b14: ff800737 lui a4,0xff800 +20004b18: 177d addi a4,a4,-1 # ff7fffff <__StackTop+0xdf77dfff> +20004b1a: 8f75 and a4,a4,a3 +20004b1c: 01d71613 slli a2,a4,0x1d +20004b20: 40fa87b3 sub a5,s5,a5 +20004b24: 830d srli a4,a4,0x3 +20004b26: 0732 slli a4,a4,0xc +20004b28: 8331 srli a4,a4,0xc +20004b2a: 7ff7f793 andi a5,a5,2047 +20004b2e: 8826 mv a6,s1 +20004b30: bb09 j 20004842 <__adddf3+0x128> +20004b32: 8826 mv a6,s1 +20004b34: 7ff00793 li a5,2047 +20004b38: 4701 li a4,0 +20004b3a: b321 j 20004842 <__adddf3+0x128> +20004b3c: 00351413 slli s0,a0,0x3 +20004b40: 00345513 srli a0,s0,0x3 +20004b44: 01da1613 slli a2,s4,0x1d +20004b48: 8e49 or a2,a2,a0 +20004b4a: 003a5713 srli a4,s4,0x3 +20004b4e: b7b1 j 20004a9a <__adddf3+0x380> +20004b50: 001a8793 addi a5,s5,1 +20004b54: 7fe7f693 andi a3,a5,2046 +20004b58: 16069f63 bnez a3,20004cd6 <__adddf3+0x5bc> +20004b5c: 01ca67b3 or a5,s4,t3 +20004b60: 3a0a9e63 bnez s5,20004f1c <__adddf3+0x802> +20004b64: 01d766b3 or a3,a4,t4 +20004b68: 40078063 beqz a5,20004f68 <__adddf3+0x84e> +20004b6c: c285 beqz a3,20004b8c <__adddf3+0x472> +20004b6e: 9ef2 add t4,t4,t3 +20004b70: 01cebe33 sltu t3,t4,t3 +20004b74: 9752 add a4,a4,s4 +20004b76: 01c70a33 add s4,a4,t3 +20004b7a: 008a1793 slli a5,s4,0x8 +20004b7e: 8e76 mv t3,t4 +20004b80: 4207c063 bltz a5,20004fa0 <__adddf3+0x886> +20004b84: 014ee7b3 or a5,t4,s4 +20004b88: dc078ae3 beqz a5,2000495c <__adddf3+0x242> +20004b8c: 003e5e13 srli t3,t3,0x3 +20004b90: 01da1613 slli a2,s4,0x1d +20004b94: 01c66633 or a2,a2,t3 +20004b98: 003a5713 srli a4,s4,0x3 +20004b9c: 4781 li a5,0 +20004b9e: b761 j 20004b26 <__adddf3+0x40c> +20004ba0: 7ff00613 li a2,2047 +20004ba4: 26c58c63 beq a1,a2,20004e1c <__adddf3+0x702> +20004ba8: 03800613 li a2,56 +20004bac: 16f64763 blt a2,a5,20004d1a <__adddf3+0x600> +20004bb0: 00800637 lui a2,0x800 +20004bb4: 00ca6a33 or s4,s4,a2 +20004bb8: 467d li a2,31 +20004bba: 28f64e63 blt a2,a5,20004e56 <__adddf3+0x73c> +20004bbe: 02000613 li a2,32 +20004bc2: 8e1d sub a2,a2,a5 +20004bc4: 00ca1433 sll s0,s4,a2 +20004bc8: 00ce1633 sll a2,t3,a2 +20004bcc: 00fe5e33 srl t3,t3,a5 +20004bd0: 00c03633 snez a2,a2 +20004bd4: 01c46433 or s0,s0,t3 +20004bd8: 00fa57b3 srl a5,s4,a5 +20004bdc: 8c51 or s0,s0,a2 +20004bde: 8f1d sub a4,a4,a5 +20004be0: 408e8433 sub s0,t4,s0 +20004be4: 008ebeb3 sltu t4,t4,s0 +20004be8: 41d70a33 sub s4,a4,t4 +20004bec: 8aae mv s5,a1 +20004bee: 84b6 mv s1,a3 +20004bf0: bde5 j 20004ae8 <__adddf3+0x3ce> +20004bf2: 41de0433 sub s0,t3,t4 +20004bf6: 008e3633 sltu a2,t3,s0 +20004bfa: 40ea07b3 sub a5,s4,a4 +20004bfe: 8f91 sub a5,a5,a2 +20004c00: 00879613 slli a2,a5,0x8 +20004c04: 12064a63 bltz a2,20004d38 <__adddf3+0x61e> +20004c08: 00f46633 or a2,s0,a5 +20004c0c: 8a3e mv s4,a5 +20004c0e: ee0614e3 bnez a2,20004af6 <__adddf3+0x3dc> +20004c12: 4801 li a6,0 +20004c14: 4781 li a5,0 +20004c16: 4701 li a4,0 +20004c18: b12d j 20004842 <__adddf3+0x128> +20004c1a: ff800a37 lui s4,0xff800 +20004c1e: 1a7d addi s4,s4,-1 # ff7fffff <__StackTop+0xdf77dfff> +20004c20: 00747713 andi a4,s0,7 +20004c24: 40fa8ab3 sub s5,s5,a5 +20004c28: 0146fa33 and s4,a3,s4 +20004c2c: de071de3 bnez a4,20004a26 <__adddf3+0x30c> +20004c30: 87d6 mv a5,s5 +20004c32: b501 j 20004a32 <__adddf3+0x318> +20004c34: fe078693 addi a3,a5,-32 +20004c38: 02000613 li a2,32 +20004c3c: 00d756b3 srl a3,a4,a3 +20004c40: 00c78a63 beq a5,a2,20004c54 <__adddf3+0x53a> +20004c44: 04000613 li a2,64 +20004c48: 40f607b3 sub a5,a2,a5 +20004c4c: 00f717b3 sll a5,a4,a5 +20004c50: 00feeeb3 or t4,t4,a5 +20004c54: 01d03433 snez s0,t4 +20004c58: 8c55 or s0,s0,a3 +20004c5a: b549 j 20004adc <__adddf3+0x3c2> +20004c5c: 41578433 sub s0,a5,s5 +20004c60: 00140793 addi a5,s0,1 +20004c64: 2ef75d63 bge a4,a5,20004f5e <__adddf3+0x844> +20004c68: 1405 addi s0,s0,-31 +20004c6a: 02000713 li a4,32 +20004c6e: 0086d433 srl s0,a3,s0 +20004c72: 00e78b63 beq a5,a4,20004c88 <__adddf3+0x56e> +20004c76: 04000713 li a4,64 +20004c7a: 40f707b3 sub a5,a4,a5 +20004c7e: 00f697b3 sll a5,a3,a5 +20004c82: 00f037b3 snez a5,a5 +20004c86: 8c5d or s0,s0,a5 +20004c88: cc040ae3 beqz s0,2000495c <__adddf3+0x242> +20004c8c: 00747793 andi a5,s0,7 +20004c90: 4a81 li s5,0 +20004c92: c2079fe3 bnez a5,200048d0 <__adddf3+0x1b6> +20004c96: 4a01 li s4,0 +20004c98: 800d srli s0,s0,0x3 +20004c9a: b3fd j 20004a88 <__adddf3+0x36e> +20004c9c: 008a1713 slli a4,s4,0x8 +20004ca0: 008007b7 lui a5,0x800 +20004ca4: 1c075d63 bgez a4,20004e7e <__adddf3+0x764> +20004ca8: 8a3e mv s4,a5 +20004caa: 4401 li s0,0 +20004cac: bedd j 200048a2 <__adddf3+0x188> +20004cae: 7ff00693 li a3,2047 +20004cb2: 18d58a63 beq a1,a3,20004e46 <__adddf3+0x72c> +20004cb6: 03800693 li a3,56 +20004cba: 20f6d563 bge a3,a5,20004ec4 <__adddf3+0x7aa> +20004cbe: 00871793 slli a5,a4,0x8 +20004cc2: 00800a37 lui s4,0x800 +20004cc6: 8aae mv s5,a1 +20004cc8: 4401 li s0,0 +20004cca: bc07cce3 bltz a5,200048a2 <__adddf3+0x188> +20004cce: 001e8413 addi s0,t4,1 +20004cd2: 8a3a mv s4,a4 +20004cd4: be0d j 20004806 <__adddf3+0xec> +20004cd6: 7ff00693 li a3,2047 +20004cda: d4d78fe3 beq a5,a3,20004a38 <__adddf3+0x31e> +20004cde: 9ef2 add t4,t4,t3 +20004ce0: 01cebe33 sltu t3,t4,t3 +20004ce4: 9752 add a4,a4,s4 +20004ce6: 9772 add a4,a4,t3 +20004ce8: 001ede93 srli t4,t4,0x1 +20004cec: 01f71413 slli s0,a4,0x1f +20004cf0: 007ef693 andi a3,t4,7 +20004cf4: 01d46433 or s0,s0,t4 +20004cf8: 00175a13 srli s4,a4,0x1 +20004cfc: c699 beqz a3,20004d0a <__adddf3+0x5f0> +20004cfe: 00f47693 andi a3,s0,15 +20004d02: 4611 li a2,4 +20004d04: 8abe mv s5,a5 +20004d06: b0c690e3 bne a3,a2,20004806 <__adddf3+0xec> +20004d0a: 800d srli s0,s0,0x3 +20004d0c: 01da1613 slli a2,s4,0x1d +20004d10: 8e41 or a2,a2,s0 +20004d12: 8311 srli a4,a4,0x4 +20004d14: bd09 j 20004b26 <__adddf3+0x40c> +20004d16: 87b6 mv a5,a3 +20004d18: bb69 j 20004ab2 <__adddf3+0x398> +20004d1a: fffe8413 addi s0,t4,-1 +20004d1e: 008ebeb3 sltu t4,t4,s0 +20004d22: 41d70a33 sub s4,a4,t4 +20004d26: 008a1713 slli a4,s4,0x8 +20004d2a: 008007b7 lui a5,0x800 +20004d2e: 1c074b63 bltz a4,20004f04 <__adddf3+0x7ea> +20004d32: 84b6 mv s1,a3 +20004d34: 8aae mv s5,a1 +20004d36: bcc1 j 20004806 <__adddf3+0xec> +20004d38: 41ce8e33 sub t3,t4,t3 +20004d3c: 01cebeb3 sltu t4,t4,t3 +20004d40: 41470733 sub a4,a4,s4 +20004d44: 8472 mv s0,t3 +20004d46: 41d70a33 sub s4,a4,t4 +20004d4a: 84b6 mv s1,a3 +20004d4c: b36d j 20004af6 <__adddf3+0x3dc> +20004d4e: 00389613 slli a2,a7,0x3 +20004d52: 00365413 srli s0,a2,0x3 +20004d56: 84b6 mv s1,a3 +20004d58: 8a3a mv s4,a4 +20004d5a: b33d j 20004a88 <__adddf3+0x36e> +20004d5c: ebe9 bnez a5,20004e2e <__adddf3+0x714> +20004d5e: 22060963 beqz a2,20004f90 <__adddf3+0x876> +20004d62: 00389613 slli a2,a7,0x3 +20004d66: 01d71793 slli a5,a4,0x1d +20004d6a: 820d srli a2,a2,0x3 +20004d6c: 84b6 mv s1,a3 +20004d6e: 8e5d or a2,a2,a5 +20004d70: 830d srli a4,a4,0x3 +20004d72: b325 j 20004a9a <__adddf3+0x380> +20004d74: 9ef2 add t4,t4,t3 +20004d76: 01cebe33 sltu t3,t4,t3 +20004d7a: 9752 add a4,a4,s4 +20004d7c: 9772 add a4,a4,t3 +20004d7e: 00871793 slli a5,a4,0x8 +20004d82: 1807d463 bgez a5,20004f0a <__adddf3+0x7f0> +20004d86: ff8007b7 lui a5,0xff800 +20004d8a: 17fd addi a5,a5,-1 # ff7fffff <__StackTop+0xdf77dfff> +20004d8c: 001ed693 srli a3,t4,0x1 +20004d90: 8f7d and a4,a4,a5 +20004d92: 01f71793 slli a5,a4,0x1f +20004d96: 0076f593 andi a1,a3,7 +20004d9a: 8fd5 or a5,a5,a3 +20004d9c: 00175613 srli a2,a4,0x1 +20004da0: 1e058263 beqz a1,20004f84 <__adddf3+0x86a> +20004da4: 00f7f693 andi a3,a5,15 +20004da8: 4591 li a1,4 +20004daa: 1cb68d63 beq a3,a1,20004f84 <__adddf3+0x86a> +20004dae: 00b78433 add s0,a5,a1 +20004db2: 00f437b3 sltu a5,s0,a5 +20004db6: 00c78a33 add s4,a5,a2 +20004dba: 800d srli s0,s0,0x3 +20004dbc: 4789 li a5,2 +20004dbe: b1e9 j 20004a88 <__adddf3+0x36e> +20004dc0: 41de0eb3 sub t4,t3,t4 +20004dc4: 01de3e33 sltu t3,t3,t4 +20004dc8: 40ea0733 sub a4,s4,a4 +20004dcc: 41c70a33 sub s4,a4,t3 +20004dd0: 008a1793 slli a5,s4,0x8 +20004dd4: 8476 mv s0,t4 +20004dd6: 0007cd63 bltz a5,20004df0 <__adddf3+0x6d6> +20004dda: 003ede93 srli t4,t4,0x3 +20004dde: 01da1613 slli a2,s4,0x1d +20004de2: 01d66633 or a2,a2,t4 +20004de6: 003a5713 srli a4,s4,0x3 +20004dea: 4785 li a5,1 +20004dec: bb2d j 20004b26 <__adddf3+0x40c> +20004dee: 84b6 mv s1,a3 +20004df0: 4a85 li s5,1 +20004df2: b9fd j 20004af0 <__adddf3+0x3d6> +20004df4: fe078693 addi a3,a5,-32 +20004df8: 02000613 li a2,32 +20004dfc: 00d756b3 srl a3,a4,a3 +20004e00: 00c78a63 beq a5,a2,20004e14 <__adddf3+0x6fa> +20004e04: 04000613 li a2,64 +20004e08: 40f607b3 sub a5,a2,a5 +20004e0c: 00f717b3 sll a5,a4,a5 +20004e10: 00feeeb3 or t4,t4,a5 +20004e14: 01d037b3 snez a5,t4 +20004e18: 8fd5 or a5,a5,a3 +20004e1a: becd j 20004a0c <__adddf3+0x2f2> +20004e1c: 00389793 slli a5,a7,0x3 +20004e20: 01d71613 slli a2,a4,0x1d +20004e24: 838d srli a5,a5,0x3 +20004e26: 84b6 mv s1,a3 +20004e28: 8e5d or a2,a2,a5 +20004e2a: 830d srli a4,a4,0x3 +20004e2c: b1bd j 20004a9a <__adddf3+0x380> +20004e2e: c60618e3 bnez a2,20004a9e <__adddf3+0x384> +20004e32: 00351413 slli s0,a0,0x3 +20004e36: 00345793 srli a5,s0,0x3 +20004e3a: 01da1613 slli a2,s4,0x1d +20004e3e: 8e5d or a2,a2,a5 +20004e40: 003a5713 srli a4,s4,0x3 +20004e44: b999 j 20004a9a <__adddf3+0x380> +20004e46: 00389793 slli a5,a7,0x3 +20004e4a: 01d71613 slli a2,a4,0x1d +20004e4e: 838d srli a5,a5,0x3 +20004e50: 8e5d or a2,a2,a5 +20004e52: 830d srli a4,a4,0x3 +20004e54: b199 j 20004a9a <__adddf3+0x380> +20004e56: fe078613 addi a2,a5,-32 +20004e5a: 02000513 li a0,32 +20004e5e: 00ca5633 srl a2,s4,a2 +20004e62: 00a78a63 beq a5,a0,20004e76 <__adddf3+0x75c> +20004e66: 04000513 li a0,64 +20004e6a: 40f507b3 sub a5,a0,a5 +20004e6e: 00fa17b3 sll a5,s4,a5 +20004e72: 00fe6e33 or t3,t3,a5 +20004e76: 01c03433 snez s0,t3 +20004e7a: 8c51 or s0,s0,a2 +20004e7c: b395 j 20004be0 <__adddf3+0x4c6> +20004e7e: 001e0413 addi s0,t3,1 +20004e82: b251 j 20004806 <__adddf3+0xec> +20004e84: 41ce8e33 sub t3,t4,t3 +20004e88: 01cebeb3 sltu t4,t4,t3 +20004e8c: 41470733 sub a4,a4,s4 +20004e90: 41d70a33 sub s4,a4,t4 +20004e94: 008a1793 slli a5,s4,0x8 +20004e98: 8472 mv s0,t3 +20004e9a: f407cae3 bltz a5,20004dee <__adddf3+0x6d4> +20004e9e: 003e5e13 srli t3,t3,0x3 +20004ea2: 01da1613 slli a2,s4,0x1d +20004ea6: 84b6 mv s1,a3 +20004ea8: 00ce6633 or a2,t3,a2 +20004eac: 003a5713 srli a4,s4,0x3 +20004eb0: 4785 li a5,1 +20004eb2: b995 j 20004b26 <__adddf3+0x40c> +20004eb4: d4060fe3 beqz a2,20004c12 <__adddf3+0x4f8> +20004eb8: 8a3a mv s4,a4 +20004eba: 8e76 mv t3,t4 +20004ebc: 84b6 mv s1,a3 +20004ebe: b1f9 j 20004b8c <__adddf3+0x472> +20004ec0: 87b6 mv a5,a3 +20004ec2: b605 j 200049e2 <__adddf3+0x2c8> +20004ec4: 008006b7 lui a3,0x800 +20004ec8: 00da6a33 or s4,s4,a3 +20004ecc: 46fd li a3,31 +20004ece: 06f6c463 blt a3,a5,20004f36 <__adddf3+0x81c> +20004ed2: 02000613 li a2,32 +20004ed6: 8e1d sub a2,a2,a5 +20004ed8: 00ca16b3 sll a3,s4,a2 +20004edc: 00ce1633 sll a2,t3,a2 +20004ee0: 00fe5e33 srl t3,t3,a5 +20004ee4: 00c03633 snez a2,a2 +20004ee8: 01c6e6b3 or a3,a3,t3 +20004eec: 00fa57b3 srl a5,s4,a5 +20004ef0: 8ed1 or a3,a3,a2 +20004ef2: 973e add a4,a4,a5 +20004ef4: 9eb6 add t4,t4,a3 +20004ef6: 00deb6b3 sltu a3,t4,a3 +20004efa: 00e68a33 add s4,a3,a4 +20004efe: 8476 mv s0,t4 +20004f00: 8aae mv s5,a1 +20004f02: be11 j 20004a16 <__adddf3+0x2fc> +20004f04: 8aae mv s5,a1 +20004f06: 84b6 mv s1,a3 +20004f08: baf5 j 20004904 <__adddf3+0x1ea> +20004f0a: 01d71613 slli a2,a4,0x1d +20004f0e: 003ede93 srli t4,t4,0x3 +20004f12: 01d66633 or a2,a2,t4 +20004f16: 830d srli a4,a4,0x3 +20004f18: 4785 li a5,1 +20004f1a: b131 j 20004b26 <__adddf3+0x40c> +20004f1c: d78d beqz a5,20004e46 <__adddf3+0x72c> +20004f1e: 01d76eb3 or t4,a4,t4 +20004f22: b60e9ee3 bnez t4,20004a9e <__adddf3+0x384> +20004f26: b731 j 20004e32 <__adddf3+0x718> +20004f28: 060e slli a2,a2,0x3 +20004f2a: 00365413 srli s0,a2,0x3 +20004f2e: 8a3a mv s4,a4 +20004f30: bea1 j 20004a88 <__adddf3+0x36e> +20004f32: 87b2 mv a5,a2 +20004f34: b151 j 20004bb8 <__adddf3+0x49e> +20004f36: fe078613 addi a2,a5,-32 +20004f3a: 02000693 li a3,32 +20004f3e: 00ca5633 srl a2,s4,a2 +20004f42: 00d78a63 beq a5,a3,20004f56 <__adddf3+0x83c> +20004f46: 04000693 li a3,64 +20004f4a: 40f687b3 sub a5,a3,a5 +20004f4e: 00fa17b3 sll a5,s4,a5 +20004f52: 00fe6e33 or t3,t3,a5 +20004f56: 01c036b3 snez a3,t3 +20004f5a: 8ed1 or a3,a3,a2 +20004f5c: bf61 j 20004ef4 <__adddf3+0x7da> +20004f5e: 02000713 li a4,32 +20004f62: 8f1d sub a4,a4,a5 +20004f64: 4601 li a2,0 +20004f66: baf9 j 20004944 <__adddf3+0x22a> +20004f68: 9e068ae3 beqz a3,2000495c <__adddf3+0x242> +20004f6c: 8476 mv s0,t4 +20004f6e: 8a3a mv s4,a4 +20004f70: 4781 li a5,0 +20004f72: 800d srli s0,s0,0x3 +20004f74: be11 j 20004a88 <__adddf3+0x36e> +20004f76: 00f5e633 or a2,a1,a5 +20004f7a: c8060ce3 beqz a2,20004c12 <__adddf3+0x4f8> +20004f7e: 8a3e mv s4,a5 +20004f80: 8e2e mv t3,a1 +20004f82: b129 j 20004b8c <__adddf3+0x472> +20004f84: 838d srli a5,a5,0x3 +20004f86: 0676 slli a2,a2,0x1d +20004f88: 8e5d or a2,a2,a5 +20004f8a: 8311 srli a4,a4,0x4 +20004f8c: 4789 li a5,2 +20004f8e: be61 j 20004b26 <__adddf3+0x40c> +20004f90: 4801 li a6,0 +20004f92: 7ff00793 li a5,2047 +20004f96: 00080737 lui a4,0x80 +20004f9a: b065 j 20004842 <__adddf3+0x128> +20004f9c: 87b6 mv a5,a3 +20004f9e: b73d j 20004ecc <__adddf3+0x7b2> +20004fa0: ff800737 lui a4,0xff800 +20004fa4: 177d addi a4,a4,-1 # ff7fffff <__StackTop+0xdf77dfff> +20004fa6: 00ea7733 and a4,s4,a4 +20004faa: 01d71613 slli a2,a4,0x1d +20004fae: 003ede93 srli t4,t4,0x3 +20004fb2: 830d srli a4,a4,0x3 +20004fb4: 01d66633 or a2,a2,t4 +20004fb8: 00677733 and a4,a4,t1 +20004fbc: 4785 li a5,1 +20004fbe: b051 j 20004842 <__adddf3+0x128> +20004fc0: 8abe mv s5,a5 +20004fc2: 84b6 mv s1,a3 +20004fc4: ff2ff06f j 200047b6 <__adddf3+0x9c> +20004fc8: 01d71613 slli a2,a4,0x1d +20004fcc: 003e5e13 srli t3,t3,0x3 +20004fd0: 00ce6633 or a2,t3,a2 +20004fd4: 830d srli a4,a4,0x3 +20004fd6: 4781 li a5,0 +20004fd8: b6b9 j 20004b26 <__adddf3+0x40c> +20004fda: 800d srli s0,s0,0x3 +20004fdc: 87d6 mv a5,s5 +20004fde: b46d j 20004a88 <__adddf3+0x36e> + +20004fe0 <__divdf3>: +20004fe0: 7179 addi sp,sp,-48 +20004fe2: 0145d793 srli a5,a1,0x14 +20004fe6: d422 sw s0,40(sp) +20004fe8: d226 sw s1,36(sp) +20004fea: cc52 sw s4,24(sp) +20004fec: ca56 sw s5,20(sp) +20004fee: c266 sw s9,4(sp) +20004ff0: 00c59493 slli s1,a1,0xc +20004ff4: d606 sw ra,44(sp) +20004ff6: d04a sw s2,32(sp) +20004ff8: ce4e sw s3,28(sp) +20004ffa: c85a sw s6,16(sp) +20004ffc: c65e sw s7,12(sp) +20004ffe: c462 sw s8,8(sp) +20005000: c06a sw s10,0(sp) +20005002: 7ff7f793 andi a5,a5,2047 +20005006: 842a mv s0,a0 +20005008: 8cb2 mv s9,a2 +2000500a: 8a36 mv s4,a3 +2000500c: 80b1 srli s1,s1,0xc +2000500e: 01f5da93 srli s5,a1,0x1f +20005012: 12078963 beqz a5,20005144 <__divdf3+0x164> +20005016: 7ff00713 li a4,2047 +2000501a: 06e78a63 beq a5,a4,2000508e <__divdf3+0xae> +2000501e: 048e slli s1,s1,0x3 +20005020: 01d55b93 srli s7,a0,0x1d +20005024: 009bebb3 or s7,s7,s1 +20005028: 00800737 lui a4,0x800 +2000502c: c0178b13 addi s6,a5,-1023 +20005030: 00351c13 slli s8,a0,0x3 +20005034: 00ebebb3 or s7,s7,a4 +20005038: 4481 li s1,0 +2000503a: 4d01 li s10,0 +2000503c: 014a5793 srli a5,s4,0x14 +20005040: 00ca1413 slli s0,s4,0xc +20005044: 7ff7f793 andi a5,a5,2047 +20005048: 8031 srli s0,s0,0xc +2000504a: 01fa5a13 srli s4,s4,0x1f +2000504e: c3b5 beqz a5,200050b2 <__divdf3+0xd2> +20005050: 7ff00713 li a4,2047 +20005054: 0ce78e63 beq a5,a4,20005130 <__divdf3+0x150> +20005058: 040e slli s0,s0,0x3 +2000505a: 01dcd713 srli a4,s9,0x1d +2000505e: c0178793 addi a5,a5,-1023 +20005062: 8f41 or a4,a4,s0 +20005064: 00800437 lui s0,0x800 +20005068: 40fb0b33 sub s6,s6,a5 +2000506c: 8c59 or s0,s0,a4 +2000506e: 003c9793 slli a5,s9,0x3 +20005072: 4681 li a3,0 +20005074: 473d li a4,15 +20005076: 014ac5b3 xor a1,s5,s4 +2000507a: 18976d63 bltu a4,s1,20005214 <__divdf3+0x234> +2000507e: 20007737 lui a4,0x20007 +20005082: c4c70713 addi a4,a4,-948 # 20006c4c <__bi_50.6+0xc> +20005086: 048a slli s1,s1,0x2 +20005088: 94ba add s1,s1,a4 +2000508a: 4098 lw a4,0(s1) +2000508c: 8702 jr a4 +2000508e: 00a4ebb3 or s7,s1,a0 +20005092: 140b9c63 bnez s7,200051ea <__divdf3+0x20a> +20005096: 8b3e mv s6,a5 +20005098: 014a5793 srli a5,s4,0x14 +2000509c: 00ca1413 slli s0,s4,0xc +200050a0: 7ff7f793 andi a5,a5,2047 +200050a4: 4c01 li s8,0 +200050a6: 44a1 li s1,8 +200050a8: 4d09 li s10,2 +200050aa: 8031 srli s0,s0,0xc +200050ac: 01fa5a13 srli s4,s4,0x1f +200050b0: f3c5 bnez a5,20005050 <__divdf3+0x70> +200050b2: 019467b3 or a5,s0,s9 +200050b6: 14078563 beqz a5,20005200 <__divdf3+0x220> +200050ba: 36040663 beqz s0,20005426 <__divdf3+0x446> +200050be: 8522 mv a0,s0 +200050c0: 664010ef jal 20006724 <__clzsi2> +200050c4: 872a mv a4,a0 +200050c6: ff550793 addi a5,a0,-11 +200050ca: 46f5 li a3,29 +200050cc: 8e9d sub a3,a3,a5 +200050ce: ff870793 addi a5,a4,-8 +200050d2: 00f41433 sll s0,s0,a5 +200050d6: 00dcd6b3 srl a3,s9,a3 +200050da: 8c55 or s0,s0,a3 +200050dc: 00fc97b3 sll a5,s9,a5 +200050e0: 975a add a4,a4,s6 +200050e2: 3f370b13 addi s6,a4,1011 +200050e6: 4681 li a3,0 +200050e8: b771 j 20005074 <__divdf3+0x94> +200050ea: 7ff00793 li a5,2047 +200050ee: 4681 li a3,0 +200050f0: 4701 li a4,0 +200050f2: 50b2 lw ra,44(sp) +200050f4: 5422 lw s0,40(sp) +200050f6: 07d2 slli a5,a5,0x14 +200050f8: 05fe slli a1,a1,0x1f +200050fa: 8fd5 or a5,a5,a3 +200050fc: 8fcd or a5,a5,a1 +200050fe: 5492 lw s1,36(sp) +20005100: 5902 lw s2,32(sp) +20005102: 49f2 lw s3,28(sp) +20005104: 4a62 lw s4,24(sp) +20005106: 4ad2 lw s5,20(sp) +20005108: 4b42 lw s6,16(sp) +2000510a: 4bb2 lw s7,12(sp) +2000510c: 4c22 lw s8,8(sp) +2000510e: 4c92 lw s9,4(sp) +20005110: 4d02 lw s10,0(sp) +20005112: 853a mv a0,a4 +20005114: 85be mv a1,a5 +20005116: 6145 addi sp,sp,48 +20005118: 8082 ret +2000511a: 4781 li a5,0 +2000511c: 4681 li a3,0 +2000511e: 4701 li a4,0 +20005120: bfc9 j 200050f2 <__divdf3+0x112> +20005122: 4581 li a1,0 +20005124: 7ff00793 li a5,2047 +20005128: 000806b7 lui a3,0x80 +2000512c: 4701 li a4,0 +2000512e: b7d1 j 200050f2 <__divdf3+0x112> +20005130: 019467b3 or a5,s0,s9 +20005134: 801b0b13 addi s6,s6,-2047 +20005138: ebe9 bnez a5,2000520a <__divdf3+0x22a> +2000513a: 0024e493 ori s1,s1,2 +2000513e: 4401 li s0,0 +20005140: 4689 li a3,2 +20005142: bf0d j 20005074 <__divdf3+0x94> +20005144: 00a4ebb3 or s7,s1,a0 +20005148: 0a0b8763 beqz s7,200051f6 <__divdf3+0x216> +2000514c: 2a048f63 beqz s1,2000540a <__divdf3+0x42a> +20005150: 8526 mv a0,s1 +20005152: 5d2010ef jal 20006724 <__clzsi2> +20005156: 872a mv a4,a0 +20005158: ff550793 addi a5,a0,-11 +2000515c: 4bf5 li s7,29 +2000515e: ff870c13 addi s8,a4,-8 +20005162: 40fb8bb3 sub s7,s7,a5 +20005166: 018494b3 sll s1,s1,s8 +2000516a: 01745bb3 srl s7,s0,s7 +2000516e: 009bebb3 or s7,s7,s1 +20005172: 01841c33 sll s8,s0,s8 +20005176: c0d00793 li a5,-1011 +2000517a: 40e78b33 sub s6,a5,a4 +2000517e: 4481 li s1,0 +20005180: 4d01 li s10,0 +20005182: bd6d j 2000503c <__divdf3+0x5c> +20005184: 85d6 mv a1,s5 +20005186: 845e mv s0,s7 +20005188: 87e2 mv a5,s8 +2000518a: 4709 li a4,2 +2000518c: f4ed0fe3 beq s10,a4,200050ea <__divdf3+0x10a> +20005190: 470d li a4,3 +20005192: f8ed08e3 beq s10,a4,20005122 <__divdf3+0x142> +20005196: 4705 li a4,1 +20005198: f8ed01e3 beq s10,a4,2000511a <__divdf3+0x13a> +2000519c: 3ffb0f93 addi t6,s6,1023 +200051a0: 877e mv a4,t6 +200051a2: 3bf05a63 blez t6,20005556 <__divdf3+0x576> +200051a6: 0077f693 andi a3,a5,7 +200051aa: 30069463 bnez a3,200054b2 <__divdf3+0x4d2> +200051ae: 0037d513 srli a0,a5,0x3 +200051b2: 00741793 slli a5,s0,0x7 +200051b6: 0007d863 bgez a5,200051c6 <__divdf3+0x1e6> +200051ba: ff0007b7 lui a5,0xff000 +200051be: 17fd addi a5,a5,-1 # feffffff <__StackTop+0xdef7dfff> +200051c0: 400b0713 addi a4,s6,1024 +200051c4: 8c7d and s0,s0,a5 +200051c6: 7fe00793 li a5,2046 +200051ca: f2e7c0e3 blt a5,a4,200050ea <__divdf3+0x10a> +200051ce: 01d41693 slli a3,s0,0x1d +200051d2: 00941613 slli a2,s0,0x9 +200051d6: 7ff77793 andi a5,a4,2047 +200051da: 00a6e733 or a4,a3,a0 +200051de: 00c65693 srli a3,a2,0xc +200051e2: bf01 j 200050f2 <__divdf3+0x112> +200051e4: 85d2 mv a1,s4 +200051e6: 8d36 mv s10,a3 +200051e8: b74d j 2000518a <__divdf3+0x1aa> +200051ea: 8ba6 mv s7,s1 +200051ec: 8c2a mv s8,a0 +200051ee: 8b3e mv s6,a5 +200051f0: 44b1 li s1,12 +200051f2: 4d0d li s10,3 +200051f4: b5a1 j 2000503c <__divdf3+0x5c> +200051f6: 4c01 li s8,0 +200051f8: 4491 li s1,4 +200051fa: 4b01 li s6,0 +200051fc: 4d05 li s10,1 +200051fe: bd3d j 2000503c <__divdf3+0x5c> +20005200: 0014e493 ori s1,s1,1 +20005204: 4401 li s0,0 +20005206: 4685 li a3,1 +20005208: b5b5 j 20005074 <__divdf3+0x94> +2000520a: 0034e493 ori s1,s1,3 +2000520e: 87e6 mv a5,s9 +20005210: 468d li a3,3 +20005212: b58d j 20005074 <__divdf3+0x94> +20005214: 1f746263 bltu s0,s7,200053f8 <__divdf3+0x418> +20005218: 1c8b8e63 beq s7,s0,200053f4 <__divdf3+0x414> +2000521c: 86e2 mv a3,s8 +2000521e: 1b7d addi s6,s6,-1 +20005220: 4c01 li s8,0 +20005222: 00841713 slli a4,s0,0x8 +20005226: 01075313 srli t1,a4,0x10 +2000522a: 026bd433 divu s0,s7,t1 +2000522e: 0187d613 srli a2,a5,0x18 +20005232: 8e59 or a2,a2,a4 +20005234: 01061893 slli a7,a2,0x10 +20005238: 0108d893 srli a7,a7,0x10 +2000523c: 0106d713 srli a4,a3,0x10 +20005240: 00879813 slli a6,a5,0x8 +20005244: 026bfbb3 remu s7,s7,t1 +20005248: 02888533 mul a0,a7,s0 +2000524c: 0bc2 slli s7,s7,0x10 +2000524e: 017767b3 or a5,a4,s7 +20005252: 00a7f863 bgeu a5,a0,20005262 <__divdf3+0x282> +20005256: 97b2 add a5,a5,a2 +20005258: fff40713 addi a4,s0,-1 # 7fffff +2000525c: 24c7f663 bgeu a5,a2,200054a8 <__divdf3+0x4c8> +20005260: 843a mv s0,a4 +20005262: 8f89 sub a5,a5,a0 +20005264: 0267d733 divu a4,a5,t1 +20005268: 06c2 slli a3,a3,0x10 +2000526a: 82c1 srli a3,a3,0x10 +2000526c: 0267f7b3 remu a5,a5,t1 +20005270: 02e88fb3 mul t6,a7,a4 +20005274: 07c2 slli a5,a5,0x10 +20005276: 8edd or a3,a3,a5 +20005278: 01f6f863 bgeu a3,t6,20005288 <__divdf3+0x2a8> +2000527c: 96b2 add a3,a3,a2 +2000527e: fff70793 addi a5,a4,-1 +20005282: 20c6fe63 bgeu a3,a2,2000549e <__divdf3+0x4be> +20005286: 873e mv a4,a5 +20005288: 0442 slli s0,s0,0x10 +2000528a: 8c59 or s0,s0,a4 +2000528c: 01041793 slli a5,s0,0x10 +20005290: 01081e13 slli t3,a6,0x10 +20005294: 83c1 srli a5,a5,0x10 +20005296: 010e5e13 srli t3,t3,0x10 +2000529a: 01085e93 srli t4,a6,0x10 +2000529e: 01045513 srli a0,s0,0x10 +200052a2: 02fe8733 mul a4,t4,a5 +200052a6: 41f686b3 sub a3,a3,t6 +200052aa: 03c78f33 mul t5,a5,t3 +200052ae: 03c50fb3 mul t6,a0,t3 +200052b2: 010f5793 srli a5,t5,0x10 +200052b6: 977e add a4,a4,t6 +200052b8: 97ba add a5,a5,a4 +200052ba: 03d50533 mul a0,a0,t4 +200052be: 01f7f463 bgeu a5,t6,200052c6 <__divdf3+0x2e6> +200052c2: 6741 lui a4,0x10 +200052c4: 953a add a0,a0,a4 +200052c6: 010f1f93 slli t6,t5,0x10 +200052ca: 0107d713 srli a4,a5,0x10 +200052ce: 01079f13 slli t5,a5,0x10 +200052d2: 010fdf93 srli t6,t6,0x10 +200052d6: 00a707b3 add a5,a4,a0 +200052da: 9f7e add t5,t5,t6 +200052dc: 0ef6e263 bltu a3,a5,200053c0 <__divdf3+0x3e0> +200052e0: 0cf68e63 beq a3,a5,200053bc <__divdf3+0x3dc> +200052e4: 41ec0f33 sub t5,s8,t5 +200052e8: 01ec3c33 sltu s8,s8,t5 +200052ec: 8e9d sub a3,a3,a5 +200052ee: 3ffb0f93 addi t6,s6,1023 +200052f2: 418686b3 sub a3,a3,s8 +200052f6: 877e mv a4,t6 +200052f8: 16d60463 beq a2,a3,20005460 <__divdf3+0x480> +200052fc: 0266d7b3 divu a5,a3,t1 +20005300: 010f5513 srli a0,t5,0x10 +20005304: 0266f6b3 remu a3,a3,t1 +20005308: 02f882b3 mul t0,a7,a5 +2000530c: 06c2 slli a3,a3,0x10 +2000530e: 8ec9 or a3,a3,a0 +20005310: 0056fb63 bgeu a3,t0,20005326 <__divdf3+0x346> +20005314: 96b2 add a3,a3,a2 +20005316: fff78513 addi a0,a5,-1 +2000531a: 1ac6e263 bltu a3,a2,200054be <__divdf3+0x4de> +2000531e: 1a56f063 bgeu a3,t0,200054be <__divdf3+0x4de> +20005322: 17f9 addi a5,a5,-2 +20005324: 96b2 add a3,a3,a2 +20005326: 405686b3 sub a3,a3,t0 +2000532a: 0266d533 divu a0,a3,t1 +2000532e: 0f42 slli t5,t5,0x10 +20005330: 010f5f13 srli t5,t5,0x10 +20005334: 0266f6b3 remu a3,a3,t1 +20005338: 02a888b3 mul a7,a7,a0 +2000533c: 06c2 slli a3,a3,0x10 +2000533e: 00df6f33 or t5,t5,a3 +20005342: 011f7b63 bgeu t5,a7,20005358 <__divdf3+0x378> +20005346: 9f32 add t5,t5,a2 +20005348: fff50693 addi a3,a0,-1 +2000534c: 16cf6b63 bltu t5,a2,200054c2 <__divdf3+0x4e2> +20005350: 171f7963 bgeu t5,a7,200054c2 <__divdf3+0x4e2> +20005354: 1579 addi a0,a0,-2 +20005356: 9f32 add t5,t5,a2 +20005358: 07c2 slli a5,a5,0x10 +2000535a: 8fc9 or a5,a5,a0 +2000535c: 01079693 slli a3,a5,0x10 +20005360: 82c1 srli a3,a3,0x10 +20005362: 0107d293 srli t0,a5,0x10 +20005366: 02de8533 mul a0,t4,a3 +2000536a: 411f0f33 sub t5,t5,a7 +2000536e: 03c28333 mul t1,t0,t3 +20005372: 02de0e33 mul t3,t3,a3 +20005376: 951a add a0,a0,t1 +20005378: 010e5693 srli a3,t3,0x10 +2000537c: 96aa add a3,a3,a0 +2000537e: 025e8eb3 mul t4,t4,t0 +20005382: 0066f463 bgeu a3,t1,2000538a <__divdf3+0x3aa> +20005386: 6541 lui a0,0x10 +20005388: 9eaa add t4,t4,a0 +2000538a: 0106d513 srli a0,a3,0x10 +2000538e: 0e42 slli t3,t3,0x10 +20005390: 010e5e13 srli t3,t3,0x10 +20005394: 06c2 slli a3,a3,0x10 +20005396: 9576 add a0,a0,t4 +20005398: 96f2 add a3,a3,t3 +2000539a: 0aaf6763 bltu t5,a0,20005448 <__divdf3+0x468> +2000539e: 0aaf0363 beq t5,a0,20005444 <__divdf3+0x464> +200053a2: c0200693 li a3,-1022 +200053a6: 0017e793 ori a5,a5,1 +200053aa: 12db4863 blt s6,a3,200054da <__divdf3+0x4fa> +200053ae: 00478513 addi a0,a5,4 +200053b2: 00f537b3 sltu a5,a0,a5 +200053b6: 810d srli a0,a0,0x3 +200053b8: 943e add s0,s0,a5 +200053ba: bbe5 j 200051b2 <__divdf3+0x1d2> +200053bc: f3ec74e3 bgeu s8,t5,200052e4 <__divdf3+0x304> +200053c0: 010c0733 add a4,s8,a6 +200053c4: 01873533 sltu a0,a4,s8 +200053c8: 00c50fb3 add t6,a0,a2 +200053cc: 96fe add a3,a3,t6 +200053ce: 8c3a mv s8,a4 +200053d0: fff40f93 addi t6,s0,-1 +200053d4: 0cd67163 bgeu a2,a3,20005496 <__divdf3+0x4b6> +200053d8: 00f6e663 bltu a3,a5,200053e4 <__divdf3+0x404> +200053dc: 0ad79f63 bne a5,a3,2000549a <__divdf3+0x4ba> +200053e0: 0be77d63 bgeu a4,t5,2000549a <__divdf3+0x4ba> +200053e4: 9742 add a4,a4,a6 +200053e6: 01073533 sltu a0,a4,a6 +200053ea: 9532 add a0,a0,a2 +200053ec: 1479 addi s0,s0,-2 +200053ee: 96aa add a3,a3,a0 +200053f0: 8c3a mv s8,a4 +200053f2: bdcd j 200052e4 <__divdf3+0x304> +200053f4: e2fc64e3 bltu s8,a5,2000521c <__divdf3+0x23c> +200053f8: 01fb9693 slli a3,s7,0x1f +200053fc: 001c5713 srli a4,s8,0x1 +20005400: 001bdb93 srli s7,s7,0x1 +20005404: 8ed9 or a3,a3,a4 +20005406: 0c7e slli s8,s8,0x1f +20005408: bd29 j 20005222 <__divdf3+0x242> +2000540a: 31a010ef jal 20006724 <__clzsi2> +2000540e: 01550793 addi a5,a0,21 # 10015 +20005412: 46f1 li a3,28 +20005414: 02050713 addi a4,a0,32 +20005418: d4f6d2e3 bge a3,a5,2000515c <__divdf3+0x17c> +2000541c: 1561 addi a0,a0,-8 +2000541e: 00a41bb3 sll s7,s0,a0 +20005422: 4c01 li s8,0 +20005424: bb89 j 20005176 <__divdf3+0x196> +20005426: 8566 mv a0,s9 +20005428: 2fc010ef jal 20006724 <__clzsi2> +2000542c: 01550793 addi a5,a0,21 +20005430: 46f1 li a3,28 +20005432: 02050713 addi a4,a0,32 +20005436: c8f6dae3 bge a3,a5,200050ca <__divdf3+0xea> +2000543a: 1561 addi a0,a0,-8 +2000543c: 00ac9433 sll s0,s9,a0 +20005440: 4781 li a5,0 +20005442: b979 j 200050e0 <__divdf3+0x100> +20005444: d4068ee3 beqz a3,200051a0 <__divdf3+0x1c0> +20005448: 9f32 add t5,t5,a2 +2000544a: 88fa mv a7,t5 +2000544c: fff78313 addi t1,a5,-1 +20005450: 06cf6b63 bltu t5,a2,200054c6 <__divdf3+0x4e6> +20005454: 12af6a63 bltu t5,a0,20005588 <__divdf3+0x5a8> +20005458: 14af0363 beq t5,a0,2000559e <__divdf3+0x5be> +2000545c: 879a mv a5,t1 +2000545e: b791 j 200053a2 <__divdf3+0x3c2> +20005460: 4501 li a0,0 +20005462: 4785 li a5,1 +20005464: f5f04ae3 bgtz t6,200053b8 <__divdf3+0x3d8> +20005468: 080f9663 bnez t6,200054f4 <__divdf3+0x514> +2000546c: 80000737 lui a4,0x80000 +20005470: 01f41793 slli a5,s0,0x1f +20005474: 177d addi a4,a4,-1 # 7fffffff <__StackTop+0x5ff7dfff> +20005476: 8fd9 or a5,a5,a4 +20005478: 8005 srli s0,s0,0x1 +2000547a: 00478713 addi a4,a5,4 +2000547e: 00f737b3 sltu a5,a4,a5 +20005482: 943e add s0,s0,a5 +20005484: 87ba mv a5,a4 +20005486: 00841713 slli a4,s0,0x8 +2000548a: 12075963 bgez a4,200055bc <__divdf3+0x5dc> +2000548e: 4785 li a5,1 +20005490: 4681 li a3,0 +20005492: 4701 li a4,0 +20005494: b9b9 j 200050f2 <__divdf3+0x112> +20005496: 02d60e63 beq a2,a3,200054d2 <__divdf3+0x4f2> +2000549a: 847e mv s0,t6 +2000549c: b5a1 j 200052e4 <__divdf3+0x304> +2000549e: dff6f4e3 bgeu a3,t6,20005286 <__divdf3+0x2a6> +200054a2: 1779 addi a4,a4,-2 +200054a4: 96b2 add a3,a3,a2 +200054a6: b3cd j 20005288 <__divdf3+0x2a8> +200054a8: daa7fce3 bgeu a5,a0,20005260 <__divdf3+0x280> +200054ac: 1479 addi s0,s0,-2 +200054ae: 97b2 add a5,a5,a2 +200054b0: bb4d j 20005262 <__divdf3+0x282> +200054b2: 00f7f693 andi a3,a5,15 +200054b6: 4611 li a2,4 +200054b8: cec68be3 beq a3,a2,200051ae <__divdf3+0x1ce> +200054bc: bdcd j 200053ae <__divdf3+0x3ce> +200054be: 87aa mv a5,a0 +200054c0: b59d j 20005326 <__divdf3+0x346> +200054c2: 8536 mv a0,a3 +200054c4: bd51 j 20005358 <__divdf3+0x378> +200054c6: 879a mv a5,t1 +200054c8: eca89de3 bne a7,a0,200053a2 <__divdf3+0x3c2> +200054cc: ed069be3 bne a3,a6,200053a2 <__divdf3+0x3c2> +200054d0: b9c1 j 200051a0 <__divdf3+0x1c0> +200054d2: f561 bnez a0,2000549a <__divdf3+0x4ba> +200054d4: f0f6e8e3 bltu a3,a5,200053e4 <__divdf3+0x404> +200054d8: b711 j 200053dc <__divdf3+0x3fc> +200054da: c0100713 li a4,-1023 +200054de: 00eb1c63 bne s6,a4,200054f6 <__divdf3+0x516> +200054e2: 0017d713 srli a4,a5,0x1 +200054e6: 00176713 ori a4,a4,1 +200054ea: 01f41793 slli a5,s0,0x1f +200054ee: 8fd9 or a5,a5,a4 +200054f0: 8005 srli s0,s0,0x1 +200054f2: b761 j 2000547a <__divdf3+0x49a> +200054f4: 57fd li a5,-1 +200054f6: 4705 li a4,1 +200054f8: 41f70733 sub a4,a4,t6 +200054fc: 03800693 li a3,56 +20005500: c0e6cde3 blt a3,a4,2000511a <__divdf3+0x13a> +20005504: 46fd li a3,31 +20005506: 0ae6d263 bge a3,a4,200055aa <__divdf3+0x5ca> +2000550a: 5685 li a3,-31 +2000550c: 41f686b3 sub a3,a3,t6 +20005510: 02000613 li a2,32 +20005514: 00d456b3 srl a3,s0,a3 +20005518: 00c70763 beq a4,a2,20005526 <__divdf3+0x546> +2000551c: 43eb0b13 addi s6,s6,1086 +20005520: 01641433 sll s0,s0,s6 +20005524: 8fc1 or a5,a5,s0 +20005526: 00f037b3 snez a5,a5 +2000552a: 8fd5 or a5,a5,a3 +2000552c: 0077f713 andi a4,a5,7 +20005530: 4681 li a3,0 +20005532: cf11 beqz a4,2000554e <__divdf3+0x56e> +20005534: 00f7f613 andi a2,a5,15 +20005538: 4511 li a0,4 +2000553a: 4701 li a4,0 +2000553c: 00a60963 beq a2,a0,2000554e <__divdf3+0x56e> +20005540: 00a78633 add a2,a5,a0 +20005544: 00f637b3 sltu a5,a2,a5 +20005548: 01d79713 slli a4,a5,0x1d +2000554c: 87b2 mv a5,a2 +2000554e: 838d srli a5,a5,0x3 +20005550: 8f5d or a4,a4,a5 +20005552: 4781 li a5,0 +20005554: be79 j 200050f2 <__divdf3+0x112> +20005556: fa0f90e3 bnez t6,200054f6 <__divdf3+0x516> +2000555a: 0077f693 andi a3,a5,7 +2000555e: 0017d613 srli a2,a5,0x1 +20005562: 4b7d li s6,31 +20005564: 4705 li a4,1 +20005566: e2ad bnez a3,200055c8 <__divdf3+0x5e8> +20005568: 01641b33 sll s6,s0,s6 +2000556c: 8e55 or a2,a2,a3 +2000556e: 00cb67b3 or a5,s6,a2 +20005572: 0077f693 andi a3,a5,7 +20005576: 00e45433 srl s0,s0,a4 +2000557a: d691 beqz a3,20005486 <__divdf3+0x4a6> +2000557c: 00f7f713 andi a4,a5,15 +20005580: 4691 li a3,4 +20005582: f0d702e3 beq a4,a3,20005486 <__divdf3+0x4a6> +20005586: bdd5 j 2000547a <__divdf3+0x49a> +20005588: 00181313 slli t1,a6,0x1 +2000558c: 010338b3 sltu a7,t1,a6 +20005590: 98b2 add a7,a7,a2 +20005592: 98fa add a7,a7,t5 +20005594: 17f9 addi a5,a5,-2 +20005596: 881a mv a6,t1 +20005598: f2a88ae3 beq a7,a0,200054cc <__divdf3+0x4ec> +2000559c: b519 j 200053a2 <__divdf3+0x3c2> +2000559e: fed865e3 bltu a6,a3,20005588 <__divdf3+0x5a8> +200055a2: 879a mv a5,t1 +200055a4: df069fe3 bne a3,a6,200053a2 <__divdf3+0x3c2> +200055a8: bee5 j 200051a0 <__divdf3+0x1c0> +200055aa: 41eb0b13 addi s6,s6,1054 +200055ae: 016796b3 sll a3,a5,s6 +200055b2: 00d036b3 snez a3,a3 +200055b6: 00e7d633 srl a2,a5,a4 +200055ba: b77d j 20005568 <__divdf3+0x588> +200055bc: 00941693 slli a3,s0,0x9 +200055c0: 82b1 srli a3,a3,0xc +200055c2: 01d41713 slli a4,s0,0x1d +200055c6: b761 j 2000554e <__divdf3+0x56e> +200055c8: 00e7f6b3 and a3,a5,a4 +200055cc: bf71 j 20005568 <__divdf3+0x588> + +200055ce <__gedf2>: +200055ce: 0145d893 srli a7,a1,0x14 +200055d2: 001007b7 lui a5,0x100 +200055d6: 0146d713 srli a4,a3,0x14 +200055da: 882a mv a6,a0 +200055dc: 17fd addi a5,a5,-1 # fffff +200055de: 7ff00313 li t1,2047 +200055e2: 7ff8f893 andi a7,a7,2047 +200055e6: 00677533 and a0,a4,t1 +200055ea: 8e42 mv t3,a6 +200055ec: 00b7f733 and a4,a5,a1 +200055f0: 8eb2 mv t4,a2 +200055f2: 8ff5 and a5,a5,a3 +200055f4: 81fd srli a1,a1,0x1f +200055f6: 82fd srli a3,a3,0x1f +200055f8: 02688e63 beq a7,t1,20005634 <__gedf2+0x66> +200055fc: 00650f63 beq a0,t1,2000561a <__gedf2+0x4c> +20005600: 04089763 bnez a7,2000564e <__gedf2+0x80> +20005604: 01076833 or a6,a4,a6 +20005608: e121 bnez a0,20005648 <__gedf2+0x7a> +2000560a: 8e5d or a2,a2,a5 +2000560c: c235 beqz a2,20005670 <__gedf2+0xa2> +2000560e: 06081c63 bnez a6,20005686 <__gedf2+0xb8> +20005612: 00169513 slli a0,a3,0x1 +20005616: 157d addi a0,a0,-1 +20005618: 8082 ret +2000561a: 8e5d or a2,a2,a5 +2000561c: e23d bnez a2,20005682 <__gedf2+0xb4> +2000561e: 00089563 bnez a7,20005628 <__gedf2+0x5a> +20005622: 01076733 or a4,a4,a6 +20005626: d775 beqz a4,20005612 <__gedf2+0x44> +20005628: 00d59b63 bne a1,a3,2000563e <__gedf2+0x70> +2000562c: 00159513 slli a0,a1,0x1 +20005630: 157d addi a0,a0,-1 +20005632: 8082 ret +20005634: 01076733 or a4,a4,a6 +20005638: e729 bnez a4,20005682 <__gedf2+0xb4> +2000563a: 03150e63 beq a0,a7,20005676 <__gedf2+0xa8> +2000563e: 40b005b3 neg a1,a1 +20005642: 0015e513 ori a0,a1,1 +20005646: 8082 ret +20005648: fc0805e3 beqz a6,20005612 <__gedf2+0x44> +2000564c: bff1 j 20005628 <__gedf2+0x5a> +2000564e: d965 beqz a0,2000563e <__gedf2+0x70> +20005650: fed597e3 bne a1,a3,2000563e <__gedf2+0x70> +20005654: ff1545e3 blt a0,a7,2000563e <__gedf2+0x70> +20005658: fca8cae3 blt a7,a0,2000562c <__gedf2+0x5e> +2000565c: fee7e1e3 bltu a5,a4,2000563e <__gedf2+0x70> +20005660: fcf716e3 bne a4,a5,2000562c <__gedf2+0x5e> +20005664: fdceede3 bltu t4,t3,2000563e <__gedf2+0x70> +20005668: 4501 li a0,0 +2000566a: fdde61e3 bltu t3,t4,2000562c <__gedf2+0x5e> +2000566e: 8082 ret +20005670: fc0817e3 bnez a6,2000563e <__gedf2+0x70> +20005674: 8082 ret +20005676: 8fd1 or a5,a5,a2 +20005678: e789 bnez a5,20005682 <__gedf2+0xb4> +2000567a: fcd592e3 bne a1,a3,2000563e <__gedf2+0x70> +2000567e: 4501 li a0,0 +20005680: 8082 ret +20005682: 5579 li a0,-2 +20005684: 8082 ret +20005686: fcd58be3 beq a1,a3,2000565c <__gedf2+0x8e> +2000568a: bf55 j 2000563e <__gedf2+0x70> + +2000568c <__ledf2>: +2000568c: 0145d893 srli a7,a1,0x14 +20005690: 001007b7 lui a5,0x100 +20005694: 0146d713 srli a4,a3,0x14 +20005698: 882a mv a6,a0 +2000569a: 17fd addi a5,a5,-1 # fffff +2000569c: 7ff00313 li t1,2047 +200056a0: 7ff8f893 andi a7,a7,2047 +200056a4: 00677533 and a0,a4,t1 +200056a8: 8e42 mv t3,a6 +200056aa: 00b7f733 and a4,a5,a1 +200056ae: 8eb2 mv t4,a2 +200056b0: 8ff5 and a5,a5,a3 +200056b2: 81fd srli a1,a1,0x1f +200056b4: 82fd srli a3,a3,0x1f +200056b6: 04688363 beq a7,t1,200056fc <__ledf2+0x70> +200056ba: 00650f63 beq a0,t1,200056d8 <__ledf2+0x4c> +200056be: 04089b63 bnez a7,20005714 <__ledf2+0x88> +200056c2: 01076833 or a6,a4,a6 +200056c6: e93d bnez a0,2000573c <__ledf2+0xb0> +200056c8: 8e5d or a2,a2,a5 +200056ca: c615 beqz a2,200056f6 <__ledf2+0x6a> +200056cc: 06081d63 bnez a6,20005746 <__ledf2+0xba> +200056d0: 00169513 slli a0,a3,0x1 +200056d4: 157d addi a0,a0,-1 +200056d6: 8082 ret +200056d8: 8e5d or a2,a2,a5 +200056da: 4509 li a0,2 +200056dc: ee19 bnez a2,200056fa <__ledf2+0x6e> +200056de: 00089563 bnez a7,200056e8 <__ledf2+0x5c> +200056e2: 01076733 or a4,a4,a6 +200056e6: d76d beqz a4,200056d0 <__ledf2+0x44> +200056e8: 04d58663 beq a1,a3,20005734 <__ledf2+0xa8> +200056ec: 40b005b3 neg a1,a1 +200056f0: 0015e513 ori a0,a1,1 +200056f4: 8082 ret +200056f6: fe081be3 bnez a6,200056ec <__ledf2+0x60> +200056fa: 8082 ret +200056fc: 01076733 or a4,a4,a6 +20005700: e329 bnez a4,20005742 <__ledf2+0xb6> +20005702: ff1515e3 bne a0,a7,200056ec <__ledf2+0x60> +20005706: 8fd1 or a5,a5,a2 +20005708: 4509 li a0,2 +2000570a: fbe5 bnez a5,200056fa <__ledf2+0x6e> +2000570c: fed590e3 bne a1,a3,200056ec <__ledf2+0x60> +20005710: 4501 li a0,0 +20005712: 8082 ret +20005714: dd61 beqz a0,200056ec <__ledf2+0x60> +20005716: fcd59be3 bne a1,a3,200056ec <__ledf2+0x60> +2000571a: fd1549e3 blt a0,a7,200056ec <__ledf2+0x60> +2000571e: 00a8cb63 blt a7,a0,20005734 <__ledf2+0xa8> +20005722: fce7e5e3 bltu a5,a4,200056ec <__ledf2+0x60> +20005726: 00f71763 bne a4,a5,20005734 <__ledf2+0xa8> +2000572a: fdcee1e3 bltu t4,t3,200056ec <__ledf2+0x60> +2000572e: 4501 li a0,0 +20005730: fdde75e3 bgeu t3,t4,200056fa <__ledf2+0x6e> +20005734: 00159513 slli a0,a1,0x1 +20005738: 157d addi a0,a0,-1 +2000573a: 8082 ret +2000573c: f8080ae3 beqz a6,200056d0 <__ledf2+0x44> +20005740: b765 j 200056e8 <__ledf2+0x5c> +20005742: 4509 li a0,2 +20005744: 8082 ret +20005746: fcd58ee3 beq a1,a3,20005722 <__ledf2+0x96> +2000574a: b74d j 200056ec <__ledf2+0x60> + +2000574c <__muldf3>: +2000574c: 7179 addi sp,sp,-48 +2000574e: 0145d793 srli a5,a1,0x14 +20005752: d422 sw s0,40(sp) +20005754: d226 sw s1,36(sp) +20005756: cc52 sw s4,24(sp) +20005758: ca56 sw s5,20(sp) +2000575a: c462 sw s8,8(sp) +2000575c: 00c59413 slli s0,a1,0xc +20005760: d606 sw ra,44(sp) +20005762: d04a sw s2,32(sp) +20005764: ce4e sw s3,28(sp) +20005766: c85a sw s6,16(sp) +20005768: c65e sw s7,12(sp) +2000576a: c266 sw s9,4(sp) +2000576c: c06a sw s10,0(sp) +2000576e: 7ff7f793 andi a5,a5,2047 +20005772: 8aaa mv s5,a0 +20005774: 8c32 mv s8,a2 +20005776: 84b6 mv s1,a3 +20005778: 8031 srli s0,s0,0xc +2000577a: 01f5da13 srli s4,a1,0x1f +2000577e: 34078263 beqz a5,20005ac2 <__muldf3+0x376> +20005782: 7ff00713 li a4,2047 +20005786: 22e78463 beq a5,a4,200059ae <__muldf3+0x262> +2000578a: 040e slli s0,s0,0x3 +2000578c: 01d55713 srli a4,a0,0x1d +20005790: 8f41 or a4,a4,s0 +20005792: 00800437 lui s0,0x800 +20005796: c0178b13 addi s6,a5,-1023 +2000579a: 00351b93 slli s7,a0,0x3 +2000579e: 8c59 or s0,s0,a4 +200057a0: 4c81 li s9,0 +200057a2: 4d01 li s10,0 +200057a4: 0144d793 srli a5,s1,0x14 +200057a8: 00c49713 slli a4,s1,0xc +200057ac: 7ff7f793 andi a5,a5,2047 +200057b0: 00c75a93 srli s5,a4,0xc +200057b4: 80fd srli s1,s1,0x1f +200057b6: 20078f63 beqz a5,200059d4 <__muldf3+0x288> +200057ba: 7ff00713 li a4,2047 +200057be: 2ce78e63 beq a5,a4,20005a9a <__muldf3+0x34e> +200057c2: c0178793 addi a5,a5,-1023 +200057c6: 4729 li a4,10 +200057c8: 9b3e add s6,s6,a5 +200057ca: 25974c63 blt a4,s9,20005a22 <__muldf3+0x2d6> +200057ce: 003a9713 slli a4,s5,0x3 +200057d2: 01dc5793 srli a5,s8,0x1d +200057d6: 8fd9 or a5,a5,a4 +200057d8: 009a46b3 xor a3,s4,s1 +200057dc: 00800737 lui a4,0x800 +200057e0: 4609 li a2,2 +200057e2: 00e7eab3 or s5,a5,a4 +200057e6: 003c1813 slli a6,s8,0x3 +200057ea: 85b6 mv a1,a3 +200057ec: 4781 li a5,0 +200057ee: 03965163 bge a2,s9,20005810 <__muldf3+0xc4> +200057f2: 4605 li a2,1 +200057f4: 01961633 sll a2,a2,s9 +200057f8: 53067713 andi a4,a2,1328 +200057fc: 22071463 bnez a4,20005a24 <__muldf3+0x2d8> +20005800: 24067593 andi a1,a2,576 +20005804: 3c059b63 bnez a1,20005bda <__muldf3+0x48e> +20005808: 08867613 andi a2,a2,136 +2000580c: 3a061a63 bnez a2,20005bc0 <__muldf3+0x474> +20005810: 010b9793 slli a5,s7,0x10 +20005814: 01081613 slli a2,a6,0x10 +20005818: 83c1 srli a5,a5,0x10 +2000581a: 8241 srli a2,a2,0x10 +2000581c: 010bdb93 srli s7,s7,0x10 +20005820: 01085813 srli a6,a6,0x10 +20005824: 02c78733 mul a4,a5,a2 +20005828: 02cb8533 mul a0,s7,a2 +2000582c: 01075313 srli t1,a4,0x10 +20005830: 02f805b3 mul a1,a6,a5 +20005834: 95aa add a1,a1,a0 +20005836: 932e add t1,t1,a1 +20005838: 030b8eb3 mul t4,s7,a6 +2000583c: 00a37463 bgeu t1,a0,20005844 <__muldf3+0xf8> +20005840: 65c1 lui a1,0x10 +20005842: 9eae add t4,t4,a1 +20005844: 010a9e13 slli t3,s5,0x10 +20005848: 0742 slli a4,a4,0x10 +2000584a: 010e5e13 srli t3,t3,0x10 +2000584e: 010ada93 srli s5,s5,0x10 +20005852: 8341 srli a4,a4,0x10 +20005854: 01031593 slli a1,t1,0x10 +20005858: 03cb88b3 mul a7,s7,t3 +2000585c: 95ba add a1,a1,a4 +2000585e: 01035313 srli t1,t1,0x10 +20005862: 03c78733 mul a4,a5,t3 +20005866: 02fa87b3 mul a5,s5,a5 +2000586a: 01075513 srli a0,a4,0x10 +2000586e: 97c6 add a5,a5,a7 +20005870: 953e add a0,a0,a5 +20005872: 035b8bb3 mul s7,s7,s5 +20005876: 01157463 bgeu a0,a7,2000587e <__muldf3+0x132> +2000587a: 67c1 lui a5,0x10 +2000587c: 9bbe add s7,s7,a5 +2000587e: 01041793 slli a5,s0,0x10 +20005882: 01071893 slli a7,a4,0x10 +20005886: 83c1 srli a5,a5,0x10 +20005888: 8041 srli s0,s0,0x10 +2000588a: 0108d893 srli a7,a7,0x10 +2000588e: 01051713 slli a4,a0,0x10 +20005892: 02f80fb3 mul t6,a6,a5 +20005896: 9746 add a4,a4,a7 +20005898: 8141 srli a0,a0,0x10 +2000589a: 933a add t1,t1,a4 +2000589c: 955e add a0,a0,s7 +2000589e: 02c408b3 mul a7,s0,a2 +200058a2: 02c78f33 mul t5,a5,a2 +200058a6: 9fc6 add t6,t6,a7 +200058a8: 010f5613 srli a2,t5,0x10 +200058ac: 967e add a2,a2,t6 +200058ae: 02880833 mul a6,a6,s0 +200058b2: 01167463 bgeu a2,a7,200058ba <__muldf3+0x16e> +200058b6: 68c1 lui a7,0x10 +200058b8: 9846 add a6,a6,a7 +200058ba: 0f42 slli t5,t5,0x10 +200058bc: 01061893 slli a7,a2,0x10 +200058c0: 010f5f13 srli t5,t5,0x10 +200058c4: 8241 srli a2,a2,0x10 +200058c6: 9f46 add t5,t5,a7 +200058c8: 9642 add a2,a2,a6 +200058ca: 03c408b3 mul a7,s0,t3 +200058ce: 03c78833 mul a6,a5,t3 +200058d2: 02fa87b3 mul a5,s5,a5 +200058d6: 01085e13 srli t3,a6,0x10 +200058da: 97c6 add a5,a5,a7 +200058dc: 9e3e add t3,t3,a5 +200058de: 028a8ab3 mul s5,s5,s0 +200058e2: 011e7463 bgeu t3,a7,200058ea <__muldf3+0x19e> +200058e6: 67c1 lui a5,0x10 +200058e8: 9abe add s5,s5,a5 +200058ea: 01081893 slli a7,a6,0x10 +200058ee: 0108d893 srli a7,a7,0x10 +200058f2: 010e1793 slli a5,t3,0x10 +200058f6: 01d30833 add a6,t1,t4 +200058fa: 97c6 add a5,a5,a7 +200058fc: 953e add a0,a0,a5 +200058fe: 00e83733 sltu a4,a6,a4 +20005902: 01e808b3 add a7,a6,t5 +20005906: 972a add a4,a4,a0 +20005908: 963a add a2,a2,a4 +2000590a: 0108b833 sltu a6,a7,a6 +2000590e: 9832 add a6,a6,a2 +20005910: 00f537b3 sltu a5,a0,a5 +20005914: 00a73533 sltu a0,a4,a0 +20005918: 8fc9 or a5,a5,a0 +2000591a: 00e63733 sltu a4,a2,a4 +2000591e: 010e5e13 srli t3,t3,0x10 +20005922: 00c83633 sltu a2,a6,a2 +20005926: 97f2 add a5,a5,t3 +20005928: 8f51 or a4,a4,a2 +2000592a: 00989b93 slli s7,a7,0x9 +2000592e: 973e add a4,a4,a5 +20005930: 00bbebb3 or s7,s7,a1 +20005934: 9756 add a4,a4,s5 +20005936: 0726 slli a4,a4,0x9 +20005938: 01703bb3 snez s7,s7 +2000593c: 0178d893 srli a7,a7,0x17 +20005940: 01785413 srli s0,a6,0x17 +20005944: 011bebb3 or s7,s7,a7 +20005948: 0826 slli a6,a6,0x9 +2000594a: 00771793 slli a5,a4,0x7 +2000594e: 8c59 or s0,s0,a4 +20005950: 010bebb3 or s7,s7,a6 +20005954: 1007c963 bltz a5,20005a66 <__muldf3+0x31a> +20005958: 3ffb0793 addi a5,s6,1023 +2000595c: 20f05b63 blez a5,20005b72 <__muldf3+0x426> +20005960: 007bf713 andi a4,s7,7 +20005964: c715 beqz a4,20005990 <__muldf3+0x244> +20005966: 00fbf713 andi a4,s7,15 +2000596a: 4611 li a2,4 +2000596c: 02c70263 beq a4,a2,20005990 <__muldf3+0x244> +20005970: 004b8713 addi a4,s7,4 +20005974: 01773bb3 sltu s7,a4,s7 +20005978: 945e add s0,s0,s7 +2000597a: 8bba mv s7,a4 +2000597c: 00741713 slli a4,s0,0x7 +20005980: 00075863 bgez a4,20005990 <__muldf3+0x244> +20005984: ff000737 lui a4,0xff000 +20005988: 177d addi a4,a4,-1 # feffffff <__StackTop+0xdef7dfff> +2000598a: 400b0793 addi a5,s6,1024 +2000598e: 8c79 and s0,s0,a4 +20005990: 7fe00713 li a4,2046 +20005994: 24f74963 blt a4,a5,20005be6 <__muldf3+0x49a> +20005998: 01d41713 slli a4,s0,0x1d +2000599c: 003bdb93 srli s7,s7,0x3 +200059a0: 0426 slli s0,s0,0x9 +200059a2: 7ff7f793 andi a5,a5,2047 +200059a6: 01776733 or a4,a4,s7 +200059aa: 8031 srli s0,s0,0xc +200059ac: a849 j 20005a3e <__muldf3+0x2f2> +200059ae: 00a46bb3 or s7,s0,a0 +200059b2: 1a0b9463 bnez s7,20005b5a <__muldf3+0x40e> +200059b6: 8b3e mv s6,a5 +200059b8: 0144d793 srli a5,s1,0x14 +200059bc: 00c49713 slli a4,s1,0xc +200059c0: 7ff7f793 andi a5,a5,2047 +200059c4: 4401 li s0,0 +200059c6: 4ca1 li s9,8 +200059c8: 4d09 li s10,2 +200059ca: 00c75a93 srli s5,a4,0xc +200059ce: 80fd srli s1,s1,0x1f +200059d0: de0795e3 bnez a5,200057ba <__muldf3+0x6e> +200059d4: 018ae833 or a6,s5,s8 +200059d8: 12080863 beqz a6,20005b08 <__muldf3+0x3bc> +200059dc: 220a8863 beqz s5,20005c0c <__muldf3+0x4c0> +200059e0: 8556 mv a0,s5 +200059e2: 543000ef jal 20006724 <__clzsi2> +200059e6: 87aa mv a5,a0 +200059e8: ff550713 addi a4,a0,-11 +200059ec: 46f5 li a3,29 +200059ee: 8e99 sub a3,a3,a4 +200059f0: ff878813 addi a6,a5,-8 # fff8 +200059f4: 010a9733 sll a4,s5,a6 +200059f8: 00dc56b3 srl a3,s8,a3 +200059fc: 00e6eab3 or s5,a3,a4 +20005a00: 010c1833 sll a6,s8,a6 +20005a04: 40fb07b3 sub a5,s6,a5 +20005a08: 4729 li a4,10 +20005a0a: c0d78b13 addi s6,a5,-1011 +20005a0e: 01974a63 blt a4,s9,20005a22 <__muldf3+0x2d6> +20005a12: 4789 li a5,2 +20005a14: 009a46b3 xor a3,s4,s1 +20005a18: df97dce3 bge a5,s9,20005810 <__muldf3+0xc4> +20005a1c: 85b6 mv a1,a3 +20005a1e: 4781 li a5,0 +20005a20: bbc9 j 200057f2 <__muldf3+0xa6> +20005a22: 85d2 mv a1,s4 +20005a24: 4789 li a5,2 +20005a26: 1afd0463 beq s10,a5,20005bce <__muldf3+0x482> +20005a2a: 478d li a5,3 +20005a2c: 12fd0c63 beq s10,a5,20005b64 <__muldf3+0x418> +20005a30: 4785 li a5,1 +20005a32: 86ae mv a3,a1 +20005a34: 04fd1463 bne s10,a5,20005a7c <__muldf3+0x330> +20005a38: 4781 li a5,0 +20005a3a: 4401 li s0,0 +20005a3c: 4701 li a4,0 +20005a3e: 07d2 slli a5,a5,0x14 +20005a40: 50b2 lw ra,44(sp) +20005a42: 8fc1 or a5,a5,s0 +20005a44: 5422 lw s0,40(sp) +20005a46: 06fe slli a3,a3,0x1f +20005a48: 8fd5 or a5,a5,a3 +20005a4a: 5492 lw s1,36(sp) +20005a4c: 5902 lw s2,32(sp) +20005a4e: 49f2 lw s3,28(sp) +20005a50: 4a62 lw s4,24(sp) +20005a52: 4ad2 lw s5,20(sp) +20005a54: 4b42 lw s6,16(sp) +20005a56: 4bb2 lw s7,12(sp) +20005a58: 4c22 lw s8,8(sp) +20005a5a: 4c92 lw s9,4(sp) +20005a5c: 4d02 lw s10,0(sp) +20005a5e: 853a mv a0,a4 +20005a60: 85be mv a1,a5 +20005a62: 6145 addi sp,sp,48 +20005a64: 8082 ret +20005a66: 001bd793 srli a5,s7,0x1 +20005a6a: 001bfb93 andi s7,s7,1 +20005a6e: 0177e7b3 or a5,a5,s7 +20005a72: 01f41b93 slli s7,s0,0x1f +20005a76: 0177ebb3 or s7,a5,s7 +20005a7a: 8005 srli s0,s0,0x1 +20005a7c: 400b0793 addi a5,s6,1024 +20005a80: 0b05 addi s6,s6,1 +20005a82: 0ef05863 blez a5,20005b72 <__muldf3+0x426> +20005a86: 007bf713 andi a4,s7,7 +20005a8a: ee0709e3 beqz a4,2000597c <__muldf3+0x230> +20005a8e: 00fbf713 andi a4,s7,15 +20005a92: 4611 li a2,4 +20005a94: ecc71ee3 bne a4,a2,20005970 <__muldf3+0x224> +20005a98: b5d5 j 2000597c <__muldf3+0x230> +20005a9a: 018ae833 or a6,s5,s8 +20005a9e: 7ffb0b13 addi s6,s6,2047 +20005aa2: 08081b63 bnez a6,20005b38 <__muldf3+0x3ec> +20005aa6: 002ce793 ori a5,s9,2 +20005aaa: 4729 li a4,10 +20005aac: f6f74be3 blt a4,a5,20005a22 <__muldf3+0x2d6> +20005ab0: 009a45b3 xor a1,s4,s1 +20005ab4: 86ae mv a3,a1 +20005ab6: 1c0c8e63 beqz s9,20005c92 <__muldf3+0x546> +20005aba: 8cbe mv s9,a5 +20005abc: 4a81 li s5,0 +20005abe: 4789 li a5,2 +20005ac0: bb0d j 200057f2 <__muldf3+0xa6> +20005ac2: 00a46bb3 or s7,s0,a0 +20005ac6: 020b8c63 beqz s7,20005afe <__muldf3+0x3b2> +20005aca: 12040363 beqz s0,20005bf0 <__muldf3+0x4a4> +20005ace: 8522 mv a0,s0 +20005ad0: 455000ef jal 20006724 <__clzsi2> +20005ad4: 872a mv a4,a0 +20005ad6: ff550693 addi a3,a0,-11 +20005ada: 47f5 li a5,29 +20005adc: ff870b93 addi s7,a4,-8 +20005ae0: 8f95 sub a5,a5,a3 +20005ae2: 01741433 sll s0,s0,s7 +20005ae6: 00fad7b3 srl a5,s5,a5 +20005aea: 8c5d or s0,s0,a5 +20005aec: 017a9bb3 sll s7,s5,s7 +20005af0: c0d00793 li a5,-1011 +20005af4: 40e78b33 sub s6,a5,a4 +20005af8: 4c81 li s9,0 +20005afa: 4d01 li s10,0 +20005afc: b165 j 200057a4 <__muldf3+0x58> +20005afe: 4401 li s0,0 +20005b00: 4c91 li s9,4 +20005b02: 4b01 li s6,0 +20005b04: 4d05 li s10,1 +20005b06: b979 j 200057a4 <__muldf3+0x58> +20005b08: 001cec93 ori s9,s9,1 +20005b0c: 47a9 li a5,10 +20005b0e: f197cae3 blt a5,s9,20005a22 <__muldf3+0x2d6> +20005b12: 009a45b3 xor a1,s4,s1 +20005b16: 4709 li a4,2 +20005b18: 86ae mv a3,a1 +20005b1a: 4a81 li s5,0 +20005b1c: 4785 li a5,1 +20005b1e: cd974ae3 blt a4,s9,200057f2 <__muldf3+0xa6> +20005b22: 4709 li a4,2 +20005b24: 0ae78563 beq a5,a4,20005bce <__muldf3+0x482> +20005b28: 4d05 li s10,1 +20005b2a: 4785 li a5,1 +20005b2c: 4401 li s0,0 +20005b2e: 4b81 li s7,0 +20005b30: 86ae mv a3,a1 +20005b32: f4fd15e3 bne s10,a5,20005a7c <__muldf3+0x330> +20005b36: b709 j 20005a38 <__muldf3+0x2ec> +20005b38: 003cec93 ori s9,s9,3 +20005b3c: 4729 li a4,10 +20005b3e: 15974563 blt a4,s9,20005c88 <__muldf3+0x53c> +20005b42: 4705 li a4,1 +20005b44: 01971633 sll a2,a4,s9 +20005b48: 08867613 andi a2,a2,136 +20005b4c: 009a46b3 xor a3,s4,s1 +20005b50: 8862 mv a6,s8 +20005b52: 478d li a5,3 +20005b54: ca060ee3 beqz a2,20005810 <__muldf3+0xc4> +20005b58: a0a5 j 20005bc0 <__muldf3+0x474> +20005b5a: 8baa mv s7,a0 +20005b5c: 8b3e mv s6,a5 +20005b5e: 4cb1 li s9,12 +20005b60: 4d0d li s10,3 +20005b62: b189 j 200057a4 <__muldf3+0x58> +20005b64: 4681 li a3,0 +20005b66: 7ff00793 li a5,2047 +20005b6a: 00080437 lui s0,0x80 +20005b6e: 4701 li a4,0 +20005b70: b5f9 j 20005a3e <__muldf3+0x2f2> +20005b72: 4605 li a2,1 +20005b74: ebdd bnez a5,20005c2a <__muldf3+0x4de> +20005b76: 41eb0b13 addi s6,s6,1054 +20005b7a: 016b97b3 sll a5,s7,s6 +20005b7e: 00f037b3 snez a5,a5 +20005b82: 01641b33 sll s6,s0,s6 +20005b86: 0167e7b3 or a5,a5,s6 +20005b8a: 00cbd733 srl a4,s7,a2 +20005b8e: 8f5d or a4,a4,a5 +20005b90: 00777793 andi a5,a4,7 +20005b94: 00c45633 srl a2,s0,a2 +20005b98: cf81 beqz a5,20005bb0 <__muldf3+0x464> +20005b9a: 00f77793 andi a5,a4,15 +20005b9e: 4591 li a1,4 +20005ba0: 00b78863 beq a5,a1,20005bb0 <__muldf3+0x464> +20005ba4: 00b707b3 add a5,a4,a1 +20005ba8: 00e7b733 sltu a4,a5,a4 +20005bac: 963a add a2,a2,a4 +20005bae: 873e mv a4,a5 +20005bb0: 00861793 slli a5,a2,0x8 +20005bb4: 0e07d163 bgez a5,20005c96 <__muldf3+0x54a> +20005bb8: 4785 li a5,1 +20005bba: 4401 li s0,0 +20005bbc: 4701 li a4,0 +20005bbe: b541 j 20005a3e <__muldf3+0x2f2> +20005bc0: 8d3e mv s10,a5 +20005bc2: 4789 li a5,2 +20005bc4: 85a6 mv a1,s1 +20005bc6: 8456 mv s0,s5 +20005bc8: 8bc2 mv s7,a6 +20005bca: e6fd10e3 bne s10,a5,20005a2a <__muldf3+0x2de> +20005bce: 86ae mv a3,a1 +20005bd0: 7ff00793 li a5,2047 +20005bd4: 4401 li s0,0 +20005bd6: 4701 li a4,0 +20005bd8: b59d j 20005a3e <__muldf3+0x2f2> +20005bda: 4681 li a3,0 +20005bdc: 7ff00793 li a5,2047 +20005be0: 00080437 lui s0,0x80 +20005be4: bda9 j 20005a3e <__muldf3+0x2f2> +20005be6: 7ff00793 li a5,2047 +20005bea: 4401 li s0,0 +20005bec: 4701 li a4,0 +20005bee: bd81 j 20005a3e <__muldf3+0x2f2> +20005bf0: 335000ef jal 20006724 <__clzsi2> +20005bf4: 01550693 addi a3,a0,21 +20005bf8: 47f1 li a5,28 +20005bfa: 02050713 addi a4,a0,32 +20005bfe: ecd7dee3 bge a5,a3,20005ada <__muldf3+0x38e> +20005c02: 1561 addi a0,a0,-8 +20005c04: 00aa9433 sll s0,s5,a0 +20005c08: 4b81 li s7,0 +20005c0a: b5dd j 20005af0 <__muldf3+0x3a4> +20005c0c: 8562 mv a0,s8 +20005c0e: 317000ef jal 20006724 <__clzsi2> +20005c12: 01550713 addi a4,a0,21 +20005c16: 46f1 li a3,28 +20005c18: 02050793 addi a5,a0,32 +20005c1c: dce6d8e3 bge a3,a4,200059ec <__muldf3+0x2a0> +20005c20: 1561 addi a0,a0,-8 +20005c22: 00ac1ab3 sll s5,s8,a0 +20005c26: 4801 li a6,0 +20005c28: bbf1 j 20005a04 <__muldf3+0x2b8> +20005c2a: 8e1d sub a2,a2,a5 +20005c2c: 03800713 li a4,56 +20005c30: e0c744e3 blt a4,a2,20005a38 <__muldf3+0x2ec> +20005c34: 477d li a4,31 +20005c36: f4c750e3 bge a4,a2,20005b76 <__muldf3+0x42a> +20005c3a: 5705 li a4,-31 +20005c3c: 40f707b3 sub a5,a4,a5 +20005c40: 02000713 li a4,32 +20005c44: 00f457b3 srl a5,s0,a5 +20005c48: 00e60863 beq a2,a4,20005c58 <__muldf3+0x50c> +20005c4c: 43eb0b13 addi s6,s6,1086 +20005c50: 01641b33 sll s6,s0,s6 +20005c54: 016bebb3 or s7,s7,s6 +20005c58: 01703733 snez a4,s7 +20005c5c: 8f5d or a4,a4,a5 +20005c5e: 00777793 andi a5,a4,7 +20005c62: 4401 li s0,0 +20005c64: cf91 beqz a5,20005c80 <__muldf3+0x534> +20005c66: 00f77613 andi a2,a4,15 +20005c6a: 4591 li a1,4 +20005c6c: 4781 li a5,0 +20005c6e: 00b60963 beq a2,a1,20005c80 <__muldf3+0x534> +20005c72: 00b70633 add a2,a4,a1 +20005c76: 00e63733 sltu a4,a2,a4 +20005c7a: 01d71793 slli a5,a4,0x1d +20005c7e: 8732 mv a4,a2 +20005c80: 830d srli a4,a4,0x3 +20005c82: 8f5d or a4,a4,a5 +20005c84: 4781 li a5,0 +20005c86: bb65 j 20005a3e <__muldf3+0x2f2> +20005c88: 4681 li a3,0 +20005c8a: 00080437 lui s0,0x80 +20005c8e: 4701 li a4,0 +20005c90: b37d j 20005a3e <__muldf3+0x2f2> +20005c92: 4789 li a5,2 +20005c94: b579 j 20005b22 <__muldf3+0x3d6> +20005c96: 00961413 slli s0,a2,0x9 +20005c9a: 8031 srli s0,s0,0xc +20005c9c: 01d61793 slli a5,a2,0x1d +20005ca0: b7c5 j 20005c80 <__muldf3+0x534> + +20005ca2 <__subdf3>: +20005ca2: 001007b7 lui a5,0x100 +20005ca6: 17fd addi a5,a5,-1 # fffff +20005ca8: 1101 addi sp,sp,-32 +20005caa: 00b7f8b3 and a7,a5,a1 +20005cae: 0146d813 srli a6,a3,0x14 +20005cb2: 8ff5 and a5,a5,a3 +20005cb4: 088e slli a7,a7,0x3 +20005cb6: 00379713 slli a4,a5,0x3 +20005cba: ca26 sw s1,20(sp) +20005cbc: c452 sw s4,8(sp) +20005cbe: c256 sw s5,4(sp) +20005cc0: 01d55a13 srli s4,a0,0x1d +20005cc4: 0145da93 srli s5,a1,0x14 +20005cc8: 01d65793 srli a5,a2,0x1d +20005ccc: 01f5d493 srli s1,a1,0x1f +20005cd0: 7ff00313 li t1,2047 +20005cd4: ce06 sw ra,28(sp) +20005cd6: cc22 sw s0,24(sp) +20005cd8: c84a sw s2,16(sp) +20005cda: c64e sw s3,12(sp) +20005cdc: 7ff87813 andi a6,a6,2047 +20005ce0: 011a6a33 or s4,s4,a7 +20005ce4: 8e32 mv t3,a2 +20005ce6: 8fd9 or a5,a5,a4 +20005ce8: 82fd srli a3,a3,0x1f +20005cea: 006afab3 and s5,s5,t1 +20005cee: 85a6 mv a1,s1 +20005cf0: 00351e93 slli t4,a0,0x3 +20005cf4: 00361893 slli a7,a2,0x3 +20005cf8: 16680863 beq a6,t1,20005e68 <__subdf3+0x1c6> +20005cfc: 0016c693 xori a3,a3,1 +20005d00: 410a8733 sub a4,s5,a6 +20005d04: 0cd48563 beq s1,a3,20005dce <__subdf3+0x12c> +20005d08: 5ae05263 blez a4,200062ac <__subdf3+0x60a> +20005d0c: 18080b63 beqz a6,20005ea2 <__subdf3+0x200> +20005d10: 386a8f63 beq s5,t1,200060ae <__subdf3+0x40c> +20005d14: 03800693 li a3,56 +20005d18: 1ae6c363 blt a3,a4,20005ebe <__subdf3+0x21c> +20005d1c: 008006b7 lui a3,0x800 +20005d20: 8fd5 or a5,a5,a3 +20005d22: 46fd li a3,31 +20005d24: 46e6c463 blt a3,a4,2000618c <__subdf3+0x4ea> +20005d28: 02000693 li a3,32 +20005d2c: 8e99 sub a3,a3,a4 +20005d2e: 00d79433 sll s0,a5,a3 +20005d32: 00d896b3 sll a3,a7,a3 +20005d36: 00e8d8b3 srl a7,a7,a4 +20005d3a: 00d036b3 snez a3,a3 +20005d3e: 01146433 or s0,s0,a7 +20005d42: 00e7d733 srl a4,a5,a4 +20005d46: 8c55 or s0,s0,a3 +20005d48: 40ea0a33 sub s4,s4,a4 +20005d4c: 408e8433 sub s0,t4,s0 +20005d50: 008ebeb3 sltu t4,t4,s0 +20005d54: 41da0a33 sub s4,s4,t4 +20005d58: 008a1793 slli a5,s4,0x8 +20005d5c: 2e07c363 bltz a5,20006042 <__subdf3+0x3a0> +20005d60: 00747793 andi a5,s0,7 +20005d64: 32078d63 beqz a5,2000609e <__subdf3+0x3fc> +20005d68: 00f47793 andi a5,s0,15 +20005d6c: 4711 li a4,4 +20005d6e: 32e78863 beq a5,a4,2000609e <__subdf3+0x3fc> +20005d72: 00440793 addi a5,s0,4 # 80004 +20005d76: 0087b433 sltu s0,a5,s0 +20005d7a: 9a22 add s4,s4,s0 +20005d7c: 843e mv s0,a5 +20005d7e: 008a1793 slli a5,s4,0x8 +20005d82: 3007de63 bgez a5,2000609e <__subdf3+0x3fc> +20005d86: 001a8793 addi a5,s5,1 +20005d8a: 7ff00713 li a4,2047 +20005d8e: 0014f593 andi a1,s1,1 +20005d92: 26e78f63 beq a5,a4,20006010 <__subdf3+0x36e> +20005d96: ff800737 lui a4,0xff800 +20005d9a: 177d addi a4,a4,-1 # ff7fffff <__StackTop+0xdf77dfff> +20005d9c: 7ff7f793 andi a5,a5,2047 +20005da0: 00ea7733 and a4,s4,a4 +20005da4: 01d71613 slli a2,a4,0x1d +20005da8: 800d srli s0,s0,0x3 +20005daa: 0726 slli a4,a4,0x9 +20005dac: 8e41 or a2,a2,s0 +20005dae: 8331 srli a4,a4,0xc +20005db0: 40f2 lw ra,28(sp) +20005db2: 4462 lw s0,24(sp) +20005db4: 07d2 slli a5,a5,0x14 +20005db6: 05fe slli a1,a1,0x1f +20005db8: 8fd9 or a5,a5,a4 +20005dba: 8fcd or a5,a5,a1 +20005dbc: 44d2 lw s1,20(sp) +20005dbe: 4942 lw s2,16(sp) +20005dc0: 49b2 lw s3,12(sp) +20005dc2: 4a22 lw s4,8(sp) +20005dc4: 4a92 lw s5,4(sp) +20005dc6: 8532 mv a0,a2 +20005dc8: 85be mv a1,a5 +20005dca: 6105 addi sp,sp,32 +20005dcc: 8082 ret +20005dce: 5ae05863 blez a4,2000637e <__subdf3+0x6dc> +20005dd2: 20081c63 bnez a6,20005fea <__subdf3+0x348> +20005dd6: 0117e733 or a4,a5,a7 +20005dda: 22070e63 beqz a4,20006016 <__subdf3+0x374> +20005dde: fffa8713 addi a4,s5,-1 +20005de2: 46070c63 beqz a4,2000625a <__subdf3+0x5b8> +20005de6: 5c6a8463 beq s5,t1,200063ae <__subdf3+0x70c> +20005dea: 03800693 li a3,56 +20005dee: 20e6c863 blt a3,a4,20005ffe <__subdf3+0x35c> +20005df2: 46fd li a3,31 +20005df4: 52e6c063 blt a3,a4,20006314 <__subdf3+0x672> +20005df8: 02000613 li a2,32 +20005dfc: 8e19 sub a2,a2,a4 +20005dfe: 00c796b3 sll a3,a5,a2 +20005e02: 00c89633 sll a2,a7,a2 +20005e06: 00e8d8b3 srl a7,a7,a4 +20005e0a: 00c03633 snez a2,a2 +20005e0e: 00e7d733 srl a4,a5,a4 +20005e12: 0116e6b3 or a3,a3,a7 +20005e16: 00c6e7b3 or a5,a3,a2 +20005e1a: 9a3a add s4,s4,a4 +20005e1c: 9ebe add t4,t4,a5 +20005e1e: 00feb7b3 sltu a5,t4,a5 +20005e22: 9a3e add s4,s4,a5 +20005e24: 8476 mv s0,t4 +20005e26: 008a1793 slli a5,s4,0x8 +20005e2a: f207dbe3 bgez a5,20005d60 <__subdf3+0xbe> +20005e2e: 0a85 addi s5,s5,1 +20005e30: 7ff00793 li a5,2047 +20005e34: 4cfa8c63 beq s5,a5,2000630c <__subdf3+0x66a> +20005e38: ff8007b7 lui a5,0xff800 +20005e3c: 17fd addi a5,a5,-1 # ff7fffff <__StackTop+0xdf77dfff> +20005e3e: 00fa77b3 and a5,s4,a5 +20005e42: 00145713 srli a4,s0,0x1 +20005e46: 8805 andi s0,s0,1 +20005e48: 01f79693 slli a3,a5,0x1f +20005e4c: 8f41 or a4,a4,s0 +20005e4e: 0017da13 srli s4,a5,0x1 +20005e52: 00e6e433 or s0,a3,a4 +20005e56: 00747793 andi a5,s0,7 +20005e5a: d395 beqz a5,20005d7e <__subdf3+0xdc> +20005e5c: 00f47793 andi a5,s0,15 +20005e60: 4711 li a4,4 +20005e62: f0e798e3 bne a5,a4,20005d72 <__subdf3+0xd0> +20005e66: bf21 j 20005d7e <__subdf3+0xdc> +20005e68: 0117e733 or a4,a5,a7 +20005e6c: 801a8613 addi a2,s5,-2047 +20005e70: c769 beqz a4,20005f3a <__subdf3+0x298> +20005e72: 0cd48863 beq s1,a3,20005f42 <__subdf3+0x2a0> +20005e76: 10060763 beqz a2,20005f84 <__subdf3+0x2e2> +20005e7a: 2c0a8a63 beqz s5,2000614e <__subdf3+0x4ac> +20005e7e: 003e1713 slli a4,t3,0x3 +20005e82: 01d79613 slli a2,a5,0x1d +20005e86: 830d srli a4,a4,0x3 +20005e88: 84b6 mv s1,a3 +20005e8a: 8e59 or a2,a2,a4 +20005e8c: 838d srli a5,a5,0x3 +20005e8e: 8e5d or a2,a2,a5 +20005e90: 20060963 beqz a2,200060a2 <__subdf3+0x400> +20005e94: 4581 li a1,0 +20005e96: 7ff00793 li a5,2047 +20005e9a: 00080737 lui a4,0x80 +20005e9e: 4601 li a2,0 +20005ea0: bf01 j 20005db0 <__subdf3+0x10e> +20005ea2: 0117e733 or a4,a5,a7 +20005ea6: 16070863 beqz a4,20006016 <__subdf3+0x374> +20005eaa: fffa8713 addi a4,s5,-1 +20005eae: 42070863 beqz a4,200062de <__subdf3+0x63c> +20005eb2: 1e6a8e63 beq s5,t1,200060ae <__subdf3+0x40c> +20005eb6: 03800693 li a3,56 +20005eba: e6e6d4e3 bge a3,a4,20005d22 <__subdf3+0x80> +20005ebe: fffe8413 addi s0,t4,-1 +20005ec2: 008ebeb3 sltu t4,t4,s0 +20005ec6: 41da0a33 sub s4,s4,t4 +20005eca: 008a1713 slli a4,s4,0x8 +20005ece: 008007b7 lui a5,0x800 +20005ed2: ea0750e3 bgez a4,20005d72 <__subdf3+0xd0> +20005ed6: fff78a13 addi s4,a5,-1 # 7fffff +20005eda: 547d li s0,-1 +20005edc: 8552 mv a0,s4 +20005ede: 047000ef jal 20006724 <__clzsi2> +20005ee2: ff850713 addi a4,a0,-8 +20005ee6: 02000793 li a5,32 +20005eea: 40e786b3 sub a3,a5,a4 +20005eee: 00d456b3 srl a3,s0,a3 +20005ef2: 00ea1a33 sll s4,s4,a4 +20005ef6: 0146e6b3 or a3,a3,s4 +20005efa: 00e41433 sll s0,s0,a4 +20005efe: 23574b63 blt a4,s5,20006134 <__subdf3+0x492> +20005f02: 41570733 sub a4,a4,s5 +20005f06: 0705 addi a4,a4,1 # 80001 +20005f08: 8f99 sub a5,a5,a4 +20005f0a: 00f41633 sll a2,s0,a5 +20005f0e: 00c03633 snez a2,a2 +20005f12: 00e45a33 srl s4,s0,a4 +20005f16: 00f697b3 sll a5,a3,a5 +20005f1a: 01466633 or a2,a2,s4 +20005f1e: 00c7e433 or s0,a5,a2 +20005f22: 00e6da33 srl s4,a3,a4 +20005f26: 014467b3 or a5,s0,s4 +20005f2a: 4a81 li s5,0 +20005f2c: f78d bnez a5,20005e56 <__subdf3+0x1b4> +20005f2e: 0014f593 andi a1,s1,1 +20005f32: 4781 li a5,0 +20005f34: 4701 li a4,0 +20005f36: 4601 li a2,0 +20005f38: bda5 j 20005db0 <__subdf3+0x10e> +20005f3a: 0016c693 xori a3,a3,1 +20005f3e: f2d49ce3 bne s1,a3,20005e76 <__subdf3+0x1d4> +20005f42: 16060e63 beqz a2,200060be <__subdf3+0x41c> +20005f46: 2c0a9263 bnez s5,2000620a <__subdf3+0x568> +20005f4a: 8742 mv a4,a6 +20005f4c: 01da66b3 or a3,s4,t4 +20005f50: 52068b63 beqz a3,20006486 <__subdf3+0x7e4> +20005f54: fff70693 addi a3,a4,-1 +20005f58: 30068163 beqz a3,2000625a <__subdf3+0x5b8> +20005f5c: 7ff00613 li a2,2047 +20005f60: 2ac70563 beq a4,a2,2000620a <__subdf3+0x568> +20005f64: 03800613 li a2,56 +20005f68: 5ad65463 bge a2,a3,20006510 <__subdf3+0x86e> +20005f6c: 00879693 slli a3,a5,0x8 +20005f70: 00800a37 lui s4,0x800 +20005f74: 8aba mv s5,a4 +20005f76: 4401 li s0,0 +20005f78: ea06cbe3 bltz a3,20005e2e <__subdf3+0x18c> +20005f7c: 00188413 addi s0,a7,1 # 10001 +20005f80: 8a3e mv s4,a5 +20005f82: bbc5 j 20005d72 <__subdf3+0xd0> +20005f84: 001a8713 addi a4,s5,1 +20005f88: 7fe77713 andi a4,a4,2046 +20005f8c: 18071163 bnez a4,2000610e <__subdf3+0x46c> +20005f90: 0117e633 or a2,a5,a7 +20005f94: 01da6733 or a4,s4,t4 +20005f98: 280a9c63 bnez s5,20006230 <__subdf3+0x58e> +20005f9c: 46070e63 beqz a4,20006418 <__subdf3+0x776> +20005fa0: 14060d63 beqz a2,200060fa <__subdf3+0x458> +20005fa4: 411e85b3 sub a1,t4,a7 +20005fa8: 00beb633 sltu a2,t4,a1 +20005fac: 40fa0733 sub a4,s4,a5 +20005fb0: 8f11 sub a4,a4,a2 +20005fb2: 00871613 slli a2,a4,0x8 +20005fb6: 52065a63 bgez a2,200064ea <__subdf3+0x848> +20005fba: 41d88eb3 sub t4,a7,t4 +20005fbe: 01d8b8b3 sltu a7,a7,t4 +20005fc2: 414787b3 sub a5,a5,s4 +20005fc6: 411787b3 sub a5,a5,a7 +20005fca: 00fee733 or a4,t4,a5 +20005fce: 8476 mv s0,t4 +20005fd0: 84b6 mv s1,a3 +20005fd2: df31 beqz a4,20005f2e <__subdf3+0x28c> +20005fd4: 00879713 slli a4,a5,0x8 +20005fd8: 56075163 bgez a4,2000653a <__subdf3+0x898> +20005fdc: ff800737 lui a4,0xff800 +20005fe0: 177d addi a4,a4,-1 # ff7fffff <__StackTop+0xdf77dfff> +20005fe2: 8f7d and a4,a4,a5 +20005fe4: 85b6 mv a1,a3 +20005fe6: 4785 li a5,1 +20005fe8: bb75 j 20005da4 <__subdf3+0x102> +20005fea: 0c6a8263 beq s5,t1,200060ae <__subdf3+0x40c> +20005fee: 03800693 li a3,56 +20005ff2: 00e6c663 blt a3,a4,20005ffe <__subdf3+0x35c> +20005ff6: 008006b7 lui a3,0x800 +20005ffa: 8fd5 or a5,a5,a3 +20005ffc: bbdd j 20005df2 <__subdf3+0x150> +20005ffe: 008a1713 slli a4,s4,0x8 +20006002: 008007b7 lui a5,0x800 +20006006: 2a075063 bgez a4,200062a6 <__subdf3+0x604> +2000600a: 8a3e mv s4,a5 +2000600c: 4401 li s0,0 +2000600e: b505 j 20005e2e <__subdf3+0x18c> +20006010: 4701 li a4,0 +20006012: 4601 li a2,0 +20006014: bb71 j 20005db0 <__subdf3+0x10e> +20006016: 00351413 slli s0,a0,0x3 +2000601a: 800d srli s0,s0,0x3 +2000601c: 01da1613 slli a2,s4,0x1d +20006020: 7ff00713 li a4,2047 +20006024: 8e41 or a2,a2,s0 +20006026: 003a5793 srli a5,s4,0x3 +2000602a: e6ea82e3 beq s5,a4,20005e8e <__subdf3+0x1ec> +2000602e: 07b2 slli a5,a5,0xc +20006030: 00c7d713 srli a4,a5,0xc +20006034: 0014f593 andi a1,s1,1 +20006038: 7ffaf793 andi a5,s5,2047 +2000603c: bb95 j 20005db0 <__subdf3+0x10e> +2000603e: 84b6 mv s1,a3 +20006040: 4a85 li s5,1 +20006042: 0a26 slli s4,s4,0x9 +20006044: 009a5a13 srli s4,s4,0x9 +20006048: e80a1ae3 bnez s4,20005edc <__subdf3+0x23a> +2000604c: 8522 mv a0,s0 +2000604e: 2dd9 jal 20006724 <__clzsi2> +20006050: 01850713 addi a4,a0,24 +20006054: 47fd li a5,31 +20006056: e8e7d8e3 bge a5,a4,20005ee6 <__subdf3+0x244> +2000605a: 1561 addi a0,a0,-8 +2000605c: 00a416b3 sll a3,s0,a0 +20006060: 15574a63 blt a4,s5,200061b4 <__subdf3+0x512> +20006064: 41570433 sub s0,a4,s5 +20006068: 00140713 addi a4,s0,1 +2000606c: 46e7d463 bge a5,a4,200064d4 <__subdf3+0x832> +20006070: 1405 addi s0,s0,-31 +20006072: 02000793 li a5,32 +20006076: 0086d433 srl s0,a3,s0 +2000607a: 00f70a63 beq a4,a5,2000608e <__subdf3+0x3ec> +2000607e: 04000793 li a5,64 +20006082: 8f99 sub a5,a5,a4 +20006084: 00f697b3 sll a5,a3,a5 +20006088: 00f037b3 snez a5,a5 +2000608c: 8c5d or s0,s0,a5 +2000608e: ea0400e3 beqz s0,20005f2e <__subdf3+0x28c> +20006092: 00747793 andi a5,s0,7 +20006096: 4a81 li s5,0 +20006098: dc0792e3 bnez a5,20005e5c <__subdf3+0x1ba> +2000609c: 4a01 li s4,0 +2000609e: 800d srli s0,s0,0x3 +200060a0: bfb5 j 2000601c <__subdf3+0x37a> +200060a2: 0014f593 andi a1,s1,1 +200060a6: 7ff00793 li a5,2047 +200060aa: 4701 li a4,0 +200060ac: b311 j 20005db0 <__subdf3+0x10e> +200060ae: 050e slli a0,a0,0x3 +200060b0: 810d srli a0,a0,0x3 +200060b2: 01da1613 slli a2,s4,0x1d +200060b6: 8e49 or a2,a2,a0 +200060b8: 003a5793 srli a5,s4,0x3 +200060bc: bbc9 j 20005e8e <__subdf3+0x1ec> +200060be: 001a8713 addi a4,s5,1 +200060c2: 7fe77693 andi a3,a4,2046 +200060c6: 10069163 bnez a3,200061c8 <__subdf3+0x526> +200060ca: 01da6733 or a4,s4,t4 +200060ce: 3a0a9563 bnez s5,20006478 <__subdf3+0x7d6> +200060d2: 0117e6b3 or a3,a5,a7 +200060d6: 40070463 beqz a4,200064de <__subdf3+0x83c> +200060da: c285 beqz a3,200060fa <__subdf3+0x458> +200060dc: 98f6 add a7,a7,t4 +200060de: 01d8beb3 sltu t4,a7,t4 +200060e2: 97d2 add a5,a5,s4 +200060e4: 01d78a33 add s4,a5,t4 +200060e8: 008a1793 slli a5,s4,0x8 +200060ec: 8ec6 mv t4,a7 +200060ee: 4207c363 bltz a5,20006514 <__subdf3+0x872> +200060f2: 0148e7b3 or a5,a7,s4 +200060f6: e2078ce3 beqz a5,20005f2e <__subdf3+0x28c> +200060fa: 003ede93 srli t4,t4,0x3 +200060fe: 01da1613 slli a2,s4,0x1d +20006102: 01d66633 or a2,a2,t4 +20006106: 003a5793 srli a5,s4,0x3 +2000610a: 4a81 li s5,0 +2000610c: b70d j 2000602e <__subdf3+0x38c> +2000610e: 411e8433 sub s0,t4,a7 +20006112: 008eb633 sltu a2,t4,s0 +20006116: 40fa0733 sub a4,s4,a5 +2000611a: 8f11 sub a4,a4,a2 +2000611c: 00871613 slli a2,a4,0x8 +20006120: 0e064d63 bltz a2,2000621a <__subdf3+0x578> +20006124: 00e46633 or a2,s0,a4 +20006128: 8a3a mv s4,a4 +2000612a: fe19 bnez a2,20006048 <__subdf3+0x3a6> +2000612c: 4581 li a1,0 +2000612e: 4781 li a5,0 +20006130: 4701 li a4,0 +20006132: b9bd j 20005db0 <__subdf3+0x10e> +20006134: ff800a37 lui s4,0xff800 +20006138: 1a7d addi s4,s4,-1 # ff7fffff <__StackTop+0xdf77dfff> +2000613a: 00747793 andi a5,s0,7 +2000613e: 40ea8ab3 sub s5,s5,a4 +20006142: 0146fa33 and s4,a3,s4 +20006146: c20791e3 bnez a5,20005d68 <__subdf3+0xc6> +2000614a: 800d srli s0,s0,0x3 +2000614c: bdc1 j 2000601c <__subdf3+0x37a> +2000614e: 8742 mv a4,a6 +20006150: 01da6633 or a2,s4,t4 +20006154: ca7d beqz a2,2000624a <__subdf3+0x5a8> +20006156: fff70613 addi a2,a4,-1 +2000615a: 28060763 beqz a2,200063e8 <__subdf3+0x746> +2000615e: 7ff00593 li a1,2047 +20006162: d0b70ee3 beq a4,a1,20005e7e <__subdf3+0x1dc> +20006166: 03800593 li a1,56 +2000616a: 32c5de63 bge a1,a2,200064a6 <__subdf3+0x804> +2000616e: fff88413 addi s0,a7,-1 +20006172: 0088b8b3 sltu a7,a7,s0 +20006176: 41178a33 sub s4,a5,a7 +2000617a: 008a1613 slli a2,s4,0x8 +2000617e: 008007b7 lui a5,0x800 +20006182: 3a064963 bltz a2,20006534 <__subdf3+0x892> +20006186: 84b6 mv s1,a3 +20006188: 8aba mv s5,a4 +2000618a: b6e5 j 20005d72 <__subdf3+0xd0> +2000618c: fe070693 addi a3,a4,-32 +20006190: 02000613 li a2,32 +20006194: 00d7d6b3 srl a3,a5,a3 +20006198: 00c70a63 beq a4,a2,200061ac <__subdf3+0x50a> +2000619c: 04000613 li a2,64 +200061a0: 40e60733 sub a4,a2,a4 +200061a4: 00e797b3 sll a5,a5,a4 +200061a8: 00f8e8b3 or a7,a7,a5 +200061ac: 01103433 snez s0,a7 +200061b0: 8c55 or s0,s0,a3 +200061b2: be69 j 20005d4c <__subdf3+0xaa> +200061b4: ff8007b7 lui a5,0xff800 +200061b8: 17fd addi a5,a5,-1 # ff7fffff <__StackTop+0xdf77dfff> +200061ba: 8ff5 and a5,a5,a3 +200061bc: 01d79613 slli a2,a5,0x1d +200061c0: 40ea8ab3 sub s5,s5,a4 +200061c4: 838d srli a5,a5,0x3 +200061c6: b5a5 j 2000602e <__subdf3+0x38c> +200061c8: 7ff00693 li a3,2047 +200061cc: 2ad70263 beq a4,a3,20006470 <__subdf3+0x7ce> +200061d0: 98f6 add a7,a7,t4 +200061d2: 01d8beb3 sltu t4,a7,t4 +200061d6: 97d2 add a5,a5,s4 +200061d8: 97f6 add a5,a5,t4 +200061da: 0018d893 srli a7,a7,0x1 +200061de: 01f79413 slli s0,a5,0x1f +200061e2: 0078f693 andi a3,a7,7 +200061e6: 01146433 or s0,s0,a7 +200061ea: 0017da13 srli s4,a5,0x1 +200061ee: 34068e63 beqz a3,2000654a <__subdf3+0x8a8> +200061f2: 00f47693 andi a3,s0,15 +200061f6: 4611 li a2,4 +200061f8: 8aba mv s5,a4 +200061fa: b6c69ce3 bne a3,a2,20005d72 <__subdf3+0xd0> +200061fe: 01da1613 slli a2,s4,0x1d +20006202: 800d srli s0,s0,0x3 +20006204: 8e41 or a2,a2,s0 +20006206: 8391 srli a5,a5,0x4 +20006208: b51d j 2000602e <__subdf3+0x38c> +2000620a: 003e1713 slli a4,t3,0x3 +2000620e: 01d79613 slli a2,a5,0x1d +20006212: 830d srli a4,a4,0x3 +20006214: 8e59 or a2,a2,a4 +20006216: 838d srli a5,a5,0x3 +20006218: b99d j 20005e8e <__subdf3+0x1ec> +2000621a: 41d88eb3 sub t4,a7,t4 +2000621e: 01d8b8b3 sltu a7,a7,t4 +20006222: 414787b3 sub a5,a5,s4 +20006226: 8476 mv s0,t4 +20006228: 41178a33 sub s4,a5,a7 +2000622c: 84b6 mv s1,a3 +2000622e: bd29 j 20006048 <__subdf3+0x3a6> +20006230: 16071d63 bnez a4,200063aa <__subdf3+0x708> +20006234: 2c060863 beqz a2,20006504 <__subdf3+0x862> +20006238: 003e1613 slli a2,t3,0x3 +2000623c: 01d79713 slli a4,a5,0x1d +20006240: 820d srli a2,a2,0x3 +20006242: 84b6 mv s1,a3 +20006244: 8e59 or a2,a2,a4 +20006246: 838d srli a5,a5,0x3 +20006248: b199 j 20005e8e <__subdf3+0x1ec> +2000624a: 003e1613 slli a2,t3,0x3 +2000624e: 00365413 srli s0,a2,0x3 +20006252: 84b6 mv s1,a3 +20006254: 8aba mv s5,a4 +20006256: 8a3e mv s4,a5 +20006258: b3d1 j 2000601c <__subdf3+0x37a> +2000625a: 98f6 add a7,a7,t4 +2000625c: 01d8beb3 sltu t4,a7,t4 +20006260: 97d2 add a5,a5,s4 +20006262: 97f6 add a5,a5,t4 +20006264: 00879713 slli a4,a5,0x8 +20006268: 22075663 bgez a4,20006494 <__subdf3+0x7f2> +2000626c: ff800737 lui a4,0xff800 +20006270: 177d addi a4,a4,-1 # ff7fffff <__StackTop+0xdf77dfff> +20006272: 0018d693 srli a3,a7,0x1 +20006276: 8ff9 and a5,a5,a4 +20006278: 01f79713 slli a4,a5,0x1f +2000627c: 0076f593 andi a1,a3,7 +20006280: 8f55 or a4,a4,a3 +20006282: 0017d613 srli a2,a5,0x1 +20006286: 26058963 beqz a1,200064f8 <__subdf3+0x856> +2000628a: 00f77693 andi a3,a4,15 +2000628e: 4591 li a1,4 +20006290: 26b68463 beq a3,a1,200064f8 <__subdf3+0x856> +20006294: 00b70433 add s0,a4,a1 +20006298: 00e43733 sltu a4,s0,a4 +2000629c: 00c70a33 add s4,a4,a2 +200062a0: 4a89 li s5,2 +200062a2: 800d srli s0,s0,0x3 +200062a4: bba5 j 2000601c <__subdf3+0x37a> +200062a6: 001e8413 addi s0,t4,1 +200062aa: b4e1 j 20005d72 <__subdf3+0xd0> +200062ac: cc070ce3 beqz a4,20005f84 <__subdf3+0x2e2> +200062b0: 41580733 sub a4,a6,s5 +200062b4: e80a8ee3 beqz s5,20006150 <__subdf3+0x4ae> +200062b8: 03800613 li a2,56 +200062bc: 08e65063 bge a2,a4,2000633c <__subdf3+0x69a> +200062c0: fff88413 addi s0,a7,-1 +200062c4: 0088b8b3 sltu a7,a7,s0 +200062c8: 41178a33 sub s4,a5,a7 +200062cc: 008a1713 slli a4,s4,0x8 +200062d0: 008007b7 lui a5,0x800 +200062d4: 18074863 bltz a4,20006464 <__subdf3+0x7c2> +200062d8: 84b6 mv s1,a3 +200062da: 8ac2 mv s5,a6 +200062dc: bc59 j 20005d72 <__subdf3+0xd0> +200062de: 411e88b3 sub a7,t4,a7 +200062e2: 40fa07b3 sub a5,s4,a5 +200062e6: 011ebeb3 sltu t4,t4,a7 +200062ea: 41d78a33 sub s4,a5,t4 +200062ee: 008a1793 slli a5,s4,0x8 +200062f2: 8446 mv s0,a7 +200062f4: d407c6e3 bltz a5,20006040 <__subdf3+0x39e> +200062f8: 0038d893 srli a7,a7,0x3 +200062fc: 01da1613 slli a2,s4,0x1d +20006300: 00c8e633 or a2,a7,a2 +20006304: 003a5793 srli a5,s4,0x3 +20006308: 4a85 li s5,1 +2000630a: b315 j 2000602e <__subdf3+0x38c> +2000630c: 87d6 mv a5,s5 +2000630e: 4701 li a4,0 +20006310: 4601 li a2,0 +20006312: bc79 j 20005db0 <__subdf3+0x10e> +20006314: fe070693 addi a3,a4,-32 +20006318: 02000613 li a2,32 +2000631c: 00d7d6b3 srl a3,a5,a3 +20006320: 00c70a63 beq a4,a2,20006334 <__subdf3+0x692> +20006324: 04000613 li a2,64 +20006328: 40e60733 sub a4,a2,a4 +2000632c: 00e797b3 sll a5,a5,a4 +20006330: 00f8e8b3 or a7,a7,a5 +20006334: 011037b3 snez a5,a7 +20006338: 8fd5 or a5,a5,a3 +2000633a: b4cd j 20005e1c <__subdf3+0x17a> +2000633c: 00800637 lui a2,0x800 +20006340: 84b6 mv s1,a3 +20006342: 00ca6a33 or s4,s4,a2 +20006346: 46fd li a3,31 +20006348: 06e6cc63 blt a3,a4,200063c0 <__subdf3+0x71e> +2000634c: 02000693 li a3,32 +20006350: 8e99 sub a3,a3,a4 +20006352: 00da1433 sll s0,s4,a3 +20006356: 00de96b3 sll a3,t4,a3 +2000635a: 00eedeb3 srl t4,t4,a4 +2000635e: 00d036b3 snez a3,a3 +20006362: 01d46433 or s0,s0,t4 +20006366: 00ea5733 srl a4,s4,a4 +2000636a: 8c55 or s0,s0,a3 +2000636c: 8f99 sub a5,a5,a4 +2000636e: 40888433 sub s0,a7,s0 +20006372: 0088b8b3 sltu a7,a7,s0 +20006376: 41178a33 sub s4,a5,a7 +2000637a: 8ac2 mv s5,a6 +2000637c: baf1 j 20005d58 <__subdf3+0xb6> +2000637e: d40700e3 beqz a4,200060be <__subdf3+0x41c> +20006382: 41580733 sub a4,a6,s5 +20006386: bc0a83e3 beqz s5,20005f4c <__subdf3+0x2aa> +2000638a: 03800693 li a3,56 +2000638e: 08e6db63 bge a3,a4,20006424 <__subdf3+0x782> +20006392: 00879713 slli a4,a5,0x8 +20006396: 00800a37 lui s4,0x800 +2000639a: 8ac2 mv s5,a6 +2000639c: 4401 li s0,0 +2000639e: a80748e3 bltz a4,20005e2e <__subdf3+0x18c> +200063a2: 00188413 addi s0,a7,1 +200063a6: 8a3e mv s4,a5 +200063a8: b2e9 j 20005d72 <__subdf3+0xd0> +200063aa: ae0615e3 bnez a2,20005e94 <__subdf3+0x1f2> +200063ae: 00351793 slli a5,a0,0x3 +200063b2: 838d srli a5,a5,0x3 +200063b4: 01da1613 slli a2,s4,0x1d +200063b8: 8e5d or a2,a2,a5 +200063ba: 003a5793 srli a5,s4,0x3 +200063be: bcc1 j 20005e8e <__subdf3+0x1ec> +200063c0: fe070693 addi a3,a4,-32 +200063c4: 02000613 li a2,32 +200063c8: 00da56b3 srl a3,s4,a3 +200063cc: 00c70a63 beq a4,a2,200063e0 <__subdf3+0x73e> +200063d0: 04000613 li a2,64 +200063d4: 40e60733 sub a4,a2,a4 +200063d8: 00ea1733 sll a4,s4,a4 +200063dc: 00eeeeb3 or t4,t4,a4 +200063e0: 01d03433 snez s0,t4 +200063e4: 8c55 or s0,s0,a3 +200063e6: b761 j 2000636e <__subdf3+0x6cc> +200063e8: 41d88eb3 sub t4,a7,t4 +200063ec: 414787b3 sub a5,a5,s4 +200063f0: 01d8b8b3 sltu a7,a7,t4 +200063f4: 41178a33 sub s4,a5,a7 +200063f8: 008a1793 slli a5,s4,0x8 +200063fc: 8476 mv s0,t4 +200063fe: c407c0e3 bltz a5,2000603e <__subdf3+0x39c> +20006402: 003ede93 srli t4,t4,0x3 +20006406: 01da1613 slli a2,s4,0x1d +2000640a: 84b6 mv s1,a3 +2000640c: 01d66633 or a2,a2,t4 +20006410: 003a5793 srli a5,s4,0x3 +20006414: 4a85 li s5,1 +20006416: b921 j 2000602e <__subdf3+0x38c> +20006418: d0060ae3 beqz a2,2000612c <__subdf3+0x48a> +2000641c: 8a3e mv s4,a5 +2000641e: 8ec6 mv t4,a7 +20006420: 84b6 mv s1,a3 +20006422: b9e1 j 200060fa <__subdf3+0x458> +20006424: 008006b7 lui a3,0x800 +20006428: 00da6a33 or s4,s4,a3 +2000642c: 46fd li a3,31 +2000642e: 06e6cf63 blt a3,a4,200064ac <__subdf3+0x80a> +20006432: 02000613 li a2,32 +20006436: 8e19 sub a2,a2,a4 +20006438: 00ca16b3 sll a3,s4,a2 +2000643c: 00ce9633 sll a2,t4,a2 +20006440: 00eedeb3 srl t4,t4,a4 +20006444: 00c03633 snez a2,a2 +20006448: 01d6e6b3 or a3,a3,t4 +2000644c: 00ea5733 srl a4,s4,a4 +20006450: 8ed1 or a3,a3,a2 +20006452: 97ba add a5,a5,a4 +20006454: 98b6 add a7,a7,a3 +20006456: 00d8b6b3 sltu a3,a7,a3 +2000645a: 00f68a33 add s4,a3,a5 +2000645e: 8446 mv s0,a7 +20006460: 8ac2 mv s5,a6 +20006462: b2d1 j 20005e26 <__subdf3+0x184> +20006464: 8ac2 mv s5,a6 +20006466: 84b6 mv s1,a3 +20006468: fff78a13 addi s4,a5,-1 # 7fffff +2000646c: 547d li s0,-1 +2000646e: b4bd j 20005edc <__subdf3+0x23a> +20006470: 87ba mv a5,a4 +20006472: 4601 li a2,0 +20006474: 4701 li a4,0 +20006476: ba2d j 20005db0 <__subdf3+0x10e> +20006478: d80709e3 beqz a4,2000620a <__subdf3+0x568> +2000647c: 0117e8b3 or a7,a5,a7 +20006480: a0089ae3 bnez a7,20005e94 <__subdf3+0x1f2> +20006484: b72d j 200063ae <__subdf3+0x70c> +20006486: 003e1613 slli a2,t3,0x3 +2000648a: 00365413 srli s0,a2,0x3 +2000648e: 8aba mv s5,a4 +20006490: 8a3e mv s4,a5 +20006492: b669 j 2000601c <__subdf3+0x37a> +20006494: 01d79613 slli a2,a5,0x1d +20006498: 0038d893 srli a7,a7,0x3 +2000649c: 01166633 or a2,a2,a7 +200064a0: 838d srli a5,a5,0x3 +200064a2: 4a85 li s5,1 +200064a4: b669 j 2000602e <__subdf3+0x38c> +200064a6: 84b6 mv s1,a3 +200064a8: 8732 mv a4,a2 +200064aa: bd71 j 20006346 <__subdf3+0x6a4> +200064ac: fe070613 addi a2,a4,-32 +200064b0: 02000693 li a3,32 +200064b4: 00ca5633 srl a2,s4,a2 +200064b8: 00d70a63 beq a4,a3,200064cc <__subdf3+0x82a> +200064bc: 04000693 li a3,64 +200064c0: 40e68733 sub a4,a3,a4 +200064c4: 00ea1733 sll a4,s4,a4 +200064c8: 00eeeeb3 or t4,t4,a4 +200064cc: 01d036b3 snez a3,t4 +200064d0: 8ed1 or a3,a3,a2 +200064d2: b749 j 20006454 <__subdf3+0x7b2> +200064d4: 02000793 li a5,32 +200064d8: 8f99 sub a5,a5,a4 +200064da: 4601 li a2,0 +200064dc: bc2d j 20005f16 <__subdf3+0x274> +200064de: a40688e3 beqz a3,20005f2e <__subdf3+0x28c> +200064e2: 8446 mv s0,a7 +200064e4: 8a3e mv s4,a5 +200064e6: 800d srli s0,s0,0x3 +200064e8: be15 j 2000601c <__subdf3+0x37a> +200064ea: 00e5e633 or a2,a1,a4 +200064ee: c2060fe3 beqz a2,2000612c <__subdf3+0x48a> +200064f2: 8a3a mv s4,a4 +200064f4: 8eae mv t4,a1 +200064f6: b111 j 200060fa <__subdf3+0x458> +200064f8: 830d srli a4,a4,0x3 +200064fa: 0676 slli a2,a2,0x1d +200064fc: 8e59 or a2,a2,a4 +200064fe: 8391 srli a5,a5,0x4 +20006500: 4a89 li s5,2 +20006502: b635 j 2000602e <__subdf3+0x38c> +20006504: 4581 li a1,0 +20006506: 7ff00793 li a5,2047 +2000650a: 00080737 lui a4,0x80 +2000650e: b04d j 20005db0 <__subdf3+0x10e> +20006510: 8736 mv a4,a3 +20006512: bf29 j 2000642c <__subdf3+0x78a> +20006514: ff8007b7 lui a5,0xff800 +20006518: 17fd addi a5,a5,-1 # ff7fffff <__StackTop+0xdf77dfff> +2000651a: 00fa77b3 and a5,s4,a5 +2000651e: 01d79613 slli a2,a5,0x1d +20006522: 0038de93 srli t4,a7,0x3 +20006526: 07a6 slli a5,a5,0x9 +20006528: 00c7d713 srli a4,a5,0xc +2000652c: 01d66633 or a2,a2,t4 +20006530: 4785 li a5,1 +20006532: b8bd j 20005db0 <__subdf3+0x10e> +20006534: 8aba mv s5,a4 +20006536: 84b6 mv s1,a3 +20006538: ba79 j 20005ed6 <__subdf3+0x234> +2000653a: 01d79613 slli a2,a5,0x1d +2000653e: 003ede93 srli t4,t4,0x3 +20006542: 01d66633 or a2,a2,t4 +20006546: 838d srli a5,a5,0x3 +20006548: b4dd j 2000602e <__subdf3+0x38c> +2000654a: 800d srli s0,s0,0x3 +2000654c: 01da1613 slli a2,s4,0x1d +20006550: 8e41 or a2,a2,s0 +20006552: 8391 srli a5,a5,0x4 +20006554: 8aba mv s5,a4 +20006556: bce1 j 2000602e <__subdf3+0x38c> + +20006558 <__unorddf2>: +20006558: 0145d713 srli a4,a1,0x14 +2000655c: 001007b7 lui a5,0x100 +20006560: 17fd addi a5,a5,-1 # fffff +20006562: fff74713 not a4,a4 +20006566: 0146d813 srli a6,a3,0x14 +2000656a: 8dfd and a1,a1,a5 +2000656c: 8ff5 and a5,a5,a3 +2000656e: 01571693 slli a3,a4,0x15 +20006572: 7ff87813 andi a6,a6,2047 +20006576: ca99 beqz a3,2000658c <__unorddf2+0x34> +20006578: 7ff00713 li a4,2047 +2000657c: 4501 li a0,0 +2000657e: 00e80363 beq a6,a4,20006584 <__unorddf2+0x2c> +20006582: 8082 ret +20006584: 8fd1 or a5,a5,a2 +20006586: 00f03533 snez a0,a5 +2000658a: 8082 ret +2000658c: 8dc9 or a1,a1,a0 +2000658e: 4505 li a0,1 +20006590: d5e5 beqz a1,20006578 <__unorddf2+0x20> +20006592: 8082 ret + +20006594 <__fixdfsi>: +20006594: 0145d793 srli a5,a1,0x14 +20006598: 001006b7 lui a3,0x100 +2000659c: fff68713 addi a4,a3,-1 # fffff +200065a0: 7ff7f793 andi a5,a5,2047 +200065a4: 3fe00613 li a2,1022 +200065a8: 8f6d and a4,a4,a1 +200065aa: 81fd srli a1,a1,0x1f +200065ac: 00f65b63 bge a2,a5,200065c2 <__fixdfsi+0x2e> +200065b0: 41d00613 li a2,1053 +200065b4: 00f65963 bge a2,a5,200065c6 <__fixdfsi+0x32> +200065b8: 80000537 lui a0,0x80000 +200065bc: 157d addi a0,a0,-1 # 7fffffff <__StackTop+0x5ff7dfff> +200065be: 952e add a0,a0,a1 +200065c0: 8082 ret +200065c2: 4501 li a0,0 +200065c4: 8082 ret +200065c6: 43300613 li a2,1075 +200065ca: 8e1d sub a2,a2,a5 +200065cc: 487d li a6,31 +200065ce: 8f55 or a4,a4,a3 +200065d0: 00c85d63 bge a6,a2,200065ea <__fixdfsi+0x56> +200065d4: 41300693 li a3,1043 +200065d8: 40f687b3 sub a5,a3,a5 +200065dc: 00f75733 srl a4,a4,a5 +200065e0: 40e00533 neg a0,a4 +200065e4: f1e5 bnez a1,200065c4 <__fixdfsi+0x30> +200065e6: 853a mv a0,a4 +200065e8: 8082 ret +200065ea: bed78793 addi a5,a5,-1043 +200065ee: 00f71733 sll a4,a4,a5 +200065f2: 00c55533 srl a0,a0,a2 +200065f6: 8f49 or a4,a4,a0 +200065f8: b7e5 j 200065e0 <__fixdfsi+0x4c> + +200065fa <__fixunsdfsi>: +200065fa: 0145d793 srli a5,a1,0x14 +200065fe: 00100637 lui a2,0x100 +20006602: fff60713 addi a4,a2,-1 # fffff +20006606: 7ff7f793 andi a5,a5,2047 +2000660a: 3fe00813 li a6,1022 +2000660e: 86aa mv a3,a0 +20006610: 8f6d and a4,a4,a1 +20006612: 4501 li a0,0 +20006614: 81fd srli a1,a1,0x1f +20006616: 00f85363 bge a6,a5,2000661c <__fixunsdfsi+0x22> +2000661a: c191 beqz a1,2000661e <__fixunsdfsi+0x24> +2000661c: 8082 ret +2000661e: 41e00593 li a1,1054 +20006622: 557d li a0,-1 +20006624: fef5cce3 blt a1,a5,2000661c <__fixunsdfsi+0x22> +20006628: 43300593 li a1,1075 +2000662c: 8d9d sub a1,a1,a5 +2000662e: 457d li a0,31 +20006630: 8f51 or a4,a4,a2 +20006632: 00b54a63 blt a0,a1,20006646 <__fixunsdfsi+0x4c> +20006636: bed78793 addi a5,a5,-1043 +2000663a: 00f71733 sll a4,a4,a5 +2000663e: 00b6d533 srl a0,a3,a1 +20006642: 8d59 or a0,a0,a4 +20006644: 8082 ret +20006646: 41300513 li a0,1043 +2000664a: 8d1d sub a0,a0,a5 +2000664c: 00a75533 srl a0,a4,a0 +20006650: 8082 ret + +20006652 <__floatsidf>: +20006652: 1101 addi sp,sp,-32 +20006654: ce06 sw ra,28(sp) +20006656: cc22 sw s0,24(sp) +20006658: ca26 sw s1,20(sp) +2000665a: c84a sw s2,16(sp) +2000665c: c64e sw s3,12(sp) +2000665e: cd0d beqz a0,20006698 <__floatsidf+0x46> +20006660: 41f55713 srai a4,a0,0x1f +20006664: 00a744b3 xor s1,a4,a0 +20006668: 8c99 sub s1,s1,a4 +2000666a: 87aa mv a5,a0 +2000666c: 8526 mv a0,s1 +2000666e: 01f7d413 srli s0,a5,0x1f +20006672: 284d jal 20006724 <__clzsi2> +20006674: 41e00793 li a5,1054 +20006678: 8f89 sub a5,a5,a0 +2000667a: 4729 li a4,10 +2000667c: 7ff7f793 andi a5,a5,2047 +20006680: 02a74d63 blt a4,a0,200066ba <__floatsidf+0x68> +20006684: 472d li a4,11 +20006686: 8f09 sub a4,a4,a0 +20006688: 00e4d733 srl a4,s1,a4 +2000668c: 0732 slli a4,a4,0xc +2000668e: 0555 addi a0,a0,21 +20006690: 8331 srli a4,a4,0xc +20006692: 00a494b3 sll s1,s1,a0 +20006696: a029 j 200066a0 <__floatsidf+0x4e> +20006698: 4401 li s0,0 +2000669a: 4781 li a5,0 +2000669c: 4701 li a4,0 +2000669e: 4481 li s1,0 +200066a0: 07d2 slli a5,a5,0x14 +200066a2: 047e slli s0,s0,0x1f +200066a4: 8fd9 or a5,a5,a4 +200066a6: 40f2 lw ra,28(sp) +200066a8: 8fc1 or a5,a5,s0 +200066aa: 4462 lw s0,24(sp) +200066ac: 4942 lw s2,16(sp) +200066ae: 49b2 lw s3,12(sp) +200066b0: 8526 mv a0,s1 +200066b2: 85be mv a1,a5 +200066b4: 44d2 lw s1,20(sp) +200066b6: 6105 addi sp,sp,32 +200066b8: 8082 ret +200066ba: 1555 addi a0,a0,-11 +200066bc: 00a49733 sll a4,s1,a0 +200066c0: 0732 slli a4,a4,0xc +200066c2: 8331 srli a4,a4,0xc +200066c4: 4481 li s1,0 +200066c6: bfe9 j 200066a0 <__floatsidf+0x4e> + +200066c8 <__floatunsidf>: +200066c8: 1141 addi sp,sp,-16 +200066ca: c422 sw s0,8(sp) +200066cc: c606 sw ra,12(sp) +200066ce: c24a sw s2,4(sp) +200066d0: c04e sw s3,0(sp) +200066d2: 842a mv s0,a0 +200066d4: c50d beqz a0,200066fe <__floatunsidf+0x36> +200066d6: 20b9 jal 20006724 <__clzsi2> +200066d8: 41e00793 li a5,1054 +200066dc: 8f89 sub a5,a5,a0 +200066de: 4729 li a4,10 +200066e0: 7ff7f793 andi a5,a5,2047 +200066e4: 02a74963 blt a4,a0,20006716 <__floatunsidf+0x4e> +200066e8: 472d li a4,11 +200066ea: 8f09 sub a4,a4,a0 +200066ec: 00e45733 srl a4,s0,a4 +200066f0: 0732 slli a4,a4,0xc +200066f2: 01550693 addi a3,a0,21 +200066f6: 8331 srli a4,a4,0xc +200066f8: 00d41433 sll s0,s0,a3 +200066fc: a019 j 20006702 <__floatunsidf+0x3a> +200066fe: 4781 li a5,0 +20006700: 4701 li a4,0 +20006702: 40b2 lw ra,12(sp) +20006704: 8522 mv a0,s0 +20006706: 4422 lw s0,8(sp) +20006708: 07d2 slli a5,a5,0x14 +2000670a: 8fd9 or a5,a5,a4 +2000670c: 4912 lw s2,4(sp) +2000670e: 4982 lw s3,0(sp) +20006710: 85be mv a1,a5 +20006712: 0141 addi sp,sp,16 +20006714: 8082 ret +20006716: 1555 addi a0,a0,-11 +20006718: 00a41733 sll a4,s0,a0 +2000671c: 0732 slli a4,a4,0xc +2000671e: 8331 srli a4,a4,0xc +20006720: 4401 li s0,0 +20006722: b7c5 j 20006702 <__floatunsidf+0x3a> + +20006724 <__clzsi2>: +20006724: 67c1 lui a5,0x10 +20006726: 02f57663 bgeu a0,a5,20006752 <__clzsi2+0x2e> +2000672a: 10053713 sltiu a4,a0,256 +2000672e: 00173713 seqz a4,a4 +20006732: 070e slli a4,a4,0x3 +20006734: 200077b7 lui a5,0x20007 +20006738: 00e55533 srl a0,a0,a4 +2000673c: c8c78793 addi a5,a5,-884 # 20006c8c <__clz_tab> +20006740: 97aa add a5,a5,a0 +20006742: 0007c503 lbu a0,0(a5) +20006746: 02000693 li a3,32 +2000674a: 8e99 sub a3,a3,a4 +2000674c: 40a68533 sub a0,a3,a0 +20006750: 8082 ret +20006752: 010007b7 lui a5,0x1000 +20006756: 02f57063 bgeu a0,a5,20006776 <__clzsi2+0x52> +2000675a: 46c1 li a3,16 +2000675c: 8736 mv a4,a3 +2000675e: 200077b7 lui a5,0x20007 +20006762: 00e55533 srl a0,a0,a4 +20006766: c8c78793 addi a5,a5,-884 # 20006c8c <__clz_tab> +2000676a: 97aa add a5,a5,a0 +2000676c: 0007c503 lbu a0,0(a5) +20006770: 40a68533 sub a0,a3,a0 +20006774: 8082 ret +20006776: 4761 li a4,24 +20006778: 200077b7 lui a5,0x20007 +2000677c: 00e55533 srl a0,a0,a4 +20006780: c8c78793 addi a5,a5,-884 # 20006c8c <__clz_tab> +20006784: 97aa add a5,a5,a0 +20006786: 0007c503 lbu a0,0(a5) +2000678a: 46a1 li a3,8 +2000678c: 40a68533 sub a0,a3,a0 +20006790: 8082 ret + +20006792 : +20006792: 00357793 andi a5,a0,3 +20006796: 872a mv a4,a0 +20006798: ef9d bnez a5,200067d6 +2000679a: 7f7f86b7 lui a3,0x7f7f8 +2000679e: f7f68693 addi a3,a3,-129 # 7f7f7f7f <__StackTop+0x5f775f7f> +200067a2: 55fd li a1,-1 +200067a4: 4310 lw a2,0(a4) +200067a6: 0711 addi a4,a4,4 # 80004 +200067a8: 00d677b3 and a5,a2,a3 +200067ac: 97b6 add a5,a5,a3 +200067ae: 8fd1 or a5,a5,a2 +200067b0: 8fd5 or a5,a5,a3 +200067b2: feb789e3 beq a5,a1,200067a4 +200067b6: ffc74683 lbu a3,-4(a4) +200067ba: 40a707b3 sub a5,a4,a0 +200067be: ca8d beqz a3,200067f0 +200067c0: ffd74683 lbu a3,-3(a4) +200067c4: c29d beqz a3,200067ea +200067c6: ffe74503 lbu a0,-2(a4) +200067ca: 00a03533 snez a0,a0 +200067ce: 953e add a0,a0,a5 +200067d0: 1579 addi a0,a0,-2 +200067d2: 8082 ret +200067d4: d2f9 beqz a3,2000679a +200067d6: 00074783 lbu a5,0(a4) +200067da: 0705 addi a4,a4,1 +200067dc: 00377693 andi a3,a4,3 +200067e0: fbf5 bnez a5,200067d4 +200067e2: 8f09 sub a4,a4,a0 +200067e4: fff70513 addi a0,a4,-1 +200067e8: 8082 ret +200067ea: ffd78513 addi a0,a5,-3 +200067ee: 8082 ret +200067f0: ffc78513 addi a0,a5,-4 +200067f4: 8082 ret + ... diff --git a/demo/riscv_pio_blink/pio_blink.hex b/demo/riscv_pio_blink/pio_blink.hex new file mode 100644 index 0000000000..7c5b20e7af --- /dev/null +++ b/demo/riscv_pio_blink/pio_blink.hex @@ -0,0 +1,1782 @@ +:020000042000DA +:100000006F00001A00000000000000006F0060197F +:100010000000000000000000000000006F00401819 +:100020000000000000000000000000005D7106C03C +:1000300016C21AC41EC62AC82ECA32CC36CE3AD030 +:100040003ED242D446D672D876DA7ADC7EDE73258A +:100050001034F3250030AAC0AEC2736651BEB2C4DC +:1000600073E540BE6341050273600430B7050020AC +:10007000AA9583A5050DE78005007370043073E52C +:1000800040BEE35305FE06459645264673101534DB +:1000900073900530731056BE824092422243B243A1 +:1000A000D2456246F246025792572258B258425EF3 +:1000B000D25E625FF25F732540BEE35005FA4245AF +:1000C0006161730020301300000013000000010084 +:1000D000A4010020A4010020A4010020A40100200C +:1000E000A4010020A4010020A4010020A4010020FC +:1000F000A4010020A4010020A4010020A4010020EC +:10010000A4010020A4010020A4010020A4010020DB +:10011000A4010020A4010020A4010020A4010020CB +:10012000A4010020A4010020A4010020A4010020BB +:10013000A4010020A4010020A4010020A4010020AB +:10014000A4010020A4010020A4010020A40100209B +:10015000A4010020A4010020A4010020A40100208B +:10016000A4010020A4010020A4010020A40100207B +:10017000A4010020A4010020A4010020A40100206B +:10018000A4010020A4010020A4010020A40100205B +:10019000A4010020A4010020A4010020A40100204B +:1001A000029002900981029000000000000000000F +:1001B000000000000000000000000000000000003F +:1001C00006005250ABB3605308690020060052503D +:1001D000861C030224690020060052505422A29D6E +:1001E00030690020F2EB8871346E0020586E0020D8 +:1001F0007802002090A31AE7D3DEFFFF420101112D +:100200004403000022020020002008200302000016 +:1002100000000020FF06000000000000793512AB4E +:1002200009A0977100009381216E17210800130126 +:1002300061DD170500001305F5DC731055307325DB +:1002400040F125E1977500009385C5CC1386C182E6 +:1002500021A023A005009105E39DC5FEEF30801885 +:10026000B124EF30C0170290FDBF884108C291054C +:100270001106E36CD6FE8280586E0020586E002076 +:10028000106F002000000820000008200000082057 +:1002900000100820001008200010082000000000B6 +:1002A000828021651305C5DF028500000111B707B3 +:1002B00000D022CC26CA4AC84EC606CE83A9070063 +:1002C0002A842E89B28421A80F003003230007005E +:1002D00073A007304A85A685EF10801831E51C40D1 +:1002E0007377043093963700B316D028F19B2FA66E +:1002F000D744758E6DFE0F0030038306440093775C +:1003000087001840E3D206FC230234010F003003BB +:100310002300070073A00730F2406244D2444249F0 +:10032000B249054505618280F2406244D2444249A7 +:10033000B2490145056182801C41F376043013986F +:10034000370033180029F19BAFA80745B3F808011F +:10035000E39C08FE0F0030030308450093F7860076 +:100360001441634208020F0030032380060073A08B +:100370000730B70700D003870700814763140701E0 +:100380003E85828025B7370600D010422302C50083 +:100390000F0030032380060073A0073085473E8599 +:1003A00082801C417377043093963700B316D028AF +:1003B000F19B2FA6D744758E6DFE0F003003FD57BD +:1003C0002302F5001C410F003003238007009377C0 +:1003D000870073A00730332010008280B707E0AF9A +:1003E000AA975D71D183CAC04EDE2A89AE8936854F +:1003F0009385670086C6A2C4A6C23684B28401244F +:1004000005472286CE85BA864A85EF304075138728 +:1004100024009386740093175400B2061E07060446 +:1004200093F7073E558FCE854A85C16826863708E3 +:100430000C001364F4C19397A729740822D646CE02 +:100440003AD042D23ED4EF30A07AB6402644964409 +:100450000649F25961618280011106CE22CC26CA7A +:100460004AC84EC62A89BA84B6892E84853F832716 +:10047000090037650020CE85B39787282320F9002F +:1004800026861305857FEF30A03C1545EF10803B95 +:1004900086043355950233442421F240D244424924 +:1004A000B249751508C8624405618280397122DC41 +:1004B00006DE26DA4AD84ED652D456D237740020F9 +:1004C0002D2A340810082C001305C4D80548894784 +:1004D0000D47EF30B005630C05102246B704E0AFBE +:1004E000E245269637790020518213054981EF3085 +:1004F00020366246C2452245130740068D46A93F75 +:10050000C24522458505EF30405FC245624622451F +:1005100085051307A0059146813750086C0089476F +:1005200074081305C4D8054813070002EF30100003 +:100530003246F245AA87269613054981BE84518228 +:10054000EF300031C5C87246D24532451307000569 +:10055000930600021137D245324581498505EF30B7 +:10056000C059D24572463245130760049306100203 +:100570008505DD35D2453245B77A00208505EF3057 +:10058000C05CF2465246B2451305C4D8377A002003 +:10059000EF309023C2452245370900D08505EF3062 +:1005A000C05AE2464246A2451305C4D8EF30D021D6 +:1005B0003775002013054583EF3000198147032468 +:1005C00049008324890013850A8513543448A28581 +:1005D000858863848700EF30A027A68513054A86A7 +:1005E00063849900EF30C026A689A287C9BFEF10A7 +:1005F0008036E5B5EF102036B9B76F308041B78748 +:1006000003409107B347F52098438566BE9613478C +:1006100007041377070C3786024098C23365C5205C +:100620000D67BA974CC11307001098C382803971C7 +:100630003773002022CC2A841305438706CE2ED29E +:1006400032D436D63AD83EDA42DC46DEEF30C00F3E +:1006500001CC4C1022852EC6EF2050533775002058 +:1006600013054588EF30400E0545EF201057737590 +:100670000430B77700209387B709139737003317F3 +:10068000E028F19BAFA6E744F98EEDFE0F003003A2 +:1006900082800F003003B777002093870709A38576 +:1006A00007002189732005308280F3760430377784 +:1006B00000201307B7091318370033180029719B5E +:1006C000AF280745B3F80801E39C08FE0F0030038C +:1006D00013D735003A950347050093F77500B31714 +:1006E000F0283378F700631108025D8F2300E500DE +:1006F0000F003003B777002093870709A385070011 +:10070000A18A73A0063082804111328506C6053762 +:1007100073780430B77700209387B7099398370030 +:10072000B3181029F19B2FA3174533731301E31C52 +:1007300003FE0F003003137E880063F6C60099A005 +:10074000050663E1C60693573600AA9783C80700DB +:10075000137876003318002933F30801E31203FEFF +:10076000B3E808012380170132850F003003B77703 +:10077000002093870709A385070073200E30634E7E +:10078000050082800F003003B777002093870709A8 +:10079000A385070073200E307D55E5D541113A85BC +:1007A00006C671357D55D1B773770430B777002011 +:1007B0009387B70993963700B316D028F19B2FA6DD +:1007C000D744758E6DFE0F00300393D735003E95EC +:1007D000834705009D89B397B7482300F5000F00B4 +:1007E0003003B777002093870709A3850700937725 +:1007F000870073A00730828037770020034507ED1C +:10080000DD469307150093F7F70F63F3F600C14732 +:100810002308F7EC8280B77600209386060981478B +:10082000130600020F0030033387F6002300070091 +:100830008507E399C7FE828081463D481D459305A3 +:10084000400393F736008A073317F80013D62600C3 +:100850004207518F733037BEB317F500C207D18FEF +:1008600073A037BE8506E39EB6FC82809357550081 +:1008700086073315A028C176E98E13871700420535 +:10088000558F5D8D91C9733025BE733027BE73209F +:1008900005BE732007BE8280733005BE733007BE6D +:1008A0008280411126C206C622C44AC0AE84737932 +:1008B0000430B777002093879709139737003317D1 +:1008C000E028F19BAFA6E744F98EEDFE0F00300360 +:1008D000F327503013054503F19BB347F5209843A8 +:1008E000B70700209387471A131425006306F70003 +:1008F0006384E500EF102006F3275030F19BA297A8 +:1009000084C30F0030030F003003B77700209387B4 +:100910000709A38407009377890073A00730B240CA +:1009200022449244024941018280797106D64AD01C +:1009300052CC56CA5AC873790430B77700209387CF +:100940009709139737003317E028F19BAFA6E744C8 +:10095000F98EEDFE0F003003F327503013074503E7 +:10096000F19BB347F72083AA0700B7070020138B3A +:10097000471A131A270063876A0B22D42E84638ECA +:10098000BA0C26D2B7740020938484E533879A404A +:100990009307F00263E6E7084ECE5EC662C4935743 +:1009A0004500F3A707BE937BF5003317A0289359A2 +:1009B0005500C183131C07018609B31B7029B3FBC3 +:1009C000FB00336C3C0173300CBEC1777D8F850911 +:1009D000B3E9E90073B009BE0F003003F32750BE3E +:1009E0001397070101486350071ED68701459843B6 +:1009F000D44313768700137707801317B74893D52E +:100A0000464119E2B306B700630DD4040387A7007B +:100A10003E85B327E720634C0718B3C79720C1BFB3 +:100A200022549254F3275030F19BD29723A05701C0 +:100A30000F0030030F003003B777002093870709BA +:100A4000A38407001379890073200930B25002593A +:100A5000624AD24A424B456182802254938A471AA5 +:100A6000D1B70386A700634506183327C62033474E +:100A70009720144393151600584313F5860019E583 +:100A800093F606809396B64851873697638357034B +:100A9000931617000565E98EBA9693F6068093962D +:100AA000B648520793E6760B1367770E94C3131775 +:100AB000F728B386C50033C896200345B800D8C3CD +:100AC0003167A385A7008308A800139526001307A4 +:100AD00027E42385170163CF080A83568800210580 +:100AE000269513D8160013973600937808041377C9 +:100AF00007023367170113931600938887003307A3 +:100B0000174113730308937808301A9713D82600F7 +:100B1000139326009D824697C18A937803401373EE +:100B2000E800B3E66600469736979318B0282A97F0 +:100B30003378180133070741931617001355370010 +:100B40000563131877001189B3F66600337818012E +:100B5000C98E13151700B3E6060113750560135807 +:100B60002700C98E1378081013151700B3E6060185 +:100B70001375050813581700C98E13780804131548 +:100B8000270033E70601937685032965558F930681 +:100B90001500558FB776002003C54610B295B3C532 +:100BA00095202394E7002385A5002382C61063982F +:100BB0000B0273300CBE73B009BE22549254F2493A +:100BC000B24B224C85B5918366C293FCF71F630438 +:100BD0009501EF00505813884C03924C39B573308F +:100BE0002CBE73B029BE73200CBE73A009BEF1B732 +:100BF000631F08025DC17177130727E4FD562314B4 +:100C0000E5002305D50033879740B7B6AAAA938697 +:100C1000B6AA09873307D702B776002003C6461065 +:100C20002385C7002382E610E3850BF84DBFB77616 +:100C3000002013878700938646E9998E1397160044 +:100C4000056693D53600718F91891396760013153A +:100C5000B0284D8F698E93951600518F93F50560DE +:100C600013D626004D8F1376061093951600518FDC +:100C700093F5050813D616004D8F137606048A06E1 +:100C8000518F93F68603558F136717001317D728D4 +:100C90002394E700E38F0BF099B7DA8AADB7F32717 +:100CA00050BE13970701814563490700918393F76D +:100CB000F71F938747039395270073760430B77720 +:100CC000002093879709139737003317E028F19B8B +:100CD000AFA6E744F98EEDFE0F0030033777002012 +:100CE000130787E5B307E540B7B6AAAA9386B6AA65 +:100CF0008987B387D70293974760F3265030F19ADC +:100D0000AE9694426387A6048306A700638DF6041B +:100D1000830667016387F606830627026385F60666 +:100D20008306E7026383F606377700208346471081 +:100D30002302F7102305D5000F003003B7770020FA +:100D400093870709A38407009377860073A0073071 +:100D5000828073275030B7060020719B2E979386B0 +:100D6000461A14C3D1B78146B3A6D620F175B3C6CF +:100D7000E6207D58138725E4238506012394E600A9 +:100D800065B78546D5B78946C5B78D46F1BFB777F4 +:100D9000002093870709AE971CC18280011122CCE5 +:100DA00026CA37740020B774002006CE930744ED9E +:100DB0009384C4ED63F897024AC84EC6130444ED09 +:100DC000FD591309F00F1C409DC33D34AA852285AF +:100DD0007D3F231224010F0030032104E36594FEBC +:100DE0004249B249F2406244D244056182802934CA +:100DF000AA852285693F230234010F0030032104B4 +:100E0000E36394FCF1BFB776002083A78610737765 +:100E10000430139637003316C028F19BAFA5C744A2 +:100E2000F18DEDFD0F00300383A786100F00300316 +:100E3000238007009377870073A0073033201000CA +:100E40000145814582805D7186C6A2C4A6C2CAC022 +:100E50004EDE52DC56DA5AD85ED662D466D26AD0FA +:100E60006ECEF32750BE139707016348073293D91C +:100E7000470093F7F91F898393F93900331A302912 +:100E800037090B406396073437770020B3C7372103 +:100E90001307470EB3C7E72083AA07008D67938720 +:100EA0004704CA97B3C92921138B8A0023A047019D +:100EB0007D54FD54039D8A00232E490363510D0880 +:100EC00083D74A009397576063DC071483C76A008F +:100ED0006394071E83968A0063C2060403A74A012F +:100EE000B3A6D620FD57B3E6E62083AB860003AC5D +:100EF000C6006381FB2A0327890283A70901B38601 +:100F0000EB40998F63F4F60023A879014A856525A3 +:100F100063C68501E310BCFAE37E75F93320100047 +:100F2000B640264496440649F259625AD25A425B68 +:100F3000B25B225C925C025DF24D6161828083A7AC +:100F40004A01B32BAD214A85B3EBFB2003ACCB00A8 +:100F500083AC8B008D25E3C585F76309BC1C634B0F +:100F60000C1C03A70B01B7170020938767E483A528 +:100F70004B016305F72483978A0003D52B00C20732 +:100F80005D8D02972E87AA8DB3E7ED006384071A63 +:100F9000635B0720B386BC41B3BCDC00B307EC4005 +:100FA000B387974103970B0023A4DB0023A6FB0024 +:100FB000E34807F003A54A013328E720131617007A +:100FC0003368A8208325C80083288800E3CAB7EEC9 +:100FD0006394F500E3E616EF2394EA0013888A0091 +:100FE00031A0832886004C46131617003A963366C4 +:100FF000A62063CDB7006381F51E03170600328873 +:101000003326E7203366A620E35D07FC2390EB0040 +:101010002310A80183D74A0093975760E3C807EAD3 +:1010200083A70A017377043093963700B316D0284C +:10103000F19B2FA6D744758E6DFE0F00300383D829 +:101040004A00FD572392FA009398586083A70A013B +:101050000F003003238007009377870073A00730C9 +:10106000E3C608E603A54A0103978A0033A81821BE +:101070003368A820032388000326C800DA85635A52 +:10108000070039A8638CC60E03970700BE85634925 +:101090000700B327E720B3E7A720D447E354D6FEE1 +:1010A00023901501831808002310E800E3DE08FAF6 +:1010B00083C76A00E38007E223830A0003978A005C +:1010C0007D555A83E30CA7E483A84A01B327E720A0 +:1010D000BA86B3E7172103D62700BA853A881316D4 +:1010E000566003970700634306023E83E306A7DECC +:1010F000B327E720B3E7172103D62700BA853A883C +:101100001316566003970700E35106FE80C7C4C755 +:10111000638AD5002310E30083D68A002390D7008A +:101120002394BA00C286E315A7FC7DB3E36A95D980 +:10113000E3590CE203D70B0083A70A012394EA00CA +:101140007377043093963700B316D028F19B2FA6FF +:10115000D744758E6DFE0F00300383D62A0083A717 +:101160000A012390DB002391AA010F0030032380A2 +:1011700007009377870073A0073099B39447E3750E +:10118000D3F023901501831808002310E800E3DD55 +:1011900008EC39BFE3117CD795BB054AD28781495A +:1011A00037890B40D5B14A853AC631213247B3065B +:1011B000B501B3B7A6002E97BA97EDB39C492E851B +:1011C0002EC6829725D9B24583AD0500D8416DBBA7 +:1011D000854737890B404DB9E3F116E305BD011191 +:1011E00022CC37740020130404EA1C4806CE91CBAD +:1011F0006244F2403775002013058510A94505614A +:1012000079B68D4537050B4026CA4AC84EC652C42A +:101210005926370A0B408D4423264401EFF0CFDDD9 +:10122000B70700D0230094003777002003A80700F9 +:10123000130707095C482A97B706110018C87D569E +:10124000FD16BD450947A300040114C42311B400D1 +:101250002312C4002394E7042149114F954E194EDF +:101260001D43A5482948B546394785492D45B1450F +:1012700023909706239CE7072398D7092394C70B4D +:101280002390670C2398170F239407112390A7121C +:10129000239CB7122398D7142394E7162390C700F2 +:1012A00023983703239C270D239C0700B7150020A4 +:1012B00023202A03B77700202685938565E423A899 +:1012C000870EEFF00FDECE852685EFF02FDAB727F9 +:1012D0000B406244D244B249224AF24023A027057F +:1012E00042493775002013058510A945056145B4AD +:1012F000AA8708497378043093183500B318102969 +:1013000071992F23154533731301E31C03FE0F005E +:1013100030030393270083A84701137588003328FF +:1013200063203368182183A80701634B0308035E19 +:1013300008002391C7010F003003238008007320A9 +:10134000053083582800054E13150301F298C6088E +:1013500093D81801B3F8C80B232AE8002328D80033 +:101360002324B8002326C800231118013365150172 +:10137000984BF3760430131637003316C028719B50 +:10138000AF25C744F18DEDFD0F00300303D64700B4 +:10139000984B2310C800239267000F0030032300EE +:1013A000070013F786007320073003C70700DC47E8 +:1013B0008966938646043317E028B69798C38280DF +:1013C0000F00300323800800732005307D55828094 +:1013D0000357A50093D7054163D8E7045449B3A741 +:1013E000F7201849B3E7D720F376043013163700F7 +:1013F0003316C028719B2F28C7443378C800E31CDC +:1014000008FE0F00300303D62700B3C5050813F705 +:101410008600B3460608630BB6001C490F00300374 +:101420002380070073200730014582809396F628B9 +:101430002391D70085472303F50014490F0030039B +:10144000238006007320073083460500584509664F +:1014500013064604B316D02832973E8514C3828003 +:10146000411122C426C206C6AA842E84732750BE08 +:101470009317070163DA07044AC0377900209307FE +:1014800009EA03C70700DC473347F7209C57184B8E +:10149000B306F5401D8F63EDE60433200000B70767 +:1014A0000B40D85301456369B70A9C570D8F024919 +:1014B00033B597003337E00013351500598DB2402E +:1014C0002244924441018280B7070B40D853014522 +:1014D000E367B7FE9C57B240224433B597000D8FA7 +:1014E0003337E000133515009244598D4101828055 +:1014F000D9283385A44033B5A400B305B440898D01 +:1015000063C20506B7160020A685938666E00147EC +:101510002286130509EAE93BAA856355A004B707AB +:101520000B40D853636A87049C5763E597041305FF +:1015300009EA793D37070B405C53014563EE8700AC +:101540001457818F3337F000B3B7960093B7170065 +:1015500002493365F700A5B7B240224402499244DC +:101560004101828037070B405C5363FA87000249D0 +:101570000145B1B7E31D87FA332000004DBF18576E +:10158000818FB337F00033379700133717000249C4 +:1015900033E5E7002DB7B787F4BFAA97377500206A +:1015A00093B717001305C510377600203E95130634 +:1015B00086886FF08F8F4C51AA8788572E87CC531F +:1015C000E31DB7FE8280B7070B40CC5388572E87A8 +:1015D000CC53E39DE5FE828037070B405C53032824 +:1015E0008702BE865C53E39CD7FE33060501BE9599 +:1015F0003337A6002E97636CF7026388E702B707BC +:101600000B40DC5363F7E700B7060B40DC52E3EF17 +:10161000E7FE639BE70037070B4021A05453639517 +:10162000F6001457E3ECC6FE8280E37A06FDB707A6 +:101630000B40DC537D573A86E398E7FC3E86E1BFDA +:10164000011122CC2A84194526CA06CEAE84DD2A91 +:1016500055C14AC84EC6B787074037070004630D17 +:10166000F40EB727024098C3B7060240B7370240CE +:1016700098C3A1069C42B377F740EDFFB787F8BF48 +:10168000A2971387C18093B71700B3A7E720194526 +:10169000130700102390E700752293173500B3D786 +:1016A0009702850713D7770039EB93090004854625 +:1016B00054D018D40329040393771900BDE385643B +:1016C0009384C402A2945C5423A00400232824031E +:1016D00019458D2A5C540A053355350393C707070E +:1016E00093F7E7079CC0930610304249B2490D4773 +:1016F00014D838C4F2406244D24405618280416605 +:101700007916C166637DE604FD1654D0014718D4EE +:1017100003290403B7094000938909FC9377190052 +:10172000D9DF8D6793870703A2971307103098C3FB +:1017300044501C5419459A04BE942922B7872B8F14 +:10174000938757B7B337F5021395A4008145AD834E +:101750003355F5025135A5B73707000819B785830A +:1017600093F7F70393196700BA86BE993E8789B746 +:10177000B70701403327A5203347F7200328470048 +:10178000C1676373F8005CC31308C5FF854763F640 +:101790000707377300201303C30BB347652083A8E3 +:1017A00007008D67BA97131EB02823A0C7010A054A +:1017B00063990802832807001606856733461601D9 +:1017C0001376060EBA9790C30546637106078967BC +:1017D000BA971316B02890C31A95C16714C15CC399 +:1017E000828083274301B3D717038507B3A7F72068 +:1017F0009387E7FFE3DE07FE75BFE39CF5F88D678F +:10180000BA970D4823A007011C47858BF5DF0328F5 +:10181000070016068567334606011376060EBA974B +:10182000377300200A0590C31303C30B0328070076 +:101830003316B028B3C505018D898CC31C47F18FC1 +:10184000F5DF71B7B77700209387C70B3345F520D5 +:1018500008418280B727B700938707B0B3D7B70294 +:1018600083280500C206320733E8E6003356F60245 +:1018700063C40804B787054011676300F506B727FE +:10188000024098C3B7060240B737024098C3A1068A +:101890009C42B377F740EDFF0D670CC1110710C5EF +:1018A0002A97930710021CC31C41E3DF07FE23267F +:1018B0000501A1471CC382801C4193F7F703E39BFA +:1018C000B7FA1C45D207D183E396C7FA5C45377750 +:1018D0000700F98FE39007FB828021674DB7B78738 +:1018E00010403325A5203345F5204CC185471CC148 +:1018F0008280A1679387A7DF83D70700854582870A +:10190000B7170E409387878298437DDF0F0030031F +:101910008280B7170E403E871307C7829387C78020 +:101920000F00300323A007009107E39BE7FE8280AE +:101930008567938707AA378704401CC39307F00283 +:101940005CC7B7B6FA00B7A7044094C35C43E3DFB3 +:1019500007FE828082803775002041111305C58AF9 +:1019600006C6EFE0DFCC411122C426C23774002046 +:10197000B774002006C69307C4ED938404F163F99D +:1019800097001304C4ED1C4011048297E36D94FE8C +:10199000B2402244924441018280B747EFEF9387DF +:1019A000F7B7B72602403707F4039CC25917B73779 +:1019B0000240B706024098C3A1069C42B377F740A5 +:1019C000EDFF8280B7071150F847A1676303F70066 +:1019D0008280B727115037070400F8C78280370785 +:1019E00000207D17B7370240B706024098C3A10612 +:1019F0009C42B377F740EDFF8280156541111305D6 +:101A0000352506C6FD35B240AA87054541018287C6 +:101A10006FE07FE0411122C406C626C24AC03704E7 +:101A20000140232204082937B73701400547D8DF92 +:101A30007C40E39FE7FE0D47B737014098DB054444 +:101A4000370701401C5FE39F87FE37366859A28540 +:101A5000130606F00947954637050540E53B15474F +:101A600037968647BA86A285130606C03785054095 +:101A7000D533B726B700938606B001468945114590 +:101A8000C539B7D6F008A2859386061801461545D4 +:101A9000C531B776DC02938606C0014681452145F3 +:101AA000C139B776DC02938606C0014681452545DB +:101AB000C131B7D6F008938606180146814519450D +:101AC0004539B7D6F00893860618014681451D456D +:101AD00045311145853BB7E71B43938737E8B3345E +:101AE000F50201441949C9802285A6850504C53B34 +:101AF000E31C24FFB2402244924402494101828007 +:101B00008280797122D44ECE52CC56CA5AC85EC653 +:101B100062C466C206D6C68C26D24AD093F8380074 +:101B2000AA892E8A328BB68ABA8B3E84428C639FF6 +:101B300008063309F8403299B28463FD0707268608 +:101B4000D6868504D285130500028299E39924FF85 +:101B500021C02299330689407D14B3878B0003C5C9 +:101B60000700D686D285CA8482996DF493FC2C0036 +:101B700063800C02338B6441637C8B012686D6869E +:101B8000D28513050002050B85048299E3688BFF5B +:101B9000B25022540259F249624AD24A424BB24BE5 +:101BA000224C924C26859254456182803289B284BF +:101BB000CDF36DBF3289D1FFE1BFA242C28F024E89 +:101BC00093FE220012483E8363960E046318080CAD +:101BD00063F2C70593F31200930E0002130F000384 +:101BE0006309D3010503B3076700A38FE7FFE36928 +:101BF000C3FF63820306930E0002130F0003637B8F +:101C000003016304D30D0503B3076700A38FE7FF48 +:101C1000E31903FF93F70201B5CB93F70240B1E755 +:101C200063110304C1476383F8168947638FF8166D +:101C3000930700032300F7000543639B0F0693F708 +:101C40004200F5C3B3086700130EB00293071300F8 +:101C50002380C80191A093F702018DCB93F7024036 +:101C600089E763036E0A6301680AC1476388F8065F +:101C700089476384F80893070002630DF3009A878D +:101C80000503BA9793080003238017019307000206 +:101C9000E315F3FA930700029688A5B593F31200B3 +:101CA00063820302638D0F087D18E3E7C7F3A1B7D2 +:101CB000B3086700130ED0022380C80193071300F6 +:101CC000968881B5E3EAC7F1B1B793F70201F9D37A +:101CD00093F70240D9D7C147E39EF8FA93F702027F +:101CE000A5CB93070002E307F3FAB3076700930855 +:101CF0008005238017010503BDBF93070002E30B96 +:101D0000F3F89A87050311A89307F3FFB1CF414E6B +:101D10006383C80B094EE396C8F7BA979308200669 +:101D20002380170189BF93F882009A87E38608F61B +:101D30003A9393080002850723001301B1BF93F77C +:101D4000C200B337F0003308F840E367C3E965B574 +:101D500093070002E300F3F4B307670093088007DA +:101D600023801701050301BFC147E390F8EC93F707 +:101D700002029DCF930880059307000323001701FB +:101D8000A300F7000943E38C0FEA1DB793F70202A3 +:101D900085C393078005930800032300F700A30081 +:101DA00017010943E38D0FE821B793072006E5B734 +:101DB00093078007CDB79308E3FF13FE0202BA989A +:101DC00063070E00130E80052380C8015DBD130E4E +:101DD00080072380C80175B511E182806F10100D56 +:101DE00001C59C41CC418287828031714AD94ED74E +:101DF00052D55AD12A89AE89328B368A3A85BE8528 +:101E00003A86BE8622DD26DB56D35ECF06DF62CD64 +:101E100066CB8E4BBA843E8442C0C68AEF40C07304 +:101E2000631B0546B777002003A687D983A6C7D9C9 +:101E30002685A2856AC96EC7EF3050056349052023 +:101E4000B777002003A607DA83A647DA2685A2859E +:101E5000EF30E077634DA018B777002026C422C684 +:101E60002245B24503A687DA83A6C7DAEF3020768B +:101E70006345A014B777002026C822CA4245D24540 +:101E800003A607DB83A647DBEF305000634705124C +:101E900026CC22CE6245F24501468146EF30007FD6 +:101EA000634A051802DC93F70B4099E399473EC05B +:101EB0008246130D0106EA87938806FE25469305A0 +:101EC00000036372D6222380B700FD168507E39ACC +:101ED00016FF930C000226D022D20255925546C01E +:101EE000EF40406B8248B7760020938686BDB3E60C +:101EF000D82003A846009C4246CC42C23EC0AA8DD0 +:101F0000EF40207526D422D62A86AE862255B255B9 +:101F1000EF30305902469246EF3050032E8C2AC8DB +:101F2000EF40A06D2AC4EF40207AC24762DA2A86C9 +:101F30003ED8AE864255D255377C0020EF307056E1 +:101F400003268CDB8326CCDB2AC82ED0EF3020681A +:101F50002243E2486357A02805031A8546C81AC4DD +:101F6000EF4080762A86AE8602459245EF300072B9 +:101F70002243C2486344A000850D0143638A0816CA +:101F800037D5CCCC1305D5CC130E0002A54E6382F9 +:101F9000CC2D3337A302850CB3069D01FD180D83AC +:101FA000B347E7208607B307F34093870703A38F60 +:101FB000F6FE63F06E283A83D9BF26DC22DE6A542F +:101FC000DEC16257F25702484A4DBA4DFA50DA5410 +:101FD000FA4B6A4CDA4CD688D2869A5A2A5A5A86D2 +:101FE000CE850A5BBA594A854A59296135AE93F7BD +:101FF0004B009DEB37770020130747948D476A54B9 +:102000004A4DBA4DFA50DA546A4CDA4CDE8856889A +:10201000FA4B9A5AD2865A862A5A0A5BCE854A8544 +:10202000BA594A592961F1BC377700201307C79381 +:102030009147F1B7A6C8A2CA4646D6460145814592 +:10204000EF3030468547AA842E843EDCA9BD93F745 +:102050003B00DA8495E3914763F057031304CBFF09 +:10206000B30454015A842286D2860504CE85130512 +:1020700000020299E31994FE37740020130CC494F3 +:102080001304C494711CB30C9400034534003386CC +:102090008C40D286CE857D140299E31884FF93FB91 +:1020A0002B00910463810B02B387644163FD5701E8 +:1020B0002686D286CE851305000285040299B38751 +:1020C0006441E3E757FF4A4DBA4DFA506A544A5902 +:1020D000BA592A5A9A5A0A5BFA4B6A4CDA4C268544 +:1020E000DA54296182808247B688B38CD740E5B341 +:1020F0006E85EF400056A6C4A2C62A86AE86264547 +:10210000B645EF30103A03248CDB8324CCDB2AC0A5 +:102110002286A6862E8CEF306057634D05008247DD +:10212000E2CEF645BECC66452286A686EF30204A32 +:102130006358A01437656666130575669308000238 +:102140001DA0B397AD02850CB3069D018987998FB9 +:1021500033C7F7200607B38DED4013870D03A38F18 +:10216000E6FEBE8D9DCF13D7FD41E39C1CFD93F68B +:102170003B0005466399C60463870A04E257D1CB46 +:10218000FD1A63F25C051306000293050003638CDD +:10219000CC02850CB3079D01A38FB7FEE3E95CFF7A +:1021A00031A093F63B0005466385C61693060002F0 +:1021B000638BDC00E257A5CB1306D002B3862C005C +:1021C0002380C606850C6A87DE885688E687D28615 +:1021D0005A86CE854A85EFF0DF92AA844A4DBA4DE1 +:1021E000EDB5C24746C41AC0BEC082570645BEC23E +:1021F000B7770020964503A687DB83A6C7DBEF30C1 +:10220000E0480243A248E34B05D6631003080503E8 +:10221000B5B393F6CB00FDCAFD1AE3E65CF793066F +:102220000002E382DCFA93F64B0095CE1306B0026F +:1022300071B76380CC03E698930500031306000290 +:10224000638C9801850CB3079D01A38FB7FEE399BA +:10225000CCFE930C0002F9BD8A989306E002850C2F +:102260002380D806C1BD93F68B00B1DE13060002B1 +:10227000B387CC00B38627002380C604850CA1B7A2 +:1022800013881D00937DE8FF75B593761300E387EF +:1022900006CE0503E5B193F73B005A848DE38D47E5 +:1022A00063FF57011304DBFF5694DA842686D28637 +:1022B0008504CE85130500020299E31994FEB774D4 +:1022C000002093848494938CD4FF228C03C5240033 +:1022D0006286D286CE85FD14050C0299E39894FFA0 +:1022E00093FB2B0093043400E3810BDEB38764413E +:1022F000E3FD57DD2686D286CE85130500028504D0 +:102300000299B3876441E3E757FFC1B3E3ED5CE7AC +:102310005DBDE38D0AE8E257E38D07EEFD1AE3E4C5 +:102320005CE7E39B1CE945B50D71232821152326A5 +:102330003115232441152326B1132A89AE89B28D84 +:10234000368A3A85BE853A86BE86232C8114232A96 +:102350009114232251152328A113232E1114032D88 +:1023600001163A84BE84C2C1C68AEF40E01E631FD4 +:10237000051AB777002003A607DA83A647DA228575 +:10238000A685232C8113232A9113EF304024634B1D +:10239000A018B777002003A687D983A6C7D92285BE +:1023A000A68523206115232E7113EF30202E634064 +:1023B000051C22CC26CE6245F24501468146EF300F +:1023C000E02C139BF4696344050022CC268B931701 +:1023D000B028B376FD0013770D40BAC336C8B36793 +:1023E0006401631F07186398071E639E064E994792 +:1023F000BEC1937C2D00639A0C4E114CB3F78A0B2F +:10240000F1173EC8814B22D026D202559255014683 +:102410008146EF30A0276344054EE2475ADF3EDD98 +:102420006A57FA570E48C2489376FDFF9396B6480E +:10243000135D5D4836C06E86D286CE854A857D1D89 +:10244000EFF0BF9A137D0D022A86D28613055D0434 +:10245000CE85130416000299B306704137D3CCCC55 +:102460007D1CB3E6DB0A13D8FB0118021303D3CC9F +:102470008147254E930E000219A06384D70333B61B +:10248000660285073685B308F7000D82B345C6207E +:1024900086058D8E93860603A38FD8FEB286E36EE3 +:1024A000AEFC954636C462C202C02286A948D286D6 +:1024B000CE854A85EFF06FF0638A0C023304B54194 +:1024C00063765403AA8433868D00D286CE851305A5 +:1024D000000205040299E36854FF3387B4410507FD +:1024E0002685814763F8EA4005053E958320C1159E +:1024F00003248115032B0114832BC113032C811397 +:10250000832C411383244115032901158329C11408 +:10251000032A8114832A4114032D0113832DC11230 +:1025200035618280032C8113832C411322C826CA73 +:102530004247D2470E482320A117D688D2866E86FE +:10254000CE854A85032481158320C1158324411536 +:10255000032901158329C114032A8114832A4114F4 +:10256000032D0113832DC11235616FF01F88032BDA +:102570000114832BC113032C8113832C41137DB7CA +:10258000A9EFE38806E6814B8E47014C63C7FB3811 +:10259000A2C5A6C72E45BE4501468146EF30000FB5 +:1025A000634C0532A2D1DAD30E579E57131DBD4896 +:1025B000136D0D406288032B0114832BC113032C70 +:1025C0008113832C41132320A117D688D2866E86CF +:1025D000CE854A8585BF9947BEC113554B011375FA +:1025E000F57F130515C0EF40C006B777002003A69E +:1025F00007DC83A647DCEF306015B777002003A621 +:1026000087DC83A6C7DCEF2040119317CB00370689 +:10261000F03FB183D18F3ED622D4B777002003A6F6 +:1026200007DD83A647DD2A8CAE8B2255B255EF30ED +:102630004067B777002003A687DD83A6C7DDEF30AC +:10264000E01062D85EDA2A86AE864255D255EF2077 +:10265000C00CEF303074AA8BEF30B07FB77700201A +:1026600003A607DE83A647DEAA8C2E8CEF30000E71 +:10267000B777002003A687DB83A6C7DBEF20E0093E +:10268000EF3050713777002066DC62DE032687DE8C +:10269000AA87F25562558326C7DE3E8CEF30000BC9 +:1026A000AA8C628562D42E8CEF30B07AB777002086 +:1026B00003A607DF83A647DFEF304009E6C0E2C28A +:1026C0002A86AE8606459645EF30A05DAAC4AEC602 +:1026D0002646B6462ADC2ED8EF304007C25762574E +:1026E000AA8CBECABAC8BACCBECE2E8C4646D64636 +:1026F0006645F645BEC0EF204002B7760020E6D022 +:10270000E2D2AA882E8803A686DF065583A6C6DFF6 +:10271000965546DC42D8EF20B00C377300200326D4 +:1027200003E0832643E0EF10507FE6D4E2D62A860A +:10273000AE862655B655EF20B00AB776002003A620 +:1027400086E083A6C6E0EF10507DE6D8E2DA2A865E +:10275000AE864655D655EF20B008264786472A8CC8 +:10276000BADCBEDEB777002003A507E16656F65651 +:10277000AE8C83A547E1EF30C05262C166C32A86A2 +:10278000AE860A459A45EF1050794258E2582A869B +:1027900042C746C5AE862A45BA45EF207004B777D2 +:1027A000002003A687E183A6C7E1EF101077A257A8 +:1027B00001473AC99387F73FD2073ECBDA464A46EC +:1027C000EF20D0782ACD2AD82ECF2ED422D15AD39A +:1027D0006A46FA460A559A55EF20506BA25742575F +:1027E00037730020635F0500BAC9BECB4E45DE4596 +:1027F000032603E0832643E0FD1BEF20607E2A874B +:10280000AE8793863B069305600C3A863E85937CA3 +:102810002D0063EBD502C246114CB1E263775C0137 +:1028200063910C109386CAFF36C8E38E0BBC5ADB4B +:102830003AD522D93ED72A56BA564A55DA55EF200C +:10284000207A2ACC2E8BC1B6C246154C89EAE37099 +:102850005CFF639C0C0C9386BAFF36C8C9BF3ED49C +:102860003AC8498EE30206D2A2CDDACFB77600206D +:1028700003A606E26E45FE4583A646E2EF203055EC +:102880004247A25763420502B7760020A2D5DAD7A5 +:1028900003A686E22E55BE5583A6C6E2EF20105F42 +:1028A000E34405CE4247A2578E4691CE1E4601CE46 +:1028B000FD16B6C163755C01638B0C04894C02C8BC +:1028C000E3970BF689B6E37C5CFF63820C0402C8D5 +:1028D000894CE39E0BF405BE131BFB69A2D9DADB1E +:1028E0004E57DE57E1B1154C65B102C8814B894C9A +:1028F000114C11BE9387FDFFD697858FF5B6E24741 +:10290000131BFB69DADFBEDD6E57FE5721BEB386AF +:102910008A4136C8E39D0BF0FDB4338C77417D1CB2 +:1029200085B9894CE3950BF0F9BC894C09B7B737E9 +:10293000002035719387E79222CD52C5E6DAEAD8B6 +:10294000EED606CF26CB23A8F180AE8C328A368411 +:102950003A8DAA8D6381053A0345040081446305DD +:10296000053A4EC756C35AC1DEDEC149930B500229 +:10297000B77A0020254B11A82686D286E6858504E5 +:10298000829D03450400630005120504E31675FFEC +:1029900081460345040013071400930705FE93F7CF +:1029A000F70F63E8F9001386CAA3B3C7C7209C4397 +:1029B0008287930705FD93F7F70F637DFB08930765 +:1029C000A00281486303F51A9307E00201486309F6 +:1029D000F50A930785F993F7F70F49466363F60401 +:1029E00037760020130606A8B3C7C7209C4382870A +:1029F00093E616003A8471BF93E626003A8451BFED +:102A000093E646003A8471B793E606013A8451B7DB +:102A100093E686003A84B5BF0345140093E606109A +:102A20000507930770063A8463E7A70A93074002F5 +:102A3000E3F4A7F49307B5FD93F7F70F130720040A +:102A4000E36CF7F2377700201307C7ACB3C7E72072 +:102A50009C4382878148B3C81821B3A8A8200345A6 +:102A600007003A84938808FD930705FD93F7F70F55 +:102A70000507E372FBFE9307E0020148E31BF5F450 +:102A800003451400A54793E60640930505FD93F51D +:102A9000F50F3A8663FEB7289307A002630EF52A66 +:102AA0003A8405073DB7BA499A4A0A4BF65B268431 +:102AB00063E444019304FAFFD2862686E685014545 +:102AC000829DFA4022856A44DA442A4AD65C465DF1 +:102AD000B65D0D618280130775F91377F70FBD4757 +:102AE000E3ECE7E8256613061604B317E028F18F38 +:102AF0006390072229466304C7081D46E31EC7E604 +:102B000003270D00110D6314072693F5F6FE93F6C7 +:102B1000064093E5150298009DEA98002543BD48BC +:102B2000130E000221A06384C703B28693FEF60051 +:102B300013857E036364D30113850E038507330673 +:102B4000F700A30FA6FE13D64600E3EED8FCA1467D +:102B500042C02EC4268636C2C1480148D286E685C8 +:102B60006E85EFF08F85AA8429BD83280D00110D95 +:102B700063C20808034514003A840507B1B59307FA +:102B80004D004AC9E2DC3ECE03290D007D566303A9 +:102B900008004286034509004A96CA876307055024 +:102BA0006301F62603C7170085077DFB338727419E +:102BB00093F70640898A638D07243357070B63898F +:102BC000065E8946330C980046D0A687368D3AD2E9 +:102BD00022D4630DFC28D2863E86E6851384170036 +:102BE000829D330794404A970345070063060528F2 +:102BF000A287C5B70345140093E626003A84B308BC +:102C000010410507D1B3034514009307C006E3172D +:102C1000F5E00345240093E606301307340011B5B0 +:102C20000345140093E606200507E5BB03451400A1 +:102C300093078006630EF52093E606080507D5B3D3 +:102C4000930770066309F512930770046306F51A7B +:102C5000930750046304F51A1D0D137D8DFF0327A0 +:102C60000D0083274D00268636C0E685D2866E8508 +:102C7000EFF08FEB210DAA8429B393076004630F53 +:102C8000F50E1D0D137D8DFF03270D0083274D00CD +:102C9000268636C0E685D2866E85EFF00F95210D2B +:102CA000AA84C5B12686D286E6851305500285041E +:102CB000829DC1B993074D004AC9898A3ECE1389C6 +:102CC00014006382061C03450D0046D02686D2867A +:102CD000E685829D82588547C69463F9173F4A86E8 +:102CE000D2860509E68513050002829DE31999FE47 +:102CF000724D4A4979B10345040037230020930DF2 +:102D000003B08144E31F05C40144E3E744DB5DB342 +:102D10009307F0066307F50663FEA7264AC99307E3 +:102D200080076302F5362946BD9A3283814EB1A8E9 +:102D30003E873348082105063328A82003450600AE +:102D4000130808FD930705FD93F7F70FE373F7FEEC +:102D5000328413071600B5B903280D00034524007B +:102D60000904130714003368080A110D9DB193E597 +:102D70001602BA865DB39396B628F9BD93E60602AD +:102D800009B721464AC93283814E13F5064013FE26 +:102D900036FF19C113FE26FF93750E20639A053284 +:102DA00093770E1013094D00639D074E13770E04A1 +:102DB0006316072E13770E086302075803560D009B +:102DC000631B0634137EFEFE6307053481479800BB +:102DD00046C272C442C09A88268601485DA2930703 +:102DE0008005630EF506930720066314F510094667 +:102DF0004AC93283814E51BF9396B62893E60602A4 +:102E0000A1BD93F7064033072641898AE39707DA85 +:102E1000638B06348946A287368C46D03AD2268404 +:102E20003E8D2286D286E685829D05043307944036 +:102E30004A970345070075F582581257EA87228D95 +:102E4000E2863E84EA84D1E6724D4A49665C15BE4C +:102E50000345240093E6060C13073400D9B6414617 +:102E60004AC993E606023283814E05B7825812574B +:102E70002254EA86E284C1BFEA86228D8258125724 +:102E80002254EA84C9B7854763FC1723A2871389B4 +:102E9000F4FFE2DC469946D026843E8C2286D28618 +:102EA0000504E68513050002829DE31924FF82587C +:102EB00003450D00E287228C6286D286E6853E8439 +:102EC000C694829D665C724D4A4965BC898A638559 +:102ED0000648268CE37A17F7A698B384E840628602 +:102EE000D286050CE68513050002829DE3199CFE3F +:102EF000A1BF13F6064013FEF6FE55E613750E202D +:102F000045E94AC993770E1013094D00639B072AC0 +:102F100013770E046315071613770E086305074031 +:102F200003170D009356F740B345D700958DB3C5F1 +:102F300005089356F701630207282E86B7DECCCC2E +:102F4000938EDECC9800254F930F000219A0638466 +:102F5000F703B335D60385073283B302F7008D81BB +:102F600033C5B5200605098E13060603A38FC2FEDE +:102F70002E86E36E6FFC46C242C072C43688268637 +:102F8000A948D286E6856E85EFE03FC34A8DAA84C4 +:102F90004A49C5BA9307900613FEF6FE6316F53A42 +:102FA00013F6064021DE13FEE6FE13060040B9B715 +:102FB0001D0D137D8DFF83264D0083250D00210DF2 +:102FC00013DFF601B3E7D500F9C393D7F641BD8D02 +:102FD0003387F540BD8EB387F640B3B6E5004AC9E6 +:102FE000E2DCB386D740BA8537D5CCCCAA8E938E97 +:102FF000CECC1305D5CC81479800930F00023689BB +:1030000033862501B336B6003696B336A6024A8318 +:103010008507B302F700AE8313DC2600F19AE2962F +:10302000158E3386C540B3B6C500B306D940330C00 +:10303000D603B386A6023339A602E2963306A60269 +:10304000CA96139CF60113D9160005823366CC008C +:10305000B346C6208606B386D54093860603A38F63 +:10306000D2FEB285630F0302E39CF7F94A49665C1E +:1030700046C242C072C47A882686A948C5B40347AE +:103080000D00BA857DB541463283814EFDB9631A84 +:10309000062A4AC9E2DC81458146B9B703460D00DC +:1030A00005B3A546E3E276FCD1B713F70640E30F7C +:1030B00007E013F72600630F07280147268C19BD88 +:1030C00003450D002686D286E685829DCA840DB111 +:1030D0001D0D137D8DFF032F0D0003294D00E2DC34 +:1030E000210DB3672F01639E0712137EFEFE630A54 +:1030F0000512014C980046C242C0E287268672C47F +:103100009A880148D286E6856E85EFE01FABAA84D7 +:103110004A49665CBDB093565E481307100699C2D3 +:1031200013071004130F67FF25459800930E000244 +:103130000DA09386060393F6F60F8507B305F700F7 +:10314000A38FD5FEB3566602E36466C8E382D7C98F +:103150003686B375660293F6F50FE37CB5FCFA96F6 +:1031600093F6F60FD9BF637E171F338D9800A287A1 +:10317000330DED402684368C46D042D2BE84228662 +:10318000D2860504E68513050002829DE319A4FF9B +:10319000825803450900A6871258A284E2863E841D +:1031A00013871800E30205CAE3070CC6814619BC61 +:1031B0006377171B930600404DBF9800E31D06DAA6 +:1031C000B5BB83270D0093D6F70163850716330639 +:1031D000F04033E6C70AB7DECCCC938EDECC980045 +:1031E000254F930F000219A06305F503B335D603ED +:1031F0000505B302A70032838D81B3C7B5208607CA +:10320000B307F64093870703A38FF2FE2E86E36D84 +:103210006FFC46C242C072C43688AA872686A94877 +:103220008DB313575E489307100619C39307100414 +:10323000D917980026D46ED866DA52DC22DE014C0B +:1032400072CE46D042D21AD6FA84328AF68CBA8D21 +:103250003E8405A89307050393F7F70F050CB38683 +:103260008D01A38FF6FE528681462685CA85EF0022 +:10327000505B638D2C0993070002630BFC08AA8442 +:103280002E89528681462685CA85EF100012137555 +:10329000F50FA547E3F0A7FCB307850093F7F70FF9 +:1032A00075BF83270D0089E7137EFEFE980029E98C +:1032B00093565E481307100699C213071004130FA4 +:1032C00067FFA54E9800130500020DA09386060324 +:1032D00093F6F60F85053306B700A30FD6FEB3D6D7 +:1032E000670263EF6700638DA500B68733F6670258 +:1032F0009376F60FE3FCCEFCFA9693F6F60FD9BF61 +:1033000046C272C442C09A88AE87F9B4E3F544F766 +:103310006E87724E82581258A2543253D25C625A4F +:103320007254C25DC9BB03270D00B305E040B3650D +:10333000B70A01B19800E31E06EC71BD03260D002B +:1033400041B4814798002DB329464AC9F286328399 +:10335000814E25BC93060040E39908E0F5B40507CB +:1033600095B005074DBC0111B72800202A88AE870B +:1033700036872C00B286138508DE7D5606CE42C401 +:103380003EC6EFF0CFDAF2400561828083A701816B +:10339000011106CE91CFAA86372500202E8713056E +:1033A00085DD6C007D568297F2400545056182807F +:1033B000612EF2400145056182800D45731025BEE6 +:1033C0007D15E35D05FE0565130505807310453029 +:1033D000736004307310003482800290FDBF41118D +:1033E00006C6E53F411122C426C206C63774002036 +:1033F000EFE06FD7B7740020930704F1938404F1D2 +:1034000063F99700130404F11C4011048297E36DE3 +:1034100094FEB24022449244410182801C412E8598 +:10342000B285828783475501011126CA4EC652C410 +:1034300006CEAA892E8AB284E9C76358C00403C79E +:103440000500A9476309F706054781476385E4043A +:1034500022CC4AC856C213091A000544A94A034798 +:103460000900A2860504630657070509E39984FE4F +:1034700062444249924A63C09702269A8347FAFF00 +:10348000CD1793B71700238AF900F240D244B2490E +:10349000224A0561828003A709003305FA00B3853B +:1034A000F4400297269A8347FAFFCD1793B7170087 +:1034B000238AF900D9BF83474501D9F71C413775E5 +:1034C0000020130505E3894582978547E392F4F8C8 +:1034D0006DB70346F9FF3547E309E6F8B385F640D3 +:1034E0003305FA0063D5D70083A70900829783A725 +:1034F000090037750020130505E389458297A287E7 +:10350000ADB71C41F240D244B2495285224AB2853D +:10351000056182879C41011126CA4AC806CE13075D +:103520000008AE842A89638DE7001387170098C0CE +:10353000BE9423822401F240D24442490561828034 +:1035400022CC03A481814EC652C4938945001DE05C +:10355000054781476244B249224A98C0BE942382FB +:103560002401F240D24442490561828090405D3D91 +:10357000004879DC1C40CE852285FDDB83A7418194 +:10358000F5D7E39787FE9040713DDDB7397122DCB6 +:1035900026DA4AD84ED606DEB28952D456D25AD04E +:1035A0002A89AE843684EFE00F82B7470F009387F5 +:1035B0000724AA9733B5A700370700803306B50064 +:1035C0007D17BE856374C7003A86FD55B77A002023 +:1035D00013854AEDEFC05FD6FD572A8B638FF40841 +:1035E00039C4373A0020130A4A4203A481811DC01E +:1035F0006394090419A0004811CC1C402686CA8592 +:103600002285F5DB83A7418199C3E316F4FE029A74 +:10361000004865F4631E0B04F25062544259B259DB +:10362000225A925A025B2685D25421618280373A0F +:103630000020130ACA4155BF5ECEA94B19A000480D +:103640000DC41C402686CA852285F5DB83A74181EF +:1036500099C3E39687FE029A22859305F1000546F9 +:10366000A3077101029A004869FCF24BE3060BFACA +:1036700013854AEDEFC0FFD245B74A85EF306011A0 +:10368000AA84B9BF83A781811387818199C7638980 +:10369000A700138707019C4BFDFB91C108C38280E3 +:1036A000FDFD944B14C323A807008280797126D2B4 +:1036B00006D622D44ECE52CCAA84A307A100EFD0C6 +:1036C0009FF0B7470F0093870724AA9733B6A70048 +:1036D000370700802E967D17BE856374C7003A8633 +:1036E000FD55377A002013054AEDEFC0FFC403A44F +:1036F0008181AA8905C44AD019A0004819CC1C4070 +:1037000005469305F1002285EDDB83A7418199C32E +:10371000E315F4FE013B00487DF00259639A09006D +:10372000B2502254F249624A268592544561828001 +:1037300013054AEDEFC0FFC6B2502254F249624A67 +:103740002685925445618280411106C622C426C254 +:103750002A84EF300004AA8485462285A685368611 +:10376000353503A4818111C45C4091CB8297004818 +:1037700065FCB24022442685924441018280004883 +:1037800065F4B240224426859244410182807171E1 +:1037900022D526D306D74AD14ECF56CB2A84AE8423 +:1037A000EFD07FE2B7470F0093870724AA9733B67D +:1037B000A700370700802E967D17BE856374C7006B +:1037C0003A86FD55B7790020138549EDEFC0DFB685 +:1037D0002A8937350020A68622866C0013054551BC +:1037E00002C65136B24703A48181AA84B9C352CD1F +:1037F00015E06A4A02C663180904BA502A540A59E5 +:10380000FA49DA4A26859A544D618280324619393E +:10381000004801CC1C400C082285FDDB83A74181B8 +:10382000F5D7E38587FE004875F403A481816A4AD1 +:1038300002C671D05C4091C7829700484DDC5C4065 +:10384000E5FF0048FDB7138549EDEFC09FB575B79B +:103850003971130341022ED29A8506CE32D436D660 +:103860003AD83EDA42DC46DE1AC61537F24021610C +:103870008280635EB00203A74182B787F8BFBA9720 +:1038800093B717009386C180B3A7D720039807008A +:103890003306B500B54583460500630BD8001C4FC1 +:1038A00093F70702EDFF14C30505E316C5FE8280FA +:1038B0001C4F93F70702EDFF0CC3D5B703A8018295 +:1038C0002A866351B00603A7418201451C4FC18B74 +:1038D0009DEB05051C4FC18BF5FF1443B307A600F4 +:1038E000A38FD7FEE394A5FE630D080093070005A0 +:1038F0001CDF5C5B85669386460393F787033697E8 +:103900001CC32E858280630D0800930700051CDF11 +:103910005C5B85669386460393F7870336971CC3E3 +:103920000DC18280630F080083A741821307000541 +:10393000856698DFD85B93864603B697137787032F +:1039400098C37555828083A7018281CB03A74182EA +:1039500003A5C181232C07028287828003A74182AD +:103960001C4FA18BF5FF828041114AC003A6418202 +:10397000B787074022C4B307F64093B7170026C2A3 +:1039800006C61384170283A7018201C99DCFB240E6 +:1039900022449244024941018280F5DB2285232C96 +:1039A00006028145EFC09FECB74500202285938534 +:1039B0006594EFC09FF7B240224423A0018223AE5A +:1039C00001809244024941018280AE86B7450020C1 +:1039D0002A8722859385659423A0E18223AED18036 +:1039E000EFC03FEC22858545EFC05FE883A74182A9 +:1039F00013070005856698DFD85BB24022449386A2 +:103A00004603B6971377870398C39244024941014E +:103A100082803776002037770020B7770020411169 +:103A2000034646E5034707E583C7C7E422C4B70654 +:103A300007408945014506C623A2D182EFC03FBC9D +:103A400089450545EFC0BFBB03A54182F16593855C +:103A50000520EFD0FFBE2244B24037750020130589 +:103A600085EB8545410139B90327851683C7750064 +:103A70002A8825CF858BB5EF8387550063C407005F +:103A80006319F606B707E0AF03C54500C297377E56 +:103A90000020D183130E0E0B33C7C721032F07005D +:103AA000B31EA028FD1EB39ECE003377DF01139313 +:103AB000270031E39C411DC13325F520B28589687B +:103AC00083D607001387050133470721890763F36E +:103AD0001601B29614C78505E394A7FE1A9E336FAC +:103AE000DF012320EE0132858280918B5555C9D7A5 +:103AF0008280555582805D558280B707E0AFAA97D6 +:103B0000D18309476389E7020547638CE70037766D +:103B1000002013060698B3C5B720138581826FC0B5 +:103B2000DFB8377600201306069CB3C5B72013858F +:103B300081826FC09FB7377600201306C699B3C540 +:103B4000B720138581826FC05FB6B707E0AF3E959F +:103B50005181B345B520138581826FC0FFC483278F +:103B600085161D8EFD4763E3C708B3A7B5200D6812 +:103B7000B3E8A7201308C80C83AEC80DB3870801AB +:103B80003703020003AEC80C396823A0670013088E +:103B900008081393150039E7954863F5D8023307F1 +:103BA000B3003367A720931756009397A7299397DD +:103BB000C729232EF70C1506ED16232C070D7D8A39 +:103BC000E3E3D8FE16062E93EA063365A320D18ED2 +:103BD000232ED50C232C050D232ED50D2326C50D04 +:103BE0000145828039681308F8097DB76D558280D8 +:103BF0001C41B397B7481CC1D9CE9C4A984283AEAA +:103C00008600B3A8B520B3E8A82013C8F7FF23A403 +:103C1000E80C378E100013574800130E1E42135342 +:103C2000180023A8D80D3377C70133730301032E7F +:103C3000851685833373E30033F8E7009397150007 +:103C4000630003023368C8016310080E03A3460033 +:103C5000D4463387B7003367A7202326670C2DA0EF +:103C60006316080A03A8C60003A34600C286E3023F +:103C70000EFE93564701F206B3C6660023A6D80C83 +:103C800032072183B34607013387B7003367A72084 +:103C9000232ED70C2DA0B3A7B520B3E7A7204167EB +:103CA00023A4E70C37070C0023A8E70C7D678326C5 +:103CB000851623A6E70C23AE070C93971500AE9745 +:103CC0008E071387070D2A97856636973708008079 +:103CD000B706010123200701938616102320070150 +:103CE0003397B60013884500896618C53318002934 +:103CF0003307D500A10523200701B315B0283E9551 +:103D00007D8A0CC3232CC50C01458280630E0E00F6 +:103D100003A346001358470172083348680023A6DE +:103D2000080D03A8C600A9BF555582805971D2CC91 +:103D300086D6A2D4A6D2CAD0CECED6CADAC8DEC61D +:103D4000E2C4E6C2EAC06EDE3EC62ACA32CC36CE35 +:103D50002E8A99CB9306F7FFBE9611839182B317F3 +:103D6000E028B397D7283EC6930718003EC4014BFE +:103D7000B7740020370C2050930BC102914A3709C9 +:103D80002000B709E0AFB30C890123209A01630F2B +:103D90000B045E8D814DCE9C93DC4C018A0C938686 +:103DA0003C0066861387449E814513858182EFC05F +:103DB0003F96B30795419397476063439519230056 +:103DC000FD0063C00716850D638C5D0D832C0A0012 +:103DD000050DD1B73707F0FFB306E900B70710505C +:103DE000638AE608CA972320FA003689935C490162 +:103DF0008A0C93863C0066861387449E8145138512 +:103E00008182EFC0FF90B307954193974760E343EA +:103E100095FD2306F102E3CF07FAEFC05F85832605 +:103E20000A00AA8C854D83A78616DDC3B247858B11 +:103E3000DDC36685EFC0FF85D557014D3EC8B70C81 +:103E4000E0AF83270A00B386AB0183850600E697BF +:103E5000D183B3C5B72013858182050DEFC0DF94F0 +:103E6000E361BDFFC24763DA0714B707F0FF3E996D +:103E7000E31BF9F0A247050BE313FBF023200A0034 +:103E80000145B650265496540659F649664AD64A14 +:103E9000464BB64B264C964C064DF25D65618280D2 +:103EA000EFC0EFFC83260A00377700201307070BCB +:103EB000B3873601D183B3C7E7209C43AA8CA5F70B +:103EC000B2478A07C18B23A4F61683A78616B9FFCB +:103ED000B247918BB9FF52463707E0AF3697834818 +:103EE0004600B7770020030656009387070B5183DF +:103EF0003347F720B3151029930700020843FD1537 +:103F0000B38717416342060663C6C700B397C5006F +:103F1000E98FBDC76685EFC0CFF7FD57014D3EC89D +:103F200039BF63960D023707F0FFB307E900E3835B +:103F3000E7F4B70C1050CA9C23209A013E8991BD2A +:103F4000B3872D007D572386E702E38E0DFCB7076C +:103F5000F0FF3307F900E30FF7F0B70C1050CA9CDD +:103F600023209A013A8935B563C20704FD5819A088 +:103F7000638E17033397F500698F3E86FD176DFB3F +:103F8000D2453685EFF05FAE2AC8634A0502830743 +:103F9000C102624766851CC34247F24798C3EFC01F +:103FA0004FEF0547638BED003A8D51BD6685EFC03D +:103FB0004FEEDD57014D3EC859B50545D9B566856B +:103FC000EFC02FED014DA5BD411106C622C426C28A +:103FD0004AC0834745002E843289B317F028FD1765 +:103FE000B394D700EFC0AFE8B707E0AFA297377739 +:103FF0000020D1831307070B33C7E7201443139422 +:104000002700B3F796401CC3EFC0AFE8B305240107 +:104010002244B240924402491385818241016FC01B +:10402000AFF83288AA882E87D5EA63FFC50EC1672C +:10403000636CF618B7070001E1466373F600C146EA +:10404000B77700203353D6009387C7C89A9783C7A2 +:10405000070013030002B697B306F340630BF300A7 +:104060003397D500B357F5005D8F3318D600B318DA +:10407000D500135608013355C70293160801C182B3 +:1040800093D708013377C702B385A6024207D98FB9 +:1040900063FAB700C2971307F5FF63E4070163EF04 +:1040A000B72E3A858D8F33D7C702C20893D808013F +:1040B000B3F7C702B386E602C207B3E8F80063FBB2 +:1040C000D800C2989307F7FF63E50801791763E307 +:1040D000D8003E874205598D8145828063F5D50021 +:1040E000814501458280C16763E8F618B707000182 +:1040F000614863F3F6004148B777002033D70601E3 +:104100009387C7C8BA9703C707009307000242976F +:10411000B388E7406398E71663E4B6263335C500F5 +:10412000133515008145828055C6C1676372F62438 +:1041300013370610133717000E07B356E600B7778C +:1041400000209387C7C8B69783C70700930600026D +:10415000BA97B38EF640639FF608B387C54093566F +:10416000060142064182854533D5D70213D708019F +:10417000B3F7D7023303C502C207D98F63FA6700CA +:10418000C2971307F5FF63E4070163E667203A85EA +:10419000B387674033D7D702C20893D80801B3F773 +:1041A000D7023306C702C207B3E8F80063FBC800B2 +:1041B000C2989307F7FF63E50801791763E3C80026 +:1041C0003E874205598D82809336061093B61600BD +:1041D0008E06BDB5B777002081469387C7C8B697CE +:1041E00083C70700014793060002BA97B38EF640D3 +:1041F000E385F6F63318D60133D3F500935608015C +:10420000335ED30213160801B395D5014182B3572B +:10421000F500CD8F13D70701B318D5013373D3023F +:10422000B305C603420333676700637BB700429759 +:104230001305FEFF636D0715637BB714791E429764 +:104240000D8F3355D702C207C1833377D7023303AB +:10425000A6024207D98F63FB6700C2971307F5FFD9 +:1042600063E3071363F167127915C29793150E0183 +:10427000C98DB3876740CDBD13B806101338180039 +:104280000E089DBD335EE600B3961601336EDE0068 +:1042900033D8E500935E0E01B357D80313130E0114 +:1042A000B3951501135303013357E5004D8F935612 +:1042B0000701331616013378D803B305F302420819 +:1042C000B3E6060163FBB600F2961388F7FF63E2DC +:1042D000C60D63F0B60CF917F2968D8E33D8D6035F +:1042E00042074183B3F6D603B3050303C206558FD5 +:1042F000637BB70072979306F8FF6368C70963761C +:10430000B70879187297C2079316080113130601AC +:10431000B3E70701C1821353030113D80701418298 +:10432000330E68020D8F33836602B386C60293553F +:104330000301F296AE963308C80263F4C6014166E3 +:10434000329813D6060142966360C7026305C70020 +:104350003E8581458280420313530301C206331513 +:1043600015019A96E376D5FE1385F7FF8145828085 +:10437000B70700016377F602935606014147C1B3C0 +:104380008145054582803A85D5B53688ADBF2A8EF0 +:1043900045BDC28799B77915C297DDBB7915C2971C +:1043A00011B393568601614759BB3288AA882E8380 +:1043B0002E87CDE663FFC50EC1676362F618B707A7 +:1043C0000001E1466373F600C146B777002033531E +:1043D000D6009387C7C89A9783C7070013030002C4 +:1043E000B697B306F340630BF3003397D500B3578A +:1043F000F5005D8F3318D600B318D500935508012A +:104400003356B702131308011353030193D708015E +:104410003377B702330666024207D98F63F7C700C6 +:10442000C29763E4070163E4C72E918F33D7B702C5 +:10443000139508014181B3F7B70233076702C2073A +:104440005D8D6378E5004295636505016373E50062 +:104450004295198D3355D5008145828063F3D5008F +:104460008280C16763EBF616B7070001614863F30A +:10447000F6004148B777002033D706019387C7C8B5 +:10448000BA9703C707009307000242973388E740B3 +:10449000639BE71463E4B600636AC500B308C540D4 +:1044A00033331501B386D5403383664046859A85FC +:1044B000828041CEC1676370F6241337061013372C +:1044C00017000E07B356E600B77700209387C7C8DA +:1044D000B69783C7070013030002BA97B306F340E9 +:1044E0006315F3083387C540135306014206418222 +:1044F000B355670293D7080133776702B385C502C6 +:104500004207D98F63F8B700C29763E5070163F3E9 +:10451000B700C2978D8F33D76702C20893D80801BE +:10452000B3F767023307C7021395070133E5A80005 +:10453000E36BE5F0198D3355D500814582809336C4 +:10454000061093B616008E0649B5B777002081464F +:104550009387C7C8B69783C70700014713030002B4 +:10456000BA97B306F340E30FF3F63318D60033DE01 +:10457000F50013530801B35E6E0213160801B395DC +:10458000D5003357F50041824D8F93570701B3187B +:10459000D500337E6E02B385CE02420EB3E7C7016B +:1045A00063F8B700C29763E5070163F3B700C297EA +:1045B0008D8FB3D5670242074183B3F76702B38596 +:1045C000C502C2075D8F6378B70042976365070134 +:1045D0006373B70042970D8F21BF13B806101338CD +:1045E00018000E0841BDB3960601B358E600B3E8C3 +:1045F000D80033D3E50013DE0801B356C303939EFE +:10460000080193DE0E01B357E500B3950501DD8D7A +:1046100093D7050133160601331505013373C30320 +:10462000338FDE024203B3E7670063FBE701C697FF +:104630001383F6FF63EB170D63F9E70DF916C697C1 +:10464000B387E74133DFC703C205C181B3F7C703AF +:10465000B38EEE03C207CD8F63FBD701C6979305D8 +:10466000FFFF63E2170B63F0D70B791FC697C206F3 +:10467000131E0F01B3E6E60113130601135E0E01CC +:1046800013530301C182135F0601B38F6602B38522 +:10469000D74133036E02330EEE03935703017E9E20 +:1046A000F297B386E60363F4F701416EF29613DEE8 +:1046B0000701420313530301C207F2969A9763E47A +:1046C000D5026380D502B307F5403335F500958DEB +:1046D000898D3397E50033D50701B3D50501598D91 +:1046E0008280E372F5FE3386C740B3B7C700C69732 +:1046F0009D8EB287C9BFB7070001637CF600935651 +:1047000006014147D1B32E8F9DB79A8615BFC29738 +:1047100029BB93568601614745BB37031000011141 +:104720007D1313D74601B377B3003378D30056C255 +:1047300093DA45018E0726CA52C493FAFA7F135AB8 +:10474000D50193D4F5010E089375F77F06CE135764 +:10475000D60122CC4AC84EC6FD82336AFA00B2881E +:10476000B387BA4033670701131E3500931E360026 +:104770006389D40E6355F00463920516B366D701BE +:10478000638106309386F7FF638C06621306F07F21 +:104790006386C73A13068003635FD6561304FEFF91 +:1047A000333E8E00330ACA4193168A0037078000D1 +:1047B000BE8A63DA0604130AF7FF7D54B9A2638444 +:1047C000071AB3875541639D0A3C3366CA016300EB +:1047D00006581386F7FF6307066A1305F07F638F99 +:1047E000A762130580036356C5741384FEFFB3BE2E +:1047F0008E00330AD74113168A00370780006341C1 +:10480000067CB684BE8A9307440033B48700229A9C +:104810003E8493178A0063DD072093871A001307ED +:10482000F07F2688638AE720370780FF7D1793F79C +:10483000F77F3377EA001316D7010D802607418EE4 +:104840003183F2406244D207D98F1317F801D98F10 +:10485000D2444249B249224A924A3285BE85056114 +:1048600082802688635DF01C63920516B366D701CB +:10487000638906209386F7FF638E064E1306F07F4A +:104880006389C75A13068003635CD66293168A0055 +:104890003707800013041E00BE8AE3D606F63A8A64 +:1048A0000144850A9307F07F6387FA18B70780FFF2 +:1048B000FD17B377FA001357140005889396F70194 +:1048C000418F13DA170033E4E60093777400B1D315 +:1048D0009377F4001147E38EE7F235B79306F07F44 +:1048E000638EDA249306800363D2F61C1304FEFF62 +:1048F000333E8E00330ACA4113178A00B70780007F +:10490000E35307F0138AF7FF7D545285EF1090614F +:10491000930785FF13070002B306F740B356D40090 +:10492000331AFA00B3E646013314F40063C7572F75 +:10493000B387574185071D8F3316E4003336C00017 +:10494000335AF400336646013397E6003364C700F8 +:1049500033DAF600B3674401814AA5FB2688814714 +:1049600001470146F9BD93871A0093F7E77F6392E9 +:104970000728B367CA013366D70163910A3E638B88 +:10498000075263050620B305DE413336BE00B30788 +:10499000EA40918F13968700635F065C338ECE41A9 +:1049A000B3BECE01330747413307D741B367EE00AB +:1049B0007284B684C5D79317870063D70760B7079B +:1049C00080FFFD177D8F36888547B5B59306F07F4C +:1049D0006386DA169306800363C2F62CB70680005E +:1049E000558FFD4663C8F640130600021D8EB316B0 +:1049F000C7003396CE00B3DEFE003357F7003336E0 +:104A0000C000B3E6D601B3E7C6003A9A3E9EB3377C +:104A1000FE003E9A728493178A00E3C407E89377F6 +:104A20007400638C075A9377F4001147E39DE7DC29 +:104A3000D6870D8091A8D6870147014619B56389AD +:104A40000710B387554163940A26B366CA01638D84 +:104A5000064C9386F7FF638F06301306F07F63845E +:104A6000C73E13068003635BD65293168700370A4E +:104A70008000BE8A0144E3C606E213841E003A8A1F +:104A800059B3131435000D801316DA019306F07F25 +:104A9000418E13573A006398D708598E59CA014876 +:104AA0009307F07F37070800014661BBB706800017 +:104AB000558FFD4663C0F618930600029D8E331491 +:104AC000D700B396DE00B3DEFE00B336D000336409 +:104AD000D4013357F700558C330AEA4033048E4033 +:104AE000333E8E00330ACA4193178A00E3D907F296 +:104AF000260A135A9A00E31A0AE02285EF10904220 +:104B0000930785017D47E357F7E06115B316A400CD +:104B100063D65715370780FF7D17758F1316D7019A +:104B2000B387FA400D833207318393F7F77F2688E6 +:104B300009BB26889307F07F014721B31314350082 +:104B4000135534001316DA01498E13573A00B1B7E2 +:104B500093871A0093F6E77F639F0616B367CA012F +:104B6000639E0A3AB366D7016380074085C2F29E0E +:104B700033BECE015297330AC70193178A00768E4F +:104B800063C00742B3E74E01E38A07DC135E3E00D1 +:104B90001316DA013366C60113573A00814761B72D +:104BA0001306F07F638CC526130680036347F61651 +:104BB00037068000336ACA007D46634EF628130626 +:104BC00000021D8E3314CA003316CE00335EFE0081 +:104BD0003336C0003364C401B357FA00518C1D8FC3 +:104BE00033848E40B3BE8E00330AD741AE8AB6847A +:104BF000E5BD3304DE4133368E00B307EA40918FC2 +:104C000013968700634A06123366F4003E8AE31463 +:104C100006EE0148814701472DB1370A80FF7D1A12 +:104C200013777400B38AFA4033FA4601E31D07DEB6 +:104C3000D68701B5938607FE13060002B356D70048 +:104C4000638AC70013060004B307F640B317F700E2 +:104C5000B3EEFE003334D001558C49B5338457414F +:104C600093071400635DF72E05141307000233D475 +:104C70008600638BE70013070004B307F740B39780 +:104C8000F600B337F0005D8CE30A04CC9377740030 +:104C9000814AE39F07C2014A0D80FDB313178A00C2 +:104CA000B7078000635D071C3E8A0144DDBE9306A2 +:104CB000F07F638AD5189306800363D5F620931797 +:104CC0008700370A8000AE8A0144E3CC07BC138416 +:104CD0001E003A8A0DBE9306F07FE38FD7D4F29E72 +:104CE00033BECE015297729793DE1E001314F70164 +:104CF00093F67E003364D401135A170099C6937655 +:104D0000F4001146BE8AE390C6B00D801316DA0196 +:104D1000418E118309BDB68769BB1384FEFFB3BE04 +:104D20008E00330AD74113178A00B7078000634B00 +:104D3000071CB684AE8AC1BC338ECE41B3BECE0151 +:104D4000330747417284330AD741B6846DB3139653 +:104D5000380013543600B6843A8A3DB3E9EB630950 +:104D60000622139638009317D7010D82B6845D8E04 +:104D70000D8325B3F29E33BECE01529772979317DF +:104D8000870063D40718B70780FFFD1793D61E006E +:104D90007D8F9317F70193F57600D58F1356170083 +:104DA0006382051E93F6F7009145638DB61C33842C +:104DB000B700B337F400338AC7000D808947E9B1E3 +:104DC000B30EDE41333EDE013307EA40330AC7410A +:104DD00093178A00768463CD070093DE3E00131696 +:104DE000DA013366D60113573A0085472DBBB684E6 +:104DF000854AFDB9938607FE13060002B356D70015 +:104E0000638AC70013060004B307F640B317F70020 +:104E1000B3EEFE00B337D001D58FCDBE93973800E7 +:104E20001316D7018D83B6845D8E0D83BDB1E31853 +:104E300006C613143500935734001316DA015D8E3D +:104E400013573A0099B9939738001316D7018D83F9 +:104E50005D8E0D8399B1138607FE1305000233564C +:104E6000CA00638AA70013050004B307F540B3170F +:104E7000FA00336EFE003334C001518C95B3130435 +:104E80001E0051B2338ECE41B3BECE01330747412F +:104E9000330AD74193178A007284E3CA07F4135E7A +:104EA0003E001316DA01B6843366CE0013573A007B +:104EB000854795B9E30F06D43A8A768EB684F9B160 +:104EC000B68705B6B7068000336ADA00FD4663C4CC +:104ED000F606130600021D8EB316CA003316CE0066 +:104EE000335EFE003336C000B3E6C601B357FA00A6 +:104EF000D18E3E97B69EB3B6DE00338AE600768446 +:104F0000AE8A11BEAE8AB684F5BA1316D70193DE07 +:104F10003E003366D6010D83854731B18DD7B36E20 +:104F2000D701E39E0EB631B70E06135436003A8A07 +:104F3000A1BEB28751B1138607FE93060002335615 +:104F4000CA00638AD70093060004B387F640B317FC +:104F5000FA00336EFE00B336C001D18E61BF130775 +:104F600000021D8F0146F9BAE38A069E76843A8ACA +:104F700081470D8011BE33E6F500E30C06C83E8A7A +:104F80002E8E29B18D8376065D8E1183894761BE91 +:104F900001489307F07F3707080065B0B6873DB733 +:104FA000370780FF7D173377EA001316D70193DEAA +:104FB0003E000D833366D60133776700854751B0D5 +:104FC000BE8AB6846FF02FFF1316D701135E3E0022 +:104FD0003366CE000D838147B9B60D80D6876DB498 +:104FE000797193D7450122D426D252CC56CA66C2D3 +:104FF0009394C50006D64AD04ECE5AC85EC662C447 +:105000006AC093F7F77F2A84B28C368AB18093DA2C +:10501000F501638907121307F07F638AE7068E04A0 +:10502000935BD501B3EB9B0037078000138B17C050 +:10503000131C3500B3EBEB008144014D93574A013B +:105040001314CA0093F7F77F3180135AFA01B5C3DE +:105050001307F07F638EE70C0E0413D7DC019387F0 +:1050600017C0418F37048000330BFB40598C939756 +:105070003C0081463D47B3C54A01636D97183777B9 +:1050800000201307C7C48A04BA9498400287B3EB80 +:10509000A400639C0B143E8B93574A011314CA005F +:1050A00093F7F77F014CA144094D3180135AFA015F +:1050B000C5F3B3679401638507146306043622853C +:1050C000EF1040662A87930755FFF5469D8E93079C +:1050D00087FF3314F400B3D6DC00558CB397FC0083 +:1050E0005A97130B373F814671B79307F07F81467C +:1050F0000147B2502254D207FE05D58FCD8F92546E +:105100000259F249624AD24A424BB24B224C924C6B +:10511000024D3A85BE8545618280814781460147BF +:10512000C9BF81459307F07FB70608000147D1B793 +:10513000B3679401130B1B80E9EB93E42400014453 +:1051400089460DBFB3EBA40063870B0A638F042A63 +:105150002685EF10205D2A87930755FFF54B130C2A +:1051600087FFB38BFB40B3948401B35B7401B3EB53 +:105170009B00331C84019307D0C0338BE7408144EC +:10518000014D6DBDD6855E84E2870947E30FEDF4DE +:105190000D47E308EDF80547E301EDF8930FFB3FFA +:1051A0007E87635AF03B93F677006394063013D5FD +:1051B00037009317740063D80700B70700FFFD1787 +:1051C00013070B407D8C9307E07FE3C0E7F2931653 +:1051D000D401131694009377F77F33E7A600935614 +:1051E000C60001BFD285368D4DB7A68B2A8C3E8B6B +:1051F000B1440D4DA1B5014C9144014B054D3DBD50 +:1052000093E4140001448546B5B593E43400E68781 +:105210008D468DB56362741F638E8B1CE2867D1B89 +:10522000014C131784001353070133D46B0213D6B8 +:105230008701598E9318060193D8080113D70601E8 +:1052400013988700B3FB6B0233858802C20BB367E8 +:10525000770163F8A700B2971307F4FF63F6C7243A +:105260003A84898F33D76702C206C182B3F76702D7 +:10527000B38FE802C207DD8E63F8F601B29693079A +:10528000F7FF63FEC6203E874204598C9317040142 +:10529000131E0801C183135E0E01935E08011355AE +:1052A00004013387FE02B386F641338FC703B30F81 +:1052B000C50393570F017E97BA973305D50363F45F +:1052C000F70141673A95931F0F0113D70701139F09 +:1052D000070193DF0F01B307A7007E9F63E2F60E7D +:1052E000638EF60C330FEC41333CEC019D8E930F33 +:1052F000FB3FB38686417E876304D616B3D766022A +:1053000013550F01B3F66602B382F802C206C98EC6 +:1053100063FB5600B2961385F7FF63E2C61A63F08B +:10532000561AF917B296B386564033D56602420F25 +:10533000135F0F01B3F66602B388A802C206336F8B +:10534000DF00637B1F01329F9306F5FF636BCF166F +:1053500063791F177915329FC207C98F939607018A +:10536000C18293D207013385DE02330F1F4133839D +:10537000C203330EDE021A9593560E01AA96B38E1F +:105380005E0263F466004165AA9E13D50601420ED3 +:10539000135E0E01C2067695F2966367AF0A630349 +:1053A000AF0A930620C093E717006348DB1213850A +:1053B0004700B337F5000D813E94E5BBE374ECF391 +:1053C00033070C0133358701B30FC500FE963A8CC5 +:1053D000930FF4FF6371D60C63E6F600639FD70A60 +:1053E000637DE70B42973335070132957914AA960E +:1053F0003A8CCDBDE364FCE29396FB0113571C008D +:1054000093DB1B00D98E7E0C29BDEF10A0319307D2 +:105410005501F14613070502E3D2F6D46115B31B1B +:10542000A400014C89BB6685EF10C02F930755017E +:10543000F14613070502E3DAF6C861153394AC00B0 +:10544000814779B9E38E06D4329FFA881383F7FF38 +:10545000636BCF06636AAF126303AF149A8791B789 +:1054600001458547E34AF0F563960F08370700804A +:105470009317F4017D17D98F058013874700B33741 +:10548000F7003E94BA8713178400635907128547C3 +:1054900081460147B9B9630ED6027E84A1B5E3F413 +:1054A000F6DF7917B296CDB3E3FCA7DA7914B29799 +:1054B0004DBB93F6F7001146E38BC6CECDBDAA8750 +:1054C0009DB5368551BD9A87E39DA8ECE39B06ED1B +:1054D000C1B961F5E3E8F6F011B7130710C0631C1A +:1054E000EB0013D71700136717009317F401D98F38 +:1054F000058061B7FD5705473307F74193068003E1 +:10550000E3CDE6C0FD4663D2E60A8556B386F64192 +:1055100013060002B356D4006307C700130BEB4316 +:1055200033146401C18FB337F000D58F13F77700C0 +:10553000814611CF13F6F700114501476309A60014 +:105540003386A700B337F6001397D701B2878D8350 +:105550005D8F814779BEE3900FFA93F6770013D6FB +:1055600017007D4B0547ADE2331B6401558EB367D1 +:10557000CB0093F677003354E40091D613F7F7008D +:105580009146E302D7F0D5BD13131800B3380301D9 +:10559000B298FA98F9171A88E38AA8F219B5E36560 +:1055A000D8FE9A87E39F06DFE5BE130BEB41B39667 +:1055B0006701B336D00033D6E7007DB79316940069 +:1055C000B1821317D40161B7B3F6E70071BF93D866 +:1055D0004501B707100013D746012A88FD171303AA +:1055E000F07F93F8F87F33756700428E33F7B7008A +:1055F000B28EF58FFD81FD82638E6802630F6500B8 +:10560000639708043368070121E15D8E35C2631C8E +:105610000806139516007D1582805D8E3DE2639528 +:1056200008003367070175D7639BD50013951500F4 +:105630007D1582803367070129E7630E1503B305E3 +:10564000B04013E515008280E30508FCF1BF65D981 +:10565000E397D5FEE34515FFE3CAA8FCE3E1E7FEC7 +:10566000E316F7FCE3EDCEFD0145E361DEFD82804C +:10567000E31708FC8280D18F89E7E392D5FC0145CE +:10568000828079558280E38BD5FC55BF93D8450144 +:10569000B707100013D746012A88FD171303F07FC0 +:1056A00093F8F87F33756700428E33F7B700B28EF8 +:1056B000F58FFD81FD8263836804630F6500639B42 +:1056C0000804336807013DE95D8E15C6631D0806B1 +:1056D000139516007D1582805D8E094519EE639540 +:1056E0000800336707016DD76386D504B305B04062 +:1056F00013E515008280E31B08FE828033670701F3 +:1057000029E3E31515FFD18F0945E5FBE390D5FEAD +:105710000145828061DDE39BD5FCE34915FD63CB48 +:10572000A800E3E5E7FC6317F700E3E1CEFD0145E0 +:10573000E375DEFD139515007D158280E30A08F8F8 +:1057400065B709458280E38ED5FC4DB7797193D753 +:10575000450122D426D252CC56CA62C41394C50045 +:1057600006D64AD04ECE5AC85EC666C26AC093F705 +:10577000F77FAA8A328CB684318013DAF50163820E +:1057800007341307F07F6384E7220E041357D50113 +:10579000418F37048000138B17C0931B3500598C41 +:1057A000814C014D93D744011397C40093F7F77FC1 +:1057B000935AC700FD80638F07201307F07F638E25 +:1057C000E72C938717C029473E9B634C9725139777 +:1057D0003A009357DC01D98FB3469A00370780000F +:1057E0000946B3EAE70013183C00B68581476351C8 +:1057F0009603054633169601137706536314072262 +:1058000093750624639B053C13768608631A063A53 +:1058100093970B0113160801C183418293DB0B019F +:10582000135808013387C7023385CB02135307018E +:10583000B305F802AA952E93B38E0B036374A300ED +:10584000C165AE9E139E0A014207135E0E0193DAF4 +:105850000A01418393150301B388CB03BA9513530F +:1058600003013387C703B387FA0213550701C697AD +:105870003E95B38B5B0363741501C167BE9B9317A1 +:10588000040193180701C183418093D808011317BD +:105890000501B30FF802469741813A935E95B3082C +:1058A000C402338FC702C69F13560F017E9633087A +:1058B000880263741601C1684698420F9318060166 +:1058C000135F0F014182469F4296B308C403338899 +:1058D000C703B387FA02135E0801C6973E9EB38AD8 +:1058E0008A0263741E01C167BE9A9318080193D897 +:1058F000080193170E013308D301C6973E9533373D +:10590000E800B308E8012A973A9633B808013298BC +:10591000B337F5003335A700C98F3337E600135E80 +:105920000E013336C800F297518F939B98003E9733 +:10593000B3EBBB0056972607B33B700193D87801B1 +:1059400013547801B3EB1B01260893177700598C89 +:10595000B3EB0B0163C907109307FB3F635BF020B8 +:1059600013F77B0015C713F7FB0011466302C7024C +:1059700013874B00B33B77015E94BA8B1317740007 +:1059800063580700370700FF7D1793070B40798C9A +:105990001307E07F6349F7241317D40193DB3B001F +:1059A000260493F7F77F33677701318049A8B36BFB +:1059B000A40063940B1A3E8B93D744011397C40041 +:1059C00093F7F77F0144A14C094D935AC700FD801E +:1059D000E39507DE33E88A016308081263880A2228 +:1059E0005685EF003054AA87130755FFF546998E68 +:1059F000138887FF33970A01B356DC00B3EAE60049 +:105A000033180C01B307FB402947138BD7C0634AF7 +:105A100097018947B3469A00E3DC97DFB685814753 +:105A2000C9BBD28589476304FD1A8D47630CFD12FB +:105A30008547AE866314FD04814701440147D207C0 +:105A4000B250C18F2254FE06D58F92540259F249AA +:105A5000624AD24A424BB24B224C924C024D3A859A +:105A6000BE854561828093D71B0093FB1B00B3E783 +:105A70007701931BF401B3EB7701058093070B408B +:105A8000050B6358F00E13F77B00E30907EE13F7DD +:105A9000FB001146E31EC7ECD5B533E88A01130BB2 +:105AA000FB7F631B080893E72C002947E34BF7F6BD +:105AB000B3459A00AE86638E0C1CBE8C814A894722 +:105AC0000DBBB36BA400638C0B026303041222852D +:105AD000EF0050452A87930655FFF547930B87FF44 +:105AE000958F33147401B3D7FA005D8CB39B7A01A0 +:105AF0009307D0C0338BE740814C014D65B1014421 +:105B0000914C014B054D79B993EC1C00A947E3CAB0 +:105B100097F1B3459A000947AE86814A8547E34A23 +:105B200097CD09476385E70A054D85470144814BB9 +:105B3000AE86E315FDF409B793EC3C0029476345B5 +:105B4000971505473316970113768608B3469A00D2 +:105B500062888D47E30E06CAA5A0AA8B3E8BB14C86 +:105B60000D4D89B181469307F07F37040800014746 +:105B7000F9B50546DDEB130BEB41B3976B01B3377A +:105B8000F000331B6401B3E7670133D7CB005D8FAF +:105B9000937777003356C40081CF9377F700914510 +:105BA0006388B700B307B70033B7E7003A963E877C +:105BB0009317860063D1070E85470144014741B51D +:105BC0003E8D8947A6855684C28BE310FDE6AE86DE +:105BD0009307F07F014401479DB581469307F07F0D +:105BE00037040800A9BD9307F07F0144014781BD38 +:105BF000EF00503393065501F14713070502E3DE2A +:105C0000D7EC61153394AA00814BDDB56285EF00B6 +:105C1000703113075501F14693070502E3D8E6DC1E +:105C20006115B31AAC000148F1BB1D8E1307800348 +:105C3000E344C7E07D47E350C7F40557B307F74097 +:105C400013070002B357F4006308E600130BEB439D +:105C5000331B6401B3EB6B01333770015D8F9377B6 +:105C60007700014491CF1376F7009145814763098E +:105C7000B6003306B7003337E6009317D7013287F3 +:105C80000D835D8F814765BB81463704080001475E +:105C90007DB3894779B51314960031809317D601E7 +:105CA000C5B7B7071000FD170111B3F8B70013D837 +:105CB0004601F58F8E081397370026CA52C456C284 +:105CC000135AD50193DA45019357D60193D4F501C0 +:105CD0001303F07F06CE22CC4AC84EC61378F87F55 +:105CE000336A1A01328ED98FFD82B3FA6A00A68513 +:105CF000931E3500931836006308681693C6160085 +:105D000033870A416385D40C6352E05A630B081849 +:105D1000638F6A389306800363C3E61AB706800070 +:105D2000D58FFD4663C4E64693060002998E3394F0 +:105D3000D700B396D800B3D8E800B336D0003364A8 +:105D4000140133D7E700558C330AEA4033848E4080 +:105D5000B3BE8E00330ADA4193178A0063C3072E5D +:105D600093777400638D07329377F400114763884B +:105D7000E7329307440033B48700229A3E84931796 +:105D80008A0063DE073093871A001307F07F93F5CC +:105D90001400638FE726370780FF7D1793F7F77F9F +:105DA0003377EA001316D7010D802607418E318321 +:105DB000F2406244D207FE05D98FCD8FD2444249CA +:105DC000B249224A924A3285BE8505618280635873 +:105DD000E05A631C082033E71701630E072213877C +:105DE000FAFF630C074663846A5C9306800363C80A +:105DF000E620FD4663C0E65213060002198EB396F4 +:105E0000C7003396C800B3D8E8003336C00033D794 +:105E1000E700B3E61601B3E7C6003A9ABE9EB3B7F1 +:105E2000FE003E9A768493178A00E3DB07F2850A28 +:105E30009307F07F638CFA4CB70780FFFD17B377A9 +:105E4000FA001357140005889396F701418F13DA6F +:105E5000170033E4E6009377740095D39377F4004A +:105E60001147E398E7F021BF33E7170113861A8043 +:105E700069C76388D40C63070610638A0A2C13175A +:105E80003E001396D7010D83B684598E8D835D8EA7 +:105E90006309062081459307F07F37070800014614 +:105EA00001BF33E71701630807161387FAFF63087A +:105EB0000742638E6A1E93068003E3D4E6E61384EA +:105EC000FEFFB3BE8E00330ADA4113178A00B7070C +:105ED0008000E35007EA138AF7FF7D545285EF00F4 +:105EE0007004130785FF93070002B386E740B3569B +:105EF000D400331AEA00B3E646013314E400634BDE +:105F00005723330757410507998F3316F40033366B +:105F1000C000335AE400B397F6003366460133E419 +:105F2000C70033DAE600B3674401814A8DF793F581 +:105F30001400814701470146A5BD93C61600E39CA6 +:105F4000D4F2630E061663920A2C4287B366DA0116 +:105F5000638B06529306F7FF638106301306F07FCA +:105F60006305C72A130680036354D65A93968700A5 +:105F7000370A8000BA8A0144E3CB06EA138418008A +:105F80003E8AC5BB13871A001377E77F6311071892 +:105F900033E617013367DA01639C0A28630E07466C +:105FA000630D0614B3851E4133B6BE003307FA40B5 +:105FB000118F13168700635A0652B38ED841B3B8B7 +:105FC000D801B3874741B387174133E7FE00768492 +:105FD000B68431DF1397870063510756370780FF78 +:105FE0007D177D8FB685854775BB63826A0C9306E6 +:105FF000800363C6E600B7068000D58FDDBB1317AC +:106000008A00B70780006350072A3E8A014405B51D +:106010000147014671BB131435000D801316DA01D8 +:106020001307F07F418E93573A00E382EAE6B20706 +:1060300013D7C70093F5140093F7FA7F95BBB68486 +:10604000854A260A135A9A00E31A0AE82285D92DAE +:1060500013078501FD47E3D8E7E86115B316A400EF +:10606000634A5715330457411307140063D4E746B6 +:1060700005149307000233D48600630AF7009307E0 +:106080000004998FB397F600B337F0005D8CE300FE +:1060900004EA93777400814AE39207DC014A0D8099 +:1060A000B5BF93F514009307F07F014711B30E05B8 +:1060B0000D811316DA01498E93573A00C9BB138735 +:1060C0001A009376E77F639106103367DA016395D0 +:1060D0000A3AB3E617016304074085C2F698B3BED7 +:1060E000D801D297338AD70193178A00C68E63C32B +:1060F0000742B3E74801E38C07E293DE3E00131644 +:10610000DA013366D60193573A00814A0DB73384DA +:106110001E4133B68E003307FA40118F13168700E5 +:10612000634D060E3366E4003A8A19FE81458147C5 +:106130000147BDB9370A80FF7D1A93777400B38A8F +:10614000EA4033FA4601E39107C20D80C1BD4287A0 +:106150003366DA017DCA1306F7FF63070628930545 +:10616000F07FE30EB7D09305800363DEC53213845E +:10617000F8FFB3B88800338A174113168A00B707AF +:1061800080006349063AB684BA8AE5B6930607FEEC +:1061900013060002B3D6D700630AC7001306000433 +:1061A0003307E640B397E700B3E8F8003334100153 +:1061B000558C69BEB70780FFFD17F58F1396D70181 +:1061C000B38AEA408D83A5B59306F07F6302D72A90 +:1061D000F698B3BED801D297F69793D818001394C7 +:1061E000F70193F678003364140113DA1700638E15 +:1061F00006349376F4001146BA8AE39CC6B61316A9 +:10620000DA010D80418E91831DB513173E00139660 +:10621000D7010D83598E8D839DB9B38ED841B3B804 +:10622000D801B38747417684338A1741B68429BDA4 +:10623000631D07166308062C13163E001397D7013B +:106240000D82B684598E8D8399B113163E00135476 +:106250003600B684BA8A3E8AD1B3F698B3BED80166 +:10626000D297F6971397870063560722370780FF68 +:106270007D1793D61800F98F1397F70193F57600E1 +:10628000558F13D61700638905269376F70091453D +:106290006384B6263304B7003337E400330AC700FB +:1062A000894A0D80A5BB13841E00E1B4E30C07CC22 +:1062B00033075841E38E0AE8130680036350E6086B +:1062C0001384F8FFB3B88800338A174113178A0084 +:1062D000B707800063480718B684C28A59BCB388E0 +:1062E0001E41B307FA40B3BE1E01338AD74193174C +:1062F0008A004684E3C607D493D838001316DA011F +:1063000033E6C80093573A00854A15B3D68701474C +:10631000014679BC930607FE13060002B3D6D700E8 +:10632000630AC700130600043307E640B397E7008B +:10633000B3E8F800B3371001D58FCDB4370680002D +:10634000B684336ACA00FD4663CCE60693060002B3 +:10635000998E3314DA00B396DE00B3DEEE00B33666 +:10636000D0003364D4013357EA00558C998F3384BD +:106370008840B3B88800338A1741C28AF1BAE30073 +:1063800007D433075841E3830ABC9306800363DBD9 +:10639000E60813978700370A8000C28A0144E34861 +:1063A00007A8138418003E8AE9B2E31506AE9317D6 +:1063B00035008D831316DA015D8E93573A00C1BC08 +:1063C000930607FE13060002B356DA00630AC700FD +:1063D000130600043307E6403317EA00B3EEEE007D +:1063E0003334D001558C61B7B38ED841B387474160 +:1063F000B3B8D801338A174193178A007684E3C073 +:1064000007C493DE3E001316DA01B6843366D60164 +:1064100093573A00854A21B9E30A06D03E8AC68ED0 +:10642000B684E1B9B7068000336ADA00FD4663CF6F +:10643000E60613060002198EB316CA003396CE0084 +:10644000B3DEEE003336C000B3E6D6013357EA00C0 +:10645000D18EBA97B698B3B6D800338AF600468480 +:10646000C28AD1B2C28AB684138AF7FF7D54BDB402 +:10647000BA87014601472DBAE30907D8B3E81701E7 +:10648000E39A08A02DB713163E0013543600BA8ABB +:106490003E8A69B61396D70193D838003366160141 +:1064A0008D83854A69B6B684328771BD130607FEAF +:1064B000930600023356CA00630AD700930600040D +:1064C0003387E6403317EA00B3EEEE00B336D0016F +:1064D000D18E49B793070002998F01462DBCE388FE +:1064E00006A446843E8A0D8015BE33E6E500E30F20 +:1064F00006C23A8AAE8E11B10D837606598E91830B +:10650000894A35B681459307F07F370708004DB0BB +:10651000368729BFB70780FFFD17B377FA001396B8 +:10652000D70193DE3800A60713D7C7003366D6011C +:106530008547BDB8BA8AB68479BA1396D70193DE77 +:106540003E003366D6018D83DDB40D801316DA016B +:10655000418E9183BA8AE1BC13D74501B707100079 +:10656000FD171347F7FF13D84601FD8DF58F9316DE +:1065700057011378F87F99CA1307F07F0145630329 +:10658000E8008280D18F3335F0008280C98D0545C7 +:10659000E5D5828093D74501B70610001387F6FF33 +:1065A00093F7F77F1306E03F6D8FFD81635BF60085 +:1065B0001306D0416359F600370500807D152E95EE +:1065C000828001458280130630431D8E7D48558FA1 +:1065D000635DC80093063041B387F6403357F70038 +:1065E0003305E040E5F13A8582809387D7BE3317C3 +:1065F000F7003355C500498FE5B793D745013706F6 +:1066000010001307F6FF93F7F77F1308E03FAA8601 +:106610006D8F0145FD816353F80091C18280930520 +:10662000E0417D55E3CCF5FE930530439D8D7D45DE +:10663000518F634AB5009387D7BE3317F70033D520 +:10664000B600598D8280130530411D8D3355A7004A +:106650008280011106CE22CC26CA4AC84EC60DCD74 +:106660001357F541B344A700998CAA87268513D404 +:10667000F7014D289307E041898F294793F7F77F6A +:10668000634DA7022D47098F33D7E4003207550524 +:106690003183B394A40029A0014481470147814478 +:1066A000D2077E04D98FF240C18F62444249B24979 +:1066B0002685BE85D2440561828055153397A40096 +:1066C000320731838144E9BF411122C406C64AC260 +:1066D0004EC02A840DC5B9209307E041898F294710 +:1066E00093F7F77F6349A7022D47098F3357E400DB +:1066F00032079306550131833314D40019A0814722 +:106700000147B24022852244D207D98F12498249DB +:10671000BE854101828055153317A40032073183AD +:106720000144C5B7C1676376F50213370510133707 +:1067300017000E07B77700203355E5009387C7C8C9 +:10674000AA9703C5070093060002998E3385A640D9 +:106750008280B70700016370F502C1463687B777BC +:1067600000203355E5009387C7C8AA9703C50700E3 +:106770003385A64082806147B77700203355E50016 +:106780009387C7C8AA9703C50700A1463385A640CB +:106790008280937735002A879DEFB7867F7F938627 +:1067A000F6F7FD5510431107B377D600B697D18F92 +:1067B000D58FE389B7FE8346C7FFB307A7408DCACD +:1067C0008346D7FF9DC20345E7FF3335A0003E95C2 +:1067D00079158280F9D28347070005079376370041 +:1067E000F5FB098F1305F7FF82801385D7FF8280A1 +:0867F0001385C7FF8280000041 +:1067F800426C696E6B696E672070696E2025642033 +:10680800617420256420487A0A0000004C6F616496 +:1068180065642070726F6772616D206174202575E0 +:10682800206F6E2070696F2025750A00416C6C20FE +:106838006C6564732073686F756C6420626520668C +:106848006C617368696E67006C65642070696E209E +:10685800333A2025640A0000000000006C656420BB +:1068680070696E2033323A2025640A000A2A2A2ADF +:106878002050414E4943202A2A2A0A000A000000D3 +:10688800486172647761726520616C61726D202560 +:106898006420616C726561647920636C61696D65FF +:1068A800640000004861726420617373657274004B +:1068B80052656C656173650068747470733A2F2F44 +:1068C8006769746875622E636F6D2F726173706289 +:1068D8006572727970692F7069636F2D6578616D63 +:1068E800706C65732F747265652F484541442F702D +:1068F800696F2F70696F5F626C696E6B00000000D2 +:10690800322E312E3000000070696D6F726F6E6923 +:106918005F706761323335300000000070696F5F67 +:10692800626C696E6B000000466562203137203268 +:1069380030323500666E692B00000000666E690013 +:106948006E616E00666E692D00000000554152545C +:1069580020737464696E0000554152542073746446 +:106968006F7574005541525420737464696E202FFA +:10697800207374646F75740050494F203020534D54 +:1069880020256420616C726561647920636C61699B +:106998006D65640050494F203220534D20282564EE +:1069A800202D20382920616C726561647920636C20 +:1069B80061696D656400000050494F203120534DD6 +:1069C80020282564202D20342920616C726561649B +:1069D8007920636C61696D65640000004E6F20501A +:1069E800494F207374617465206D616368696E65D1 +:1069F800732061726520617661696C61626C650003 +:106A0800A080406022A001E0440022A000E04700EE +:106A180006005250D3F07542B86800200600525064 +:106A28009A235618C068002006005250BBFF3CB697 +:106A380010690020102A0020B2290020B229002065 +:106A4800082A0020B2290020B2290020B2290020FB +:106A5800B2290020B2290020B2290020B229002042 +:106A6800002A0020B2290020F8290020B22900209D +:106A7800B2290020F02900202C2C0020222A0020F6 +:106A8800202C0020222A0020062C0020222A002068 +:106A9800222A0020222A0020222A0020222A00203E +:106AA800222A0020222A0020182A0020222A002038 +:106AB800222A0020222A0020222A0020222A00201E +:106AC800182A0020A42C00207829002078290020EA +:106AD80078290020782900207829002078290020AA +:106AE800782900207829002078290020782900209A +:106AF800782900207829002078290020782900208A +:106B08007829002078290020782900207829002079 +:106B18007829002078290020782900207829002069 +:106B28007829002078290020782900207829002059 +:106B38007829002078290020782900207829002049 +:106B480078290020402C00207A2C0020402C00209E +:106B58007829002078290020782900207829002029 +:106B68007829002078290020782900207829002019 +:106B78007829002078290020782900207829002009 +:106B880078290020782900207829002078290020F9 +:106B9800DE2D00207829002078290020782900207F +:106BA80078290020782900207829002078290020D9 +:106BB8007829002078290020DE2D0020B42C002020 +:106BC800DE2D0020402C00207A2C0020402C0020B4 +:106BD800000000000000F03F00000000000024401A +:106BE80000000000000059400000000000408F40F5 +:106BF800000000000088C34000000000006AF84060 +:106C08000000000080842E4100000000D012634183 +:106C18000000000084D797410000000065CDCD41F9 +:106C28000600525053B4F4A16C6900200D00525074 +:106C380012000000000000000D0052501201010077 +:106C48000000000014520020EA5000201A510020D1 +:106C5800E45100201A510020225100201A5100202E +:106C6800E4510020EA500020EA5000202251002080 +:106C7800E4510020845100208451002084510020D8 +:106C88002251002000010202030303030404040448 +:106C980004040404050505050505050505050505A0 +:106CA8000505050506060606060606060606060680 +:106CB800060606060606060606060606060606066C +:106CC8000606060607070707070707070707070750 +:106CD800070707070707070707070707070707073C +:106CE800070707070707070707070707070707072C +:106CF800070707070707070707070707070707071C +:106D080007070707080808080808080808080808FF +:106D180008080808080808080808080808080808EB +:106D280008080808080808080808080808080808DB +:106D380008080808080808080808080808080808CB +:106D480008080808080808080808080808080808BB +:106D580008080808080808080808080808080808AB +:106D6800080808080808080808080808080808089B +:106D7800080808080808080808080808080808088B +:106D880008080808086A002008FF00000000000042 +:106D9800FFFFFFFFFFFFEFFFFFFFFFFFFFFFEF7F9B +:106DA8000000000065CDCD410000000065CDCDC1DB +:106DB800000000000000E03FFB799F501344D33FE0 +:106DC800B3C8608B288AC63F000000000000F83F67 +:106DD80061436F63A787D23F71A379094F930A4034 +:106DE8001655B5BBB16B0240EF39FAFE422EE63FAD +:106DF8000000000000002C400000000000002440BB +:106E080000000000000018400000000000000040E2 +:106E1800000000000000F03F2D431CEBE2361A3F53 +:0C6E28000000000080842E410D0A0000D4 +:106E3400186A0020246A0020C0010020306A002063 +:106E4400CC010020D8010020406C0020346C0020CC +:046E5400286C002086 +:106E58000000000000000000000001000000000029 +:106E68000000000000000200000000000000000018 +:106E78000000030000000000000000000000FF0008 +:106E880042B89380420083A202008282138560FF89 +:106E9800EF907FE042BE000000000000000000000C +:106EA800000000000000000000000000106F00203B +:106EB800723800205C390020BC3800206839002076 +:106EC80000000000000100001000000000000000A9 +:106ED800000000009A190020C4190020141A00208C +:106EE800DE19002012190020101A002000190020B5 +:106EF8009C0D0020DE11002054190020FA190020F2 +:086F0800BA3300203808002014 +:0400000520000220B5 +:00000001FF diff --git a/demo/riscv_timer/hello_timer.dis b/demo/riscv_timer/hello_timer.dis new file mode 100644 index 0000000000..ed4dbd92c6 --- /dev/null +++ b/demo/riscv_timer/hello_timer.dis @@ -0,0 +1,9263 @@ + +/home/malte/project/private/pico-examples/timer/hello_timer/hello_timer.elf: file format elf32-littleriscv + +Sections: +Idx Name Size VMA LMA File off Algn + 0 .text 00003c3c 10000000 10000000 00001000 2**2 + CONTENTS, ALLOC, LOAD, READONLY, CODE + 1 .rodata 0000046c 10003c40 10003c40 00004c40 2**3 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 2 .binary_info 0000002c 100040ac 100040ac 000050ac 2**2 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 3 .uninitialized_data 00000000 20000000 20000000 00008d38 2**0 + CONTENTS + 4 .data 00002c4c 20000000 100040d8 00006000 2**6 + CONTENTS, ALLOC, LOAD, CODE + 5 .tdata 00000000 20002c4c 20002c4c 00008d38 2**0 + CONTENTS, ALLOC, LOAD, DATA, THREAD_LOCAL + 6 .tbss 00000000 20002c4c 20002c4c 00000000 2**0 + ALLOC, THREAD_LOCAL + 7 .bss 0000022c 20002c50 10006d24 00009c50 2**3 + ALLOC + 8 .heap 00000800 20002e7c 20002e7c 00008d38 2**2 + CONTENTS, READONLY + 9 .scratch_x 00000000 20080000 20080000 00009538 2**0 + CONTENTS + 10 .scratch_y 00000000 20081000 20081000 00009538 2**0 + CONTENTS + 11 .stack_dummy 00000800 20081000 20081000 00009540 2**5 + CONTENTS, READONLY + 12 .flash_end 00000014 10006d24 10006d24 00008d24 2**2 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 13 .comment 00000035 00000000 00000000 00009d40 2**0 + CONTENTS, READONLY + 14 .riscv.attributes 0000006a 00000000 00000000 00009d75 2**0 + CONTENTS, READONLY + 15 .debug_info 0001eb73 00000000 00000000 00009ddf 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 16 .debug_abbrev 000064e4 00000000 00000000 00028952 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 17 .debug_loclists 00014090 00000000 00000000 0002ee36 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 18 .debug_aranges 00000cb0 00000000 00000000 00042ec8 2**3 + CONTENTS, READONLY, DEBUGGING, OCTETS + 19 .debug_rnglists 00004000 00000000 00000000 00043b78 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 20 .debug_line 00023cc0 00000000 00000000 00047b78 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 21 .debug_str 00004d38 00000000 00000000 0006b838 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 22 .debug_line_str 00001fc5 00000000 00000000 00070570 2**0 + CONTENTS, READONLY, DEBUGGING, OCTETS + 23 .debug_frame 0000243c 00000000 00000000 00072538 2**2 + CONTENTS, READONLY, DEBUGGING, OCTETS + +/home/malte/project/private/pico-examples/timer/hello_timer/hello_timer.elf: file format elf32-littleriscv + + +Disassembly of section .text: + +10000000 <__flash_binary_start>: +10000000: ebf2 .insn 2, 0xebf2 +10000002: 7188 .insn 2, 0x7188 +10000004: 40ac lw a1,64(s1) +10000006: 1000 addi s0,sp,32 +10000008: 40d8 lw a4,4(s1) +1000000a: 1000 addi s0,sp,32 +1000000c: 00a4 addi s1,sp,72 +1000000e: 1000 addi s0,sp,32 +10000010: a390 .insn 2, 0xa390 +10000012: e71a .insn 2, 0xe71a + +10000014 <__binary_info_header_end>: +10000014: ffffded3 .insn 4, 0xffffded3 +10000018: 0142 slli sp,sp,0x10 +1000001a: 1101 addi sp,sp,-32 +1000001c: 0344 addi s1,sp,388 +1000001e: 0000 unimp +10000020: 0036 c.slli zero,0xd +10000022: 1000 addi s0,sp,32 +10000024: 2000 .insn 2, 0x2000 +10000026: 2008 .insn 2, 0x2008 +10000028: 04ff 0000 6d10 0000 .insn 10, 0x357900006d10000004ff +10000030: 3579 +10000032: ab12 .insn 2, 0xab12 + +10000034 <__embedded_block_end>: +10000034: a869 j 100000ce + +10000036 <_reset_handler>: +10000036: 10003197 auipc gp,0x10003 +1000003a: 61e18193 addi gp,gp,1566 # 20003654 <__global_pointer$> +1000003e: 10082117 auipc sp,0x10082 +10000042: fc210113 addi sp,sp,-62 # 20082000 <__StackTop> +10000046: 10003517 auipc a0,0x10003 +1000004a: a3b50513 addi a0,a0,-1477 # 20002a81 <__VECTOR_TABLE+0x1> +1000004e: 30551073 csrw mtvec,a0 +10000052: f1402573 csrr a0,mhartid +10000056: ed25 bnez a0,100000ce +10000058: 00000717 auipc a4,0x0 +1000005c: 04c70713 addi a4,a4,76 # 100000a4 +10000060: 430c lw a1,0(a4) +10000062: c591 beqz a1,1000006e <_reset_handler+0x38> +10000064: 4350 lw a2,4(a4) +10000066: 4714 lw a3,8(a4) +10000068: 0731 addi a4,a4,12 +1000006a: 280d jal 1000009c +1000006c: bfd5 j 10000060 <_reset_handler+0x2a> +1000006e: 10003597 auipc a1,0x10003 +10000072: bde58593 addi a1,a1,-1058 # 20002c4c <__TMC_END__> +10000076: 82818613 addi a2,gp,-2008 # 20002e7c <__bss_end__> +1000007a: a021 j 10000082 + +1000007c : +1000007c: 0005a023 sw zero,0(a1) +10000080: 0591 addi a1,a1,4 + +10000082 : +10000082: fec59de3 bne a1,a2,1000007c + +10000086 : +10000086: 470030ef jal 100034f6 +1000008a: 2281 jal 100001ca
+1000008c: 464030ef jal 100034f0 +10000090: 9002 ebreak +10000092: bffd j 10000090 + +10000094 : +10000094: 4188 lw a0,0(a1) +10000096: c208 sw a0,0(a2) +10000098: 0591 addi a1,a1,4 +1000009a: 0611 addi a2,a2,4 + +1000009c : +1000009c: fed66ce3 bltu a2,a3,10000094 +100000a0: 8082 ret +100000a2: 0001 nop + +100000a4 : +100000a4: 100040d8 .word 0x100040d8 +100000a8: 20000000 .word 0x20000000 +100000ac: 20002c4c .word 0x20002c4c +100000b0: 10006d24 .word 0x10006d24 +100000b4: 20080000 .word 0x20080000 +100000b8: 20080000 .word 0x20080000 +100000bc: 10006d24 .word 0x10006d24 +100000c0: 20081000 .word 0x20081000 +100000c4: 20081000 .word 0x20081000 +100000c8: 00000000 .word 0x00000000 +100000cc: 8082 ret + +100000ce : +100000ce: 6521 lui a0,0x8 +100000d0: dfc50513 addi a0,a0,-516 # 7dfc +100000d4: 8502 jr a0 + +100000d6 : +100000d6: 20003537 lui a0,0x20003 +100000da: 20003737 lui a4,0x20003 +100000de: c4c50793 addi a5,a0,-948 # 20002c4c <__TMC_END__> +100000e2: c4c70713 addi a4,a4,-948 # 20002c4c <__TMC_END__> +100000e6: 00f70863 beq a4,a5,100000f6 +100000ea: 00000793 li a5,0 +100000ee: c781 beqz a5,100000f6 +100000f0: c4c50513 addi a0,a0,-948 +100000f4: 8782 jr a5 +100000f6: 8082 ret + +100000f8 : +100000f8: 20003537 lui a0,0x20003 +100000fc: c4c50793 addi a5,a0,-948 # 20002c4c <__TMC_END__> +10000100: 20003737 lui a4,0x20003 +10000104: c4c70593 addi a1,a4,-948 # 20002c4c <__TMC_END__> +10000108: 8d9d sub a1,a1,a5 +1000010a: 4025d793 srai a5,a1,0x2 +1000010e: 81fd srli a1,a1,0x1f +10000110: 95be add a1,a1,a5 +10000112: 8585 srai a1,a1,0x1 +10000114: c599 beqz a1,10000122 +10000116: 00000793 li a5,0 +1000011a: c781 beqz a5,10000122 +1000011c: c4c50513 addi a0,a0,-948 +10000120: 8782 jr a5 +10000122: 8082 ret + +10000124 <__do_global_dtors_aux>: +10000124: 1141 addi sp,sp,-16 +10000126: c422 sw s0,8(sp) +10000128: 20003437 lui s0,0x20003 +1000012c: dd044783 lbu a5,-560(s0) # 20002dd0 +10000130: c606 sw ra,12(sp) +10000132: e385 bnez a5,10000152 <__do_global_dtors_aux+0x2e> +10000134: 374d jal 100000d6 +10000136: 00000793 li a5,0 +1000013a: cb89 beqz a5,1000014c <__do_global_dtors_aux+0x28> +1000013c: 10004537 lui a0,0x10004 +10000140: c3c50513 addi a0,a0,-964 # 10003c3c <__EH_FRAME_BEGIN__> +10000144: 00000097 auipc ra,0x0 +10000148: 000000e7 jalr zero # 0 +1000014c: 4785 li a5,1 +1000014e: dcf40823 sb a5,-560(s0) +10000152: 40b2 lw ra,12(sp) +10000154: 4422 lw s0,8(sp) +10000156: 0141 addi sp,sp,16 +10000158: 8082 ret + +1000015a : +1000015a: 00000793 li a5,0 +1000015e: c395 beqz a5,10000182 +10000160: 200035b7 lui a1,0x20003 +10000164: 10004537 lui a0,0x10004 +10000168: 1141 addi sp,sp,-16 +1000016a: dd458593 addi a1,a1,-556 # 20002dd4 +1000016e: c3c50513 addi a0,a0,-964 # 10003c3c <__EH_FRAME_BEGIN__> +10000172: c606 sw ra,12(sp) +10000174: 00000097 auipc ra,0x0 +10000178: 000000e7 jalr zero # 0 +1000017c: 40b2 lw ra,12(sp) +1000017e: 0141 addi sp,sp,16 +10000180: bfa5 j 100000f8 +10000182: bf9d j 100000f8 + +10000184 : +10000184: 85aa mv a1,a0 +10000186: 10004537 lui a0,0x10004 +1000018a: 1141 addi sp,sp,-16 +1000018c: c4050513 addi a0,a0,-960 # 10003c40 <__EH_FRAME_BEGIN__+0x4> +10000190: c606 sw ra,12(sp) +10000192: 7f2030ef jal 10003984 <__wrap_printf> +10000196: 40b2 lw ra,12(sp) +10000198: 200037b7 lui a5,0x20003 +1000019c: 4705 li a4,1 +1000019e: e4e78a23 sb a4,-428(a5) # 20002e54 +100001a2: 4501 li a0,0 +100001a4: 4581 li a1,0 +100001a6: 0141 addi sp,sp,16 +100001a8: 8082 ret + +100001aa : +100001aa: 1141 addi sp,sp,-16 +100001ac: c606 sw ra,12(sp) +100001ae: 3fa010ef jal 100015a8 +100001b2: 862a mv a2,a0 +100001b4: 10004537 lui a0,0x10004 +100001b8: 86ae mv a3,a1 +100001ba: c5450513 addi a0,a0,-940 # 10003c54 <__EH_FRAME_BEGIN__+0x18> +100001be: 7c6030ef jal 10003984 <__wrap_printf> +100001c2: 40b2 lw ra,12(sp) +100001c4: 4505 li a0,1 +100001c6: 0141 addi sp,sp,16 +100001c8: 8082 ret + +100001ca
: +100001ca: 7179 addi sp,sp,-48 +100001cc: d606 sw ra,44(sp) +100001ce: d422 sw s0,40(sp) +100001d0: d226 sw s1,36(sp) +100001d2: 5f2030ef jal 100037c4 +100001d6: 10004537 lui a0,0x10004 +100001da: c6450513 addi a0,a0,-924 # 10003c64 <__EH_FRAME_BEGIN__+0x28> +100001de: 698030ef jal 10003876 <__wrap_puts> +100001e2: 4ab000ef jal 10000e8c +100001e6: 842a mv s0,a0 +100001e8: 3c0010ef jal 100015a8 +100001ec: 6795 lui a5,0x5 +100001ee: e2078793 addi a5,a5,-480 # 4e20 +100001f2: 97aa add a5,a5,a0 +100001f4: 00a7b633 sltu a2,a5,a0 +100001f8: 80000737 lui a4,0x80000 +100001fc: 962e add a2,a2,a1 +100001fe: 177d addi a4,a4,-1 # 7fffffff <__StackTop+0x5ff7dfff> +10000200: 85be mv a1,a5 +10000202: 00c77463 bgeu a4,a2,1000020a +10000206: 863a mv a2,a4 +10000208: 55fd li a1,-1 +1000020a: 100006b7 lui a3,0x10000 +1000020e: 4701 li a4,0 +10000210: 8522 mv a0,s0 +10000212: 18468693 addi a3,a3,388 # 10000184 +10000216: 4781 li a5,0 +10000218: 47f000ef jal 10000e96 +1000021c: 20003737 lui a4,0x20003 +10000220: e5474783 lbu a5,-428(a4) # 20002e54 +10000224: dff5 beqz a5,10000220 +10000226: 467000ef jal 10000e8c +1000022a: 100004b7 lui s1,0x10000 +1000022e: 65b1 lui a1,0xc +10000230: 003c addi a5,sp,8 +10000232: 1aa48693 addi a3,s1,426 # 100001aa +10000236: 4701 li a4,0 +10000238: 4601 li a2,0 +1000023a: 35058593 addi a1,a1,848 # c350 +1000023e: 132010ef jal 10001370 +10000242: 1f400513 li a0,500 +10000246: 6df000ef jal 10001124 +1000024a: 0028 addi a0,sp,8 +1000024c: 28e010ef jal 100014da +10000250: 10004437 lui s0,0x10004 +10000254: 85aa mv a1,a0 +10000256: c7440513 addi a0,s0,-908 # 10003c74 <__EH_FRAME_BEGIN__+0x38> +1000025a: 72a030ef jal 10003984 <__wrap_printf> +1000025e: 1f400513 li a0,500 +10000262: 6c3000ef jal 10001124 +10000266: 427000ef jal 10000e8c +1000026a: 75d1 lui a1,0xffff4 +1000026c: 003c addi a5,sp,8 +1000026e: 1aa48693 addi a3,s1,426 +10000272: 4701 li a4,0 +10000274: 567d li a2,-1 +10000276: cb058593 addi a1,a1,-848 # ffff3cb0 <__StackTop+0xdff71cb0> +1000027a: 0f6010ef jal 10001370 +1000027e: 1f400513 li a0,500 +10000282: 6a3000ef jal 10001124 +10000286: 0028 addi a0,sp,8 +10000288: 252010ef jal 100014da +1000028c: 85aa mv a1,a0 +1000028e: c7440513 addi a0,s0,-908 +10000292: 6f2030ef jal 10003984 <__wrap_printf> +10000296: 1f400513 li a0,500 +1000029a: 68b000ef jal 10001124 +1000029e: 10004537 lui a0,0x10004 +100002a2: c8850513 addi a0,a0,-888 # 10003c88 <__EH_FRAME_BEGIN__+0x4c> +100002a6: 5d0030ef jal 10003876 <__wrap_puts> +100002aa: 50b2 lw ra,44(sp) +100002ac: 5422 lw s0,40(sp) +100002ae: 5492 lw s1,36(sp) +100002b0: 4501 li a0,0 +100002b2: 6145 addi sp,sp,48 +100002b4: 8082 ret + +100002b6 : +100002b6: 400387b7 lui a5,0x40038 +100002ba: 0791 addi a5,a5,4 # 40038004 <__StackTop+0x1ffb6004> +100002bc: 20f547b3 sh2add a5,a0,a5 +100002c0: 4398 lw a4,0(a5) +100002c2: 6685 lui a3,0x1 +100002c4: 96be add a3,a3,a5 +100002c6: 04074713 xori a4,a4,64 +100002ca: 0c077713 andi a4,a4,192 +100002ce: 40028637 lui a2,0x40028 +100002d2: c298 sw a4,0(a3) +100002d4: 20c56533 sh3add a0,a0,a2 +100002d8: 670d lui a4,0x3 +100002da: 97ba add a5,a5,a4 +100002dc: c14c sw a1,4(a0) +100002de: 10000713 li a4,256 +100002e2: c398 sw a4,0(a5) +100002e4: 8082 ret + +100002e6 : +100002e6: 7139 addi sp,sp,-64 +100002e8: 10004337 lui t1,0x10004 +100002ec: cc22 sw s0,24(sp) +100002ee: 842a mv s0,a0 +100002f0: c9030513 addi a0,t1,-880 # 10003c90 <__EH_FRAME_BEGIN__+0x54> +100002f4: ce06 sw ra,28(sp) +100002f6: d22e sw a1,36(sp) +100002f8: d432 sw a2,40(sp) +100002fa: d636 sw a3,44(sp) +100002fc: d83a sw a4,48(sp) +100002fe: da3e sw a5,52(sp) +10000300: dc42 sw a6,56(sp) +10000302: de46 sw a7,60(sp) +10000304: 572030ef jal 10003876 <__wrap_puts> +10000308: cc01 beqz s0,10000320 +1000030a: 104c addi a1,sp,36 +1000030c: 8522 mv a0,s0 +1000030e: c62e sw a1,12(sp) +10000310: 18e030ef jal 1000349e +10000314: 10004537 lui a0,0x10004 +10000318: ca050513 addi a0,a0,-864 # 10003ca0 <__EH_FRAME_BEGIN__+0x64> +1000031c: 55a030ef jal 10003876 <__wrap_puts> +10000320: 4505 li a0,1 +10000322: 1ca030ef jal 100034ec <_exit> + +10000326 : +10000326: 300476f3 csrrci a3,mstatus,8 +1000032a: 20003737 lui a4,0x20003 +1000032e: df770713 addi a4,a4,-521 # 20002df7 <_sw_spin_locks+0xb> +10000332: 00371813 slli a6,a4,0x3 +10000336: 29001833 bset a6,zero,a6 +1000033a: 9b71 andi a4,a4,-4 +1000033c: 450728af amoor.w.aq a7,a6,(a4) +10000340: 0108f8b3 and a7,a7,a6 +10000344: fe089ce3 bnez a7,1000033c +10000348: 0330000f fence rw,rw +1000034c: 0035d713 srli a4,a1,0x3 +10000350: 953a add a0,a0,a4 +10000352: 00054703 lbu a4,0(a0) +10000356: 0075f793 andi a5,a1,7 +1000035a: 28f017b3 bset a5,zero,a5 +1000035e: 00f77833 and a6,a4,a5 +10000362: 02081163 bnez a6,10000384 +10000366: 8f5d or a4,a4,a5 +10000368: 00e50023 sb a4,0(a0) +1000036c: 0330000f fence rw,rw +10000370: 200037b7 lui a5,0x20003 +10000374: dec78793 addi a5,a5,-532 # 20002dec <_sw_spin_locks> +10000378: 000785a3 sb zero,11(a5) +1000037c: 8aa1 andi a3,a3,8 +1000037e: 3006a073 csrs mstatus,a3 +10000382: 8082 ret +10000384: 1141 addi sp,sp,-16 +10000386: 8532 mv a0,a2 +10000388: c606 sw ra,12(sp) +1000038a: 3fb1 jal 100002e6 + +1000038c : +1000038c: 20003737 lui a4,0x20003 +10000390: c4074503 lbu a0,-960(a4) # 20002c40 +10000394: 46dd li a3,23 +10000396: 00150793 addi a5,a0,1 +1000039a: 0ff7f793 zext.b a5,a5 +1000039e: 00f6f363 bgeu a3,a5,100003a4 +100003a2: 47c1 li a5,16 +100003a4: c4f70023 sb a5,-960(a4) +100003a8: 8082 ret + +100003aa : +100003aa: 200036b7 lui a3,0x20003 +100003ae: dec68693 addi a3,a3,-532 # 20002dec <_sw_spin_locks> +100003b2: 4781 li a5,0 +100003b4: 02000613 li a2,32 +100003b8: 0330000f fence rw,rw +100003bc: 00f68733 add a4,a3,a5 +100003c0: 00070023 sb zero,0(a4) +100003c4: 0785 addi a5,a5,1 +100003c6: fec799e3 bne a5,a2,100003b8 +100003ca: 8082 ret + +100003cc : +100003cc: 4681 li a3,0 +100003ce: 483d li a6,15 +100003d0: 451d li a0,7 +100003d2: 03400593 li a1,52 +100003d6: 0036f793 andi a5,a3,3 +100003da: 078a slli a5,a5,0x2 +100003dc: 00f81733 sll a4,a6,a5 +100003e0: 0026d613 srli a2,a3,0x2 +100003e4: 0742 slli a4,a4,0x10 +100003e6: 8f51 or a4,a4,a2 +100003e8: be373073 csrc 0xbe3,a4 +100003ec: 00f517b3 sll a5,a0,a5 +100003f0: 07c2 slli a5,a5,0x10 +100003f2: 8fd1 or a5,a5,a2 +100003f4: be37a073 csrs 0xbe3,a5 +100003f8: 0685 addi a3,a3,1 +100003fa: fcb69ee3 bne a3,a1,100003d6 +100003fe: 8082 ret + +10000400 : +10000400: 00555793 srli a5,a0,0x5 +10000404: 0786 slli a5,a5,0x1 +10000406: 28a01533 bset a0,zero,a0 +1000040a: 76c1 lui a3,0xffff0 +1000040c: 8ee9 and a3,a3,a0 +1000040e: 00178713 addi a4,a5,1 +10000412: 0542 slli a0,a0,0x10 +10000414: 8f55 or a4,a4,a3 +10000416: 8d5d or a0,a0,a5 +10000418: c991 beqz a1,1000042c +1000041a: be253073 csrc 0xbe2,a0 +1000041e: be273073 csrc 0xbe2,a4 +10000422: be052073 csrs 0xbe0,a0 +10000426: be072073 csrs 0xbe0,a4 +1000042a: 8082 ret +1000042c: be053073 csrc 0xbe0,a0 +10000430: be073073 csrc 0xbe0,a4 +10000434: 8082 ret + +10000436 : +10000436: 1141 addi sp,sp,-16 +10000438: c226 sw s1,4(sp) +1000043a: c606 sw ra,12(sp) +1000043c: c422 sw s0,8(sp) +1000043e: c04a sw s2,0(sp) +10000440: 84ae mv s1,a1 +10000442: 30047973 csrrci s2,mstatus,8 +10000446: 200037b7 lui a5,0x20003 +1000044a: df578793 addi a5,a5,-523 # 20002df5 <_sw_spin_locks+0x9> +1000044e: 00379713 slli a4,a5,0x3 +10000452: 28e01733 bset a4,zero,a4 +10000456: 9bf1 andi a5,a5,-4 +10000458: 44e7a6af amoor.w.aq a3,a4,(a5) +1000045c: 8ef9 and a3,a3,a4 +1000045e: feed bnez a3,10000458 +10000460: 0330000f fence rw,rw +10000464: 305027f3 csrr a5,mtvec +10000468: 03450513 addi a0,a0,52 +1000046c: 9bf1 andi a5,a5,-4 +1000046e: 20f547b3 sh2add a5,a0,a5 +10000472: 4398 lw a4,0(a5) +10000474: 200037b7 lui a5,0x20003 +10000478: c2478793 addi a5,a5,-988 # 20002c24 <__unhandled_user_irq> +1000047c: 00251413 slli s0,a0,0x2 +10000480: 00f70663 beq a4,a5,1000048c +10000484: 00e58463 beq a1,a4,1000048c +10000488: 4d2010ef jal 1000195a +1000048c: 305027f3 csrr a5,mtvec +10000490: 9bf1 andi a5,a5,-4 +10000492: 97a2 add a5,a5,s0 +10000494: c384 sw s1,0(a5) +10000496: 0330000f fence rw,rw +1000049a: 0330000f fence rw,rw +1000049e: 200037b7 lui a5,0x20003 +100004a2: dec78793 addi a5,a5,-532 # 20002dec <_sw_spin_locks> +100004a6: 000784a3 sb zero,9(a5) +100004aa: 00897793 andi a5,s2,8 +100004ae: 3007a073 csrs mstatus,a5 +100004b2: 40b2 lw ra,12(sp) +100004b4: 4422 lw s0,8(sp) +100004b6: 4492 lw s1,4(sp) +100004b8: 4902 lw s2,0(sp) +100004ba: 0141 addi sp,sp,16 +100004bc: 8082 ret + +100004be : +100004be: 7179 addi sp,sp,-48 +100004c0: d606 sw ra,44(sp) +100004c2: d04a sw s2,32(sp) +100004c4: cc52 sw s4,24(sp) +100004c6: ca56 sw s5,20(sp) +100004c8: c85a sw s6,16(sp) +100004ca: 30047973 csrrci s2,mstatus,8 +100004ce: 200037b7 lui a5,0x20003 +100004d2: df578793 addi a5,a5,-523 # 20002df5 <_sw_spin_locks+0x9> +100004d6: 00379713 slli a4,a5,0x3 +100004da: 28e01733 bset a4,zero,a4 +100004de: 9bf1 andi a5,a5,-4 +100004e0: 44e7a6af amoor.w.aq a3,a4,(a5) +100004e4: 8ef9 and a3,a3,a4 +100004e6: feed bnez a3,100004e0 +100004e8: 0330000f fence rw,rw +100004ec: 305027f3 csrr a5,mtvec +100004f0: 03450713 addi a4,a0,52 +100004f4: 9bf1 andi a5,a5,-4 +100004f6: 20f747b3 sh2add a5,a4,a5 +100004fa: 0007aa83 lw s5,0(a5) +100004fe: 200037b7 lui a5,0x20003 +10000502: c2478b13 addi s6,a5,-988 # 20002c24 <__unhandled_user_irq> +10000506: 00271a13 slli s4,a4,0x2 +1000050a: 0b6a8763 beq s5,s6,100005b8 +1000050e: d422 sw s0,40(sp) +10000510: 842e mv s0,a1 +10000512: 0cba8e63 beq s5,a1,100005ee +10000516: d226 sw s1,36(sp) +10000518: 200034b7 lui s1,0x20003 +1000051c: 9e448493 addi s1,s1,-1564 # 200029e4 +10000520: 409a8733 sub a4,s5,s1 +10000524: 02f00793 li a5,47 +10000528: 08e7e663 bltu a5,a4,100005b4 +1000052c: ce4e sw s3,28(sp) +1000052e: c65e sw s7,12(sp) +10000530: c462 sw s8,8(sp) +10000532: 00455793 srli a5,a0,0x4 +10000536: be07a7f3 csrrs a5,0xbe0,a5 +1000053a: 00f57b93 andi s7,a0,15 +1000053e: 28a01733 bset a4,zero,a0 +10000542: 00555993 srli s3,a0,0x5 +10000546: 83c1 srli a5,a5,0x10 +10000548: 01071c13 slli s8,a4,0x10 +1000054c: 0986 slli s3,s3,0x1 +1000054e: 29701bb3 bset s7,zero,s7 +10000552: 00fbfbb3 and s7,s7,a5 +10000556: 013c6c33 or s8,s8,s3 +1000055a: be0c3073 csrc 0xbe0,s8 +1000055e: 77c1 lui a5,0xffff0 +10000560: 8f7d and a4,a4,a5 +10000562: 0985 addi s3,s3,1 +10000564: 00e9e9b3 or s3,s3,a4 +10000568: be09b073 csrc 0xbe0,s3 +1000056c: 0330000f fence rw,rw +10000570: be5027f3 csrr a5,0xbe5 +10000574: 01079713 slli a4,a5,0x10 +10000578: 4801 li a6,0 +1000057a: 1e075063 bgez a4,1000075a +1000057e: 87d6 mv a5,s5 +10000580: 4501 li a0,0 +10000582: 4398 lw a4,0(a5) +10000584: 43d4 lw a3,4(a5) +10000586: 00877613 andi a2,a4,8 +1000058a: 80077713 andi a4,a4,-2048 +1000058e: 48b71713 bclri a4,a4,0xb +10000592: 4146d593 srai a1,a3,0x14 +10000596: e219 bnez a2,1000059c +10000598: 00b706b3 add a3,a4,a1 +1000059c: 04d40d63 beq s0,a3,100005f6 +100005a0: 00a78703 lb a4,10(a5) # ffff000a <__StackTop+0xdff6e00a> +100005a4: 853e mv a0,a5 +100005a6: 20e727b3 sh1add a5,a4,a4 +100005aa: 18074c63 bltz a4,10000742 +100005ae: 2097c7b3 sh2add a5,a5,s1 +100005b2: bfc1 j 10000582 +100005b4: 5422 lw s0,40(sp) +100005b6: 5492 lw s1,36(sp) +100005b8: 305027f3 csrr a5,mtvec +100005bc: 9bf1 andi a5,a5,-4 +100005be: 97d2 add a5,a5,s4 +100005c0: 0157a023 sw s5,0(a5) +100005c4: 0330000f fence rw,rw +100005c8: 0330000f fence rw,rw +100005cc: 200037b7 lui a5,0x20003 +100005d0: dec78793 addi a5,a5,-532 # 20002dec <_sw_spin_locks> +100005d4: 000784a3 sb zero,9(a5) +100005d8: 00897913 andi s2,s2,8 +100005dc: 30092073 csrs mstatus,s2 +100005e0: 50b2 lw ra,44(sp) +100005e2: 5902 lw s2,32(sp) +100005e4: 4a62 lw s4,24(sp) +100005e6: 4ad2 lw s5,20(sp) +100005e8: 4b42 lw s6,16(sp) +100005ea: 6145 addi sp,sp,48 +100005ec: 8082 ret +100005ee: 5422 lw s0,40(sp) +100005f0: c2478a93 addi s5,a5,-988 +100005f4: b7d1 j 100005b8 +100005f6: 00a78603 lb a2,10(a5) +100005fa: 18064563 bltz a2,10000784 +100005fe: 20c62733 sh1add a4,a2,a2 +10000602: 20974733 sh2add a4,a4,s1 +10000606: 4314 lw a3,0(a4) +10000608: 00161593 slli a1,a2,0x1 +1000060c: 4358 lw a4,4(a4) +1000060e: 0086f513 andi a0,a3,8 +10000612: e519 bnez a0,10000620 +10000614: 8006f693 andi a3,a3,-2048 +10000618: 48b69693 bclri a3,a3,0xb +1000061c: 8751 srai a4,a4,0x14 +1000061e: 9736 add a4,a4,a3 +10000620: 03578363 beq a5,s5,10000646 +10000624: 00171693 slli a3,a4,0x1 +10000628: 6505 lui a0,0x1 +1000062a: 8ee9 and a3,a3,a0 +1000062c: 96ba add a3,a3,a4 +1000062e: 8006f693 andi a3,a3,-2048 +10000632: 48b69693 bclri a3,a3,0xb +10000636: 0752 slli a4,a4,0x14 +10000638: 0b76e693 ori a3,a3,183 +1000063c: 0e776713 ori a4,a4,231 +10000640: c394 sw a3,0(a5) +10000642: 28f71713 bseti a4,a4,0xf +10000646: 00c586b3 add a3,a1,a2 +1000064a: 2096c833 sh2add a6,a3,s1 +1000064e: 00b84503 lbu a0,11(a6) +10000652: c3d8 sw a4,4(a5) +10000654: 6731 lui a4,0xc +10000656: 00a785a3 sb a0,11(a5) +1000065a: 00a80883 lb a7,10(a6) +1000065e: 00269513 slli a0,a3,0x2 +10000662: e4270713 addi a4,a4,-446 # be42 +10000666: 01178523 sb a7,10(a5) +1000066a: 0a08cf63 bltz a7,10000728 +1000066e: 00885683 lhu a3,8(a6) +10000672: 0521 addi a0,a0,8 # 1008 +10000674: 9526 add a0,a0,s1 +10000676: 0016d813 srli a6,a3,0x1 +1000067a: 00369713 slli a4,a3,0x3 +1000067e: 04087893 andi a7,a6,64 +10000682: 02077713 andi a4,a4,32 +10000686: 01176733 or a4,a4,a7 +1000068a: 00169313 slli t1,a3,0x1 +1000068e: 00878893 addi a7,a5,8 +10000692: 41170733 sub a4,a4,a7 +10000696: 08037313 andi t1,t1,128 +1000069a: 30087893 andi a7,a6,768 +1000069e: 971a add a4,a4,t1 +100006a0: 0026d813 srli a6,a3,0x2 +100006a4: 00269313 slli t1,a3,0x2 +100006a8: 829d srli a3,a3,0x7 +100006aa: 9746 add a4,a4,a7 +100006ac: 8ac1 andi a3,a3,16 +100006ae: 40037893 andi a7,t1,1024 +100006b2: 00e87313 andi t1,a6,14 +100006b6: 0066e6b3 or a3,a3,t1 +100006ba: 9746 add a4,a4,a7 +100006bc: 9736 add a4,a4,a3 +100006be: 28b01893 bseti a7,zero,0xb +100006c2: 972a add a4,a4,a0 +100006c4: 01187833 and a6,a6,a7 +100006c8: 41070733 sub a4,a4,a6 +100006cc: 00171693 slli a3,a4,0x1 +100006d0: 00375513 srli a0,a4,0x3 +100006d4: 6305 lui t1,0x1 +100006d6: 00771813 slli a6,a4,0x7 +100006da: 8911 andi a0,a0,4 +100006dc: 0066f6b3 and a3,a3,t1 +100006e0: 01187833 and a6,a6,a7 +100006e4: 8ec9 or a3,a3,a0 +100006e6: 00171513 slli a0,a4,0x1 +100006ea: 0106e6b3 or a3,a3,a6 +100006ee: 60057513 andi a0,a0,1536 +100006f2: 00275813 srli a6,a4,0x2 +100006f6: 8ec9 or a3,a3,a0 +100006f8: 10087813 andi a6,a6,256 +100006fc: 00171513 slli a0,a4,0x1 +10000700: 0106e6b3 or a3,a3,a6 +10000704: 08057513 andi a0,a0,128 +10000708: 00175813 srli a6,a4,0x1 +1000070c: 8ec9 or a3,a3,a0 +1000070e: 04087813 andi a6,a6,64 +10000712: 00271513 slli a0,a4,0x2 +10000716: 0106e733 or a4,a3,a6 +1000071a: 03857693 andi a3,a0,56 +1000071e: 6529 lui a0,0xa +10000720: 8f55 or a4,a4,a3 +10000722: 00150693 addi a3,a0,1 # a001 +10000726: 8f55 or a4,a4,a3 +10000728: 200036b7 lui a3,0x20003 +1000072c: e556c503 lbu a0,-427(a3) # 20002e55 +10000730: 95b2 add a1,a1,a2 +10000732: 2095c5b3 sh2add a1,a1,s1 +10000736: 00e79423 sh a4,8(a5) +1000073a: 00a58523 sb a0,10(a1) +1000073e: e4c68aa3 sb a2,-427(a3) +10000742: 020b9863 bnez s7,10000772 +10000746: be0c3073 csrc 0xbe0,s8 +1000074a: be09b073 csrc 0xbe0,s3 +1000074e: 5422 lw s0,40(sp) +10000750: 5492 lw s1,36(sp) +10000752: 49f2 lw s3,28(sp) +10000754: 4bb2 lw s7,12(sp) +10000756: 4c22 lw s8,8(sp) +10000758: b585 j 100005b8 +1000075a: 8391 srli a5,a5,0x4 +1000075c: c266 sw s9,4(sp) +1000075e: 1ff7fc93 andi s9,a5,511 +10000762: 01950463 beq a0,s9,1000076a +10000766: 1f4010ef jal 1000195a +1000076a: 034c8813 addi a6,s9,52 +1000076e: 4c92 lw s9,4(sp) +10000770: b539 j 1000057e +10000772: be2c3073 csrc 0xbe2,s8 +10000776: be29b073 csrc 0xbe2,s3 +1000077a: be0c2073 csrs 0xbe0,s8 +1000077e: be09a073 csrs 0xbe0,s3 +10000782: b7f1 j 1000074e +10000784: 02081f63 bnez a6,100007c2 +10000788: c15d beqz a0,1000082e +1000078a: 7771 lui a4,0xffffc +1000078c: e4270713 addi a4,a4,-446 # ffffbe42 <__StackTop+0xdff79e42> +10000790: 56fd li a3,-1 +10000792: 00e51423 sh a4,8(a0) +10000796: 00d50523 sb a3,10(a0) +1000079a: 40978733 sub a4,a5,s1 +1000079e: aaaab6b7 lui a3,0xaaaab +100007a2: aab68693 addi a3,a3,-1365 # aaaaaaab <__StackTop+0x8aa28aab> +100007a6: 8709 srai a4,a4,0x2 +100007a8: 02d70733 mul a4,a4,a3 +100007ac: 200036b7 lui a3,0x20003 +100007b0: e556c603 lbu a2,-427(a3) # 20002e55 +100007b4: 00c78523 sb a2,10(a5) +100007b8: e4e68aa3 sb a4,-427(a3) +100007bc: f80b85e3 beqz s7,10000746 +100007c0: bf4d j 10000772 +100007c2: 200036b7 lui a3,0x20003 +100007c6: 00878713 addi a4,a5,8 +100007ca: a2068693 addi a3,a3,-1504 # 20002a20 +100007ce: 8e99 sub a3,a3,a4 +100007d0: 00169713 slli a4,a3,0x1 +100007d4: 6605 lui a2,0x1 +100007d6: 0036d593 srli a1,a3,0x3 +100007da: 8f71 and a4,a4,a2 +100007dc: 8991 andi a1,a1,4 +100007de: 00769613 slli a2,a3,0x7 +100007e2: 28b01513 bseti a0,zero,0xb +100007e6: 8f4d or a4,a4,a1 +100007e8: 8e69 and a2,a2,a0 +100007ea: 00169593 slli a1,a3,0x1 +100007ee: 8f51 or a4,a4,a2 +100007f0: 6005f593 andi a1,a1,1536 +100007f4: 0026d613 srli a2,a3,0x2 +100007f8: 8f4d or a4,a4,a1 +100007fa: 10067613 andi a2,a2,256 +100007fe: 00169593 slli a1,a3,0x1 +10000802: 8f51 or a4,a4,a2 +10000804: 0805f593 andi a1,a1,128 +10000808: 0016d613 srli a2,a3,0x1 +1000080c: 8f4d or a4,a4,a1 +1000080e: 04067613 andi a2,a2,64 +10000812: 068a slli a3,a3,0x2 +10000814: 8f51 or a4,a4,a2 +10000816: 0386f693 andi a3,a3,56 +1000081a: 8f55 or a4,a4,a3 +1000081c: 00176713 ori a4,a4,1 +10000820: 28d71713 bseti a4,a4,0xd +10000824: 00e79423 sh a4,8(a5) +10000828: f00b8fe3 beqz s7,10000746 +1000082c: b799 j 10000772 +1000082e: 8ada mv s5,s6 +10000830: b7ad j 1000079a + +10000832 : +10000832: be5027f3 csrr a5,0xbe5 +10000836: 01079713 slli a4,a5,0x10 +1000083a: 4581 li a1,0 +1000083c: 00074963 bltz a4,1000084e +10000840: 8391 srli a5,a5,0x4 +10000842: 1ff7f793 andi a5,a5,511 +10000846: 03478793 addi a5,a5,52 +1000084a: 00279593 slli a1,a5,0x2 +1000084e: 30047673 csrrci a2,mstatus,8 +10000852: 200037b7 lui a5,0x20003 +10000856: df578793 addi a5,a5,-523 # 20002df5 <_sw_spin_locks+0x9> +1000085a: 00379713 slli a4,a5,0x3 +1000085e: 28e01733 bset a4,zero,a4 +10000862: 9bf1 andi a5,a5,-4 +10000864: 44e7a6af amoor.w.aq a3,a4,(a5) +10000868: 8ef9 and a3,a3,a4 +1000086a: feed bnez a3,10000864 +1000086c: 0330000f fence rw,rw +10000870: 20003737 lui a4,0x20003 +10000874: 9e470713 addi a4,a4,-1564 # 200029e4 +10000878: 40e507b3 sub a5,a0,a4 +1000087c: aaaab6b7 lui a3,0xaaaab +10000880: aab68693 addi a3,a3,-1365 # aaaaaaab <__StackTop+0x8aa28aab> +10000884: 8789 srai a5,a5,0x2 +10000886: 02d787b3 mul a5,a5,a3 +1000088a: 60479793 sext.b a5,a5 +1000088e: 305026f3 csrr a3,mtvec +10000892: 9af1 andi a3,a3,-4 +10000894: 96ae add a3,a3,a1 +10000896: 4294 lw a3,0(a3) +10000898: 04a68763 beq a3,a0,100008e6 +1000089c: 00a70683 lb a3,10(a4) +100008a0: 04f68d63 beq a3,a5,100008fa +100008a4: 01670683 lb a3,22(a4) +100008a8: 06f68763 beq a3,a5,10000916 +100008ac: 02270683 lb a3,34(a4) +100008b0: 06f68563 beq a3,a5,1000091a +100008b4: 02e70683 lb a3,46(a4) +100008b8: 06f68363 beq a3,a5,1000091e +100008bc: 20003737 lui a4,0x20003 +100008c0: e5574683 lbu a3,-427(a4) # 20002e55 +100008c4: e4f70aa3 sb a5,-427(a4) +100008c8: 00d50523 sb a3,10(a0) +100008cc: 0330000f fence rw,rw +100008d0: 200037b7 lui a5,0x20003 +100008d4: dec78793 addi a5,a5,-532 # 20002dec <_sw_spin_locks> +100008d8: 000784a3 sb zero,9(a5) +100008dc: 00867793 andi a5,a2,8 +100008e0: 3007a073 csrs mstatus,a5 +100008e4: 8082 ret +100008e6: 30502773 csrr a4,mtvec +100008ea: 200036b7 lui a3,0x20003 +100008ee: 9b71 andi a4,a4,-4 +100008f0: 972e add a4,a4,a1 +100008f2: c2468693 addi a3,a3,-988 # 20002c24 <__unhandled_user_irq> +100008f6: c314 sw a3,0(a4) +100008f8: b7d1 j 100008bc +100008fa: 4681 li a3,0 +100008fc: 20d6a6b3 sh1add a3,a3,a3 +10000900: 75f1 lui a1,0xffffc +10000902: 20e6c6b3 sh2add a3,a3,a4 +10000906: 587d li a6,-1 +10000908: e4258713 addi a4,a1,-446 # ffffbe42 <__StackTop+0xdff79e42> +1000090c: 01068523 sb a6,10(a3) +10000910: 00e69423 sh a4,8(a3) +10000914: b765 j 100008bc +10000916: 4685 li a3,1 +10000918: b7d5 j 100008fc +1000091a: 4689 li a3,2 +1000091c: b7c5 j 100008fc +1000091e: 468d li a3,3 +10000920: bff1 j 100008fc + +10000922 : +10000922: 200037b7 lui a5,0x20003 +10000926: dec78793 addi a5,a5,-532 # 20002dec <_sw_spin_locks> +1000092a: 97ae add a5,a5,a1 +1000092c: c11c sw a5,0(a0) +1000092e: 8082 ret + +10000930 : +10000930: 1101 addi sp,sp,-32 +10000932: cc22 sw s0,24(sp) +10000934: ca26 sw s1,20(sp) +10000936: 20003437 lui s0,0x20003 +1000093a: 200034b7 lui s1,0x20003 +1000093e: ce06 sw ra,28(sp) +10000940: c4440793 addi a5,s0,-956 # 20002c44 +10000944: c4c48493 addi s1,s1,-948 # 20002c4c <__TMC_END__> +10000948: 0297f863 bgeu a5,s1,10000978 +1000094c: c84a sw s2,16(sp) +1000094e: c64e sw s3,12(sp) +10000950: c4440413 addi s0,s0,-956 +10000954: 59fd li s3,-1 +10000956: 0ff00913 li s2,255 +1000095a: 401c lw a5,0(s0) +1000095c: c39d beqz a5,10000982 +1000095e: 343d jal 1000038c +10000960: 85aa mv a1,a0 +10000962: 8522 mv a0,s0 +10000964: 3f7d jal 10000922 +10000966: 01241223 sh s2,4(s0) +1000096a: 0330000f fence rw,rw +1000096e: 0421 addi s0,s0,8 +10000970: fe9465e3 bltu s0,s1,1000095a +10000974: 4942 lw s2,16(sp) +10000976: 49b2 lw s3,12(sp) +10000978: 40f2 lw ra,28(sp) +1000097a: 4462 lw s0,24(sp) +1000097c: 44d2 lw s1,20(sp) +1000097e: 6105 addi sp,sp,32 +10000980: 8082 ret +10000982: 3429 jal 1000038c +10000984: 85aa mv a1,a0 +10000986: 8522 mv a0,s0 +10000988: 3f69 jal 10000922 +1000098a: 01340223 sb s3,4(s0) +1000098e: 0330000f fence rw,rw +10000992: 0421 addi s0,s0,8 +10000994: fc9463e3 bltu s0,s1,1000095a +10000998: bff1 j 10000974 + +1000099a : +1000099a: 200036b7 lui a3,0x20003 +1000099e: e586a783 lw a5,-424(a3) # 20002e58 +100009a2: 30047773 csrrci a4,mstatus,8 +100009a6: 00379613 slli a2,a5,0x3 +100009aa: 28c01633 bset a2,zero,a2 +100009ae: 9bf1 andi a5,a5,-4 +100009b0: 44c7a5af amoor.w.aq a1,a2,(a5) +100009b4: 8df1 and a1,a1,a2 +100009b6: fded bnez a1,100009b0 +100009b8: 0330000f fence rw,rw +100009bc: e586a783 lw a5,-424(a3) +100009c0: 0330000f fence rw,rw +100009c4: 00078023 sb zero,0(a5) +100009c8: 00877793 andi a5,a4,8 +100009cc: 3007a073 csrs mstatus,a5 +100009d0: 00102033 sgtz zero,ra +100009d4: 4501 li a0,0 +100009d6: 4581 li a1,0 +100009d8: 8082 ret + +100009da : +100009da: 715d addi sp,sp,-80 +100009dc: c686 sw ra,76(sp) +100009de: c4a2 sw s0,72(sp) +100009e0: c2a6 sw s1,68(sp) +100009e2: c0ca sw s2,64(sp) +100009e4: de4e sw s3,60(sp) +100009e6: dc52 sw s4,56(sp) +100009e8: da56 sw s5,52(sp) +100009ea: d85a sw s6,48(sp) +100009ec: d65e sw s7,44(sp) +100009ee: d462 sw s8,40(sp) +100009f0: d266 sw s9,36(sp) +100009f2: d06a sw s10,32(sp) +100009f4: ce6e sw s11,28(sp) +100009f6: be5027f3 csrr a5,0xbe5 +100009fa: 01079713 slli a4,a5,0x10 +100009fe: 32074a63 bltz a4,10000d32 +10000a02: 0047d993 srli s3,a5,0x4 +10000a06: 1ff9f793 andi a5,s3,511 +10000a0a: 8389 srli a5,a5,0x2 +10000a0c: 0039f993 andi s3,s3,3 +10000a10: 29301a33 bset s4,zero,s3 +10000a14: 400b0937 lui s2,0x400b0 +10000a18: 34079963 bnez a5,10000d6a +10000a1c: 20003737 lui a4,0x20003 +10000a20: 2137c7b3 sh2add a5,a5,s3 +10000a24: e3470713 addi a4,a4,-460 # 20002e34 +10000a28: 20e7c7b3 sh2add a5,a5,a4 +10000a2c: 0007aa83 lw s5,0(a5) +10000a30: 678d lui a5,0x3 +10000a32: 04478793 addi a5,a5,68 # 3044 +10000a36: 97ca add a5,a5,s2 +10000a38: 2129c9b3 sh2add s3,s3,s2 +10000a3c: 008a8b13 addi s6,s5,8 +10000a40: 0147a023 sw s4,0(a5) +10000a44: 547d li s0,-1 +10000a46: 54fd li s1,-1 +10000a48: 008a9d03 lh s10,8(s5) +10000a4c: 03492e23 sw s4,60(s2) # 400b003c <__StackTop+0x2002e03c> +10000a50: 080d5263 bgez s10,10000ad4 +10000a54: 004ad783 lhu a5,4(s5) +10000a58: 60579793 sext.h a5,a5 +10000a5c: 1407de63 bgez a5,10000bb8 +10000a60: 006ac783 lbu a5,6(s5) +10000a64: 1e079663 bnez a5,10000c50 +10000a68: 008a9683 lh a3,8(s5) +10000a6c: 0406c363 bltz a3,10000ab2 +10000a70: 014aa703 lw a4,20(s5) +10000a74: 20d6a6b3 sh1add a3,a3,a3 +10000a78: 57fd li a5,-1 +10000a7a: 20e6e6b3 sh3add a3,a3,a4 +10000a7e: 0086ab83 lw s7,8(a3) +10000a82: 00c6ac03 lw s8,12(a3) +10000a86: 2afb8363 beq s7,a5,10000d2c +10000a8a: 02892703 lw a4,40(s2) +10000a8e: 0109a783 lw a5,16(s3) +10000a92: 40eb86b3 sub a3,s7,a4 +10000a96: 8f99 sub a5,a5,a4 +10000a98: 00f6f463 bgeu a3,a5,10000aa0 +10000a9c: 0179a823 sw s7,16(s3) +10000aa0: 854a mv a0,s2 +10000aa2: 2f7000ef jal 10001598 +10000aa6: 0185c663 blt a1,s8,10000ab2 +10000aaa: f8bc1fe3 bne s8,a1,10000a48 +10000aae: f9757de3 bgeu a0,s7,10000a48 +10000ab2: 00102033 sgtz zero,ra +10000ab6: 40b6 lw ra,76(sp) +10000ab8: 4426 lw s0,72(sp) +10000aba: 4496 lw s1,68(sp) +10000abc: 4906 lw s2,64(sp) +10000abe: 59f2 lw s3,60(sp) +10000ac0: 5a62 lw s4,56(sp) +10000ac2: 5ad2 lw s5,52(sp) +10000ac4: 5b42 lw s6,48(sp) +10000ac6: 5bb2 lw s7,44(sp) +10000ac8: 5c22 lw s8,40(sp) +10000aca: 5c92 lw s9,36(sp) +10000acc: 5d02 lw s10,32(sp) +10000ace: 4df2 lw s11,28(sp) +10000ad0: 6161 addi sp,sp,80 +10000ad2: 8082 ret +10000ad4: 014aa783 lw a5,20(s5) +10000ad8: 21ad2bb3 sh1add s7,s10,s10 +10000adc: 854a mv a0,s2 +10000ade: 20fbebb3 sh3add s7,s7,a5 +10000ae2: 00cbac03 lw s8,12(s7) +10000ae6: 008bac83 lw s9,8(s7) +10000aea: 2af000ef jal 10001598 +10000aee: f785c3e3 blt a1,s8,10000a54 +10000af2: 1cbc0963 beq s8,a1,10000cc4 +10000af6: 1c0c4b63 bltz s8,10000ccc +10000afa: 010ba703 lw a4,16(s7) +10000afe: 100017b7 lui a5,0x10001 +10000b02: 9da78793 addi a5,a5,-1574 # 100009da +10000b06: 014ba583 lw a1,20(s7) +10000b0a: 24f70663 beq a4,a5,10000d56 +10000b0e: 008a9783 lh a5,8(s5) +10000b12: 002bd503 lhu a0,2(s7) +10000b16: 07c2 slli a5,a5,0x10 +10000b18: 8d5d or a0,a0,a5 +10000b1a: 9702 jalr a4 +10000b1c: 872e mv a4,a1 +10000b1e: 8daa mv s11,a0 +10000b20: 00ede7b3 or a5,s11,a4 +10000b24: 1a078463 beqz a5,10000ccc +10000b28: 20075b63 bgez a4,10000d3e +10000b2c: 41bc86b3 sub a3,s9,s11 +10000b30: 00dcbcb3 sltu s9,s9,a3 +10000b34: 40ec07b3 sub a5,s8,a4 +10000b38: 419787b3 sub a5,a5,s9 +10000b3c: 000b9703 lh a4,0(s7) +10000b40: 00dba423 sw a3,8(s7) +10000b44: 00fba623 sw a5,12(s7) +10000b48: f00746e3 bltz a4,10000a54 +10000b4c: 014aa503 lw a0,20(s5) +10000b50: 20e72833 sh1add a6,a4,a4 +10000b54: 00171613 slli a2,a4,0x1 +10000b58: 20a86833 sh3add a6,a6,a0 +10000b5c: 00c82583 lw a1,12(a6) +10000b60: 00882883 lw a7,8(a6) +10000b64: eeb7c8e3 blt a5,a1,10000a54 +10000b68: 00f59463 bne a1,a5,10000b70 +10000b6c: ef16e4e3 bltu a3,a7,10000a54 +10000b70: 00ea9423 sh a4,8(s5) +10000b74: 008a8813 addi a6,s5,8 +10000b78: a031 j 10000b84 +10000b7a: 00862883 lw a7,8(a2) # 1008 +10000b7e: 464c lw a1,12(a2) +10000b80: 00171613 slli a2,a4,0x1 +10000b84: 963a add a2,a2,a4 +10000b86: 20a66633 sh3add a2,a2,a0 +10000b8a: 00b7cd63 blt a5,a1,10000ba4 +10000b8e: 1ef58263 beq a1,a5,10000d72 +10000b92: 00061703 lh a4,0(a2) +10000b96: 8832 mv a6,a2 +10000b98: 20e72633 sh1add a2,a4,a4 +10000b9c: 20a66633 sh3add a2,a2,a0 +10000ba0: fc075de3 bgez a4,10000b7a +10000ba4: 00eb9023 sh a4,0(s7) +10000ba8: 01a81023 sh s10,0(a6) +10000bac: 004ad783 lhu a5,4(s5) +10000bb0: 60579793 sext.h a5,a5 +10000bb4: ea07c6e3 bltz a5,10000a60 +10000bb8: 010aa783 lw a5,16(s5) +10000bbc: 30047773 csrrci a4,mstatus,8 +10000bc0: 00379693 slli a3,a5,0x3 +10000bc4: 28d016b3 bset a3,zero,a3 +10000bc8: 9bf1 andi a5,a5,-4 +10000bca: 44d7a62f amoor.w.aq a2,a3,(a5) +10000bce: 8e75 and a2,a2,a3 +10000bd0: fe6d bnez a2,10000bca +10000bd2: 0330000f fence rw,rw +10000bd6: 004ad883 lhu a7,4(s5) +10000bda: 57fd li a5,-1 +10000bdc: 00fa9223 sh a5,4(s5) +10000be0: 60589893 sext.h a7,a7 +10000be4: 010aa783 lw a5,16(s5) +10000be8: 0330000f fence rw,rw +10000bec: 00078023 sb zero,0(a5) +10000bf0: 00877793 andi a5,a4,8 +10000bf4: 3007a073 csrs mstatus,a5 +10000bf8: e608c4e3 bltz a7,10000a60 +10000bfc: 014aa503 lw a0,20(s5) +10000c00: 008a9703 lh a4,8(s5) +10000c04: 2118a833 sh1add a6,a7,a7 +10000c08: 20a86833 sh3add a6,a6,a0 +10000c0c: 00882303 lw t1,8(a6) +10000c10: 00c82603 lw a2,12(a6) +10000c14: 85da mv a1,s6 +10000c16: 00075a63 bgez a4,10000c2a +10000c1a: a839 j 10000c38 +10000c1c: 0ec68c63 beq a3,a2,10000d14 +10000c20: 00079703 lh a4,0(a5) +10000c24: 85be mv a1,a5 +10000c26: 00074963 bltz a4,10000c38 +10000c2a: 20e727b3 sh1add a5,a4,a4 +10000c2e: 20a7e7b3 sh3add a5,a5,a0 +10000c32: 47d4 lw a3,12(a5) +10000c34: fed654e3 bge a2,a3,10000c1c +10000c38: 01159023 sh a7,0(a1) +10000c3c: 00081883 lh a7,0(a6) +10000c40: 00e81023 sh a4,0(a6) +10000c44: fa08dee3 bgez a7,10000c00 +10000c48: 006ac783 lbu a5,6(s5) +10000c4c: e0078ee3 beqz a5,10000a68 +10000c50: 000a8323 sb zero,6(s5) +10000c54: 008a9703 lh a4,8(s5) +10000c58: 557d li a0,-1 +10000c5a: 835a mv t1,s6 +10000c5c: e4a70be3 beq a4,a0,10000ab2 +10000c60: 014aa883 lw a7,20(s5) +10000c64: 20e727b3 sh1add a5,a4,a4 +10000c68: 86ba mv a3,a4 +10000c6a: 2117e7b3 sh3add a5,a5,a7 +10000c6e: 0027d603 lhu a2,2(a5) +10000c72: 85ba mv a1,a4 +10000c74: 883a mv a6,a4 +10000c76: 60561613 sext.h a2,a2 +10000c7a: 00079703 lh a4,0(a5) +10000c7e: 02064363 bltz a2,10000ca4 +10000c82: 833e mv t1,a5 +10000c84: dea704e3 beq a4,a0,10000a6c +10000c88: 20e727b3 sh1add a5,a4,a4 +10000c8c: 2117e7b3 sh3add a5,a5,a7 +10000c90: 0027d603 lhu a2,2(a5) +10000c94: 85ba mv a1,a4 +10000c96: 883a mv a6,a4 +10000c98: 60561613 sext.h a2,a2 +10000c9c: 00079703 lh a4,0(a5) +10000ca0: fe0651e3 bgez a2,10000c82 +10000ca4: c780 sw s0,8(a5) +10000ca6: c7c4 sw s1,12(a5) +10000ca8: 00d58a63 beq a1,a3,10000cbc +10000cac: 00e31023 sh a4,0(t1) # 1000 +10000cb0: 008ad683 lhu a3,8(s5) +10000cb4: 00d79023 sh a3,0(a5) +10000cb8: 00ba9423 sh a1,8(s5) +10000cbc: 86c2 mv a3,a6 +10000cbe: fca715e3 bne a4,a0,10000c88 +10000cc2: b36d j 10000a6c +10000cc4: d99568e3 bltu a0,s9,10000a54 +10000cc8: e20c59e3 bgez s8,10000afa +10000ccc: 000bd703 lhu a4,0(s7) +10000cd0: 010aa783 lw a5,16(s5) +10000cd4: 00ea9423 sh a4,8(s5) +10000cd8: 30047773 csrrci a4,mstatus,8 +10000cdc: 00379693 slli a3,a5,0x3 +10000ce0: 28d016b3 bset a3,zero,a3 +10000ce4: 9bf1 andi a5,a5,-4 +10000ce6: 44d7a62f amoor.w.aq a2,a3,(a5) +10000cea: 8e75 and a2,a2,a3 +10000cec: fe6d bnez a2,10000ce6 +10000cee: 0330000f fence rw,rw +10000cf2: 002ad683 lhu a3,2(s5) +10000cf6: 010aa783 lw a5,16(s5) +10000cfa: 00db9023 sh a3,0(s7) +10000cfe: 01aa9123 sh s10,2(s5) +10000d02: 0330000f fence rw,rw +10000d06: 00078023 sb zero,0(a5) +10000d0a: 00877793 andi a5,a4,8 +10000d0e: 3007a073 csrs mstatus,a5 +10000d12: b389 j 10000a54 +10000d14: 4794 lw a3,8(a5) +10000d16: f0d375e3 bgeu t1,a3,10000c20 +10000d1a: 01159023 sh a7,0(a1) +10000d1e: 00081883 lh a7,0(a6) +10000d22: 00e81023 sh a4,0(a6) +10000d26: ec08dde3 bgez a7,10000c00 +10000d2a: bf39 j 10000c48 +10000d2c: d57c1fe3 bne s8,s7,10000a8a +10000d30: bb85 j 10000aa0 +10000d32: 4a05 li s4,1 +10000d34: 87d2 mv a5,s4 +10000d36: 4981 li s3,0 +10000d38: 400b8937 lui s2,0x400b8 +10000d3c: b1c5 j 10000a1c +10000d3e: 854a mv a0,s2 +10000d40: c63a sw a4,12(sp) +10000d42: 057000ef jal 10001598 +10000d46: 4732 lw a4,12(sp) +10000d48: 01b506b3 add a3,a0,s11 +10000d4c: 00a6b7b3 sltu a5,a3,a0 +10000d50: 972e add a4,a4,a1 +10000d52: 97ba add a5,a5,a4 +10000d54: b3e5 j 10000b3c +10000d56: 499c lw a5,16(a1) +10000d58: 852e mv a0,a1 +10000d5a: c62e sw a1,12(sp) +10000d5c: 9782 jalr a5 +10000d5e: d53d beqz a0,10000ccc +10000d60: 45b2 lw a1,12(sp) +10000d62: 0005ad83 lw s11,0(a1) +10000d66: 41d8 lw a4,4(a1) +10000d68: bb65 j 10000b20 +10000d6a: 4785 li a5,1 +10000d6c: 400b8937 lui s2,0x400b8 +10000d70: b175 j 10000a1c +10000d72: e316f0e3 bgeu a3,a7,10000b92 +10000d76: b53d j 10000ba4 + +10000d78 : +10000d78: 1101 addi sp,sp,-32 +10000d7a: cc22 sw s0,24(sp) +10000d7c: 20003437 lui s0,0x20003 +10000d80: a3040413 addi s0,s0,-1488 # 20002a30 +10000d84: 481c lw a5,16(s0) +10000d86: ce06 sw ra,28(sp) +10000d88: cb91 beqz a5,10000d9c +10000d8a: 4462 lw s0,24(sp) +10000d8c: 40f2 lw ra,28(sp) +10000d8e: 20003537 lui a0,0x20003 +10000d92: e5850513 addi a0,a0,-424 # 20002e58 +10000d96: 45a9 li a1,10 +10000d98: 6105 addi sp,sp,32 +10000d9a: b661 j 10000922 +10000d9c: 458d li a1,3 +10000d9e: 400b0537 lui a0,0x400b0 +10000da2: ca26 sw s1,20(sp) +10000da4: c84a sw s2,16(sp) +10000da6: c64e sw s3,12(sp) +10000da8: c452 sw s4,8(sp) +10000daa: 7ce000ef jal 10001578 +10000dae: 400b0a37 lui s4,0x400b0 +10000db2: 448d li s1,3 +10000db4: 01442623 sw s4,12(s0) +10000db8: dd4ff0ef jal 1000038c +10000dbc: d00007b7 lui a5,0xd0000 +10000dc0: 00940023 sb s1,0(s0) +10000dc4: 20003737 lui a4,0x20003 +10000dc8: 0007a803 lw a6,0(a5) # d0000000 <__StackTop+0xaff7e000> +10000dcc: dec70713 addi a4,a4,-532 # 20002dec <_sw_spin_locks> +10000dd0: 485c lw a5,20(s0) +10000dd2: 972a add a4,a4,a0 +10000dd4: 001106b7 lui a3,0x110 +10000dd8: c818 sw a4,16(s0) +10000dda: 567d li a2,-1 +10000ddc: 16fd addi a3,a3,-1 # 10ffff +10000dde: 45bd li a1,15 +10000de0: 4709 li a4,2 +10000de2: 010400a3 sb a6,1(s0) +10000de6: c414 sw a3,8(s0) +10000de8: 00b41123 sh a1,2(s0) +10000dec: 00c41223 sh a2,4(s0) +10000df0: 04e79423 sh a4,72(a5) +10000df4: 4921 li s2,8 +10000df6: 4f11 li t5,4 +10000df8: 4e95 li t4,5 +10000dfa: 4e19 li t3,6 +10000dfc: 431d li t1,7 +10000dfe: 48a5 li a7,9 +10000e00: 4829 li a6,10 +10000e02: 46b5 li a3,13 +10000e04: 4739 li a4,14 +10000e06: 4985 li s3,1 +10000e08: 452d li a0,11 +10000e0a: 45b1 li a1,12 +10000e0c: 06979023 sh s1,96(a5) +10000e10: 07e79c23 sh t5,120(a5) +10000e14: 09d79823 sh t4,144(a5) +10000e18: 0bc79423 sh t3,168(a5) +10000e1c: 0c679023 sh t1,192(a5) +10000e20: 0f179823 sh a7,240(a5) +10000e24: 11079423 sh a6,264(a5) +10000e28: 12a79023 sh a0,288(a5) +10000e2c: 12b79c23 sh a1,312(a5) +10000e30: 14d79823 sh a3,336(a5) +10000e34: 16e79423 sh a4,360(a5) +10000e38: 00c79023 sh a2,0(a5) +10000e3c: 03379823 sh s3,48(a5) +10000e40: 0d279c23 sh s2,216(a5) +10000e44: 00079c23 sh zero,24(a5) +10000e48: 100015b7 lui a1,0x10001 +10000e4c: 032a2023 sw s2,32(s4) # 400b0020 <__StackTop+0x2002e020> +10000e50: 200037b7 lui a5,0x20003 +10000e54: 8526 mv a0,s1 +10000e56: 9da58593 addi a1,a1,-1574 # 100009da +10000e5a: e487a023 sw s0,-448(a5) # 20002e40 +10000e5e: dd8ff0ef jal 10000436 +10000e62: 85ce mv a1,s3 +10000e64: 8526 mv a0,s1 +10000e66: d9aff0ef jal 10000400 +10000e6a: 400b27b7 lui a5,0x400b2 +10000e6e: 4462 lw s0,24(sp) +10000e70: 44d2 lw s1,20(sp) +10000e72: 49b2 lw s3,12(sp) +10000e74: 4a22 lw s4,8(sp) +10000e76: 40f2 lw ra,28(sp) +10000e78: 0527a023 sw s2,64(a5) # 400b2040 <__StackTop+0x20030040> +10000e7c: 4942 lw s2,16(sp) +10000e7e: 20003537 lui a0,0x20003 +10000e82: e5850513 addi a0,a0,-424 # 20002e58 +10000e86: 45a9 li a1,10 +10000e88: 6105 addi sp,sp,32 +10000e8a: bc61 j 10000922 + +10000e8c : +10000e8c: 20003537 lui a0,0x20003 +10000e90: a3050513 addi a0,a0,-1488 # 20002a30 +10000e94: 8082 ret + +10000e96 : +10000e96: 1101 addi sp,sp,-32 +10000e98: cc22 sw s0,24(sp) +10000e9a: ca26 sw s1,20(sp) +10000e9c: c84a sw s2,16(sp) +10000e9e: c64e sw s3,12(sp) +10000ea0: c452 sw s4,8(sp) +10000ea2: ce06 sw ra,28(sp) +10000ea4: 842a mv s0,a0 +10000ea6: 84ae mv s1,a1 +10000ea8: 8932 mv s2,a2 +10000eaa: 8a36 mv s4,a3 +10000eac: 89ba mv s3,a4 +10000eae: ef81 bnez a5,10000ec6 +10000eb0: 2de5 jal 100015a8 +10000eb2: 40a48533 sub a0,s1,a0 +10000eb6: 00a4b533 sltu a0,s1,a0 +10000eba: 40b905b3 sub a1,s2,a1 +10000ebe: 8d89 sub a1,a1,a0 +10000ec0: 4501 li a0,0 +10000ec2: 0c05c263 bltz a1,10000f86 +10000ec6: 481c lw a5,16(s0) +10000ec8: 30047773 csrrci a4,mstatus,8 +10000ecc: 00379693 slli a3,a5,0x3 +10000ed0: 28d016b3 bset a3,zero,a3 +10000ed4: 9bf1 andi a5,a5,-4 +10000ed6: 44d7a62f amoor.w.aq a2,a3,(a5) +10000eda: 8e75 and a2,a2,a3 +10000edc: fe6d bnez a2,10000ed6 +10000ede: 0330000f fence rw,rw +10000ee2: 00241883 lh a7,2(s0) +10000ee6: 4854 lw a3,20(s0) +10000ee8: 8b21 andi a4,a4,8 +10000eea: 2118a7b3 sh1add a5,a7,a7 +10000eee: 20d7e7b3 sh3add a5,a5,a3 +10000ef2: 4814 lw a3,16(s0) +10000ef4: 0a08c163 bltz a7,10000f96 +10000ef8: 0007d603 lhu a2,0(a5) +10000efc: 00c41123 sh a2,2(s0) +10000f00: 0330000f fence rw,rw +10000f04: 00068023 sb zero,0(a3) +10000f08: 30072073 csrs mstatus,a4 +10000f0c: 0027d803 lhu a6,2(a5) +10000f10: 4705 li a4,1 +10000f12: 01089513 slli a0,a7,0x10 +10000f16: 983a add a6,a6,a4 +10000f18: 0846 slli a6,a6,0x11 +10000f1a: 01185813 srli a6,a6,0x11 +10000f1e: 0ae87833 maxu a6,a6,a4 +10000f22: 0147a823 sw s4,16(a5) +10000f26: 0137aa23 sw s3,20(a5) +10000f2a: c784 sw s1,8(a5) +10000f2c: 0127a623 sw s2,12(a5) +10000f30: 01079123 sh a6,2(a5) +10000f34: 01056533 or a0,a0,a6 +10000f38: 4818 lw a4,16(s0) +10000f3a: 300476f3 csrrci a3,mstatus,8 +10000f3e: 00371613 slli a2,a4,0x3 +10000f42: 28c01633 bset a2,zero,a2 +10000f46: 9b71 andi a4,a4,-4 +10000f48: 44c725af amoor.w.aq a1,a2,(a4) +10000f4c: 8df1 and a1,a1,a2 +10000f4e: fded bnez a1,10000f48 +10000f50: 0330000f fence rw,rw +10000f54: 00445603 lhu a2,4(s0) +10000f58: 4818 lw a4,16(s0) +10000f5a: 00c79023 sh a2,0(a5) +10000f5e: 01141223 sh a7,4(s0) +10000f62: 0330000f fence rw,rw +10000f66: 00070023 sb zero,0(a4) +10000f6a: 0086f793 andi a5,a3,8 +10000f6e: 3007a073 csrs mstatus,a5 +10000f72: 00044703 lbu a4,0(s0) +10000f76: 445c lw a5,12(s0) +10000f78: 6689 lui a3,0x2 +10000f7a: 04468693 addi a3,a3,68 # 2044 +10000f7e: 28e01733 bset a4,zero,a4 +10000f82: 97b6 add a5,a5,a3 +10000f84: c398 sw a4,0(a5) +10000f86: 40f2 lw ra,28(sp) +10000f88: 4462 lw s0,24(sp) +10000f8a: 44d2 lw s1,20(sp) +10000f8c: 4942 lw s2,16(sp) +10000f8e: 49b2 lw s3,12(sp) +10000f90: 4a22 lw s4,8(sp) +10000f92: 6105 addi sp,sp,32 +10000f94: 8082 ret +10000f96: 0330000f fence rw,rw +10000f9a: 00068023 sb zero,0(a3) +10000f9e: 30072073 csrs mstatus,a4 +10000fa2: 40f2 lw ra,28(sp) +10000fa4: 4462 lw s0,24(sp) +10000fa6: 44d2 lw s1,20(sp) +10000fa8: 4942 lw s2,16(sp) +10000faa: 49b2 lw s3,12(sp) +10000fac: 4a22 lw s4,8(sp) +10000fae: 557d li a0,-1 +10000fb0: 6105 addi sp,sp,32 +10000fb2: 8082 ret + +10000fb4 : +10000fb4: 87aa mv a5,a0 +10000fb6: 4908 lw a0,16(a0) +10000fb8: 30047873 csrrci a6,mstatus,8 +10000fbc: 00351893 slli a7,a0,0x3 +10000fc0: 291018b3 bset a7,zero,a7 +10000fc4: 9971 andi a0,a0,-4 +10000fc6: 4515232f amoor.w.aq t1,a7,(a0) +10000fca: 01137333 and t1,t1,a7 +10000fce: fe031ce3 bnez t1,10000fc6 +10000fd2: 0330000f fence rw,rw +10000fd6: 00279303 lh t1,2(a5) +10000fda: 0147a883 lw a7,20(a5) +10000fde: 00887513 andi a0,a6,8 +10000fe2: 20632833 sh1add a6,t1,t1 +10000fe6: 21186833 sh3add a6,a6,a7 +10000fea: 0107a883 lw a7,16(a5) +10000fee: 08034b63 bltz t1,10001084 +10000ff2: 00085e03 lhu t3,0(a6) +10000ff6: 01c79123 sh t3,2(a5) +10000ffa: 0330000f fence rw,rw +10000ffe: 00088023 sb zero,0(a7) +10001002: 30052073 csrs mstatus,a0 +10001006: 00285883 lhu a7,2(a6) +1000100a: 4e05 li t3,1 +1000100c: 01031513 slli a0,t1,0x10 +10001010: 98f2 add a7,a7,t3 +10001012: 08c6 slli a7,a7,0x11 +10001014: 0118d893 srli a7,a7,0x11 +10001018: 0bc8f8b3 maxu a7,a7,t3 +1000101c: 00e82a23 sw a4,20(a6) +10001020: 00d82823 sw a3,16(a6) +10001024: 00b82423 sw a1,8(a6) +10001028: 00c82623 sw a2,12(a6) +1000102c: 01181123 sh a7,2(a6) +10001030: 01156533 or a0,a0,a7 +10001034: 4b98 lw a4,16(a5) +10001036: 300476f3 csrrci a3,mstatus,8 +1000103a: 00371613 slli a2,a4,0x3 +1000103e: 28c01633 bset a2,zero,a2 +10001042: 9b71 andi a4,a4,-4 +10001044: 44c725af amoor.w.aq a1,a2,(a4) +10001048: 8df1 and a1,a1,a2 +1000104a: fded bnez a1,10001044 +1000104c: 0330000f fence rw,rw +10001050: 0047d603 lhu a2,4(a5) +10001054: 4b98 lw a4,16(a5) +10001056: 00c81023 sh a2,0(a6) +1000105a: 00679223 sh t1,4(a5) +1000105e: 0330000f fence rw,rw +10001062: 00070023 sb zero,0(a4) +10001066: 0086f713 andi a4,a3,8 +1000106a: 30072073 csrs mstatus,a4 +1000106e: 0007c703 lbu a4,0(a5) +10001072: 47dc lw a5,12(a5) +10001074: 6689 lui a3,0x2 +10001076: 04468693 addi a3,a3,68 # 2044 +1000107a: 28e01733 bset a4,zero,a4 +1000107e: 97b6 add a5,a5,a3 +10001080: c398 sw a4,0(a5) +10001082: 8082 ret +10001084: 0330000f fence rw,rw +10001088: 00088023 sb zero,0(a7) +1000108c: 30052073 csrs mstatus,a0 +10001090: 557d li a0,-1 +10001092: 8082 ret + +10001094 : +10001094: 00a55703 lhu a4,10(a0) +10001098: 4105d793 srai a5,a1,0x10 +1000109c: 04e7d863 bge a5,a4,100010ec +100010a0: 4954 lw a3,20(a0) +100010a2: 20f7a7b3 sh1add a5,a5,a5 +100010a6: 4918 lw a4,16(a0) +100010a8: 20d7e7b3 sh3add a5,a5,a3 +100010ac: 300476f3 csrrci a3,mstatus,8 +100010b0: 00371613 slli a2,a4,0x3 +100010b4: 28c01633 bset a2,zero,a2 +100010b8: 9b71 andi a4,a4,-4 +100010ba: 44c7282f amoor.w.aq a6,a2,(a4) +100010be: 00c87833 and a6,a6,a2 +100010c2: fe081ce3 bnez a6,100010ba +100010c6: 0330000f fence rw,rw +100010ca: 0027d603 lhu a2,2(a5) +100010ce: 0805c5b3 zext.h a1,a1 +100010d2: 0086f713 andi a4,a3,8 +100010d6: 080646b3 zext.h a3,a2 +100010da: 00b60b63 beq a2,a1,100010f0 +100010de: 491c lw a5,16(a0) +100010e0: 0330000f fence rw,rw +100010e4: 00078023 sb zero,0(a5) +100010e8: 30072073 csrs mstatus,a4 +100010ec: 4501 li a0,0 +100010ee: 8082 ret +100010f0: 28f69693 bseti a3,a3,0xf +100010f4: 00d79123 sh a3,2(a5) +100010f8: 4785 li a5,1 +100010fa: 00f50323 sb a5,6(a0) +100010fe: 4914 lw a3,16(a0) +10001100: 0330000f fence rw,rw +10001104: 00068023 sb zero,0(a3) +10001108: 30072073 csrs mstatus,a4 +1000110c: 00054683 lbu a3,0(a0) +10001110: 4558 lw a4,12(a0) +10001112: 6609 lui a2,0x2 +10001114: 04460613 addi a2,a2,68 # 2044 +10001118: 28d016b3 bset a3,zero,a3 +1000111c: 9732 add a4,a4,a2 +1000111e: 853e mv a0,a5 +10001120: c314 sw a3,0(a4) +10001122: 8082 ret + +10001124 : +10001124: 1101 addi sp,sp,-32 +10001126: cc22 sw s0,24(sp) +10001128: ca26 sw s1,20(sp) +1000112a: c64e sw s3,12(sp) +1000112c: 84aa mv s1,a0 +1000112e: ce06 sw ra,28(sp) +10001130: c84a sw s2,16(sp) +10001132: 299d jal 100015a8 +10001134: 3e800713 li a4,1000 +10001138: 02e48433 mul s0,s1,a4 +1000113c: 800007b7 lui a5,0x80000 +10001140: 17fd addi a5,a5,-1 # 7fffffff <__StackTop+0x5ff7dfff> +10001142: 02e4b4b3 mulhu s1,s1,a4 +10001146: 00a409b3 add s3,s0,a0 +1000114a: 0089b433 sltu s0,s3,s0 +1000114e: 94ae add s1,s1,a1 +10001150: 9426 add s0,s0,s1 +10001152: 0087f463 bgeu a5,s0,1000115a +10001156: 843e mv s0,a5 +10001158: 59fd li s3,-1 +1000115a: ffa98493 addi s1,s3,-6 +1000115e: 0134b933 sltu s2,s1,s3 +10001162: fff40793 addi a5,s0,-1 +10001166: 993e add s2,s2,a5 +10001168: 03246a63 bltu s0,s2,1000119c +1000116c: 02890663 beq s2,s0,10001198 +10001170: 2925 jal 100015a8 +10001172: 40a48533 sub a0,s1,a0 +10001176: 40b905b3 sub a1,s2,a1 +1000117a: 00a4b7b3 sltu a5,s1,a0 +1000117e: 8d9d sub a1,a1,a5 +10001180: 02b04a63 bgtz a1,100011b4 +10001184: c9cd beqz a1,10001236 +10001186: 85a2 mv a1,s0 +10001188: 4462 lw s0,24(sp) +1000118a: 40f2 lw ra,28(sp) +1000118c: 44d2 lw s1,20(sp) +1000118e: 4942 lw s2,16(sp) +10001190: 854e mv a0,s3 +10001192: 49b2 lw s3,12(sp) +10001194: 6105 addi sp,sp,32 +10001196: a171 j 10001622 +10001198: fc99fce3 bgeu s3,s1,10001170 +1000119c: 2131 jal 100015a8 +1000119e: 4481 li s1,0 +100011a0: 4901 li s2,0 +100011a2: 40a48533 sub a0,s1,a0 +100011a6: 40b905b3 sub a1,s2,a1 +100011aa: 00a4b7b3 sltu a5,s1,a0 +100011ae: 8d9d sub a1,a1,a5 +100011b0: fcb05ae3 blez a1,10001184 +100011b4: 2ed5 jal 100015a8 +100011b6: 40a48533 sub a0,s1,a0 +100011ba: 00a4b533 sltu a0,s1,a0 +100011be: 40b905b3 sub a1,s2,a1 +100011c2: 8d89 sub a1,a1,a0 +100011c4: 0205c163 bltz a1,100011e6 +100011c8: 100016b7 lui a3,0x10001 +100011cc: 20003537 lui a0,0x20003 +100011d0: 99a68693 addi a3,a3,-1638 # 1000099a +100011d4: a3050513 addi a0,a0,-1488 # 20002a30 +100011d8: 4701 li a4,0 +100011da: 85a6 mv a1,s1 +100011dc: 864a mv a2,s2 +100011de: 3bd9 jal 10000fb4 +100011e0: 57fd li a5,-1 +100011e2: faf502e3 beq a0,a5,10001186 +100011e6: 400b06b7 lui a3,0x400b0 +100011ea: 20003637 lui a2,0x20003 +100011ee: 52dc lw a5,36(a3) +100011f0: 0127e763 bltu a5,s2,100011fe +100011f4: 5698 lw a4,40(a3) +100011f6: f89778e3 bgeu a4,s1,10001186 +100011fa: f8f916e3 bne s2,a5,10001186 +100011fe: e5862783 lw a5,-424(a2) # 20002e58 +10001202: 30047773 csrrci a4,mstatus,8 +10001206: 00379593 slli a1,a5,0x3 +1000120a: 28b015b3 bset a1,zero,a1 +1000120e: 9bf1 andi a5,a5,-4 +10001210: 44b7a52f amoor.w.aq a0,a1,(a5) +10001214: 8d6d and a0,a0,a1 +10001216: fd6d bnez a0,10001210 +10001218: 0330000f fence rw,rw +1000121c: e5862783 lw a5,-424(a2) +10001220: 0330000f fence rw,rw +10001224: 00078023 sb zero,0(a5) +10001228: 00877793 andi a5,a4,8 +1000122c: 3007a073 csrs mstatus,a5 +10001230: 00002033 sltz zero,zero +10001234: bf6d j 100011ee +10001236: d921 beqz a0,10001186 +10001238: bfb5 j 100011b4 + +1000123a : +1000123a: 1141 addi sp,sp,-16 +1000123c: c422 sw s0,8(sp) +1000123e: c226 sw s1,4(sp) +10001240: c606 sw ra,12(sp) +10001242: 84aa mv s1,a0 +10001244: 842e mv s0,a1 +10001246: be502773 csrr a4,0xbe5 +1000124a: 01071793 slli a5,a4,0x10 +1000124e: 0407da63 bgez a5,100012a2 +10001252: c04a sw s2,0(sp) +10001254: 20003937 lui s2,0x20003 +10001258: a3090793 addi a5,s2,-1488 # 20002a30 +1000125c: 0007c703 lbu a4,0(a5) +10001260: 47dc lw a5,12(a5) +10001262: 20f74733 sh2add a4,a4,a5 +10001266: 579c lw a5,40(a5) +10001268: 4b18 lw a4,16(a4) +1000126a: 40f506b3 sub a3,a0,a5 +1000126e: 8f1d sub a4,a4,a5 +10001270: 04e6ed63 bltu a3,a4,100012ca +10001274: 00002033 sltz zero,zero +10001278: 400b07b7 lui a5,0x400b0 +1000127c: 53d8 lw a4,36(a5) +1000127e: 4501 li a0,0 +10001280: 0ab76963 bltu a4,a1,10001332 +10001284: 579c lw a5,40(a5) +10001286: 8f0d sub a4,a4,a1 +10001288: 4902 lw s2,0(sp) +1000128a: 0097b533 sltu a0,a5,s1 +1000128e: 00e03733 snez a4,a4 +10001292: 00153513 seqz a0,a0 +10001296: 8d59 or a0,a0,a4 +10001298: 40b2 lw ra,12(sp) +1000129a: 4422 lw s0,8(sp) +1000129c: 4492 lw s1,4(sp) +1000129e: 0141 addi sp,sp,16 +100012a0: 8082 ret +100012a2: 400b07b7 lui a5,0x400b0 +100012a6: 53d8 lw a4,36(a5) +100012a8: 4501 li a0,0 +100012aa: feb767e3 bltu a4,a1,10001298 +100012ae: 579c lw a5,40(a5) +100012b0: 40b2 lw ra,12(sp) +100012b2: 4422 lw s0,8(sp) +100012b4: 0097b533 sltu a0,a5,s1 +100012b8: 8f0d sub a4,a4,a1 +100012ba: 00e03733 snez a4,a4 +100012be: 00153513 seqz a0,a0 +100012c2: 4492 lw s1,4(sp) +100012c4: 8d59 or a0,a0,a4 +100012c6: 0141 addi sp,sp,16 +100012c8: 8082 ret +100012ca: 2cf9 jal 100015a8 +100012cc: 40a48533 sub a0,s1,a0 +100012d0: 00a4b533 sltu a0,s1,a0 +100012d4: 40b405b3 sub a1,s0,a1 +100012d8: 8d89 sub a1,a1,a0 +100012da: 0605c263 bltz a1,1000133e +100012de: 100016b7 lui a3,0x10001 +100012e2: 85a6 mv a1,s1 +100012e4: 99a68693 addi a3,a3,-1638 # 1000099a +100012e8: 4701 li a4,0 +100012ea: 8622 mv a2,s0 +100012ec: a3090513 addi a0,s2,-1488 +100012f0: 31d1 jal 10000fb4 +100012f2: 85aa mv a1,a0 +100012f4: 04a05563 blez a0,1000133e +100012f8: 400b07b7 lui a5,0x400b0 +100012fc: 53d8 lw a4,36(a5) +100012fe: 04876a63 bltu a4,s0,10001352 +10001302: 579c lw a5,40(a5) +10001304: 0497e563 bltu a5,s1,1000134e +10001308: a3090513 addi a0,s2,-1488 +1000130c: 3361 jal 10001094 +1000130e: 400b0737 lui a4,0x400b0 +10001312: 535c lw a5,36(a4) +10001314: 4501 li a0,0 +10001316: 0087ee63 bltu a5,s0,10001332 +1000131a: 5714 lw a3,40(a4) +1000131c: 8f81 sub a5,a5,s0 +1000131e: 00f03733 snez a4,a5 +10001322: 0096b7b3 sltu a5,a3,s1 +10001326: 0017b793 seqz a5,a5 +1000132a: 4902 lw s2,0(sp) +1000132c: 00f76533 or a0,a4,a5 +10001330: b7a5 j 10001298 +10001332: 40b2 lw ra,12(sp) +10001334: 4422 lw s0,8(sp) +10001336: 4902 lw s2,0(sp) +10001338: 4492 lw s1,4(sp) +1000133a: 0141 addi sp,sp,16 +1000133c: 8082 ret +1000133e: 400b0737 lui a4,0x400b0 +10001342: 535c lw a5,36(a4) +10001344: 0087fa63 bgeu a5,s0,10001358 +10001348: 4902 lw s2,0(sp) +1000134a: 4501 li a0,0 +1000134c: b7b1 j 10001298 +1000134e: fa871de3 bne a4,s0,10001308 +10001352: 00002033 sltz zero,zero +10001356: bf4d j 10001308 +10001358: 5718 lw a4,40(a4) +1000135a: 8f81 sub a5,a5,s0 +1000135c: 00f037b3 snez a5,a5 +10001360: 00973733 sltu a4,a4,s1 +10001364: 00173713 seqz a4,a4 +10001368: 4902 lw s2,0(sp) +1000136a: 00e7e533 or a0,a5,a4 +1000136e: b72d j 10001298 + +10001370 : +10001370: 1101 addi sp,sp,-32 +10001372: cc22 sw s0,24(sp) +10001374: c84a sw s2,16(sp) +10001376: ce06 sw ra,28(sp) +10001378: ca26 sw s1,20(sp) +1000137a: c64e sw s3,12(sp) +1000137c: 00c5e833 or a6,a1,a2 +10001380: 842a mv s0,a0 +10001382: 893e mv s2,a5 +10001384: 12080563 beqz a6,100014ae +10001388: 41f65793 srai a5,a2,0x1f +1000138c: 00b7c4b3 xor s1,a5,a1 +10001390: 40f48533 sub a0,s1,a5 +10001394: 00c7c9b3 xor s3,a5,a2 +10001398: 00a4b833 sltu a6,s1,a0 +1000139c: 40f989b3 sub s3,s3,a5 +100013a0: 84aa mv s1,a0 +100013a2: 410989b3 sub s3,s3,a6 +100013a6: 00c92223 sw a2,4(s2) +100013aa: 00892423 sw s0,8(s2) +100013ae: 00d92823 sw a3,16(s2) +100013b2: 00b92023 sw a1,0(s2) +100013b6: 00e92a23 sw a4,20(s2) +100013ba: 22fd jal 100015a8 +100013bc: 94aa add s1,s1,a0 +100013be: 95ce add a1,a1,s3 +100013c0: 00a4b533 sltu a0,s1,a0 +100013c4: 800007b7 lui a5,0x80000 +100013c8: 00b50633 add a2,a0,a1 +100013cc: 17fd addi a5,a5,-1 # 7fffffff <__StackTop+0x5ff7dfff> +100013ce: 00c7f463 bgeu a5,a2,100013d6 +100013d2: 863e mv a2,a5 +100013d4: 54fd li s1,-1 +100013d6: 4818 lw a4,16(s0) +100013d8: 300477f3 csrrci a5,mstatus,8 +100013dc: 00371693 slli a3,a4,0x3 +100013e0: 28d016b3 bset a3,zero,a3 +100013e4: 9b71 andi a4,a4,-4 +100013e6: 44d725af amoor.w.aq a1,a3,(a4) +100013ea: 8df5 and a1,a1,a3 +100013ec: fded bnez a1,100013e6 +100013ee: 0330000f fence rw,rw +100013f2: 00241583 lh a1,2(s0) +100013f6: 4854 lw a3,20(s0) +100013f8: 8ba1 andi a5,a5,8 +100013fa: 20b5a733 sh1add a4,a1,a1 +100013fe: 20d76733 sh3add a4,a4,a3 +10001402: 4814 lw a3,16(s0) +10001404: 0a05ca63 bltz a1,100014b8 +10001408: 00075503 lhu a0,0(a4) # 400b0000 <__StackTop+0x2002e000> +1000140c: 00a41123 sh a0,2(s0) +10001410: 0330000f fence rw,rw +10001414: 00068023 sb zero,0(a3) +10001418: 3007a073 csrs mstatus,a5 +1000141c: 00275683 lhu a3,2(a4) +10001420: 4505 li a0,1 +10001422: 10001837 lui a6,0x10001 +10001426: 96aa add a3,a3,a0 +10001428: 06c6 slli a3,a3,0x11 +1000142a: 82c5 srli a3,a3,0x11 +1000142c: 0aa6f6b3 maxu a3,a3,a0 +10001430: 01059793 slli a5,a1,0x10 +10001434: 9da80813 addi a6,a6,-1574 # 100009da +10001438: 00d71123 sh a3,2(a4) +1000143c: 01272a23 sw s2,20(a4) +10001440: 8edd or a3,a3,a5 +10001442: c704 sw s1,8(a4) +10001444: 481c lw a5,16(s0) +10001446: c750 sw a2,12(a4) +10001448: 01072823 sw a6,16(a4) +1000144c: 30047673 csrrci a2,mstatus,8 +10001450: 00379813 slli a6,a5,0x3 +10001454: 29001833 bset a6,zero,a6 +10001458: 9bf1 andi a5,a5,-4 +1000145a: 4507a8af amoor.w.aq a7,a6,(a5) +1000145e: 0108f8b3 and a7,a7,a6 +10001462: fe089ce3 bnez a7,1000145a +10001466: 0330000f fence rw,rw +1000146a: 00445803 lhu a6,4(s0) +1000146e: 481c lw a5,16(s0) +10001470: 01071023 sh a6,0(a4) +10001474: 00b41223 sh a1,4(s0) +10001478: 0330000f fence rw,rw +1000147c: 00078023 sb zero,0(a5) +10001480: 00867793 andi a5,a2,8 +10001484: 3007a073 csrs mstatus,a5 +10001488: 00044703 lbu a4,0(s0) +1000148c: 445c lw a5,12(s0) +1000148e: 6609 lui a2,0x2 +10001490: 04460613 addi a2,a2,68 # 2044 +10001494: 40f2 lw ra,28(sp) +10001496: 4462 lw s0,24(sp) +10001498: 28e01733 bset a4,zero,a4 +1000149c: 97b2 add a5,a5,a2 +1000149e: c398 sw a4,0(a5) +100014a0: 00d92623 sw a3,12(s2) +100014a4: 44d2 lw s1,20(sp) +100014a6: 4942 lw s2,16(sp) +100014a8: 49b2 lw s3,12(sp) +100014aa: 6105 addi sp,sp,32 +100014ac: 8082 ret +100014ae: 4485 li s1,1 +100014b0: 85a6 mv a1,s1 +100014b2: 4981 li s3,0 +100014b4: 4601 li a2,0 +100014b6: bdc5 j 100013a6 +100014b8: 0330000f fence rw,rw +100014bc: 00068023 sb zero,0(a3) +100014c0: 3007a073 csrs mstatus,a5 +100014c4: 40f2 lw ra,28(sp) +100014c6: 4462 lw s0,24(sp) +100014c8: 56fd li a3,-1 +100014ca: 00d92623 sw a3,12(s2) +100014ce: 44d2 lw s1,20(sp) +100014d0: 4942 lw s2,16(sp) +100014d2: 49b2 lw s3,12(sp) +100014d4: 4501 li a0,0 +100014d6: 6105 addi sp,sp,32 +100014d8: 8082 ret + +100014da : +100014da: 4558 lw a4,12(a0) +100014dc: 87aa mv a5,a0 +100014de: e319 bnez a4,100014e4 +100014e0: 4501 li a0,0 +100014e2: 8082 ret +100014e4: 4510 lw a2,8(a0) +100014e6: 41075693 srai a3,a4,0x10 +100014ea: 00a65583 lhu a1,10(a2) +100014ee: 04b6d663 bge a3,a1,1000153a +100014f2: 4a48 lw a0,20(a2) +100014f4: 20d6a6b3 sh1add a3,a3,a3 +100014f8: 4a0c lw a1,16(a2) +100014fa: 20a6e6b3 sh3add a3,a3,a0 +100014fe: 30047573 csrrci a0,mstatus,8 +10001502: 00359813 slli a6,a1,0x3 +10001506: 29001833 bset a6,zero,a6 +1000150a: 99f1 andi a1,a1,-4 +1000150c: 4505a8af amoor.w.aq a7,a6,(a1) +10001510: 0108f8b3 and a7,a7,a6 +10001514: fe089ce3 bnez a7,1000150c +10001518: 0330000f fence rw,rw +1000151c: 0026d803 lhu a6,2(a3) +10001520: 08074733 zext.h a4,a4 +10001524: 00857593 andi a1,a0,8 +10001528: 01070d63 beq a4,a6,10001542 +1000152c: 4a18 lw a4,16(a2) +1000152e: 0330000f fence rw,rw +10001532: 00070023 sb zero,0(a4) +10001536: 3005a073 csrs mstatus,a1 +1000153a: 4501 li a0,0 +1000153c: 0007a623 sw zero,12(a5) +10001540: 8082 ret +10001542: 28f71713 bseti a4,a4,0xf +10001546: 00e69123 sh a4,2(a3) +1000154a: 4505 li a0,1 +1000154c: 00a60323 sb a0,6(a2) +10001550: 4a18 lw a4,16(a2) +10001552: 0330000f fence rw,rw +10001556: 00070023 sb zero,0(a4) +1000155a: 3005a073 csrs mstatus,a1 +1000155e: 00064683 lbu a3,0(a2) +10001562: 4658 lw a4,12(a2) +10001564: 6609 lui a2,0x2 +10001566: 04460613 addi a2,a2,68 # 2044 +1000156a: 28d016b3 bset a3,zero,a3 +1000156e: 9732 add a4,a4,a2 +10001570: c314 sw a3,0(a4) +10001572: 0007a623 sw zero,12(a5) +10001576: 8082 ret + +10001578 : +10001578: bff487b7 lui a5,0xbff48 +1000157c: 97aa add a5,a5,a0 +1000157e: 20003537 lui a0,0x20003 +10001582: 0017b793 seqz a5,a5 +10001586: e5c50513 addi a0,a0,-420 # 20002e5c +1000158a: 10004637 lui a2,0x10004 +1000158e: 953e add a0,a0,a5 +10001590: ca460613 addi a2,a2,-860 # 10003ca4 <__EH_FRAME_BEGIN__+0x68> +10001594: d93fe06f j 10000326 + +10001598 : +10001598: 514c lw a1,36(a0) +1000159a: 87aa mv a5,a0 +1000159c: 5788 lw a0,40(a5) +1000159e: 872e mv a4,a1 +100015a0: 53cc lw a1,36(a5) +100015a2: feb71de3 bne a4,a1,1000159c +100015a6: 8082 ret + +100015a8 : +100015a8: 400b07b7 lui a5,0x400b0 +100015ac: 53cc lw a1,36(a5) +100015ae: 5788 lw a0,40(a5) +100015b0: 872e mv a4,a1 +100015b2: 53cc lw a1,36(a5) +100015b4: fee59de3 bne a1,a4,100015ae +100015b8: 8082 ret + +100015ba : +100015ba: 400b0737 lui a4,0x400b0 +100015be: 535c lw a5,36(a4) +100015c0: 02872803 lw a6,40(a4) # 400b0028 <__StackTop+0x2002e028> +100015c4: 86be mv a3,a5 +100015c6: 535c lw a5,36(a4) +100015c8: fed79ce3 bne a5,a3,100015c0 +100015cc: 01050633 add a2,a0,a6 +100015d0: 95be add a1,a1,a5 +100015d2: 00a63733 sltu a4,a2,a0 +100015d6: 972e add a4,a4,a1 +100015d8: 02f76c63 bltu a4,a5,10001610 +100015dc: 02e78863 beq a5,a4,1000160c +100015e0: 400b07b7 lui a5,0x400b0 +100015e4: 53dc lw a5,36(a5) +100015e6: 00e7f763 bgeu a5,a4,100015f4 +100015ea: 400b06b7 lui a3,0x400b0 +100015ee: 52dc lw a5,36(a3) +100015f0: fee7efe3 bltu a5,a4,100015ee +100015f4: 00e79b63 bne a5,a4,1000160a +100015f8: 400b0737 lui a4,0x400b0 +100015fc: a021 j 10001604 +100015fe: 5354 lw a3,36(a4) +10001600: 00f69563 bne a3,a5,1000160a +10001604: 5714 lw a3,40(a4) +10001606: fec6ece3 bltu a3,a2,100015fe +1000160a: 8082 ret +1000160c: fd067ae3 bgeu a2,a6,100015e0 +10001610: 400b07b7 lui a5,0x400b0 +10001614: 53dc lw a5,36(a5) +10001616: 577d li a4,-1 +10001618: 863a mv a2,a4 +1000161a: fce798e3 bne a5,a4,100015ea +1000161e: 863e mv a2,a5 +10001620: bfe1 j 100015f8 + +10001622 : +10001622: 400b0737 lui a4,0x400b0 +10001626: 535c lw a5,36(a4) +10001628: feb7efe3 bltu a5,a1,10001626 +1000162c: 00f59b63 bne a1,a5,10001642 +10001630: 400b07b7 lui a5,0x400b0 +10001634: a021 j 1000163c +10001636: 53d8 lw a4,36(a5) +10001638: 00e59563 bne a1,a4,10001642 +1000163c: 5798 lw a4,40(a5) +1000163e: fea76ce3 bltu a4,a0,10001636 +10001642: 8082 ret + +10001644 : +10001644: 1101 addi sp,sp,-32 +10001646: cc22 sw s0,24(sp) +10001648: 842a mv s0,a0 +1000164a: 4519 li a0,6 +1000164c: ca26 sw s1,20(sp) +1000164e: ce06 sw ra,28(sp) +10001650: 84ae mv s1,a1 +10001652: 2add jal 10001848 +10001654: c155 beqz a0,100016f8 +10001656: c84a sw s2,16(sp) +10001658: c64e sw s3,12(sp) +1000165a: 400787b7 lui a5,0x40078 +1000165e: 04000737 lui a4,0x4000 +10001662: 0ef40d63 beq s0,a5,1000175c +10001666: 400227b7 lui a5,0x40022 +1000166a: c398 sw a4,0(a5) +1000166c: 400206b7 lui a3,0x40020 +10001670: 400237b7 lui a5,0x40023 +10001674: c398 sw a4,0(a5) +10001676: 06a1 addi a3,a3,8 # 40020008 <__StackTop+0x1ff9e008> +10001678: 429c lw a5,0(a3) +1000167a: 40f777b3 andn a5,a4,a5 +1000167e: ffed bnez a5,10001678 +10001680: bff887b7 lui a5,0xbff88 +10001684: 97a2 add a5,a5,s0 +10001686: 80c18713 addi a4,gp,-2036 # 20002e60 +1000168a: 0017b793 seqz a5,a5 +1000168e: 20e7a7b3 sh1add a5,a5,a4 +10001692: 4519 li a0,6 +10001694: 10000713 li a4,256 +10001698: 00e79023 sh a4,0(a5) # bff88000 <__StackTop+0x9ff06000> +1000169c: 2275 jal 10001848 +1000169e: 00351793 slli a5,a0,0x3 +100016a2: 0297d7b3 divu a5,a5,s1 +100016a6: 0785 addi a5,a5,1 +100016a8: 0077d713 srli a4,a5,0x7 +100016ac: eb39 bnez a4,10001702 +100016ae: 04000993 li s3,64 +100016b2: 4685 li a3,1 +100016b4: d054 sw a3,36(s0) +100016b6: d418 sw a4,40(s0) +100016b8: 03042903 lw s2,48(s0) +100016bc: 00197793 andi a5,s2,1 +100016c0: e3bd bnez a5,10001726 +100016c2: 6485 lui s1,0x1 +100016c4: 02c48493 addi s1,s1,44 # 102c +100016c8: 94a2 add s1,s1,s0 +100016ca: 545c lw a5,44(s0) +100016cc: 0004a023 sw zero,0(s1) +100016d0: 03242823 sw s2,48(s0) +100016d4: 4519 li a0,6 +100016d6: 2a8d jal 10001848 +100016d8: 545c lw a5,44(s0) +100016da: 050a slli a0,a0,0x2 +100016dc: 03355533 divu a0,a0,s3 +100016e0: 0707c793 xori a5,a5,112 +100016e4: 07e7f793 andi a5,a5,126 +100016e8: c09c sw a5,0(s1) +100016ea: 30100693 li a3,769 +100016ee: 4942 lw s2,16(sp) +100016f0: 49b2 lw s3,12(sp) +100016f2: 470d li a4,3 +100016f4: d814 sw a3,48(s0) +100016f6: c438 sw a4,72(s0) +100016f8: 40f2 lw ra,28(sp) +100016fa: 4462 lw s0,24(sp) +100016fc: 44d2 lw s1,20(sp) +100016fe: 6105 addi sp,sp,32 +10001700: 8082 ret +10001702: 6641 lui a2,0x10 +10001704: 1679 addi a2,a2,-2 # fffe +10001706: 66c1 lui a3,0x10 +10001708: 04e67d63 bgeu a2,a4,10001762 +1000170c: 16fd addi a3,a3,-1 # ffff +1000170e: d054 sw a3,36(s0) +10001710: 4701 li a4,0 +10001712: d418 sw a4,40(s0) +10001714: 03042903 lw s2,48(s0) +10001718: 004009b7 lui s3,0x400 +1000171c: fc098993 addi s3,s3,-64 # 3fffc0 +10001720: 00197793 andi a5,s2,1 +10001724: dfd9 beqz a5,100016c2 +10001726: 678d lui a5,0x3 +10001728: 03078793 addi a5,a5,48 # 3030 +1000172c: 97a2 add a5,a5,s0 +1000172e: 30100713 li a4,769 +10001732: c398 sw a4,0(a5) +10001734: 5044 lw s1,36(s0) +10001736: 541c lw a5,40(s0) +10001738: 4519 li a0,6 +1000173a: 049a slli s1,s1,0x6 +1000173c: 94be add s1,s1,a5 +1000173e: 2229 jal 10001848 +10001740: 8f2b87b7 lui a5,0x8f2b8 +10001744: b7578793 addi a5,a5,-1163 # 8f2b7b75 <__StackTop+0x6f235b75> +10001748: 02f537b3 mulhu a5,a0,a5 +1000174c: 00a49513 slli a0,s1,0xa +10001750: 4581 li a1,0 +10001752: 83ad srli a5,a5,0xb +10001754: 02f55533 divu a0,a0,a5 +10001758: 358d jal 100015ba +1000175a: b7a5 j 100016c2 +1000175c: 08000737 lui a4,0x8000 +10001760: b719 j 10001666 +10001762: 8385 srli a5,a5,0x1 +10001764: 03f7f793 andi a5,a5,63 +10001768: 00671993 slli s3,a4,0x6 +1000176c: 86ba mv a3,a4 +1000176e: 99be add s3,s3,a5 +10001770: 873e mv a4,a5 +10001772: b789 j 100016b4 + +10001774 : +10001774: 400107b7 lui a5,0x40010 +10001778: 20a52733 sh1add a4,a0,a0 +1000177c: 20f74733 sh2add a4,a4,a5 +10001780: 00472803 lw a6,4(a4) # 8000004 +10001784: 67c1 lui a5,0x10 +10001786: 00f87363 bgeu a6,a5,1000178c +1000178a: c35c sw a5,4(a4) +1000178c: ffc50813 addi a6,a0,-4 +10001790: 4785 li a5,1 +10001792: 0707f663 bgeu a5,a6,100017fe +10001796: 20003337 lui t1,0x20003 +1000179a: e0c30313 addi t1,t1,-500 # 20002e0c +1000179e: 206547b3 sh2add a5,a0,t1 +100017a2: 0007a883 lw a7,0(a5) # 10000 +100017a6: 678d lui a5,0x3 +100017a8: 97ba add a5,a5,a4 +100017aa: 28b01e13 bseti t3,zero,0xb +100017ae: 01c7a023 sw t3,0(a5) # 3000 +100017b2: 050a slli a0,a0,0x2 +100017b4: 02089963 bnez a7,100017e6 +100017b8: 00072883 lw a7,0(a4) +100017bc: 0616 slli a2,a2,0x5 +100017be: 6785 lui a5,0x1 +100017c0: 01164633 xor a2,a2,a7 +100017c4: 0e067613 andi a2,a2,224 +100017c8: 97ba add a5,a5,a4 +100017ca: c390 sw a2,0(a5) +100017cc: 4605 li a2,1 +100017ce: 07067163 bgeu a2,a6,10001830 +100017d2: 6789 lui a5,0x2 +100017d4: 97ba add a5,a5,a4 +100017d6: 28b01613 bseti a2,zero,0xb +100017da: c390 sw a2,0(a5) +100017dc: 951a add a0,a0,t1 +100017de: 67c1 lui a5,0x10 +100017e0: c114 sw a3,0(a0) +100017e2: c35c sw a5,4(a4) +100017e4: 8082 ret +100017e6: 01432783 lw a5,20(t1) +100017ea: 0317d7b3 divu a5,a5,a7 +100017ee: 0785 addi a5,a5,1 # 10001 +100017f0: 20f7a7b3 sh1add a5,a5,a5 +100017f4: ffe78793 addi a5,a5,-2 +100017f8: fe07dee3 bgez a5,100017f4 +100017fc: bf75 j 100017b8 +100017fe: f8f59ce3 bne a1,a5,10001796 +10001802: 678d lui a5,0x3 +10001804: 97ba add a5,a5,a4 +10001806: 480d li a6,3 +10001808: 0107a023 sw a6,0(a5) # 3000 +1000180c: 471c lw a5,8(a4) +1000180e: 8b85 andi a5,a5,1 +10001810: dff5 beqz a5,1000180c +10001812: 00072803 lw a6,0(a4) +10001816: 0616 slli a2,a2,0x5 +10001818: 6785 lui a5,0x1 +1000181a: 01064633 xor a2,a2,a6 +1000181e: 0e067613 andi a2,a2,224 +10001822: 97ba add a5,a5,a4 +10001824: 20003337 lui t1,0x20003 +10001828: 050a slli a0,a0,0x2 +1000182a: c390 sw a2,0(a5) +1000182c: e0c30313 addi t1,t1,-500 # 20002e0c +10001830: 00072803 lw a6,0(a4) +10001834: 28b01633 bset a2,zero,a1 +10001838: 0105c5b3 xor a1,a1,a6 +1000183c: 898d andi a1,a1,3 +1000183e: c38c sw a1,0(a5) +10001840: 471c lw a5,8(a4) +10001842: 8ff1 and a5,a5,a2 +10001844: dff5 beqz a5,10001840 +10001846: b771 j 100017d2 + +10001848 : +10001848: 200037b7 lui a5,0x20003 +1000184c: e0c78793 addi a5,a5,-500 # 20002e0c +10001850: 20f54533 sh2add a0,a0,a5 +10001854: 4108 lw a0,0(a0) +10001856: 8082 ret + +10001858 : +10001858: 00b727b7 lui a5,0xb72 +1000185c: b0078793 addi a5,a5,-1280 # b71b00 +10001860: 02b7d7b3 divu a5,a5,a1 +10001864: 00052883 lw a7,0(a0) +10001868: 06c2 slli a3,a3,0x10 +1000186a: 0732 slli a4,a4,0xc +1000186c: 00e6e833 or a6,a3,a4 +10001870: 02f65633 divu a2,a2,a5 +10001874: 0408c463 bltz a7,100018bc +10001878: 400587b7 lui a5,0x40058 +1000187c: 6711 lui a4,0x4 +1000187e: 06f50063 beq a0,a5,100018de +10001882: 400227b7 lui a5,0x40022 +10001886: c398 sw a4,0(a5) +10001888: 400206b7 lui a3,0x40020 +1000188c: 400237b7 lui a5,0x40023 +10001890: c398 sw a4,0(a5) +10001892: 06a1 addi a3,a3,8 # 40020008 <__StackTop+0x1ff9e008> +10001894: 429c lw a5,0(a3) +10001896: 40f777b3 andn a5,a4,a5 +1000189a: ffed bnez a5,10001894 +1000189c: 670d lui a4,0x3 +1000189e: c10c sw a1,0(a0) +100018a0: 0711 addi a4,a4,4 # 3004 +100018a2: c510 sw a2,8(a0) +100018a4: 972a add a4,a4,a0 +100018a6: 02100793 li a5,33 +100018aa: c31c sw a5,0(a4) +100018ac: 411c lw a5,0(a0) +100018ae: fe07dfe3 bgez a5,100018ac +100018b2: 01052623 sw a6,12(a0) +100018b6: 47a1 li a5,8 +100018b8: c31c sw a5,0(a4) +100018ba: 8082 ret +100018bc: 411c lw a5,0(a0) +100018be: 03f7f793 andi a5,a5,63 +100018c2: fab79be3 bne a5,a1,10001878 +100018c6: 451c lw a5,8(a0) +100018c8: 07d2 slli a5,a5,0x14 +100018ca: 83d1 srli a5,a5,0x14 +100018cc: fac796e3 bne a5,a2,10001878 +100018d0: 455c lw a5,12(a0) +100018d2: 00077737 lui a4,0x77 +100018d6: 8ff9 and a5,a5,a4 +100018d8: fb0790e3 bne a5,a6,10001878 +100018dc: 8082 ret +100018de: 6721 lui a4,0x8 +100018e0: b74d j 10001882 + +100018e2 : +100018e2: 401087b7 lui a5,0x40108 +100018e6: 20a52533 sh1add a0,a0,a0 +100018ea: 20f54533 sh2add a0,a0,a5 +100018ee: c14c sw a1,4(a0) +100018f0: 4785 li a5,1 +100018f2: c11c sw a5,0(a0) +100018f4: 8082 ret + +100018f6 : +100018f6: 67a1 lui a5,0x8 +100018f8: dfa78793 addi a5,a5,-518 # 7dfa +100018fc: 0007d783 lhu a5,0(a5) +10001900: 4585 li a1,1 +10001902: 8782 jr a5 + +10001904 : +10001904: 400e17b7 lui a5,0x400e1 +10001908: 82878793 addi a5,a5,-2008 # 400e0828 <__StackTop+0x2005e828> +1000190c: 4398 lw a4,0(a5) +1000190e: df7d beqz a4,1000190c +10001910: 0330000f fence rw,rw +10001914: 8082 ret + +10001916 : +10001916: 400e17b7 lui a5,0x400e1 +1000191a: 873e mv a4,a5 +1000191c: 82c70713 addi a4,a4,-2004 # 782c +10001920: 80c78793 addi a5,a5,-2036 # 400e080c <__StackTop+0x2005e80c> +10001924: 0330000f fence rw,rw +10001928: 0007a023 sw zero,0(a5) +1000192c: 0791 addi a5,a5,4 +1000192e: fee79be3 bne a5,a4,10001924 +10001932: 8082 ret + +10001934 : +10001934: 6785 lui a5,0x1 +10001936: aa078793 addi a5,a5,-1376 # aa0 +1000193a: 40048737 lui a4,0x40048 +1000193e: c31c sw a5,0(a4) +10001940: 02f00793 li a5,47 +10001944: c75c sw a5,12(a4) +10001946: 00fab6b7 lui a3,0xfab +1000194a: 4004a7b7 lui a5,0x4004a +1000194e: c394 sw a3,0(a5) +10001950: 435c lw a5,4(a4) +10001952: fe07dfe3 bgez a5,10001950 +10001956: 8082 ret + +10001958 : +10001958: 8082 ret + +1000195a : +1000195a: 10004537 lui a0,0x10004 +1000195e: 1141 addi sp,sp,-16 +10001960: cc850513 addi a0,a0,-824 # 10003cc8 <__EH_FRAME_BEGIN__+0x8c> +10001964: c606 sw ra,12(sp) +10001966: 981fe0ef jal 100002e6 + +1000196a : +1000196a: 1141 addi sp,sp,-16 +1000196c: c422 sw s0,8(sp) +1000196e: c226 sw s1,4(sp) +10001970: 10004437 lui s0,0x10004 +10001974: 100044b7 lui s1,0x10004 +10001978: c606 sw ra,12(sp) +1000197a: c0040793 addi a5,s0,-1024 # 10003c00 <__pre_init_runtime_init_bootrom_reset> +1000197e: c3848493 addi s1,s1,-968 # 10003c38 <__frame_dummy_init_array_entry> +10001982: 0097f963 bgeu a5,s1,10001994 +10001986: c0040413 addi s0,s0,-1024 +1000198a: 401c lw a5,0(s0) +1000198c: 0411 addi s0,s0,4 +1000198e: 9782 jalr a5 +10001990: fe946de3 bltu s0,s1,1000198a +10001994: 40b2 lw ra,12(sp) +10001996: 4422 lw s0,8(sp) +10001998: 4492 lw s1,4(sp) +1000199a: 0141 addi sp,sp,16 +1000199c: 8082 ret + +1000199e : +1000199e: efef47b7 lui a5,0xefef4 +100019a2: b7f78793 addi a5,a5,-1153 # efef3b7f <__StackTop+0xcfe71b7f> +100019a6: 400226b7 lui a3,0x40022 +100019aa: 03f40737 lui a4,0x3f40 +100019ae: c29c sw a5,0(a3) +100019b0: 1759 addi a4,a4,-10 # 3f3fff6 +100019b2: 400237b7 lui a5,0x40023 +100019b6: 400206b7 lui a3,0x40020 +100019ba: c398 sw a4,0(a5) +100019bc: 06a1 addi a3,a3,8 # 40020008 <__StackTop+0x1ff9e008> +100019be: 429c lw a5,0(a3) +100019c0: 40f777b3 andn a5,a4,a5 +100019c4: ffed bnez a5,100019be +100019c6: 8082 ret + +100019c8 : +100019c8: 501107b7 lui a5,0x50110 +100019cc: 47f8 lw a4,76(a5) +100019ce: 67a1 lui a5,0x8 +100019d0: 00f70363 beq a4,a5,100019d6 +100019d4: 8082 ret +100019d6: 501127b7 lui a5,0x50112 +100019da: 00040737 lui a4,0x40 +100019de: c7f8 sw a4,76(a5) +100019e0: 8082 ret + +100019e2 : +100019e2: 20000737 lui a4,0x20000 +100019e6: 177d addi a4,a4,-1 # 1fffffff <__flash_binary_end+0xfff92c7> +100019e8: 400237b7 lui a5,0x40023 +100019ec: 400206b7 lui a3,0x40020 +100019f0: c398 sw a4,0(a5) +100019f2: 06a1 addi a3,a3,8 # 40020008 <__StackTop+0x1ff9e008> +100019f4: 429c lw a5,0(a3) +100019f6: 40f777b3 andn a5,a4,a5 +100019fa: ffed bnez a5,100019f4 +100019fc: 8082 ret + +100019fe : +100019fe: 6515 lui a0,0x5 +10001a00: 1141 addi sp,sp,-16 +10001a02: 25350513 addi a0,a0,595 # 5253 +10001a06: c606 sw ra,12(sp) +10001a08: 35fd jal 100018f6 +10001a0a: 40b2 lw ra,12(sp) +10001a0c: 87aa mv a5,a0 +10001a0e: 4511 li a0,4 +10001a10: 0141 addi sp,sp,16 +10001a12: 8782 jr a5 + +10001a14 : +10001a14: 6515 lui a0,0x5 +10001a16: 1141 addi sp,sp,-16 +10001a18: 25350513 addi a0,a0,595 # 5253 +10001a1c: c606 sw ra,12(sp) +10001a1e: 3de1 jal 100018f6 +10001a20: 40b2 lw ra,12(sp) +10001a22: 87aa mv a5,a0 +10001a24: 4505 li a0,1 +10001a26: 0141 addi sp,sp,16 +10001a28: 8782 jr a5 + +10001a2a : +10001a2a: 981fe06f j 100003aa + +10001a2e : +10001a2e: 1141 addi sp,sp,-16 +10001a30: c422 sw s0,8(sp) +10001a32: c606 sw ra,12(sp) +10001a34: c226 sw s1,4(sp) +10001a36: c04a sw s2,0(sp) +10001a38: 40010437 lui s0,0x40010 +10001a3c: 08042223 sw zero,132(s0) # 40010084 <__StackTop+0x1ff8e084> +10001a40: 3dd5 jal 10001934 +10001a42: 400137b7 lui a5,0x40013 +10001a46: 4705 li a4,1 +10001a48: dfd8 sw a4,60(a5) +10001a4a: 407c lw a5,68(s0) +10001a4c: fee79fe3 bne a5,a4,10001a4a +10001a50: 470d li a4,3 +10001a52: 400137b7 lui a5,0x40013 +10001a56: db98 sw a4,48(a5) +10001a58: 4405 li s0,1 +10001a5a: 40010737 lui a4,0x40010 +10001a5e: 5f1c lw a5,56(a4) +10001a60: fe879fe3 bne a5,s0,10001a5e +10001a64: 59683637 lui a2,0x59683 +10001a68: 85a2 mv a1,s0 +10001a6a: f0060613 addi a2,a2,-256 # 59682f00 <__StackTop+0x39600f00> +10001a6e: 4709 li a4,2 +10001a70: 4695 li a3,5 +10001a72: 40050537 lui a0,0x40050 +10001a76: 33cd jal 10001858 +10001a78: 4715 li a4,5 +10001a7a: 47869637 lui a2,0x47869 +10001a7e: 86ba mv a3,a4 +10001a80: 85a2 mv a1,s0 +10001a82: c0060613 addi a2,a2,-1024 # 47868c00 <__StackTop+0x277e6c00> +10001a86: 40058537 lui a0,0x40058 +10001a8a: 33f9 jal 10001858 +10001a8c: 00b726b7 lui a3,0xb72 +10001a90: b0068693 addi a3,a3,-1280 # b71b00 +10001a94: 4601 li a2,0 +10001a96: 4589 li a1,2 +10001a98: 4511 li a0,4 +10001a9a: 39e9 jal 10001774 +10001a9c: 08f0d6b7 lui a3,0x8f0d +10001aa0: 85a2 mv a1,s0 +10001aa2: 18068693 addi a3,a3,384 # 8f0d180 +10001aa6: 4601 li a2,0 +10001aa8: 4515 li a0,5 +10001aaa: 31e9 jal 10001774 +10001aac: 02dc76b7 lui a3,0x2dc7 +10001ab0: c0068693 addi a3,a3,-1024 # 2dc6c00 +10001ab4: 4601 li a2,0 +10001ab6: 4581 li a1,0 +10001ab8: 4521 li a0,8 +10001aba: 396d jal 10001774 +10001abc: 02dc76b7 lui a3,0x2dc7 +10001ac0: c0068693 addi a3,a3,-1024 # 2dc6c00 +10001ac4: 4601 li a2,0 +10001ac6: 4581 li a1,0 +10001ac8: 4525 li a0,9 +10001aca: 316d jal 10001774 +10001acc: 08f0d6b7 lui a3,0x8f0d +10001ad0: 18068693 addi a3,a3,384 # 8f0d180 +10001ad4: 4601 li a2,0 +10001ad6: 4581 li a1,0 +10001ad8: 4519 li a0,6 +10001ada: 3969 jal 10001774 +10001adc: 08f0d6b7 lui a3,0x8f0d +10001ae0: 18068693 addi a3,a3,384 # 8f0d180 +10001ae4: 4601 li a2,0 +10001ae6: 4581 li a1,0 +10001ae8: 451d li a0,7 +10001aea: 3169 jal 10001774 +10001aec: 4511 li a0,4 +10001aee: 3ba9 jal 10001848 +10001af0: 431be7b7 lui a5,0x431be +10001af4: e8378793 addi a5,a5,-381 # 431bde83 <__StackTop+0x2313be83> +10001af8: 02f534b3 mulhu s1,a0,a5 +10001afc: 4401 li s0,0 +10001afe: 4919 li s2,6 +10001b00: 80c9 srli s1,s1,0x12 +10001b02: 8522 mv a0,s0 +10001b04: 85a6 mv a1,s1 +10001b06: 0405 addi s0,s0,1 +10001b08: 3be9 jal 100018e2 +10001b0a: ff241ce3 bne s0,s2,10001b02 +10001b0e: 40b2 lw ra,12(sp) +10001b10: 4422 lw s0,8(sp) +10001b12: 4492 lw s1,4(sp) +10001b14: 4902 lw s2,0(sp) +10001b16: 0141 addi sp,sp,16 +10001b18: 8082 ret + +10001b1a <_out_null>: +10001b1a: 8082 ret + +10001b1c <_out_rev>: +10001b1c: 7179 addi sp,sp,-48 +10001b1e: d422 sw s0,40(sp) +10001b20: ce4e sw s3,28(sp) +10001b22: cc52 sw s4,24(sp) +10001b24: ca56 sw s5,20(sp) +10001b26: c85a sw s6,16(sp) +10001b28: c65e sw s7,12(sp) +10001b2a: c462 sw s8,8(sp) +10001b2c: c266 sw s9,4(sp) +10001b2e: d606 sw ra,44(sp) +10001b30: 8cc6 mv s9,a7 +10001b32: d226 sw s1,36(sp) +10001b34: d04a sw s2,32(sp) +10001b36: 0038f893 andi a7,a7,3 +10001b3a: 89aa mv s3,a0 +10001b3c: 8a2e mv s4,a1 +10001b3e: 8b32 mv s6,a2 +10001b40: 8ab6 mv s5,a3 +10001b42: 8bba mv s7,a4 +10001b44: 843e mv s0,a5 +10001b46: 8c42 mv s8,a6 +10001b48: 06089f63 bnez a7,10001bc6 <_out_rev+0xaa> +10001b4c: 40f80933 sub s2,a6,a5 +10001b50: 9932 add s2,s2,a2 +10001b52: 84b2 mv s1,a2 +10001b54: 0707fd63 bgeu a5,a6,10001bce <_out_rev+0xb2> +10001b58: 8626 mv a2,s1 +10001b5a: 86d6 mv a3,s5 +10001b5c: 0485 addi s1,s1,1 +10001b5e: 85d2 mv a1,s4 +10001b60: 02000513 li a0,32 +10001b64: 9982 jalr s3 +10001b66: ff2499e3 bne s1,s2,10001b58 <_out_rev+0x3c> +10001b6a: c021 beqz s0,10001baa <_out_rev+0x8e> +10001b6c: 9922 add s2,s2,s0 +10001b6e: 40890633 sub a2,s2,s0 +10001b72: 147d addi s0,s0,-1 +10001b74: 008b87b3 add a5,s7,s0 +10001b78: 0007c503 lbu a0,0(a5) +10001b7c: 86d6 mv a3,s5 +10001b7e: 85d2 mv a1,s4 +10001b80: 84ca mv s1,s2 +10001b82: 9982 jalr s3 +10001b84: f46d bnez s0,10001b6e <_out_rev+0x52> +10001b86: 002cfc93 andi s9,s9,2 +10001b8a: 020c8063 beqz s9,10001baa <_out_rev+0x8e> +10001b8e: 41648b33 sub s6,s1,s6 +10001b92: 018b7c63 bgeu s6,s8,10001baa <_out_rev+0x8e> +10001b96: 8626 mv a2,s1 +10001b98: 86d6 mv a3,s5 +10001b9a: 85d2 mv a1,s4 +10001b9c: 02000513 li a0,32 +10001ba0: 0b05 addi s6,s6,1 +10001ba2: 0485 addi s1,s1,1 +10001ba4: 9982 jalr s3 +10001ba6: ff8b68e3 bltu s6,s8,10001b96 <_out_rev+0x7a> +10001baa: 50b2 lw ra,44(sp) +10001bac: 5422 lw s0,40(sp) +10001bae: 5902 lw s2,32(sp) +10001bb0: 49f2 lw s3,28(sp) +10001bb2: 4a62 lw s4,24(sp) +10001bb4: 4ad2 lw s5,20(sp) +10001bb6: 4b42 lw s6,16(sp) +10001bb8: 4bb2 lw s7,12(sp) +10001bba: 4c22 lw s8,8(sp) +10001bbc: 4c92 lw s9,4(sp) +10001bbe: 8526 mv a0,s1 +10001bc0: 5492 lw s1,36(sp) +10001bc2: 6145 addi sp,sp,48 +10001bc4: 8082 ret +10001bc6: 8932 mv s2,a2 +10001bc8: 84b2 mv s1,a2 +10001bca: f3cd bnez a5,10001b6c <_out_rev+0x50> +10001bcc: bf6d j 10001b86 <_out_rev+0x6a> +10001bce: 8932 mv s2,a2 +10001bd0: ffd1 bnez a5,10001b6c <_out_rev+0x50> +10001bd2: bfe1 j 10001baa <_out_rev+0x8e> + +10001bd4 <_ntoa_format>: +10001bd4: 42a2 lw t0,8(sp) +10001bd6: 8fc2 mv t6,a6 +10001bd8: 4e02 lw t3,0(sp) +10001bda: 0022fe93 andi t4,t0,2 +10001bde: 4812 lw a6,4(sp) +10001be0: 833e mv t1,a5 +10001be2: 040e9663 bnez t4,10001c2e <_ntoa_format+0x5a> +10001be6: 0c081863 bnez a6,10001cb6 <_ntoa_format+0xe2> +10001bea: 05c7f263 bgeu a5,t3,10001c2e <_ntoa_format+0x5a> +10001bee: 0012f393 andi t2,t0,1 +10001bf2: 02000e93 li t4,32 +10001bf6: 03000f13 li t5,48 +10001bfa: 01d30963 beq t1,t4,10001c0c <_ntoa_format+0x38> +10001bfe: 0305 addi t1,t1,1 +10001c00: 006707b3 add a5,a4,t1 +10001c04: ffe78fa3 sb t5,-1(a5) +10001c08: ffc369e3 bltu t1,t3,10001bfa <_ntoa_format+0x26> +10001c0c: 06038263 beqz t2,10001c70 <_ntoa_format+0x9c> +10001c10: 02000e93 li t4,32 +10001c14: 03000f13 li t5,48 +10001c18: 01037b63 bgeu t1,a6,10001c2e <_ntoa_format+0x5a> +10001c1c: 0dd30463 beq t1,t4,10001ce4 <_ntoa_format+0x110> +10001c20: 0305 addi t1,t1,1 +10001c22: 006707b3 add a5,a4,t1 +10001c26: ffe78fa3 sb t5,-1(a5) +10001c2a: ff0319e3 bne t1,a6,10001c1c <_ntoa_format+0x48> +10001c2e: 0102f793 andi a5,t0,16 +10001c32: cbb5 beqz a5,10001ca6 <_ntoa_format+0xd2> +10001c34: 4002f793 andi a5,t0,1024 +10001c38: e7b1 bnez a5,10001c84 <_ntoa_format+0xb0> +10001c3a: 04031163 bnez t1,10001c7c <_ntoa_format+0xa8> +10001c3e: 47c1 li a5,16 +10001c40: 16f88363 beq a7,a5,10001da6 <_ntoa_format+0x1d2> +10001c44: 4789 li a5,2 +10001c46: 16f88f63 beq a7,a5,10001dc4 <_ntoa_format+0x1f0> +10001c4a: 03000793 li a5,48 +10001c4e: 00f70023 sb a5,0(a4) # 40010000 <__StackTop+0x1ff8e000> +10001c52: 4305 li t1,1 +10001c54: 060f9b63 bnez t6,10001cca <_ntoa_format+0xf6> +10001c58: 0042f793 andi a5,t0,4 +10001c5c: c3f5 beqz a5,10001d40 <_ntoa_format+0x16c> +10001c5e: 006708b3 add a7,a4,t1 +10001c62: 02b00e13 li t3,43 +10001c66: 00130793 addi a5,t1,1 +10001c6a: 01c88023 sb t3,0(a7) +10001c6e: a091 j 10001cb2 <_ntoa_format+0xde> +10001c70: 0102f793 andi a5,t0,16 +10001c74: cb8d beqz a5,10001ca6 <_ntoa_format+0xd2> +10001c76: 4002f793 andi a5,t0,1024 +10001c7a: e789 bnez a5,10001c84 <_ntoa_format+0xb0> +10001c7c: 0a6e0363 beq t3,t1,10001d22 <_ntoa_format+0x14e> +10001c80: 0a680163 beq a6,t1,10001d22 <_ntoa_format+0x14e> +10001c84: 47c1 li a5,16 +10001c86: 06f88863 beq a7,a5,10001cf6 <_ntoa_format+0x122> +10001c8a: 4789 li a5,2 +10001c8c: 08f88463 beq a7,a5,10001d14 <_ntoa_format+0x140> +10001c90: 02000793 li a5,32 +10001c94: 00f30d63 beq t1,a5,10001cae <_ntoa_format+0xda> +10001c98: 879a mv a5,t1 +10001c9a: 0305 addi t1,t1,1 +10001c9c: 97ba add a5,a5,a4 +10001c9e: 03000893 li a7,48 +10001ca2: 01178023 sb a7,0(a5) +10001ca6: 02000793 li a5,32 +10001caa: faf315e3 bne t1,a5,10001c54 <_ntoa_format+0x80> +10001cae: 02000793 li a5,32 +10001cb2: 8896 mv a7,t0 +10001cb4: b5a5 j 10001b1c <_out_rev> +10001cb6: 0012f393 andi t2,t0,1 +10001cba: 02038263 beqz t2,10001cde <_ntoa_format+0x10a> +10001cbe: 080f8d63 beqz t6,10001d58 <_ntoa_format+0x184> +10001cc2: 187d addi a6,a6,-1 +10001cc4: f3c7e7e3 bltu a5,t3,10001bf2 <_ntoa_format+0x1e> +10001cc8: b7a1 j 10001c10 <_ntoa_format+0x3c> +10001cca: 006708b3 add a7,a4,t1 +10001cce: 02d00e13 li t3,45 +10001cd2: 01c88023 sb t3,0(a7) +10001cd6: 00130793 addi a5,t1,1 +10001cda: 8896 mv a7,t0 +10001cdc: b581 j 10001b1c <_out_rev> +10001cde: f1c7eae3 bltu a5,t3,10001bf2 <_ntoa_format+0x1e> +10001ce2: b7b1 j 10001c2e <_ntoa_format+0x5a> +10001ce4: 0102f793 andi a5,t0,16 +10001ce8: d3f9 beqz a5,10001cae <_ntoa_format+0xda> +10001cea: 4002f793 andi a5,t0,1024 +10001cee: d7d9 beqz a5,10001c7c <_ntoa_format+0xa8> +10001cf0: 47c1 li a5,16 +10001cf2: faf89ee3 bne a7,a5,10001cae <_ntoa_format+0xda> +10001cf6: 0202f793 andi a5,t0,32 +10001cfa: cba5 beqz a5,10001d6a <_ntoa_format+0x196> +10001cfc: 02000793 li a5,32 +10001d00: faf307e3 beq t1,a5,10001cae <_ntoa_format+0xda> +10001d04: 006707b3 add a5,a4,t1 +10001d08: 05800893 li a7,88 +10001d0c: 01178023 sb a7,0(a5) +10001d10: 0305 addi t1,t1,1 +10001d12: bfbd j 10001c90 <_ntoa_format+0xbc> +10001d14: 02000793 li a5,32 +10001d18: f8f30be3 beq t1,a5,10001cae <_ntoa_format+0xda> +10001d1c: 879a mv a5,t1 +10001d1e: 0305 addi t1,t1,1 +10001d20: a811 j 10001d34 <_ntoa_format+0x160> +10001d22: fff30793 addi a5,t1,-1 +10001d26: cfb1 beqz a5,10001d82 <_ntoa_format+0x1ae> +10001d28: 4e41 li t3,16 +10001d2a: 0bc88363 beq a7,t3,10001dd0 <_ntoa_format+0x1fc> +10001d2e: 4e09 li t3,2 +10001d30: f7c896e3 bne a7,t3,10001c9c <_ntoa_format+0xc8> +10001d34: 97ba add a5,a5,a4 +10001d36: 06200893 li a7,98 +10001d3a: 01178023 sb a7,0(a5) +10001d3e: bf89 j 10001c90 <_ntoa_format+0xbc> +10001d40: 0082f893 andi a7,t0,8 +10001d44: 879a mv a5,t1 +10001d46: f60886e3 beqz a7,10001cb2 <_ntoa_format+0xde> +10001d4a: 933a add t1,t1,a4 +10001d4c: 02000893 li a7,32 +10001d50: 0785 addi a5,a5,1 +10001d52: 01130023 sb a7,0(t1) +10001d56: bfb1 j 10001cb2 <_ntoa_format+0xde> +10001d58: 00c2f793 andi a5,t0,12 +10001d5c: 00f037b3 snez a5,a5 +10001d60: 40f80833 sub a6,a6,a5 +10001d64: e9c367e3 bltu t1,t3,10001bf2 <_ntoa_format+0x1e> +10001d68: b565 j 10001c10 <_ntoa_format+0x3c> +10001d6a: 02000793 li a5,32 +10001d6e: f4f300e3 beq t1,a5,10001cae <_ntoa_format+0xda> +10001d72: 006707b3 add a5,a4,t1 +10001d76: 07800893 li a7,120 +10001d7a: 01178023 sb a7,0(a5) +10001d7e: 0305 addi t1,t1,1 +10001d80: bf01 j 10001c90 <_ntoa_format+0xbc> +10001d82: 47c1 li a5,16 +10001d84: ecf890e3 bne a7,a5,10001c44 <_ntoa_format+0x70> +10001d88: 0202f793 andi a5,t0,32 +10001d8c: cf9d beqz a5,10001dca <_ntoa_format+0x1f6> +10001d8e: 05800893 li a7,88 +10001d92: 03000793 li a5,48 +10001d96: 01170023 sb a7,0(a4) +10001d9a: 00f700a3 sb a5,1(a4) +10001d9e: 4309 li t1,2 +10001da0: ea0f8ce3 beqz t6,10001c58 <_ntoa_format+0x84> +10001da4: b71d j 10001cca <_ntoa_format+0xf6> +10001da6: 0202f793 andi a5,t0,32 +10001daa: c385 beqz a5,10001dca <_ntoa_format+0x1f6> +10001dac: 05800793 li a5,88 +10001db0: 03000893 li a7,48 +10001db4: 00f70023 sb a5,0(a4) +10001db8: 011700a3 sb a7,1(a4) +10001dbc: 4309 li t1,2 +10001dbe: e80f8de3 beqz t6,10001c58 <_ntoa_format+0x84> +10001dc2: b721 j 10001cca <_ntoa_format+0xf6> +10001dc4: 06200793 li a5,98 +10001dc8: b7e5 j 10001db0 <_ntoa_format+0x1dc> +10001dca: 07800793 li a5,120 +10001dce: b7cd j 10001db0 <_ntoa_format+0x1dc> +10001dd0: ffe30893 addi a7,t1,-2 +10001dd4: 0202fe13 andi t3,t0,32 +10001dd8: 98ba add a7,a7,a4 +10001dda: 000e0763 beqz t3,10001de8 <_ntoa_format+0x214> +10001dde: 05800e13 li t3,88 +10001de2: 01c88023 sb t3,0(a7) +10001de6: bd5d j 10001c9c <_ntoa_format+0xc8> +10001de8: 07800e13 li t3,120 +10001dec: 01c88023 sb t3,0(a7) +10001df0: b575 j 10001c9c <_ntoa_format+0xc8> + +10001df2 <_out_char>: +10001df2: e111 bnez a0,10001df6 <_out_char+0x4> +10001df4: 8082 ret +10001df6: 1dd0106f j 100037d2 <__wrap_putchar> + +10001dfa <_out_fct>: +10001dfa: c501 beqz a0,10001e02 <_out_fct+0x8> +10001dfc: 419c lw a5,0(a1) +10001dfe: 41cc lw a1,4(a1) +10001e00: 8782 jr a5 +10001e02: 8082 ret + +10001e04 <_ftoa>: +10001e04: 7131 addi sp,sp,-192 +10001e06: d94a sw s2,176(sp) +10001e08: d74e sw s3,172(sp) +10001e0a: d552 sw s4,168(sp) +10001e0c: d15a sw s6,160(sp) +10001e0e: 892a mv s2,a0 +10001e10: 89ae mv s3,a1 +10001e12: 8b32 mv s6,a2 +10001e14: 8a36 mv s4,a3 +10001e16: 853a mv a0,a4 +10001e18: 85be mv a1,a5 +10001e1a: 863a mv a2,a4 +10001e1c: 86be mv a3,a5 +10001e1e: dd22 sw s0,184(sp) +10001e20: db26 sw s1,180(sp) +10001e22: d356 sw s5,164(sp) +10001e24: cf5e sw s7,156(sp) +10001e26: df06 sw ra,188(sp) +10001e28: cd62 sw s8,152(sp) +10001e2a: cb66 sw s9,148(sp) +10001e2c: 4b8e lw s7,192(sp) +10001e2e: 84ba mv s1,a4 +10001e30: 843e mv s0,a5 +10001e32: c042 sw a6,0(sp) +10001e34: 8ac6 mv s5,a7 +10001e36: 10001097 auipc ra,0x10001 +10001e3a: 834080e7 jalr -1996(ra) # 2000266a <__unorddf2> +10001e3e: 4c051563 bnez a0,10002308 <_ftoa+0x504> +10001e42: 100047b7 lui a5,0x10004 +10001e46: 0007a603 lw a2,0(a5) # 10004000 <__bi_45.4+0x10> +10001e4a: 0047a683 lw a3,4(a5) +10001e4e: 8526 mv a0,s1 +10001e50: 85a2 mv a1,s0 +10001e52: c96a sw s10,144(sp) +10001e54: c76e sw s11,140(sp) +10001e56: 10000097 auipc ra,0x10000 +10001e5a: 948080e7 jalr -1720(ra) # 2000179e <__ledf2> +10001e5e: 24054763 bltz a0,100020ac <_ftoa+0x2a8> +10001e62: 100047b7 lui a5,0x10004 +10001e66: 0087a603 lw a2,8(a5) # 10004008 <__bi_45.4+0x18> +10001e6a: 00c7a683 lw a3,12(a5) +10001e6e: 8526 mv a0,s1 +10001e70: 85a2 mv a1,s0 +10001e72: 10000097 auipc ra,0x10000 +10001e76: 86e080e7 jalr -1938(ra) # 200016e0 <__gedf2> +10001e7a: 1ca04763 bgtz a0,10002048 <_ftoa+0x244> +10001e7e: 100047b7 lui a5,0x10004 +10001e82: c426 sw s1,8(sp) +10001e84: c622 sw s0,12(sp) +10001e86: 4522 lw a0,8(sp) +10001e88: 45b2 lw a1,12(sp) +10001e8a: 0107a603 lw a2,16(a5) # 10004010 <__bi_45.4+0x20> +10001e8e: 0147a683 lw a3,20(a5) +10001e92: 10000097 auipc ra,0x10000 +10001e96: 84e080e7 jalr -1970(ra) # 200016e0 <__gedf2> +10001e9a: 16a04d63 bgtz a0,10002014 <_ftoa+0x210> +10001e9e: 100047b7 lui a5,0x10004 +10001ea2: c826 sw s1,16(sp) +10001ea4: ca22 sw s0,20(sp) +10001ea6: 4542 lw a0,16(sp) +10001ea8: 45d2 lw a1,20(sp) +10001eaa: 0187a603 lw a2,24(a5) # 10004018 <__bi_45.4+0x28> +10001eae: 01c7a683 lw a3,28(a5) +10001eb2: 10000097 auipc ra,0x10000 +10001eb6: 8ec080e7 jalr -1812(ra) # 2000179e <__ledf2> +10001eba: 14054d63 bltz a0,10002014 <_ftoa+0x210> +10001ebe: cc26 sw s1,24(sp) +10001ec0: ce22 sw s0,28(sp) +10001ec2: 4562 lw a0,24(sp) +10001ec4: 45f2 lw a1,28(sp) +10001ec6: 4601 li a2,0 +10001ec8: 4681 li a3,0 +10001eca: 10000097 auipc ra,0x10000 +10001ece: 8d4080e7 jalr -1836(ra) # 2000179e <__ledf2> +10001ed2: 1a054e63 bltz a0,1000208e <_ftoa+0x28a> +10001ed6: dc02 sw zero,56(sp) +10001ed8: 400bf793 andi a5,s7,1024 +10001edc: e399 bnez a5,10001ee2 <_ftoa+0xde> +10001ede: 4799 li a5,6 +10001ee0: c03e sw a5,0(sp) +10001ee2: 4682 lw a3,0(sp) +10001ee4: 06010d13 addi s10,sp,96 +10001ee8: 87ea mv a5,s10 +10001eea: fe068893 addi a7,a3,-32 +10001eee: 4625 li a2,9 +10001ef0: 03000593 li a1,48 +10001ef4: 24d67863 bgeu a2,a3,10002144 <_ftoa+0x340> +10001ef8: 00b78023 sb a1,0(a5) +10001efc: 16fd addi a3,a3,-1 +10001efe: 0785 addi a5,a5,1 +10001f00: ff169ae3 bne a3,a7,10001ef4 <_ftoa+0xf0> +10001f04: 02000c93 li s9,32 +10001f08: d026 sw s1,32(sp) +10001f0a: d222 sw s0,36(sp) +10001f0c: 5502 lw a0,32(sp) +10001f0e: 5592 lw a1,36(sp) +10001f10: c046 sw a7,0(sp) +10001f12: 10000097 auipc ra,0x10000 +10001f16: 794080e7 jalr 1940(ra) # 200026a6 <__fixdfsi> +10001f1a: 4882 lw a7,0(sp) +10001f1c: 100046b7 lui a3,0x10004 +10001f20: fa068693 addi a3,a3,-96 # 10003fa0 +10001f24: 20d8e6b3 sh3add a3,a7,a3 +10001f28: 0046a803 lw a6,4(a3) +10001f2c: 429c lw a5,0(a3) +10001f2e: cc46 sw a7,24(sp) +10001f30: c242 sw a6,4(sp) +10001f32: c03e sw a5,0(sp) +10001f34: 8daa mv s11,a0 +10001f36: 10001097 auipc ra,0x10001 +10001f3a: 82e080e7 jalr -2002(ra) # 20002764 <__floatsidf> +10001f3e: d426 sw s1,40(sp) +10001f40: d622 sw s0,44(sp) +10001f42: 862a mv a2,a0 +10001f44: 86ae mv a3,a1 +10001f46: 5522 lw a0,40(sp) +10001f48: 55b2 lw a1,44(sp) +10001f4a: 10000097 auipc ra,0x10000 +10001f4e: e6a080e7 jalr -406(ra) # 20001db4 <__subdf3> +10001f52: 4602 lw a2,0(sp) +10001f54: 4692 lw a3,4(sp) +10001f56: 10000097 auipc ra,0x10000 +10001f5a: 908080e7 jalr -1784(ra) # 2000185e <__muldf3> +10001f5e: 8c2e mv s8,a1 +10001f60: c82a sw a0,16(sp) +10001f62: 10000097 auipc ra,0x10000 +10001f66: 7aa080e7 jalr 1962(ra) # 2000270c <__fixunsdfsi> +10001f6a: c42a sw a0,8(sp) +10001f6c: 10001097 auipc ra,0x10001 +10001f70: 86e080e7 jalr -1938(ra) # 200027da <__floatunsidf> +10001f74: 47c2 lw a5,16(sp) +10001f76: da62 sw s8,52(sp) +10001f78: 862a mv a2,a0 +10001f7a: d83e sw a5,48(sp) +10001f7c: 86ae mv a3,a1 +10001f7e: 5542 lw a0,48(sp) +10001f80: 55d2 lw a1,52(sp) +10001f82: 10004c37 lui s8,0x10004 +10001f86: 10000097 auipc ra,0x10000 +10001f8a: e2e080e7 jalr -466(ra) # 20001db4 <__subdf3> +10001f8e: 020c2603 lw a2,32(s8) # 10004020 <__bi_45.4+0x30> +10001f92: 024c2683 lw a3,36(s8) +10001f96: c82a sw a0,16(sp) +10001f98: d02e sw a1,32(sp) +10001f9a: 0ffff097 auipc ra,0xffff +10001f9e: 746080e7 jalr 1862(ra) # 200016e0 <__gedf2> +10001fa2: 4322 lw t1,8(sp) +10001fa4: 48e2 lw a7,24(sp) +10001fa6: 2aa05563 blez a0,10002250 <_ftoa+0x44c> +10001faa: 0305 addi t1,t1,1 +10001fac: 851a mv a0,t1 +10001fae: c846 sw a7,16(sp) +10001fb0: c41a sw t1,8(sp) +10001fb2: 10001097 auipc ra,0x10001 +10001fb6: 828080e7 jalr -2008(ra) # 200027da <__floatunsidf> +10001fba: 862a mv a2,a0 +10001fbc: 86ae mv a3,a1 +10001fbe: 4502 lw a0,0(sp) +10001fc0: 4592 lw a1,4(sp) +10001fc2: 0ffff097 auipc ra,0xffff +10001fc6: 7dc080e7 jalr 2012(ra) # 2000179e <__ledf2> +10001fca: 4322 lw t1,8(sp) +10001fcc: 48c2 lw a7,16(sp) +10001fce: 00a04463 bgtz a0,10001fd6 <_ftoa+0x1d2> +10001fd2: 0d85 addi s11,s11,1 +10001fd4: 4301 li t1,0 +10001fd6: 16088c63 beqz a7,1000214e <_ftoa+0x34a> +10001fda: ccccd537 lui a0,0xccccd +10001fde: ccd50513 addi a0,a0,-819 # cccccccd <__StackTop+0xacc4accd> +10001fe2: 02000e13 li t3,32 +10001fe6: 4ea5 li t4,9 +10001fe8: 2dcc8e63 beq s9,t3,100022c4 <_ftoa+0x4c0> +10001fec: 02a33733 mulhu a4,t1,a0 +10001ff0: 0c85 addi s9,s9,1 +10001ff2: 019d06b3 add a3,s10,s9 +10001ff6: 18fd addi a7,a7,-1 +10001ff8: 830d srli a4,a4,0x3 +10001ffa: 20e747b3 sh2add a5,a4,a4 +10001ffe: 0786 slli a5,a5,0x1 +10002000: 40f307b3 sub a5,t1,a5 +10002004: 03078793 addi a5,a5,48 +10002008: fef68fa3 sb a5,-1(a3) +1000200c: 286efc63 bgeu t4,t1,100022a4 <_ftoa+0x4a0> +10002010: 833a mv t1,a4 +10002012: bfd9 j 10001fe8 <_ftoa+0x1e4> +10002014: dc26 sw s1,56(sp) +10002016: de22 sw s0,60(sp) +10002018: 546a lw s0,184(sp) +1000201a: c1de sw s7,192(sp) +1000201c: 5762 lw a4,56(sp) +1000201e: 57f2 lw a5,60(sp) +10002020: 4802 lw a6,0(sp) +10002022: 4d4a lw s10,144(sp) +10002024: 4dba lw s11,140(sp) +10002026: 50fa lw ra,188(sp) +10002028: 54da lw s1,180(sp) +1000202a: 4bfa lw s7,156(sp) +1000202c: 4c6a lw s8,152(sp) +1000202e: 4cda lw s9,148(sp) +10002030: 88d6 mv a7,s5 +10002032: 86d2 mv a3,s4 +10002034: 5a9a lw s5,164(sp) +10002036: 5a2a lw s4,168(sp) +10002038: 865a mv a2,s6 +1000203a: 85ce mv a1,s3 +1000203c: 5b0a lw s6,160(sp) +1000203e: 59ba lw s3,172(sp) +10002040: 854a mv a0,s2 +10002042: 594a lw s2,176(sp) +10002044: 6129 addi sp,sp,192 +10002046: ae91 j 1000239a <_etoa> +10002048: 004bf793 andi a5,s7,4 +1000204c: eb9d bnez a5,10002082 <_ftoa+0x27e> +1000204e: 10004737 lui a4,0x10004 +10002052: d6870713 addi a4,a4,-664 # 10003d68 <__EH_FRAME_BEGIN__+0x12c> +10002056: 478d li a5,3 +10002058: 546a lw s0,184(sp) +1000205a: 4d4a lw s10,144(sp) +1000205c: 4dba lw s11,140(sp) +1000205e: 50fa lw ra,188(sp) +10002060: 54da lw s1,180(sp) +10002062: 4c6a lw s8,152(sp) +10002064: 4cda lw s9,148(sp) +10002066: 88de mv a7,s7 +10002068: 8856 mv a6,s5 +1000206a: 4bfa lw s7,156(sp) +1000206c: 5a9a lw s5,164(sp) +1000206e: 86d2 mv a3,s4 +10002070: 865a mv a2,s6 +10002072: 5a2a lw s4,168(sp) +10002074: 5b0a lw s6,160(sp) +10002076: 85ce mv a1,s3 +10002078: 854a mv a0,s2 +1000207a: 59ba lw s3,172(sp) +1000207c: 594a lw s2,176(sp) +1000207e: 6129 addi sp,sp,192 +10002080: bc71 j 10001b1c <_out_rev> +10002082: 10004737 lui a4,0x10004 +10002086: d6070713 addi a4,a4,-672 # 10003d60 <__EH_FRAME_BEGIN__+0x124> +1000208a: 4791 li a5,4 +1000208c: b7f1 j 10002058 <_ftoa+0x254> +1000208e: c8a6 sw s1,80(sp) +10002090: caa2 sw s0,84(sp) +10002092: 4646 lw a2,80(sp) +10002094: 46d6 lw a3,84(sp) +10002096: 4501 li a0,0 +10002098: 4581 li a1,0 +1000209a: 10000097 auipc ra,0x10000 +1000209e: d1a080e7 jalr -742(ra) # 20001db4 <__subdf3> +100020a2: 4785 li a5,1 +100020a4: 84aa mv s1,a0 +100020a6: 842e mv s0,a1 +100020a8: dc3e sw a5,56(sp) +100020aa: b53d j 10001ed8 <_ftoa+0xd4> +100020ac: 003bf793 andi a5,s7,3 +100020b0: 84da mv s1,s6 +100020b2: e395 bnez a5,100020d6 <_ftoa+0x2d2> +100020b4: 4791 li a5,4 +100020b6: 0357f063 bgeu a5,s5,100020d6 <_ftoa+0x2d2> +100020ba: ffcb0413 addi s0,s6,-4 +100020be: 015404b3 add s1,s0,s5 +100020c2: 845a mv s0,s6 +100020c4: 8622 mv a2,s0 +100020c6: 86d2 mv a3,s4 +100020c8: 0405 addi s0,s0,1 +100020ca: 85ce mv a1,s3 +100020cc: 02000513 li a0,32 +100020d0: 9902 jalr s2 +100020d2: fe9419e3 bne s0,s1,100020c4 <_ftoa+0x2c0> +100020d6: 10004437 lui s0,0x10004 +100020da: d7040c13 addi s8,s0,-656 # 10003d70 <__EH_FRAME_BEGIN__+0x134> +100020de: d7040413 addi s0,s0,-656 +100020e2: 1c71 addi s8,s8,-4 +100020e4: 00940cb3 add s9,s0,s1 +100020e8: 00344503 lbu a0,3(s0) +100020ec: 408c8633 sub a2,s9,s0 +100020f0: 86d2 mv a3,s4 +100020f2: 85ce mv a1,s3 +100020f4: 147d addi s0,s0,-1 +100020f6: 9902 jalr s2 +100020f8: ff8418e3 bne s0,s8,100020e8 <_ftoa+0x2e4> +100020fc: 002bfb93 andi s7,s7,2 +10002100: 0491 addi s1,s1,4 +10002102: 020b8163 beqz s7,10002124 <_ftoa+0x320> +10002106: 416487b3 sub a5,s1,s6 +1000210a: 0157fd63 bgeu a5,s5,10002124 <_ftoa+0x320> +1000210e: 8626 mv a2,s1 +10002110: 86d2 mv a3,s4 +10002112: 85ce mv a1,s3 +10002114: 02000513 li a0,32 +10002118: 0485 addi s1,s1,1 +1000211a: 9902 jalr s2 +1000211c: 416487b3 sub a5,s1,s6 +10002120: ff57e7e3 bltu a5,s5,1000210e <_ftoa+0x30a> +10002124: 4d4a lw s10,144(sp) +10002126: 4dba lw s11,140(sp) +10002128: 50fa lw ra,188(sp) +1000212a: 546a lw s0,184(sp) +1000212c: 594a lw s2,176(sp) +1000212e: 59ba lw s3,172(sp) +10002130: 5a2a lw s4,168(sp) +10002132: 5a9a lw s5,164(sp) +10002134: 5b0a lw s6,160(sp) +10002136: 4bfa lw s7,156(sp) +10002138: 4c6a lw s8,152(sp) +1000213a: 4cda lw s9,148(sp) +1000213c: 8526 mv a0,s1 +1000213e: 54da lw s1,180(sp) +10002140: 6129 addi sp,sp,192 +10002142: 8082 ret +10002144: 4782 lw a5,0(sp) +10002146: 88b6 mv a7,a3 +10002148: 40d78cb3 sub s9,a5,a3 +1000214c: bb75 j 10001f08 <_ftoa+0x104> +1000214e: 856e mv a0,s11 +10002150: 10000097 auipc ra,0x10000 +10002154: 614080e7 jalr 1556(ra) # 20002764 <__floatsidf> +10002158: c4a6 sw s1,72(sp) +1000215a: c6a2 sw s0,76(sp) +1000215c: 862a mv a2,a0 +1000215e: 86ae mv a3,a1 +10002160: 4526 lw a0,72(sp) +10002162: 45b6 lw a1,76(sp) +10002164: 10000097 auipc ra,0x10000 +10002168: c50080e7 jalr -944(ra) # 20001db4 <__subdf3> +1000216c: 020c2403 lw s0,32(s8) +10002170: 024c2483 lw s1,36(s8) +10002174: c02a sw a0,0(sp) +10002176: 8622 mv a2,s0 +10002178: 86a6 mv a3,s1 +1000217a: 8c2e mv s8,a1 +1000217c: 0ffff097 auipc ra,0xffff +10002180: 622080e7 jalr 1570(ra) # 2000179e <__ledf2> +10002184: 00054f63 bltz a0,100021a2 <_ftoa+0x39e> +10002188: 4782 lw a5,0(sp) +1000218a: cee2 sw s8,92(sp) +1000218c: 45f6 lw a1,92(sp) +1000218e: ccbe sw a5,88(sp) +10002190: 4566 lw a0,88(sp) +10002192: 8622 mv a2,s0 +10002194: 86a6 mv a3,s1 +10002196: 0ffff097 auipc ra,0xffff +1000219a: 54a080e7 jalr 1354(ra) # 200016e0 <__gedf2> +1000219e: 14a05a63 blez a0,100022f2 <_ftoa+0x4ee> +100021a2: 66666537 lui a0,0x66666 +100021a6: 66750513 addi a0,a0,1639 # 66666667 <__StackTop+0x465e4667> +100021aa: 02000893 li a7,32 +100021ae: a01d j 100021d4 <_ftoa+0x3d0> +100021b0: 02ad97b3 mulh a5,s11,a0 +100021b4: 0c85 addi s9,s9,1 +100021b6: 019d06b3 add a3,s10,s9 +100021ba: 8789 srai a5,a5,0x2 +100021bc: 8f99 sub a5,a5,a4 +100021be: 20f7c733 sh2add a4,a5,a5 +100021c2: 0706 slli a4,a4,0x1 +100021c4: 40ed8db3 sub s11,s11,a4 +100021c8: 030d8713 addi a4,s11,48 +100021cc: fee68fa3 sb a4,-1(a3) +100021d0: 8dbe mv s11,a5 +100021d2: cf9d beqz a5,10002210 <_ftoa+0x40c> +100021d4: 41fdd713 srai a4,s11,0x1f +100021d8: fd1c9ce3 bne s9,a7,100021b0 <_ftoa+0x3ac> +100021dc: 003bf693 andi a3,s7,3 +100021e0: 4605 li a2,1 +100021e2: 04c69963 bne a3,a2,10002234 <_ftoa+0x430> +100021e6: 040a8763 beqz s5,10002234 <_ftoa+0x430> +100021ea: 57e2 lw a5,56(sp) +100021ec: cfc1 beqz a5,10002284 <_ftoa+0x480> +100021ee: 1afd addi s5,s5,-1 +100021f0: 055cf263 bgeu s9,s5,10002234 <_ftoa+0x430> +100021f4: 02000613 li a2,32 +100021f8: 03000593 li a1,48 +100021fc: 02cc8c63 beq s9,a2,10002234 <_ftoa+0x430> +10002200: 0c85 addi s9,s9,1 +10002202: 019d07b3 add a5,s10,s9 +10002206: feb78fa3 sb a1,-1(a5) +1000220a: ff5ce9e3 bltu s9,s5,100021fc <_ftoa+0x3f8> +1000220e: a031 j 1000221a <_ftoa+0x416> +10002210: 003bf693 andi a3,s7,3 +10002214: 4605 li a2,1 +10002216: 16c68763 beq a3,a2,10002384 <_ftoa+0x580> +1000221a: 02000693 li a3,32 +1000221e: 00dc8b63 beq s9,a3,10002234 <_ftoa+0x430> +10002222: 57e2 lw a5,56(sp) +10002224: cbb5 beqz a5,10002298 <_ftoa+0x494> +10002226: 02d00613 li a2,45 +1000222a: 002c86b3 add a3,s9,sp +1000222e: 06c68023 sb a2,96(a3) +10002232: 0c85 addi s9,s9,1 +10002234: 876a mv a4,s10 +10002236: 88de mv a7,s7 +10002238: 8856 mv a6,s5 +1000223a: 87e6 mv a5,s9 +1000223c: 86d2 mv a3,s4 +1000223e: 865a mv a2,s6 +10002240: 85ce mv a1,s3 +10002242: 854a mv a0,s2 +10002244: 8d9ff0ef jal 10001b1c <_out_rev> +10002248: 84aa mv s1,a0 +1000224a: 4d4a lw s10,144(sp) +1000224c: 4dba lw s11,140(sp) +1000224e: bde9 j 10002128 <_ftoa+0x324> +10002250: 47c2 lw a5,16(sp) +10002252: c446 sw a7,8(sp) +10002254: c01a sw t1,0(sp) +10002256: c0be sw a5,64(sp) +10002258: 5782 lw a5,32(sp) +1000225a: 4506 lw a0,64(sp) +1000225c: c2be sw a5,68(sp) +1000225e: 100047b7 lui a5,0x10004 +10002262: 4596 lw a1,68(sp) +10002264: 0207a603 lw a2,32(a5) # 10004020 <__bi_45.4+0x30> +10002268: 0247a683 lw a3,36(a5) +1000226c: 0ffff097 auipc ra,0xffff +10002270: 532080e7 jalr 1330(ra) # 2000179e <__ledf2> +10002274: 4302 lw t1,0(sp) +10002276: 48a2 lw a7,8(sp) +10002278: d4054fe3 bltz a0,10001fd6 <_ftoa+0x1d2> +1000227c: 08031063 bnez t1,100022fc <_ftoa+0x4f8> +10002280: 0305 addi t1,t1,1 +10002282: bb91 j 10001fd6 <_ftoa+0x1d2> +10002284: 00cbf693 andi a3,s7,12 +10002288: cafd beqz a3,1000237e <_ftoa+0x57a> +1000228a: 1afd addi s5,s5,-1 +1000228c: f75ce4e3 bltu s9,s5,100021f4 <_ftoa+0x3f0> +10002290: 02000693 li a3,32 +10002294: fadc80e3 beq s9,a3,10002234 <_ftoa+0x430> +10002298: 004bf693 andi a3,s7,4 +1000229c: ce95 beqz a3,100022d8 <_ftoa+0x4d4> +1000229e: 02b00613 li a2,43 +100022a2: b761 j 1000222a <_ftoa+0x426> +100022a4: 03cc8063 beq s9,t3,100022c4 <_ftoa+0x4c0> +100022a8: 98e6 add a7,a7,s9 +100022aa: 03000593 li a1,48 +100022ae: 02000613 li a2,32 +100022b2: 01988c63 beq a7,s9,100022ca <_ftoa+0x4c6> +100022b6: 0c85 addi s9,s9,1 +100022b8: 019d07b3 add a5,s10,s9 +100022bc: feb78fa3 sb a1,-1(a5) +100022c0: fecc99e3 bne s9,a2,100022b2 <_ftoa+0x4ae> +100022c4: 02000c93 li s9,32 +100022c8: bde9 j 100021a2 <_ftoa+0x39e> +100022ca: 988a add a7,a7,sp +100022cc: 02e00693 li a3,46 +100022d0: 0c85 addi s9,s9,1 +100022d2: 06d88023 sb a3,96(a7) +100022d6: b5f1 j 100021a2 <_ftoa+0x39e> +100022d8: 008bf693 andi a3,s7,8 +100022dc: dea1 beqz a3,10002234 <_ftoa+0x430> +100022de: 02000613 li a2,32 +100022e2: 00cc87b3 add a5,s9,a2 +100022e6: 002786b3 add a3,a5,sp +100022ea: 04c68023 sb a2,64(a3) +100022ee: 0c85 addi s9,s9,1 +100022f0: b791 j 10002234 <_ftoa+0x430> +100022f2: 001d8813 addi a6,s11,1 +100022f6: ffe87d93 andi s11,a6,-2 +100022fa: b565 j 100021a2 <_ftoa+0x39e> +100022fc: 00137693 andi a3,t1,1 +10002300: cc068be3 beqz a3,10001fd6 <_ftoa+0x1d2> +10002304: 0305 addi t1,t1,1 +10002306: b9c1 j 10001fd6 <_ftoa+0x1d2> +10002308: 003bf793 andi a5,s7,3 +1000230c: 845a mv s0,s6 +1000230e: e38d bnez a5,10002330 <_ftoa+0x52c> +10002310: 478d li a5,3 +10002312: 0157ff63 bgeu a5,s5,10002330 <_ftoa+0x52c> +10002316: ffdb0413 addi s0,s6,-3 +1000231a: 9456 add s0,s0,s5 +1000231c: 84da mv s1,s6 +1000231e: 8626 mv a2,s1 +10002320: 86d2 mv a3,s4 +10002322: 0485 addi s1,s1,1 +10002324: 85ce mv a1,s3 +10002326: 02000513 li a0,32 +1000232a: 9902 jalr s2 +1000232c: fe9419e3 bne s0,s1,1000231e <_ftoa+0x51a> +10002330: 100044b7 lui s1,0x10004 +10002334: d6c48493 addi s1,s1,-660 # 10003d6c <__EH_FRAME_BEGIN__+0x130> +10002338: ffd48c93 addi s9,s1,-3 +1000233c: 8c22 mv s8,s0 +1000233e: 0024c503 lbu a0,2(s1) +10002342: 8662 mv a2,s8 +10002344: 86d2 mv a3,s4 +10002346: 85ce mv a1,s3 +10002348: 14fd addi s1,s1,-1 +1000234a: 0c05 addi s8,s8,1 +1000234c: 9902 jalr s2 +1000234e: ff9498e3 bne s1,s9,1000233e <_ftoa+0x53a> +10002352: 002bfb93 andi s7,s7,2 +10002356: 00340493 addi s1,s0,3 +1000235a: dc0b87e3 beqz s7,10002128 <_ftoa+0x324> +1000235e: 416487b3 sub a5,s1,s6 +10002362: dd57f3e3 bgeu a5,s5,10002128 <_ftoa+0x324> +10002366: 8626 mv a2,s1 +10002368: 86d2 mv a3,s4 +1000236a: 85ce mv a1,s3 +1000236c: 02000513 li a0,32 +10002370: 0485 addi s1,s1,1 +10002372: 9902 jalr s2 +10002374: 416487b3 sub a5,s1,s6 +10002378: ff57e7e3 bltu a5,s5,10002366 <_ftoa+0x562> +1000237c: b375 j 10002128 <_ftoa+0x324> +1000237e: e75cebe3 bltu s9,s5,100021f4 <_ftoa+0x3f0> +10002382: bd4d j 10002234 <_ftoa+0x430> +10002384: e80a8be3 beqz s5,1000221a <_ftoa+0x416> +10002388: 57e2 lw a5,56(sp) +1000238a: ee078de3 beqz a5,10002284 <_ftoa+0x480> +1000238e: 1afd addi s5,s5,-1 +10002390: e75ce2e3 bltu s9,s5,100021f4 <_ftoa+0x3f0> +10002394: e91c99e3 bne s9,a7,10002226 <_ftoa+0x422> +10002398: bd71 j 10002234 <_ftoa+0x430> + +1000239a <_etoa>: +1000239a: 710d addi sp,sp,-352 +1000239c: 15212823 sw s2,336(sp) +100023a0: 15312623 sw s3,332(sp) +100023a4: 15412423 sw s4,328(sp) +100023a8: 13b12623 sw s11,300(sp) +100023ac: 892a mv s2,a0 +100023ae: 89ae mv s3,a1 +100023b0: 8db2 mv s11,a2 +100023b2: 8a36 mv s4,a3 +100023b4: 853a mv a0,a4 +100023b6: 85be mv a1,a5 +100023b8: 863a mv a2,a4 +100023ba: 86be mv a3,a5 +100023bc: 14812c23 sw s0,344(sp) +100023c0: 14912a23 sw s1,340(sp) +100023c4: 15512223 sw s5,324(sp) +100023c8: 13a12823 sw s10,304(sp) +100023cc: 14112e23 sw ra,348(sp) +100023d0: 16012d03 lw s10,352(sp) +100023d4: 843a mv s0,a4 +100023d6: 84be mv s1,a5 +100023d8: c1c2 sw a6,192(sp) +100023da: 8ac6 mv s5,a7 +100023dc: 10000097 auipc ra,0x10000 +100023e0: 28e080e7 jalr 654(ra) # 2000266a <__unorddf2> +100023e4: 1c051763 bnez a0,100025b2 <_etoa+0x218> +100023e8: 100047b7 lui a5,0x10004 +100023ec: 0087a603 lw a2,8(a5) # 10004008 <__bi_45.4+0x18> +100023f0: 00c7a683 lw a3,12(a5) +100023f4: 8522 mv a0,s0 +100023f6: 85a6 mv a1,s1 +100023f8: 13812c23 sw s8,312(sp) +100023fc: 13912a23 sw s9,308(sp) +10002400: 0ffff097 auipc ra,0xffff +10002404: 2e0080e7 jalr 736(ra) # 200016e0 <__gedf2> +10002408: 1aa04163 bgtz a0,100025aa <_etoa+0x210> +1000240c: 100047b7 lui a5,0x10004 +10002410: 0007a603 lw a2,0(a5) # 10004000 <__bi_45.4+0x10> +10002414: 0047a683 lw a3,4(a5) +10002418: 8522 mv a0,s0 +1000241a: 85a6 mv a1,s1 +1000241c: 15612023 sw s6,320(sp) +10002420: 13712e23 sw s7,316(sp) +10002424: 0ffff097 auipc ra,0xffff +10002428: 37a080e7 jalr 890(ra) # 2000179e <__ledf2> +1000242c: 1c054463 bltz a0,100025f4 <_etoa+0x25a> +10002430: cc22 sw s0,24(sp) +10002432: ce26 sw s1,28(sp) +10002434: 4562 lw a0,24(sp) +10002436: 45f2 lw a1,28(sp) +10002438: 4601 li a2,0 +1000243a: 4681 li a3,0 +1000243c: 0ffff097 auipc ra,0xffff +10002440: 362080e7 jalr 866(ra) # 2000179e <__ledf2> +10002444: 69f49b13 binvi s6,s1,0x1f +10002448: 00054463 bltz a0,10002450 <_etoa+0xb6> +1000244c: cc22 sw s0,24(sp) +1000244e: 8b26 mv s6,s1 +10002450: 28b01793 bseti a5,zero,0xb +10002454: 00fd76b3 and a3,s10,a5 +10002458: 400d7713 andi a4,s10,1024 +1000245c: c3ba sw a4,196(sp) +1000245e: c836 sw a3,16(sp) +10002460: 016467b3 or a5,s0,s6 +10002464: 1a071163 bnez a4,10002606 <_etoa+0x26c> +10002468: 1e079c63 bnez a5,10002660 <_etoa+0x2c6> +1000246c: 58069263 bnez a3,100029f0 <_etoa+0x656> +10002470: 4799 li a5,6 +10002472: c1be sw a5,192(sp) +10002474: 002d7c93 andi s9,s10,2 +10002478: 560c9e63 bnez s9,100029f4 <_etoa+0x65a> +1000247c: 4c11 li s8,4 +1000247e: 0b8af7b3 maxu a5,s5,s8 +10002482: 17f1 addi a5,a5,-4 +10002484: c83e sw a5,16(sp) +10002486: 4b81 li s7,0 +10002488: d022 sw s0,32(sp) +1000248a: d226 sw s1,36(sp) +1000248c: 5502 lw a0,32(sp) +1000248e: 5592 lw a1,36(sp) +10002490: 4601 li a2,0 +10002492: 4681 li a3,0 +10002494: 0ffff097 auipc ra,0xffff +10002498: 30a080e7 jalr 778(ra) # 2000179e <__ledf2> +1000249c: 56054663 bltz a0,10002a08 <_etoa+0x66e> +100024a0: 47e2 lw a5,24(sp) +100024a2: df5a sw s6,188(sp) +100024a4: dd3e sw a5,184(sp) +100024a6: 576a lw a4,184(sp) +100024a8: 57fa lw a5,188(sp) +100024aa: 480e lw a6,192(sp) +100024ac: 48c2 lw a7,16(sp) +100024ae: fffd7693 andi a3,s10,-1 +100024b2: 48b69693 bclri a3,a3,0xb +100024b6: 485d5d13 bexti s10,s10,0x5 +100024ba: c036 sw a3,0(sp) +100024bc: 866e mv a2,s11 +100024be: 86d2 mv a3,s4 +100024c0: 85ce mv a1,s3 +100024c2: 854a mv a0,s2 +100024c4: 1d7d addi s10,s10,-1 +100024c6: 93fff0ef jal 10001e04 <_ftoa> +100024ca: 020d7d13 andi s10,s10,32 +100024ce: 862a mv a2,a0 +100024d0: 86d2 mv a3,s4 +100024d2: 045d0513 addi a0,s10,69 +100024d6: 85ce mv a1,s3 +100024d8: 00160413 addi s0,a2,1 +100024dc: 9902 jalr s2 +100024de: 417006b3 neg a3,s7 +100024e2: ccccd337 lui t1,0xccccd +100024e6: 1c7d addi s8,s8,-1 +100024e8: 0adbe6b3 max a3,s7,a3 +100024ec: 01fbd813 srli a6,s7,0x1f +100024f0: 0218 addi a4,sp,256 +100024f2: ccd30313 addi t1,t1,-819 # cccccccd <__StackTop+0xacc4accd> +100024f6: 4781 li a5,0 +100024f8: 4e25 li t3,9 +100024fa: 02000e93 li t4,32 +100024fe: a019 j 10002504 <_etoa+0x16a> +10002500: 03d78463 beq a5,t4,10002528 <_etoa+0x18e> +10002504: 0266b633 mulhu a2,a3,t1 +10002508: 0785 addi a5,a5,1 +1000250a: 8536 mv a0,a3 +1000250c: 00f708b3 add a7,a4,a5 +10002510: 820d srli a2,a2,0x3 +10002512: 20c645b3 sh2add a1,a2,a2 +10002516: 0586 slli a1,a1,0x1 +10002518: 8e8d sub a3,a3,a1 +1000251a: 03068693 addi a3,a3,48 +1000251e: fed88fa3 sb a3,-1(a7) +10002522: 86b2 mv a3,a2 +10002524: fcae6ee3 bltu t3,a0,10002500 <_etoa+0x166> +10002528: 4695 li a3,5 +1000252a: c436 sw a3,8(sp) +1000252c: c262 sw s8,4(sp) +1000252e: c002 sw zero,0(sp) +10002530: 8622 mv a2,s0 +10002532: 48a9 li a7,10 +10002534: 86d2 mv a3,s4 +10002536: 85ce mv a1,s3 +10002538: 854a mv a0,s2 +1000253a: e9aff0ef jal 10001bd4 <_ntoa_format> +1000253e: 020c8a63 beqz s9,10002572 <_etoa+0x1d8> +10002542: 41b50433 sub s0,a0,s11 +10002546: 03547663 bgeu s0,s5,10002572 <_etoa+0x1d8> +1000254a: 84aa mv s1,a0 +1000254c: 008d8633 add a2,s11,s0 +10002550: 86d2 mv a3,s4 +10002552: 85ce mv a1,s3 +10002554: 02000513 li a0,32 +10002558: 0405 addi s0,s0,1 +1000255a: 9902 jalr s2 +1000255c: ff5468e3 bltu s0,s5,1000254c <_etoa+0x1b2> +10002560: 41b48733 sub a4,s1,s11 +10002564: 0705 addi a4,a4,1 +10002566: 8526 mv a0,s1 +10002568: 4781 li a5,0 +1000256a: 48eafa63 bgeu s5,a4,100029fe <_etoa+0x664> +1000256e: 0505 addi a0,a0,1 +10002570: 953e add a0,a0,a5 +10002572: 15c12083 lw ra,348(sp) +10002576: 15812403 lw s0,344(sp) +1000257a: 14012b03 lw s6,320(sp) +1000257e: 13c12b83 lw s7,316(sp) +10002582: 13812c03 lw s8,312(sp) +10002586: 13412c83 lw s9,308(sp) +1000258a: 15412483 lw s1,340(sp) +1000258e: 15012903 lw s2,336(sp) +10002592: 14c12983 lw s3,332(sp) +10002596: 14812a03 lw s4,328(sp) +1000259a: 14412a83 lw s5,324(sp) +1000259e: 13012d03 lw s10,304(sp) +100025a2: 12c12d83 lw s11,300(sp) +100025a6: 6135 addi sp,sp,352 +100025a8: 8082 ret +100025aa: 13812c03 lw s8,312(sp) +100025ae: 13412c83 lw s9,308(sp) +100025b2: c822 sw s0,16(sp) +100025b4: ca26 sw s1,20(sp) +100025b6: 4742 lw a4,16(sp) +100025b8: 47d2 lw a5,20(sp) +100025ba: 480e lw a6,192(sp) +100025bc: 17a12023 sw s10,352(sp) +100025c0: 88d6 mv a7,s5 +100025c2: 86d2 mv a3,s4 +100025c4: 866e mv a2,s11 +100025c6: 85ce mv a1,s3 +100025c8: 854a mv a0,s2 +100025ca: 15812403 lw s0,344(sp) +100025ce: 15c12083 lw ra,348(sp) +100025d2: 15412483 lw s1,340(sp) +100025d6: 15012903 lw s2,336(sp) +100025da: 14c12983 lw s3,332(sp) +100025de: 14812a03 lw s4,328(sp) +100025e2: 14412a83 lw s5,324(sp) +100025e6: 13012d03 lw s10,304(sp) +100025ea: 12c12d83 lw s11,300(sp) +100025ee: 6135 addi sp,sp,352 +100025f0: 815ff06f j 10001e04 <_ftoa> +100025f4: 14012b03 lw s6,320(sp) +100025f8: 13c12b83 lw s7,316(sp) +100025fc: 13812c03 lw s8,312(sp) +10002600: 13412c83 lw s9,308(sp) +10002604: b77d j 100025b2 <_etoa+0x218> +10002606: efb9 bnez a5,10002664 <_etoa+0x2ca> +10002608: e60686e3 beqz a3,10002474 <_etoa+0xda> +1000260c: 4b81 li s7,0 +1000260e: 478e lw a5,192(sp) +10002610: 4c01 li s8,0 +10002612: 40fbc963 blt s7,a5,10002a24 <_etoa+0x68a> +10002616: c5a2 sw s0,200(sp) +10002618: c7a6 sw s1,204(sp) +1000261a: 452e lw a0,200(sp) +1000261c: 45be lw a1,204(sp) +1000261e: 4601 li a2,0 +10002620: 4681 li a3,0 +10002622: 0ffff097 auipc ra,0xffff +10002626: 17c080e7 jalr 380(ra) # 2000179e <__ledf2> +1000262a: 3a054c63 bltz a0,100029e2 <_etoa+0x648> +1000262e: d1a2 sw s0,224(sp) +10002630: d3da sw s6,228(sp) +10002632: 570e lw a4,224(sp) +10002634: 579e lw a5,228(sp) +10002636: 48bd1d13 bclri s10,s10,0xb +1000263a: 400d6d13 ori s10,s10,1024 +1000263e: 8862 mv a6,s8 +10002640: 14012b03 lw s6,320(sp) +10002644: 13c12b83 lw s7,316(sp) +10002648: 13812c03 lw s8,312(sp) +1000264c: 13412c83 lw s9,308(sp) +10002650: 17a12023 sw s10,352(sp) +10002654: 88d6 mv a7,s5 +10002656: 86d2 mv a3,s4 +10002658: 866e mv a2,s11 +1000265a: 85ce mv a1,s3 +1000265c: 854a mv a0,s2 +1000265e: b7b5 j 100025ca <_etoa+0x230> +10002660: 4799 li a5,6 +10002662: c1be sw a5,192(sp) +10002664: 014b5513 srli a0,s6,0x14 +10002668: 7ff57513 andi a0,a0,2047 +1000266c: c0150513 addi a0,a0,-1023 +10002670: 10000097 auipc ra,0x10000 +10002674: 0f4080e7 jalr 244(ra) # 20002764 <__floatsidf> +10002678: 100047b7 lui a5,0x10004 +1000267c: 0287a603 lw a2,40(a5) # 10004028 <__bi_45.4+0x38> +10002680: 02c7a683 lw a3,44(a5) +10002684: 0ffff097 auipc ra,0xffff +10002688: 1da080e7 jalr 474(ra) # 2000185e <__muldf3> +1000268c: 100047b7 lui a5,0x10004 +10002690: 0307a603 lw a2,48(a5) # 10004030 <__bi_45.4+0x40> +10002694: 0347a683 lw a3,52(a5) +10002698: 0fffe097 auipc ra,0xfffe +1000269c: 194080e7 jalr 404(ra) # 2000082c <__adddf3> +100026a0: 00cb1793 slli a5,s6,0xc +100026a4: 3ff00637 lui a2,0x3ff00 +100026a8: 83b1 srli a5,a5,0xc +100026aa: 8fd1 or a5,a5,a2 +100026ac: d63e sw a5,44(sp) +100026ae: d422 sw s0,40(sp) +100026b0: 100047b7 lui a5,0x10004 +100026b4: 0387a603 lw a2,56(a5) # 10004038 <__bi_45.4+0x48> +100026b8: 03c7a683 lw a3,60(a5) +100026bc: 8c2a mv s8,a0 +100026be: 8bae mv s7,a1 +100026c0: 5522 lw a0,40(sp) +100026c2: 55b2 lw a1,44(sp) +100026c4: 0ffff097 auipc ra,0xffff +100026c8: 6f0080e7 jalr 1776(ra) # 20001db4 <__subdf3> +100026cc: 100047b7 lui a5,0x10004 +100026d0: 0407a603 lw a2,64(a5) # 10004040 <__bi_45.4+0x50> +100026d4: 0447a683 lw a3,68(a5) +100026d8: 0ffff097 auipc ra,0xffff +100026dc: 186080e7 jalr 390(ra) # 2000185e <__muldf3> +100026e0: d862 sw s8,48(sp) +100026e2: da5e sw s7,52(sp) +100026e4: 862a mv a2,a0 +100026e6: 86ae mv a3,a1 +100026e8: 5542 lw a0,48(sp) +100026ea: 55d2 lw a1,52(sp) +100026ec: 0fffe097 auipc ra,0xfffe +100026f0: 140080e7 jalr 320(ra) # 2000082c <__adddf3> +100026f4: 10000097 auipc ra,0x10000 +100026f8: fb2080e7 jalr -78(ra) # 200026a6 <__fixdfsi> +100026fc: 8baa mv s7,a0 +100026fe: 10000097 auipc ra,0x10000 +10002702: 066080e7 jalr 102(ra) # 20002764 <__floatsidf> +10002706: 100047b7 lui a5,0x10004 +1000270a: 0487a603 lw a2,72(a5) # 10004048 <__bi_45.4+0x58> +1000270e: 04c7a683 lw a3,76(a5) +10002712: 8caa mv s9,a0 +10002714: 8c2e mv s8,a1 +10002716: 0ffff097 auipc ra,0xffff +1000271a: 148080e7 jalr 328(ra) # 2000185e <__muldf3> +1000271e: 100047b7 lui a5,0x10004 +10002722: 0207a603 lw a2,32(a5) # 10004020 <__bi_45.4+0x30> +10002726: 0247a683 lw a3,36(a5) +1000272a: 0fffe097 auipc ra,0xfffe +1000272e: 102080e7 jalr 258(ra) # 2000082c <__adddf3> +10002732: 10000097 auipc ra,0x10000 +10002736: f74080e7 jalr -140(ra) # 200026a6 <__fixdfsi> +1000273a: 10004737 lui a4,0x10004 +1000273e: dc66 sw s9,56(sp) +10002740: de62 sw s8,60(sp) +10002742: 05072603 lw a2,80(a4) # 10004050 <__bi_45.4+0x60> +10002746: 87aa mv a5,a0 +10002748: 55f2 lw a1,60(sp) +1000274a: 5562 lw a0,56(sp) +1000274c: 05472683 lw a3,84(a4) +10002750: 8c3e mv s8,a5 +10002752: 0ffff097 auipc ra,0xffff +10002756: 10c080e7 jalr 268(ra) # 2000185e <__muldf3> +1000275a: 8caa mv s9,a0 +1000275c: 8562 mv a0,s8 +1000275e: d462 sw s8,40(sp) +10002760: 8c2e mv s8,a1 +10002762: 10000097 auipc ra,0x10000 +10002766: 002080e7 jalr 2(ra) # 20002764 <__floatsidf> +1000276a: 100047b7 lui a5,0x10004 +1000276e: 0587a603 lw a2,88(a5) # 10004058 <__bi_45.4+0x68> +10002772: 05c7a683 lw a3,92(a5) +10002776: 0ffff097 auipc ra,0xffff +1000277a: 0e8080e7 jalr 232(ra) # 2000185e <__muldf3> +1000277e: c0e6 sw s9,64(sp) +10002780: c2e2 sw s8,68(sp) +10002782: 862a mv a2,a0 +10002784: 86ae mv a3,a1 +10002786: 4506 lw a0,64(sp) +10002788: 4596 lw a1,68(sp) +1000278a: 0ffff097 auipc ra,0xffff +1000278e: 62a080e7 jalr 1578(ra) # 20001db4 <__subdf3> +10002792: c4aa sw a0,72(sp) +10002794: c6ae sw a1,76(sp) +10002796: 4626 lw a2,72(sp) +10002798: 46b6 lw a3,76(sp) +1000279a: dc2a sw a0,56(sp) +1000279c: d82e sw a1,48(sp) +1000279e: 0ffff097 auipc ra,0xffff +100027a2: 0c0080e7 jalr 192(ra) # 2000185e <__muldf3> +100027a6: 57c2 lw a5,48(sp) +100027a8: 5762 lw a4,56(sp) +100027aa: 8caa mv s9,a0 +100027ac: cabe sw a5,84(sp) +100027ae: c8ba sw a4,80(sp) +100027b0: ccba sw a4,88(sp) +100027b2: cebe sw a5,92(sp) +100027b4: 8c2e mv s8,a1 +100027b6: 4646 lw a2,80(sp) +100027b8: 46d6 lw a3,84(sp) +100027ba: 4566 lw a0,88(sp) +100027bc: 45f6 lw a1,92(sp) +100027be: c0be sw a5,64(sp) +100027c0: 0fffe097 auipc ra,0xfffe +100027c4: 06c080e7 jalr 108(ra) # 2000082c <__adddf3> +100027c8: 100046b7 lui a3,0x10004 +100027cc: d0e6 sw s9,96(sp) +100027ce: d2e2 sw s8,100(sp) +100027d0: 88aa mv a7,a0 +100027d2: 882e mv a6,a1 +100027d4: 0606a603 lw a2,96(a3) # 10004060 <__bi_45.4+0x70> +100027d8: 5506 lw a0,96(sp) +100027da: 0646a683 lw a3,100(a3) +100027de: 5596 lw a1,100(sp) +100027e0: dc46 sw a7,56(sp) +100027e2: d842 sw a6,48(sp) +100027e4: 0ffff097 auipc ra,0xffff +100027e8: 90e080e7 jalr -1778(ra) # 200010f2 <__divdf3> +100027ec: 10004337 lui t1,0x10004 +100027f0: 06832603 lw a2,104(t1) # 10004068 <__bi_45.4+0x78> +100027f4: 06c32683 lw a3,108(t1) +100027f8: 0fffe097 auipc ra,0xfffe +100027fc: 034080e7 jalr 52(ra) # 2000082c <__adddf3> +10002800: d4e6 sw s9,104(sp) +10002802: d6e2 sw s8,108(sp) +10002804: 862a mv a2,a0 +10002806: 86ae mv a3,a1 +10002808: 5526 lw a0,104(sp) +1000280a: 55b6 lw a1,108(sp) +1000280c: 0ffff097 auipc ra,0xffff +10002810: 8e6080e7 jalr -1818(ra) # 200010f2 <__divdf3> +10002814: 100046b7 lui a3,0x10004 +10002818: 0706a603 lw a2,112(a3) # 10004070 <__bi_45.4+0x80> +1000281c: 0746a683 lw a3,116(a3) +10002820: 0fffe097 auipc ra,0xfffe +10002824: 00c080e7 jalr 12(ra) # 2000082c <__adddf3> +10002828: d8e6 sw s9,112(sp) +1000282a: dae2 sw s8,116(sp) +1000282c: 862a mv a2,a0 +1000282e: 86ae mv a3,a1 +10002830: 5546 lw a0,112(sp) +10002832: 55d6 lw a1,116(sp) +10002834: 0ffff097 auipc ra,0xffff +10002838: 8be080e7 jalr -1858(ra) # 200010f2 <__divdf3> +1000283c: 4726 lw a4,72(sp) +1000283e: 4786 lw a5,64(sp) +10002840: 8c2a mv s8,a0 +10002842: dcba sw a4,120(sp) +10002844: debe sw a5,124(sp) +10002846: 100047b7 lui a5,0x10004 +1000284a: 0787a503 lw a0,120(a5) # 10004078 <__bi_45.4+0x88> +1000284e: 5666 lw a2,120(sp) +10002850: 56f6 lw a3,124(sp) +10002852: 8cae mv s9,a1 +10002854: 07c7a583 lw a1,124(a5) +10002858: 0ffff097 auipc ra,0xffff +1000285c: 55c080e7 jalr 1372(ra) # 20001db4 <__subdf3> +10002860: c162 sw s8,128(sp) +10002862: c366 sw s9,132(sp) +10002864: 862a mv a2,a0 +10002866: 86ae mv a3,a1 +10002868: 450a lw a0,128(sp) +1000286a: 459a lw a1,132(sp) +1000286c: 0fffe097 auipc ra,0xfffe +10002870: fc0080e7 jalr -64(ra) # 2000082c <__adddf3> +10002874: 5842 lw a6,48(sp) +10002876: 58e2 lw a7,56(sp) +10002878: 862a mv a2,a0 +1000287a: c742 sw a6,140(sp) +1000287c: c546 sw a7,136(sp) +1000287e: 86ae mv a3,a1 +10002880: 452a lw a0,136(sp) +10002882: 45ba lw a1,140(sp) +10002884: 0ffff097 auipc ra,0xffff +10002888: 86e080e7 jalr -1938(ra) # 200010f2 <__divdf3> +1000288c: 100047b7 lui a5,0x10004 +10002890: 0807a603 lw a2,128(a5) # 10004080 <__bi_45.4+0x90> +10002894: 0847a683 lw a3,132(a5) +10002898: 0fffe097 auipc ra,0xfffe +1000289c: f94080e7 jalr -108(ra) # 2000082c <__adddf3> +100028a0: 57a2 lw a5,40(sp) +100028a2: 4701 li a4,0 +100028a4: c93a sw a4,144(sp) +100028a6: 3ff78793 addi a5,a5,1023 +100028aa: 07d2 slli a5,a5,0x14 +100028ac: cb3e sw a5,148(sp) +100028ae: 46da lw a3,148(sp) +100028b0: 464a lw a2,144(sp) +100028b2: 0ffff097 auipc ra,0xffff +100028b6: fac080e7 jalr -84(ra) # 2000185e <__muldf3> +100028ba: cd2a sw a0,152(sp) +100028bc: d82a sw a0,48(sp) +100028be: cf2e sw a1,156(sp) +100028c0: d42e sw a1,40(sp) +100028c2: d122 sw s0,160(sp) +100028c4: d35a sw s6,164(sp) +100028c6: 466a lw a2,152(sp) +100028c8: 46fa lw a3,156(sp) +100028ca: 550a lw a0,160(sp) +100028cc: 559a lw a1,164(sp) +100028ce: 0ffff097 auipc ra,0xffff +100028d2: ed0080e7 jalr -304(ra) # 2000179e <__ledf2> +100028d6: 57a2 lw a5,40(sp) +100028d8: 5742 lw a4,48(sp) +100028da: 10004337 lui t1,0x10004 +100028de: 02055163 bgez a0,10002900 <_etoa+0x566> +100028e2: c9ba sw a4,208(sp) +100028e4: cbbe sw a5,212(sp) +100028e6: 454e lw a0,208(sp) +100028e8: 45de lw a1,212(sp) +100028ea: 06832603 lw a2,104(t1) # 10004068 <__bi_45.4+0x78> +100028ee: 06c32683 lw a3,108(t1) +100028f2: 1bfd addi s7,s7,-1 +100028f4: 0fffe097 auipc ra,0xfffe +100028f8: 7fe080e7 jalr 2046(ra) # 200010f2 <__divdf3> +100028fc: 872a mv a4,a0 +100028fe: 87ae mv a5,a1 +10002900: 063b8693 addi a3,s7,99 +10002904: 0c600593 li a1,198 +10002908: 863a mv a2,a4 +1000290a: 853e mv a0,a5 +1000290c: 002d7c93 andi s9,s10,2 +10002910: 02d5ed63 bltu a1,a3,1000294a <_etoa+0x5b0> +10002914: 46c2 lw a3,16(sp) +10002916: 4c11 li s8,4 +10002918: e6a1 bnez a3,10002960 <_etoa+0x5c6> +1000291a: 015c7763 bgeu s8,s5,10002928 <_etoa+0x58e> +1000291e: 100c9763 bnez s9,10002a2c <_etoa+0x692> +10002922: ffca8693 addi a3,s5,-4 +10002926: c836 sw a3,16(sp) +10002928: b60b80e3 beqz s7,10002488 <_etoa+0xee> +1000292c: db5a sw s6,180(sp) +1000292e: d53a sw a4,168(sp) +10002930: d922 sw s0,176(sp) +10002932: d73e sw a5,172(sp) +10002934: 562a lw a2,168(sp) +10002936: 56ba lw a3,172(sp) +10002938: 554a lw a0,176(sp) +1000293a: 55da lw a1,180(sp) +1000293c: 0fffe097 auipc ra,0xfffe +10002940: 7b6080e7 jalr 1974(ra) # 200010f2 <__divdf3> +10002944: cc2a sw a0,24(sp) +10002946: 8b2e mv s6,a1 +10002948: b681 j 10002488 <_etoa+0xee> +1000294a: 46c2 lw a3,16(sp) +1000294c: 4c15 li s8,5 +1000294e: ea89 bnez a3,10002960 <_etoa+0x5c6> +10002950: fd5c7ee3 bgeu s8,s5,1000292c <_etoa+0x592> +10002954: 0e0c9063 bnez s9,10002a34 <_etoa+0x69a> +10002958: ffba8693 addi a3,s5,-5 +1000295c: c836 sw a3,16(sp) +1000295e: b7f9 j 1000292c <_etoa+0x592> +10002960: d43e sw a5,40(sp) +10002962: c83a sw a4,16(sp) +10002964: 8e49 or a2,a2,a0 +10002966: ca0604e3 beqz a2,1000260e <_etoa+0x274> +1000296a: cda2 sw s0,216(sp) +1000296c: cfda sw s6,220(sp) +1000296e: 100046b7 lui a3,0x10004 +10002972: 0886a603 lw a2,136(a3) # 10004088 <__bi_45.4+0x98> +10002976: 456e lw a0,216(sp) +10002978: 45fe lw a1,220(sp) +1000297a: 08c6a683 lw a3,140(a3) +1000297e: 0ffff097 auipc ra,0xffff +10002982: d62080e7 jalr -670(ra) # 200016e0 <__gedf2> +10002986: 4742 lw a4,16(sp) +10002988: 57a2 lw a5,40(sp) +1000298a: 02054463 bltz a0,100029b2 <_etoa+0x618> +1000298e: 100046b7 lui a3,0x10004 +10002992: d5a2 sw s0,232(sp) +10002994: d7da sw s6,236(sp) +10002996: 0906a603 lw a2,144(a3) # 10004090 <__bi_45.4+0xa0> +1000299a: 552e lw a0,232(sp) +1000299c: 55be lw a1,236(sp) +1000299e: 0946a683 lw a3,148(a3) +100029a2: 0ffff097 auipc ra,0xffff +100029a6: dfc080e7 jalr -516(ra) # 2000179e <__ledf2> +100029aa: c60542e3 bltz a0,1000260e <_etoa+0x274> +100029ae: 4742 lw a4,16(sp) +100029b0: 57a2 lw a5,40(sp) +100029b2: 468e lw a3,192(sp) +100029b4: ce91 beqz a3,100029d0 <_etoa+0x636> +100029b6: 461e lw a2,196(sp) +100029b8: ce01 beqz a2,100029d0 <_etoa+0x636> +100029ba: 16fd addi a3,a3,-1 +100029bc: c1b6 sw a3,192(sp) +100029be: 015c7563 bgeu s8,s5,100029c8 <_etoa+0x62e> +100029c2: 040c8b63 beqz s9,10002a18 <_etoa+0x67e> +100029c6: 4c89 li s9,2 +100029c8: c802 sw zero,16(sp) +100029ca: f60b91e3 bnez s7,1000292c <_etoa+0x592> +100029ce: bc6d j 10002488 <_etoa+0xee> +100029d0: ff5c7ce3 bgeu s8,s5,100029c8 <_etoa+0x62e> +100029d4: 040c8263 beqz s9,10002a18 <_etoa+0x67e> +100029d8: c802 sw zero,16(sp) +100029da: 4c89 li s9,2 +100029dc: f40b98e3 bnez s7,1000292c <_etoa+0x592> +100029e0: b465 j 10002488 <_etoa+0xee> +100029e2: 69fb1b13 binvi s6,s6,0x1f +100029e6: d9a2 sw s0,240(sp) +100029e8: dbda sw s6,244(sp) +100029ea: 574e lw a4,240(sp) +100029ec: 57de lw a5,244(sp) +100029ee: b1a1 j 10002636 <_etoa+0x29c> +100029f0: 4c15 li s8,5 +100029f2: b115 j 10002616 <_etoa+0x27c> +100029f4: c802 sw zero,16(sp) +100029f6: 4b81 li s7,0 +100029f8: 4c89 li s9,2 +100029fa: 4c11 li s8,4 +100029fc: b471 j 10002488 <_etoa+0xee> +100029fe: fffd8793 addi a5,s11,-1 +10002a02: 97d6 add a5,a5,s5 +10002a04: 8f85 sub a5,a5,s1 +10002a06: b6a5 j 1000256e <_etoa+0x1d4> +10002a08: 47e2 lw a5,24(sp) +10002a0a: 69fb1b13 binvi s6,s6,0x1f +10002a0e: dfda sw s6,252(sp) +10002a10: ddbe sw a5,248(sp) +10002a12: 576e lw a4,248(sp) +10002a14: 57fe lw a5,252(sp) +10002a16: bc51 j 100024aa <_etoa+0x110> +10002a18: 418a86b3 sub a3,s5,s8 +10002a1c: c836 sw a3,16(sp) +10002a1e: f00b97e3 bnez s7,1000292c <_etoa+0x592> +10002a22: b49d j 10002488 <_etoa+0xee> +10002a24: 41778c33 sub s8,a5,s7 +10002a28: 1c7d addi s8,s8,-1 +10002a2a: b6f5 j 10002616 <_etoa+0x27c> +10002a2c: 4c89 li s9,2 +10002a2e: ee0b9fe3 bnez s7,1000292c <_etoa+0x592> +10002a32: bc99 j 10002488 <_etoa+0xee> +10002a34: 4c89 li s9,2 +10002a36: bddd j 1000292c <_etoa+0x592> + +10002a38 <_vsnprintf>: +10002a38: 100037b7 lui a5,0x10003 +10002a3c: 7135 addi sp,sp,-160 +10002a3e: a3878793 addi a5,a5,-1480 # 10002a38 <_vsnprintf> +10002a42: cd22 sw s0,152(sp) +10002a44: c552 sw s4,136(sp) +10002a46: dae6 sw s9,116(sp) +10002a48: d8ea sw s10,112(sp) +10002a4a: d6ee sw s11,108(sp) +10002a4c: cf06 sw ra,156(sp) +10002a4e: cb26 sw s1,148(sp) +10002a50: 80f1a823 sw a5,-2032(gp) # 20002e64 +10002a54: 8cae mv s9,a1 +10002a56: 8a32 mv s4,a2 +10002a58: 8436 mv s0,a3 +10002a5a: 8d3a mv s10,a4 +10002a5c: 8daa mv s11,a0 +10002a5e: 3a058163 beqz a1,10002e00 <_vsnprintf+0x3c8> +10002a62: 00044503 lbu a0,0(s0) +10002a66: 4481 li s1,0 +10002a68: 3a050563 beqz a0,10002e12 <_vsnprintf+0x3da> +10002a6c: c74e sw s3,140(sp) +10002a6e: c356 sw s5,132(sp) +10002a70: c15a sw s6,128(sp) +10002a72: dede sw s7,124(sp) +10002a74: 49c1 li s3,16 +10002a76: 02500b93 li s7,37 +10002a7a: 10004ab7 lui s5,0x10004 +10002a7e: 4b25 li s6,9 +10002a80: a811 j 10002a94 <_vsnprintf+0x5c> +10002a82: 8626 mv a2,s1 +10002a84: 86d2 mv a3,s4 +10002a86: 85e6 mv a1,s9 +10002a88: 0485 addi s1,s1,1 +10002a8a: 9d82 jalr s11 +10002a8c: 00044503 lbu a0,0(s0) +10002a90: 12050063 beqz a0,10002bb0 <_vsnprintf+0x178> +10002a94: 0405 addi s0,s0,1 +10002a96: ff7516e3 bne a0,s7,10002a82 <_vsnprintf+0x4a> +10002a9a: 4681 li a3,0 +10002a9c: 00044503 lbu a0,0(s0) +10002aa0: 00140713 addi a4,s0,1 +10002aa4: fe050793 addi a5,a0,-32 +10002aa8: 0ff7f793 zext.b a5,a5 +10002aac: 00f9e863 bltu s3,a5,10002abc <_vsnprintf+0x84> +10002ab0: e04a8613 addi a2,s5,-508 # 10003e04 <__bi_26+0xc> +10002ab4: 20c7c7b3 sh2add a5,a5,a2 +10002ab8: 439c lw a5,0(a5) +10002aba: 8782 jr a5 +10002abc: fd050793 addi a5,a0,-48 +10002ac0: 0ff7f793 zext.b a5,a5 +10002ac4: 08fb7d63 bgeu s6,a5,10002b5e <_vsnprintf+0x126> +10002ac8: 02a00793 li a5,42 +10002acc: 4881 li a7,0 +10002ace: 1af50363 beq a0,a5,10002c74 <_vsnprintf+0x23c> +10002ad2: 02e00793 li a5,46 +10002ad6: 4801 li a6,0 +10002ad8: 0af50963 beq a0,a5,10002b8a <_vsnprintf+0x152> +10002adc: f9850793 addi a5,a0,-104 +10002ae0: 0ff7f793 zext.b a5,a5 +10002ae4: 4649 li a2,18 +10002ae6: 04f66363 bltu a2,a5,10002b2c <_vsnprintf+0xf4> +10002aea: 10004637 lui a2,0x10004 +10002aee: e4860613 addi a2,a2,-440 # 10003e48 <__bi_26+0x50> +10002af2: 20c7c7b3 sh2add a5,a5,a2 +10002af6: 439c lw a5,0(a5) +10002af8: 8782 jr a5 +10002afa: 0016e693 ori a3,a3,1 +10002afe: 843a mv s0,a4 +10002b00: bf71 j 10002a9c <_vsnprintf+0x64> +10002b02: 0026e693 ori a3,a3,2 +10002b06: 843a mv s0,a4 +10002b08: bf51 j 10002a9c <_vsnprintf+0x64> +10002b0a: 0046e693 ori a3,a3,4 +10002b0e: 843a mv s0,a4 +10002b10: b771 j 10002a9c <_vsnprintf+0x64> +10002b12: 0106e693 ori a3,a3,16 +10002b16: 843a mv s0,a4 +10002b18: b751 j 10002a9c <_vsnprintf+0x64> +10002b1a: 0086e693 ori a3,a3,8 +10002b1e: 843a mv s0,a4 +10002b20: bfb5 j 10002a9c <_vsnprintf+0x64> +10002b22: 00144503 lbu a0,1(s0) +10002b26: 1006e693 ori a3,a3,256 +10002b2a: 0705 addi a4,a4,1 +10002b2c: 06700793 li a5,103 +10002b30: 843a mv s0,a4 +10002b32: 0aa7e763 bltu a5,a0,10002be0 <_vsnprintf+0x1a8> +10002b36: 02400793 li a5,36 +10002b3a: f4a7f4e3 bgeu a5,a0,10002a82 <_vsnprintf+0x4a> +10002b3e: fdb50793 addi a5,a0,-37 +10002b42: 0ff7f793 zext.b a5,a5 +10002b46: 04200713 li a4,66 +10002b4a: f2f76ce3 bltu a4,a5,10002a82 <_vsnprintf+0x4a> +10002b4e: 10004737 lui a4,0x10004 +10002b52: e9470713 addi a4,a4,-364 # 10003e94 <__bi_26+0x9c> +10002b56: 20e7c7b3 sh2add a5,a5,a4 +10002b5a: 439c lw a5,0(a5) +10002b5c: 8782 jr a5 +10002b5e: 4881 li a7,0 +10002b60: 2118c8b3 sh2add a7,a7,a7 +10002b64: 20a8a8b3 sh1add a7,a7,a0 +10002b68: 00074503 lbu a0,0(a4) +10002b6c: 843a mv s0,a4 +10002b6e: fd088893 addi a7,a7,-48 +10002b72: fd050793 addi a5,a0,-48 +10002b76: 0ff7f793 zext.b a5,a5 +10002b7a: 0705 addi a4,a4,1 +10002b7c: fefb72e3 bgeu s6,a5,10002b60 <_vsnprintf+0x128> +10002b80: 02e00793 li a5,46 +10002b84: 4801 li a6,0 +10002b86: f4f51be3 bne a0,a5,10002adc <_vsnprintf+0xa4> +10002b8a: 00144503 lbu a0,1(s0) +10002b8e: 47a5 li a5,9 +10002b90: 4006e693 ori a3,a3,1024 +10002b94: fd050593 addi a1,a0,-48 +10002b98: 0ff5f593 zext.b a1,a1 +10002b9c: 863a mv a2,a4 +10002b9e: 28b7fe63 bgeu a5,a1,10002e3a <_vsnprintf+0x402> +10002ba2: 02a00793 li a5,42 +10002ba6: 2af50e63 beq a0,a5,10002e62 <_vsnprintf+0x42a> +10002baa: 843a mv s0,a4 +10002bac: 0705 addi a4,a4,1 +10002bae: b73d j 10002adc <_vsnprintf+0xa4> +10002bb0: 49ba lw s3,140(sp) +10002bb2: 4a9a lw s5,132(sp) +10002bb4: 4b0a lw s6,128(sp) +10002bb6: 5bf6 lw s7,124(sp) +10002bb8: 8426 mv s0,s1 +10002bba: 0144e463 bltu s1,s4,10002bc2 <_vsnprintf+0x18a> +10002bbe: fffa0493 addi s1,s4,-1 +10002bc2: 86d2 mv a3,s4 +10002bc4: 8626 mv a2,s1 +10002bc6: 85e6 mv a1,s9 +10002bc8: 4501 li a0,0 +10002bca: 9d82 jalr s11 +10002bcc: 40fa lw ra,156(sp) +10002bce: 8522 mv a0,s0 +10002bd0: 446a lw s0,152(sp) +10002bd2: 44da lw s1,148(sp) +10002bd4: 4a2a lw s4,136(sp) +10002bd6: 5cd6 lw s9,116(sp) +10002bd8: 5d46 lw s10,112(sp) +10002bda: 5db6 lw s11,108(sp) +10002bdc: 610d addi sp,sp,160 +10002bde: 8082 ret +10002be0: f9750713 addi a4,a0,-105 +10002be4: 0ff77713 zext.b a4,a4 +10002be8: 47bd li a5,15 +10002bea: e8e7ece3 bltu a5,a4,10002a82 <_vsnprintf+0x4a> +10002bee: 6625 lui a2,0x9 +10002bf0: 04160613 addi a2,a2,65 # 9041 +10002bf4: 28e017b3 bset a5,zero,a4 +10002bf8: 8ff1 and a5,a5,a2 +10002bfa: 22079063 bnez a5,10002e1a <_vsnprintf+0x3e2> +10002bfe: 4629 li a2,10 +10002c00: 08c70463 beq a4,a2,10002c88 <_vsnprintf+0x250> +10002c04: 461d li a2,7 +10002c06: e6c71ee3 bne a4,a2,10002a82 <_vsnprintf+0x4a> +10002c0a: 000d2703 lw a4,0(s10) +10002c0e: 0d11 addi s10,s10,4 +10002c10: 26071463 bnez a4,10002e78 <_vsnprintf+0x440> +10002c14: fef6f593 andi a1,a3,-17 +10002c18: 4006f693 andi a3,a3,1024 +10002c1c: 0215e593 ori a1,a1,33 +10002c20: 0098 addi a4,sp,64 +10002c22: ea9d bnez a3,10002c58 <_vsnprintf+0x220> +10002c24: 0098 addi a4,sp,64 +10002c26: 4325 li t1,9 +10002c28: 48bd li a7,15 +10002c2a: 02000e13 li t3,32 +10002c2e: a021 j 10002c36 <_vsnprintf+0x1fe> +10002c30: 03c78463 beq a5,t3,10002c58 <_vsnprintf+0x220> +10002c34: 86b2 mv a3,a2 +10002c36: 00f6fe93 andi t4,a3,15 +10002c3a: 037e8513 addi a0,t4,55 +10002c3e: 01d36463 bltu t1,t4,10002c46 <_vsnprintf+0x20e> +10002c42: 030e8513 addi a0,t4,48 +10002c46: 0785 addi a5,a5,1 +10002c48: 00f70633 add a2,a4,a5 +10002c4c: fea60fa3 sb a0,-1(a2) +10002c50: 0046d613 srli a2,a3,0x4 +10002c54: fcd8eee3 bltu a7,a3,10002c30 <_vsnprintf+0x1f8> +10002c58: 46a1 li a3,8 +10002c5a: c042 sw a6,0(sp) +10002c5c: c42e sw a1,8(sp) +10002c5e: 8626 mv a2,s1 +10002c60: c236 sw a3,4(sp) +10002c62: 48c1 li a7,16 +10002c64: 4801 li a6,0 +10002c66: 86d2 mv a3,s4 +10002c68: 85e6 mv a1,s9 +10002c6a: 856e mv a0,s11 +10002c6c: f69fe0ef jal 10001bd4 <_ntoa_format> +10002c70: 84aa mv s1,a0 +10002c72: bd29 j 10002a8c <_vsnprintf+0x54> +10002c74: 000d2883 lw a7,0(s10) +10002c78: 0d11 addi s10,s10,4 +10002c7a: 0808c263 bltz a7,10002cfe <_vsnprintf+0x2c6> +10002c7e: 00144503 lbu a0,1(s0) +10002c82: 843a mv s0,a4 +10002c84: 0705 addi a4,a4,1 +10002c86: b5b1 j 10002ad2 <_vsnprintf+0x9a> +10002c88: 004d0793 addi a5,s10,4 +10002c8c: c94a sw s2,144(sp) +10002c8e: dce2 sw s8,120(sp) +10002c90: ce3e sw a5,28(sp) +10002c92: 000d2903 lw s2,0(s10) +10002c96: 567d li a2,-1 +10002c98: 00080363 beqz a6,10002c9e <_vsnprintf+0x266> +10002c9c: 8642 mv a2,a6 +10002c9e: 00094503 lbu a0,0(s2) +10002ca2: 964a add a2,a2,s2 +10002ca4: 87ca mv a5,s2 +10002ca6: 50050763 beqz a0,100031b4 <_vsnprintf+0x77c> +10002caa: 26f60163 beq a2,a5,10002f0c <_vsnprintf+0x4d4> +10002cae: 0017c703 lbu a4,1(a5) +10002cb2: 0785 addi a5,a5,1 +10002cb4: fb7d bnez a4,10002caa <_vsnprintf+0x272> +10002cb6: 41278733 sub a4,a5,s2 +10002cba: 4006f793 andi a5,a3,1024 +10002cbe: 8a89 andi a3,a3,2 +10002cc0: 24078d63 beqz a5,10002f1a <_vsnprintf+0x4e2> +10002cc4: 0b075733 minu a4,a4,a6 +10002cc8: 5e068963 beqz a3,100032ba <_vsnprintf+0x882> +10002ccc: 4689 li a3,2 +10002cce: 00980c33 add s8,a6,s1 +10002cd2: d046 sw a7,32(sp) +10002cd4: 87a6 mv a5,s1 +10002cd6: 8d36 mv s10,a3 +10002cd8: d23a sw a4,36(sp) +10002cda: d422 sw s0,40(sp) +10002cdc: 28fc0d63 beq s8,a5,10002f76 <_vsnprintf+0x53e> +10002ce0: 86d2 mv a3,s4 +10002ce2: 863e mv a2,a5 +10002ce4: 85e6 mv a1,s9 +10002ce6: 00178413 addi s0,a5,1 +10002cea: 9d82 jalr s11 +10002cec: 40940733 sub a4,s0,s1 +10002cf0: 974a add a4,a4,s2 +10002cf2: 00074503 lbu a0,0(a4) +10002cf6: 28050663 beqz a0,10002f82 <_vsnprintf+0x54a> +10002cfa: 87a2 mv a5,s0 +10002cfc: b7c5 j 10002cdc <_vsnprintf+0x2a4> +10002cfe: 00144503 lbu a0,1(s0) +10002d02: 0026e693 ori a3,a3,2 +10002d06: 843a mv s0,a4 +10002d08: 411008b3 neg a7,a7 +10002d0c: 0705 addi a4,a4,1 +10002d0e: b3d1 j 10002ad2 <_vsnprintf+0x9a> +10002d10: 00144503 lbu a0,1(s0) +10002d14: 06c00793 li a5,108 +10002d18: e0f517e3 bne a0,a5,10002b26 <_vsnprintf+0xee> +10002d1c: 00244503 lbu a0,2(s0) +10002d20: 3006e693 ori a3,a3,768 +10002d24: 00340713 addi a4,s0,3 +10002d28: b511 j 10002b2c <_vsnprintf+0xf4> +10002d2a: 00144503 lbu a0,1(s0) +10002d2e: 2006e693 ori a3,a3,512 +10002d32: 0705 addi a4,a4,1 +10002d34: bbe5 j 10002b2c <_vsnprintf+0xf4> +10002d36: 00144503 lbu a0,1(s0) +10002d3a: 06800793 li a5,104 +10002d3e: 20f50e63 beq a0,a5,10002f5a <_vsnprintf+0x522> +10002d42: 0806e693 ori a3,a3,128 +10002d46: 0705 addi a4,a4,1 +10002d48: b3d5 j 10002b2c <_vsnprintf+0xf4> +10002d4a: 06700793 li a5,103 +10002d4e: 12f50963 beq a0,a5,10002e80 <_vsnprintf+0x448> +10002d52: 04700793 li a5,71 +10002d56: 1af50663 beq a0,a5,10002f02 <_vsnprintf+0x4ca> +10002d5a: 04500793 li a5,69 +10002d5e: 1af50463 beq a0,a5,10002f06 <_vsnprintf+0x4ce> +10002d62: 0d1d addi s10,s10,7 +10002d64: ff8d7d13 andi s10,s10,-8 +10002d68: 000d2703 lw a4,0(s10) +10002d6c: 004d2783 lw a5,4(s10) +10002d70: 8626 mv a2,s1 +10002d72: c036 sw a3,0(sp) +10002d74: 85e6 mv a1,s9 +10002d76: 86d2 mv a3,s4 +10002d78: 856e mv a0,s11 +10002d7a: e20ff0ef jal 1000239a <_etoa> +10002d7e: 0d21 addi s10,s10,8 +10002d80: 84aa mv s1,a0 +10002d82: b329 j 10002a8c <_vsnprintf+0x54> +10002d84: 04600793 li a5,70 +10002d88: 0ef50f63 beq a0,a5,10002e86 <_vsnprintf+0x44e> +10002d8c: 0d1d addi s10,s10,7 +10002d8e: ff8d7d13 andi s10,s10,-8 +10002d92: 000d2703 lw a4,0(s10) +10002d96: 004d2783 lw a5,4(s10) +10002d9a: 8626 mv a2,s1 +10002d9c: c036 sw a3,0(sp) +10002d9e: 85e6 mv a1,s9 +10002da0: 86d2 mv a3,s4 +10002da2: 856e mv a0,s11 +10002da4: 860ff0ef jal 10001e04 <_ftoa> +10002da8: 0d21 addi s10,s10,8 +10002daa: 84aa mv s1,a0 +10002dac: b1c5 j 10002a8c <_vsnprintf+0x54> +10002dae: 8626 mv a2,s1 +10002db0: 86d2 mv a3,s4 +10002db2: 85e6 mv a1,s9 +10002db4: 02500513 li a0,37 +10002db8: 0485 addi s1,s1,1 +10002dba: 9d82 jalr s11 +10002dbc: b9c1 j 10002a8c <_vsnprintf+0x54> +10002dbe: 004d0793 addi a5,s10,4 +10002dc2: c94a sw s2,144(sp) +10002dc4: 8a89 andi a3,a3,2 +10002dc6: ce3e sw a5,28(sp) +10002dc8: 00148913 addi s2,s1,1 +10002dcc: 1c068263 beqz a3,10002f90 <_vsnprintf+0x558> +10002dd0: 000d4503 lbu a0,0(s10) +10002dd4: d046 sw a7,32(sp) +10002dd6: 8626 mv a2,s1 +10002dd8: 86d2 mv a3,s4 +10002dda: 85e6 mv a1,s9 +10002ddc: 9d82 jalr s11 +10002dde: 5882 lw a7,32(sp) +10002de0: 4785 li a5,1 +10002de2: 94c6 add s1,s1,a7 +10002de4: 3f17f963 bgeu a5,a7,100031d6 <_vsnprintf+0x79e> +10002de8: 864a mv a2,s2 +10002dea: 86d2 mv a3,s4 +10002dec: 0905 addi s2,s2,1 +10002dee: 85e6 mv a1,s9 +10002df0: 02000513 li a0,32 +10002df4: 9d82 jalr s11 +10002df6: fe9919e3 bne s2,s1,10002de8 <_vsnprintf+0x3b0> +10002dfa: 4d72 lw s10,28(sp) +10002dfc: 494a lw s2,144(sp) +10002dfe: b179 j 10002a8c <_vsnprintf+0x54> +10002e00: 00044503 lbu a0,0(s0) +10002e04: 10002337 lui t1,0x10002 +10002e08: b1a30d93 addi s11,t1,-1254 # 10001b1a <_out_null> +10002e0c: 4481 li s1,0 +10002e0e: c4051fe3 bnez a0,10002a6c <_vsnprintf+0x34> +10002e12: 4401 li s0,0 +10002e14: db44e7e3 bltu s1,s4,10002bc2 <_vsnprintf+0x18a> +10002e18: b35d j 10002bbe <_vsnprintf+0x186> +10002e1a: 06f00793 li a5,111 +10002e1e: 06f50763 beq a0,a5,10002e8c <_vsnprintf+0x454> +10002e22: 26a7fe63 bgeu a5,a0,1000309e <_vsnprintf+0x666> +10002e26: c94a sw s2,144(sp) +10002e28: 07800793 li a5,120 +10002e2c: 36f50263 beq a0,a5,10003190 <_vsnprintf+0x758> +10002e30: 4629 li a2,10 +10002e32: 9abd andi a3,a3,-17 +10002e34: 8332 mv t1,a2 +10002e36: 4e81 li t4,0 +10002e38: a8b1 j 10002e94 <_vsnprintf+0x45c> +10002e3a: 873e mv a4,a5 +10002e3c: 21084833 sh2add a6,a6,a6 +10002e40: 0605 addi a2,a2,1 +10002e42: 20a82833 sh1add a6,a6,a0 +10002e46: 00064503 lbu a0,0(a2) +10002e4a: fd080813 addi a6,a6,-48 +10002e4e: fd050793 addi a5,a0,-48 +10002e52: 0ff7f793 zext.b a5,a5 +10002e56: fef773e3 bgeu a4,a5,10002e3c <_vsnprintf+0x404> +10002e5a: 8432 mv s0,a2 +10002e5c: 00160713 addi a4,a2,1 +10002e60: b9b5 j 10002adc <_vsnprintf+0xa4> +10002e62: 000d2803 lw a6,0(s10) +10002e66: 00244503 lbu a0,2(s0) +10002e6a: 0409 addi s0,s0,2 +10002e6c: 00140713 addi a4,s0,1 +10002e70: 0a086833 max a6,a6,zero +10002e74: 0d11 addi s10,s10,4 +10002e76: b19d j 10002adc <_vsnprintf+0xa4> +10002e78: 0216e593 ori a1,a3,33 +10002e7c: 86ba mv a3,a4 +10002e7e: b35d j 10002c24 <_vsnprintf+0x1ec> +10002e80: 28b69693 bseti a3,a3,0xb +10002e84: bdf9 j 10002d62 <_vsnprintf+0x32a> +10002e86: 0206e693 ori a3,a3,32 +10002e8a: b709 j 10002d8c <_vsnprintf+0x354> +10002e8c: 4621 li a2,8 +10002e8e: c94a sw s2,144(sp) +10002e90: 8332 mv t1,a2 +10002e92: 4e81 li t4,0 +10002e94: 4006f513 andi a0,a3,1024 +10002e98: ff36fe13 andi t3,a3,-13 +10002e9c: c119 beqz a0,10002ea2 <_vsnprintf+0x46a> +10002e9e: ff26fe13 andi t3,a3,-14 +10002ea2: 200e7593 andi a1,t3,512 +10002ea6: 32059a63 bnez a1,100031da <_vsnprintf+0x7a2> +10002eaa: 100e7793 andi a5,t3,256 +10002eae: 004d0913 addi s2,s10,4 +10002eb2: 50079163 bnez a5,100033b4 <_vsnprintf+0x97c> +10002eb6: 040e7713 andi a4,t3,64 +10002eba: 2e071663 bnez a4,100031a6 <_vsnprintf+0x76e> +10002ebe: 080e7713 andi a4,t3,128 +10002ec2: 58070663 beqz a4,1000344e <_vsnprintf+0xa16> +10002ec6: 000d5603 lhu a2,0(s10) +10002eca: 34061b63 bnez a2,10003220 <_vsnprintf+0x7e8> +10002ece: fefe7e13 andi t3,t3,-17 +10002ed2: 34050763 beqz a0,10003220 <_vsnprintf+0x7e8> +10002ed6: 4781 li a5,0 +10002ed8: 0098 addi a4,sp,64 +10002eda: c246 sw a7,4(sp) +10002edc: c472 sw t3,8(sp) +10002ede: c042 sw a6,0(sp) +10002ee0: 889a mv a7,t1 +10002ee2: 8626 mv a2,s1 +10002ee4: 4801 li a6,0 +10002ee6: a25d j 1000308c <_vsnprintf+0x654> +10002ee8: 05800793 li a5,88 +10002eec: 06f50e63 beq a0,a5,10002f68 <_vsnprintf+0x530> +10002ef0: 06200793 li a5,98 +10002ef4: 10f51463 bne a0,a5,10002ffc <_vsnprintf+0x5c4> +10002ef8: 4609 li a2,2 +10002efa: c94a sw s2,144(sp) +10002efc: 8332 mv t1,a2 +10002efe: 4e81 li t4,0 +10002f00: bf51 j 10002e94 <_vsnprintf+0x45c> +10002f02: 28b69693 bseti a3,a3,0xb +10002f06: 0206e693 ori a3,a3,32 +10002f0a: bda1 j 10002d62 <_vsnprintf+0x32a> +10002f0c: 4006f793 andi a5,a3,1024 +10002f10: 41260733 sub a4,a2,s2 +10002f14: 8a89 andi a3,a3,2 +10002f16: da0797e3 bnez a5,10002cc4 <_vsnprintf+0x28c> +10002f1a: 34068b63 beqz a3,10003270 <_vsnprintf+0x838> +10002f1e: 4689 li a3,2 +10002f20: 87a2 mv a5,s0 +10002f22: 8c36 mv s8,a3 +10002f24: d046 sw a7,32(sp) +10002f26: d23a sw a4,36(sp) +10002f28: 8426 mv s0,s1 +10002f2a: 8d3e mv s10,a5 +10002f2c: 8622 mv a2,s0 +10002f2e: 86d2 mv a3,s4 +10002f30: 85e6 mv a1,s9 +10002f32: 9d82 jalr s11 +10002f34: 0405 addi s0,s0,1 +10002f36: 40940733 sub a4,s0,s1 +10002f3a: 974a add a4,a4,s2 +10002f3c: 00074503 lbu a0,0(a4) +10002f40: f575 bnez a0,10002f2c <_vsnprintf+0x4f4> +10002f42: 5882 lw a7,32(sp) +10002f44: 5712 lw a4,36(sp) +10002f46: 87ea mv a5,s10 +10002f48: 8d22 mv s10,s0 +10002f4a: 86e2 mv a3,s8 +10002f4c: 843e mv s0,a5 +10002f4e: 84ea mv s1,s10 +10002f50: e6d1 bnez a3,10002fdc <_vsnprintf+0x5a4> +10002f52: 4d72 lw s10,28(sp) +10002f54: 494a lw s2,144(sp) +10002f56: 5c66 lw s8,120(sp) +10002f58: be15 j 10002a8c <_vsnprintf+0x54> +10002f5a: 00244503 lbu a0,2(s0) +10002f5e: 0c06e693 ori a3,a3,192 +10002f62: 00340713 addi a4,s0,3 +10002f66: b6d9 j 10002b2c <_vsnprintf+0xf4> +10002f68: 4641 li a2,16 +10002f6a: c94a sw s2,144(sp) +10002f6c: 0206e693 ori a3,a3,32 +10002f70: 8332 mv t1,a2 +10002f72: 4e81 li t4,0 +10002f74: b705 j 10002e94 <_vsnprintf+0x45c> +10002f76: 5882 lw a7,32(sp) +10002f78: 5712 lw a4,36(sp) +10002f7a: 5422 lw s0,40(sp) +10002f7c: 86ea mv a3,s10 +10002f7e: 84e2 mv s1,s8 +10002f80: bfc1 j 10002f50 <_vsnprintf+0x518> +10002f82: 86ea mv a3,s10 +10002f84: 8d22 mv s10,s0 +10002f86: 5882 lw a7,32(sp) +10002f88: 5712 lw a4,36(sp) +10002f8a: 5422 lw s0,40(sp) +10002f8c: 84ea mv s1,s10 +10002f8e: b7c9 j 10002f50 <_vsnprintf+0x518> +10002f90: 4785 li a5,1 +10002f92: 2317fc63 bgeu a5,a7,100031ca <_vsnprintf+0x792> +10002f96: 87a2 mv a5,s0 +10002f98: fff48913 addi s2,s1,-1 +10002f9c: dce2 sw s8,120(sp) +10002f9e: 9946 add s2,s2,a7 +10002fa0: d046 sw a7,32(sp) +10002fa2: 8426 mv s0,s1 +10002fa4: 8c3e mv s8,a5 +10002fa6: 8622 mv a2,s0 +10002fa8: 86d2 mv a3,s4 +10002faa: 0405 addi s0,s0,1 +10002fac: 85e6 mv a1,s9 +10002fae: 02000513 li a0,32 +10002fb2: 9d82 jalr s11 +10002fb4: ff2419e3 bne s0,s2,10002fa6 <_vsnprintf+0x56e> +10002fb8: 5882 lw a7,32(sp) +10002fba: 000d4503 lbu a0,0(s10) +10002fbe: 87e2 mv a5,s8 +10002fc0: 8c22 mv s8,s0 +10002fc2: 8662 mv a2,s8 +10002fc4: 86d2 mv a3,s4 +10002fc6: 85e6 mv a1,s9 +10002fc8: 843e mv s0,a5 +10002fca: 94c6 add s1,s1,a7 +10002fcc: 9d82 jalr s11 +10002fce: 5c66 lw s8,120(sp) +10002fd0: 4d72 lw s10,28(sp) +10002fd2: 494a lw s2,144(sp) +10002fd4: bc65 j 10002a8c <_vsnprintf+0x54> +10002fd6: 8a89 andi a3,a3,2 +10002fd8: 48068963 beqz a3,1000346a <_vsnprintf+0xa32> +10002fdc: 8c26 mv s8,s1 +10002fde: f7177ae3 bgeu a4,a7,10002f52 <_vsnprintf+0x51a> +10002fe2: 98a6 add a7,a7,s1 +10002fe4: 40e884b3 sub s1,a7,a4 +10002fe8: 8662 mv a2,s8 +10002fea: 86d2 mv a3,s4 +10002fec: 0c05 addi s8,s8,1 +10002fee: 85e6 mv a1,s9 +10002ff0: 02000513 li a0,32 +10002ff4: 9d82 jalr s11 +10002ff6: fe9c19e3 bne s8,s1,10002fe8 <_vsnprintf+0x5b0> +10002ffa: bfa1 j 10002f52 <_vsnprintf+0x51a> +10002ffc: 4006f613 andi a2,a3,1024 +10003000: fef6fe13 andi t3,a3,-17 +10003004: e655 bnez a2,100030b0 <_vsnprintf+0x678> +10003006: 200e7513 andi a0,t3,512 +1000300a: e945 bnez a0,100030ba <_vsnprintf+0x682> +1000300c: c94a sw s2,144(sp) +1000300e: 100e7793 andi a5,t3,256 +10003012: 004d0913 addi s2,s10,4 +10003016: 2a079b63 bnez a5,100032cc <_vsnprintf+0x894> +1000301a: 040e7713 andi a4,t3,64 +1000301e: 16071563 bnez a4,10003188 <_vsnprintf+0x750> +10003022: 080e7713 andi a4,t3,128 +10003026: 40070963 beqz a4,10003438 <_vsnprintf+0xa00> +1000302a: 000d1703 lh a4,0(s10) +1000302e: 40f75693 srai a3,a4,0xf +10003032: 00d745b3 xor a1,a4,a3 +10003036: 8d95 sub a1,a1,a3 +10003038: 0805c5b3 zext.h a1,a1 +1000303c: 01f75693 srli a3,a4,0x1f +10003040: 28070263 beqz a4,100032c4 <_vsnprintf+0x88c> +10003044: 862e mv a2,a1 +10003046: ccccdeb7 lui t4,0xccccd +1000304a: ccde8e93 addi t4,t4,-819 # cccccccd <__StackTop+0xacc4accd> +1000304e: 0098 addi a4,sp,64 +10003050: 4f25 li t5,9 +10003052: 02000f93 li t6,32 +10003056: a019 j 1000305c <_vsnprintf+0x624> +10003058: 03f78463 beq a5,t6,10003080 <_vsnprintf+0x648> +1000305c: 03d635b3 mulhu a1,a2,t4 +10003060: 0785 addi a5,a5,1 +10003062: 8332 mv t1,a2 +10003064: 00f702b3 add t0,a4,a5 +10003068: 818d srli a1,a1,0x3 +1000306a: 20b5c533 sh2add a0,a1,a1 +1000306e: 0506 slli a0,a0,0x1 +10003070: 8e09 sub a2,a2,a0 +10003072: 03060613 addi a2,a2,48 +10003076: fec28fa3 sb a2,-1(t0) +1000307a: 862e mv a2,a1 +1000307c: fc6f6ee3 bltu t5,t1,10003058 <_vsnprintf+0x620> +10003080: c246 sw a7,4(sp) +10003082: c042 sw a6,0(sp) +10003084: c472 sw t3,8(sp) +10003086: 8836 mv a6,a3 +10003088: 8626 mv a2,s1 +1000308a: 48a9 li a7,10 +1000308c: 86d2 mv a3,s4 +1000308e: 85e6 mv a1,s9 +10003090: 856e mv a0,s11 +10003092: b43fe0ef jal 10001bd4 <_ntoa_format> +10003096: 8d4a mv s10,s2 +10003098: 84aa mv s1,a0 +1000309a: 494a lw s2,144(sp) +1000309c: bac5 j 10002a8c <_vsnprintf+0x54> +1000309e: 06900793 li a5,105 +100030a2: fef6fe13 andi t3,a3,-17 +100030a6: 3af51a63 bne a0,a5,1000345a <_vsnprintf+0xa22> +100030aa: 4006f613 andi a2,a3,1024 +100030ae: de21 beqz a2,10003006 <_vsnprintf+0x5ce> +100030b0: fee6fe13 andi t3,a3,-18 +100030b4: 40000613 li a2,1024 +100030b8: b7b9 j 10003006 <_vsnprintf+0x5ce> +100030ba: 0d1d addi s10,s10,7 +100030bc: ff8d7d13 andi s10,s10,-8 +100030c0: 004d2683 lw a3,4(s10) +100030c4: 000d2583 lw a1,0(s10) +100030c8: 0d21 addi s10,s10,8 +100030ca: 01f6df13 srli t5,a3,0x1f +100030ce: 00d5e7b3 or a5,a1,a3 +100030d2: c3f9 beqz a5,10003198 <_vsnprintf+0x760> +100030d4: 41f6d793 srai a5,a3,0x1f +100030d8: 8dbd xor a1,a1,a5 +100030da: 40f58733 sub a4,a1,a5 +100030de: 8ebd xor a3,a3,a5 +100030e0: 40f687b3 sub a5,a3,a5 +100030e4: 00e5b6b3 sltu a3,a1,a4 +100030e8: c94a sw s2,144(sp) +100030ea: dce2 sw s8,120(sp) +100030ec: 40d786b3 sub a3,a5,a3 +100030f0: 85ba mv a1,a4 +100030f2: ccccd537 lui a0,0xccccd +100030f6: 8eaa mv t4,a0 +100030f8: ccce8e93 addi t4,t4,-820 +100030fc: ccd50513 addi a0,a0,-819 # cccccccd <__StackTop+0xacc4accd> +10003100: 4781 li a5,0 +10003102: 0098 addi a4,sp,64 +10003104: 02000f93 li t6,32 +10003108: 8936 mv s2,a3 +1000310a: 01258633 add a2,a1,s2 +1000310e: 00b636b3 sltu a3,a2,a1 +10003112: 9636 add a2,a2,a3 +10003114: 02a636b3 mulhu a3,a2,a0 +10003118: 834a mv t1,s2 +1000311a: 0785 addi a5,a5,1 +1000311c: 00f702b3 add t0,a4,a5 +10003120: 83ae mv t2,a1 +10003122: 0026dc13 srli s8,a3,0x2 +10003126: 9af1 andi a3,a3,-4 +10003128: 96e2 add a3,a3,s8 +1000312a: 8e15 sub a2,a2,a3 +1000312c: 40c58633 sub a2,a1,a2 +10003130: 00c5b6b3 sltu a3,a1,a2 +10003134: 40d906b3 sub a3,s2,a3 +10003138: 03d60c33 mul s8,a2,t4 +1000313c: 02a686b3 mul a3,a3,a0 +10003140: 02a63933 mulhu s2,a2,a0 +10003144: 96e2 add a3,a3,s8 +10003146: 02a60633 mul a2,a2,a0 +1000314a: 96ca add a3,a3,s2 +1000314c: 01f69c13 slli s8,a3,0x1f +10003150: 0016d913 srli s2,a3,0x1 +10003154: 8205 srli a2,a2,0x1 +10003156: 00cc6633 or a2,s8,a2 +1000315a: 20c646b3 sh2add a3,a2,a2 +1000315e: 0686 slli a3,a3,0x1 +10003160: 40d586b3 sub a3,a1,a3 +10003164: 03068693 addi a3,a3,48 +10003168: fed28fa3 sb a3,-1(t0) +1000316c: 85b2 mv a1,a2 +1000316e: 02030f63 beqz t1,100031ac <_vsnprintf+0x774> +10003172: f9f79ce3 bne a5,t6,1000310a <_vsnprintf+0x6d2> +10003176: 494a lw s2,144(sp) +10003178: 5c66 lw s8,120(sp) +1000317a: c246 sw a7,4(sp) +1000317c: c042 sw a6,0(sp) +1000317e: c472 sw t3,8(sp) +10003180: 887a mv a6,t5 +10003182: 8626 mv a2,s1 +10003184: 48a9 li a7,10 +10003186: b4c5 j 10002c66 <_vsnprintf+0x22e> +10003188: 000d4703 lbu a4,0(s10) +1000318c: 85ba mv a1,a4 +1000318e: b57d j 1000303c <_vsnprintf+0x604> +10003190: 4641 li a2,16 +10003192: 8332 mv t1,a2 +10003194: 4e81 li t4,0 +10003196: b9fd j 10002e94 <_vsnprintf+0x45c> +10003198: 2a061e63 bnez a2,10003454 <_vsnprintf+0xa1c> +1000319c: c94a sw s2,144(sp) +1000319e: dce2 sw s8,120(sp) +100031a0: 4581 li a1,0 +100031a2: 4681 li a3,0 +100031a4: b7b9 j 100030f2 <_vsnprintf+0x6ba> +100031a6: 000d4603 lbu a2,0(s10) +100031aa: b305 j 10002eca <_vsnprintf+0x492> +100031ac: 46a5 li a3,9 +100031ae: fc76e2e3 bltu a3,t2,10003172 <_vsnprintf+0x73a> +100031b2: b7d1 j 10003176 <_vsnprintf+0x73e> +100031b4: 4006f713 andi a4,a3,1024 +100031b8: e0070fe3 beqz a4,10002fd6 <_vsnprintf+0x59e> +100031bc: 0026f713 andi a4,a3,2 +100031c0: 2a070363 beqz a4,10003466 <_vsnprintf+0xa2e> +100031c4: 4701 li a4,0 +100031c6: 8c26 mv s8,s1 +100031c8: bd19 j 10002fde <_vsnprintf+0x5a6> +100031ca: 000d4503 lbu a0,0(s10) +100031ce: 8626 mv a2,s1 +100031d0: 86d2 mv a3,s4 +100031d2: 85e6 mv a1,s9 +100031d4: 9d82 jalr s11 +100031d6: 84ca mv s1,s2 +100031d8: b10d j 10002dfa <_vsnprintf+0x3c2> +100031da: 0d1d addi s10,s10,7 +100031dc: ff8d7d13 andi s10,s10,-8 +100031e0: 000d2f03 lw t5,0(s10) +100031e4: 004d2903 lw s2,4(s10) +100031e8: dce2 sw s8,120(sp) +100031ea: 0d21 addi s10,s10,8 +100031ec: 012f67b3 or a5,t5,s2 +100031f0: 12079e63 bnez a5,1000332c <_vsnprintf+0x8f4> +100031f4: fefe7e13 andi t3,t3,-17 +100031f8: 12050a63 beqz a0,1000332c <_vsnprintf+0x8f4> +100031fc: 4c01 li s8,0 +100031fe: 0098 addi a4,sp,64 +10003200: c246 sw a7,4(sp) +10003202: c042 sw a6,0(sp) +10003204: 87e2 mv a5,s8 +10003206: 8626 mv a2,s1 +10003208: c472 sw t3,8(sp) +1000320a: 889a mv a7,t1 +1000320c: 4801 li a6,0 +1000320e: 86d2 mv a3,s4 +10003210: 85e6 mv a1,s9 +10003212: 856e mv a0,s11 +10003214: 9c1fe0ef jal 10001bd4 <_ntoa_format> +10003218: 84aa mv s1,a0 +1000321a: 494a lw s2,144(sp) +1000321c: 5c66 lw s8,120(sp) +1000321e: b0bd j 10002a8c <_vsnprintf+0x54> +10003220: 485e5693 bexti a3,t3,0x5 +10003224: 06100713 li a4,97 +10003228: c299 beqz a3,1000322e <_vsnprintf+0x7f6> +1000322a: 04100713 li a4,65 +1000322e: ff670f13 addi t5,a4,-10 +10003232: 4525 li a0,9 +10003234: 0098 addi a4,sp,64 +10003236: 02000e93 li t4,32 +1000323a: a00d j 1000325c <_vsnprintf+0x824> +1000323c: 03068693 addi a3,a3,48 +10003240: 0ff6f693 zext.b a3,a3 +10003244: 0785 addi a5,a5,1 +10003246: 00f705b3 add a1,a4,a5 +1000324a: fed58fa3 sb a3,-1(a1) +1000324e: 026656b3 divu a3,a2,t1 +10003252: c86664e3 bltu a2,t1,10002eda <_vsnprintf+0x4a2> +10003256: c9d782e3 beq a5,t4,10002eda <_vsnprintf+0x4a2> +1000325a: 8636 mv a2,a3 +1000325c: 026675b3 remu a1,a2,t1 +10003260: 0ff5f693 zext.b a3,a1 +10003264: fcb57ce3 bgeu a0,a1,1000323c <_vsnprintf+0x804> +10003268: 96fa add a3,a3,t5 +1000326a: 0ff6f693 zext.b a3,a3 +1000326e: bfd9 j 10003244 <_vsnprintf+0x80c> +10003270: 21177263 bgeu a4,a7,10003474 <_vsnprintf+0xa3c> +10003274: 00988d33 add s10,a7,s1 +10003278: 87a2 mv a5,s0 +1000327a: 40ed0d33 sub s10,s10,a4 +1000327e: 8426 mv s0,s1 +10003280: 8c36 mv s8,a3 +10003282: d046 sw a7,32(sp) +10003284: d242 sw a6,36(sp) +10003286: 84be mv s1,a5 +10003288: 8622 mv a2,s0 +1000328a: 86d2 mv a3,s4 +1000328c: 0405 addi s0,s0,1 +1000328e: 85e6 mv a1,s9 +10003290: 02000513 li a0,32 +10003294: 9d82 jalr s11 +10003296: ffa419e3 bne s0,s10,10003288 <_vsnprintf+0x850> +1000329a: 5882 lw a7,32(sp) +1000329c: 00094503 lbu a0,0(s2) +100032a0: 87a6 mv a5,s1 +100032a2: 5812 lw a6,36(sp) +100032a4: 84a2 mv s1,s0 +100032a6: 86e2 mv a3,s8 +100032a8: 843e mv s0,a5 +100032aa: 00188713 addi a4,a7,1 +100032ae: ca0502e3 beqz a0,10002f52 <_vsnprintf+0x51a> +100032b2: c60c07e3 beqz s8,10002f20 <_vsnprintf+0x4e8> +100032b6: 4681 li a3,0 +100032b8: bc19 j 10002cce <_vsnprintf+0x296> +100032ba: 1b177b63 bgeu a4,a7,10003470 <_vsnprintf+0xa38> +100032be: 40000693 li a3,1024 +100032c2: bf4d j 10003274 <_vsnprintf+0x83c> +100032c4: 0098 addi a4,sp,64 +100032c6: da061de3 bnez a2,10003080 <_vsnprintf+0x648> +100032ca: bbb5 j 10003046 <_vsnprintf+0x60e> +100032cc: 000d2783 lw a5,0(s10) +100032d0: 01f7d693 srli a3,a5,0x1f +100032d4: 16078963 beqz a5,10003446 <_vsnprintf+0xa0e> +100032d8: 40f00633 neg a2,a5 +100032dc: 0ac7e633 max a2,a5,a2 +100032e0: ccccdeb7 lui t4,0xccccd +100032e4: ccde8e93 addi t4,t4,-819 # cccccccd <__StackTop+0xacc4accd> +100032e8: 0098 addi a4,sp,64 +100032ea: 4f25 li t5,9 +100032ec: 02000f93 li t6,32 +100032f0: a019 j 100032f6 <_vsnprintf+0x8be> +100032f2: 03f50563 beq a0,t6,1000331c <_vsnprintf+0x8e4> +100032f6: 03d635b3 mulhu a1,a2,t4 +100032fa: 0505 addi a0,a0,1 +100032fc: 00a702b3 add t0,a4,a0 +10003300: 8332 mv t1,a2 +10003302: 818d srli a1,a1,0x3 +10003304: 20b5c7b3 sh2add a5,a1,a1 +10003308: 0786 slli a5,a5,0x1 +1000330a: 40f607b3 sub a5,a2,a5 +1000330e: 03078793 addi a5,a5,48 +10003312: fef28fa3 sb a5,-1(t0) +10003316: 862e mv a2,a1 +10003318: fc6f6de3 bltu t5,t1,100032f2 <_vsnprintf+0x8ba> +1000331c: c246 sw a7,4(sp) +1000331e: c042 sw a6,0(sp) +10003320: c472 sw t3,8(sp) +10003322: 8836 mv a6,a3 +10003324: 87aa mv a5,a0 +10003326: 8626 mv a2,s1 +10003328: 48a9 li a7,10 +1000332a: b38d j 1000308c <_vsnprintf+0x654> +1000332c: 485e5713 bexti a4,t3,0x5 +10003330: 06100793 li a5,97 +10003334: c319 beqz a4,1000333a <_vsnprintf+0x902> +10003336: 04100793 li a5,65 +1000333a: 17d9 addi a5,a5,-10 +1000333c: 0098 addi a4,sp,64 +1000333e: d426 sw s1,40(sp) +10003340: d86e sw s11,48(sp) +10003342: da66 sw s9,52(sp) +10003344: dc52 sw s4,56(sp) +10003346: de22 sw s0,60(sp) +10003348: 4c01 li s8,0 +1000334a: ce72 sw t3,28(sp) +1000334c: d046 sw a7,32(sp) +1000334e: d242 sw a6,36(sp) +10003350: d61a sw t1,44(sp) +10003352: 84fa mv s1,t5 +10003354: 8a32 mv s4,a2 +10003356: 8cf6 mv s9,t4 +10003358: 8dba mv s11,a4 +1000335a: 843e mv s0,a5 +1000335c: a815 j 10003390 <_vsnprintf+0x958> +1000335e: 03050793 addi a5,a0,48 +10003362: 0ff7f793 zext.b a5,a5 +10003366: 0c05 addi s8,s8,1 +10003368: 018d86b3 add a3,s11,s8 +1000336c: fef68fa3 sb a5,-1(a3) +10003370: 8652 mv a2,s4 +10003372: 4681 li a3,0 +10003374: 8526 mv a0,s1 +10003376: 85ca mv a1,s2 +10003378: 0fffd097 auipc ra,0xfffd +1000337c: dbc080e7 jalr -580(ra) # 20000134 <__udivdi3> +10003380: 092c8f63 beq s9,s2,1000341e <_vsnprintf+0x9e6> +10003384: 02000793 li a5,32 +10003388: 08fc0d63 beq s8,a5,10003422 <_vsnprintf+0x9ea> +1000338c: 84aa mv s1,a0 +1000338e: 892e mv s2,a1 +10003390: 8652 mv a2,s4 +10003392: 4681 li a3,0 +10003394: 8526 mv a0,s1 +10003396: 85ca mv a1,s2 +10003398: 0fffd097 auipc ra,0xfffd +1000339c: 124080e7 jalr 292(ra) # 200004bc <__umoddi3> +100033a0: 0ff57513 zext.b a0,a0 +100033a4: 47a5 li a5,9 +100033a6: faa7fce3 bgeu a5,a0,1000335e <_vsnprintf+0x926> +100033aa: 008507b3 add a5,a0,s0 +100033ae: 0ff7f793 zext.b a5,a5 +100033b2: bf55 j 10003366 <_vsnprintf+0x92e> +100033b4: 000d2783 lw a5,0(s10) +100033b8: e789 bnez a5,100033c2 <_vsnprintf+0x98a> +100033ba: fefe7e13 andi t3,t3,-17 +100033be: 0098 addi a4,sp,64 +100033c0: e929 bnez a0,10003412 <_vsnprintf+0x9da> +100033c2: 485e5693 bexti a3,t3,0x5 +100033c6: 06100713 li a4,97 +100033ca: c299 beqz a3,100033d0 <_vsnprintf+0x998> +100033cc: 04100713 li a4,65 +100033d0: ff670f13 addi t5,a4,-10 +100033d4: 4ea5 li t4,9 +100033d6: 0098 addi a4,sp,64 +100033d8: 02000513 li a0,32 +100033dc: a00d j 100033fe <_vsnprintf+0x9c6> +100033de: 03068693 addi a3,a3,48 +100033e2: 0ff6f693 zext.b a3,a3 +100033e6: 0585 addi a1,a1,1 +100033e8: 00b70633 add a2,a4,a1 +100033ec: fed60fa3 sb a3,-1(a2) +100033f0: 0267d6b3 divu a3,a5,t1 +100033f4: 0067ef63 bltu a5,t1,10003412 <_vsnprintf+0x9da> +100033f8: 00a58d63 beq a1,a0,10003412 <_vsnprintf+0x9da> +100033fc: 87b6 mv a5,a3 +100033fe: 0267f633 remu a2,a5,t1 +10003402: 0ff67693 zext.b a3,a2 +10003406: fccefce3 bgeu t4,a2,100033de <_vsnprintf+0x9a6> +1000340a: 96fa add a3,a3,t5 +1000340c: 0ff6f693 zext.b a3,a3 +10003410: bfd9 j 100033e6 <_vsnprintf+0x9ae> +10003412: c246 sw a7,4(sp) +10003414: c472 sw t3,8(sp) +10003416: c042 sw a6,0(sp) +10003418: 889a mv a7,t1 +1000341a: 87ae mv a5,a1 +1000341c: b4d9 j 10002ee2 <_vsnprintf+0x4aa> +1000341e: f744f3e3 bgeu s1,s4,10003384 <_vsnprintf+0x94c> +10003422: 876e mv a4,s11 +10003424: 4e72 lw t3,28(sp) +10003426: 5882 lw a7,32(sp) +10003428: 5812 lw a6,36(sp) +1000342a: 54a2 lw s1,40(sp) +1000342c: 5332 lw t1,44(sp) +1000342e: 5cd2 lw s9,52(sp) +10003430: 5a62 lw s4,56(sp) +10003432: 5472 lw s0,60(sp) +10003434: 5dc2 lw s11,48(sp) +10003436: b3e9 j 10003200 <_vsnprintf+0x7c8> +10003438: 000d2703 lw a4,0(s10) +1000343c: 40e005b3 neg a1,a4 +10003440: 0ab765b3 max a1,a4,a1 +10003444: bee5 j 1000303c <_vsnprintf+0x604> +10003446: 0098 addi a4,sp,64 +10003448: ec061ae3 bnez a2,1000331c <_vsnprintf+0x8e4> +1000344c: bd51 j 100032e0 <_vsnprintf+0x8a8> +1000344e: 000d2603 lw a2,0(s10) +10003452: bca5 j 10002eca <_vsnprintf+0x492> +10003454: 4781 li a5,0 +10003456: 0098 addi a4,sp,64 +10003458: b30d j 1000317a <_vsnprintf+0x742> +1000345a: 4629 li a2,10 +1000345c: c94a sw s2,144(sp) +1000345e: 86f2 mv a3,t3 +10003460: 8332 mv t1,a2 +10003462: 4e81 li t4,0 +10003464: bc05 j 10002e94 <_vsnprintf+0x45c> +10003466: 40000693 li a3,1024 +1000346a: e00895e3 bnez a7,10003274 <_vsnprintf+0x83c> +1000346e: b4d5 j 10002f52 <_vsnprintf+0x51a> +10003470: 0705 addi a4,a4,1 +10003472: b8b1 j 10002cce <_vsnprintf+0x296> +10003474: 0705 addi a4,a4,1 +10003476: b46d j 10002f20 <_vsnprintf+0x4e8> + +10003478 : +10003478: 1101 addi sp,sp,-32 +1000347a: 100028b7 lui a7,0x10002 +1000347e: 882a mv a6,a0 +10003480: 87ae mv a5,a1 +10003482: 8736 mv a4,a3 +10003484: 002c addi a1,sp,8 +10003486: 86b2 mv a3,a2 +10003488: dfa88513 addi a0,a7,-518 # 10001dfa <_out_fct> +1000348c: 567d li a2,-1 +1000348e: ce06 sw ra,28(sp) +10003490: c442 sw a6,8(sp) +10003492: c63e sw a5,12(sp) +10003494: da4ff0ef jal 10002a38 <_vsnprintf> +10003498: 40f2 lw ra,28(sp) +1000349a: 6105 addi sp,sp,32 +1000349c: 8082 ret + +1000349e : +1000349e: 8101a783 lw a5,-2032(gp) # 20002e64 +100034a2: 1101 addi sp,sp,-32 +100034a4: ce06 sw ra,28(sp) +100034a6: cf91 beqz a5,100034c2 +100034a8: 86aa mv a3,a0 +100034aa: 10002537 lui a0,0x10002 +100034ae: 872e mv a4,a1 +100034b0: df250513 addi a0,a0,-526 # 10001df2 <_out_char> +100034b4: 006c addi a1,sp,12 +100034b6: 567d li a2,-1 +100034b8: 9782 jalr a5 +100034ba: 40f2 lw ra,28(sp) +100034bc: 4505 li a0,1 +100034be: 6105 addi sp,sp,32 +100034c0: 8082 ret +100034c2: 2e55 jal 10003876 <__wrap_puts> +100034c4: 40f2 lw ra,28(sp) +100034c6: 4501 li a0,0 +100034c8: 6105 addi sp,sp,32 +100034ca: 8082 ret + +100034cc : +100034cc: 450d li a0,3 +100034ce: be251073 csrw 0xbe2,a0 +100034d2: 157d addi a0,a0,-1 +100034d4: fe055de3 bgez a0,100034ce +100034d8: 6505 lui a0,0x1 +100034da: 80050513 addi a0,a0,-2048 # 800 +100034de: 30451073 csrw mie,a0 +100034e2: 30046073 csrsi mstatus,8 +100034e6: 34001073 csrw mscratch,zero +100034ea: 8082 ret + +100034ec <_exit>: +100034ec: 9002 ebreak +100034ee: bffd j 100034ec <_exit> + +100034f0 : +100034f0: 1141 addi sp,sp,-16 +100034f2: c606 sw ra,12(sp) +100034f4: 3fe5 jal 100034ec <_exit> + +100034f6 : +100034f6: 1141 addi sp,sp,-16 +100034f8: c422 sw s0,8(sp) +100034fa: c226 sw s1,4(sp) +100034fc: c606 sw ra,12(sp) +100034fe: 10004437 lui s0,0x10004 +10003502: c68fe0ef jal 1000196a +10003506: 100044b7 lui s1,0x10004 +1000350a: c3840793 addi a5,s0,-968 # 10003c38 <__frame_dummy_init_array_entry> +1000350e: c3c48493 addi s1,s1,-964 # 10003c3c <__EH_FRAME_BEGIN__> +10003512: 0097f963 bgeu a5,s1,10003524 +10003516: c3840413 addi s0,s0,-968 +1000351a: 401c lw a5,0(s0) +1000351c: 0411 addi s0,s0,4 +1000351e: 9782 jalr a5 +10003520: fe946de3 bltu s0,s1,1000351a +10003524: 40b2 lw ra,12(sp) +10003526: 4422 lw s0,8(sp) +10003528: 4492 lw s1,4(sp) +1000352a: 0141 addi sp,sp,16 +1000352c: 8082 ret + +1000352e : +1000352e: 411c lw a5,0(a0) +10003530: 852e mv a0,a1 +10003532: 85b2 mv a1,a2 +10003534: 8782 jr a5 + +10003536 : +10003536: 01554783 lbu a5,21(a0) +1000353a: 1101 addi sp,sp,-32 +1000353c: ca26 sw s1,20(sp) +1000353e: c64e sw s3,12(sp) +10003540: c452 sw s4,8(sp) +10003542: ce06 sw ra,28(sp) +10003544: 89aa mv s3,a0 +10003546: 8a2e mv s4,a1 +10003548: 84b2 mv s1,a2 +1000354a: c7e9 beqz a5,10003614 +1000354c: 04c05863 blez a2,1000359c +10003550: 0005c703 lbu a4,0(a1) +10003554: 47a9 li a5,10 +10003556: 06f70963 beq a4,a5,100035c8 +1000355a: 4705 li a4,1 +1000355c: 4781 li a5,0 +1000355e: 04e48563 beq s1,a4,100035a8 +10003562: cc22 sw s0,24(sp) +10003564: c84a sw s2,16(sp) +10003566: c256 sw s5,4(sp) +10003568: 001a0913 addi s2,s4,1 +1000356c: 4405 li s0,1 +1000356e: 4aa9 li s5,10 +10003570: 00094703 lbu a4,0(s2) +10003574: 86a2 mv a3,s0 +10003576: 0405 addi s0,s0,1 +10003578: 07570663 beq a4,s5,100035e4 +1000357c: 0905 addi s2,s2,1 +1000357e: fe8499e3 bne s1,s0,10003570 +10003582: 4462 lw s0,24(sp) +10003584: 4942 lw s2,16(sp) +10003586: 4a92 lw s5,4(sp) +10003588: 0297c063 blt a5,s1,100035a8 +1000358c: 9a26 add s4,s4,s1 +1000358e: fffa4783 lbu a5,-1(s4) +10003592: 17cd addi a5,a5,-13 +10003594: 0017b793 seqz a5,a5 +10003598: 00f98a23 sb a5,20(s3) +1000359c: 40f2 lw ra,28(sp) +1000359e: 44d2 lw s1,20(sp) +100035a0: 49b2 lw s3,12(sp) +100035a2: 4a22 lw s4,8(sp) +100035a4: 6105 addi sp,sp,32 +100035a6: 8082 ret +100035a8: 0009a703 lw a4,0(s3) +100035ac: 00fa0533 add a0,s4,a5 +100035b0: 40f485b3 sub a1,s1,a5 +100035b4: 9702 jalr a4 +100035b6: 9a26 add s4,s4,s1 +100035b8: fffa4783 lbu a5,-1(s4) +100035bc: 17cd addi a5,a5,-13 +100035be: 0017b793 seqz a5,a5 +100035c2: 00f98a23 sb a5,20(s3) +100035c6: bfd9 j 1000359c +100035c8: 01454783 lbu a5,20(a0) +100035cc: f7d9 bnez a5,1000355a +100035ce: 411c lw a5,0(a0) +100035d0: 10004537 lui a0,0x10004 +100035d4: 09850513 addi a0,a0,152 # 10004098 +100035d8: 4589 li a1,2 +100035da: 9782 jalr a5 +100035dc: 4785 li a5,1 +100035de: f8f492e3 bne s1,a5,10003562 +100035e2: b76d j 1000358c +100035e4: fff94603 lbu a2,-1(s2) +100035e8: 4735 li a4,13 +100035ea: f8e609e3 beq a2,a4,1000357c +100035ee: 40f685b3 sub a1,a3,a5 +100035f2: 00fa0533 add a0,s4,a5 +100035f6: 00d7d563 bge a5,a3,10003600 +100035fa: 0009a783 lw a5,0(s3) +100035fe: 9782 jalr a5 +10003600: 0009a783 lw a5,0(s3) +10003604: 10004537 lui a0,0x10004 +10003608: 09850513 addi a0,a0,152 # 10004098 +1000360c: 4589 li a1,2 +1000360e: 9782 jalr a5 +10003610: 87a2 mv a5,s0 +10003612: b7ad j 1000357c +10003614: 411c lw a5,0(a0) +10003616: 40f2 lw ra,28(sp) +10003618: 44d2 lw s1,20(sp) +1000361a: 49b2 lw s3,12(sp) +1000361c: 8552 mv a0,s4 +1000361e: 4a22 lw s4,8(sp) +10003620: 85b2 mv a1,a2 +10003622: 6105 addi sp,sp,32 +10003624: 8782 jr a5 + +10003626 : +10003626: 419c lw a5,0(a1) +10003628: 1101 addi sp,sp,-32 +1000362a: ca26 sw s1,20(sp) +1000362c: c84a sw s2,16(sp) +1000362e: ce06 sw ra,28(sp) +10003630: 08000713 li a4,128 +10003634: 84ae mv s1,a1 +10003636: 892a mv s2,a0 +10003638: 00e78d63 beq a5,a4,10003652 +1000363c: 00178713 addi a4,a5,1 +10003640: c098 sw a4,0(s1) +10003642: 94be add s1,s1,a5 +10003644: 01248223 sb s2,4(s1) +10003648: 40f2 lw ra,28(sp) +1000364a: 44d2 lw s1,20(sp) +1000364c: 4942 lw s2,16(sp) +1000364e: 6105 addi sp,sp,32 +10003650: 8082 ret +10003652: cc22 sw s0,24(sp) +10003654: 8181a403 lw s0,-2024(gp) # 20002e6c +10003658: c64e sw s3,12(sp) +1000365a: c452 sw s4,8(sp) +1000365c: 00458993 addi s3,a1,4 +10003660: e01d bnez s0,10003686 +10003662: 4705 li a4,1 +10003664: 4781 li a5,0 +10003666: 4462 lw s0,24(sp) +10003668: 49b2 lw s3,12(sp) +1000366a: 4a22 lw s4,8(sp) +1000366c: c098 sw a4,0(s1) +1000366e: 94be add s1,s1,a5 +10003670: 01248223 sb s2,4(s1) +10003674: 40f2 lw ra,28(sp) +10003676: 44d2 lw s1,20(sp) +10003678: 4942 lw s2,16(sp) +1000367a: 6105 addi sp,sp,32 +1000367c: 8082 ret +1000367e: 4090 lw a2,0(s1) +10003680: 3d5d jal 10003536 +10003682: 4800 lw s0,16(s0) +10003684: dc79 beqz s0,10003662 +10003686: 401c lw a5,0(s0) +10003688: 85ce mv a1,s3 +1000368a: 8522 mv a0,s0 +1000368c: dbfd beqz a5,10003682 +1000368e: 8141a783 lw a5,-2028(gp) # 20002e68 +10003692: d7f5 beqz a5,1000367e +10003694: fe8797e3 bne a5,s0,10003682 +10003698: 4090 lw a2,0(s1) +1000369a: 3d71 jal 10003536 +1000369c: b7dd j 10003682 + +1000369e : +1000369e: 7139 addi sp,sp,-64 +100036a0: dc22 sw s0,56(sp) +100036a2: da26 sw s1,52(sp) +100036a4: d84a sw s2,48(sp) +100036a6: d64e sw s3,44(sp) +100036a8: de06 sw ra,60(sp) +100036aa: 89b2 mv s3,a2 +100036ac: d452 sw s4,40(sp) +100036ae: d256 sw s5,36(sp) +100036b0: d05a sw s6,32(sp) +100036b2: 892a mv s2,a0 +100036b4: 84ae mv s1,a1 +100036b6: 8436 mv s0,a3 +100036b8: ef1fd0ef jal 100015a8 +100036bc: 000f47b7 lui a5,0xf4 +100036c0: 24078793 addi a5,a5,576 # f4240 +100036c4: 97aa add a5,a5,a0 +100036c6: 00a7b533 sltu a0,a5,a0 +100036ca: 80000737 lui a4,0x80000 +100036ce: 00b50633 add a2,a0,a1 +100036d2: 177d addi a4,a4,-1 # 7fffffff <__StackTop+0x5ff7dfff> +100036d4: 85be mv a1,a5 +100036d6: 00c77463 bgeu a4,a2,100036de +100036da: 863a mv a2,a4 +100036dc: 55fd li a1,-1 +100036de: 20003ab7 lui s5,0x20003 +100036e2: c44a8513 addi a0,s5,-956 # 20002c44 +100036e6: 0fffd097 auipc ra,0xfffd +100036ea: 9aa080e7 jalr -1622(ra) # 20000090 +100036ee: 57fd li a5,-1 +100036f0: 8b2a mv s6,a0 +100036f2: 0af48163 beq s1,a5,10003794 +100036f6: c439 beqz s0,10003744 +100036f8: 10003a37 lui s4,0x10003 +100036fc: 536a0a13 addi s4,s4,1334 # 10003536 +10003700: 8181a403 lw s0,-2024(gp) # 20002e6c +10003704: c01d beqz s0,1000372a +10003706: 04099463 bnez s3,1000374e +1000370a: a019 j 10003710 +1000370c: 4800 lw s0,16(s0) +1000370e: cc11 beqz s0,1000372a +10003710: 401c lw a5,0(s0) +10003712: 8626 mv a2,s1 +10003714: 85ca mv a1,s2 +10003716: 8522 mv a0,s0 +10003718: dbf5 beqz a5,1000370c +1000371a: 8141a783 lw a5,-2028(gp) # 20002e68 +1000371e: c399 beqz a5,10003724 +10003720: fef416e3 bne s0,a5,1000370c +10003724: 9a02 jalr s4 +10003726: 4800 lw s0,16(s0) +10003728: f465 bnez s0,10003710 +1000372a: 040b1e63 bnez s6,10003786 +1000372e: 50f2 lw ra,60(sp) +10003730: 5462 lw s0,56(sp) +10003732: 5942 lw s2,48(sp) +10003734: 59b2 lw s3,44(sp) +10003736: 5a22 lw s4,40(sp) +10003738: 5a92 lw s5,36(sp) +1000373a: 5b02 lw s6,32(sp) +1000373c: 8526 mv a0,s1 +1000373e: 54d2 lw s1,52(sp) +10003740: 6121 addi sp,sp,64 +10003742: 8082 ret +10003744: 10003a37 lui s4,0x10003 +10003748: 52ea0a13 addi s4,s4,1326 # 1000352e +1000374c: bf55 j 10003700 +1000374e: ce5e sw s7,28(sp) +10003750: 4ba9 li s7,10 +10003752: a019 j 10003758 +10003754: 4800 lw s0,16(s0) +10003756: c40d beqz s0,10003780 +10003758: 401c lw a5,0(s0) +1000375a: 8626 mv a2,s1 +1000375c: 85ca mv a1,s2 +1000375e: 8522 mv a0,s0 +10003760: dbf5 beqz a5,10003754 +10003762: 8141a783 lw a5,-2028(gp) # 20002e68 +10003766: c399 beqz a5,1000376c +10003768: fe8796e3 bne a5,s0,10003754 +1000376c: 9a02 jalr s4 +1000376e: 8522 mv a0,s0 +10003770: 00f10593 addi a1,sp,15 +10003774: 4605 li a2,1 +10003776: 017107a3 sb s7,15(sp) +1000377a: 9a02 jalr s4 +1000377c: 4800 lw s0,16(s0) +1000377e: fc69 bnez s0,10003758 +10003780: 4bf2 lw s7,28(sp) +10003782: fa0b06e3 beqz s6,1000372e +10003786: c44a8513 addi a0,s5,-956 +1000378a: 0fffd097 auipc ra,0xfffd +1000378e: 970080e7 jalr -1680(ra) # 200000fa +10003792: bf71 j 1000372e +10003794: 854a mv a0,s2 +10003796: 2119 jal 10003b9c +10003798: 84aa mv s1,a0 +1000379a: bfb1 j 100036f6 + +1000379c : +1000379c: 8181a783 lw a5,-2024(gp) # 20002e6c +100037a0: 81818713 addi a4,gp,-2024 # 20002e6c +100037a4: c799 beqz a5,100037b2 +100037a6: 00a78963 beq a5,a0,100037b8 +100037aa: 01078713 addi a4,a5,16 +100037ae: 4b9c lw a5,16(a5) +100037b0: fbfd bnez a5,100037a6 +100037b2: c191 beqz a1,100037b6 +100037b4: c308 sw a0,0(a4) +100037b6: 8082 ret +100037b8: fdfd bnez a1,100037b6 +100037ba: 4b94 lw a3,16(a5) +100037bc: c314 sw a3,0(a4) +100037be: 0007a823 sw zero,16(a5) +100037c2: 8082 ret + +100037c4 : +100037c4: 1141 addi sp,sp,-16 +100037c6: c606 sw ra,12(sp) +100037c8: 2ebd jal 10003b46 +100037ca: 40b2 lw ra,12(sp) +100037cc: 4505 li a0,1 +100037ce: 0141 addi sp,sp,16 +100037d0: 8082 ret + +100037d2 <__wrap_putchar>: +100037d2: 7179 addi sp,sp,-48 +100037d4: d226 sw s1,36(sp) +100037d6: d606 sw ra,44(sp) +100037d8: d422 sw s0,40(sp) +100037da: ce4e sw s3,28(sp) +100037dc: cc52 sw s4,24(sp) +100037de: 84aa mv s1,a0 +100037e0: 00a107a3 sb a0,15(sp) +100037e4: dc5fd0ef jal 100015a8 +100037e8: 000f47b7 lui a5,0xf4 +100037ec: 24078793 addi a5,a5,576 # f4240 +100037f0: 97aa add a5,a5,a0 +100037f2: 00a7b633 sltu a2,a5,a0 +100037f6: 80000737 lui a4,0x80000 +100037fa: 962e add a2,a2,a1 +100037fc: 177d addi a4,a4,-1 # 7fffffff <__StackTop+0x5ff7dfff> +100037fe: 85be mv a1,a5 +10003800: 00c77463 bgeu a4,a2,10003808 <__wrap_putchar+0x36> +10003804: 863a mv a2,a4 +10003806: 55fd li a1,-1 +10003808: 20003a37 lui s4,0x20003 +1000380c: c44a0513 addi a0,s4,-956 # 20002c44 +10003810: 0fffd097 auipc ra,0xfffd +10003814: 880080e7 jalr -1920(ra) # 20000090 +10003818: 8181a403 lw s0,-2024(gp) # 20002e6c +1000381c: 89aa mv s3,a0 +1000381e: c405 beqz s0,10003846 <__wrap_putchar+0x74> +10003820: d04a sw s2,32(sp) +10003822: a019 j 10003828 <__wrap_putchar+0x56> +10003824: 4800 lw s0,16(s0) +10003826: cc19 beqz s0,10003844 <__wrap_putchar+0x72> +10003828: 401c lw a5,0(s0) +1000382a: 4605 li a2,1 +1000382c: 00f10593 addi a1,sp,15 +10003830: 8522 mv a0,s0 +10003832: dbed beqz a5,10003824 <__wrap_putchar+0x52> +10003834: 8141a783 lw a5,-2028(gp) # 20002e68 +10003838: c399 beqz a5,1000383e <__wrap_putchar+0x6c> +1000383a: fef415e3 bne s0,a5,10003824 <__wrap_putchar+0x52> +1000383e: 39e5 jal 10003536 +10003840: 4800 lw s0,16(s0) +10003842: f07d bnez s0,10003828 <__wrap_putchar+0x56> +10003844: 5902 lw s2,32(sp) +10003846: 00099a63 bnez s3,1000385a <__wrap_putchar+0x88> +1000384a: 50b2 lw ra,44(sp) +1000384c: 5422 lw s0,40(sp) +1000384e: 49f2 lw s3,28(sp) +10003850: 4a62 lw s4,24(sp) +10003852: 8526 mv a0,s1 +10003854: 5492 lw s1,36(sp) +10003856: 6145 addi sp,sp,48 +10003858: 8082 ret +1000385a: c44a0513 addi a0,s4,-956 +1000385e: 0fffd097 auipc ra,0xfffd +10003862: 89c080e7 jalr -1892(ra) # 200000fa +10003866: 50b2 lw ra,44(sp) +10003868: 5422 lw s0,40(sp) +1000386a: 49f2 lw s3,28(sp) +1000386c: 4a62 lw s4,24(sp) +1000386e: 8526 mv a0,s1 +10003870: 5492 lw s1,36(sp) +10003872: 6145 addi sp,sp,48 +10003874: 8082 ret + +10003876 <__wrap_puts>: +10003876: 1141 addi sp,sp,-16 +10003878: c606 sw ra,12(sp) +1000387a: c422 sw s0,8(sp) +1000387c: c226 sw s1,4(sp) +1000387e: 842a mv s0,a0 +10003880: 2e31 jal 10003b9c +10003882: 84aa mv s1,a0 +10003884: 4685 li a3,1 +10003886: 8522 mv a0,s0 +10003888: 85a6 mv a1,s1 +1000388a: 8636 mv a2,a3 +1000388c: 3d09 jal 1000369e +1000388e: 8181a403 lw s0,-2024(gp) # 20002e6c +10003892: c411 beqz s0,1000389e <__wrap_puts+0x28> +10003894: 405c lw a5,4(s0) +10003896: cb91 beqz a5,100038aa <__wrap_puts+0x34> +10003898: 9782 jalr a5 +1000389a: 4800 lw s0,16(s0) +1000389c: fc65 bnez s0,10003894 <__wrap_puts+0x1e> +1000389e: 40b2 lw ra,12(sp) +100038a0: 4422 lw s0,8(sp) +100038a2: 8526 mv a0,s1 +100038a4: 4492 lw s1,4(sp) +100038a6: 0141 addi sp,sp,16 +100038a8: 8082 ret +100038aa: 4800 lw s0,16(s0) +100038ac: f465 bnez s0,10003894 <__wrap_puts+0x1e> +100038ae: 40b2 lw ra,12(sp) +100038b0: 4422 lw s0,8(sp) +100038b2: 8526 mv a0,s1 +100038b4: 4492 lw s1,4(sp) +100038b6: 0141 addi sp,sp,16 +100038b8: 8082 ret + +100038ba <__wrap_vprintf>: +100038ba: 7171 addi sp,sp,-176 +100038bc: d522 sw s0,168(sp) +100038be: d326 sw s1,164(sp) +100038c0: d706 sw ra,172(sp) +100038c2: d14a sw s2,160(sp) +100038c4: cf4e sw s3,156(sp) +100038c6: cb56 sw s5,148(sp) +100038c8: 842a mv s0,a0 +100038ca: 84ae mv s1,a1 +100038cc: cddfd0ef jal 100015a8 +100038d0: 000f47b7 lui a5,0xf4 +100038d4: 24078793 addi a5,a5,576 # f4240 +100038d8: 97aa add a5,a5,a0 +100038da: 00a7b633 sltu a2,a5,a0 +100038de: 80000737 lui a4,0x80000 +100038e2: 962e add a2,a2,a1 +100038e4: 177d addi a4,a4,-1 # 7fffffff <__StackTop+0x5ff7dfff> +100038e6: 85be mv a1,a5 +100038e8: 00c77463 bgeu a4,a2,100038f0 <__wrap_vprintf+0x36> +100038ec: 863a mv a2,a4 +100038ee: 55fd li a1,-1 +100038f0: 200039b7 lui s3,0x20003 +100038f4: c4498513 addi a0,s3,-956 # 20002c44 +100038f8: 0fffc097 auipc ra,0xfffc +100038fc: 798080e7 jalr 1944(ra) # 20000090 +10003900: 892a mv s2,a0 +10003902: 10003537 lui a0,0x10003 +10003906: 86a6 mv a3,s1 +10003908: 8622 mv a2,s0 +1000390a: 006c addi a1,sp,12 +1000390c: 62650513 addi a0,a0,1574 # 10003626 +10003910: c602 sw zero,12(sp) +10003912: 369d jal 10003478 +10003914: 47b2 lw a5,12(sp) +10003916: 8181a403 lw s0,-2024(gp) # 20002e6c +1000391a: 84aa mv s1,a0 +1000391c: c3b9 beqz a5,10003962 <__wrap_vprintf+0xa8> +1000391e: cd52 sw s4,152(sp) +10003920: e015 bnez s0,10003944 <__wrap_vprintf+0x8a> +10003922: 4a6a lw s4,152(sp) +10003924: c602 sw zero,12(sp) +10003926: 04091863 bnez s2,10003976 <__wrap_vprintf+0xbc> +1000392a: 50ba lw ra,172(sp) +1000392c: 542a lw s0,168(sp) +1000392e: 590a lw s2,160(sp) +10003930: 49fa lw s3,156(sp) +10003932: 4ada lw s5,148(sp) +10003934: 8526 mv a0,s1 +10003936: 549a lw s1,164(sp) +10003938: 614d addi sp,sp,176 +1000393a: 8082 ret +1000393c: 4632 lw a2,12(sp) +1000393e: 3ee5 jal 10003536 +10003940: 4800 lw s0,16(s0) +10003942: cc01 beqz s0,1000395a <__wrap_vprintf+0xa0> +10003944: 401c lw a5,0(s0) +10003946: 080c addi a1,sp,16 +10003948: 8522 mv a0,s0 +1000394a: dbfd beqz a5,10003940 <__wrap_vprintf+0x86> +1000394c: 8141a783 lw a5,-2028(gp) # 20002e68 +10003950: d7f5 beqz a5,1000393c <__wrap_vprintf+0x82> +10003952: fe8785e3 beq a5,s0,1000393c <__wrap_vprintf+0x82> +10003956: 4800 lw s0,16(s0) +10003958: f475 bnez s0,10003944 <__wrap_vprintf+0x8a> +1000395a: 8181a403 lw s0,-2024(gp) # 20002e6c +1000395e: 4a6a lw s4,152(sp) +10003960: c602 sw zero,12(sp) +10003962: d071 beqz s0,10003926 <__wrap_vprintf+0x6c> +10003964: 405c lw a5,4(s0) +10003966: c791 beqz a5,10003972 <__wrap_vprintf+0xb8> +10003968: 9782 jalr a5 +1000396a: 4800 lw s0,16(s0) +1000396c: dc4d beqz s0,10003926 <__wrap_vprintf+0x6c> +1000396e: 405c lw a5,4(s0) +10003970: ffe5 bnez a5,10003968 <__wrap_vprintf+0xae> +10003972: 4800 lw s0,16(s0) +10003974: b7fd j 10003962 <__wrap_vprintf+0xa8> +10003976: c4498513 addi a0,s3,-956 +1000397a: 0fffc097 auipc ra,0xfffc +1000397e: 780080e7 jalr 1920(ra) # 200000fa +10003982: b765 j 1000392a <__wrap_vprintf+0x70> + +10003984 <__wrap_printf>: +10003984: 7139 addi sp,sp,-64 +10003986: 02410313 addi t1,sp,36 +1000398a: d22e sw a1,36(sp) +1000398c: 859a mv a1,t1 +1000398e: ce06 sw ra,28(sp) +10003990: d432 sw a2,40(sp) +10003992: d636 sw a3,44(sp) +10003994: d83a sw a4,48(sp) +10003996: da3e sw a5,52(sp) +10003998: dc42 sw a6,56(sp) +1000399a: de46 sw a7,60(sp) +1000399c: c61a sw t1,12(sp) +1000399e: 3f31 jal 100038ba <__wrap_vprintf> +100039a0: 40f2 lw ra,28(sp) +100039a2: 6121 addi sp,sp,64 +100039a4: 8082 ret + +100039a6 : +100039a6: 02b05e63 blez a1,100039e2 +100039aa: 8241a703 lw a4,-2012(gp) # 20002e78 +100039ae: bff887b7 lui a5,0xbff88 +100039b2: 97ba add a5,a5,a4 +100039b4: 0017b793 seqz a5,a5 +100039b8: 80c18693 addi a3,gp,-2036 # 20002e60 +100039bc: 20d7a7b3 sh1add a5,a5,a3 +100039c0: 00079803 lh a6,0(a5) # bff88000 <__StackTop+0x9ff06000> +100039c4: 00b50633 add a2,a0,a1 +100039c8: 45b5 li a1,13 +100039ca: 00054683 lbu a3,0(a0) +100039ce: 00d80b63 beq a6,a3,100039e4 +100039d2: 4f1c lw a5,24(a4) +100039d4: 0207f793 andi a5,a5,32 +100039d8: ffed bnez a5,100039d2 +100039da: c314 sw a3,0(a4) +100039dc: 0505 addi a0,a0,1 +100039de: fec516e3 bne a0,a2,100039ca +100039e2: 8082 ret +100039e4: 4f1c lw a5,24(a4) +100039e6: 0207f793 andi a5,a5,32 +100039ea: ffed bnez a5,100039e4 +100039ec: c30c sw a1,0(a4) +100039ee: b7d5 j 100039d2 + +100039f0 : +100039f0: 8201a803 lw a6,-2016(gp) # 20002e74 +100039f4: 862a mv a2,a0 +100039f6: 06b05163 blez a1,10003a58 +100039fa: 8241a703 lw a4,-2012(gp) # 20002e78 +100039fe: 4501 li a0,0 +10003a00: 4f1c lw a5,24(a4) +10003a02: 8bc1 andi a5,a5,16 +10003a04: eb9d bnez a5,10003a3a +10003a06: 0505 addi a0,a0,1 +10003a08: 4f1c lw a5,24(a4) +10003a0a: 8bc1 andi a5,a5,16 +10003a0c: fff5 bnez a5,10003a08 +10003a0e: 4314 lw a3,0(a4) +10003a10: 00a607b3 add a5,a2,a0 +10003a14: fed78fa3 sb a3,-1(a5) +10003a18: fea594e3 bne a1,a0,10003a00 +10003a1c: 00080d63 beqz a6,10003a36 +10003a20: 05000793 li a5,80 +10003a24: df1c sw a5,56(a4) +10003a26: 5b5c lw a5,52(a4) +10003a28: 6685 lui a3,0x1 +10003a2a: 03468693 addi a3,a3,52 # 1034 +10003a2e: 0387f793 andi a5,a5,56 +10003a32: 9736 add a4,a4,a3 +10003a34: c31c sw a5,0(a4) +10003a36: 852e mv a0,a1 +10003a38: 8082 ret +10003a3a: 00080d63 beqz a6,10003a54 +10003a3e: 05000793 li a5,80 +10003a42: df1c sw a5,56(a4) +10003a44: 5b5c lw a5,52(a4) +10003a46: 6685 lui a3,0x1 +10003a48: 03468693 addi a3,a3,52 # 1034 +10003a4c: 0387f793 andi a5,a5,56 +10003a50: 9736 add a4,a4,a3 +10003a52: c31c sw a5,0(a4) +10003a54: c10d beqz a0,10003a76 +10003a56: 8082 ret +10003a58: 00080f63 beqz a6,10003a76 +10003a5c: 8241a783 lw a5,-2012(gp) # 20002e78 +10003a60: 05000713 li a4,80 +10003a64: 6685 lui a3,0x1 +10003a66: df98 sw a4,56(a5) +10003a68: 5bd8 lw a4,52(a5) +10003a6a: 03468693 addi a3,a3,52 # 1034 +10003a6e: 97b6 add a5,a5,a3 +10003a70: 03877713 andi a4,a4,56 +10003a74: c398 sw a4,0(a5) +10003a76: 5575 li a0,-3 +10003a78: 8082 ret + +10003a7a : +10003a7a: 8201a783 lw a5,-2016(gp) # 20002e74 +10003a7e: cb81 beqz a5,10003a8e +10003a80: 8241a703 lw a4,-2012(gp) # 20002e78 +10003a84: 81c1a503 lw a0,-2020(gp) # 20002e70 +10003a88: 02072c23 sw zero,56(a4) +10003a8c: 8782 jr a5 +10003a8e: 8082 ret + +10003a90 : +10003a90: 8241a703 lw a4,-2012(gp) # 20002e78 +10003a94: 4f1c lw a5,24(a4) +10003a96: 8ba1 andi a5,a5,8 +10003a98: fff5 bnez a5,10003a94 +10003a9a: 8082 ret + +10003a9c : +10003a9c: 1141 addi sp,sp,-16 +10003a9e: c04a sw s2,0(sp) +10003aa0: 8241a603 lw a2,-2012(gp) # 20002e78 +10003aa4: 400787b7 lui a5,0x40078 +10003aa8: c422 sw s0,8(sp) +10003aaa: 40f607b3 sub a5,a2,a5 +10003aae: 0017b793 seqz a5,a5 +10003ab2: c226 sw s1,4(sp) +10003ab4: c606 sw ra,12(sp) +10003ab6: 02178413 addi s0,a5,33 # 40078021 <__StackTop+0x1fff6021> +10003aba: 8201a783 lw a5,-2016(gp) # 20002e74 +10003abe: c901 beqz a0,10003ace +10003ac0: cf9d beqz a5,10003afe +10003ac2: 40b2 lw ra,12(sp) +10003ac4: 4422 lw s0,8(sp) +10003ac6: 4492 lw s1,4(sp) +10003ac8: 4902 lw s2,0(sp) +10003aca: 0141 addi sp,sp,16 +10003acc: 8082 ret +10003ace: dbf5 beqz a5,10003ac2 +10003ad0: 8522 mv a0,s0 +10003ad2: 02062c23 sw zero,56(a2) +10003ad6: 4581 li a1,0 +10003ad8: 929fc0ef jal 10000400 +10003adc: 100045b7 lui a1,0x10004 +10003ae0: 8522 mv a0,s0 +10003ae2: a7a58593 addi a1,a1,-1414 # 10003a7a +10003ae6: 9d9fc0ef jal 100004be +10003aea: 40b2 lw ra,12(sp) +10003aec: 4422 lw s0,8(sp) +10003aee: 8201a023 sw zero,-2016(gp) # 20002e74 +10003af2: 8001ae23 sw zero,-2020(gp) # 20002e70 +10003af6: 4492 lw s1,4(sp) +10003af8: 4902 lw s2,0(sp) +10003afa: 0141 addi sp,sp,16 +10003afc: 8082 ret +10003afe: 86ae mv a3,a1 +10003b00: 100045b7 lui a1,0x10004 +10003b04: 872a mv a4,a0 +10003b06: 8522 mv a0,s0 +10003b08: a7a58593 addi a1,a1,-1414 # 10003a7a +10003b0c: 82e1a023 sw a4,-2016(gp) # 20002e74 +10003b10: 80d1ae23 sw a3,-2020(gp) # 20002e70 +10003b14: 923fc0ef jal 10000436 +10003b18: 8522 mv a0,s0 +10003b1a: 4585 li a1,1 +10003b1c: 8e5fc0ef jal 10000400 +10003b20: 8241a783 lw a5,-2012(gp) # 20002e78 +10003b24: 05000713 li a4,80 +10003b28: 6685 lui a3,0x1 +10003b2a: df98 sw a4,56(a5) +10003b2c: 5bd8 lw a4,52(a5) +10003b2e: 40b2 lw ra,12(sp) +10003b30: 4422 lw s0,8(sp) +10003b32: 03468693 addi a3,a3,52 # 1034 +10003b36: 97b6 add a5,a5,a3 +10003b38: 03877713 andi a4,a4,56 +10003b3c: c398 sw a4,0(a5) +10003b3e: 4492 lw s1,4(sp) +10003b40: 4902 lw s2,0(sp) +10003b42: 0141 addi sp,sp,16 +10003b44: 8082 ret + +10003b46 : +10003b46: 10004637 lui a2,0x10004 +10003b4a: 10004737 lui a4,0x10004 +10003b4e: 100047b7 lui a5,0x10004 +10003b52: 1141 addi sp,sp,-16 +10003b54: 0d464603 lbu a2,212(a2) # 100040d4 <__bi_ptr45.13> +10003b58: 0d074703 lbu a4,208(a4) # 100040d0 <__bi_ptr49.12> +10003b5c: 0cc7c783 lbu a5,204(a5) # 100040cc <__bi_ptr50.11> +10003b60: c422 sw s0,8(sp) +10003b62: 400706b7 lui a3,0x40070 +10003b66: 4589 li a1,2 +10003b68: 4501 li a0,0 +10003b6a: c606 sw ra,12(sp) +10003b6c: 82d1a223 sw a3,-2012(gp) # 20002e78 +10003b70: f46fc0ef jal 100002b6 +10003b74: 4589 li a1,2 +10003b76: 4505 li a0,1 +10003b78: f3efc0ef jal 100002b6 +10003b7c: 8241a503 lw a0,-2012(gp) # 20002e78 +10003b80: 65f1 lui a1,0x1c +10003b82: 20058593 addi a1,a1,512 # 1c200 +10003b86: abffd0ef jal 10001644 +10003b8a: 4422 lw s0,8(sp) +10003b8c: 40b2 lw ra,12(sp) +10003b8e: 20003537 lui a0,0x20003 +10003b92: c2850513 addi a0,a0,-984 # 20002c28 +10003b96: 4585 li a1,1 +10003b98: 0141 addi sp,sp,16 +10003b9a: b109 j 1000379c + +10003b9c : +10003b9c: 00357793 andi a5,a0,3 +10003ba0: 872a mv a4,a0 +10003ba2: ef9d bnez a5,10003be0 +10003ba4: 7f7f86b7 lui a3,0x7f7f8 +10003ba8: f7f68693 addi a3,a3,-129 # 7f7f7f7f <__StackTop+0x5f775f7f> +10003bac: 55fd li a1,-1 +10003bae: 4310 lw a2,0(a4) +10003bb0: 0711 addi a4,a4,4 +10003bb2: 00d677b3 and a5,a2,a3 +10003bb6: 97b6 add a5,a5,a3 +10003bb8: 8fd1 or a5,a5,a2 +10003bba: 8fd5 or a5,a5,a3 +10003bbc: feb789e3 beq a5,a1,10003bae +10003bc0: ffc74683 lbu a3,-4(a4) +10003bc4: 40a707b3 sub a5,a4,a0 +10003bc8: ca8d beqz a3,10003bfa +10003bca: ffd74683 lbu a3,-3(a4) +10003bce: c29d beqz a3,10003bf4 +10003bd0: ffe74503 lbu a0,-2(a4) +10003bd4: 00a03533 snez a0,a0 +10003bd8: 953e add a0,a0,a5 +10003bda: 1579 addi a0,a0,-2 +10003bdc: 8082 ret +10003bde: d2f9 beqz a3,10003ba4 +10003be0: 00074783 lbu a5,0(a4) +10003be4: 0705 addi a4,a4,1 +10003be6: 00377693 andi a3,a4,3 +10003bea: fbf5 bnez a5,10003bde +10003bec: 8f09 sub a4,a4,a0 +10003bee: fff70513 addi a0,a4,-1 +10003bf2: 8082 ret +10003bf4: ffd78513 addi a0,a5,-3 +10003bf8: 8082 ret +10003bfa: ffc78513 addi a0,a5,-4 +10003bfe: 8082 ret + +10003c00 <__pre_init_runtime_init_bootrom_reset>: +10003c00: 19fe 1000 .... + +10003c04 <__pre_init_runtime_init_early_resets>: +10003c04: 199e 1000 .... + +10003c08 <__pre_init_runtime_init_usb_power_down>: +10003c08: 19c8 1000 .... + +10003c0c <__pre_init_runtime_init_clocks>: +10003c0c: 1a2e 1000 .... + +10003c10 <__pre_init_runtime_init_post_clock_resets>: +10003c10: 19e2 1000 .... + +10003c14 <__pre_init_runtime_init_boot_locks_reset>: +10003c14: 1916 1000 .... + +10003c18 <__pre_init_runtime_init_spin_locks_reset>: +10003c18: 1a2a 1000 *... + +10003c1c <__pre_init_runtime_init_bootrom_locking_enable>: +10003c1c: 1904 1000 .... + +10003c20 <__pre_init_runtime_init_mutex>: +10003c20: 0930 1000 0... + +10003c24 <__pre_init_runtime_init_default_alarm_pool>: +10003c24: 0d78 1000 x... + +10003c28 <__pre_init_first_per_core_initializer>: +10003c28: 1958 1000 X... + +10003c2c <__pre_init_runtime_init_per_core_bootrom_reset>: +10003c2c: 1a14 1000 .... + +10003c30 <__pre_init_runtime_init_per_core_h3_irq_registers>: +10003c30: 34cc 1000 .4.. + +10003c34 <__pre_init_runtime_init_per_core_irq_priorities>: +10003c34: 03cc 1000 .... + +10003c38 <__frame_dummy_init_array_entry>: +10003c38: 015a 1000 Z... + +Disassembly of section .data: + +20000000 : +20000000: 1101 addi sp,sp,-32 +20000002: d00007b7 lui a5,0xd0000 +20000006: cc22 sw s0,24(sp) +20000008: ca26 sw s1,20(sp) +2000000a: c84a sw s2,16(sp) +2000000c: c64e sw s3,12(sp) +2000000e: ce06 sw ra,28(sp) +20000010: 0007a983 lw s3,0(a5) # d0000000 <__StackTop+0xaff7e000> +20000014: 842a mv s0,a0 +20000016: 892e mv s2,a1 +20000018: 84b2 mv s1,a2 +2000001a: a831 j 20000036 +2000001c: 0330000f fence rw,rw +20000020: 00070023 sb zero,0(a4) +20000024: 3007a073 csrs mstatus,a5 +20000028: 854a mv a0,s2 +2000002a: 85a6 mv a1,s1 +2000002c: f0001097 auipc ra,0xf0001 +20000030: 20e080e7 jalr 526(ra) # 1000123a +20000034: e531 bnez a0,20000080 +20000036: 401c lw a5,0(s0) +20000038: 30047773 csrrci a4,mstatus,8 +2000003c: 00379693 slli a3,a5,0x3 +20000040: 28d016b3 bset a3,zero,a3 +20000044: 9bf1 andi a5,a5,-4 +20000046: 44d7a62f amoor.w.aq a2,a3,(a5) +2000004a: 8e75 and a2,a2,a3 +2000004c: fe6d bnez a2,20000046 +2000004e: 0330000f fence rw,rw +20000052: 00440683 lb a3,4(s0) +20000056: 00877793 andi a5,a4,8 +2000005a: 4018 lw a4,0(s0) +2000005c: fc06d0e3 bgez a3,2000001c +20000060: 01340223 sb s3,4(s0) +20000064: 0330000f fence rw,rw +20000068: 00070023 sb zero,0(a4) +2000006c: 3007a073 csrs mstatus,a5 +20000070: 40f2 lw ra,28(sp) +20000072: 4462 lw s0,24(sp) +20000074: 44d2 lw s1,20(sp) +20000076: 4942 lw s2,16(sp) +20000078: 49b2 lw s3,12(sp) +2000007a: 4505 li a0,1 +2000007c: 6105 addi sp,sp,32 +2000007e: 8082 ret +20000080: 40f2 lw ra,28(sp) +20000082: 4462 lw s0,24(sp) +20000084: 44d2 lw s1,20(sp) +20000086: 4942 lw s2,16(sp) +20000088: 49b2 lw s3,12(sp) +2000008a: 4501 li a0,0 +2000008c: 6105 addi sp,sp,32 +2000008e: 8082 ret + +20000090 : +20000090: 411c lw a5,0(a0) +20000092: 300476f3 csrrci a3,mstatus,8 +20000096: 00379813 slli a6,a5,0x3 +2000009a: 29001833 bset a6,zero,a6 +2000009e: 9bf1 andi a5,a5,-4 +200000a0: 4507a8af amoor.w.aq a7,a6,(a5) +200000a4: 0108f8b3 and a7,a7,a6 +200000a8: fe089ce3 bnez a7,200000a0 +200000ac: 0330000f fence rw,rw +200000b0: 00450803 lb a6,4(a0) +200000b4: 0086f793 andi a5,a3,8 +200000b8: 4114 lw a3,0(a0) +200000ba: 02084263 bltz a6,200000de +200000be: 0330000f fence rw,rw +200000c2: 00068023 sb zero,0(a3) +200000c6: 3007a073 csrs mstatus,a5 +200000ca: d00007b7 lui a5,0xd0000 +200000ce: 00078703 lb a4,0(a5) # d0000000 <__StackTop+0xaff7e000> +200000d2: 4781 li a5,0 +200000d4: 01071463 bne a4,a6,200000dc +200000d8: 853e mv a0,a5 +200000da: 8082 ret +200000dc: b715 j 20000000 +200000de: d0000637 lui a2,0xd0000 +200000e2: 4210 lw a2,0(a2) +200000e4: 00c50223 sb a2,4(a0) +200000e8: 0330000f fence rw,rw +200000ec: 00068023 sb zero,0(a3) +200000f0: 3007a073 csrs mstatus,a5 +200000f4: 4785 li a5,1 +200000f6: 853e mv a0,a5 +200000f8: 8082 ret + +200000fa : +200000fa: 411c lw a5,0(a0) +200000fc: 30047773 csrrci a4,mstatus,8 +20000100: 00379693 slli a3,a5,0x3 +20000104: 28d016b3 bset a3,zero,a3 +20000108: 9bf1 andi a5,a5,-4 +2000010a: 44d7a62f amoor.w.aq a2,a3,(a5) +2000010e: 8e75 and a2,a2,a3 +20000110: fe6d bnez a2,2000010a +20000112: 0330000f fence rw,rw +20000116: 57fd li a5,-1 +20000118: 00f50223 sb a5,4(a0) +2000011c: 411c lw a5,0(a0) +2000011e: 0330000f fence rw,rw +20000122: 00078023 sb zero,0(a5) +20000126: 00877793 andi a5,a4,8 +2000012a: 3007a073 csrs mstatus,a5 +2000012e: 00102033 sgtz zero,ra +20000132: 8082 ret + +20000134 <__udivdi3>: +20000134: 8832 mv a6,a2 +20000136: 88aa mv a7,a0 +20000138: 872e mv a4,a1 +2000013a: ead5 bnez a3,200001ee <__udivdi3+0xba> +2000013c: 0ec5ff63 bgeu a1,a2,2000023a <__udivdi3+0x106> +20000140: 67c1 lui a5,0x10 +20000142: 18f66c63 bltu a2,a5,200002da <__udivdi3+0x1a6> +20000146: 010007b7 lui a5,0x1000 +2000014a: 46e1 li a3,24 +2000014c: 00f67363 bgeu a2,a5,20000152 <__udivdi3+0x1e> +20000150: 46c1 li a3,16 +20000152: 200037b7 lui a5,0x20003 +20000156: 00d65333 srl t1,a2,a3 +2000015a: 8e478793 addi a5,a5,-1820 # 200028e4 <__clz_tab> +2000015e: 979a add a5,a5,t1 +20000160: 0007c783 lbu a5,0(a5) +20000164: 02000313 li t1,32 +20000168: 97b6 add a5,a5,a3 +2000016a: 40f306b3 sub a3,t1,a5 +2000016e: 00f30b63 beq t1,a5,20000184 <__udivdi3+0x50> +20000172: 00d59733 sll a4,a1,a3 +20000176: 00f557b3 srl a5,a0,a5 +2000017a: 8f5d or a4,a4,a5 +2000017c: 00d61833 sll a6,a2,a3 +20000180: 00d518b3 sll a7,a0,a3 +20000184: 01085613 srli a2,a6,0x10 +20000188: 02c75533 divu a0,a4,a2 +2000018c: 01081693 slli a3,a6,0x10 +20000190: 82c1 srli a3,a3,0x10 +20000192: 0108d793 srli a5,a7,0x10 +20000196: 02c77733 remu a4,a4,a2 +2000019a: 02a685b3 mul a1,a3,a0 +2000019e: 0742 slli a4,a4,0x10 +200001a0: 8fd9 or a5,a5,a4 +200001a2: 00b7fa63 bgeu a5,a1,200001b6 <__udivdi3+0x82> +200001a6: 97c2 add a5,a5,a6 +200001a8: fff50713 addi a4,a0,-1 +200001ac: 0107e463 bltu a5,a6,200001b4 <__udivdi3+0x80> +200001b0: 2eb7ef63 bltu a5,a1,200004ae <__udivdi3+0x37a> +200001b4: 853a mv a0,a4 +200001b6: 8f8d sub a5,a5,a1 +200001b8: 02c7d733 divu a4,a5,a2 +200001bc: 08c2 slli a7,a7,0x10 +200001be: 0108d893 srli a7,a7,0x10 +200001c2: 02c7f7b3 remu a5,a5,a2 +200001c6: 02e686b3 mul a3,a3,a4 +200001ca: 07c2 slli a5,a5,0x10 +200001cc: 00f8e8b3 or a7,a7,a5 +200001d0: 00d8fb63 bgeu a7,a3,200001e6 <__udivdi3+0xb2> +200001d4: 98c2 add a7,a7,a6 +200001d6: fff70793 addi a5,a4,-1 +200001da: 0108e563 bltu a7,a6,200001e4 <__udivdi3+0xb0> +200001de: 1779 addi a4,a4,-2 +200001e0: 00d8e363 bltu a7,a3,200001e6 <__udivdi3+0xb2> +200001e4: 873e mv a4,a5 +200001e6: 0542 slli a0,a0,0x10 +200001e8: 8d59 or a0,a0,a4 +200001ea: 4581 li a1,0 +200001ec: 8082 ret +200001ee: 00d5f563 bgeu a1,a3,200001f8 <__udivdi3+0xc4> +200001f2: 4581 li a1,0 +200001f4: 4501 li a0,0 +200001f6: 8082 ret +200001f8: 67c1 lui a5,0x10 +200001fa: 18f6e863 bltu a3,a5,2000038a <__udivdi3+0x256> +200001fe: 010007b7 lui a5,0x1000 +20000202: 4861 li a6,24 +20000204: 00f6f363 bgeu a3,a5,2000020a <__udivdi3+0xd6> +20000208: 4841 li a6,16 +2000020a: 200037b7 lui a5,0x20003 +2000020e: 0106d733 srl a4,a3,a6 +20000212: 8e478793 addi a5,a5,-1820 # 200028e4 <__clz_tab> +20000216: 97ba add a5,a5,a4 +20000218: 0007c703 lbu a4,0(a5) +2000021c: 02000793 li a5,32 +20000220: 9742 add a4,a4,a6 +20000222: 40e788b3 sub a7,a5,a4 +20000226: 16e79863 bne a5,a4,20000396 <__udivdi3+0x262> +2000022a: 26b6e463 bltu a3,a1,20000492 <__udivdi3+0x35e> +2000022e: 00c53533 sltu a0,a0,a2 +20000232: 00153513 seqz a0,a0 +20000236: 4581 li a1,0 +20000238: 8082 ret +2000023a: c655 beqz a2,200002e6 <__udivdi3+0x1b2> +2000023c: 67c1 lui a5,0x10 +2000023e: 24f67263 bgeu a2,a5,20000482 <__udivdi3+0x34e> +20000242: 10063713 sltiu a4,a2,256 +20000246: 00173713 seqz a4,a4 +2000024a: 070e slli a4,a4,0x3 +2000024c: 00e656b3 srl a3,a2,a4 +20000250: 200037b7 lui a5,0x20003 +20000254: 8e478793 addi a5,a5,-1820 # 200028e4 <__clz_tab> +20000258: 97b6 add a5,a5,a3 +2000025a: 0007c783 lbu a5,0(a5) +2000025e: 02000693 li a3,32 +20000262: 97ba add a5,a5,a4 +20000264: 40f68eb3 sub t4,a3,a5 +20000268: 08f69f63 bne a3,a5,20000306 <__udivdi3+0x1d2> +2000026c: 40c587b3 sub a5,a1,a2 +20000270: 01065693 srli a3,a2,0x10 +20000274: 0642 slli a2,a2,0x10 +20000276: 8241 srli a2,a2,0x10 +20000278: 4585 li a1,1 +2000027a: 02d7d533 divu a0,a5,a3 +2000027e: 0108d713 srli a4,a7,0x10 +20000282: 02d7f7b3 remu a5,a5,a3 +20000286: 02c50333 mul t1,a0,a2 +2000028a: 07c2 slli a5,a5,0x10 +2000028c: 8fd9 or a5,a5,a4 +2000028e: 0067fa63 bgeu a5,t1,200002a2 <__udivdi3+0x16e> +20000292: 97c2 add a5,a5,a6 +20000294: fff50713 addi a4,a0,-1 +20000298: 0107e463 bltu a5,a6,200002a0 <__udivdi3+0x16c> +2000029c: 2067e663 bltu a5,t1,200004a8 <__udivdi3+0x374> +200002a0: 853a mv a0,a4 +200002a2: 406787b3 sub a5,a5,t1 +200002a6: 02d7d733 divu a4,a5,a3 +200002aa: 08c2 slli a7,a7,0x10 +200002ac: 0108d893 srli a7,a7,0x10 +200002b0: 02d7f7b3 remu a5,a5,a3 +200002b4: 02c70633 mul a2,a4,a2 +200002b8: 07c2 slli a5,a5,0x10 +200002ba: 00f8e8b3 or a7,a7,a5 +200002be: 00c8fb63 bgeu a7,a2,200002d4 <__udivdi3+0x1a0> +200002c2: 98c2 add a7,a7,a6 +200002c4: fff70793 addi a5,a4,-1 +200002c8: 0108e563 bltu a7,a6,200002d2 <__udivdi3+0x19e> +200002cc: 1779 addi a4,a4,-2 +200002ce: 00c8e363 bltu a7,a2,200002d4 <__udivdi3+0x1a0> +200002d2: 873e mv a4,a5 +200002d4: 0542 slli a0,a0,0x10 +200002d6: 8d59 or a0,a0,a4 +200002d8: 8082 ret +200002da: 10063693 sltiu a3,a2,256 +200002de: 0016b693 seqz a3,a3 +200002e2: 068e slli a3,a3,0x3 +200002e4: b5bd j 20000152 <__udivdi3+0x1e> +200002e6: 200037b7 lui a5,0x20003 +200002ea: 4681 li a3,0 +200002ec: 8e478793 addi a5,a5,-1820 # 200028e4 <__clz_tab> +200002f0: 97b6 add a5,a5,a3 +200002f2: 0007c783 lbu a5,0(a5) +200002f6: 4701 li a4,0 +200002f8: 02000693 li a3,32 +200002fc: 97ba add a5,a5,a4 +200002fe: 40f68eb3 sub t4,a3,a5 +20000302: f6f685e3 beq a3,a5,2000026c <__udivdi3+0x138> +20000306: 01d61833 sll a6,a2,t4 +2000030a: 00f5d333 srl t1,a1,a5 +2000030e: 01085693 srli a3,a6,0x10 +20000312: 02d35e33 divu t3,t1,a3 +20000316: 01081613 slli a2,a6,0x10 +2000031a: 01d595b3 sll a1,a1,t4 +2000031e: 8241 srli a2,a2,0x10 +20000320: 00f557b3 srl a5,a0,a5 +20000324: 8fcd or a5,a5,a1 +20000326: 0107d713 srli a4,a5,0x10 +2000032a: 01d518b3 sll a7,a0,t4 +2000032e: 02d37333 remu t1,t1,a3 +20000332: 03c605b3 mul a1,a2,t3 +20000336: 0342 slli t1,t1,0x10 +20000338: 00676733 or a4,a4,t1 +2000033c: 00b77b63 bgeu a4,a1,20000352 <__udivdi3+0x21e> +20000340: 9742 add a4,a4,a6 +20000342: fffe0513 addi a0,t3,-1 +20000346: 15076d63 bltu a4,a6,200004a0 <__udivdi3+0x36c> +2000034a: 14b77b63 bgeu a4,a1,200004a0 <__udivdi3+0x36c> +2000034e: 1e79 addi t3,t3,-2 +20000350: 9742 add a4,a4,a6 +20000352: 8f0d sub a4,a4,a1 +20000354: 02d75533 divu a0,a4,a3 +20000358: 07c2 slli a5,a5,0x10 +2000035a: 83c1 srli a5,a5,0x10 +2000035c: 02d77733 remu a4,a4,a3 +20000360: 02a60333 mul t1,a2,a0 +20000364: 0742 slli a4,a4,0x10 +20000366: 8fd9 or a5,a5,a4 +20000368: 0067fb63 bgeu a5,t1,2000037e <__udivdi3+0x24a> +2000036c: 97c2 add a5,a5,a6 +2000036e: fff50713 addi a4,a0,-1 +20000372: 1307e363 bltu a5,a6,20000498 <__udivdi3+0x364> +20000376: 1267f163 bgeu a5,t1,20000498 <__udivdi3+0x364> +2000037a: 1579 addi a0,a0,-2 +2000037c: 97c2 add a5,a5,a6 +2000037e: 010e1593 slli a1,t3,0x10 +20000382: 8dc9 or a1,a1,a0 +20000384: 406787b3 sub a5,a5,t1 +20000388: bdcd j 2000027a <__udivdi3+0x146> +2000038a: 1006b813 sltiu a6,a3,256 +2000038e: 00183813 seqz a6,a6 +20000392: 080e slli a6,a6,0x3 +20000394: bd9d j 2000020a <__udivdi3+0xd6> +20000396: 00e65e33 srl t3,a2,a4 +2000039a: 011696b3 sll a3,a3,a7 +2000039e: 00de6e33 or t3,t3,a3 +200003a2: 00e5d833 srl a6,a1,a4 +200003a6: 010e5e93 srli t4,t3,0x10 +200003aa: 03d857b3 divu a5,a6,t4 +200003ae: 010e1313 slli t1,t3,0x10 +200003b2: 011595b3 sll a1,a1,a7 +200003b6: 01035313 srli t1,t1,0x10 +200003ba: 00e55733 srl a4,a0,a4 +200003be: 8f4d or a4,a4,a1 +200003c0: 01075693 srli a3,a4,0x10 +200003c4: 01161633 sll a2,a2,a7 +200003c8: 03d87833 remu a6,a6,t4 +200003cc: 02f305b3 mul a1,t1,a5 +200003d0: 0842 slli a6,a6,0x10 +200003d2: 0106e6b3 or a3,a3,a6 +200003d6: 00b6fb63 bgeu a3,a1,200003ec <__udivdi3+0x2b8> +200003da: 96f2 add a3,a3,t3 +200003dc: fff78813 addi a6,a5,-1 +200003e0: 0dc6e263 bltu a3,t3,200004a4 <__udivdi3+0x370> +200003e4: 0cb6f063 bgeu a3,a1,200004a4 <__udivdi3+0x370> +200003e8: 17f9 addi a5,a5,-2 +200003ea: 96f2 add a3,a3,t3 +200003ec: 8e8d sub a3,a3,a1 +200003ee: 03d6d833 divu a6,a3,t4 +200003f2: 0742 slli a4,a4,0x10 +200003f4: 8341 srli a4,a4,0x10 +200003f6: 03d6f6b3 remu a3,a3,t4 +200003fa: 030305b3 mul a1,t1,a6 +200003fe: 06c2 slli a3,a3,0x10 +20000400: 8f55 or a4,a4,a3 +20000402: 00b77b63 bgeu a4,a1,20000418 <__udivdi3+0x2e4> +20000406: 9772 add a4,a4,t3 +20000408: fff80693 addi a3,a6,-1 +2000040c: 09c76863 bltu a4,t3,2000049c <__udivdi3+0x368> +20000410: 08b77663 bgeu a4,a1,2000049c <__udivdi3+0x368> +20000414: 1879 addi a6,a6,-2 +20000416: 9772 add a4,a4,t3 +20000418: 07c2 slli a5,a5,0x10 +2000041a: 01081693 slli a3,a6,0x10 +2000041e: 01061313 slli t1,a2,0x10 +20000422: 0107e7b3 or a5,a5,a6 +20000426: 82c1 srli a3,a3,0x10 +20000428: 01035313 srli t1,t1,0x10 +2000042c: 0107d813 srli a6,a5,0x10 +20000430: 8241 srli a2,a2,0x10 +20000432: 02680e33 mul t3,a6,t1 +20000436: 8f0d sub a4,a4,a1 +20000438: 02668333 mul t1,a3,t1 +2000043c: 02c686b3 mul a3,a3,a2 +20000440: 01035593 srli a1,t1,0x10 +20000444: 96f2 add a3,a3,t3 +20000446: 96ae add a3,a3,a1 +20000448: 02c80833 mul a6,a6,a2 +2000044c: 01c6f463 bgeu a3,t3,20000454 <__udivdi3+0x320> +20000450: 6641 lui a2,0x10 +20000452: 9832 add a6,a6,a2 +20000454: 0106d613 srli a2,a3,0x10 +20000458: 9642 add a2,a2,a6 +2000045a: 02c76063 bltu a4,a2,2000047a <__udivdi3+0x346> +2000045e: 00c70563 beq a4,a2,20000468 <__udivdi3+0x334> +20000462: 853e mv a0,a5 +20000464: 4581 li a1,0 +20000466: 8082 ret +20000468: 0342 slli t1,t1,0x10 +2000046a: 01035313 srli t1,t1,0x10 +2000046e: 06c2 slli a3,a3,0x10 +20000470: 01151533 sll a0,a0,a7 +20000474: 969a add a3,a3,t1 +20000476: fed576e3 bgeu a0,a3,20000462 <__udivdi3+0x32e> +2000047a: fff78513 addi a0,a5,-1 +2000047e: 4581 li a1,0 +20000480: 8082 ret +20000482: 010007b7 lui a5,0x1000 +20000486: 02f67763 bgeu a2,a5,200004b4 <__udivdi3+0x380> +2000048a: 01065693 srli a3,a2,0x10 +2000048e: 4741 li a4,16 +20000490: b3c1 j 20000250 <__udivdi3+0x11c> +20000492: 4581 li a1,0 +20000494: 4505 li a0,1 +20000496: 8082 ret +20000498: 853a mv a0,a4 +2000049a: b5d5 j 2000037e <__udivdi3+0x24a> +2000049c: 8836 mv a6,a3 +2000049e: bfad j 20000418 <__udivdi3+0x2e4> +200004a0: 8e2a mv t3,a0 +200004a2: bd45 j 20000352 <__udivdi3+0x21e> +200004a4: 87c2 mv a5,a6 +200004a6: b799 j 200003ec <__udivdi3+0x2b8> +200004a8: 1579 addi a0,a0,-2 +200004aa: 97c2 add a5,a5,a6 +200004ac: bbdd j 200002a2 <__udivdi3+0x16e> +200004ae: 1579 addi a0,a0,-2 +200004b0: 97c2 add a5,a5,a6 +200004b2: b311 j 200001b6 <__udivdi3+0x82> +200004b4: 01865693 srli a3,a2,0x18 +200004b8: 4761 li a4,24 +200004ba: bb59 j 20000250 <__udivdi3+0x11c> + +200004bc <__umoddi3>: +200004bc: 8832 mv a6,a2 +200004be: 88aa mv a7,a0 +200004c0: 832e mv t1,a1 +200004c2: 872e mv a4,a1 +200004c4: e6cd bnez a3,2000056e <__umoddi3+0xb2> +200004c6: 0ec5ff63 bgeu a1,a2,200005c4 <__umoddi3+0x108> +200004ca: 67c1 lui a5,0x10 +200004cc: 18f66263 bltu a2,a5,20000650 <__umoddi3+0x194> +200004d0: 010007b7 lui a5,0x1000 +200004d4: 46e1 li a3,24 +200004d6: 00f67363 bgeu a2,a5,200004dc <__umoddi3+0x20> +200004da: 46c1 li a3,16 +200004dc: 200037b7 lui a5,0x20003 +200004e0: 00d65333 srl t1,a2,a3 +200004e4: 8e478793 addi a5,a5,-1820 # 200028e4 <__clz_tab> +200004e8: 979a add a5,a5,t1 +200004ea: 0007c783 lbu a5,0(a5) +200004ee: 02000313 li t1,32 +200004f2: 97b6 add a5,a5,a3 +200004f4: 40f306b3 sub a3,t1,a5 +200004f8: 00f30b63 beq t1,a5,2000050e <__umoddi3+0x52> +200004fc: 00d59733 sll a4,a1,a3 +20000500: 00f557b3 srl a5,a0,a5 +20000504: 8f5d or a4,a4,a5 +20000506: 00d61833 sll a6,a2,a3 +2000050a: 00d518b3 sll a7,a0,a3 +2000050e: 01085593 srli a1,a6,0x10 +20000512: 02b75633 divu a2,a4,a1 +20000516: 01081313 slli t1,a6,0x10 +2000051a: 01035313 srli t1,t1,0x10 +2000051e: 0108d793 srli a5,a7,0x10 +20000522: 02b77733 remu a4,a4,a1 +20000526: 02660633 mul a2,a2,t1 +2000052a: 0742 slli a4,a4,0x10 +2000052c: 8fd9 or a5,a5,a4 +2000052e: 00c7f763 bgeu a5,a2,2000053c <__umoddi3+0x80> +20000532: 97c2 add a5,a5,a6 +20000534: 0107e463 bltu a5,a6,2000053c <__umoddi3+0x80> +20000538: 2ec7e463 bltu a5,a2,20000820 <__umoddi3+0x364> +2000053c: 8f91 sub a5,a5,a2 +2000053e: 02b7d733 divu a4,a5,a1 +20000542: 01089513 slli a0,a7,0x10 +20000546: 8141 srli a0,a0,0x10 +20000548: 02b7f7b3 remu a5,a5,a1 +2000054c: 02670733 mul a4,a4,t1 +20000550: 07c2 slli a5,a5,0x10 +20000552: 8d5d or a0,a0,a5 +20000554: 00e57863 bgeu a0,a4,20000564 <__umoddi3+0xa8> +20000558: 9542 add a0,a0,a6 +2000055a: 01056563 bltu a0,a6,20000564 <__umoddi3+0xa8> +2000055e: 00e57363 bgeu a0,a4,20000564 <__umoddi3+0xa8> +20000562: 9542 add a0,a0,a6 +20000564: 8d19 sub a0,a0,a4 +20000566: 00d55533 srl a0,a0,a3 +2000056a: 4581 li a1,0 +2000056c: 8082 ret +2000056e: 00d5f363 bgeu a1,a3,20000574 <__umoddi3+0xb8> +20000572: 8082 ret +20000574: 67c1 lui a5,0x10 +20000576: 16f6eb63 bltu a3,a5,200006ec <__umoddi3+0x230> +2000057a: 010007b7 lui a5,0x1000 +2000057e: 4861 li a6,24 +20000580: 00f6f363 bgeu a3,a5,20000586 <__umoddi3+0xca> +20000584: 4841 li a6,16 +20000586: 200037b7 lui a5,0x20003 +2000058a: 0106d733 srl a4,a3,a6 +2000058e: 8e478793 addi a5,a5,-1820 # 200028e4 <__clz_tab> +20000592: 97ba add a5,a5,a4 +20000594: 0007c703 lbu a4,0(a5) +20000598: 02000793 li a5,32 +2000059c: 9742 add a4,a4,a6 +2000059e: 40e78833 sub a6,a5,a4 +200005a2: 14e79b63 bne a5,a4,200006f8 <__umoddi3+0x23c> +200005a6: 00b6e463 bltu a3,a1,200005ae <__umoddi3+0xf2> +200005aa: 00c56a63 bltu a0,a2,200005be <__umoddi3+0x102> +200005ae: 40c508b3 sub a7,a0,a2 +200005b2: 01153333 sltu t1,a0,a7 +200005b6: 40d586b3 sub a3,a1,a3 +200005ba: 40668333 sub t1,a3,t1 +200005be: 8546 mv a0,a7 +200005c0: 859a mv a1,t1 +200005c2: 8082 ret +200005c4: ce41 beqz a2,2000065c <__umoddi3+0x1a0> +200005c6: 67c1 lui a5,0x10 +200005c8: 24f67063 bgeu a2,a5,20000808 <__umoddi3+0x34c> +200005cc: 10063713 sltiu a4,a2,256 +200005d0: 00173713 seqz a4,a4 +200005d4: 070e slli a4,a4,0x3 +200005d6: 00e656b3 srl a3,a2,a4 +200005da: 200037b7 lui a5,0x20003 +200005de: 8e478793 addi a5,a5,-1820 # 200028e4 <__clz_tab> +200005e2: 97b6 add a5,a5,a3 +200005e4: 0007c783 lbu a5,0(a5) +200005e8: 02000313 li t1,32 +200005ec: 97ba add a5,a5,a4 +200005ee: 40f306b3 sub a3,t1,a5 +200005f2: 08f31563 bne t1,a5,2000067c <__umoddi3+0x1c0> +200005f6: 40c58733 sub a4,a1,a2 +200005fa: 01065313 srli t1,a2,0x10 +200005fe: 0642 slli a2,a2,0x10 +20000600: 8241 srli a2,a2,0x10 +20000602: 026755b3 divu a1,a4,t1 +20000606: 0108d793 srli a5,a7,0x10 +2000060a: 02677733 remu a4,a4,t1 +2000060e: 02c585b3 mul a1,a1,a2 +20000612: 0742 slli a4,a4,0x10 +20000614: 8fd9 or a5,a5,a4 +20000616: 00b7f863 bgeu a5,a1,20000626 <__umoddi3+0x16a> +2000061a: 97c2 add a5,a5,a6 +2000061c: 0107e563 bltu a5,a6,20000626 <__umoddi3+0x16a> +20000620: 00b7f363 bgeu a5,a1,20000626 <__umoddi3+0x16a> +20000624: 97c2 add a5,a5,a6 +20000626: 8f8d sub a5,a5,a1 +20000628: 0267d733 divu a4,a5,t1 +2000062c: 08c2 slli a7,a7,0x10 +2000062e: 0108d893 srli a7,a7,0x10 +20000632: 0267f7b3 remu a5,a5,t1 +20000636: 02c70733 mul a4,a4,a2 +2000063a: 01079513 slli a0,a5,0x10 +2000063e: 00a8e533 or a0,a7,a0 +20000642: f0e56be3 bltu a0,a4,20000558 <__umoddi3+0x9c> +20000646: 8d19 sub a0,a0,a4 +20000648: 00d55533 srl a0,a0,a3 +2000064c: 4581 li a1,0 +2000064e: 8082 ret +20000650: 10063693 sltiu a3,a2,256 +20000654: 0016b693 seqz a3,a3 +20000658: 068e slli a3,a3,0x3 +2000065a: b549 j 200004dc <__umoddi3+0x20> +2000065c: 200037b7 lui a5,0x20003 +20000660: 4681 li a3,0 +20000662: 8e478793 addi a5,a5,-1820 # 200028e4 <__clz_tab> +20000666: 97b6 add a5,a5,a3 +20000668: 0007c783 lbu a5,0(a5) +2000066c: 4701 li a4,0 +2000066e: 02000313 li t1,32 +20000672: 97ba add a5,a5,a4 +20000674: 40f306b3 sub a3,t1,a5 +20000678: f6f30fe3 beq t1,a5,200005f6 <__umoddi3+0x13a> +2000067c: 00d61833 sll a6,a2,a3 +20000680: 00f5de33 srl t3,a1,a5 +20000684: 01085313 srli t1,a6,0x10 +20000688: 026e5eb3 divu t4,t3,t1 +2000068c: 01081613 slli a2,a6,0x10 +20000690: 00d595b3 sll a1,a1,a3 +20000694: 00f55733 srl a4,a0,a5 +20000698: 8241 srli a2,a2,0x10 +2000069a: 8f4d or a4,a4,a1 +2000069c: 01075793 srli a5,a4,0x10 +200006a0: 00d518b3 sll a7,a0,a3 +200006a4: 026e7e33 remu t3,t3,t1 +200006a8: 02ce85b3 mul a1,t4,a2 +200006ac: 0e42 slli t3,t3,0x10 +200006ae: 01c7e7b3 or a5,a5,t3 +200006b2: 00b7f863 bgeu a5,a1,200006c2 <__umoddi3+0x206> +200006b6: 97c2 add a5,a5,a6 +200006b8: 0107e563 bltu a5,a6,200006c2 <__umoddi3+0x206> +200006bc: 00b7f363 bgeu a5,a1,200006c2 <__umoddi3+0x206> +200006c0: 97c2 add a5,a5,a6 +200006c2: 8f8d sub a5,a5,a1 +200006c4: 0267d5b3 divu a1,a5,t1 +200006c8: 0742 slli a4,a4,0x10 +200006ca: 8341 srli a4,a4,0x10 +200006cc: 0267f7b3 remu a5,a5,t1 +200006d0: 02c585b3 mul a1,a1,a2 +200006d4: 07c2 slli a5,a5,0x10 +200006d6: 8f5d or a4,a4,a5 +200006d8: 00b77863 bgeu a4,a1,200006e8 <__umoddi3+0x22c> +200006dc: 9742 add a4,a4,a6 +200006de: 01076563 bltu a4,a6,200006e8 <__umoddi3+0x22c> +200006e2: 00b77363 bgeu a4,a1,200006e8 <__umoddi3+0x22c> +200006e6: 9742 add a4,a4,a6 +200006e8: 8f0d sub a4,a4,a1 +200006ea: bf21 j 20000602 <__umoddi3+0x146> +200006ec: 1006b813 sltiu a6,a3,256 +200006f0: 00183813 seqz a6,a6 +200006f4: 080e slli a6,a6,0x3 +200006f6: bd41 j 20000586 <__umoddi3+0xca> +200006f8: 010696b3 sll a3,a3,a6 +200006fc: 00e658b3 srl a7,a2,a4 +20000700: 00d8e8b3 or a7,a7,a3 +20000704: 00e5d333 srl t1,a1,a4 +20000708: 0108de13 srli t3,a7,0x10 +2000070c: 03c356b3 divu a3,t1,t3 +20000710: 01089e93 slli t4,a7,0x10 +20000714: 010ede93 srli t4,t4,0x10 +20000718: 00e557b3 srl a5,a0,a4 +2000071c: 010595b3 sll a1,a1,a6 +20000720: 8ddd or a1,a1,a5 +20000722: 0105d793 srli a5,a1,0x10 +20000726: 01061633 sll a2,a2,a6 +2000072a: 01051533 sll a0,a0,a6 +2000072e: 03c37333 remu t1,t1,t3 +20000732: 02de8f33 mul t5,t4,a3 +20000736: 0342 slli t1,t1,0x10 +20000738: 0067e7b3 or a5,a5,t1 +2000073c: 01e7fb63 bgeu a5,t5,20000752 <__umoddi3+0x296> +20000740: 97c6 add a5,a5,a7 +20000742: fff68313 addi t1,a3,-1 +20000746: 0d17eb63 bltu a5,a7,2000081c <__umoddi3+0x360> +2000074a: 0de7f963 bgeu a5,t5,2000081c <__umoddi3+0x360> +2000074e: 16f9 addi a3,a3,-2 +20000750: 97c6 add a5,a5,a7 +20000752: 41e787b3 sub a5,a5,t5 +20000756: 03c7df33 divu t5,a5,t3 +2000075a: 05c2 slli a1,a1,0x10 +2000075c: 81c1 srli a1,a1,0x10 +2000075e: 03c7f7b3 remu a5,a5,t3 +20000762: 03ee8eb3 mul t4,t4,t5 +20000766: 07c2 slli a5,a5,0x10 +20000768: 8fcd or a5,a5,a1 +2000076a: 01d7fb63 bgeu a5,t4,20000780 <__umoddi3+0x2c4> +2000076e: 97c6 add a5,a5,a7 +20000770: ffff0593 addi a1,t5,-1 +20000774: 0b17e263 bltu a5,a7,20000818 <__umoddi3+0x35c> +20000778: 0bd7f063 bgeu a5,t4,20000818 <__umoddi3+0x35c> +2000077c: 1f79 addi t5,t5,-2 +2000077e: 97c6 add a5,a5,a7 +20000780: 06c2 slli a3,a3,0x10 +20000782: 010f1e13 slli t3,t5,0x10 +20000786: 01e6e6b3 or a3,a3,t5 +2000078a: 01061313 slli t1,a2,0x10 +2000078e: 010e5e13 srli t3,t3,0x10 +20000792: 01035313 srli t1,t1,0x10 +20000796: 82c1 srli a3,a3,0x10 +20000798: 01065f13 srli t5,a2,0x10 +2000079c: 02668fb3 mul t6,a3,t1 +200007a0: 41d785b3 sub a1,a5,t4 +200007a4: 026e0333 mul t1,t3,t1 +200007a8: 03ee0e33 mul t3,t3,t5 +200007ac: 01035793 srli a5,t1,0x10 +200007b0: 9e7e add t3,t3,t6 +200007b2: 97f2 add a5,a5,t3 +200007b4: 03e686b3 mul a3,a3,t5 +200007b8: 01f7f463 bgeu a5,t6,200007c0 <__umoddi3+0x304> +200007bc: 6e41 lui t3,0x10 +200007be: 96f2 add a3,a3,t3 +200007c0: 0107de13 srli t3,a5,0x10 +200007c4: 0342 slli t1,t1,0x10 +200007c6: 01035313 srli t1,t1,0x10 +200007ca: 07c2 slli a5,a5,0x10 +200007cc: 96f2 add a3,a3,t3 +200007ce: 979a add a5,a5,t1 +200007d0: 02d5e463 bltu a1,a3,200007f8 <__umoddi3+0x33c> +200007d4: 02d58063 beq a1,a3,200007f4 <__umoddi3+0x338> +200007d8: 40f507b3 sub a5,a0,a5 +200007dc: 00f53533 sltu a0,a0,a5 +200007e0: 8d95 sub a1,a1,a3 +200007e2: 8d89 sub a1,a1,a0 +200007e4: 00e59733 sll a4,a1,a4 +200007e8: 0107d533 srl a0,a5,a6 +200007ec: 0105d5b3 srl a1,a1,a6 +200007f0: 8d59 or a0,a0,a4 +200007f2: 8082 ret +200007f4: fef572e3 bgeu a0,a5,200007d8 <__umoddi3+0x31c> +200007f8: 40c78633 sub a2,a5,a2 +200007fc: 00c7b7b3 sltu a5,a5,a2 +20000800: 97c6 add a5,a5,a7 +20000802: 8e9d sub a3,a3,a5 +20000804: 87b2 mv a5,a2 +20000806: bfc9 j 200007d8 <__umoddi3+0x31c> +20000808: 010007b7 lui a5,0x1000 +2000080c: 00f67c63 bgeu a2,a5,20000824 <__umoddi3+0x368> +20000810: 01065693 srli a3,a2,0x10 +20000814: 4741 li a4,16 +20000816: b3d1 j 200005da <__umoddi3+0x11e> +20000818: 8f2e mv t5,a1 +2000081a: b79d j 20000780 <__umoddi3+0x2c4> +2000081c: 869a mv a3,t1 +2000081e: bf15 j 20000752 <__umoddi3+0x296> +20000820: 97c2 add a5,a5,a6 +20000822: bb29 j 2000053c <__umoddi3+0x80> +20000824: 01865693 srli a3,a2,0x18 +20000828: 4761 li a4,24 +2000082a: bb45 j 200005da <__umoddi3+0x11e> + +2000082c <__adddf3>: +2000082c: 00100337 lui t1,0x100 +20000830: 1101 addi sp,sp,-32 +20000832: 137d addi t1,t1,-1 # fffff +20000834: 0146d713 srli a4,a3,0x14 +20000838: 00b377b3 and a5,t1,a1 +2000083c: 00d37833 and a6,t1,a3 +20000840: c256 sw s5,4(sp) +20000842: 0145da93 srli s5,a1,0x14 +20000846: 078e slli a5,a5,0x3 +20000848: ca26 sw s1,20(sp) +2000084a: c452 sw s4,8(sp) +2000084c: 7ffafa93 andi s5,s5,2047 +20000850: 01d55a13 srli s4,a0,0x1d +20000854: 01f5d493 srli s1,a1,0x1f +20000858: 080e slli a6,a6,0x3 +2000085a: 7ff77593 andi a1,a4,2047 +2000085e: ce06 sw ra,28(sp) +20000860: 01d65713 srli a4,a2,0x1d +20000864: cc22 sw s0,24(sp) +20000866: c84a sw s2,16(sp) +20000868: c64e sw s3,12(sp) +2000086a: 82fd srli a3,a3,0x1f +2000086c: 00fa6a33 or s4,s4,a5 +20000870: 88b2 mv a7,a2 +20000872: 40ba87b3 sub a5,s5,a1 +20000876: 01076733 or a4,a4,a6 +2000087a: 00351e13 slli t3,a0,0x3 +2000087e: 00361e93 slli t4,a2,0x3 +20000882: 0ed48963 beq s1,a3,20000974 <__adddf3+0x148> +20000886: 04f05563 blez a5,200008d0 <__adddf3+0xa4> +2000088a: 16059263 bnez a1,200009ee <__adddf3+0x1c2> +2000088e: 01d766b3 or a3,a4,t4 +20000892: 30068163 beqz a3,20000b94 <__adddf3+0x368> +20000896: fff78693 addi a3,a5,-1 # ffffff +2000089a: 62068c63 beqz a3,20000ed2 <__adddf3+0x6a6> +2000089e: 7ff00613 li a2,2047 +200008a2: 3ac78663 beq a5,a2,20000c4e <__adddf3+0x422> +200008a6: 03800613 li a2,56 +200008aa: 56d65f63 bge a2,a3,20000e28 <__adddf3+0x5fc> +200008ae: fffe0413 addi s0,t3,-1 # ffff +200008b2: 008e3e33 sltu t3,t3,s0 +200008b6: 41ca0a33 sub s4,s4,t3 +200008ba: 008a1693 slli a3,s4,0x8 +200008be: 00800737 lui a4,0x800 +200008c2: 8abe mv s5,a5 +200008c4: 0406da63 bgez a3,20000918 <__adddf3+0xec> +200008c8: fff70a13 addi s4,a4,-1 # 7fffff +200008cc: 547d li s0,-1 +200008ce: a2b9 j 20000a1c <__adddf3+0x1f0> +200008d0: 1a078463 beqz a5,20000a78 <__adddf3+0x24c> +200008d4: 415587b3 sub a5,a1,s5 +200008d8: 3c0a9d63 bnez s5,20000cb2 <__adddf3+0x486> +200008dc: 01ca6633 or a2,s4,t3 +200008e0: 58060063 beqz a2,20000e60 <__adddf3+0x634> +200008e4: fff78613 addi a2,a5,-1 +200008e8: 6a060763 beqz a2,20000f96 <__adddf3+0x76a> +200008ec: 7ff00513 li a0,2047 +200008f0: 62a78f63 beq a5,a0,20000f2e <__adddf3+0x702> +200008f4: 03800513 li a0,56 +200008f8: 74c55663 bge a0,a2,20001044 <__adddf3+0x818> +200008fc: fffe8413 addi s0,t4,-1 +20000900: 008ebeb3 sltu t4,t4,s0 +20000904: 41d70a33 sub s4,a4,t4 +20000908: 008a1613 slli a2,s4,0x8 +2000090c: 00800737 lui a4,0x800 +20000910: 7c064163 bltz a2,200010d2 <__adddf3+0x8a6> +20000914: 84b6 mv s1,a3 +20000916: 8abe mv s5,a5 +20000918: 00440793 addi a5,s0,4 +2000091c: 0087b433 sltu s0,a5,s0 +20000920: 9a22 add s4,s4,s0 +20000922: 843e mv s0,a5 +20000924: 008a1793 slli a5,s4,0x8 +20000928: 2007dd63 bgez a5,20000b42 <__adddf3+0x316> +2000092c: 001a8793 addi a5,s5,1 +20000930: 7ff00713 li a4,2047 +20000934: 8826 mv a6,s1 +20000936: 20e78a63 beq a5,a4,20000b4a <__adddf3+0x31e> +2000093a: ff800737 lui a4,0xff800 +2000093e: 177d addi a4,a4,-1 # ff7fffff <__StackTop+0xdf77dfff> +20000940: 7ff7f793 andi a5,a5,2047 +20000944: 00ea7733 and a4,s4,a4 +20000948: 01d71613 slli a2,a4,0x1d +2000094c: 800d srli s0,s0,0x3 +2000094e: 0726 slli a4,a4,0x9 +20000950: 8e41 or a2,a2,s0 +20000952: 8331 srli a4,a4,0xc +20000954: 40f2 lw ra,28(sp) +20000956: 4462 lw s0,24(sp) +20000958: 07d2 slli a5,a5,0x14 +2000095a: 8fd9 or a5,a5,a4 +2000095c: 01f81713 slli a4,a6,0x1f +20000960: 8fd9 or a5,a5,a4 +20000962: 44d2 lw s1,20(sp) +20000964: 4942 lw s2,16(sp) +20000966: 49b2 lw s3,12(sp) +20000968: 4a22 lw s4,8(sp) +2000096a: 4a92 lw s5,4(sp) +2000096c: 8532 mv a0,a2 +2000096e: 85be mv a1,a5 +20000970: 6105 addi sp,sp,32 +20000972: 8082 ret +20000974: 8826 mv a6,s1 +20000976: 1cf05d63 blez a5,20000b50 <__adddf3+0x324> +2000097a: 16059263 bnez a1,20000ade <__adddf3+0x2b2> +2000097e: 01d766b3 or a3,a4,t4 +20000982: 20068963 beqz a3,20000b94 <__adddf3+0x368> +20000986: fff78693 addi a3,a5,-1 +2000098a: 4e068e63 beqz a3,20000e86 <__adddf3+0x65a> +2000098e: 7ff00613 li a2,2047 +20000992: 5ac78963 beq a5,a2,20000f44 <__adddf3+0x718> +20000996: 03800613 li a2,56 +2000099a: 62d65c63 bge a2,a3,20000fd2 <__adddf3+0x7a6> +2000099e: 008a1693 slli a3,s4,0x8 +200009a2: 00800737 lui a4,0x800 +200009a6: 001e0413 addi s0,t3,1 +200009aa: 8abe mv s5,a5 +200009ac: f606d6e3 bgez a3,20000918 <__adddf3+0xec> +200009b0: 8a3a mv s4,a4 +200009b2: 4401 li s0,0 +200009b4: 0a85 addi s5,s5,1 +200009b6: 7ff00793 li a5,2047 +200009ba: 18fa8763 beq s5,a5,20000b48 <__adddf3+0x31c> +200009be: ff8007b7 lui a5,0xff800 +200009c2: 17fd addi a5,a5,-1 # ff7fffff <__StackTop+0xdf77dfff> +200009c4: 00fa77b3 and a5,s4,a5 +200009c8: 00145713 srli a4,s0,0x1 +200009cc: 8805 andi s0,s0,1 +200009ce: 01f79693 slli a3,a5,0x1f +200009d2: 8f41 or a4,a4,s0 +200009d4: 0017da13 srli s4,a5,0x1 +200009d8: 00e6e433 or s0,a3,a4 +200009dc: 00747793 andi a5,s0,7 +200009e0: d3b1 beqz a5,20000924 <__adddf3+0xf8> +200009e2: 00f47793 andi a5,s0,15 +200009e6: 4711 li a4,4 +200009e8: f2e78ee3 beq a5,a4,20000924 <__adddf3+0xf8> +200009ec: b735 j 20000918 <__adddf3+0xec> +200009ee: 7ff00693 li a3,2047 +200009f2: 24da8e63 beq s5,a3,20000c4e <__adddf3+0x422> +200009f6: 03800693 li a3,56 +200009fa: 1cf6d263 bge a3,a5,20000bbe <__adddf3+0x392> +200009fe: fffe0413 addi s0,t3,-1 +20000a02: 008e3e33 sltu t3,t3,s0 +20000a06: 41ca0a33 sub s4,s4,t3 +20000a0a: 008a1713 slli a4,s4,0x8 +20000a0e: 008007b7 lui a5,0x800 +20000a12: f00753e3 bgez a4,20000918 <__adddf3+0xec> +20000a16: fff78a13 addi s4,a5,-1 # 7fffff +20000a1a: 547d li s0,-1 +20000a1c: 8552 mv a0,s4 +20000a1e: 619010ef jal 20002836 <__clzsi2> +20000a22: ff850793 addi a5,a0,-8 +20000a26: 02000713 li a4,32 +20000a2a: 40f706b3 sub a3,a4,a5 +20000a2e: 00d456b3 srl a3,s0,a3 +20000a32: 00fa1a33 sll s4,s4,a5 +20000a36: 0146e6b3 or a3,a3,s4 +20000a3a: 00f41433 sll s0,s0,a5 +20000a3e: 2f57c763 blt a5,s5,20000d2c <__adddf3+0x500> +20000a42: 415787b3 sub a5,a5,s5 +20000a46: 0785 addi a5,a5,1 +20000a48: 8f1d sub a4,a4,a5 +20000a4a: 00e41633 sll a2,s0,a4 +20000a4e: 00c03633 snez a2,a2 +20000a52: 00f45a33 srl s4,s0,a5 +20000a56: 01466633 or a2,a2,s4 +20000a5a: 00e69733 sll a4,a3,a4 +20000a5e: 00c76433 or s0,a4,a2 +20000a62: 00f6da33 srl s4,a3,a5 +20000a66: 014467b3 or a5,s0,s4 +20000a6a: 4a81 li s5,0 +20000a6c: fba5 bnez a5,200009dc <__adddf3+0x1b0> +20000a6e: 8826 mv a6,s1 +20000a70: 4781 li a5,0 +20000a72: 4701 li a4,0 +20000a74: 4601 li a2,0 +20000a76: bdf9 j 20000954 <__adddf3+0x128> +20000a78: 001a8793 addi a5,s5,1 +20000a7c: 7fe7f793 andi a5,a5,2046 +20000a80: 28079263 bnez a5,20000d04 <__adddf3+0x4d8> +20000a84: 01ca67b3 or a5,s4,t3 +20000a88: 01d76633 or a2,a4,t4 +20000a8c: 3e0a9163 bnez s5,20000e6e <__adddf3+0x642> +20000a90: 52078b63 beqz a5,20000fc6 <__adddf3+0x79a> +20000a94: 20060563 beqz a2,20000c9e <__adddf3+0x472> +20000a98: 41de05b3 sub a1,t3,t4 +20000a9c: 00be3633 sltu a2,t3,a1 +20000aa0: 40ea07b3 sub a5,s4,a4 +20000aa4: 8f91 sub a5,a5,a2 +20000aa6: 00879613 slli a2,a5,0x8 +20000aaa: 5c065f63 bgez a2,20001088 <__adddf3+0x85c> +20000aae: 41ce8e33 sub t3,t4,t3 +20000ab2: 01cebeb3 sltu t4,t4,t3 +20000ab6: 41470733 sub a4,a4,s4 +20000aba: 41d70733 sub a4,a4,t4 +20000abe: 00ee67b3 or a5,t3,a4 +20000ac2: 8472 mv s0,t3 +20000ac4: 84b6 mv s1,a3 +20000ac6: d7c5 beqz a5,20000a6e <__adddf3+0x242> +20000ac8: 00871793 slli a5,a4,0x8 +20000acc: 6007d763 bgez a5,200010da <__adddf3+0x8ae> +20000ad0: ff8007b7 lui a5,0xff800 +20000ad4: 17fd addi a5,a5,-1 # ff7fffff <__StackTop+0xdf77dfff> +20000ad6: 8f7d and a4,a4,a5 +20000ad8: 8836 mv a6,a3 +20000ada: 4785 li a5,1 +20000adc: b5b5 j 20000948 <__adddf3+0x11c> +20000ade: 7ff00693 li a3,2047 +20000ae2: 16da8663 beq s5,a3,20000c4e <__adddf3+0x422> +20000ae6: 03800693 li a3,56 +20000aea: 2cf6c263 blt a3,a5,20000dae <__adddf3+0x582> +20000aee: 008006b7 lui a3,0x800 +20000af2: 8f55 or a4,a4,a3 +20000af4: 46fd li a3,31 +20000af6: 40f6c863 blt a3,a5,20000f06 <__adddf3+0x6da> +20000afa: 02000613 li a2,32 +20000afe: 8e1d sub a2,a2,a5 +20000b00: 00c716b3 sll a3,a4,a2 +20000b04: 00ce9633 sll a2,t4,a2 +20000b08: 00fedeb3 srl t4,t4,a5 +20000b0c: 00f75733 srl a4,a4,a5 +20000b10: 00c03633 snez a2,a2 +20000b14: 01d6e6b3 or a3,a3,t4 +20000b18: 00c6e7b3 or a5,a3,a2 +20000b1c: 9a3a add s4,s4,a4 +20000b1e: 9e3e add t3,t3,a5 +20000b20: 00fe37b3 sltu a5,t3,a5 +20000b24: 9a3e add s4,s4,a5 +20000b26: 8472 mv s0,t3 +20000b28: 008a1793 slli a5,s4,0x8 +20000b2c: e807c4e3 bltz a5,200009b4 <__adddf3+0x188> +20000b30: 00747793 andi a5,s0,7 +20000b34: 5a078c63 beqz a5,200010ec <__adddf3+0x8c0> +20000b38: 00f47793 andi a5,s0,15 +20000b3c: 4711 li a4,4 +20000b3e: dce79de3 bne a5,a4,20000918 <__adddf3+0xec> +20000b42: 87d6 mv a5,s5 +20000b44: 800d srli s0,s0,0x3 +20000b46: a891 j 20000b9a <__adddf3+0x36e> +20000b48: 87d6 mv a5,s5 +20000b4a: 4701 li a4,0 +20000b4c: 4601 li a2,0 +20000b4e: b519 j 20000954 <__adddf3+0x128> +20000b50: 10078963 beqz a5,20000c62 <__adddf3+0x436> +20000b54: 415587b3 sub a5,a1,s5 +20000b58: 260a9463 bnez s5,20000dc0 <__adddf3+0x594> +20000b5c: 01ca66b3 or a3,s4,t3 +20000b60: 4c068d63 beqz a3,2000103a <__adddf3+0x80e> +20000b64: fff78693 addi a3,a5,-1 +20000b68: 30068f63 beqz a3,20000e86 <__adddf3+0x65a> +20000b6c: 7ff00613 li a2,2047 +20000b70: 3ec78463 beq a5,a2,20000f58 <__adddf3+0x72c> +20000b74: 03800613 li a2,56 +20000b78: 52d65b63 bge a2,a3,200010ae <__adddf3+0x882> +20000b7c: 00871693 slli a3,a4,0x8 +20000b80: 00800a37 lui s4,0x800 +20000b84: 8abe mv s5,a5 +20000b86: 4401 li s0,0 +20000b88: e206c6e3 bltz a3,200009b4 <__adddf3+0x188> +20000b8c: 001e8413 addi s0,t4,1 +20000b90: 8a3a mv s4,a4 +20000b92: b359 j 20000918 <__adddf3+0xec> +20000b94: 00351413 slli s0,a0,0x3 +20000b98: 800d srli s0,s0,0x3 +20000b9a: 01da1613 slli a2,s4,0x1d +20000b9e: 7ff00693 li a3,2047 +20000ba2: 8e41 or a2,a2,s0 +20000ba4: 003a5713 srli a4,s4,0x3 +20000ba8: 08d79863 bne a5,a3,20000c38 <__adddf3+0x40c> +20000bac: 8e59 or a2,a2,a4 +20000bae: ca59 beqz a2,20000c44 <__adddf3+0x418> +20000bb0: 4801 li a6,0 +20000bb2: 7ff00793 li a5,2047 +20000bb6: 00080737 lui a4,0x80 +20000bba: 4601 li a2,0 +20000bbc: bb61 j 20000954 <__adddf3+0x128> +20000bbe: 008006b7 lui a3,0x800 +20000bc2: 8f55 or a4,a4,a3 +20000bc4: 46fd li a3,31 +20000bc6: 18f6c063 blt a3,a5,20000d46 <__adddf3+0x51a> +20000bca: 02000693 li a3,32 +20000bce: 8e9d sub a3,a3,a5 +20000bd0: 00d71433 sll s0,a4,a3 +20000bd4: 00de96b3 sll a3,t4,a3 +20000bd8: 00fedeb3 srl t4,t4,a5 +20000bdc: 00d036b3 snez a3,a3 +20000be0: 01d46433 or s0,s0,t4 +20000be4: 00f75733 srl a4,a4,a5 +20000be8: 8c55 or s0,s0,a3 +20000bea: 40ea0a33 sub s4,s4,a4 +20000bee: 408e0433 sub s0,t3,s0 +20000bf2: 008e3e33 sltu t3,t3,s0 +20000bf6: 41ca0a33 sub s4,s4,t3 +20000bfa: 008a1793 slli a5,s4,0x8 +20000bfe: f207d9e3 bgez a5,20000b30 <__adddf3+0x304> +20000c02: 0a26 slli s4,s4,0x9 +20000c04: 009a5a13 srli s4,s4,0x9 +20000c08: e00a1ae3 bnez s4,20000a1c <__adddf3+0x1f0> +20000c0c: 8522 mv a0,s0 +20000c0e: 429010ef jal 20002836 <__clzsi2> +20000c12: 01850793 addi a5,a0,24 +20000c16: 477d li a4,31 +20000c18: e0f757e3 bge a4,a5,20000a26 <__adddf3+0x1fa> +20000c1c: 1561 addi a0,a0,-8 +20000c1e: 00a416b3 sll a3,s0,a0 +20000c22: 1557d663 bge a5,s5,20000d6e <__adddf3+0x542> +20000c26: ff800737 lui a4,0xff800 +20000c2a: 177d addi a4,a4,-1 # ff7fffff <__StackTop+0xdf77dfff> +20000c2c: 8f75 and a4,a4,a3 +20000c2e: 01d71613 slli a2,a4,0x1d +20000c32: 40fa87b3 sub a5,s5,a5 +20000c36: 830d srli a4,a4,0x3 +20000c38: 0732 slli a4,a4,0xc +20000c3a: 8331 srli a4,a4,0xc +20000c3c: 7ff7f793 andi a5,a5,2047 +20000c40: 8826 mv a6,s1 +20000c42: bb09 j 20000954 <__adddf3+0x128> +20000c44: 8826 mv a6,s1 +20000c46: 7ff00793 li a5,2047 +20000c4a: 4701 li a4,0 +20000c4c: b321 j 20000954 <__adddf3+0x128> +20000c4e: 00351413 slli s0,a0,0x3 +20000c52: 00345513 srli a0,s0,0x3 +20000c56: 01da1613 slli a2,s4,0x1d +20000c5a: 8e49 or a2,a2,a0 +20000c5c: 003a5713 srli a4,s4,0x3 +20000c60: b7b1 j 20000bac <__adddf3+0x380> +20000c62: 001a8793 addi a5,s5,1 +20000c66: 7fe7f693 andi a3,a5,2046 +20000c6a: 16069f63 bnez a3,20000de8 <__adddf3+0x5bc> +20000c6e: 01ca67b3 or a5,s4,t3 +20000c72: 3a0a9e63 bnez s5,2000102e <__adddf3+0x802> +20000c76: 01d766b3 or a3,a4,t4 +20000c7a: 40078063 beqz a5,2000107a <__adddf3+0x84e> +20000c7e: c285 beqz a3,20000c9e <__adddf3+0x472> +20000c80: 9ef2 add t4,t4,t3 +20000c82: 01cebe33 sltu t3,t4,t3 +20000c86: 9752 add a4,a4,s4 +20000c88: 01c70a33 add s4,a4,t3 +20000c8c: 008a1793 slli a5,s4,0x8 +20000c90: 8e76 mv t3,t4 +20000c92: 4207c063 bltz a5,200010b2 <__adddf3+0x886> +20000c96: 014ee7b3 or a5,t4,s4 +20000c9a: dc078ae3 beqz a5,20000a6e <__adddf3+0x242> +20000c9e: 003e5e13 srli t3,t3,0x3 +20000ca2: 01da1613 slli a2,s4,0x1d +20000ca6: 01c66633 or a2,a2,t3 +20000caa: 003a5713 srli a4,s4,0x3 +20000cae: 4781 li a5,0 +20000cb0: b761 j 20000c38 <__adddf3+0x40c> +20000cb2: 7ff00613 li a2,2047 +20000cb6: 26c58c63 beq a1,a2,20000f2e <__adddf3+0x702> +20000cba: 03800613 li a2,56 +20000cbe: 16f64763 blt a2,a5,20000e2c <__adddf3+0x600> +20000cc2: 00800637 lui a2,0x800 +20000cc6: 00ca6a33 or s4,s4,a2 +20000cca: 467d li a2,31 +20000ccc: 28f64e63 blt a2,a5,20000f68 <__adddf3+0x73c> +20000cd0: 02000613 li a2,32 +20000cd4: 8e1d sub a2,a2,a5 +20000cd6: 00ca1433 sll s0,s4,a2 +20000cda: 00ce1633 sll a2,t3,a2 +20000cde: 00fe5e33 srl t3,t3,a5 +20000ce2: 00c03633 snez a2,a2 +20000ce6: 01c46433 or s0,s0,t3 +20000cea: 00fa57b3 srl a5,s4,a5 +20000cee: 8c51 or s0,s0,a2 +20000cf0: 8f1d sub a4,a4,a5 +20000cf2: 408e8433 sub s0,t4,s0 +20000cf6: 008ebeb3 sltu t4,t4,s0 +20000cfa: 41d70a33 sub s4,a4,t4 +20000cfe: 8aae mv s5,a1 +20000d00: 84b6 mv s1,a3 +20000d02: bde5 j 20000bfa <__adddf3+0x3ce> +20000d04: 41de0433 sub s0,t3,t4 +20000d08: 008e3633 sltu a2,t3,s0 +20000d0c: 40ea07b3 sub a5,s4,a4 +20000d10: 8f91 sub a5,a5,a2 +20000d12: 00879613 slli a2,a5,0x8 +20000d16: 12064a63 bltz a2,20000e4a <__adddf3+0x61e> +20000d1a: 00f46633 or a2,s0,a5 +20000d1e: 8a3e mv s4,a5 +20000d20: ee0614e3 bnez a2,20000c08 <__adddf3+0x3dc> +20000d24: 4801 li a6,0 +20000d26: 4781 li a5,0 +20000d28: 4701 li a4,0 +20000d2a: b12d j 20000954 <__adddf3+0x128> +20000d2c: ff800a37 lui s4,0xff800 +20000d30: 1a7d addi s4,s4,-1 # ff7fffff <__StackTop+0xdf77dfff> +20000d32: 00747713 andi a4,s0,7 +20000d36: 40fa8ab3 sub s5,s5,a5 +20000d3a: 0146fa33 and s4,a3,s4 +20000d3e: de071de3 bnez a4,20000b38 <__adddf3+0x30c> +20000d42: 87d6 mv a5,s5 +20000d44: b501 j 20000b44 <__adddf3+0x318> +20000d46: fe078693 addi a3,a5,-32 +20000d4a: 02000613 li a2,32 +20000d4e: 00d756b3 srl a3,a4,a3 +20000d52: 00c78a63 beq a5,a2,20000d66 <__adddf3+0x53a> +20000d56: 04000613 li a2,64 +20000d5a: 40f607b3 sub a5,a2,a5 +20000d5e: 00f717b3 sll a5,a4,a5 +20000d62: 00feeeb3 or t4,t4,a5 +20000d66: 01d03433 snez s0,t4 +20000d6a: 8c55 or s0,s0,a3 +20000d6c: b549 j 20000bee <__adddf3+0x3c2> +20000d6e: 41578433 sub s0,a5,s5 +20000d72: 00140793 addi a5,s0,1 +20000d76: 2ef75d63 bge a4,a5,20001070 <__adddf3+0x844> +20000d7a: 1405 addi s0,s0,-31 +20000d7c: 02000713 li a4,32 +20000d80: 0086d433 srl s0,a3,s0 +20000d84: 00e78b63 beq a5,a4,20000d9a <__adddf3+0x56e> +20000d88: 04000713 li a4,64 +20000d8c: 40f707b3 sub a5,a4,a5 +20000d90: 00f697b3 sll a5,a3,a5 +20000d94: 00f037b3 snez a5,a5 +20000d98: 8c5d or s0,s0,a5 +20000d9a: cc040ae3 beqz s0,20000a6e <__adddf3+0x242> +20000d9e: 00747793 andi a5,s0,7 +20000da2: 4a81 li s5,0 +20000da4: c2079fe3 bnez a5,200009e2 <__adddf3+0x1b6> +20000da8: 4a01 li s4,0 +20000daa: 800d srli s0,s0,0x3 +20000dac: b3fd j 20000b9a <__adddf3+0x36e> +20000dae: 008a1713 slli a4,s4,0x8 +20000db2: 008007b7 lui a5,0x800 +20000db6: 1c075d63 bgez a4,20000f90 <__adddf3+0x764> +20000dba: 8a3e mv s4,a5 +20000dbc: 4401 li s0,0 +20000dbe: bedd j 200009b4 <__adddf3+0x188> +20000dc0: 7ff00693 li a3,2047 +20000dc4: 18d58a63 beq a1,a3,20000f58 <__adddf3+0x72c> +20000dc8: 03800693 li a3,56 +20000dcc: 20f6d563 bge a3,a5,20000fd6 <__adddf3+0x7aa> +20000dd0: 00871793 slli a5,a4,0x8 +20000dd4: 00800a37 lui s4,0x800 +20000dd8: 8aae mv s5,a1 +20000dda: 4401 li s0,0 +20000ddc: bc07cce3 bltz a5,200009b4 <__adddf3+0x188> +20000de0: 001e8413 addi s0,t4,1 +20000de4: 8a3a mv s4,a4 +20000de6: be0d j 20000918 <__adddf3+0xec> +20000de8: 7ff00693 li a3,2047 +20000dec: d4d78fe3 beq a5,a3,20000b4a <__adddf3+0x31e> +20000df0: 9ef2 add t4,t4,t3 +20000df2: 01cebe33 sltu t3,t4,t3 +20000df6: 9752 add a4,a4,s4 +20000df8: 9772 add a4,a4,t3 +20000dfa: 001ede93 srli t4,t4,0x1 +20000dfe: 01f71413 slli s0,a4,0x1f +20000e02: 007ef693 andi a3,t4,7 +20000e06: 01d46433 or s0,s0,t4 +20000e0a: 00175a13 srli s4,a4,0x1 +20000e0e: c699 beqz a3,20000e1c <__adddf3+0x5f0> +20000e10: 00f47693 andi a3,s0,15 +20000e14: 4611 li a2,4 +20000e16: 8abe mv s5,a5 +20000e18: b0c690e3 bne a3,a2,20000918 <__adddf3+0xec> +20000e1c: 800d srli s0,s0,0x3 +20000e1e: 01da1613 slli a2,s4,0x1d +20000e22: 8e41 or a2,a2,s0 +20000e24: 8311 srli a4,a4,0x4 +20000e26: bd09 j 20000c38 <__adddf3+0x40c> +20000e28: 87b6 mv a5,a3 +20000e2a: bb69 j 20000bc4 <__adddf3+0x398> +20000e2c: fffe8413 addi s0,t4,-1 +20000e30: 008ebeb3 sltu t4,t4,s0 +20000e34: 41d70a33 sub s4,a4,t4 +20000e38: 008a1713 slli a4,s4,0x8 +20000e3c: 008007b7 lui a5,0x800 +20000e40: 1c074b63 bltz a4,20001016 <__adddf3+0x7ea> +20000e44: 84b6 mv s1,a3 +20000e46: 8aae mv s5,a1 +20000e48: bcc1 j 20000918 <__adddf3+0xec> +20000e4a: 41ce8e33 sub t3,t4,t3 +20000e4e: 01cebeb3 sltu t4,t4,t3 +20000e52: 41470733 sub a4,a4,s4 +20000e56: 8472 mv s0,t3 +20000e58: 41d70a33 sub s4,a4,t4 +20000e5c: 84b6 mv s1,a3 +20000e5e: b36d j 20000c08 <__adddf3+0x3dc> +20000e60: 00389613 slli a2,a7,0x3 +20000e64: 00365413 srli s0,a2,0x3 +20000e68: 84b6 mv s1,a3 +20000e6a: 8a3a mv s4,a4 +20000e6c: b33d j 20000b9a <__adddf3+0x36e> +20000e6e: ebe9 bnez a5,20000f40 <__adddf3+0x714> +20000e70: 22060963 beqz a2,200010a2 <__adddf3+0x876> +20000e74: 00389613 slli a2,a7,0x3 +20000e78: 01d71793 slli a5,a4,0x1d +20000e7c: 820d srli a2,a2,0x3 +20000e7e: 84b6 mv s1,a3 +20000e80: 8e5d or a2,a2,a5 +20000e82: 830d srli a4,a4,0x3 +20000e84: b325 j 20000bac <__adddf3+0x380> +20000e86: 9ef2 add t4,t4,t3 +20000e88: 01cebe33 sltu t3,t4,t3 +20000e8c: 9752 add a4,a4,s4 +20000e8e: 9772 add a4,a4,t3 +20000e90: 00871793 slli a5,a4,0x8 +20000e94: 1807d463 bgez a5,2000101c <__adddf3+0x7f0> +20000e98: ff8007b7 lui a5,0xff800 +20000e9c: 17fd addi a5,a5,-1 # ff7fffff <__StackTop+0xdf77dfff> +20000e9e: 001ed693 srli a3,t4,0x1 +20000ea2: 8f7d and a4,a4,a5 +20000ea4: 01f71793 slli a5,a4,0x1f +20000ea8: 0076f593 andi a1,a3,7 +20000eac: 8fd5 or a5,a5,a3 +20000eae: 00175613 srli a2,a4,0x1 +20000eb2: 1e058263 beqz a1,20001096 <__adddf3+0x86a> +20000eb6: 00f7f693 andi a3,a5,15 +20000eba: 4591 li a1,4 +20000ebc: 1cb68d63 beq a3,a1,20001096 <__adddf3+0x86a> +20000ec0: 00b78433 add s0,a5,a1 +20000ec4: 00f437b3 sltu a5,s0,a5 +20000ec8: 00c78a33 add s4,a5,a2 +20000ecc: 800d srli s0,s0,0x3 +20000ece: 4789 li a5,2 +20000ed0: b1e9 j 20000b9a <__adddf3+0x36e> +20000ed2: 41de0eb3 sub t4,t3,t4 +20000ed6: 01de3e33 sltu t3,t3,t4 +20000eda: 40ea0733 sub a4,s4,a4 +20000ede: 41c70a33 sub s4,a4,t3 +20000ee2: 008a1793 slli a5,s4,0x8 +20000ee6: 8476 mv s0,t4 +20000ee8: 0007cd63 bltz a5,20000f02 <__adddf3+0x6d6> +20000eec: 003ede93 srli t4,t4,0x3 +20000ef0: 01da1613 slli a2,s4,0x1d +20000ef4: 01d66633 or a2,a2,t4 +20000ef8: 003a5713 srli a4,s4,0x3 +20000efc: 4785 li a5,1 +20000efe: bb2d j 20000c38 <__adddf3+0x40c> +20000f00: 84b6 mv s1,a3 +20000f02: 4a85 li s5,1 +20000f04: b9fd j 20000c02 <__adddf3+0x3d6> +20000f06: fe078693 addi a3,a5,-32 +20000f0a: 02000613 li a2,32 +20000f0e: 00d756b3 srl a3,a4,a3 +20000f12: 00c78a63 beq a5,a2,20000f26 <__adddf3+0x6fa> +20000f16: 04000613 li a2,64 +20000f1a: 40f607b3 sub a5,a2,a5 +20000f1e: 00f717b3 sll a5,a4,a5 +20000f22: 00feeeb3 or t4,t4,a5 +20000f26: 01d037b3 snez a5,t4 +20000f2a: 8fd5 or a5,a5,a3 +20000f2c: becd j 20000b1e <__adddf3+0x2f2> +20000f2e: 00389793 slli a5,a7,0x3 +20000f32: 01d71613 slli a2,a4,0x1d +20000f36: 838d srli a5,a5,0x3 +20000f38: 84b6 mv s1,a3 +20000f3a: 8e5d or a2,a2,a5 +20000f3c: 830d srli a4,a4,0x3 +20000f3e: b1bd j 20000bac <__adddf3+0x380> +20000f40: c60618e3 bnez a2,20000bb0 <__adddf3+0x384> +20000f44: 00351413 slli s0,a0,0x3 +20000f48: 00345793 srli a5,s0,0x3 +20000f4c: 01da1613 slli a2,s4,0x1d +20000f50: 8e5d or a2,a2,a5 +20000f52: 003a5713 srli a4,s4,0x3 +20000f56: b999 j 20000bac <__adddf3+0x380> +20000f58: 00389793 slli a5,a7,0x3 +20000f5c: 01d71613 slli a2,a4,0x1d +20000f60: 838d srli a5,a5,0x3 +20000f62: 8e5d or a2,a2,a5 +20000f64: 830d srli a4,a4,0x3 +20000f66: b199 j 20000bac <__adddf3+0x380> +20000f68: fe078613 addi a2,a5,-32 +20000f6c: 02000513 li a0,32 +20000f70: 00ca5633 srl a2,s4,a2 +20000f74: 00a78a63 beq a5,a0,20000f88 <__adddf3+0x75c> +20000f78: 04000513 li a0,64 +20000f7c: 40f507b3 sub a5,a0,a5 +20000f80: 00fa17b3 sll a5,s4,a5 +20000f84: 00fe6e33 or t3,t3,a5 +20000f88: 01c03433 snez s0,t3 +20000f8c: 8c51 or s0,s0,a2 +20000f8e: b395 j 20000cf2 <__adddf3+0x4c6> +20000f90: 001e0413 addi s0,t3,1 +20000f94: b251 j 20000918 <__adddf3+0xec> +20000f96: 41ce8e33 sub t3,t4,t3 +20000f9a: 01cebeb3 sltu t4,t4,t3 +20000f9e: 41470733 sub a4,a4,s4 +20000fa2: 41d70a33 sub s4,a4,t4 +20000fa6: 008a1793 slli a5,s4,0x8 +20000faa: 8472 mv s0,t3 +20000fac: f407cae3 bltz a5,20000f00 <__adddf3+0x6d4> +20000fb0: 003e5e13 srli t3,t3,0x3 +20000fb4: 01da1613 slli a2,s4,0x1d +20000fb8: 84b6 mv s1,a3 +20000fba: 00ce6633 or a2,t3,a2 +20000fbe: 003a5713 srli a4,s4,0x3 +20000fc2: 4785 li a5,1 +20000fc4: b995 j 20000c38 <__adddf3+0x40c> +20000fc6: d4060fe3 beqz a2,20000d24 <__adddf3+0x4f8> +20000fca: 8a3a mv s4,a4 +20000fcc: 8e76 mv t3,t4 +20000fce: 84b6 mv s1,a3 +20000fd0: b1f9 j 20000c9e <__adddf3+0x472> +20000fd2: 87b6 mv a5,a3 +20000fd4: b605 j 20000af4 <__adddf3+0x2c8> +20000fd6: 008006b7 lui a3,0x800 +20000fda: 00da6a33 or s4,s4,a3 +20000fde: 46fd li a3,31 +20000fe0: 06f6c463 blt a3,a5,20001048 <__adddf3+0x81c> +20000fe4: 02000613 li a2,32 +20000fe8: 8e1d sub a2,a2,a5 +20000fea: 00ca16b3 sll a3,s4,a2 +20000fee: 00ce1633 sll a2,t3,a2 +20000ff2: 00fe5e33 srl t3,t3,a5 +20000ff6: 00c03633 snez a2,a2 +20000ffa: 01c6e6b3 or a3,a3,t3 +20000ffe: 00fa57b3 srl a5,s4,a5 +20001002: 8ed1 or a3,a3,a2 +20001004: 973e add a4,a4,a5 +20001006: 9eb6 add t4,t4,a3 +20001008: 00deb6b3 sltu a3,t4,a3 +2000100c: 00e68a33 add s4,a3,a4 +20001010: 8476 mv s0,t4 +20001012: 8aae mv s5,a1 +20001014: be11 j 20000b28 <__adddf3+0x2fc> +20001016: 8aae mv s5,a1 +20001018: 84b6 mv s1,a3 +2000101a: baf5 j 20000a16 <__adddf3+0x1ea> +2000101c: 01d71613 slli a2,a4,0x1d +20001020: 003ede93 srli t4,t4,0x3 +20001024: 01d66633 or a2,a2,t4 +20001028: 830d srli a4,a4,0x3 +2000102a: 4785 li a5,1 +2000102c: b131 j 20000c38 <__adddf3+0x40c> +2000102e: d78d beqz a5,20000f58 <__adddf3+0x72c> +20001030: 01d76eb3 or t4,a4,t4 +20001034: b60e9ee3 bnez t4,20000bb0 <__adddf3+0x384> +20001038: b731 j 20000f44 <__adddf3+0x718> +2000103a: 060e slli a2,a2,0x3 +2000103c: 00365413 srli s0,a2,0x3 +20001040: 8a3a mv s4,a4 +20001042: bea1 j 20000b9a <__adddf3+0x36e> +20001044: 87b2 mv a5,a2 +20001046: b151 j 20000cca <__adddf3+0x49e> +20001048: fe078613 addi a2,a5,-32 +2000104c: 02000693 li a3,32 +20001050: 00ca5633 srl a2,s4,a2 +20001054: 00d78a63 beq a5,a3,20001068 <__adddf3+0x83c> +20001058: 04000693 li a3,64 +2000105c: 40f687b3 sub a5,a3,a5 +20001060: 00fa17b3 sll a5,s4,a5 +20001064: 00fe6e33 or t3,t3,a5 +20001068: 01c036b3 snez a3,t3 +2000106c: 8ed1 or a3,a3,a2 +2000106e: bf61 j 20001006 <__adddf3+0x7da> +20001070: 02000713 li a4,32 +20001074: 8f1d sub a4,a4,a5 +20001076: 4601 li a2,0 +20001078: baf9 j 20000a56 <__adddf3+0x22a> +2000107a: 9e068ae3 beqz a3,20000a6e <__adddf3+0x242> +2000107e: 8476 mv s0,t4 +20001080: 8a3a mv s4,a4 +20001082: 4781 li a5,0 +20001084: 800d srli s0,s0,0x3 +20001086: be11 j 20000b9a <__adddf3+0x36e> +20001088: 00f5e633 or a2,a1,a5 +2000108c: c8060ce3 beqz a2,20000d24 <__adddf3+0x4f8> +20001090: 8a3e mv s4,a5 +20001092: 8e2e mv t3,a1 +20001094: b129 j 20000c9e <__adddf3+0x472> +20001096: 838d srli a5,a5,0x3 +20001098: 0676 slli a2,a2,0x1d +2000109a: 8e5d or a2,a2,a5 +2000109c: 8311 srli a4,a4,0x4 +2000109e: 4789 li a5,2 +200010a0: be61 j 20000c38 <__adddf3+0x40c> +200010a2: 4801 li a6,0 +200010a4: 7ff00793 li a5,2047 +200010a8: 00080737 lui a4,0x80 +200010ac: b065 j 20000954 <__adddf3+0x128> +200010ae: 87b6 mv a5,a3 +200010b0: b73d j 20000fde <__adddf3+0x7b2> +200010b2: ff800737 lui a4,0xff800 +200010b6: 177d addi a4,a4,-1 # ff7fffff <__StackTop+0xdf77dfff> +200010b8: 00ea7733 and a4,s4,a4 +200010bc: 01d71613 slli a2,a4,0x1d +200010c0: 003ede93 srli t4,t4,0x3 +200010c4: 830d srli a4,a4,0x3 +200010c6: 01d66633 or a2,a2,t4 +200010ca: 00677733 and a4,a4,t1 +200010ce: 4785 li a5,1 +200010d0: b051 j 20000954 <__adddf3+0x128> +200010d2: 8abe mv s5,a5 +200010d4: 84b6 mv s1,a3 +200010d6: ff2ff06f j 200008c8 <__adddf3+0x9c> +200010da: 01d71613 slli a2,a4,0x1d +200010de: 003e5e13 srli t3,t3,0x3 +200010e2: 00ce6633 or a2,t3,a2 +200010e6: 830d srli a4,a4,0x3 +200010e8: 4781 li a5,0 +200010ea: b6b9 j 20000c38 <__adddf3+0x40c> +200010ec: 800d srli s0,s0,0x3 +200010ee: 87d6 mv a5,s5 +200010f0: b46d j 20000b9a <__adddf3+0x36e> + +200010f2 <__divdf3>: +200010f2: 7179 addi sp,sp,-48 +200010f4: 0145d793 srli a5,a1,0x14 +200010f8: d422 sw s0,40(sp) +200010fa: d226 sw s1,36(sp) +200010fc: cc52 sw s4,24(sp) +200010fe: ca56 sw s5,20(sp) +20001100: c266 sw s9,4(sp) +20001102: 00c59493 slli s1,a1,0xc +20001106: d606 sw ra,44(sp) +20001108: d04a sw s2,32(sp) +2000110a: ce4e sw s3,28(sp) +2000110c: c85a sw s6,16(sp) +2000110e: c65e sw s7,12(sp) +20001110: c462 sw s8,8(sp) +20001112: c06a sw s10,0(sp) +20001114: 7ff7f793 andi a5,a5,2047 +20001118: 842a mv s0,a0 +2000111a: 8cb2 mv s9,a2 +2000111c: 8a36 mv s4,a3 +2000111e: 80b1 srli s1,s1,0xc +20001120: 01f5da93 srli s5,a1,0x1f +20001124: 12078963 beqz a5,20001256 <__divdf3+0x164> +20001128: 7ff00713 li a4,2047 +2000112c: 06e78a63 beq a5,a4,200011a0 <__divdf3+0xae> +20001130: 048e slli s1,s1,0x3 +20001132: 01d55b93 srli s7,a0,0x1d +20001136: 009bebb3 or s7,s7,s1 +2000113a: 00800737 lui a4,0x800 +2000113e: c0178b13 addi s6,a5,-1023 +20001142: 00351c13 slli s8,a0,0x3 +20001146: 00ebebb3 or s7,s7,a4 +2000114a: 4481 li s1,0 +2000114c: 4d01 li s10,0 +2000114e: 014a5793 srli a5,s4,0x14 +20001152: 00ca1413 slli s0,s4,0xc +20001156: 7ff7f793 andi a5,a5,2047 +2000115a: 8031 srli s0,s0,0xc +2000115c: 01fa5a13 srli s4,s4,0x1f +20001160: c3b5 beqz a5,200011c4 <__divdf3+0xd2> +20001162: 7ff00713 li a4,2047 +20001166: 0ce78e63 beq a5,a4,20001242 <__divdf3+0x150> +2000116a: 040e slli s0,s0,0x3 +2000116c: 01dcd713 srli a4,s9,0x1d +20001170: c0178793 addi a5,a5,-1023 +20001174: 8f41 or a4,a4,s0 +20001176: 00800437 lui s0,0x800 +2000117a: 40fb0b33 sub s6,s6,a5 +2000117e: 8c59 or s0,s0,a4 +20001180: 003c9793 slli a5,s9,0x3 +20001184: 4681 li a3,0 +20001186: 473d li a4,15 +20001188: 014ac5b3 xor a1,s5,s4 +2000118c: 18976d63 bltu a4,s1,20001326 <__divdf3+0x234> +20001190: 20003737 lui a4,0x20003 +20001194: 8a470713 addi a4,a4,-1884 # 200028a4 <__clzsi2+0x6e> +20001198: 048a slli s1,s1,0x2 +2000119a: 94ba add s1,s1,a4 +2000119c: 4098 lw a4,0(s1) +2000119e: 8702 jr a4 +200011a0: 00a4ebb3 or s7,s1,a0 +200011a4: 140b9c63 bnez s7,200012fc <__divdf3+0x20a> +200011a8: 8b3e mv s6,a5 +200011aa: 014a5793 srli a5,s4,0x14 +200011ae: 00ca1413 slli s0,s4,0xc +200011b2: 7ff7f793 andi a5,a5,2047 +200011b6: 4c01 li s8,0 +200011b8: 44a1 li s1,8 +200011ba: 4d09 li s10,2 +200011bc: 8031 srli s0,s0,0xc +200011be: 01fa5a13 srli s4,s4,0x1f +200011c2: f3c5 bnez a5,20001162 <__divdf3+0x70> +200011c4: 019467b3 or a5,s0,s9 +200011c8: 14078563 beqz a5,20001312 <__divdf3+0x220> +200011cc: 36040663 beqz s0,20001538 <__divdf3+0x446> +200011d0: 8522 mv a0,s0 +200011d2: 664010ef jal 20002836 <__clzsi2> +200011d6: 872a mv a4,a0 +200011d8: ff550793 addi a5,a0,-11 +200011dc: 46f5 li a3,29 +200011de: 8e9d sub a3,a3,a5 +200011e0: ff870793 addi a5,a4,-8 +200011e4: 00f41433 sll s0,s0,a5 +200011e8: 00dcd6b3 srl a3,s9,a3 +200011ec: 8c55 or s0,s0,a3 +200011ee: 00fc97b3 sll a5,s9,a5 +200011f2: 975a add a4,a4,s6 +200011f4: 3f370b13 addi s6,a4,1011 +200011f8: 4681 li a3,0 +200011fa: b771 j 20001186 <__divdf3+0x94> +200011fc: 7ff00793 li a5,2047 +20001200: 4681 li a3,0 +20001202: 4701 li a4,0 +20001204: 50b2 lw ra,44(sp) +20001206: 5422 lw s0,40(sp) +20001208: 07d2 slli a5,a5,0x14 +2000120a: 05fe slli a1,a1,0x1f +2000120c: 8fd5 or a5,a5,a3 +2000120e: 8fcd or a5,a5,a1 +20001210: 5492 lw s1,36(sp) +20001212: 5902 lw s2,32(sp) +20001214: 49f2 lw s3,28(sp) +20001216: 4a62 lw s4,24(sp) +20001218: 4ad2 lw s5,20(sp) +2000121a: 4b42 lw s6,16(sp) +2000121c: 4bb2 lw s7,12(sp) +2000121e: 4c22 lw s8,8(sp) +20001220: 4c92 lw s9,4(sp) +20001222: 4d02 lw s10,0(sp) +20001224: 853a mv a0,a4 +20001226: 85be mv a1,a5 +20001228: 6145 addi sp,sp,48 +2000122a: 8082 ret +2000122c: 4781 li a5,0 +2000122e: 4681 li a3,0 +20001230: 4701 li a4,0 +20001232: bfc9 j 20001204 <__divdf3+0x112> +20001234: 4581 li a1,0 +20001236: 7ff00793 li a5,2047 +2000123a: 000806b7 lui a3,0x80 +2000123e: 4701 li a4,0 +20001240: b7d1 j 20001204 <__divdf3+0x112> +20001242: 019467b3 or a5,s0,s9 +20001246: 801b0b13 addi s6,s6,-2047 +2000124a: ebe9 bnez a5,2000131c <__divdf3+0x22a> +2000124c: 0024e493 ori s1,s1,2 +20001250: 4401 li s0,0 +20001252: 4689 li a3,2 +20001254: bf0d j 20001186 <__divdf3+0x94> +20001256: 00a4ebb3 or s7,s1,a0 +2000125a: 0a0b8763 beqz s7,20001308 <__divdf3+0x216> +2000125e: 2a048f63 beqz s1,2000151c <__divdf3+0x42a> +20001262: 8526 mv a0,s1 +20001264: 5d2010ef jal 20002836 <__clzsi2> +20001268: 872a mv a4,a0 +2000126a: ff550793 addi a5,a0,-11 +2000126e: 4bf5 li s7,29 +20001270: ff870c13 addi s8,a4,-8 +20001274: 40fb8bb3 sub s7,s7,a5 +20001278: 018494b3 sll s1,s1,s8 +2000127c: 01745bb3 srl s7,s0,s7 +20001280: 009bebb3 or s7,s7,s1 +20001284: 01841c33 sll s8,s0,s8 +20001288: c0d00793 li a5,-1011 +2000128c: 40e78b33 sub s6,a5,a4 +20001290: 4481 li s1,0 +20001292: 4d01 li s10,0 +20001294: bd6d j 2000114e <__divdf3+0x5c> +20001296: 85d6 mv a1,s5 +20001298: 845e mv s0,s7 +2000129a: 87e2 mv a5,s8 +2000129c: 4709 li a4,2 +2000129e: f4ed0fe3 beq s10,a4,200011fc <__divdf3+0x10a> +200012a2: 470d li a4,3 +200012a4: f8ed08e3 beq s10,a4,20001234 <__divdf3+0x142> +200012a8: 4705 li a4,1 +200012aa: f8ed01e3 beq s10,a4,2000122c <__divdf3+0x13a> +200012ae: 3ffb0f93 addi t6,s6,1023 +200012b2: 877e mv a4,t6 +200012b4: 3bf05a63 blez t6,20001668 <__divdf3+0x576> +200012b8: 0077f693 andi a3,a5,7 +200012bc: 30069463 bnez a3,200015c4 <__divdf3+0x4d2> +200012c0: 0037d513 srli a0,a5,0x3 +200012c4: 00741793 slli a5,s0,0x7 +200012c8: 0007d863 bgez a5,200012d8 <__divdf3+0x1e6> +200012cc: ff0007b7 lui a5,0xff000 +200012d0: 17fd addi a5,a5,-1 # feffffff <__StackTop+0xdef7dfff> +200012d2: 400b0713 addi a4,s6,1024 +200012d6: 8c7d and s0,s0,a5 +200012d8: 7fe00793 li a5,2046 +200012dc: f2e7c0e3 blt a5,a4,200011fc <__divdf3+0x10a> +200012e0: 01d41693 slli a3,s0,0x1d +200012e4: 00941613 slli a2,s0,0x9 +200012e8: 7ff77793 andi a5,a4,2047 +200012ec: 00a6e733 or a4,a3,a0 +200012f0: 00c65693 srli a3,a2,0xc +200012f4: bf01 j 20001204 <__divdf3+0x112> +200012f6: 85d2 mv a1,s4 +200012f8: 8d36 mv s10,a3 +200012fa: b74d j 2000129c <__divdf3+0x1aa> +200012fc: 8ba6 mv s7,s1 +200012fe: 8c2a mv s8,a0 +20001300: 8b3e mv s6,a5 +20001302: 44b1 li s1,12 +20001304: 4d0d li s10,3 +20001306: b5a1 j 2000114e <__divdf3+0x5c> +20001308: 4c01 li s8,0 +2000130a: 4491 li s1,4 +2000130c: 4b01 li s6,0 +2000130e: 4d05 li s10,1 +20001310: bd3d j 2000114e <__divdf3+0x5c> +20001312: 0014e493 ori s1,s1,1 +20001316: 4401 li s0,0 +20001318: 4685 li a3,1 +2000131a: b5b5 j 20001186 <__divdf3+0x94> +2000131c: 0034e493 ori s1,s1,3 +20001320: 87e6 mv a5,s9 +20001322: 468d li a3,3 +20001324: b58d j 20001186 <__divdf3+0x94> +20001326: 1f746263 bltu s0,s7,2000150a <__divdf3+0x418> +2000132a: 1c8b8e63 beq s7,s0,20001506 <__divdf3+0x414> +2000132e: 86e2 mv a3,s8 +20001330: 1b7d addi s6,s6,-1 +20001332: 4c01 li s8,0 +20001334: 00841713 slli a4,s0,0x8 +20001338: 01075313 srli t1,a4,0x10 +2000133c: 026bd433 divu s0,s7,t1 +20001340: 0187d613 srli a2,a5,0x18 +20001344: 8e59 or a2,a2,a4 +20001346: 01061893 slli a7,a2,0x10 +2000134a: 0108d893 srli a7,a7,0x10 +2000134e: 0106d713 srli a4,a3,0x10 +20001352: 00879813 slli a6,a5,0x8 +20001356: 026bfbb3 remu s7,s7,t1 +2000135a: 02888533 mul a0,a7,s0 +2000135e: 0bc2 slli s7,s7,0x10 +20001360: 017767b3 or a5,a4,s7 +20001364: 00a7f863 bgeu a5,a0,20001374 <__divdf3+0x282> +20001368: 97b2 add a5,a5,a2 +2000136a: fff40713 addi a4,s0,-1 # 7fffff +2000136e: 24c7f663 bgeu a5,a2,200015ba <__divdf3+0x4c8> +20001372: 843a mv s0,a4 +20001374: 8f89 sub a5,a5,a0 +20001376: 0267d733 divu a4,a5,t1 +2000137a: 06c2 slli a3,a3,0x10 +2000137c: 82c1 srli a3,a3,0x10 +2000137e: 0267f7b3 remu a5,a5,t1 +20001382: 02e88fb3 mul t6,a7,a4 +20001386: 07c2 slli a5,a5,0x10 +20001388: 8edd or a3,a3,a5 +2000138a: 01f6f863 bgeu a3,t6,2000139a <__divdf3+0x2a8> +2000138e: 96b2 add a3,a3,a2 +20001390: fff70793 addi a5,a4,-1 +20001394: 20c6fe63 bgeu a3,a2,200015b0 <__divdf3+0x4be> +20001398: 873e mv a4,a5 +2000139a: 0442 slli s0,s0,0x10 +2000139c: 8c59 or s0,s0,a4 +2000139e: 01041793 slli a5,s0,0x10 +200013a2: 01081e13 slli t3,a6,0x10 +200013a6: 83c1 srli a5,a5,0x10 +200013a8: 010e5e13 srli t3,t3,0x10 +200013ac: 01085e93 srli t4,a6,0x10 +200013b0: 01045513 srli a0,s0,0x10 +200013b4: 02fe8733 mul a4,t4,a5 +200013b8: 41f686b3 sub a3,a3,t6 +200013bc: 03c78f33 mul t5,a5,t3 +200013c0: 03c50fb3 mul t6,a0,t3 +200013c4: 010f5793 srli a5,t5,0x10 +200013c8: 977e add a4,a4,t6 +200013ca: 97ba add a5,a5,a4 +200013cc: 03d50533 mul a0,a0,t4 +200013d0: 01f7f463 bgeu a5,t6,200013d8 <__divdf3+0x2e6> +200013d4: 6741 lui a4,0x10 +200013d6: 953a add a0,a0,a4 +200013d8: 010f1f93 slli t6,t5,0x10 +200013dc: 0107d713 srli a4,a5,0x10 +200013e0: 01079f13 slli t5,a5,0x10 +200013e4: 010fdf93 srli t6,t6,0x10 +200013e8: 00a707b3 add a5,a4,a0 +200013ec: 9f7e add t5,t5,t6 +200013ee: 0ef6e263 bltu a3,a5,200014d2 <__divdf3+0x3e0> +200013f2: 0cf68e63 beq a3,a5,200014ce <__divdf3+0x3dc> +200013f6: 41ec0f33 sub t5,s8,t5 +200013fa: 01ec3c33 sltu s8,s8,t5 +200013fe: 8e9d sub a3,a3,a5 +20001400: 3ffb0f93 addi t6,s6,1023 +20001404: 418686b3 sub a3,a3,s8 +20001408: 877e mv a4,t6 +2000140a: 16d60463 beq a2,a3,20001572 <__divdf3+0x480> +2000140e: 0266d7b3 divu a5,a3,t1 +20001412: 010f5513 srli a0,t5,0x10 +20001416: 0266f6b3 remu a3,a3,t1 +2000141a: 02f882b3 mul t0,a7,a5 +2000141e: 06c2 slli a3,a3,0x10 +20001420: 8ec9 or a3,a3,a0 +20001422: 0056fb63 bgeu a3,t0,20001438 <__divdf3+0x346> +20001426: 96b2 add a3,a3,a2 +20001428: fff78513 addi a0,a5,-1 +2000142c: 1ac6e263 bltu a3,a2,200015d0 <__divdf3+0x4de> +20001430: 1a56f063 bgeu a3,t0,200015d0 <__divdf3+0x4de> +20001434: 17f9 addi a5,a5,-2 +20001436: 96b2 add a3,a3,a2 +20001438: 405686b3 sub a3,a3,t0 +2000143c: 0266d533 divu a0,a3,t1 +20001440: 0f42 slli t5,t5,0x10 +20001442: 010f5f13 srli t5,t5,0x10 +20001446: 0266f6b3 remu a3,a3,t1 +2000144a: 02a888b3 mul a7,a7,a0 +2000144e: 06c2 slli a3,a3,0x10 +20001450: 00df6f33 or t5,t5,a3 +20001454: 011f7b63 bgeu t5,a7,2000146a <__divdf3+0x378> +20001458: 9f32 add t5,t5,a2 +2000145a: fff50693 addi a3,a0,-1 +2000145e: 16cf6b63 bltu t5,a2,200015d4 <__divdf3+0x4e2> +20001462: 171f7963 bgeu t5,a7,200015d4 <__divdf3+0x4e2> +20001466: 1579 addi a0,a0,-2 +20001468: 9f32 add t5,t5,a2 +2000146a: 07c2 slli a5,a5,0x10 +2000146c: 8fc9 or a5,a5,a0 +2000146e: 01079693 slli a3,a5,0x10 +20001472: 82c1 srli a3,a3,0x10 +20001474: 0107d293 srli t0,a5,0x10 +20001478: 02de8533 mul a0,t4,a3 +2000147c: 411f0f33 sub t5,t5,a7 +20001480: 03c28333 mul t1,t0,t3 +20001484: 02de0e33 mul t3,t3,a3 +20001488: 951a add a0,a0,t1 +2000148a: 010e5693 srli a3,t3,0x10 +2000148e: 96aa add a3,a3,a0 +20001490: 025e8eb3 mul t4,t4,t0 +20001494: 0066f463 bgeu a3,t1,2000149c <__divdf3+0x3aa> +20001498: 6541 lui a0,0x10 +2000149a: 9eaa add t4,t4,a0 +2000149c: 0106d513 srli a0,a3,0x10 +200014a0: 0e42 slli t3,t3,0x10 +200014a2: 010e5e13 srli t3,t3,0x10 +200014a6: 06c2 slli a3,a3,0x10 +200014a8: 9576 add a0,a0,t4 +200014aa: 96f2 add a3,a3,t3 +200014ac: 0aaf6763 bltu t5,a0,2000155a <__divdf3+0x468> +200014b0: 0aaf0363 beq t5,a0,20001556 <__divdf3+0x464> +200014b4: c0200693 li a3,-1022 +200014b8: 0017e793 ori a5,a5,1 +200014bc: 12db4863 blt s6,a3,200015ec <__divdf3+0x4fa> +200014c0: 00478513 addi a0,a5,4 +200014c4: 00f537b3 sltu a5,a0,a5 +200014c8: 810d srli a0,a0,0x3 +200014ca: 943e add s0,s0,a5 +200014cc: bbe5 j 200012c4 <__divdf3+0x1d2> +200014ce: f3ec74e3 bgeu s8,t5,200013f6 <__divdf3+0x304> +200014d2: 010c0733 add a4,s8,a6 +200014d6: 01873533 sltu a0,a4,s8 +200014da: 00c50fb3 add t6,a0,a2 +200014de: 96fe add a3,a3,t6 +200014e0: 8c3a mv s8,a4 +200014e2: fff40f93 addi t6,s0,-1 +200014e6: 0cd67163 bgeu a2,a3,200015a8 <__divdf3+0x4b6> +200014ea: 00f6e663 bltu a3,a5,200014f6 <__divdf3+0x404> +200014ee: 0ad79f63 bne a5,a3,200015ac <__divdf3+0x4ba> +200014f2: 0be77d63 bgeu a4,t5,200015ac <__divdf3+0x4ba> +200014f6: 9742 add a4,a4,a6 +200014f8: 01073533 sltu a0,a4,a6 +200014fc: 9532 add a0,a0,a2 +200014fe: 1479 addi s0,s0,-2 +20001500: 96aa add a3,a3,a0 +20001502: 8c3a mv s8,a4 +20001504: bdcd j 200013f6 <__divdf3+0x304> +20001506: e2fc64e3 bltu s8,a5,2000132e <__divdf3+0x23c> +2000150a: 01fb9693 slli a3,s7,0x1f +2000150e: 001c5713 srli a4,s8,0x1 +20001512: 001bdb93 srli s7,s7,0x1 +20001516: 8ed9 or a3,a3,a4 +20001518: 0c7e slli s8,s8,0x1f +2000151a: bd29 j 20001334 <__divdf3+0x242> +2000151c: 31a010ef jal 20002836 <__clzsi2> +20001520: 01550793 addi a5,a0,21 # 10015 +20001524: 46f1 li a3,28 +20001526: 02050713 addi a4,a0,32 +2000152a: d4f6d2e3 bge a3,a5,2000126e <__divdf3+0x17c> +2000152e: 1561 addi a0,a0,-8 +20001530: 00a41bb3 sll s7,s0,a0 +20001534: 4c01 li s8,0 +20001536: bb89 j 20001288 <__divdf3+0x196> +20001538: 8566 mv a0,s9 +2000153a: 2fc010ef jal 20002836 <__clzsi2> +2000153e: 01550793 addi a5,a0,21 +20001542: 46f1 li a3,28 +20001544: 02050713 addi a4,a0,32 +20001548: c8f6dae3 bge a3,a5,200011dc <__divdf3+0xea> +2000154c: 1561 addi a0,a0,-8 +2000154e: 00ac9433 sll s0,s9,a0 +20001552: 4781 li a5,0 +20001554: b979 j 200011f2 <__divdf3+0x100> +20001556: d4068ee3 beqz a3,200012b2 <__divdf3+0x1c0> +2000155a: 9f32 add t5,t5,a2 +2000155c: 88fa mv a7,t5 +2000155e: fff78313 addi t1,a5,-1 +20001562: 06cf6b63 bltu t5,a2,200015d8 <__divdf3+0x4e6> +20001566: 12af6a63 bltu t5,a0,2000169a <__divdf3+0x5a8> +2000156a: 14af0363 beq t5,a0,200016b0 <__divdf3+0x5be> +2000156e: 879a mv a5,t1 +20001570: b791 j 200014b4 <__divdf3+0x3c2> +20001572: 4501 li a0,0 +20001574: 4785 li a5,1 +20001576: f5f04ae3 bgtz t6,200014ca <__divdf3+0x3d8> +2000157a: 080f9663 bnez t6,20001606 <__divdf3+0x514> +2000157e: 80000737 lui a4,0x80000 +20001582: 01f41793 slli a5,s0,0x1f +20001586: 177d addi a4,a4,-1 # 7fffffff <__StackTop+0x5ff7dfff> +20001588: 8fd9 or a5,a5,a4 +2000158a: 8005 srli s0,s0,0x1 +2000158c: 00478713 addi a4,a5,4 +20001590: 00f737b3 sltu a5,a4,a5 +20001594: 943e add s0,s0,a5 +20001596: 87ba mv a5,a4 +20001598: 00841713 slli a4,s0,0x8 +2000159c: 12075963 bgez a4,200016ce <__divdf3+0x5dc> +200015a0: 4785 li a5,1 +200015a2: 4681 li a3,0 +200015a4: 4701 li a4,0 +200015a6: b9b9 j 20001204 <__divdf3+0x112> +200015a8: 02d60e63 beq a2,a3,200015e4 <__divdf3+0x4f2> +200015ac: 847e mv s0,t6 +200015ae: b5a1 j 200013f6 <__divdf3+0x304> +200015b0: dff6f4e3 bgeu a3,t6,20001398 <__divdf3+0x2a6> +200015b4: 1779 addi a4,a4,-2 +200015b6: 96b2 add a3,a3,a2 +200015b8: b3cd j 2000139a <__divdf3+0x2a8> +200015ba: daa7fce3 bgeu a5,a0,20001372 <__divdf3+0x280> +200015be: 1479 addi s0,s0,-2 +200015c0: 97b2 add a5,a5,a2 +200015c2: bb4d j 20001374 <__divdf3+0x282> +200015c4: 00f7f693 andi a3,a5,15 +200015c8: 4611 li a2,4 +200015ca: cec68be3 beq a3,a2,200012c0 <__divdf3+0x1ce> +200015ce: bdcd j 200014c0 <__divdf3+0x3ce> +200015d0: 87aa mv a5,a0 +200015d2: b59d j 20001438 <__divdf3+0x346> +200015d4: 8536 mv a0,a3 +200015d6: bd51 j 2000146a <__divdf3+0x378> +200015d8: 879a mv a5,t1 +200015da: eca89de3 bne a7,a0,200014b4 <__divdf3+0x3c2> +200015de: ed069be3 bne a3,a6,200014b4 <__divdf3+0x3c2> +200015e2: b9c1 j 200012b2 <__divdf3+0x1c0> +200015e4: f561 bnez a0,200015ac <__divdf3+0x4ba> +200015e6: f0f6e8e3 bltu a3,a5,200014f6 <__divdf3+0x404> +200015ea: b711 j 200014ee <__divdf3+0x3fc> +200015ec: c0100713 li a4,-1023 +200015f0: 00eb1c63 bne s6,a4,20001608 <__divdf3+0x516> +200015f4: 0017d713 srli a4,a5,0x1 +200015f8: 00176713 ori a4,a4,1 +200015fc: 01f41793 slli a5,s0,0x1f +20001600: 8fd9 or a5,a5,a4 +20001602: 8005 srli s0,s0,0x1 +20001604: b761 j 2000158c <__divdf3+0x49a> +20001606: 57fd li a5,-1 +20001608: 4705 li a4,1 +2000160a: 41f70733 sub a4,a4,t6 +2000160e: 03800693 li a3,56 +20001612: c0e6cde3 blt a3,a4,2000122c <__divdf3+0x13a> +20001616: 46fd li a3,31 +20001618: 0ae6d263 bge a3,a4,200016bc <__divdf3+0x5ca> +2000161c: 5685 li a3,-31 +2000161e: 41f686b3 sub a3,a3,t6 +20001622: 02000613 li a2,32 +20001626: 00d456b3 srl a3,s0,a3 +2000162a: 00c70763 beq a4,a2,20001638 <__divdf3+0x546> +2000162e: 43eb0b13 addi s6,s6,1086 +20001632: 01641433 sll s0,s0,s6 +20001636: 8fc1 or a5,a5,s0 +20001638: 00f037b3 snez a5,a5 +2000163c: 8fd5 or a5,a5,a3 +2000163e: 0077f713 andi a4,a5,7 +20001642: 4681 li a3,0 +20001644: cf11 beqz a4,20001660 <__divdf3+0x56e> +20001646: 00f7f613 andi a2,a5,15 +2000164a: 4511 li a0,4 +2000164c: 4701 li a4,0 +2000164e: 00a60963 beq a2,a0,20001660 <__divdf3+0x56e> +20001652: 00a78633 add a2,a5,a0 +20001656: 00f637b3 sltu a5,a2,a5 +2000165a: 01d79713 slli a4,a5,0x1d +2000165e: 87b2 mv a5,a2 +20001660: 838d srli a5,a5,0x3 +20001662: 8f5d or a4,a4,a5 +20001664: 4781 li a5,0 +20001666: be79 j 20001204 <__divdf3+0x112> +20001668: fa0f90e3 bnez t6,20001608 <__divdf3+0x516> +2000166c: 0077f693 andi a3,a5,7 +20001670: 0017d613 srli a2,a5,0x1 +20001674: 4b7d li s6,31 +20001676: 4705 li a4,1 +20001678: e2ad bnez a3,200016da <__divdf3+0x5e8> +2000167a: 01641b33 sll s6,s0,s6 +2000167e: 8e55 or a2,a2,a3 +20001680: 00cb67b3 or a5,s6,a2 +20001684: 0077f693 andi a3,a5,7 +20001688: 00e45433 srl s0,s0,a4 +2000168c: d691 beqz a3,20001598 <__divdf3+0x4a6> +2000168e: 00f7f713 andi a4,a5,15 +20001692: 4691 li a3,4 +20001694: f0d702e3 beq a4,a3,20001598 <__divdf3+0x4a6> +20001698: bdd5 j 2000158c <__divdf3+0x49a> +2000169a: 00181313 slli t1,a6,0x1 +2000169e: 010338b3 sltu a7,t1,a6 +200016a2: 98b2 add a7,a7,a2 +200016a4: 98fa add a7,a7,t5 +200016a6: 17f9 addi a5,a5,-2 +200016a8: 881a mv a6,t1 +200016aa: f2a88ae3 beq a7,a0,200015de <__divdf3+0x4ec> +200016ae: b519 j 200014b4 <__divdf3+0x3c2> +200016b0: fed865e3 bltu a6,a3,2000169a <__divdf3+0x5a8> +200016b4: 879a mv a5,t1 +200016b6: df069fe3 bne a3,a6,200014b4 <__divdf3+0x3c2> +200016ba: bee5 j 200012b2 <__divdf3+0x1c0> +200016bc: 41eb0b13 addi s6,s6,1054 +200016c0: 016796b3 sll a3,a5,s6 +200016c4: 00d036b3 snez a3,a3 +200016c8: 00e7d633 srl a2,a5,a4 +200016cc: b77d j 2000167a <__divdf3+0x588> +200016ce: 00941693 slli a3,s0,0x9 +200016d2: 82b1 srli a3,a3,0xc +200016d4: 01d41713 slli a4,s0,0x1d +200016d8: b761 j 20001660 <__divdf3+0x56e> +200016da: 00e7f6b3 and a3,a5,a4 +200016de: bf71 j 2000167a <__divdf3+0x588> + +200016e0 <__gedf2>: +200016e0: 0145d893 srli a7,a1,0x14 +200016e4: 001007b7 lui a5,0x100 +200016e8: 0146d713 srli a4,a3,0x14 +200016ec: 882a mv a6,a0 +200016ee: 17fd addi a5,a5,-1 # fffff +200016f0: 7ff00313 li t1,2047 +200016f4: 7ff8f893 andi a7,a7,2047 +200016f8: 00677533 and a0,a4,t1 +200016fc: 8e42 mv t3,a6 +200016fe: 00b7f733 and a4,a5,a1 +20001702: 8eb2 mv t4,a2 +20001704: 8ff5 and a5,a5,a3 +20001706: 81fd srli a1,a1,0x1f +20001708: 82fd srli a3,a3,0x1f +2000170a: 02688e63 beq a7,t1,20001746 <__gedf2+0x66> +2000170e: 00650f63 beq a0,t1,2000172c <__gedf2+0x4c> +20001712: 04089763 bnez a7,20001760 <__gedf2+0x80> +20001716: 01076833 or a6,a4,a6 +2000171a: e121 bnez a0,2000175a <__gedf2+0x7a> +2000171c: 8e5d or a2,a2,a5 +2000171e: c235 beqz a2,20001782 <__gedf2+0xa2> +20001720: 06081c63 bnez a6,20001798 <__gedf2+0xb8> +20001724: 00169513 slli a0,a3,0x1 +20001728: 157d addi a0,a0,-1 +2000172a: 8082 ret +2000172c: 8e5d or a2,a2,a5 +2000172e: e23d bnez a2,20001794 <__gedf2+0xb4> +20001730: 00089563 bnez a7,2000173a <__gedf2+0x5a> +20001734: 01076733 or a4,a4,a6 +20001738: d775 beqz a4,20001724 <__gedf2+0x44> +2000173a: 00d59b63 bne a1,a3,20001750 <__gedf2+0x70> +2000173e: 00159513 slli a0,a1,0x1 +20001742: 157d addi a0,a0,-1 +20001744: 8082 ret +20001746: 01076733 or a4,a4,a6 +2000174a: e729 bnez a4,20001794 <__gedf2+0xb4> +2000174c: 03150e63 beq a0,a7,20001788 <__gedf2+0xa8> +20001750: 40b005b3 neg a1,a1 +20001754: 0015e513 ori a0,a1,1 +20001758: 8082 ret +2000175a: fc0805e3 beqz a6,20001724 <__gedf2+0x44> +2000175e: bff1 j 2000173a <__gedf2+0x5a> +20001760: d965 beqz a0,20001750 <__gedf2+0x70> +20001762: fed597e3 bne a1,a3,20001750 <__gedf2+0x70> +20001766: ff1545e3 blt a0,a7,20001750 <__gedf2+0x70> +2000176a: fca8cae3 blt a7,a0,2000173e <__gedf2+0x5e> +2000176e: fee7e1e3 bltu a5,a4,20001750 <__gedf2+0x70> +20001772: fcf716e3 bne a4,a5,2000173e <__gedf2+0x5e> +20001776: fdceede3 bltu t4,t3,20001750 <__gedf2+0x70> +2000177a: 4501 li a0,0 +2000177c: fdde61e3 bltu t3,t4,2000173e <__gedf2+0x5e> +20001780: 8082 ret +20001782: fc0817e3 bnez a6,20001750 <__gedf2+0x70> +20001786: 8082 ret +20001788: 8fd1 or a5,a5,a2 +2000178a: e789 bnez a5,20001794 <__gedf2+0xb4> +2000178c: fcd592e3 bne a1,a3,20001750 <__gedf2+0x70> +20001790: 4501 li a0,0 +20001792: 8082 ret +20001794: 5579 li a0,-2 +20001796: 8082 ret +20001798: fcd58be3 beq a1,a3,2000176e <__gedf2+0x8e> +2000179c: bf55 j 20001750 <__gedf2+0x70> + +2000179e <__ledf2>: +2000179e: 0145d893 srli a7,a1,0x14 +200017a2: 001007b7 lui a5,0x100 +200017a6: 0146d713 srli a4,a3,0x14 +200017aa: 882a mv a6,a0 +200017ac: 17fd addi a5,a5,-1 # fffff +200017ae: 7ff00313 li t1,2047 +200017b2: 7ff8f893 andi a7,a7,2047 +200017b6: 00677533 and a0,a4,t1 +200017ba: 8e42 mv t3,a6 +200017bc: 00b7f733 and a4,a5,a1 +200017c0: 8eb2 mv t4,a2 +200017c2: 8ff5 and a5,a5,a3 +200017c4: 81fd srli a1,a1,0x1f +200017c6: 82fd srli a3,a3,0x1f +200017c8: 04688363 beq a7,t1,2000180e <__ledf2+0x70> +200017cc: 00650f63 beq a0,t1,200017ea <__ledf2+0x4c> +200017d0: 04089b63 bnez a7,20001826 <__ledf2+0x88> +200017d4: 01076833 or a6,a4,a6 +200017d8: e93d bnez a0,2000184e <__ledf2+0xb0> +200017da: 8e5d or a2,a2,a5 +200017dc: c615 beqz a2,20001808 <__ledf2+0x6a> +200017de: 06081d63 bnez a6,20001858 <__ledf2+0xba> +200017e2: 00169513 slli a0,a3,0x1 +200017e6: 157d addi a0,a0,-1 +200017e8: 8082 ret +200017ea: 8e5d or a2,a2,a5 +200017ec: 4509 li a0,2 +200017ee: ee19 bnez a2,2000180c <__ledf2+0x6e> +200017f0: 00089563 bnez a7,200017fa <__ledf2+0x5c> +200017f4: 01076733 or a4,a4,a6 +200017f8: d76d beqz a4,200017e2 <__ledf2+0x44> +200017fa: 04d58663 beq a1,a3,20001846 <__ledf2+0xa8> +200017fe: 40b005b3 neg a1,a1 +20001802: 0015e513 ori a0,a1,1 +20001806: 8082 ret +20001808: fe081be3 bnez a6,200017fe <__ledf2+0x60> +2000180c: 8082 ret +2000180e: 01076733 or a4,a4,a6 +20001812: e329 bnez a4,20001854 <__ledf2+0xb6> +20001814: ff1515e3 bne a0,a7,200017fe <__ledf2+0x60> +20001818: 8fd1 or a5,a5,a2 +2000181a: 4509 li a0,2 +2000181c: fbe5 bnez a5,2000180c <__ledf2+0x6e> +2000181e: fed590e3 bne a1,a3,200017fe <__ledf2+0x60> +20001822: 4501 li a0,0 +20001824: 8082 ret +20001826: dd61 beqz a0,200017fe <__ledf2+0x60> +20001828: fcd59be3 bne a1,a3,200017fe <__ledf2+0x60> +2000182c: fd1549e3 blt a0,a7,200017fe <__ledf2+0x60> +20001830: 00a8cb63 blt a7,a0,20001846 <__ledf2+0xa8> +20001834: fce7e5e3 bltu a5,a4,200017fe <__ledf2+0x60> +20001838: 00f71763 bne a4,a5,20001846 <__ledf2+0xa8> +2000183c: fdcee1e3 bltu t4,t3,200017fe <__ledf2+0x60> +20001840: 4501 li a0,0 +20001842: fdde75e3 bgeu t3,t4,2000180c <__ledf2+0x6e> +20001846: 00159513 slli a0,a1,0x1 +2000184a: 157d addi a0,a0,-1 +2000184c: 8082 ret +2000184e: f8080ae3 beqz a6,200017e2 <__ledf2+0x44> +20001852: b765 j 200017fa <__ledf2+0x5c> +20001854: 4509 li a0,2 +20001856: 8082 ret +20001858: fcd58ee3 beq a1,a3,20001834 <__ledf2+0x96> +2000185c: b74d j 200017fe <__ledf2+0x60> + +2000185e <__muldf3>: +2000185e: 7179 addi sp,sp,-48 +20001860: 0145d793 srli a5,a1,0x14 +20001864: d422 sw s0,40(sp) +20001866: d226 sw s1,36(sp) +20001868: cc52 sw s4,24(sp) +2000186a: ca56 sw s5,20(sp) +2000186c: c462 sw s8,8(sp) +2000186e: 00c59413 slli s0,a1,0xc +20001872: d606 sw ra,44(sp) +20001874: d04a sw s2,32(sp) +20001876: ce4e sw s3,28(sp) +20001878: c85a sw s6,16(sp) +2000187a: c65e sw s7,12(sp) +2000187c: c266 sw s9,4(sp) +2000187e: c06a sw s10,0(sp) +20001880: 7ff7f793 andi a5,a5,2047 +20001884: 8aaa mv s5,a0 +20001886: 8c32 mv s8,a2 +20001888: 84b6 mv s1,a3 +2000188a: 8031 srli s0,s0,0xc +2000188c: 01f5da13 srli s4,a1,0x1f +20001890: 34078263 beqz a5,20001bd4 <__muldf3+0x376> +20001894: 7ff00713 li a4,2047 +20001898: 22e78463 beq a5,a4,20001ac0 <__muldf3+0x262> +2000189c: 040e slli s0,s0,0x3 +2000189e: 01d55713 srli a4,a0,0x1d +200018a2: 8f41 or a4,a4,s0 +200018a4: 00800437 lui s0,0x800 +200018a8: c0178b13 addi s6,a5,-1023 +200018ac: 00351b93 slli s7,a0,0x3 +200018b0: 8c59 or s0,s0,a4 +200018b2: 4c81 li s9,0 +200018b4: 4d01 li s10,0 +200018b6: 0144d793 srli a5,s1,0x14 +200018ba: 00c49713 slli a4,s1,0xc +200018be: 7ff7f793 andi a5,a5,2047 +200018c2: 00c75a93 srli s5,a4,0xc +200018c6: 80fd srli s1,s1,0x1f +200018c8: 20078f63 beqz a5,20001ae6 <__muldf3+0x288> +200018cc: 7ff00713 li a4,2047 +200018d0: 2ce78e63 beq a5,a4,20001bac <__muldf3+0x34e> +200018d4: c0178793 addi a5,a5,-1023 +200018d8: 4729 li a4,10 +200018da: 9b3e add s6,s6,a5 +200018dc: 25974c63 blt a4,s9,20001b34 <__muldf3+0x2d6> +200018e0: 003a9713 slli a4,s5,0x3 +200018e4: 01dc5793 srli a5,s8,0x1d +200018e8: 8fd9 or a5,a5,a4 +200018ea: 009a46b3 xor a3,s4,s1 +200018ee: 00800737 lui a4,0x800 +200018f2: 4609 li a2,2 +200018f4: 00e7eab3 or s5,a5,a4 +200018f8: 003c1813 slli a6,s8,0x3 +200018fc: 85b6 mv a1,a3 +200018fe: 4781 li a5,0 +20001900: 03965163 bge a2,s9,20001922 <__muldf3+0xc4> +20001904: 4605 li a2,1 +20001906: 01961633 sll a2,a2,s9 +2000190a: 53067713 andi a4,a2,1328 +2000190e: 22071463 bnez a4,20001b36 <__muldf3+0x2d8> +20001912: 24067593 andi a1,a2,576 +20001916: 3c059b63 bnez a1,20001cec <__muldf3+0x48e> +2000191a: 08867613 andi a2,a2,136 +2000191e: 3a061a63 bnez a2,20001cd2 <__muldf3+0x474> +20001922: 010b9793 slli a5,s7,0x10 +20001926: 01081613 slli a2,a6,0x10 +2000192a: 83c1 srli a5,a5,0x10 +2000192c: 8241 srli a2,a2,0x10 +2000192e: 010bdb93 srli s7,s7,0x10 +20001932: 01085813 srli a6,a6,0x10 +20001936: 02c78733 mul a4,a5,a2 +2000193a: 02cb8533 mul a0,s7,a2 +2000193e: 01075313 srli t1,a4,0x10 +20001942: 02f805b3 mul a1,a6,a5 +20001946: 95aa add a1,a1,a0 +20001948: 932e add t1,t1,a1 +2000194a: 030b8eb3 mul t4,s7,a6 +2000194e: 00a37463 bgeu t1,a0,20001956 <__muldf3+0xf8> +20001952: 65c1 lui a1,0x10 +20001954: 9eae add t4,t4,a1 +20001956: 010a9e13 slli t3,s5,0x10 +2000195a: 0742 slli a4,a4,0x10 +2000195c: 010e5e13 srli t3,t3,0x10 +20001960: 010ada93 srli s5,s5,0x10 +20001964: 8341 srli a4,a4,0x10 +20001966: 01031593 slli a1,t1,0x10 +2000196a: 03cb88b3 mul a7,s7,t3 +2000196e: 95ba add a1,a1,a4 +20001970: 01035313 srli t1,t1,0x10 +20001974: 03c78733 mul a4,a5,t3 +20001978: 02fa87b3 mul a5,s5,a5 +2000197c: 01075513 srli a0,a4,0x10 +20001980: 97c6 add a5,a5,a7 +20001982: 953e add a0,a0,a5 +20001984: 035b8bb3 mul s7,s7,s5 +20001988: 01157463 bgeu a0,a7,20001990 <__muldf3+0x132> +2000198c: 67c1 lui a5,0x10 +2000198e: 9bbe add s7,s7,a5 +20001990: 01041793 slli a5,s0,0x10 +20001994: 01071893 slli a7,a4,0x10 +20001998: 83c1 srli a5,a5,0x10 +2000199a: 8041 srli s0,s0,0x10 +2000199c: 0108d893 srli a7,a7,0x10 +200019a0: 01051713 slli a4,a0,0x10 +200019a4: 02f80fb3 mul t6,a6,a5 +200019a8: 9746 add a4,a4,a7 +200019aa: 8141 srli a0,a0,0x10 +200019ac: 933a add t1,t1,a4 +200019ae: 955e add a0,a0,s7 +200019b0: 02c408b3 mul a7,s0,a2 +200019b4: 02c78f33 mul t5,a5,a2 +200019b8: 9fc6 add t6,t6,a7 +200019ba: 010f5613 srli a2,t5,0x10 +200019be: 967e add a2,a2,t6 +200019c0: 02880833 mul a6,a6,s0 +200019c4: 01167463 bgeu a2,a7,200019cc <__muldf3+0x16e> +200019c8: 68c1 lui a7,0x10 +200019ca: 9846 add a6,a6,a7 +200019cc: 0f42 slli t5,t5,0x10 +200019ce: 01061893 slli a7,a2,0x10 +200019d2: 010f5f13 srli t5,t5,0x10 +200019d6: 8241 srli a2,a2,0x10 +200019d8: 9f46 add t5,t5,a7 +200019da: 9642 add a2,a2,a6 +200019dc: 03c408b3 mul a7,s0,t3 +200019e0: 03c78833 mul a6,a5,t3 +200019e4: 02fa87b3 mul a5,s5,a5 +200019e8: 01085e13 srli t3,a6,0x10 +200019ec: 97c6 add a5,a5,a7 +200019ee: 9e3e add t3,t3,a5 +200019f0: 028a8ab3 mul s5,s5,s0 +200019f4: 011e7463 bgeu t3,a7,200019fc <__muldf3+0x19e> +200019f8: 67c1 lui a5,0x10 +200019fa: 9abe add s5,s5,a5 +200019fc: 01081893 slli a7,a6,0x10 +20001a00: 0108d893 srli a7,a7,0x10 +20001a04: 010e1793 slli a5,t3,0x10 +20001a08: 01d30833 add a6,t1,t4 +20001a0c: 97c6 add a5,a5,a7 +20001a0e: 953e add a0,a0,a5 +20001a10: 00e83733 sltu a4,a6,a4 +20001a14: 01e808b3 add a7,a6,t5 +20001a18: 972a add a4,a4,a0 +20001a1a: 963a add a2,a2,a4 +20001a1c: 0108b833 sltu a6,a7,a6 +20001a20: 9832 add a6,a6,a2 +20001a22: 00f537b3 sltu a5,a0,a5 +20001a26: 00a73533 sltu a0,a4,a0 +20001a2a: 8fc9 or a5,a5,a0 +20001a2c: 00e63733 sltu a4,a2,a4 +20001a30: 010e5e13 srli t3,t3,0x10 +20001a34: 00c83633 sltu a2,a6,a2 +20001a38: 97f2 add a5,a5,t3 +20001a3a: 8f51 or a4,a4,a2 +20001a3c: 00989b93 slli s7,a7,0x9 +20001a40: 973e add a4,a4,a5 +20001a42: 00bbebb3 or s7,s7,a1 +20001a46: 9756 add a4,a4,s5 +20001a48: 0726 slli a4,a4,0x9 +20001a4a: 01703bb3 snez s7,s7 +20001a4e: 0178d893 srli a7,a7,0x17 +20001a52: 01785413 srli s0,a6,0x17 +20001a56: 011bebb3 or s7,s7,a7 +20001a5a: 0826 slli a6,a6,0x9 +20001a5c: 00771793 slli a5,a4,0x7 +20001a60: 8c59 or s0,s0,a4 +20001a62: 010bebb3 or s7,s7,a6 +20001a66: 1007c963 bltz a5,20001b78 <__muldf3+0x31a> +20001a6a: 3ffb0793 addi a5,s6,1023 +20001a6e: 20f05b63 blez a5,20001c84 <__muldf3+0x426> +20001a72: 007bf713 andi a4,s7,7 +20001a76: c715 beqz a4,20001aa2 <__muldf3+0x244> +20001a78: 00fbf713 andi a4,s7,15 +20001a7c: 4611 li a2,4 +20001a7e: 02c70263 beq a4,a2,20001aa2 <__muldf3+0x244> +20001a82: 004b8713 addi a4,s7,4 +20001a86: 01773bb3 sltu s7,a4,s7 +20001a8a: 945e add s0,s0,s7 +20001a8c: 8bba mv s7,a4 +20001a8e: 00741713 slli a4,s0,0x7 +20001a92: 00075863 bgez a4,20001aa2 <__muldf3+0x244> +20001a96: ff000737 lui a4,0xff000 +20001a9a: 177d addi a4,a4,-1 # feffffff <__StackTop+0xdef7dfff> +20001a9c: 400b0793 addi a5,s6,1024 +20001aa0: 8c79 and s0,s0,a4 +20001aa2: 7fe00713 li a4,2046 +20001aa6: 24f74963 blt a4,a5,20001cf8 <__muldf3+0x49a> +20001aaa: 01d41713 slli a4,s0,0x1d +20001aae: 003bdb93 srli s7,s7,0x3 +20001ab2: 0426 slli s0,s0,0x9 +20001ab4: 7ff7f793 andi a5,a5,2047 +20001ab8: 01776733 or a4,a4,s7 +20001abc: 8031 srli s0,s0,0xc +20001abe: a849 j 20001b50 <__muldf3+0x2f2> +20001ac0: 00a46bb3 or s7,s0,a0 +20001ac4: 1a0b9463 bnez s7,20001c6c <__muldf3+0x40e> +20001ac8: 8b3e mv s6,a5 +20001aca: 0144d793 srli a5,s1,0x14 +20001ace: 00c49713 slli a4,s1,0xc +20001ad2: 7ff7f793 andi a5,a5,2047 +20001ad6: 4401 li s0,0 +20001ad8: 4ca1 li s9,8 +20001ada: 4d09 li s10,2 +20001adc: 00c75a93 srli s5,a4,0xc +20001ae0: 80fd srli s1,s1,0x1f +20001ae2: de0795e3 bnez a5,200018cc <__muldf3+0x6e> +20001ae6: 018ae833 or a6,s5,s8 +20001aea: 12080863 beqz a6,20001c1a <__muldf3+0x3bc> +20001aee: 220a8863 beqz s5,20001d1e <__muldf3+0x4c0> +20001af2: 8556 mv a0,s5 +20001af4: 543000ef jal 20002836 <__clzsi2> +20001af8: 87aa mv a5,a0 +20001afa: ff550713 addi a4,a0,-11 +20001afe: 46f5 li a3,29 +20001b00: 8e99 sub a3,a3,a4 +20001b02: ff878813 addi a6,a5,-8 # fff8 +20001b06: 010a9733 sll a4,s5,a6 +20001b0a: 00dc56b3 srl a3,s8,a3 +20001b0e: 00e6eab3 or s5,a3,a4 +20001b12: 010c1833 sll a6,s8,a6 +20001b16: 40fb07b3 sub a5,s6,a5 +20001b1a: 4729 li a4,10 +20001b1c: c0d78b13 addi s6,a5,-1011 +20001b20: 01974a63 blt a4,s9,20001b34 <__muldf3+0x2d6> +20001b24: 4789 li a5,2 +20001b26: 009a46b3 xor a3,s4,s1 +20001b2a: df97dce3 bge a5,s9,20001922 <__muldf3+0xc4> +20001b2e: 85b6 mv a1,a3 +20001b30: 4781 li a5,0 +20001b32: bbc9 j 20001904 <__muldf3+0xa6> +20001b34: 85d2 mv a1,s4 +20001b36: 4789 li a5,2 +20001b38: 1afd0463 beq s10,a5,20001ce0 <__muldf3+0x482> +20001b3c: 478d li a5,3 +20001b3e: 12fd0c63 beq s10,a5,20001c76 <__muldf3+0x418> +20001b42: 4785 li a5,1 +20001b44: 86ae mv a3,a1 +20001b46: 04fd1463 bne s10,a5,20001b8e <__muldf3+0x330> +20001b4a: 4781 li a5,0 +20001b4c: 4401 li s0,0 +20001b4e: 4701 li a4,0 +20001b50: 07d2 slli a5,a5,0x14 +20001b52: 50b2 lw ra,44(sp) +20001b54: 8fc1 or a5,a5,s0 +20001b56: 5422 lw s0,40(sp) +20001b58: 06fe slli a3,a3,0x1f +20001b5a: 8fd5 or a5,a5,a3 +20001b5c: 5492 lw s1,36(sp) +20001b5e: 5902 lw s2,32(sp) +20001b60: 49f2 lw s3,28(sp) +20001b62: 4a62 lw s4,24(sp) +20001b64: 4ad2 lw s5,20(sp) +20001b66: 4b42 lw s6,16(sp) +20001b68: 4bb2 lw s7,12(sp) +20001b6a: 4c22 lw s8,8(sp) +20001b6c: 4c92 lw s9,4(sp) +20001b6e: 4d02 lw s10,0(sp) +20001b70: 853a mv a0,a4 +20001b72: 85be mv a1,a5 +20001b74: 6145 addi sp,sp,48 +20001b76: 8082 ret +20001b78: 001bd793 srli a5,s7,0x1 +20001b7c: 001bfb93 andi s7,s7,1 +20001b80: 0177e7b3 or a5,a5,s7 +20001b84: 01f41b93 slli s7,s0,0x1f +20001b88: 0177ebb3 or s7,a5,s7 +20001b8c: 8005 srli s0,s0,0x1 +20001b8e: 400b0793 addi a5,s6,1024 +20001b92: 0b05 addi s6,s6,1 +20001b94: 0ef05863 blez a5,20001c84 <__muldf3+0x426> +20001b98: 007bf713 andi a4,s7,7 +20001b9c: ee0709e3 beqz a4,20001a8e <__muldf3+0x230> +20001ba0: 00fbf713 andi a4,s7,15 +20001ba4: 4611 li a2,4 +20001ba6: ecc71ee3 bne a4,a2,20001a82 <__muldf3+0x224> +20001baa: b5d5 j 20001a8e <__muldf3+0x230> +20001bac: 018ae833 or a6,s5,s8 +20001bb0: 7ffb0b13 addi s6,s6,2047 +20001bb4: 08081b63 bnez a6,20001c4a <__muldf3+0x3ec> +20001bb8: 002ce793 ori a5,s9,2 +20001bbc: 4729 li a4,10 +20001bbe: f6f74be3 blt a4,a5,20001b34 <__muldf3+0x2d6> +20001bc2: 009a45b3 xor a1,s4,s1 +20001bc6: 86ae mv a3,a1 +20001bc8: 1c0c8e63 beqz s9,20001da4 <__muldf3+0x546> +20001bcc: 8cbe mv s9,a5 +20001bce: 4a81 li s5,0 +20001bd0: 4789 li a5,2 +20001bd2: bb0d j 20001904 <__muldf3+0xa6> +20001bd4: 00a46bb3 or s7,s0,a0 +20001bd8: 020b8c63 beqz s7,20001c10 <__muldf3+0x3b2> +20001bdc: 12040363 beqz s0,20001d02 <__muldf3+0x4a4> +20001be0: 8522 mv a0,s0 +20001be2: 455000ef jal 20002836 <__clzsi2> +20001be6: 872a mv a4,a0 +20001be8: ff550693 addi a3,a0,-11 +20001bec: 47f5 li a5,29 +20001bee: ff870b93 addi s7,a4,-8 +20001bf2: 8f95 sub a5,a5,a3 +20001bf4: 01741433 sll s0,s0,s7 +20001bf8: 00fad7b3 srl a5,s5,a5 +20001bfc: 8c5d or s0,s0,a5 +20001bfe: 017a9bb3 sll s7,s5,s7 +20001c02: c0d00793 li a5,-1011 +20001c06: 40e78b33 sub s6,a5,a4 +20001c0a: 4c81 li s9,0 +20001c0c: 4d01 li s10,0 +20001c0e: b165 j 200018b6 <__muldf3+0x58> +20001c10: 4401 li s0,0 +20001c12: 4c91 li s9,4 +20001c14: 4b01 li s6,0 +20001c16: 4d05 li s10,1 +20001c18: b979 j 200018b6 <__muldf3+0x58> +20001c1a: 001cec93 ori s9,s9,1 +20001c1e: 47a9 li a5,10 +20001c20: f197cae3 blt a5,s9,20001b34 <__muldf3+0x2d6> +20001c24: 009a45b3 xor a1,s4,s1 +20001c28: 4709 li a4,2 +20001c2a: 86ae mv a3,a1 +20001c2c: 4a81 li s5,0 +20001c2e: 4785 li a5,1 +20001c30: cd974ae3 blt a4,s9,20001904 <__muldf3+0xa6> +20001c34: 4709 li a4,2 +20001c36: 0ae78563 beq a5,a4,20001ce0 <__muldf3+0x482> +20001c3a: 4d05 li s10,1 +20001c3c: 4785 li a5,1 +20001c3e: 4401 li s0,0 +20001c40: 4b81 li s7,0 +20001c42: 86ae mv a3,a1 +20001c44: f4fd15e3 bne s10,a5,20001b8e <__muldf3+0x330> +20001c48: b709 j 20001b4a <__muldf3+0x2ec> +20001c4a: 003cec93 ori s9,s9,3 +20001c4e: 4729 li a4,10 +20001c50: 15974563 blt a4,s9,20001d9a <__muldf3+0x53c> +20001c54: 4705 li a4,1 +20001c56: 01971633 sll a2,a4,s9 +20001c5a: 08867613 andi a2,a2,136 +20001c5e: 009a46b3 xor a3,s4,s1 +20001c62: 8862 mv a6,s8 +20001c64: 478d li a5,3 +20001c66: ca060ee3 beqz a2,20001922 <__muldf3+0xc4> +20001c6a: a0a5 j 20001cd2 <__muldf3+0x474> +20001c6c: 8baa mv s7,a0 +20001c6e: 8b3e mv s6,a5 +20001c70: 4cb1 li s9,12 +20001c72: 4d0d li s10,3 +20001c74: b189 j 200018b6 <__muldf3+0x58> +20001c76: 4681 li a3,0 +20001c78: 7ff00793 li a5,2047 +20001c7c: 00080437 lui s0,0x80 +20001c80: 4701 li a4,0 +20001c82: b5f9 j 20001b50 <__muldf3+0x2f2> +20001c84: 4605 li a2,1 +20001c86: ebdd bnez a5,20001d3c <__muldf3+0x4de> +20001c88: 41eb0b13 addi s6,s6,1054 +20001c8c: 016b97b3 sll a5,s7,s6 +20001c90: 00f037b3 snez a5,a5 +20001c94: 01641b33 sll s6,s0,s6 +20001c98: 0167e7b3 or a5,a5,s6 +20001c9c: 00cbd733 srl a4,s7,a2 +20001ca0: 8f5d or a4,a4,a5 +20001ca2: 00777793 andi a5,a4,7 +20001ca6: 00c45633 srl a2,s0,a2 +20001caa: cf81 beqz a5,20001cc2 <__muldf3+0x464> +20001cac: 00f77793 andi a5,a4,15 +20001cb0: 4591 li a1,4 +20001cb2: 00b78863 beq a5,a1,20001cc2 <__muldf3+0x464> +20001cb6: 00b707b3 add a5,a4,a1 +20001cba: 00e7b733 sltu a4,a5,a4 +20001cbe: 963a add a2,a2,a4 +20001cc0: 873e mv a4,a5 +20001cc2: 00861793 slli a5,a2,0x8 +20001cc6: 0e07d163 bgez a5,20001da8 <__muldf3+0x54a> +20001cca: 4785 li a5,1 +20001ccc: 4401 li s0,0 +20001cce: 4701 li a4,0 +20001cd0: b541 j 20001b50 <__muldf3+0x2f2> +20001cd2: 8d3e mv s10,a5 +20001cd4: 4789 li a5,2 +20001cd6: 85a6 mv a1,s1 +20001cd8: 8456 mv s0,s5 +20001cda: 8bc2 mv s7,a6 +20001cdc: e6fd10e3 bne s10,a5,20001b3c <__muldf3+0x2de> +20001ce0: 86ae mv a3,a1 +20001ce2: 7ff00793 li a5,2047 +20001ce6: 4401 li s0,0 +20001ce8: 4701 li a4,0 +20001cea: b59d j 20001b50 <__muldf3+0x2f2> +20001cec: 4681 li a3,0 +20001cee: 7ff00793 li a5,2047 +20001cf2: 00080437 lui s0,0x80 +20001cf6: bda9 j 20001b50 <__muldf3+0x2f2> +20001cf8: 7ff00793 li a5,2047 +20001cfc: 4401 li s0,0 +20001cfe: 4701 li a4,0 +20001d00: bd81 j 20001b50 <__muldf3+0x2f2> +20001d02: 335000ef jal 20002836 <__clzsi2> +20001d06: 01550693 addi a3,a0,21 +20001d0a: 47f1 li a5,28 +20001d0c: 02050713 addi a4,a0,32 +20001d10: ecd7dee3 bge a5,a3,20001bec <__muldf3+0x38e> +20001d14: 1561 addi a0,a0,-8 +20001d16: 00aa9433 sll s0,s5,a0 +20001d1a: 4b81 li s7,0 +20001d1c: b5dd j 20001c02 <__muldf3+0x3a4> +20001d1e: 8562 mv a0,s8 +20001d20: 317000ef jal 20002836 <__clzsi2> +20001d24: 01550713 addi a4,a0,21 +20001d28: 46f1 li a3,28 +20001d2a: 02050793 addi a5,a0,32 +20001d2e: dce6d8e3 bge a3,a4,20001afe <__muldf3+0x2a0> +20001d32: 1561 addi a0,a0,-8 +20001d34: 00ac1ab3 sll s5,s8,a0 +20001d38: 4801 li a6,0 +20001d3a: bbf1 j 20001b16 <__muldf3+0x2b8> +20001d3c: 8e1d sub a2,a2,a5 +20001d3e: 03800713 li a4,56 +20001d42: e0c744e3 blt a4,a2,20001b4a <__muldf3+0x2ec> +20001d46: 477d li a4,31 +20001d48: f4c750e3 bge a4,a2,20001c88 <__muldf3+0x42a> +20001d4c: 5705 li a4,-31 +20001d4e: 40f707b3 sub a5,a4,a5 +20001d52: 02000713 li a4,32 +20001d56: 00f457b3 srl a5,s0,a5 +20001d5a: 00e60863 beq a2,a4,20001d6a <__muldf3+0x50c> +20001d5e: 43eb0b13 addi s6,s6,1086 +20001d62: 01641b33 sll s6,s0,s6 +20001d66: 016bebb3 or s7,s7,s6 +20001d6a: 01703733 snez a4,s7 +20001d6e: 8f5d or a4,a4,a5 +20001d70: 00777793 andi a5,a4,7 +20001d74: 4401 li s0,0 +20001d76: cf91 beqz a5,20001d92 <__muldf3+0x534> +20001d78: 00f77613 andi a2,a4,15 +20001d7c: 4591 li a1,4 +20001d7e: 4781 li a5,0 +20001d80: 00b60963 beq a2,a1,20001d92 <__muldf3+0x534> +20001d84: 00b70633 add a2,a4,a1 +20001d88: 00e63733 sltu a4,a2,a4 +20001d8c: 01d71793 slli a5,a4,0x1d +20001d90: 8732 mv a4,a2 +20001d92: 830d srli a4,a4,0x3 +20001d94: 8f5d or a4,a4,a5 +20001d96: 4781 li a5,0 +20001d98: bb65 j 20001b50 <__muldf3+0x2f2> +20001d9a: 4681 li a3,0 +20001d9c: 00080437 lui s0,0x80 +20001da0: 4701 li a4,0 +20001da2: b37d j 20001b50 <__muldf3+0x2f2> +20001da4: 4789 li a5,2 +20001da6: b579 j 20001c34 <__muldf3+0x3d6> +20001da8: 00961413 slli s0,a2,0x9 +20001dac: 8031 srli s0,s0,0xc +20001dae: 01d61793 slli a5,a2,0x1d +20001db2: b7c5 j 20001d92 <__muldf3+0x534> + +20001db4 <__subdf3>: +20001db4: 001007b7 lui a5,0x100 +20001db8: 17fd addi a5,a5,-1 # fffff +20001dba: 1101 addi sp,sp,-32 +20001dbc: 00b7f8b3 and a7,a5,a1 +20001dc0: 0146d813 srli a6,a3,0x14 +20001dc4: 8ff5 and a5,a5,a3 +20001dc6: 088e slli a7,a7,0x3 +20001dc8: 00379713 slli a4,a5,0x3 +20001dcc: ca26 sw s1,20(sp) +20001dce: c452 sw s4,8(sp) +20001dd0: c256 sw s5,4(sp) +20001dd2: 01d55a13 srli s4,a0,0x1d +20001dd6: 0145da93 srli s5,a1,0x14 +20001dda: 01d65793 srli a5,a2,0x1d +20001dde: 01f5d493 srli s1,a1,0x1f +20001de2: 7ff00313 li t1,2047 +20001de6: ce06 sw ra,28(sp) +20001de8: cc22 sw s0,24(sp) +20001dea: c84a sw s2,16(sp) +20001dec: c64e sw s3,12(sp) +20001dee: 7ff87813 andi a6,a6,2047 +20001df2: 011a6a33 or s4,s4,a7 +20001df6: 8e32 mv t3,a2 +20001df8: 8fd9 or a5,a5,a4 +20001dfa: 82fd srli a3,a3,0x1f +20001dfc: 006afab3 and s5,s5,t1 +20001e00: 85a6 mv a1,s1 +20001e02: 00351e93 slli t4,a0,0x3 +20001e06: 00361893 slli a7,a2,0x3 +20001e0a: 16680863 beq a6,t1,20001f7a <__subdf3+0x1c6> +20001e0e: 0016c693 xori a3,a3,1 +20001e12: 410a8733 sub a4,s5,a6 +20001e16: 0cd48563 beq s1,a3,20001ee0 <__subdf3+0x12c> +20001e1a: 5ae05263 blez a4,200023be <__subdf3+0x60a> +20001e1e: 18080b63 beqz a6,20001fb4 <__subdf3+0x200> +20001e22: 386a8f63 beq s5,t1,200021c0 <__subdf3+0x40c> +20001e26: 03800693 li a3,56 +20001e2a: 1ae6c363 blt a3,a4,20001fd0 <__subdf3+0x21c> +20001e2e: 008006b7 lui a3,0x800 +20001e32: 8fd5 or a5,a5,a3 +20001e34: 46fd li a3,31 +20001e36: 46e6c463 blt a3,a4,2000229e <__subdf3+0x4ea> +20001e3a: 02000693 li a3,32 +20001e3e: 8e99 sub a3,a3,a4 +20001e40: 00d79433 sll s0,a5,a3 +20001e44: 00d896b3 sll a3,a7,a3 +20001e48: 00e8d8b3 srl a7,a7,a4 +20001e4c: 00d036b3 snez a3,a3 +20001e50: 01146433 or s0,s0,a7 +20001e54: 00e7d733 srl a4,a5,a4 +20001e58: 8c55 or s0,s0,a3 +20001e5a: 40ea0a33 sub s4,s4,a4 +20001e5e: 408e8433 sub s0,t4,s0 +20001e62: 008ebeb3 sltu t4,t4,s0 +20001e66: 41da0a33 sub s4,s4,t4 +20001e6a: 008a1793 slli a5,s4,0x8 +20001e6e: 2e07c363 bltz a5,20002154 <__subdf3+0x3a0> +20001e72: 00747793 andi a5,s0,7 +20001e76: 32078d63 beqz a5,200021b0 <__subdf3+0x3fc> +20001e7a: 00f47793 andi a5,s0,15 +20001e7e: 4711 li a4,4 +20001e80: 32e78863 beq a5,a4,200021b0 <__subdf3+0x3fc> +20001e84: 00440793 addi a5,s0,4 # 80004 +20001e88: 0087b433 sltu s0,a5,s0 +20001e8c: 9a22 add s4,s4,s0 +20001e8e: 843e mv s0,a5 +20001e90: 008a1793 slli a5,s4,0x8 +20001e94: 3007de63 bgez a5,200021b0 <__subdf3+0x3fc> +20001e98: 001a8793 addi a5,s5,1 +20001e9c: 7ff00713 li a4,2047 +20001ea0: 0014f593 andi a1,s1,1 +20001ea4: 26e78f63 beq a5,a4,20002122 <__subdf3+0x36e> +20001ea8: ff800737 lui a4,0xff800 +20001eac: 177d addi a4,a4,-1 # ff7fffff <__StackTop+0xdf77dfff> +20001eae: 7ff7f793 andi a5,a5,2047 +20001eb2: 00ea7733 and a4,s4,a4 +20001eb6: 01d71613 slli a2,a4,0x1d +20001eba: 800d srli s0,s0,0x3 +20001ebc: 0726 slli a4,a4,0x9 +20001ebe: 8e41 or a2,a2,s0 +20001ec0: 8331 srli a4,a4,0xc +20001ec2: 40f2 lw ra,28(sp) +20001ec4: 4462 lw s0,24(sp) +20001ec6: 07d2 slli a5,a5,0x14 +20001ec8: 05fe slli a1,a1,0x1f +20001eca: 8fd9 or a5,a5,a4 +20001ecc: 8fcd or a5,a5,a1 +20001ece: 44d2 lw s1,20(sp) +20001ed0: 4942 lw s2,16(sp) +20001ed2: 49b2 lw s3,12(sp) +20001ed4: 4a22 lw s4,8(sp) +20001ed6: 4a92 lw s5,4(sp) +20001ed8: 8532 mv a0,a2 +20001eda: 85be mv a1,a5 +20001edc: 6105 addi sp,sp,32 +20001ede: 8082 ret +20001ee0: 5ae05863 blez a4,20002490 <__subdf3+0x6dc> +20001ee4: 20081c63 bnez a6,200020fc <__subdf3+0x348> +20001ee8: 0117e733 or a4,a5,a7 +20001eec: 22070e63 beqz a4,20002128 <__subdf3+0x374> +20001ef0: fffa8713 addi a4,s5,-1 +20001ef4: 46070c63 beqz a4,2000236c <__subdf3+0x5b8> +20001ef8: 5c6a8463 beq s5,t1,200024c0 <__subdf3+0x70c> +20001efc: 03800693 li a3,56 +20001f00: 20e6c863 blt a3,a4,20002110 <__subdf3+0x35c> +20001f04: 46fd li a3,31 +20001f06: 52e6c063 blt a3,a4,20002426 <__subdf3+0x672> +20001f0a: 02000613 li a2,32 +20001f0e: 8e19 sub a2,a2,a4 +20001f10: 00c796b3 sll a3,a5,a2 +20001f14: 00c89633 sll a2,a7,a2 +20001f18: 00e8d8b3 srl a7,a7,a4 +20001f1c: 00c03633 snez a2,a2 +20001f20: 00e7d733 srl a4,a5,a4 +20001f24: 0116e6b3 or a3,a3,a7 +20001f28: 00c6e7b3 or a5,a3,a2 +20001f2c: 9a3a add s4,s4,a4 +20001f2e: 9ebe add t4,t4,a5 +20001f30: 00feb7b3 sltu a5,t4,a5 +20001f34: 9a3e add s4,s4,a5 +20001f36: 8476 mv s0,t4 +20001f38: 008a1793 slli a5,s4,0x8 +20001f3c: f207dbe3 bgez a5,20001e72 <__subdf3+0xbe> +20001f40: 0a85 addi s5,s5,1 +20001f42: 7ff00793 li a5,2047 +20001f46: 4cfa8c63 beq s5,a5,2000241e <__subdf3+0x66a> +20001f4a: ff8007b7 lui a5,0xff800 +20001f4e: 17fd addi a5,a5,-1 # ff7fffff <__StackTop+0xdf77dfff> +20001f50: 00fa77b3 and a5,s4,a5 +20001f54: 00145713 srli a4,s0,0x1 +20001f58: 8805 andi s0,s0,1 +20001f5a: 01f79693 slli a3,a5,0x1f +20001f5e: 8f41 or a4,a4,s0 +20001f60: 0017da13 srli s4,a5,0x1 +20001f64: 00e6e433 or s0,a3,a4 +20001f68: 00747793 andi a5,s0,7 +20001f6c: d395 beqz a5,20001e90 <__subdf3+0xdc> +20001f6e: 00f47793 andi a5,s0,15 +20001f72: 4711 li a4,4 +20001f74: f0e798e3 bne a5,a4,20001e84 <__subdf3+0xd0> +20001f78: bf21 j 20001e90 <__subdf3+0xdc> +20001f7a: 0117e733 or a4,a5,a7 +20001f7e: 801a8613 addi a2,s5,-2047 +20001f82: c769 beqz a4,2000204c <__subdf3+0x298> +20001f84: 0cd48863 beq s1,a3,20002054 <__subdf3+0x2a0> +20001f88: 10060763 beqz a2,20002096 <__subdf3+0x2e2> +20001f8c: 2c0a8a63 beqz s5,20002260 <__subdf3+0x4ac> +20001f90: 003e1713 slli a4,t3,0x3 +20001f94: 01d79613 slli a2,a5,0x1d +20001f98: 830d srli a4,a4,0x3 +20001f9a: 84b6 mv s1,a3 +20001f9c: 8e59 or a2,a2,a4 +20001f9e: 838d srli a5,a5,0x3 +20001fa0: 8e5d or a2,a2,a5 +20001fa2: 20060963 beqz a2,200021b4 <__subdf3+0x400> +20001fa6: 4581 li a1,0 +20001fa8: 7ff00793 li a5,2047 +20001fac: 00080737 lui a4,0x80 +20001fb0: 4601 li a2,0 +20001fb2: bf01 j 20001ec2 <__subdf3+0x10e> +20001fb4: 0117e733 or a4,a5,a7 +20001fb8: 16070863 beqz a4,20002128 <__subdf3+0x374> +20001fbc: fffa8713 addi a4,s5,-1 +20001fc0: 42070863 beqz a4,200023f0 <__subdf3+0x63c> +20001fc4: 1e6a8e63 beq s5,t1,200021c0 <__subdf3+0x40c> +20001fc8: 03800693 li a3,56 +20001fcc: e6e6d4e3 bge a3,a4,20001e34 <__subdf3+0x80> +20001fd0: fffe8413 addi s0,t4,-1 +20001fd4: 008ebeb3 sltu t4,t4,s0 +20001fd8: 41da0a33 sub s4,s4,t4 +20001fdc: 008a1713 slli a4,s4,0x8 +20001fe0: 008007b7 lui a5,0x800 +20001fe4: ea0750e3 bgez a4,20001e84 <__subdf3+0xd0> +20001fe8: fff78a13 addi s4,a5,-1 # 7fffff +20001fec: 547d li s0,-1 +20001fee: 8552 mv a0,s4 +20001ff0: 047000ef jal 20002836 <__clzsi2> +20001ff4: ff850713 addi a4,a0,-8 +20001ff8: 02000793 li a5,32 +20001ffc: 40e786b3 sub a3,a5,a4 +20002000: 00d456b3 srl a3,s0,a3 +20002004: 00ea1a33 sll s4,s4,a4 +20002008: 0146e6b3 or a3,a3,s4 +2000200c: 00e41433 sll s0,s0,a4 +20002010: 23574b63 blt a4,s5,20002246 <__subdf3+0x492> +20002014: 41570733 sub a4,a4,s5 +20002018: 0705 addi a4,a4,1 # 80001 +2000201a: 8f99 sub a5,a5,a4 +2000201c: 00f41633 sll a2,s0,a5 +20002020: 00c03633 snez a2,a2 +20002024: 00e45a33 srl s4,s0,a4 +20002028: 00f697b3 sll a5,a3,a5 +2000202c: 01466633 or a2,a2,s4 +20002030: 00c7e433 or s0,a5,a2 +20002034: 00e6da33 srl s4,a3,a4 +20002038: 014467b3 or a5,s0,s4 +2000203c: 4a81 li s5,0 +2000203e: f78d bnez a5,20001f68 <__subdf3+0x1b4> +20002040: 0014f593 andi a1,s1,1 +20002044: 4781 li a5,0 +20002046: 4701 li a4,0 +20002048: 4601 li a2,0 +2000204a: bda5 j 20001ec2 <__subdf3+0x10e> +2000204c: 0016c693 xori a3,a3,1 +20002050: f2d49ce3 bne s1,a3,20001f88 <__subdf3+0x1d4> +20002054: 16060e63 beqz a2,200021d0 <__subdf3+0x41c> +20002058: 2c0a9263 bnez s5,2000231c <__subdf3+0x568> +2000205c: 8742 mv a4,a6 +2000205e: 01da66b3 or a3,s4,t4 +20002062: 52068b63 beqz a3,20002598 <__subdf3+0x7e4> +20002066: fff70693 addi a3,a4,-1 +2000206a: 30068163 beqz a3,2000236c <__subdf3+0x5b8> +2000206e: 7ff00613 li a2,2047 +20002072: 2ac70563 beq a4,a2,2000231c <__subdf3+0x568> +20002076: 03800613 li a2,56 +2000207a: 5ad65463 bge a2,a3,20002622 <__subdf3+0x86e> +2000207e: 00879693 slli a3,a5,0x8 +20002082: 00800a37 lui s4,0x800 +20002086: 8aba mv s5,a4 +20002088: 4401 li s0,0 +2000208a: ea06cbe3 bltz a3,20001f40 <__subdf3+0x18c> +2000208e: 00188413 addi s0,a7,1 # 10001 +20002092: 8a3e mv s4,a5 +20002094: bbc5 j 20001e84 <__subdf3+0xd0> +20002096: 001a8713 addi a4,s5,1 +2000209a: 7fe77713 andi a4,a4,2046 +2000209e: 18071163 bnez a4,20002220 <__subdf3+0x46c> +200020a2: 0117e633 or a2,a5,a7 +200020a6: 01da6733 or a4,s4,t4 +200020aa: 280a9c63 bnez s5,20002342 <__subdf3+0x58e> +200020ae: 46070e63 beqz a4,2000252a <__subdf3+0x776> +200020b2: 14060d63 beqz a2,2000220c <__subdf3+0x458> +200020b6: 411e85b3 sub a1,t4,a7 +200020ba: 00beb633 sltu a2,t4,a1 +200020be: 40fa0733 sub a4,s4,a5 +200020c2: 8f11 sub a4,a4,a2 +200020c4: 00871613 slli a2,a4,0x8 +200020c8: 52065a63 bgez a2,200025fc <__subdf3+0x848> +200020cc: 41d88eb3 sub t4,a7,t4 +200020d0: 01d8b8b3 sltu a7,a7,t4 +200020d4: 414787b3 sub a5,a5,s4 +200020d8: 411787b3 sub a5,a5,a7 +200020dc: 00fee733 or a4,t4,a5 +200020e0: 8476 mv s0,t4 +200020e2: 84b6 mv s1,a3 +200020e4: df31 beqz a4,20002040 <__subdf3+0x28c> +200020e6: 00879713 slli a4,a5,0x8 +200020ea: 56075163 bgez a4,2000264c <__subdf3+0x898> +200020ee: ff800737 lui a4,0xff800 +200020f2: 177d addi a4,a4,-1 # ff7fffff <__StackTop+0xdf77dfff> +200020f4: 8f7d and a4,a4,a5 +200020f6: 85b6 mv a1,a3 +200020f8: 4785 li a5,1 +200020fa: bb75 j 20001eb6 <__subdf3+0x102> +200020fc: 0c6a8263 beq s5,t1,200021c0 <__subdf3+0x40c> +20002100: 03800693 li a3,56 +20002104: 00e6c663 blt a3,a4,20002110 <__subdf3+0x35c> +20002108: 008006b7 lui a3,0x800 +2000210c: 8fd5 or a5,a5,a3 +2000210e: bbdd j 20001f04 <__subdf3+0x150> +20002110: 008a1713 slli a4,s4,0x8 +20002114: 008007b7 lui a5,0x800 +20002118: 2a075063 bgez a4,200023b8 <__subdf3+0x604> +2000211c: 8a3e mv s4,a5 +2000211e: 4401 li s0,0 +20002120: b505 j 20001f40 <__subdf3+0x18c> +20002122: 4701 li a4,0 +20002124: 4601 li a2,0 +20002126: bb71 j 20001ec2 <__subdf3+0x10e> +20002128: 00351413 slli s0,a0,0x3 +2000212c: 800d srli s0,s0,0x3 +2000212e: 01da1613 slli a2,s4,0x1d +20002132: 7ff00713 li a4,2047 +20002136: 8e41 or a2,a2,s0 +20002138: 003a5793 srli a5,s4,0x3 +2000213c: e6ea82e3 beq s5,a4,20001fa0 <__subdf3+0x1ec> +20002140: 07b2 slli a5,a5,0xc +20002142: 00c7d713 srli a4,a5,0xc +20002146: 0014f593 andi a1,s1,1 +2000214a: 7ffaf793 andi a5,s5,2047 +2000214e: bb95 j 20001ec2 <__subdf3+0x10e> +20002150: 84b6 mv s1,a3 +20002152: 4a85 li s5,1 +20002154: 0a26 slli s4,s4,0x9 +20002156: 009a5a13 srli s4,s4,0x9 +2000215a: e80a1ae3 bnez s4,20001fee <__subdf3+0x23a> +2000215e: 8522 mv a0,s0 +20002160: 2dd9 jal 20002836 <__clzsi2> +20002162: 01850713 addi a4,a0,24 +20002166: 47fd li a5,31 +20002168: e8e7d8e3 bge a5,a4,20001ff8 <__subdf3+0x244> +2000216c: 1561 addi a0,a0,-8 +2000216e: 00a416b3 sll a3,s0,a0 +20002172: 15574a63 blt a4,s5,200022c6 <__subdf3+0x512> +20002176: 41570433 sub s0,a4,s5 +2000217a: 00140713 addi a4,s0,1 +2000217e: 46e7d463 bge a5,a4,200025e6 <__subdf3+0x832> +20002182: 1405 addi s0,s0,-31 +20002184: 02000793 li a5,32 +20002188: 0086d433 srl s0,a3,s0 +2000218c: 00f70a63 beq a4,a5,200021a0 <__subdf3+0x3ec> +20002190: 04000793 li a5,64 +20002194: 8f99 sub a5,a5,a4 +20002196: 00f697b3 sll a5,a3,a5 +2000219a: 00f037b3 snez a5,a5 +2000219e: 8c5d or s0,s0,a5 +200021a0: ea0400e3 beqz s0,20002040 <__subdf3+0x28c> +200021a4: 00747793 andi a5,s0,7 +200021a8: 4a81 li s5,0 +200021aa: dc0792e3 bnez a5,20001f6e <__subdf3+0x1ba> +200021ae: 4a01 li s4,0 +200021b0: 800d srli s0,s0,0x3 +200021b2: bfb5 j 2000212e <__subdf3+0x37a> +200021b4: 0014f593 andi a1,s1,1 +200021b8: 7ff00793 li a5,2047 +200021bc: 4701 li a4,0 +200021be: b311 j 20001ec2 <__subdf3+0x10e> +200021c0: 050e slli a0,a0,0x3 +200021c2: 810d srli a0,a0,0x3 +200021c4: 01da1613 slli a2,s4,0x1d +200021c8: 8e49 or a2,a2,a0 +200021ca: 003a5793 srli a5,s4,0x3 +200021ce: bbc9 j 20001fa0 <__subdf3+0x1ec> +200021d0: 001a8713 addi a4,s5,1 +200021d4: 7fe77693 andi a3,a4,2046 +200021d8: 10069163 bnez a3,200022da <__subdf3+0x526> +200021dc: 01da6733 or a4,s4,t4 +200021e0: 3a0a9563 bnez s5,2000258a <__subdf3+0x7d6> +200021e4: 0117e6b3 or a3,a5,a7 +200021e8: 40070463 beqz a4,200025f0 <__subdf3+0x83c> +200021ec: c285 beqz a3,2000220c <__subdf3+0x458> +200021ee: 98f6 add a7,a7,t4 +200021f0: 01d8beb3 sltu t4,a7,t4 +200021f4: 97d2 add a5,a5,s4 +200021f6: 01d78a33 add s4,a5,t4 +200021fa: 008a1793 slli a5,s4,0x8 +200021fe: 8ec6 mv t4,a7 +20002200: 4207c363 bltz a5,20002626 <__subdf3+0x872> +20002204: 0148e7b3 or a5,a7,s4 +20002208: e2078ce3 beqz a5,20002040 <__subdf3+0x28c> +2000220c: 003ede93 srli t4,t4,0x3 +20002210: 01da1613 slli a2,s4,0x1d +20002214: 01d66633 or a2,a2,t4 +20002218: 003a5793 srli a5,s4,0x3 +2000221c: 4a81 li s5,0 +2000221e: b70d j 20002140 <__subdf3+0x38c> +20002220: 411e8433 sub s0,t4,a7 +20002224: 008eb633 sltu a2,t4,s0 +20002228: 40fa0733 sub a4,s4,a5 +2000222c: 8f11 sub a4,a4,a2 +2000222e: 00871613 slli a2,a4,0x8 +20002232: 0e064d63 bltz a2,2000232c <__subdf3+0x578> +20002236: 00e46633 or a2,s0,a4 +2000223a: 8a3a mv s4,a4 +2000223c: fe19 bnez a2,2000215a <__subdf3+0x3a6> +2000223e: 4581 li a1,0 +20002240: 4781 li a5,0 +20002242: 4701 li a4,0 +20002244: b9bd j 20001ec2 <__subdf3+0x10e> +20002246: ff800a37 lui s4,0xff800 +2000224a: 1a7d addi s4,s4,-1 # ff7fffff <__StackTop+0xdf77dfff> +2000224c: 00747793 andi a5,s0,7 +20002250: 40ea8ab3 sub s5,s5,a4 +20002254: 0146fa33 and s4,a3,s4 +20002258: c20791e3 bnez a5,20001e7a <__subdf3+0xc6> +2000225c: 800d srli s0,s0,0x3 +2000225e: bdc1 j 2000212e <__subdf3+0x37a> +20002260: 8742 mv a4,a6 +20002262: 01da6633 or a2,s4,t4 +20002266: ca7d beqz a2,2000235c <__subdf3+0x5a8> +20002268: fff70613 addi a2,a4,-1 +2000226c: 28060763 beqz a2,200024fa <__subdf3+0x746> +20002270: 7ff00593 li a1,2047 +20002274: d0b70ee3 beq a4,a1,20001f90 <__subdf3+0x1dc> +20002278: 03800593 li a1,56 +2000227c: 32c5de63 bge a1,a2,200025b8 <__subdf3+0x804> +20002280: fff88413 addi s0,a7,-1 +20002284: 0088b8b3 sltu a7,a7,s0 +20002288: 41178a33 sub s4,a5,a7 +2000228c: 008a1613 slli a2,s4,0x8 +20002290: 008007b7 lui a5,0x800 +20002294: 3a064963 bltz a2,20002646 <__subdf3+0x892> +20002298: 84b6 mv s1,a3 +2000229a: 8aba mv s5,a4 +2000229c: b6e5 j 20001e84 <__subdf3+0xd0> +2000229e: fe070693 addi a3,a4,-32 +200022a2: 02000613 li a2,32 +200022a6: 00d7d6b3 srl a3,a5,a3 +200022aa: 00c70a63 beq a4,a2,200022be <__subdf3+0x50a> +200022ae: 04000613 li a2,64 +200022b2: 40e60733 sub a4,a2,a4 +200022b6: 00e797b3 sll a5,a5,a4 +200022ba: 00f8e8b3 or a7,a7,a5 +200022be: 01103433 snez s0,a7 +200022c2: 8c55 or s0,s0,a3 +200022c4: be69 j 20001e5e <__subdf3+0xaa> +200022c6: ff8007b7 lui a5,0xff800 +200022ca: 17fd addi a5,a5,-1 # ff7fffff <__StackTop+0xdf77dfff> +200022cc: 8ff5 and a5,a5,a3 +200022ce: 01d79613 slli a2,a5,0x1d +200022d2: 40ea8ab3 sub s5,s5,a4 +200022d6: 838d srli a5,a5,0x3 +200022d8: b5a5 j 20002140 <__subdf3+0x38c> +200022da: 7ff00693 li a3,2047 +200022de: 2ad70263 beq a4,a3,20002582 <__subdf3+0x7ce> +200022e2: 98f6 add a7,a7,t4 +200022e4: 01d8beb3 sltu t4,a7,t4 +200022e8: 97d2 add a5,a5,s4 +200022ea: 97f6 add a5,a5,t4 +200022ec: 0018d893 srli a7,a7,0x1 +200022f0: 01f79413 slli s0,a5,0x1f +200022f4: 0078f693 andi a3,a7,7 +200022f8: 01146433 or s0,s0,a7 +200022fc: 0017da13 srli s4,a5,0x1 +20002300: 34068e63 beqz a3,2000265c <__subdf3+0x8a8> +20002304: 00f47693 andi a3,s0,15 +20002308: 4611 li a2,4 +2000230a: 8aba mv s5,a4 +2000230c: b6c69ce3 bne a3,a2,20001e84 <__subdf3+0xd0> +20002310: 01da1613 slli a2,s4,0x1d +20002314: 800d srli s0,s0,0x3 +20002316: 8e41 or a2,a2,s0 +20002318: 8391 srli a5,a5,0x4 +2000231a: b51d j 20002140 <__subdf3+0x38c> +2000231c: 003e1713 slli a4,t3,0x3 +20002320: 01d79613 slli a2,a5,0x1d +20002324: 830d srli a4,a4,0x3 +20002326: 8e59 or a2,a2,a4 +20002328: 838d srli a5,a5,0x3 +2000232a: b99d j 20001fa0 <__subdf3+0x1ec> +2000232c: 41d88eb3 sub t4,a7,t4 +20002330: 01d8b8b3 sltu a7,a7,t4 +20002334: 414787b3 sub a5,a5,s4 +20002338: 8476 mv s0,t4 +2000233a: 41178a33 sub s4,a5,a7 +2000233e: 84b6 mv s1,a3 +20002340: bd29 j 2000215a <__subdf3+0x3a6> +20002342: 16071d63 bnez a4,200024bc <__subdf3+0x708> +20002346: 2c060863 beqz a2,20002616 <__subdf3+0x862> +2000234a: 003e1613 slli a2,t3,0x3 +2000234e: 01d79713 slli a4,a5,0x1d +20002352: 820d srli a2,a2,0x3 +20002354: 84b6 mv s1,a3 +20002356: 8e59 or a2,a2,a4 +20002358: 838d srli a5,a5,0x3 +2000235a: b199 j 20001fa0 <__subdf3+0x1ec> +2000235c: 003e1613 slli a2,t3,0x3 +20002360: 00365413 srli s0,a2,0x3 +20002364: 84b6 mv s1,a3 +20002366: 8aba mv s5,a4 +20002368: 8a3e mv s4,a5 +2000236a: b3d1 j 2000212e <__subdf3+0x37a> +2000236c: 98f6 add a7,a7,t4 +2000236e: 01d8beb3 sltu t4,a7,t4 +20002372: 97d2 add a5,a5,s4 +20002374: 97f6 add a5,a5,t4 +20002376: 00879713 slli a4,a5,0x8 +2000237a: 22075663 bgez a4,200025a6 <__subdf3+0x7f2> +2000237e: ff800737 lui a4,0xff800 +20002382: 177d addi a4,a4,-1 # ff7fffff <__StackTop+0xdf77dfff> +20002384: 0018d693 srli a3,a7,0x1 +20002388: 8ff9 and a5,a5,a4 +2000238a: 01f79713 slli a4,a5,0x1f +2000238e: 0076f593 andi a1,a3,7 +20002392: 8f55 or a4,a4,a3 +20002394: 0017d613 srli a2,a5,0x1 +20002398: 26058963 beqz a1,2000260a <__subdf3+0x856> +2000239c: 00f77693 andi a3,a4,15 +200023a0: 4591 li a1,4 +200023a2: 26b68463 beq a3,a1,2000260a <__subdf3+0x856> +200023a6: 00b70433 add s0,a4,a1 +200023aa: 00e43733 sltu a4,s0,a4 +200023ae: 00c70a33 add s4,a4,a2 +200023b2: 4a89 li s5,2 +200023b4: 800d srli s0,s0,0x3 +200023b6: bba5 j 2000212e <__subdf3+0x37a> +200023b8: 001e8413 addi s0,t4,1 +200023bc: b4e1 j 20001e84 <__subdf3+0xd0> +200023be: cc070ce3 beqz a4,20002096 <__subdf3+0x2e2> +200023c2: 41580733 sub a4,a6,s5 +200023c6: e80a8ee3 beqz s5,20002262 <__subdf3+0x4ae> +200023ca: 03800613 li a2,56 +200023ce: 08e65063 bge a2,a4,2000244e <__subdf3+0x69a> +200023d2: fff88413 addi s0,a7,-1 +200023d6: 0088b8b3 sltu a7,a7,s0 +200023da: 41178a33 sub s4,a5,a7 +200023de: 008a1713 slli a4,s4,0x8 +200023e2: 008007b7 lui a5,0x800 +200023e6: 18074863 bltz a4,20002576 <__subdf3+0x7c2> +200023ea: 84b6 mv s1,a3 +200023ec: 8ac2 mv s5,a6 +200023ee: bc59 j 20001e84 <__subdf3+0xd0> +200023f0: 411e88b3 sub a7,t4,a7 +200023f4: 40fa07b3 sub a5,s4,a5 +200023f8: 011ebeb3 sltu t4,t4,a7 +200023fc: 41d78a33 sub s4,a5,t4 +20002400: 008a1793 slli a5,s4,0x8 +20002404: 8446 mv s0,a7 +20002406: d407c6e3 bltz a5,20002152 <__subdf3+0x39e> +2000240a: 0038d893 srli a7,a7,0x3 +2000240e: 01da1613 slli a2,s4,0x1d +20002412: 00c8e633 or a2,a7,a2 +20002416: 003a5793 srli a5,s4,0x3 +2000241a: 4a85 li s5,1 +2000241c: b315 j 20002140 <__subdf3+0x38c> +2000241e: 87d6 mv a5,s5 +20002420: 4701 li a4,0 +20002422: 4601 li a2,0 +20002424: bc79 j 20001ec2 <__subdf3+0x10e> +20002426: fe070693 addi a3,a4,-32 +2000242a: 02000613 li a2,32 +2000242e: 00d7d6b3 srl a3,a5,a3 +20002432: 00c70a63 beq a4,a2,20002446 <__subdf3+0x692> +20002436: 04000613 li a2,64 +2000243a: 40e60733 sub a4,a2,a4 +2000243e: 00e797b3 sll a5,a5,a4 +20002442: 00f8e8b3 or a7,a7,a5 +20002446: 011037b3 snez a5,a7 +2000244a: 8fd5 or a5,a5,a3 +2000244c: b4cd j 20001f2e <__subdf3+0x17a> +2000244e: 00800637 lui a2,0x800 +20002452: 84b6 mv s1,a3 +20002454: 00ca6a33 or s4,s4,a2 +20002458: 46fd li a3,31 +2000245a: 06e6cc63 blt a3,a4,200024d2 <__subdf3+0x71e> +2000245e: 02000693 li a3,32 +20002462: 8e99 sub a3,a3,a4 +20002464: 00da1433 sll s0,s4,a3 +20002468: 00de96b3 sll a3,t4,a3 +2000246c: 00eedeb3 srl t4,t4,a4 +20002470: 00d036b3 snez a3,a3 +20002474: 01d46433 or s0,s0,t4 +20002478: 00ea5733 srl a4,s4,a4 +2000247c: 8c55 or s0,s0,a3 +2000247e: 8f99 sub a5,a5,a4 +20002480: 40888433 sub s0,a7,s0 +20002484: 0088b8b3 sltu a7,a7,s0 +20002488: 41178a33 sub s4,a5,a7 +2000248c: 8ac2 mv s5,a6 +2000248e: baf1 j 20001e6a <__subdf3+0xb6> +20002490: d40700e3 beqz a4,200021d0 <__subdf3+0x41c> +20002494: 41580733 sub a4,a6,s5 +20002498: bc0a83e3 beqz s5,2000205e <__subdf3+0x2aa> +2000249c: 03800693 li a3,56 +200024a0: 08e6db63 bge a3,a4,20002536 <__subdf3+0x782> +200024a4: 00879713 slli a4,a5,0x8 +200024a8: 00800a37 lui s4,0x800 +200024ac: 8ac2 mv s5,a6 +200024ae: 4401 li s0,0 +200024b0: a80748e3 bltz a4,20001f40 <__subdf3+0x18c> +200024b4: 00188413 addi s0,a7,1 +200024b8: 8a3e mv s4,a5 +200024ba: b2e9 j 20001e84 <__subdf3+0xd0> +200024bc: ae0615e3 bnez a2,20001fa6 <__subdf3+0x1f2> +200024c0: 00351793 slli a5,a0,0x3 +200024c4: 838d srli a5,a5,0x3 +200024c6: 01da1613 slli a2,s4,0x1d +200024ca: 8e5d or a2,a2,a5 +200024cc: 003a5793 srli a5,s4,0x3 +200024d0: bcc1 j 20001fa0 <__subdf3+0x1ec> +200024d2: fe070693 addi a3,a4,-32 +200024d6: 02000613 li a2,32 +200024da: 00da56b3 srl a3,s4,a3 +200024de: 00c70a63 beq a4,a2,200024f2 <__subdf3+0x73e> +200024e2: 04000613 li a2,64 +200024e6: 40e60733 sub a4,a2,a4 +200024ea: 00ea1733 sll a4,s4,a4 +200024ee: 00eeeeb3 or t4,t4,a4 +200024f2: 01d03433 snez s0,t4 +200024f6: 8c55 or s0,s0,a3 +200024f8: b761 j 20002480 <__subdf3+0x6cc> +200024fa: 41d88eb3 sub t4,a7,t4 +200024fe: 414787b3 sub a5,a5,s4 +20002502: 01d8b8b3 sltu a7,a7,t4 +20002506: 41178a33 sub s4,a5,a7 +2000250a: 008a1793 slli a5,s4,0x8 +2000250e: 8476 mv s0,t4 +20002510: c407c0e3 bltz a5,20002150 <__subdf3+0x39c> +20002514: 003ede93 srli t4,t4,0x3 +20002518: 01da1613 slli a2,s4,0x1d +2000251c: 84b6 mv s1,a3 +2000251e: 01d66633 or a2,a2,t4 +20002522: 003a5793 srli a5,s4,0x3 +20002526: 4a85 li s5,1 +20002528: b921 j 20002140 <__subdf3+0x38c> +2000252a: d0060ae3 beqz a2,2000223e <__subdf3+0x48a> +2000252e: 8a3e mv s4,a5 +20002530: 8ec6 mv t4,a7 +20002532: 84b6 mv s1,a3 +20002534: b9e1 j 2000220c <__subdf3+0x458> +20002536: 008006b7 lui a3,0x800 +2000253a: 00da6a33 or s4,s4,a3 +2000253e: 46fd li a3,31 +20002540: 06e6cf63 blt a3,a4,200025be <__subdf3+0x80a> +20002544: 02000613 li a2,32 +20002548: 8e19 sub a2,a2,a4 +2000254a: 00ca16b3 sll a3,s4,a2 +2000254e: 00ce9633 sll a2,t4,a2 +20002552: 00eedeb3 srl t4,t4,a4 +20002556: 00c03633 snez a2,a2 +2000255a: 01d6e6b3 or a3,a3,t4 +2000255e: 00ea5733 srl a4,s4,a4 +20002562: 8ed1 or a3,a3,a2 +20002564: 97ba add a5,a5,a4 +20002566: 98b6 add a7,a7,a3 +20002568: 00d8b6b3 sltu a3,a7,a3 +2000256c: 00f68a33 add s4,a3,a5 +20002570: 8446 mv s0,a7 +20002572: 8ac2 mv s5,a6 +20002574: b2d1 j 20001f38 <__subdf3+0x184> +20002576: 8ac2 mv s5,a6 +20002578: 84b6 mv s1,a3 +2000257a: fff78a13 addi s4,a5,-1 # 7fffff +2000257e: 547d li s0,-1 +20002580: b4bd j 20001fee <__subdf3+0x23a> +20002582: 87ba mv a5,a4 +20002584: 4601 li a2,0 +20002586: 4701 li a4,0 +20002588: ba2d j 20001ec2 <__subdf3+0x10e> +2000258a: d80709e3 beqz a4,2000231c <__subdf3+0x568> +2000258e: 0117e8b3 or a7,a5,a7 +20002592: a0089ae3 bnez a7,20001fa6 <__subdf3+0x1f2> +20002596: b72d j 200024c0 <__subdf3+0x70c> +20002598: 003e1613 slli a2,t3,0x3 +2000259c: 00365413 srli s0,a2,0x3 +200025a0: 8aba mv s5,a4 +200025a2: 8a3e mv s4,a5 +200025a4: b669 j 2000212e <__subdf3+0x37a> +200025a6: 01d79613 slli a2,a5,0x1d +200025aa: 0038d893 srli a7,a7,0x3 +200025ae: 01166633 or a2,a2,a7 +200025b2: 838d srli a5,a5,0x3 +200025b4: 4a85 li s5,1 +200025b6: b669 j 20002140 <__subdf3+0x38c> +200025b8: 84b6 mv s1,a3 +200025ba: 8732 mv a4,a2 +200025bc: bd71 j 20002458 <__subdf3+0x6a4> +200025be: fe070613 addi a2,a4,-32 +200025c2: 02000693 li a3,32 +200025c6: 00ca5633 srl a2,s4,a2 +200025ca: 00d70a63 beq a4,a3,200025de <__subdf3+0x82a> +200025ce: 04000693 li a3,64 +200025d2: 40e68733 sub a4,a3,a4 +200025d6: 00ea1733 sll a4,s4,a4 +200025da: 00eeeeb3 or t4,t4,a4 +200025de: 01d036b3 snez a3,t4 +200025e2: 8ed1 or a3,a3,a2 +200025e4: b749 j 20002566 <__subdf3+0x7b2> +200025e6: 02000793 li a5,32 +200025ea: 8f99 sub a5,a5,a4 +200025ec: 4601 li a2,0 +200025ee: bc2d j 20002028 <__subdf3+0x274> +200025f0: a40688e3 beqz a3,20002040 <__subdf3+0x28c> +200025f4: 8446 mv s0,a7 +200025f6: 8a3e mv s4,a5 +200025f8: 800d srli s0,s0,0x3 +200025fa: be15 j 2000212e <__subdf3+0x37a> +200025fc: 00e5e633 or a2,a1,a4 +20002600: c2060fe3 beqz a2,2000223e <__subdf3+0x48a> +20002604: 8a3a mv s4,a4 +20002606: 8eae mv t4,a1 +20002608: b111 j 2000220c <__subdf3+0x458> +2000260a: 830d srli a4,a4,0x3 +2000260c: 0676 slli a2,a2,0x1d +2000260e: 8e59 or a2,a2,a4 +20002610: 8391 srli a5,a5,0x4 +20002612: 4a89 li s5,2 +20002614: b635 j 20002140 <__subdf3+0x38c> +20002616: 4581 li a1,0 +20002618: 7ff00793 li a5,2047 +2000261c: 00080737 lui a4,0x80 +20002620: b04d j 20001ec2 <__subdf3+0x10e> +20002622: 8736 mv a4,a3 +20002624: bf29 j 2000253e <__subdf3+0x78a> +20002626: ff8007b7 lui a5,0xff800 +2000262a: 17fd addi a5,a5,-1 # ff7fffff <__StackTop+0xdf77dfff> +2000262c: 00fa77b3 and a5,s4,a5 +20002630: 01d79613 slli a2,a5,0x1d +20002634: 0038de93 srli t4,a7,0x3 +20002638: 07a6 slli a5,a5,0x9 +2000263a: 00c7d713 srli a4,a5,0xc +2000263e: 01d66633 or a2,a2,t4 +20002642: 4785 li a5,1 +20002644: b8bd j 20001ec2 <__subdf3+0x10e> +20002646: 8aba mv s5,a4 +20002648: 84b6 mv s1,a3 +2000264a: ba79 j 20001fe8 <__subdf3+0x234> +2000264c: 01d79613 slli a2,a5,0x1d +20002650: 003ede93 srli t4,t4,0x3 +20002654: 01d66633 or a2,a2,t4 +20002658: 838d srli a5,a5,0x3 +2000265a: b4dd j 20002140 <__subdf3+0x38c> +2000265c: 800d srli s0,s0,0x3 +2000265e: 01da1613 slli a2,s4,0x1d +20002662: 8e41 or a2,a2,s0 +20002664: 8391 srli a5,a5,0x4 +20002666: 8aba mv s5,a4 +20002668: bce1 j 20002140 <__subdf3+0x38c> + +2000266a <__unorddf2>: +2000266a: 0145d713 srli a4,a1,0x14 +2000266e: 001007b7 lui a5,0x100 +20002672: 17fd addi a5,a5,-1 # fffff +20002674: fff74713 not a4,a4 +20002678: 0146d813 srli a6,a3,0x14 +2000267c: 8dfd and a1,a1,a5 +2000267e: 8ff5 and a5,a5,a3 +20002680: 01571693 slli a3,a4,0x15 +20002684: 7ff87813 andi a6,a6,2047 +20002688: ca99 beqz a3,2000269e <__unorddf2+0x34> +2000268a: 7ff00713 li a4,2047 +2000268e: 4501 li a0,0 +20002690: 00e80363 beq a6,a4,20002696 <__unorddf2+0x2c> +20002694: 8082 ret +20002696: 8fd1 or a5,a5,a2 +20002698: 00f03533 snez a0,a5 +2000269c: 8082 ret +2000269e: 8dc9 or a1,a1,a0 +200026a0: 4505 li a0,1 +200026a2: d5e5 beqz a1,2000268a <__unorddf2+0x20> +200026a4: 8082 ret + +200026a6 <__fixdfsi>: +200026a6: 0145d793 srli a5,a1,0x14 +200026aa: 001006b7 lui a3,0x100 +200026ae: fff68713 addi a4,a3,-1 # fffff +200026b2: 7ff7f793 andi a5,a5,2047 +200026b6: 3fe00613 li a2,1022 +200026ba: 8f6d and a4,a4,a1 +200026bc: 81fd srli a1,a1,0x1f +200026be: 00f65b63 bge a2,a5,200026d4 <__fixdfsi+0x2e> +200026c2: 41d00613 li a2,1053 +200026c6: 00f65963 bge a2,a5,200026d8 <__fixdfsi+0x32> +200026ca: 80000537 lui a0,0x80000 +200026ce: 157d addi a0,a0,-1 # 7fffffff <__StackTop+0x5ff7dfff> +200026d0: 952e add a0,a0,a1 +200026d2: 8082 ret +200026d4: 4501 li a0,0 +200026d6: 8082 ret +200026d8: 43300613 li a2,1075 +200026dc: 8e1d sub a2,a2,a5 +200026de: 487d li a6,31 +200026e0: 8f55 or a4,a4,a3 +200026e2: 00c85d63 bge a6,a2,200026fc <__fixdfsi+0x56> +200026e6: 41300693 li a3,1043 +200026ea: 40f687b3 sub a5,a3,a5 +200026ee: 00f75733 srl a4,a4,a5 +200026f2: 40e00533 neg a0,a4 +200026f6: f1e5 bnez a1,200026d6 <__fixdfsi+0x30> +200026f8: 853a mv a0,a4 +200026fa: 8082 ret +200026fc: bed78793 addi a5,a5,-1043 +20002700: 00f71733 sll a4,a4,a5 +20002704: 00c55533 srl a0,a0,a2 +20002708: 8f49 or a4,a4,a0 +2000270a: b7e5 j 200026f2 <__fixdfsi+0x4c> + +2000270c <__fixunsdfsi>: +2000270c: 0145d793 srli a5,a1,0x14 +20002710: 00100637 lui a2,0x100 +20002714: fff60713 addi a4,a2,-1 # fffff +20002718: 7ff7f793 andi a5,a5,2047 +2000271c: 3fe00813 li a6,1022 +20002720: 86aa mv a3,a0 +20002722: 8f6d and a4,a4,a1 +20002724: 4501 li a0,0 +20002726: 81fd srli a1,a1,0x1f +20002728: 00f85363 bge a6,a5,2000272e <__fixunsdfsi+0x22> +2000272c: c191 beqz a1,20002730 <__fixunsdfsi+0x24> +2000272e: 8082 ret +20002730: 41e00593 li a1,1054 +20002734: 557d li a0,-1 +20002736: fef5cce3 blt a1,a5,2000272e <__fixunsdfsi+0x22> +2000273a: 43300593 li a1,1075 +2000273e: 8d9d sub a1,a1,a5 +20002740: 457d li a0,31 +20002742: 8f51 or a4,a4,a2 +20002744: 00b54a63 blt a0,a1,20002758 <__fixunsdfsi+0x4c> +20002748: bed78793 addi a5,a5,-1043 +2000274c: 00f71733 sll a4,a4,a5 +20002750: 00b6d533 srl a0,a3,a1 +20002754: 8d59 or a0,a0,a4 +20002756: 8082 ret +20002758: 41300513 li a0,1043 +2000275c: 8d1d sub a0,a0,a5 +2000275e: 00a75533 srl a0,a4,a0 +20002762: 8082 ret + +20002764 <__floatsidf>: +20002764: 1101 addi sp,sp,-32 +20002766: ce06 sw ra,28(sp) +20002768: cc22 sw s0,24(sp) +2000276a: ca26 sw s1,20(sp) +2000276c: c84a sw s2,16(sp) +2000276e: c64e sw s3,12(sp) +20002770: cd0d beqz a0,200027aa <__floatsidf+0x46> +20002772: 41f55713 srai a4,a0,0x1f +20002776: 00a744b3 xor s1,a4,a0 +2000277a: 8c99 sub s1,s1,a4 +2000277c: 87aa mv a5,a0 +2000277e: 8526 mv a0,s1 +20002780: 01f7d413 srli s0,a5,0x1f +20002784: 284d jal 20002836 <__clzsi2> +20002786: 41e00793 li a5,1054 +2000278a: 8f89 sub a5,a5,a0 +2000278c: 4729 li a4,10 +2000278e: 7ff7f793 andi a5,a5,2047 +20002792: 02a74d63 blt a4,a0,200027cc <__floatsidf+0x68> +20002796: 472d li a4,11 +20002798: 8f09 sub a4,a4,a0 +2000279a: 00e4d733 srl a4,s1,a4 +2000279e: 0732 slli a4,a4,0xc +200027a0: 0555 addi a0,a0,21 +200027a2: 8331 srli a4,a4,0xc +200027a4: 00a494b3 sll s1,s1,a0 +200027a8: a029 j 200027b2 <__floatsidf+0x4e> +200027aa: 4401 li s0,0 +200027ac: 4781 li a5,0 +200027ae: 4701 li a4,0 +200027b0: 4481 li s1,0 +200027b2: 07d2 slli a5,a5,0x14 +200027b4: 047e slli s0,s0,0x1f +200027b6: 8fd9 or a5,a5,a4 +200027b8: 40f2 lw ra,28(sp) +200027ba: 8fc1 or a5,a5,s0 +200027bc: 4462 lw s0,24(sp) +200027be: 4942 lw s2,16(sp) +200027c0: 49b2 lw s3,12(sp) +200027c2: 8526 mv a0,s1 +200027c4: 85be mv a1,a5 +200027c6: 44d2 lw s1,20(sp) +200027c8: 6105 addi sp,sp,32 +200027ca: 8082 ret +200027cc: 1555 addi a0,a0,-11 +200027ce: 00a49733 sll a4,s1,a0 +200027d2: 0732 slli a4,a4,0xc +200027d4: 8331 srli a4,a4,0xc +200027d6: 4481 li s1,0 +200027d8: bfe9 j 200027b2 <__floatsidf+0x4e> + +200027da <__floatunsidf>: +200027da: 1141 addi sp,sp,-16 +200027dc: c422 sw s0,8(sp) +200027de: c606 sw ra,12(sp) +200027e0: c24a sw s2,4(sp) +200027e2: c04e sw s3,0(sp) +200027e4: 842a mv s0,a0 +200027e6: c50d beqz a0,20002810 <__floatunsidf+0x36> +200027e8: 20b9 jal 20002836 <__clzsi2> +200027ea: 41e00793 li a5,1054 +200027ee: 8f89 sub a5,a5,a0 +200027f0: 4729 li a4,10 +200027f2: 7ff7f793 andi a5,a5,2047 +200027f6: 02a74963 blt a4,a0,20002828 <__floatunsidf+0x4e> +200027fa: 472d li a4,11 +200027fc: 8f09 sub a4,a4,a0 +200027fe: 00e45733 srl a4,s0,a4 +20002802: 0732 slli a4,a4,0xc +20002804: 01550693 addi a3,a0,21 +20002808: 8331 srli a4,a4,0xc +2000280a: 00d41433 sll s0,s0,a3 +2000280e: a019 j 20002814 <__floatunsidf+0x3a> +20002810: 4781 li a5,0 +20002812: 4701 li a4,0 +20002814: 40b2 lw ra,12(sp) +20002816: 8522 mv a0,s0 +20002818: 4422 lw s0,8(sp) +2000281a: 07d2 slli a5,a5,0x14 +2000281c: 8fd9 or a5,a5,a4 +2000281e: 4912 lw s2,4(sp) +20002820: 4982 lw s3,0(sp) +20002822: 85be mv a1,a5 +20002824: 0141 addi sp,sp,16 +20002826: 8082 ret +20002828: 1555 addi a0,a0,-11 +2000282a: 00a41733 sll a4,s0,a0 +2000282e: 0732 slli a4,a4,0xc +20002830: 8331 srli a4,a4,0xc +20002832: 4401 li s0,0 +20002834: b7c5 j 20002814 <__floatunsidf+0x3a> + +20002836 <__clzsi2>: +20002836: 67c1 lui a5,0x10 +20002838: 02f57663 bgeu a0,a5,20002864 <__clzsi2+0x2e> +2000283c: 10053713 sltiu a4,a0,256 +20002840: 00173713 seqz a4,a4 +20002844: 070e slli a4,a4,0x3 +20002846: 200037b7 lui a5,0x20003 +2000284a: 00e55533 srl a0,a0,a4 +2000284e: 8e478793 addi a5,a5,-1820 # 200028e4 <__clz_tab> +20002852: 97aa add a5,a5,a0 +20002854: 0007c503 lbu a0,0(a5) +20002858: 02000693 li a3,32 +2000285c: 8e99 sub a3,a3,a4 +2000285e: 40a68533 sub a0,a3,a0 +20002862: 8082 ret +20002864: 010007b7 lui a5,0x1000 +20002868: 02f57063 bgeu a0,a5,20002888 <__clzsi2+0x52> +2000286c: 46c1 li a3,16 +2000286e: 8736 mv a4,a3 +20002870: 200037b7 lui a5,0x20003 +20002874: 00e55533 srl a0,a0,a4 +20002878: 8e478793 addi a5,a5,-1820 # 200028e4 <__clz_tab> +2000287c: 97aa add a5,a5,a0 +2000287e: 0007c503 lbu a0,0(a5) +20002882: 40a68533 sub a0,a3,a0 +20002886: 8082 ret +20002888: 4761 li a4,24 +2000288a: 200037b7 lui a5,0x20003 +2000288e: 00e55533 srl a0,a0,a4 +20002892: 8e478793 addi a5,a5,-1820 # 200028e4 <__clz_tab> +20002896: 97aa add a5,a5,a0 +20002898: 0007c503 lbu a0,0(a5) +2000289c: 46a1 li a3,8 +2000289e: 40a68533 sub a0,a3,a0 +200028a2: 8082 ret +200028a4: 1326 slli t1,t1,0x29 +200028a6: 2000 .insn 2, 0x2000 +200028a8: 11fc addi a5,sp,236 +200028aa: 2000 .insn 2, 0x2000 +200028ac: 122c addi a1,sp,296 +200028ae: 2000 .insn 2, 0x2000 +200028b0: 12f6 slli t0,t0,0x3d +200028b2: 2000 .insn 2, 0x2000 +200028b4: 122c addi a1,sp,296 +200028b6: 2000 .insn 2, 0x2000 +200028b8: 1234 addi a3,sp,296 +200028ba: 2000 .insn 2, 0x2000 +200028bc: 122c addi a1,sp,296 +200028be: 2000 .insn 2, 0x2000 +200028c0: 12f6 slli t0,t0,0x3d +200028c2: 2000 .insn 2, 0x2000 +200028c4: 11fc addi a5,sp,236 +200028c6: 2000 .insn 2, 0x2000 +200028c8: 11fc addi a5,sp,236 +200028ca: 2000 .insn 2, 0x2000 +200028cc: 1234 addi a3,sp,296 +200028ce: 2000 .insn 2, 0x2000 +200028d0: 12f6 slli t0,t0,0x3d +200028d2: 2000 .insn 2, 0x2000 +200028d4: 1296 slli t0,t0,0x25 +200028d6: 2000 .insn 2, 0x2000 +200028d8: 1296 slli t0,t0,0x25 +200028da: 2000 .insn 2, 0x2000 +200028dc: 1296 slli t0,t0,0x25 +200028de: 2000 .insn 2, 0x2000 +200028e0: 1234 addi a3,sp,296 +200028e2: 2000 .insn 2, 0x2000 + +200028e4 <__clz_tab>: +200028e4: 0100 0202 0303 0303 0404 0404 0404 0404 ................ +200028f4: 0505 0505 0505 0505 0505 0505 0505 0505 ................ +20002904: 0606 0606 0606 0606 0606 0606 0606 0606 ................ +20002914: 0606 0606 0606 0606 0606 0606 0606 0606 ................ +20002924: 0707 0707 0707 0707 0707 0707 0707 0707 ................ +20002934: 0707 0707 0707 0707 0707 0707 0707 0707 ................ +20002944: 0707 0707 0707 0707 0707 0707 0707 0707 ................ +20002954: 0707 0707 0707 0707 0707 0707 0707 0707 ................ +20002964: 0808 0808 0808 0808 0808 0808 0808 0808 ................ +20002974: 0808 0808 0808 0808 0808 0808 0808 0808 ................ +20002984: 0808 0808 0808 0808 0808 0808 0808 0808 ................ +20002994: 0808 0808 0808 0808 0808 0808 0808 0808 ................ +200029a4: 0808 0808 0808 0808 0808 0808 0808 0808 ................ +200029b4: 0808 0808 0808 0808 0808 0808 0808 0808 ................ +200029c4: 0808 0808 0808 0808 0808 0808 0808 0808 ................ +200029d4: 0808 0808 0808 0808 0808 0808 0808 0808 ................ + +200029e4 : + ... +200029ec: 0000 unimp +200029ee: 0001 nop + ... +200029f8: 0000 unimp +200029fa: 0002 c.slli64 zero + ... +20002a04: 0000 unimp +20002a06: 00000003 lb zero,0(zero) # 0 + ... +20002a12: Address 0x20002a12 is out of bounds. + + +20002a14 : +20002a14: b842 .insn 2, 0xb842 +20002a16: 00428093 addi ra,t0,4 +20002a1a: 0002a283 lw t0,0(t0) +20002a1e: 8282 jr t0 + +20002a20 : +20002a20: ff608513 addi a0,ra,-10 +20002a24: efffe097 auipc ra,0xefffe +20002a28: e0e080e7 jalr -498(ra) # 10000832 +20002a2c: be42 .insn 2, 0xbe42 + ... + +20002a30 : + ... +20002a44: 2c50 2000 0000 0000 0000 0000 0000 0000 P,. ............ + ... + +20002a80 <__VECTOR_TABLE>: +20002a80: 1a00006f j 20002c20 <__default_isrs_start> + ... +20002a8c: 1960006f j 20002c22 + ... +20002a9c: 1840006f j 20002c20 <__default_isrs_start> + ... + +20002aac : +20002aac: 715d addi sp,sp,-80 +20002aae: c006 sw ra,0(sp) +20002ab0: c216 sw t0,4(sp) +20002ab2: c41a sw t1,8(sp) +20002ab4: c61e sw t2,12(sp) +20002ab6: c82a sw a0,16(sp) +20002ab8: ca2e sw a1,20(sp) +20002aba: cc32 sw a2,24(sp) +20002abc: ce36 sw a3,28(sp) +20002abe: d03a sw a4,32(sp) +20002ac0: d23e sw a5,36(sp) +20002ac2: d442 sw a6,40(sp) +20002ac4: d646 sw a7,44(sp) +20002ac6: d872 sw t3,48(sp) +20002ac8: da76 sw t4,52(sp) +20002aca: dc7a sw t5,56(sp) +20002acc: de7e sw t6,60(sp) +20002ace: 34102573 .insn 4, 0x34102573 +20002ad2: 300025f3 .insn 4, 0x300025f3 +20002ad6: c0aa sw a0,64(sp) +20002ad8: c2ae sw a1,68(sp) + +20002ada : +20002ada: be516673 .insn 4, 0xbe516673 +20002ade: c4b2 sw a2,72(sp) + +20002ae0 : +20002ae0: be40e573 .insn 4, 0xbe40e573 +20002ae4: 02054163 bltz a0,20002b06 + +20002ae8 : +20002ae8: 30046073 .insn 4, 0x30046073 +20002aec: 200035b7 lui a1,0x20003 +20002af0: 95aa add a1,a1,a0 +20002af2: b505a583 lw a1,-1200(a1) # 20002b50 <__soft_vector_table> +20002af6: 000580e7 jalr a1 +20002afa: 30047073 .insn 4, 0x30047073 + +20002afe : +20002afe: be40e573 .insn 4, 0xbe40e573 +20002b02: fe0553e3 bgez a0,20002ae8 + +20002b06 : +20002b06: 4506 lw a0,64(sp) +20002b08: 4596 lw a1,68(sp) +20002b0a: 4626 lw a2,72(sp) +20002b0c: 34151073 .insn 4, 0x34151073 +20002b10: 30059073 .insn 4, 0x30059073 +20002b14: be561073 .insn 4, 0xbe561073 +20002b18: 4082 lw ra,0(sp) +20002b1a: 4292 lw t0,4(sp) +20002b1c: 4322 lw t1,8(sp) +20002b1e: 43b2 lw t2,12(sp) +20002b20: 45d2 lw a1,20(sp) +20002b22: 4662 lw a2,24(sp) +20002b24: 46f2 lw a3,28(sp) +20002b26: 5702 lw a4,32(sp) +20002b28: 5792 lw a5,36(sp) +20002b2a: 5822 lw a6,40(sp) +20002b2c: 58b2 lw a7,44(sp) +20002b2e: 5e42 lw t3,48(sp) +20002b30: 5ed2 lw t4,52(sp) +20002b32: 5f62 lw t5,56(sp) +20002b34: 5ff2 lw t6,60(sp) + +20002b36 : +20002b36: be402573 .insn 4, 0xbe402573 +20002b3a: fa0550e3 bgez a0,20002ada +20002b3e: 4542 lw a0,16(sp) +20002b40: 6161 addi sp,sp,80 +20002b42: 30200073 mret + ... + +20002b50 <__soft_vector_table>: +20002b50: 2c24 .insn 2, 0x2c24 +20002b52: 2000 .insn 2, 0x2000 +20002b54: 2c24 .insn 2, 0x2c24 +20002b56: 2000 .insn 2, 0x2000 +20002b58: 2c24 .insn 2, 0x2c24 +20002b5a: 2000 .insn 2, 0x2000 +20002b5c: 2c24 .insn 2, 0x2c24 +20002b5e: 2000 .insn 2, 0x2000 +20002b60: 2c24 .insn 2, 0x2c24 +20002b62: 2000 .insn 2, 0x2000 +20002b64: 2c24 .insn 2, 0x2c24 +20002b66: 2000 .insn 2, 0x2000 +20002b68: 2c24 .insn 2, 0x2c24 +20002b6a: 2000 .insn 2, 0x2000 +20002b6c: 2c24 .insn 2, 0x2c24 +20002b6e: 2000 .insn 2, 0x2000 +20002b70: 2c24 .insn 2, 0x2c24 +20002b72: 2000 .insn 2, 0x2000 +20002b74: 2c24 .insn 2, 0x2c24 +20002b76: 2000 .insn 2, 0x2000 +20002b78: 2c24 .insn 2, 0x2c24 +20002b7a: 2000 .insn 2, 0x2000 +20002b7c: 2c24 .insn 2, 0x2c24 +20002b7e: 2000 .insn 2, 0x2000 +20002b80: 2c24 .insn 2, 0x2c24 +20002b82: 2000 .insn 2, 0x2000 +20002b84: 2c24 .insn 2, 0x2c24 +20002b86: 2000 .insn 2, 0x2000 +20002b88: 2c24 .insn 2, 0x2c24 +20002b8a: 2000 .insn 2, 0x2000 +20002b8c: 2c24 .insn 2, 0x2c24 +20002b8e: 2000 .insn 2, 0x2000 +20002b90: 2c24 .insn 2, 0x2c24 +20002b92: 2000 .insn 2, 0x2000 +20002b94: 2c24 .insn 2, 0x2c24 +20002b96: 2000 .insn 2, 0x2000 +20002b98: 2c24 .insn 2, 0x2c24 +20002b9a: 2000 .insn 2, 0x2000 +20002b9c: 2c24 .insn 2, 0x2c24 +20002b9e: 2000 .insn 2, 0x2000 +20002ba0: 2c24 .insn 2, 0x2c24 +20002ba2: 2000 .insn 2, 0x2000 +20002ba4: 2c24 .insn 2, 0x2c24 +20002ba6: 2000 .insn 2, 0x2000 +20002ba8: 2c24 .insn 2, 0x2c24 +20002baa: 2000 .insn 2, 0x2000 +20002bac: 2c24 .insn 2, 0x2c24 +20002bae: 2000 .insn 2, 0x2000 +20002bb0: 2c24 .insn 2, 0x2c24 +20002bb2: 2000 .insn 2, 0x2000 +20002bb4: 2c24 .insn 2, 0x2c24 +20002bb6: 2000 .insn 2, 0x2000 +20002bb8: 2c24 .insn 2, 0x2c24 +20002bba: 2000 .insn 2, 0x2000 +20002bbc: 2c24 .insn 2, 0x2c24 +20002bbe: 2000 .insn 2, 0x2000 +20002bc0: 2c24 .insn 2, 0x2c24 +20002bc2: 2000 .insn 2, 0x2000 +20002bc4: 2c24 .insn 2, 0x2c24 +20002bc6: 2000 .insn 2, 0x2000 +20002bc8: 2c24 .insn 2, 0x2c24 +20002bca: 2000 .insn 2, 0x2000 +20002bcc: 2c24 .insn 2, 0x2c24 +20002bce: 2000 .insn 2, 0x2000 +20002bd0: 2c24 .insn 2, 0x2c24 +20002bd2: 2000 .insn 2, 0x2000 +20002bd4: 2c24 .insn 2, 0x2c24 +20002bd6: 2000 .insn 2, 0x2000 +20002bd8: 2c24 .insn 2, 0x2c24 +20002bda: 2000 .insn 2, 0x2000 +20002bdc: 2c24 .insn 2, 0x2c24 +20002bde: 2000 .insn 2, 0x2000 +20002be0: 2c24 .insn 2, 0x2c24 +20002be2: 2000 .insn 2, 0x2000 +20002be4: 2c24 .insn 2, 0x2c24 +20002be6: 2000 .insn 2, 0x2000 +20002be8: 2c24 .insn 2, 0x2c24 +20002bea: 2000 .insn 2, 0x2000 +20002bec: 2c24 .insn 2, 0x2c24 +20002bee: 2000 .insn 2, 0x2000 +20002bf0: 2c24 .insn 2, 0x2c24 +20002bf2: 2000 .insn 2, 0x2000 +20002bf4: 2c24 .insn 2, 0x2c24 +20002bf6: 2000 .insn 2, 0x2000 +20002bf8: 2c24 .insn 2, 0x2c24 +20002bfa: 2000 .insn 2, 0x2000 +20002bfc: 2c24 .insn 2, 0x2c24 +20002bfe: 2000 .insn 2, 0x2000 +20002c00: 2c24 .insn 2, 0x2c24 +20002c02: 2000 .insn 2, 0x2000 +20002c04: 2c24 .insn 2, 0x2c24 +20002c06: 2000 .insn 2, 0x2000 +20002c08: 2c24 .insn 2, 0x2c24 +20002c0a: 2000 .insn 2, 0x2000 +20002c0c: 2c24 .insn 2, 0x2c24 +20002c0e: 2000 .insn 2, 0x2000 +20002c10: 2c24 .insn 2, 0x2c24 +20002c12: 2000 .insn 2, 0x2000 +20002c14: 2c24 .insn 2, 0x2c24 +20002c16: 2000 .insn 2, 0x2000 +20002c18: 2c24 .insn 2, 0x2c24 +20002c1a: 2000 .insn 2, 0x2000 +20002c1c: 2c24 .insn 2, 0x2c24 +20002c1e: 2000 .insn 2, 0x2000 + +20002c20 <__default_isrs_start>: +20002c20: 9002 ebreak + +20002c22 : +20002c22: 9002 ebreak + +20002c24 <__unhandled_user_irq>: +20002c24: 8109 srli a0,a0,0x2 +20002c26: 9002 ebreak + +20002c28 : +20002c28: 39a6 1000 3a90 1000 39f0 1000 3a9c 1000 .9...:...9...:.. +20002c38: 0000 0000 0100 0000 ........ + +20002c40 : +20002c40: 0010 0000 .... + +20002c44 : + ... diff --git a/demo/riscv_timer/hello_timer.hex b/demo/riscv_timer/hello_timer.hex new file mode 100644 index 0000000000..d3fbb3d496 --- /dev/null +++ b/demo/riscv_timer/hello_timer.hex @@ -0,0 +1,1752 @@ +:020000041000EA +:10000000F2EB8871AC400010D8400010A400001042 +:1000100090A31AE7D3DEFFFF420101114403000061 +:100020003600001000200820FF040000106D0000C2 +:10003000793512AB69A8973100109381E1611721DE +:100040000810130121FC173500101305B5A3731018 +:100050005530732540F125ED170700001307C7043D +:100060000C4391C55043144731070D28D5BF973530 +:1000700000109385E5BD1386818221A023A0050091 +:100080009105E39DC5FEEF3000478122EF304046E9 +:100090000290FDBF884108C291051106E36CD6FEAF +:1000A00082800100D8400010000000204C2C00206D +:1000B000246D00100000082000000820246D0010AE +:1000C0000010082000100820000000008280216538 +:1000D0001305C5DF02853735002037370020930729 +:1000E000C5C41307C7C46308F7009307000081C79E +:1000F0001305C5C482878280373500209307C5C4A5 +:10010000373700209305C7C49D8D93D72540FD81C7 +:10011000BE95858599C59307000081C71305C5C4A1 +:1001200082878280411122C437340020834704DD56 +:1001300006C685E34D379307000089CB374500108D +:100140001305C5C397000000E7000000854723089A +:10015000F4DCB2402244410182809307000095C341 +:10016000B7350020374500104111938545DD130553 +:10017000C5C306C697000000E7000000B240410179 +:10018000A5BF9DBFAA85374500104111130505C4C1 +:1001900006C6EF30207FB240B73700200547238ADC +:1001A000E7E40145814541018280411106C6EF1017 +:1001B000A03F2A8637450010AE86130545C5EF30AF +:1001C000607CB240054541018280797106D622D417 +:1001D00026D2EF30205F37450010130545C6EF30BB +:1001E0008069EF00B04A2A84EF10003C956793873E +:1001F00007E2AA9733B6A700370700802E967D172F +:10020000BE856374C7003A86FD55B70600100147E6 +:100210002285938646188147EF00F0473737002044 +:10022000834747E5F5DFEF007046B7040010B1657E +:100230003C009386A41A0147014693850535EF10CB +:1002400020131305401FEF00F06D2800EF10E02889 +:1002500037440010AA85130544C7EF30A072130578 +:10026000401FEF00306CEF007042D1753C00938668 +:10027000A41A01477D56938505CBEF10600F130537 +:10028000401FEF00306A2800EF102025AA851305D3 +:1002900044C7EF30206F1305401FEF00B0683745AB +:1002A0000010130585C8EF30005DB25022549254FF +:1002B000014545618280B78703409107B347F52028 +:1002C00098438566BE96134707041377070C378655 +:1002D000024098C23365C5200D67BA974CC1130719 +:1002E000001098C3828039713743001022CC2A84D1 +:1002F000130503C906CE2ED232D436D63AD83EDA0A +:1003000042DC46DEEF30205701CC4C1022852EC651 +:10031000EF30E01837450010130505CAEF30A0553F +:100320000545EF30A01CF376043037370020130763 +:1003300077DF1318370033180029719BAF28074562 +:10034000B3F80801E39C08FE0F00300313D7350013 +:100350003A950347050093F77500B317F0283378F3 +:10036000F700631108025D8F2300E5000F003003E2 +:10037000B73700209387C7DEA3850700A18A73A043 +:10038000063082804111328506C6B13F37370020E2 +:10039000034507C4DD469307150093F7F70F63F392 +:1003A000F600C1472300F7C48280B7360020938649 +:1003B000C6DE8147130600020F0030033387F600C4 +:1003C000230007008507E399C7FE828081463D48E8 +:1003D0001D459305400393F736008A073317F8004D +:1003E00013D626004207518F733037BEB317F5007E +:1003F000C207D18F73A037BE8506E39EB6FC82800C +:100400009357550086073315A028C176E98E1387C8 +:1004100017004205558F5D8D91C9733025BE73302D +:1004200027BE732005BE732007BE8280733005BED1 +:10043000733007BE8280411126C206C622C44AC05C +:10044000AE8473790430B7370020938757DF139752 +:1004500037003317E028F19BAFA6E744F98EEDFE95 +:100460000F003003F327503013054503F19BB347CA +:10047000F5209843B7370020938747C2131425000F +:100480006306F7006384E500EF10204DF32750303A +:10049000F19BA29784C30F0030030F003003B737DE +:1004A00000209387C7DEA38407009377890073A099 +:1004B0000730B2402244924402494101828079715E +:1004C00006D64AD052CC56CA5AC873790430B737C8 +:1004D0000020938757DF139737003317E028F19BED +:1004E000AFA6E744F98EEDFE0F003003F32750303E +:1004F00013074503F19BB347F72083AA0700B737DB +:100500000020138B47C2131A270063876A0B22D47B +:100510002E84638EBA0C26D2B73400209384449E76 +:1005200033879A409307F00263E6E7084ECE5EC633 +:1005300062C493574500F3A707BE937BF5003317BA +:10054000A02893595500C183131C07018609B31BCA +:100550007029B3FBFB00336C3C0173300CBEC177D8 +:100560007D8F8509B3E9E90073B009BE0F00300340 +:10057000F32750BE1397070101486350071ED68723 +:1005800001459843D44313768700137707801317E8 +:10059000B74893D5464119E2B306B700630DD404BA +:1005A0000387A7003E85B327E720634C0718B3C72E +:1005B0009720C1BF22549254F3275030F19BD29719 +:1005C00023A057010F0030030F003003B73700207E +:1005D0009387C7DEA384070013798900732009304D +:1005E000B2500259624AD24A424B4561828022543B +:1005F000938A47C2D1B70386A700634506183327FD +:10060000C62033479720144393151600584313F51B +:10061000860019E593F606809396B648518736977B +:1006200063835703931617000565E98EBA9693F610 +:1006300006809396B648520793E6760B1367770EBB +:1006400094C31317F728B386C50033C89620034513 +:10065000B800D8C33167A385A7008308A800139505 +:100660002600130727E42385170163CF080A835662 +:1006700088002105269513D8160013973600937825 +:100680000804137707023367170113931600938842 +:1006900087003307174113730308937808301A97BC +:1006A00013D82600139326009D824697C18A93781B +:1006B00003401373E800B3E6660046973697931835 +:1006C000B0282A973378180133070741931617008B +:1006D000135537000563131877001189B3F66600C8 +:1006E00033781801C98E13151700B3E60601137588 +:1006F000056013582700C98E1378081013151700CA +:10070000B3E606011375050813581700C98E137850 +:1007100008041315270033E706019376850329653E +:10072000558F93061500558FB736002003C556E543 +:10073000B295B3C595202394E7002385A500A38A2D +:10074000C6E463980B0273300CBE73B009BE22542A +:100750009254F249B24B224C85B5918366C293FC08 +:10076000F71F63049501EF10401F13884C03924C50 +:1007700039B573302CBE73B029BE73200CBE73A084 +:1007800009BEF1B7631F08025DC17177130727E443 +:10079000FD562314E5002305D50033879740B7B6EF +:1007A000AAAA9386B6AA09873307D702B7360020CC +:1007B00003C656E52385C700A38AE6E4E3850BF864 +:1007C0004DBFB736002013878700938606A2998E07 +:1007D00013971600056693D53600718F918913968D +:1007E00076001315B0284D8F698E93951600518FA2 +:1007F00093F5056013D626004D8F1376061093955A +:100800001600518F93F5050813D616004D8F1376F9 +:1008100006048A06518F93F68603558F13671700D7 +:100820001317D7282394E700E38F0BF099B7DA8AE0 +:10083000ADB7F32750BE1397070181456349070001 +:10084000918393F7F71F9387470393952700737658 +:100850000430B7370020938757DF139737003317DB +:10086000E028F19BAFA6E744F98EEDFE0F003003C0 +:10087000373700201307479EB307E540B7B6AAAA4B +:100880009386B6AA8987B387D70293974760F326E2 +:100890005030F19AAE9694426387A6048306A7006F +:1008A000638DF604830667016387F60683062702D5 +:1008B0006385F6068306E7026383F6063737002072 +:1008C000834657E5A30AF7E42305D5000F0030035C +:1008D000B73700209387C7DEA3840700937786008D +:1008E00073A00730828073275030B7360020719B89 +:1008F0002E97938646C214C3D1B78146B3A6D6209D +:10090000F175B3C6E6207D58138725E423850601DB +:100910002394E60065B78546D5B78946C5B78D46A9 +:10092000F1BFB73700209387C7DEAE971CC1828026 +:10093000011122CC26CA37340020B734002006CE5D +:10094000930744C49384C4C463F897024AC84EC64C +:10095000130444C4FD591309F00F1C409DC33D34DA +:10096000AA8522857D3F231224010F003003210434 +:10097000E36594FE4249B249F2406244D2440561C3 +:1009800082802934AA852285693F230234010F0021 +:1009900030032104E36394FCF1BFB736002083A742 +:1009A00086E573770430139637003316C028F19B21 +:1009B000AFA5C744F18DEDFD0F00300383A786E599 +:1009C0000F003003238007009377870073A0073060 +:1009D000332010000145814582805D7186C6A2C426 +:1009E000A6C2CAC04EDE52DC56DA5AD85ED662D4EF +:1009F00066D26AD06ECEF32750BE13970701634AC2 +:100A0000073293D9470093F7F91F898393F9390087 +:100A1000331A302937090B406399073437370020E0 +:100A2000B3C73721130747E3B3C7E72083AA0700FB +:100A30008D6793874704CA97B3C92921138B8A000E +:100A400023A047017D54FD54039D8A00232E4903B2 +:100A500063520D0883D74A009397576063DE0714EB +:100A600083C76A006396071E83968A0063C30604E1 +:100A700003A74A01B3A6D620FD57B3E6E62083AB11 +:100A8000860003ACC6006383FB2A0327890283A781 +:100A90000901B386EB40998F63F4F60023A879012E +:100AA0004A85EF00702F63C68501E31FBCF8E37D24 +:100AB00075F933201000B640264496440649F25991 +:100AC000625AD25A425BB25B225C925C025DF24D8A +:100AD0006161828083A74A01B32BAD214A85B3EBC4 +:100AE000FB2003ACCB0083AC8B00EF00F02AE3C308 +:100AF00085F76309BC1C634B0C1C03A70B01B717DC +:100B000000109387A79D83A54B016306F724839765 +:100B10008A0003D52B00C2075D8D02972E87AA8D10 +:100B2000B3E7ED006384071A635B0720B386BC411B +:100B3000B3BCDC00B307EC40B387974103970B00CD +:100B400023A4DB0023A6FB00E34607F003A54A012C +:100B50003328E720131617003368A8208325C80020 +:100B600083288800E3C8B7EE6394F500E3E416EF4A +:100B70002394EA0013888A0031A0832886004C461B +:100B8000131617003A963366A62063CDB70063822A +:100B9000F51E0317060032883326E7203366A620A9 +:100BA000E35D07FC2390EB002310A80183D74A00E4 +:100BB00093975760E3C607EA83A70A017377043067 +:100BC00093963700B316D028F19B2FA6D744758E85 +:100BD0006DFE0F00300383D84A00FD572392FA00C0 +:100BE0009398586083A70A010F0030032380070001 +:100BF0009377870073A00730E3C408E603A54A0192 +:100C000003978A0033A818213368A820032388009B +:100C10000326C800DA85635A070039A8638CC60E1C +:100C200003970700BE8563490700B327E720B3E7B2 +:100C3000A720D447E354D6FE23901501831808005B +:100C40002310E800E3DE08FA83C76A00E38E07E0BA +:100C500023830A0003978A007D555A83E30BA7E498 +:100C600083A84A01B327E720BA86B3E7172103D642 +:100C70002700BA853A881316566003970700634326 +:100C800006023E83E304A7DEB327E720B3E717217C +:100C900003D62700BA853A881316566003970700D3 +:100CA000E35106FE80C7C4C7638AD5002310E30062 +:100CB00083D68A002390D7002394BA00C286E31516 +:100CC000A7FC6DB3E36895D9E3590CE203D70B0099 +:100CD00083A70A012394EA007377043093963700C0 +:100CE000B316D028F19B2FA6D744758E6DFE0F004A +:100CF000300383D62A0083A70A012390DB002391C7 +:100D0000AA010F003003238007009377870073A0A8 +:100D1000073089B39447E375D3F023901501831806 +:100D200008002310E800E3DD08EC39BFE31F7CD5A1 +:100D300085BB054AD287814937890B40C5B14A85B1 +:100D40003AC6EF0070053247B306B501B3B7A60047 +:100D50002E97BA97E5B39C492E852EC682973DD52E +:100D6000B24583AD0500D84165BB854737890B4047 +:100D700075B1E3F016E33DB5011122CC3734002004 +:100D8000130404A31C4806CE91CB6244F2403735CD +:100D90000020130585E5A945056161B68D45370538 +:100DA0000B4026CA4AC84EC652C4EF00E07C370A40 +:100DB0000B408D4423264401EFF04FDDB70700D0F0 +:100DC000230094003737002003A807001307C7DE6D +:100DD0005C482A97B706110018C87D56FD16BD4518 +:100DE0000947A300040114C42311B4002312C40052 +:100DF0002394E7042149114F954E194E1D43A548F0 +:100E00002948B546394785492D45B1452390970670 +:100E1000239CE7072398D7092394C70B2390670CDB +:100E20002398170F239407112390A712239CB7121E +:100E30002398D7142394E7162390C70023983703E9 +:100E4000239C270D239C0700B715001023202A039D +:100E5000B737002026859385A59D23A087E4EFF072 +:100E60008FDDCE852685EFF0AFD9B7270B406244E2 +:100E7000D244B249224AF24023A0270542493735DD +:100E80000020130585E5A945056161BC37350020C3 +:100E9000130505A38280011122CC26CA4AC84EC67A +:100EA00052C406CE2A84AE843289368ABA8981EF4A +:100EB000E52D3385A44033B5A400B305B940898D31 +:100EC000014563C2050C1C487377043093963700C4 +:100ED000B316D028F19B2FA6D744758E6DFE0F0058 +:100EE0003003831824005448218BB3A71821B3E79B +:100EF000D720144863C1080A03D607002311C40091 +:100F00000F003003238006007320073003D827002A +:100F10000547139508013A98460813581801337885 +:100F2000E80A23A8470123AA370184C723A627017B +:100F300023910701336505011848F3760430131631 +:100F400037003316C028719BAF25C744F18DEDFDE6 +:100F50000F0030030356440018482390C7002312A3 +:100F600014010F0030032300070093F7860073A0DD +:100F70000730034704005C448966938646043317B0 +:100F8000E028B69798C3F2406244D2444249B2493D +:100F9000224A056182800F003003238006007320FF +:100FA0000730F2406244D2444249B249224A7D5558 +:100FB00005618280AA870849737804309318350048 +:100FC000B318102971992F23154533731301E31CAE +:100FD00003FE0F0030030393270083A84701137516 +:100FE0008800332863203368182183A80701634BE6 +:100FF0000308035E08002391C7010F00300323801C +:1010000008007320053083582800054E131503018E +:10101000F298C60893D81801B3F8C80B232AE80041 +:101020002328D8002324B8002326C8002311180140 +:1010300033651501984BF3760430131637003316D9 +:10104000C028719BAF25C744F18DEDFD0F00300323 +:1010500003D64700984B2310C800239267000F0067 +:1010600030032300070013F786007320073003C7FF +:101070000700DC478966938646043317E028B69755 +:1010800098C382800F00300323800800732005304E +:101090007D5582800357A50093D7054163D8E704A7 +:1010A0005449B3A7F7201849B3E7D720F3760430A3 +:1010B000131637003316C028719B2F28C744337886 +:1010C000C800E31C08FE0F00300303D62700B3C599 +:1010D000050813F78600B3460608630BB6001C49E3 +:1010E0000F00300323800700732007300145828002 +:1010F0009396F6282391D70085472303F5001449DA +:101100000F0030032380060073200730834605005C +:101110005845096613064604B316D02832973E8513 +:1011200014C38280011122CC26CA4EC6AA8406CEE0 +:101130004AC89D291307803E3384E402B707008024 +:10114000FD17B3B4E402B309A40033B48900AE942C +:10115000269463F487003E84FD599384A9FF33B934 +:1011600034019307F4FF3E99636A240363068902FE +:1011700025293385A440B305B940B3B7A4009D8D9C +:10118000634AB002CDC9A2856244F240D2444249CA +:101190004E85B249056171A1E3FC99FC312181447E +:1011A00001493385A440B305B940B3B7A4009D8D70 +:1011B000E35AB0FCD52E3385A44033B5A400B30563 +:1011C000B940898D63C10502B7160010373500207C +:1011D0009386A699130505A30147A6854A86D93BA0 +:1011E000FD57E302F5FAB7060B4037360020DC5214 +:1011F00063E727019856E37897F8E316F9F8832711 +:1012000086E57377043093953700B315B028F19BCA +:101210002FA5B7446D8D6DFD0F003003832786E544 +:101220000F003003238007009377870073A00730F7 +:10123000332000006DBF21D9B5BF411122C426C2A1 +:1012400006C6AA842E84732750BE9317070163DA5B +:1012500007044AC037390020930709A303C70700D2 +:10126000DC473347F7209C57184BB306F5401D8FDA +:1012700063EDE60433200000B7070B40D853014567 +:101280006369B70A9C570D8F024933B5970033370E +:10129000E00013351500598DB240224492444101BB +:1012A0008280B7070B40D8530145E367B7FE9C57D0 +:1012B000B240224433B597000D8F3337E000133529 +:1012C00015009244598D41018280F92C3385A44048 +:1012D00033B5A400B305B440898D63C20506B716C3 +:1012E0000010A6859386A69901472286130509A3B7 +:1012F000D131AA856355A004B7070B40D853636A60 +:1013000087049C5763E59704130509A361333707E6 +:101310000B405C53014563EE87001457818F3337D0 +:10132000F000B3B7960093B7170002493365F70092 +:10133000A5B7B24022440249924441018280370756 +:101340000B405C5363FA870002490145B1B7E31DC6 +:1013500087FA332000004DBF1857818FB337F00054 +:101360003337970013371700024933E5E7002DB7ED +:10137000011122CC4AC806CE26CA4EC633E8C500A3 +:101380002A843E89630508129357F641B3C4B70017 +:101390003385F440B3C9C70033B8A400B389F9401A +:1013A000AA84B38909412322C90023248900232860 +:1013B000D9002320B900232AE900FD22AA94CE9562 +:1013C00033B5A400B70700803306B500FD1763F4FA +:1013D000C7003E86FD541848F37704309316370053 +:1013E000B316D028719BAF25D744F58DEDFD0F00C6 +:1013F0003003831524005448A18B33A7B5203367ED +:10140000D720144863CA050A035507002311A40016 +:101410000F0030032380060073A007308356270097 +:10142000054537180010AA96C606C582B3F6A60A67 +:10143000939705011308A89D2311D700232A27019C +:10144000DD8E04C71C4850C723280701737604307B +:101450001398370033180029F19BAFA80745B3F85C +:101460000801E39C08FE0F003003035844001C48A9 +:10147000231007012312B4000F003003238007005C +:101480009377860073A00730034704005C44096625 +:1014900013064604F24062443317E028B29798C31B +:1014A0002326D900D2444249B2490561828085444D +:1014B000A68581490146C5BD0F0030032380060083 +:1014C00073A00730F2406244FD562326D900D2446F +:1014D0004249B2490145056182805845AA8719E30E +:1014E000014582801045935607418355A60063D677 +:1014F000B604484AB3A6D6200C4AB3E6A6207375B4 +:1015000004301398350033180029F199AFA8054528 +:10151000B3F80801E39C08FE0F00300303D826004F +:101520003347070893758500630D0701184A0F00BC +:1015300030032300070073A00530014523A60700F0 +:1015400082801317F7282391E60005452303A600A0 +:10155000184A0F0030032300070073A005308346AC +:1015600006005846096613064604B316D02832977B +:1015700014C323A607008280B787F4BFAA97373524 +:10158000002093B717001305C5E5374600103E95B8 +:10159000130646CA6FE03FD94C51AA8788572E8759 +:1015A000CC53E31DB7FE8280B7070B40CC5388575E +:1015B0002E87CC53E39DE5FE828037070B405C53BA +:1015C00003288702BE865C53E39CD7FE33060501E1 +:1015D000BE953337A6002E97636CF7026388E70247 +:1015E000B7070B40DC5363F7E700B7060B40DC524C +:1015F000E3EFE7FE639BE70037070B4021A054535E +:101600006395F6001457E3ECC6FE8280E37A06FD8C +:10161000B7070B40DC537D573A86E398E7FC3E86DC +:10162000E1BF37070B405C53E3EFB7FE639BF50068 +:10163000B7070B4021A0D8536395E5009857E36C9A +:10164000A7FE8280011122CC2A84194526CA06CE23 +:10165000AE84DD2A55C14AC84EC6B7870740370752 +:101660000004630DF40EB727024098C3B70602408A +:10167000B737024098C3A1069C42B377F740EDFF0D +:10168000B787F8BFA2971387C18093B71700B3A796 +:10169000E7201945130700102390E70075229317E0 +:1016A0003500B3D79702850713D7770039EB930935 +:1016B0000004854654D018D40329040393771900F5 +:1016C000BDE385649384C402A2945C5423A0040007 +:1016D0002328240319458D2A5C540A053355350304 +:1016E00093C7070793F7E7079CC09306103042495A +:1016F000B2490D4714D838C4F2406244D24405615F +:10170000828041667916C166637DE604FD1654D079 +:10171000014718D403290403B7094000938909FC41 +:1017200093771900D9DF8D6793870703A297130773 +:10173000103098C344501C5419459A04BE94292271 +:10174000B7872B8F938757B7B337F5021395A4004C +:101750008145AD833355F5028D35A5B737070008B0 +:1017600019B7858393F7F70393196700BA86BE9973 +:101770003E8789B7B70701403327A5203347F720B5 +:1017800003284700C1676373F8005CC31308C5FFF3 +:10179000854763F60707373300201303C3E0B347D9 +:1017A000652083A807008D67BA97131EB02823A071 +:1017B000C7010A0563990802832807001606856792 +:1017C000334616011376060EBA9790C30546637129 +:1017D00006078967BA971316B02890C31A95C16790 +:1017E00014C15CC3828083274301B3D717038507E5 +:1017F000B3A7F7209387E7FFE3DE07FE75BFE39CFF +:10180000F5F88D67BA970D4823A007011C47858B13 +:10181000F5DF0328070016068567334606011376B1 +:10182000060EBA97373300200A0590C31303C3E0AE +:10183000032807003316B028B3C505018D898CC372 +:101840001C47F18FF5DF71B7B73700209387C7E0EA +:101850003345F52008418280B727B700938707B04A +:10186000B3D7B70283280500C206320733E8E60083 +:101870003356F60263C40804B78705401167630056 +:10188000F506B727024098C3B7060240B7370240B3 +:1018900098C3A1069C42B377F740EDFF0D670CC1DA +:1018A000110710C52A97930710021CC31C41E3DFE0 +:1018B00007FE23260501A1471CC382801C4193F724 +:1018C000F703E39BB7FA1C45D207D183E396C7FA27 +:1018D0005C4537770700F98FE39007FB828021672B +:1018E0004DB7B78710403325A5203345F5204CC1AF +:1018F00085471CC18280A1679387A7DF83D7070034 +:1019000085458287B7170E409387878298437DDF8E +:101910000F0030038280B7170E403E871307C7823F +:101920009387C7800F00300323A007009107E39B34 +:10193000E7FE82808567938707AA378704401CC328 +:101940009307F0025CC7B7B6FA00B7A7044094C388 +:101950005C43E3DF07FE828082803745001041113F +:10196000130585CC06C6EFE01F98411122C426C29C +:1019700037440010B744001006C6930704C0938490 +:1019800084C363F99700130404C01C4011048297B8 +:10199000E36D94FEB2402244924441018280B747F5 +:1019A000EFEF9387F7B7B72602403707F4039CC2DF +:1019B0005917B7370240B706024098C3A1069C42A8 +:1019C000B377F740EDFF8280B7071150F847A16762 +:1019D0006303F7008280B727115037070400F8C768 +:1019E0008280370700207D17B7370240B7060240D4 +:1019F00098C3A1069C42B377F740EDFF828015653E +:101A000041111305352506C6FD35B240AA8711459B +:101A100041018287156541111305352506C6E13D53 +:101A2000B240AA870545410182876FE01F984111A6 +:101A300022C406C626C24AC0370401402322040835 +:101A4000D53DB73701400547D8DF7C40E39FE7FE2F +:101A50000D47B737014098DB0544370701401C5F4D +:101A6000E39F87FE37366859A285130606F00947BB +:101A7000954637050540CD33154737968647BA86D4 +:101A8000A285130606C037850540F933B726B7008F +:101A9000938606B0014689451145E939B7D6F00865 +:101AA000A2859386061801461545E931B776DC0212 +:101AB000938606C00146814521456D39B776DC0223 +:101AC000938606C00146814525456D31B7D6F0089D +:101AD000938606180146814519456939B7D6F0083D +:101AE00093860618014681451D4569311145A93B7C +:101AF000B7E71B43938737E8B334F502014419492C +:101B0000C9802285A6850504E93BE31C24FFB24079 +:101B1000224492440249410182808280797122D418 +:101B20004ECE52CC56CA5AC85EC662C466C206D6EB +:101B3000C68C26D24AD093F83800AA892E8A328BD6 +:101B4000B68ABA8B3E84428C639F08063309F840FC +:101B50003299B28463FD07072686D6868504D2852E +:101B6000130500028299E39924FF21C022993306CC +:101B700089407D14B3878B0003C50700D686D285C4 +:101B8000CA8482996DF493FC2C0063800C02338B21 +:101B90006441637C8B012686D686D28513050002BC +:101BA000050B85048299E3688BFFB25022540259D9 +:101BB000F249624AD24A424BB24B224C924C2685A1 +:101BC0009254456182803289B284CDF36DBF3289EF +:101BD000D1FFE1BFA242C28F024E93FE2200124803 +:101BE0003E8363960E046318080C63F2C70593F3F3 +:101BF0001200930E0002130F00036309D3010503C3 +:101C0000B3076700A38FE7FFE369C3FF638203069F +:101C1000930E0002130F0003637B03016304D30DD3 +:101C20000503B3076700A38FE7FFE31903FF93F7EB +:101C30000201B5CB93F70240B1E763110304C1473A +:101C40006383F8168947638FF81693070003230010 +:101C5000F7000543639B0F0693F74200F5C3B308F3 +:101C60006700130EB002930713002380C80191A0F0 +:101C700093F702018DCB93F7024089E763036E0A65 +:101C80006301680AC1476388F80689476384F808D6 +:101C900093070002630DF3009A870503BA97930830 +:101CA00000032380170193070002E315F3FA93075B +:101CB00000029688A5B593F3120063820302638D38 +:101CC0000F087D18E3E7C7F3A1B7B3086700130E49 +:101CD000D0022380C80193071300968881B5E3EAF8 +:101CE000C7F1B1B793F70201F9D393F70240D9D7FF +:101CF000C147E39EF8FA93F70202A5CB93070002CF +:101D0000E307F3FAB3076700930880052380170100 +:101D10000503BDBF93070002E30BF3F89A870503A1 +:101D200011A89307F3FFB1CF414E6383C80B094E4F +:101D3000E396C8F7BA97930820062380170189BF56 +:101D400093F882009A87E38608F63A939308000294 +:101D5000850723001301B1BF93F7C200B337F0002A +:101D60003308F840E367C3E965B593070002E30071 +:101D7000F3F4B30767009308800723801701050376 +:101D800001BFC147E390F8EC93F702029DCF93089F +:101D900080059307000323001701A300F700094300 +:101DA000E38C0FEA1DB793F7020285C39307800502 +:101DB000930800032300F700A30017010943E38DF4 +:101DC0000FE821B793072006E5B793078007CDB743 +:101DD0009308E3FF13FE0202BA9863070E00130E86 +:101DE00080052380C8015DBD130E80072380C801D4 +:101DF00075B511E182806F10D01D01C59C41CC41A9 +:101E00008287828031714AD94ED752D55AD12A89D8 +:101E1000AE89328B368A3A85BE853A86BE8622DD09 +:101E200026DB56D35ECF06DF62CD66CB8E4BBA84FF +:101E30003E8442C0C68A97100010E7804083631535 +:101E4000054CB747001003A6070083A64700268568 +:101E5000A2856AC96EC797000010E7808094634727 +:101E60000524B747001003A6870083A6C700268570 +:101E7000A28597000010E780E0866347A01CB74763 +:101E8000001026C422C62245B24503A6070183A638 +:101E9000470197000010E780E084634DA016B74724 +:101EA000001026C822CA4245D24503A6870183A650 +:101EB000C70197000010E780C08E634D051426CC43 +:101EC00022CE6245F2450146814697000010E78028 +:101ED000408D634E051A02DC93F70B4099E3994756 +:101EE0003EC08246130D0106EA87938806FE25460A +:101EF000930500036378D6242380B700FD16850779 +:101F0000E39A16FF930C000226D022D20255925576 +:101F100046C097000010E78040798248B74600101D +:101F2000938606FAB3E6D82003A846009C4246CC26 +:101F300042C23EC0AA8D97100010E780E08226D4EE +:101F400022D62A86AE862255B25597000010E78029 +:101F5000A0E60246924697000010E78080902E8C03 +:101F60002AC897000010E780A07A2AC497100010B2 +:101F7000E780E086C24762DA2A863ED8AE864255BE +:101F8000D255374C001097000010E780E0E203269E +:101F90000C0283264C022AC82ED097F0FF0FE78050 +:101FA00060742243E2486355A02A05031A8546C897 +:101FB0001AC497100010E78080822A86AE860245F8 +:101FC000924597F0FF0FE780C07D2243C2486344EB +:101FD000A000850D0143638C081637D5CCCC1305C2 +:101FE000D5CC130E0002A54E638ECC2D3337A30241 +:101FF000850CB3069D01FD180D83B347E7208607C6 +:10200000B307F34093870703A38FF6FE63FC6E28A4 +:102010003A83D9BF26DC22DE6A54DEC16257F2570A +:1020200002484A4DBA4DFA50DA54FA4B6A4CDA4C2F +:10203000D688D2869A5A2A5A5A86CE850A5BBA59C7 +:102040004A854A59296191AE93F74B009DEB37477A +:102050000010130787D68D476A544A4DBA4DFA507F +:10206000DA546A4CDA4CDE885688FA4B9A5AD28691 +:102070005A862A5A0A5BCE854A85BA594A59296135 +:1020800071BC37470010130707D69147F1B7A6C8B0 +:10209000A2CA4646D6460145814597000010E78012 +:1020A000A0D18547AA842E843EDC3DB593F73B0042 +:1020B000DA8495E3914763F057031304CBFFB3042D +:1020C00054015A842286D2860504CE851305000267 +:1020D0000299E31994FE37440010130C04D713043B +:1020E00004D7711CB30C94000345340033868C4034 +:1020F000D286CE857D140299E31884FF93FB2B00D2 +:10210000910463810B02B387644163FD5701268606 +:10211000D286CE851305000285040299B3876441F7 +:10212000E3E757FF4A4DBA4DFA506A544A59BA5933 +:102130002A5A9A5A0A5BFA4B6A4CDA4C2685DA54C8 +:10214000296182808247B688B38CD74075BB6E8583 +:1021500097000010E7804061A6C4A2C62A86AE861A +:102160002645B64597000010E78000C503240C0201 +:1021700083244C022AC02286A6862E8C97F0FF0F5D +:10218000E7802062634F05008247E2CEF645BECC71 +:1021900066452286A68697F0FF0FE780A054635A13 +:1021A000A0143765666613057566930800021DA0C6 +:1021B000B397AD02850CB3069D018987998F33C70C +:1021C000F7200607B38DED4013870D03A38FE6FEBE +:1021D000BE8D9DCF13D7FD41E39C1CFD93F63B00C4 +:1021E00005466399C60463870A04E257C1CFFD1A06 +:1021F00063F25C051306000293050003638CCC02B6 +:10220000850CB3079D01A38FB7FEE3E95CFF31A006 +:1022100093F63B0005466387C61693060002638B60 +:10222000DC00E257B5CB1306D002B3862C00238026 +:10223000C606850C6A87DE885688E687D2865A8667 +:10224000CE854A85EFF09F8DAA844A4DBA4DE9BDEF +:10225000C24746C41AC0BEC082570645BEC2B74771 +:102260000010964503A6070283A6470297F0FF0FCA +:10227000E78020530243A248E34F05D463100308CC +:10228000050391BB93F6CB00FDCAFD1AE3E45CF7AE +:1022900093060002E380DCFA93F64B0095CE13061A +:1022A000B00261B76380CC03E69893050003130680 +:1022B0000002638C9801850CB3079D01A38FB7FEC4 +:1022C000E399CCFE930C0002E9BD8A989306E002E4 +:1022D000850C2380D806F1B593F68B00A1DE13069A +:1022E0000002B387CC00B38627002380C604850C88 +:1022F00091B713881D00937DE8FF65B593761300B1 +:10230000E38B06CC0503C1B993F73B005A848DE3F8 +:102310008D4763FF57011304DBFF5694DA8426864A +:10232000D2868504CE85130500020299E31994FE36 +:10233000B74400109384C4D6938CD4FF228C03C579 +:1023400024006286D286CE85FD14050C0299E3989E +:1023500094FF93FB2B0093043400E3870BDCB387DB +:102360006441E3F357DD2686D286CE85130500024D +:1023700085040299B3876441E3E757FF75B3E3EB44 +:102380005CE74DBDE38B0AE8E257E38D07EEFD1AEB +:10239000E3E25CE7E3991CE971BD0D712328211587 +:1023A00023263115232441152326B1132A89AE890A +:1023B000B28D368A3A85BE853A86BE86232C811434 +:1023C000232A9114232251152328A113232E1114FB +:1023D000032D01163A84BE84C2C1C68A970000103C +:1023E000E780E0286317051CB747001003A68700A5 +:1023F00083A6C7002285A685232C8113232A911347 +:1024000097F0FF0FE780002E6341A01AB747001036 +:1024100003A6070083A647002285A6852320611511 +:10242000232E711397F0FF0FE780A0376344051C3C +:1024300022CC26CE6245F2450146814697F0FF0F39 +:10244000E7802036139BF4696344050022CC268B79 +:102450009317B028B376FD0013770D40BAC336C882 +:10246000B36764016311071A639C071E63920658E1 +:102470009947BEC1937C2D00639E0C56114CB3F757 +:102480008A0BF1173EC8814B22D026D202559255B5 +:102490000146814697F0FF0FE780A030634605565E +:1024A000E2475ADF3EDD6A57FA570E48C248937634 +:1024B000FDFF9396B648135D5D4836C06E86D286A2 +:1024C000CE854A857D1DEFF0FF93137D0D022A8690 +:1024D000D28613055D04CE85130416000299B30657 +:1024E000704137D3CCCC7D1CB3E6DB0A13D8FB019B +:1024F00018021303D3CC8147254E930E000219A076 +:102500006384D70333B6660285073685B308F700C0 +:102510000D82B345C62086058D8E93860603A38F54 +:10252000D8FEB286E36EAEFC954636C462C202C0E7 +:102530002286A948D286CE854A85EFF0AFE9638A24 +:102540000C023304B54163765403AA8433868D00AC +:10255000D286CE851305000205040299E36854FF74 +:102560003387B44105072685814763FAEA480505A4 +:102570003E958320C11503248115032B0114832B61 +:10258000C113032C8113832C411383244115032988 +:1025900001158329C114032A8114832A4114032DB0 +:1025A0000113832DC11235618280032C8113832C8A +:1025B000411322C826CA4247D2470E482320A117FA +:1025C000D688D2866E86CE854A85032481158320DF +:1025D000C11583244115032901158329C114032A38 +:1025E0008114832A4114032D0113832DC1123561F7 +:1025F0006FF05F81032B0114832BC113032C811314 +:10260000832C41137DB7B9EFE38606E6814B8E47F5 +:10261000014C63C9FB40A2C5A6C72E45BE45014675 +:10262000814697F0FF0FE780C017634C053AA2D1AF +:10263000DAD30E579E57131DBD48136D0D406288A7 +:10264000032B0114832BC113032C8113832C4113FF +:102650002320A117D688D2866E86CE854A85B5B747 +:102660009947BEC113554B011375F57F130515C06E +:1026700097000010E780400FB747001003A68702BD +:1026800083A6C70297F0FF0FE780A01DB747001091 +:1026900003A6070383A6470397E0FF0FE7804019CF +:1026A0009317CB003706F03FB183D18F3ED622D4AB +:1026B000B747001003A6870383A6C7032A8CAE8BF7 +:1026C0002255B25597F0FF0FE780006FB747001013 +:1026D00003A6070483A6470497F0FF0FE78060185E +:1026E00062D85EDA2A86AE864255D25597E0FF0F51 +:1026F000E780001497000010E78020FBAA8B97006A +:102700000010E7806006B747001003A6870483A681 +:10271000C704AA8C2E8C97F0FF0FE7808014B74770 +:10272000001003A6070283A6470297E0FF0FE78089 +:10273000201097000010E78040F73747001066DC54 +:1027400062DE03260705AA87F255625583264705F0 +:102750003E8C97F0FF0FE780C010AA8C628562D490 +:102760002E8C97000010E7802000B747001003A6CA +:10277000870583A6C70597F0FF0FE780800EE6C0A8 +:10278000E2C22A86AE860645964597F0FF0FE7809F +:10279000A062AAC4AEC62646B6462ADC2ED897F05A +:1027A000FF0FE780000CC2576257AA8CBECABAC896 +:1027B000BACCBECE2E8C4646D6466645F645BEC041 +:1027C00097E0FF0FE780C006B7460010E6D0E2D2E0 +:1027D000AA882E8803A60606065583A646069655A1 +:1027E00046DC42D897F0FF0FE780E09037430010B7 +:1027F000032683068326C30697E0FF0FE780400386 +:10280000E6D4E2D62A86AE862655B65597F0FF0F57 +:10281000E780608EB746001003A6060783A646072A +:1028200097E0FF0FE780C000E6D8E2DA2A86AE869E +:102830004655D65597F0FF0FE780E08B2647864731 +:102840002A8CBADCBEDEB747001003A587076656A0 +:10285000F656AE8C83A5C70797F0FF0FE780C055EB +:1028600062C166C32A86AE860A459A4597E0FF0F85 +:10287000E78000FC4258E2582A8642C746C5AE8629 +:102880002A45BA4597F0FF0FE780E086B74700106A +:1028900003A6070883A6470897E0FF0FE78040F9E3 +:1028A000A25701473AC99387F73FD2073ECBDA4692 +:1028B0004A4697F0FF0FE780C0FA2ACD2AD82ECFDC +:1028C0002ED422D15AD36A46FA460A559A5597F021 +:1028D000FF0FE78000EDA2574257374300106351C6 +:1028E0000502BAC9BECB4E45DE45032683068326C4 +:1028F000C306FD1B97E0FF0FE780E07F2A87AE87C6 +:1029000093863B069305600C3A863E85937C2D00AA +:1029100063EDD502C246114CA1E663775C01639773 +:102920000C109386CAFF36C8E3800BB65ADB3AD543 +:1029300022D93ED72A56BA564A55DA5597E0FF0FA4 +:10294000E780607B2ACC2E8B81B6C246154C89EA83 +:10295000E37E5CFD63900C0E9386BAFF36C8F9B730 +:102960003ED43AC8498EE30406CAA2CDDACFB746B0 +:10297000001003A686086E45FE4583A6C60897F09C +:10298000FF0FE78020D64247A25763440502B746AF +:102990000010A2D5DAD703A606092E55BE5583A688 +:1029A000460997F0FF0FE780C0DFE34205C64247C4 +:1029B000A2578E4691CE1E4601CEFD16B6C1637556 +:1029C0005C01638B0C04894C02C8E3910BF66DBC6F +:1029D000E37C5CFF63820C0402C8894CE3980BF42F +:1029E00065B4131BFB69A2D9DADB4E57DE57A1B1E0 +:1029F000154C15B102C8814B894C114C71B49387A9 +:102A0000FDFFD697858FA5B6E247131BFB69DADF7A +:102A1000BEDD6E57FE5751BCB3868A4136C8E39778 +:102A20000BF09DB4338C77417D1CF5B6894CE39F48 +:102A30000BEE99BC894CDDBDB7370010357193871B +:102A400087A322CD52C5E6DAEAD8EED606CF26CB4A +:102A500023A8F180AE8C328A36843A8DAA8D6381A8 +:102A6000053A0345040081446305053A4EC756C341 +:102A70005AC1DEDEC149930B5002B74A0010254B04 +:102A800011A82686D286E6858504829D034504002A +:102A9000630005120504E31675FF81460345040033 +:102AA00013071400930705FE93F7F70F63E8F90087 +:102AB00013864AE0B3C7C7209C438287930705FD6E +:102AC00093F7F70F637DFB089307A0028148630328 +:102AD000F51A9307E00201486309F50A930785F99F +:102AE00093F7F70F49466363F60437460010130661 +:102AF00086E4B3C7C7209C43828793E616003A84D6 +:102B000071BF93E626003A8451BF93E646003A84AB +:102B100071B793E606013A8451B793E686003A848A +:102B2000B5BF0345140093E606100507930770062A +:102B30003A8463E7A70A93074002E3F4A7F49307F4 +:102B4000B5FD93F7F70F13072004E36CF7F237474F +:102B50000010130747E9B3C7E7209C4382878148E9 +:102B6000B3C81821B3A8A820034507003A84938866 +:102B700008FD930705FD93F7F70F0507E372FBFECA +:102B80009307E0020148E31BF5F403451400A54751 +:102B900093E60640930505FD93F5F50F3A8663FE2F +:102BA000B7289307A002630EF52A3A8405073DB7BC +:102BB000BA499A4A0A4BF65B268463E444019304BB +:102BC000FAFFD2862686E6850145829DFA40228557 +:102BD0006A44DA442A4AD65C465DB65D0D6182805D +:102BE000130775F91377F70FBD47E3ECE7E82566A0 +:102BF00013061604B317E028F18F639007222946C5 +:102C00006304C7081D46E31EC7E603270D00110D28 +:102C10006314072693F5F6FE93F6064093E5150236 +:102C200098009DEA98002543BD48130E000221A09C +:102C30006384C703B28693FEF60013857E03636444 +:102C4000D30113850E0385073306F700A30FA6FEF5 +:102C500013D64600E3EED8FCA14642C02EC4268619 +:102C600036C2C1480148D286E6856E85EFE09FF600 +:102C7000AA8429BD83280D00110D63C208080345ED +:102C800014003A840507B1B593074D004AC9E2DC48 +:102C90003ECE03290D007D5663030800428603459E +:102CA00009004A96CA87630705506301F62603C7E1 +:102CB000170085077DFB3387274193F70640898AF4 +:102CC000638D07243357070B6389065E8946330CEF +:102CD000980046D0A687368D3AD222D4630DFC28C0 +:102CE000D2863E86E68513841700829D3307944082 +:102CF0004A970345070063060528A287C5B7034521 +:102D0000140093E626003A84B30810410507D1B3B6 +:102D1000034514009307C006E317F5E003452400BC +:102D200093E606301307340011B50345140093E60B +:102D300006200507E5BB0345140093078006630ED4 +:102D4000F52093E606080507D5B3930770066309D7 +:102D5000F512930770046306F51A93075004630491 +:102D6000F51A1D0D137D8DFF03270D0083274D00E0 +:102D7000268636C0E685D2866E85EFF00FE2210DFD +:102D8000AA8429B393076004630FF50E1D0D137D0C +:102D90008DFF03270D0083274D00268636C0E6856C +:102DA000D2866E85EFF00F86210DAA84C5B12686E6 +:102DB000D286E685130550028504829DC1B993072A +:102DC0004D004AC9898A3ECE138914006382061CCD +:102DD00003450D0046D02686D286E685829D825820 +:102DE0008547C69463F9173F4A86D2860509E6856A +:102DF00013050002829DE31999FE724D4A4979B18B +:102E00000345040037230010930DA3B18144E31F51 +:102E100005C40144E3E744DB5DB39307F0066307B1 +:102E2000F50663FEA7264AC9930780076302F536B5 +:102E30002946BD9A3283814EB1A83E873348082186 +:102E400005063328A82003450600130808FD93074C +:102E500005FD93F7F70FE373F7FE328413071600AF +:102E6000B5B903280D000345240009041307140015 +:102E70003368080A110D9DB193E51602BA865DB359 +:102E80009396B628F9BD93E6060209B721464AC9CA +:102E90003283814E13F5064013FE36FF19C113FE2F +:102EA00026FF93750E20639A053293770E1013094F +:102EB0004D006391075013770E046316072E1377A6 +:102EC0000E086306075803560D00631B0634137E75 +:102ED000FEFE630705348147980046C272C442C0B3 +:102EE0009A88268601485DA293078005630EF50641 +:102EF000930720066314F51009464AC93283814EB0 +:102F000051BF9396B62893E60602A1BD93F70640FB +:102F100033072641898AE39707DA638B06348946AB +:102F2000A287368C46D03AD226843E8D2286D2861F +:102F3000E685829D0504330794404A9703450700C0 +:102F400075F582581257EA87228DE2863E84EA841C +:102F5000D1E6724D4A49665C15BE0345240093E6EE +:102F6000060C13073400D9B641464AC993E6060257 +:102F70003283814E05B7825812572254EA86E28482 +:102F8000C1BFEA86228D825812572254EA84C9B7FB +:102F9000854763FC1723A2871389F4FFE2DC469977 +:102FA00046D026843E8C2286D2860504E68513050B +:102FB0000002829DE31924FF825803450D00E28739 +:102FC000228C6286D286E6853E84C694829D665CAB +:102FD000724D4A4965BC898A63890648268CE37A22 +:102FE00017F7A698B384E8406286D286050CE6857A +:102FF00013050002829DE3199CFEA1BF13F6064053 +:1030000013FEF6FE55E613750E2045E94AC993777F +:103010000E1013094D00639B072A13770E046315E6 +:10302000071613770E086309074003170D00935620 +:10303000F740B345D700958DB3C505089356F70102 +:10304000630207282E86B7DECCCC938EDECC9800A8 +:10305000254F930F000219A06384F703B335D603FD +:1030600085073283B302F7008D8133C5B52006058D +:10307000098E13060603A38FC2FE2E86E36E6FFC35 +:1030800046C242C072C436882686A948D286E685E2 +:103090006E85EFE03FB44A8DAA844A49C5BA9307CA +:1030A000900613FEF6FE631AF53A13F6064021DE8B +:1030B00013FEE6FE13060040B9B71D0D137D8DFF0C +:1030C00083264D0083250D00210D13DFF601B3E7A4 +:1030D000D500F9C393D7F641BD8D3387F540BD8E3A +:1030E000B387F640B3B6E5004AC9E2DCB386D74001 +:1030F000BA8537D5CCCCAA8E938ECECC1305D5CC41 +:1031000081479800930F0002368933862501B33634 +:10311000B6003696B336A6024A838507B302F70097 +:10312000AE8313DC2600F19AE296158E3386C540F5 +:10313000B3B6C500B306D940330CD603B386A60296 +:103140003339A602E2963306A602CA96139CF6010C +:1031500013D9160005823366CC00B346C620860616 +:10316000B386D54093860603A38FD2FEB285630F44 +:103170000302E39CF7F94A49665C46C242C072C446 +:103180007A882686A948C5B403470D00BA857DB55F +:1031900041463283814EFDB9631E062A4AC9E2DCEC +:1031A00081458146B9B703460D0005B3A546E3E264 +:1031B00076FCD1B713F70640E30F07E013F72600BC +:1031C0006303072A0147268C19BD03450D00268697 +:1031D000D286E685829DCA840DB11D0D137D8DFFBB +:1031E000032F0D0003294D00E2DC210DB3672F01F1 +:1031F000639E0712137EFEFE630A0512014C9800BF +:1032000046C242C0E287268672C49A880148D286A6 +:10321000E6856E85EFE01F9CAA844A49665CBDB0D6 +:1032200093565E481307100699C213071004130F34 +:1032300067FF25459800930E00020DA093860603B4 +:1032400093F6F60F8507B305F700A38FD5FEB356A7 +:103250006602E36466C8E382D7C93686B375660240 +:1032600093F6F50FE37CB5FCFA9693F6F60FD9BF0B +:1032700063721721338D9800A287330DED402684A9 +:10328000368C46D042D2BE842286D2860504E6859C +:1032900013050002829DE319A4FF8258034509002B +:1032A000A6871258A284E2863E8413871800E302A0 +:1032B00005CAE3070CC6814619BC637B171B93063E +:1032C00000404DBF9800E31D06DAB5BB83270D0013 +:1032D00093D6F701638907163306F04033E6C70A31 +:1032E000B7DECCCC938EDECC9800254F930F000236 +:1032F00019A06305F503B335D6030505B302A7008E +:1033000032838D81B3C7B5208607B307F640938714 +:103310000703A38FF2FE2E86E36D6FFC46C242C008 +:1033200072C43688AA872686A9488DB313575E488B +:103330009307100619C393071004D917980026D4D1 +:103340006ED866DA52DC22DE014C72CE46D042D212 +:103350001AD6FA84328AF68CBA8D3E8415A8930761 +:10336000050393F7F70F050CB3868D01A38FF6FEC7 +:10337000528681462685CA8597D0FF0FE780C0DB3D +:10338000638F2C0993070002630DFC08AA842E8921 +:10339000528681462685CA8597D0FF0FE780401266 +:1033A0001375F50FA547E3FCA7FAB307850093F75C +:1033B000F70F55BF83270D0089E7137EFEFE9800A7 +:1033C00029E993565E481307100699C213071004A3 +:1033D000130F67FFA54E9800130500020DA09386FA +:1033E000060393F6F60F85053306B700A30FD6FE46 +:1033F000B3D6670263EF6700638DA500B68733F627 +:1034000067029376F60FE3FCCEFCFA9693F6F60F7E +:10341000D9BF46C272C442C09A88AE87D9B4E3F31A +:1034200044F76E87724E82581258A2543253D25CBF +:10343000625A7254C25DE9B303270D00B305E04040 +:10344000B365B70AE5BE9800E31A06EC51BD032642 +:103450000D00A5BC814798000DB329464AC9F286E4 +:103460003283814E05BC93060040E39508E0D5B455 +:103470000507B1B805076DB40111B72800102A88F7 +:10348000AE8736872C00B2861385A8DF7D5606CE20 +:1034900042C43EC6EFF04FDAF2400561828083A756 +:1034A0000181011106CE91CFAA86372500102E8703 +:1034B000130525DF6C007D568297F24005450561B6 +:1034C0008280552EF2400145056182800D457310C2 +:1034D00025BE7D15E35D05FE0565130505807310AA +:1034E0004530736004307310003482800290FDBF59 +:1034F000411106C6E53F411122C426C206C6374423 +:103500000010EFE08FC6B7440010930784C3938484 +:10351000C4C363F99700130484C31C401104829749 +:10352000E36D94FEB24022449244410182801C41EA +:103530002E85B285828783475501011126CA4EC662 +:1035400052C406CEAA892E8AB284E9C76358C00441 +:1035500003C70500A9476309F70605478147638547 +:10356000E40422CC4AC856C213091A000544A94AE9 +:1035700003470900A2860504630657070509E39976 +:1035800084FE62444249924A63C09702269A834766 +:10359000FAFFCD1793B71700238AF900F240D244FF +:1035A000B249224A0561828003A709003305FA0067 +:1035B000B385F4400297269A8347FAFFCD1793B755 +:1035C0001700238AF900D9BF83474501D9F71C4169 +:1035D0003745001013058509894582978547E39291 +:1035E000F4F86DB70346F9FF3547E309E6F8B3850C +:1035F000F6403305FA0063D5D70083A70900829708 +:1036000083A709003745001013058509894582976E +:10361000A287ADB71C41F240D244B2495285224A3A +:10362000B285056182879C41011126CA4AC806CE2F +:1036300013070008AE842A89638DE70013871700FB +:1036400098C0BE9423822401F240D24442490561CD +:10365000828022CC03A481814EC652C49389450046 +:103660001DE0054781476244B249224A98C0BE9492 +:1036700023822401F240D244424905618280904075 +:103680005D3D004879DC1C40CE852285FDDB83A7AB +:103690004181F5D7E39787FE9040713DDDB73971E1 +:1036A00022DC26DA4AD84ED606DEB28952D456D269 +:1036B0005AD02A89AE843684EFD01FEFB7470F0067 +:1036C00093870724AA9733B5A700370700803306EE +:1036D000B5007D17BE856374C7003A86FD55B73ABD +:1036E000002013854AC497D0FF0FE780A09AFD57AA +:1036F0002A8B6381F40A39C4373A0010130A6A53DB +:1037000003A481811DC06394090419A0004811CC51 +:103710001C402686CA852285F5DB83A7418199C393 +:10372000E316F4FE029A004865F4631E0B04F2509F +:1037300062544259B259225A925A025B2685D25497 +:1037400021618280373A0010130AEA5255BF5ECEDB +:10375000A94B19A000480DC41C402686CA852285A5 +:10376000F5DB83A7418199C3E39687FE029A228500 +:103770009305F1000546A3077101029A004869FC10 +:10378000F24BE3060BFA13854AC497D0FF0FE7808C +:10379000009771BF4A851921AA84B1BF83A781818F +:1037A0001387818199C76389A700138707019C4B01 +:1037B000FDFB91C108C38280FDFD944B14C323A877 +:1037C00007008280411106C6BD2EB2400545410169 +:1037D0008280797126D206D622D44ECE52CCAA84CB +:1037E000A307A100EFD05FDCB7470F009387072442 +:1037F000AA9733B6A700370700802E967D17BE859F +:103800006374C7003A86FD55373A002013054AC451 +:1038100097D0FF0FE780008803A48181AA8905C49F +:103820004AD019A0004819CC1C4005469305F10068 +:103830002285EDDB83A7418199C3E315F4FEE539C9 +:1038400000487DF00259639A0900B2502254F249AF +:10385000624A268592544561828013054AC497D0F6 +:10386000FF0FE780C089B2502254F249624A268590 +:10387000925445618280411106C622C426C22A8420 +:10388000312EAA8485462285A6853686093D03A465 +:10389000818111C45C4091CB8297004865FCB240A5 +:1038A00022442685924441018280004865F4B2405A +:1038B00022442685924441018280717122D526D30B +:1038C00006D74AD14ECF56CB2A84AE84EFD0DFCD77 +:1038D000B7470F0093870724AA9733B6A700370787 +:1038E00000802E967D17BE856374C7003A86FD550D +:1038F000B7390020138549C497C0FF0FE78080794E +:103900002A8937350010A68622866C001305656269 +:1039100002C69D36B24703A48181AA84B9C352CDA1 +:1039200015E06A4A02C663180904BA502A540A59B3 +:10393000FA49DA4A26859A544D6182803246E53E3C +:10394000004801CC1C400C082285FDDB83A7418187 +:10395000F5D7E38587FE004875F403A481816A4AA0 +:1039600002C671D05C4091C7829700484DDC5C4034 +:10397000E5FF0048FDB7138549C497C0FF0FE780F6 +:10398000007865B73971130341022ED29A8506CEAD +:1039900032D436D63AD83EDA42DC46DE1AC6313F59 +:1039A000F24021618280635EB00203A74182B78743 +:1039B000F8BFBA9793B717009386C180B3A7D720F3 +:1039C000039807003306B500B54583460500630B31 +:1039D000D8001C4F93F70702EDFF14C30505E3164B +:1039E000C5FE82801C4F93F70702EDFF0CC3D5B7CD +:1039F00003A801822A866351B00603A741820145CC +:103A00001C4FC18B9DEB05051C4FC18BF5FF14436B +:103A1000B307A600A38FD7FEE394A5FE630D0800AD +:103A2000930700051CDF5C5B85669386460393F76E +:103A3000870336971CC32E858280630D0800930789 +:103A400000051CDF5C5B85669386460393F787035E +:103A500036971CC30DC18280630F080083A7418283 +:103A600013070005856698DFD85B93864603B697F3 +:103A70001377870398C37555828083A7018281CB12 +:103A800003A7418203A5C181232C0702828782807C +:103A900003A741821C4FA18BF5FF828041114AC0D0 +:103AA00003A64182B787074022C4B307F64093B705 +:103AB000170026C206C61384170283A7018201C914 +:103AC0009DCFB24022449244024941018280F5DBFD +:103AD0002285232C06028145EFC09F92B745001036 +:103AE00022859385A5A7EFC09F9DB240224423A0C5 +:103AF000018223AE01809244024941018280AE8658 +:103B0000B74500102A8722859385A5A723A0E182C7 +:103B100023AED180EFC03F9222858545EFC05F8EF6 +:103B200083A7418213070005856698DFD85BB24002 +:103B3000224493864603B6971377870398C392442B +:103B40000249410182803746001037470010B747CD +:103B5000001041110346460D0347070D83C7C70CEC +:103B600022C4B70607408945014506C623A2D18273 +:103B7000EFC06FF489450545EFC0EFF303A541821F +:103B8000F16593850520EFD0FFAB2244B240373575 +:103B90000020130585C28545410109B193773500A1 +:103BA0002A879DEFB7867F7F9386F6F7FD551043F2 +:103BB0001107B377D600B697D18FD58FE389B7FEBB +:103BC0008346C7FFB307A7408DCA8346D7FF9DC270 +:103BD0000345E7FF3335A0003E9579158280F9D281 +:103BE00083470700050793763700F5FB098F130518 +:103BF000F7FF82801385D7FF82801385C7FF8280FD +:103C0000FE1900109E190010C81900102E1A00107D +:103C1000E2190010161900102A1A001004190010D9 +:103C200030090010780D001058190010141A0010F7 +:0C3C3000CC340010CC0300105A0100102E +:103C400054696D6572202564206669726564210A75 +:103C50000000000052657065617420617420256C5D +:103C60006C640A0048656C6C6F2054696D65722144 +:103C70000000000063616E63656C6C65642E2E2E1F +:103C80002025640A00000000446F6E6500000000FB +:103C90000A2A2A2A2050414E4943202A2A2A0A0069 +:103CA0000A000000486172647761726520616C618E +:103CB000726D20256420616C726561647920636C8B +:103CC00061696D656400000048617264206173730E +:103CD0006572740052656C6561736500626F6F7424 +:103CE000325F77323571303830000000687474709C +:103CF000733A2F2F6769746875622E636F6D2F7228 +:103D0000617370626572727970692F7069636F2D6B +:103D10006578616D706C65732F747265652F4845A9 +:103D200041442F74696D65722F68656C6C6F5F74A8 +:103D3000696D657200000000322E312E30000000E7 +:103D40007069636F3200000068656C6C6F5F746946 +:103D50006D657200466562202035203230323500B4 +:103D6000666E692B00000000666E69006E616E0071 +:103D7000666E692D00000000554152542073746432 +:103D8000696E000055415254207374646F7574005D +:103D90005541525420737464696E202F20737464EB +:103DA0006F75740006005250D3F07542D43C001079 +:103DB00006005250E182887FDC3C00100600525021 +:103DC0009A235618EC3C001006005250ABB36053D7 +:103DD000383D001006005250BBFF3CB6403D00107D +:103DE00006005250861C0302483D00100600525047 +:103DF0005422A29D543D001005005250DE65F46827 +:103E0000386D00101A2B0010BC2A0010BC2A0010BC +:103E1000122B0010BC2A0010BC2A0010BC2A001073 +:103E2000BC2A0010BC2A0010BC2A0010BC2A0010BA +:103E30000A2B0010BC2A0010022B0010BC2A001014 +:103E4000BC2A0010FA2A0010362D00102C2B00106E +:103E50002A2D00102C2B0010102D00102C2B0010E0 +:103E60002C2B00102C2B00102C2B00102C2B0010B6 +:103E70002C2B00102C2B0010222B00102C2B0010B0 +:103E80002C2B00102C2B00102C2B00102C2B001096 +:103E9000222B0010AE2D0010822A0010822A001062 +:103EA000822A0010822A0010822A0010822A001022 +:103EB000822A0010822A0010822A0010822A001012 +:103EC000822A0010822A0010822A0010822A001002 +:103ED000822A0010822A0010822A0010822A0010F2 +:103EE000822A0010822A0010822A0010822A0010E2 +:103EF000822A0010822A0010822A0010822A0010D2 +:103F0000822A0010822A0010822A0010822A0010C1 +:103F1000822A00104A2D0010842D00104A2D001016 +:103F2000822A0010822A0010822A0010822A0010A1 +:103F3000822A0010822A0010822A0010822A001091 +:103F4000822A0010822A0010822A0010822A001081 +:103F5000822A0010822A0010822A0010822A001071 +:103F6000E82E0010822A0010822A0010822A0010F7 +:103F7000822A0010822A0010822A0010822A001051 +:103F8000822A0010822A0010E82E0010BE2D001098 +:103F9000E82E00104A2D0010842D00104A2D00102C +:103FA000000000000000F03F00000000000024407E +:103FB00000000000000059400000000000408F4059 +:103FC000000000000088C34000000000006AF840C4 +:103FD0000000000080842E4100000000D0126341E8 +:103FE0000000000084D797410000000065CDCD415E +:103FF0000600525053B4F4A1903D001000000000A0 +:10400000FFFFFFFFFFFFEFFFFFFFFFFFFFFFEF7F60 +:104010000000000065CDCD410000000065CDCDC1A0 +:10402000000000000000E03FFB799F501344D33FA5 +:10403000B3C8608B288AC63F000000000000F83F2C +:1040400061436F63A787D23F71A379094F930A40F9 +:104050001655B5BBB16B0240EF39FAFE422EE63F72 +:104060000000000000002C40000000000000244080 +:1040700000000000000018400000000000000040A8 +:10408000000000000000F03F2D431CEBE2361A3F19 +:104090000000000080842E410D0A000008005250EC +:0C40A000120000000800525092100000B6 +:1040AC00A43D0010B03D0010BC3D0010C83D0010F8 +:1040BC00D43D0010E03D0010EC3D0010F83D001028 +:0C40CC00A44000109C400010F03F0010C9 +:1040D8000111B70700D022CC26CA4AC84EC606CE60 +:1040E80083A907002A842E89B28431A80F003003DF +:1040F8002300070073A007304A85A685971000F0B3 +:10410800E780E02031E51C40737704309396370050 +:10411800B316D028F19B2FA6D744758E6DFE0F00DD +:10412800300383064400937787001840E3D006FCE9 +:10413800230234010F0030032300070073A0073067 +:10414800F2406244D2444249B24905450561828041 +:10415800F2406244D2444249B24901450561828035 +:104168001C41F37604301398370033180029F19B6B +:10417800AFA80745B3F80801E39C08FE0F00300319 +:104188000308450093F786001441634208020F00B4 +:1041980030032380060073A00730B70700D00387D9 +:1041A80007008147631407013E85828015B73706EB +:1041B80000D010422302C5000F0030032380060000 +:1041C80073A0073085473E8582801C417377043091 +:1041D80093963700B316D028F19B2FA6D744758E37 +:1041E8006DFE0F003003FD572302F5001C410F0040 +:1041F8003003238007009377870073A007303320AC +:10420800100082803288AA882E87D5EA63FFC50EFF +:10421800C167636CF618B7070001E1466373F600DF +:10422800C146B73700203353D6009387478E9A97F5 +:1042380083C7070013030002B697B306F340630B66 +:10424800F3003397D500B357F5005D8F3318D600C8 +:10425800B318D500135608013355C7029316080141 +:10426800C18293D708013377C702B385A6024207F4 +:10427800D98F63FAB700C2971307F5FF63E4070104 +:1042880063EFB72E3A858D8F33D7C702C20893D80C +:104298000801B3F7C702B386E602C207B3E8F8001D +:1042A80063FBD800C2989307F7FF63E50801791705 +:1042B80063E3D8003E874205598D8145828063F5C6 +:1042C800D500814501458280C16763E8F618B707C4 +:1042D8000001614863F3F6004148B737002033D73F +:1042E80006019387478EBA9703C707009307000212 +:1042F8004297B388E7406398E71663E4B6263335F8 +:10430800C500133515008145828055C6C1676372A3 +:10431800F62413370610133717000E07B356E600B6 +:10432800B73700209387478EB69783C70700930651 +:104338000002BA97B38EF640639FF608B387C5406C +:104348009356060142064182854533D5D70213D7D5 +:104358000801B3F7D7023303C502C207D98F63FA3E +:104368006700C2971307F5FF63E4070163E6672058 +:104378003A85B387674033D7D702C20893D8080174 +:10438800B3F7D7023306C702C207B3E8F80063FBE6 +:10439800C800C2989307F7FF63E50801791763E33C +:1043A800C8003E874205598D82809336061093B621 +:1043B80016008E06BDB5B737002081469387478E15 +:1043C800B69783C70700014793060002BA97B38ED2 +:1043D800F640E385F6F63318D60133D3F500935645 +:1043E8000801335ED30213160801B395D501418243 +:1043F800B357F500CD8F13D70701B318D501337321 +:10440800D302B305C603420333676700637BB70073 +:1044180042971305FEFF636D0715637BB714791E7A +:1044280042970D8F3355D702C207C1833377D7021E +:104438003303A6024207D98F63FB6700C2971307AD +:10444800F5FF63E3071363F167127915C2979315B4 +:104458000E01C98DB3876740CDBD13B80610133858 +:1044680018000E089DBD335EE600B3961601336E44 +:10447800DE0033D8E500935E0E01B357D80313135B +:104488000E01B3951501135303013357E5004D8F02 +:1044980093560701331616013378D803B305F30290 +:1044A8004208B3E6060163FBB600F2961388F7FFED +:1044B80063E2C60D63F0B60CF917F2968D8E33D809 +:1044C800D60342074183B3F6D603B3050303C206F6 +:1044D800558F637BB70072979306F8FF6368C70927 +:1044E8006376B70879187297C207931608011313F1 +:1044F8000601B3E70701C1821353030113D807016B +:104508004182330E68020D8F33836602B386C6027A +:1045180093550301F296AE963308C80263F4C601B8 +:104528004166329813D6060142966360C702630556 +:10453800C7003E8581458280420313530301C206AA +:10454800331515019A96E376D5FE1385F7FF814555 +:104558008280B70700016377F60293560601414748 +:10456800C1B38145054582803A85D5B53688ADBF4A +:104578002A8E45BDC28799B77915C297DDBB7915D3 +:10458800C29711B393568601614759BB3288AA88EE +:104598002E832E87CDE663FFC50EC1676362F618CA +:1045A800B7070001E1466373F600C146B73700203C +:1045B8003353D6009387478E9A9783C70700130310 +:1045C8000002B697B306F340630BF3003397D500A8 +:1045D800B357F5005D8F3318D600B318D50093553F +:1045E80008013356B702131308011353030193D775 +:1045F80008013377B702330666024207D98F63F79B +:10460800C700C29763E4070163E4C72E918F33D7CD +:10461800B702139508014181B3F7B7023307670260 +:10462800C2075D8D6378E500429563650501637394 +:10463800E5004295198D3355D5008145828063F395 +:10464800D5008280C16763EBF616B70700016148A1 +:1046580063F3F6004148B737002033D70601938744 +:10466800478EBA9703C7070093070002429733881B +:10467800E740639BE71463E4B600636AC500B308C8 +:10468800C54033331501B386D5403383664046852C +:104698009A85828041CEC1676370F624133706106D +:1046A800133717000E07B356E600B7370020938775 +:1046B800478EB69783C7070013030002BA97B3065D +:1046C800F3406315F3083387C540135306014206C8 +:1046D8004182B355670293D7080133776702B385E0 +:1046E800C5024207D98F63F8B700C29763E507018F +:1046F80063F3B700C2978D8F33D76702C20893D888 +:104708000801B3F767023307C7021395070133E5BA +:10471800A800E36BE5F0198D3355D50081458280FB +:104728009336061093B616008E0649B5B7370020A3 +:1047380081469387478EB69783C7070001471303BF +:104748000002BA97B306F340E30FF3F63318D60026 +:1047580033DEF50013530801B35E6E021316080129 +:10476800B395D5003357F50041824D8F9357070114 +:10477800B318D500337E6E02B385CE02420EB3E77E +:10478800C70163F8B700C29763E5070163F3B70091 +:10479800C2978D8FB3D5670242074183B3F767028B +:1047A800B385C502C2075D8F6378B700429763651A +:1047B80007016373B70042970D8F21BF13B8061026 +:1047C800133818000E0841BDB3960601B358E60029 +:1047D800B3E8D80033D3E50013DE0801B356C303AA +:1047E800939E080193DE0E01B357E500B3950501CA +:1047F800DD8D93D705013316060133150501337393 +:10480800C303338FDE024203B3E7670063FBE701AC +:10481800C6971383F6FF63EB170D63F9E70DF916D7 +:10482800C697B387E74133DFC703C205C181B3F732 +:10483800C703B38EEE03C207CD8F63FBD701C697BC +:104848009305FFFF63E2170B63F0D70B791FC69739 +:10485800C206131E0F01B3E6E60113130601135E29 +:104868000E0113530301C182135F0601B38F660261 +:10487800B385D74133036E02330EEE03935703011A +:104888007E9EF297B386E60363F4F701416EF296D3 +:1048980013DE0701420313530301C207F2969A97E6 +:1048A80063E4D5026380D502B307F5403335F500DC +:1048B800958D898D3397E50033D50701B3D505016B +:1048C800598D8280E372F5FE3386C740B3B7C700BF +:1048D800C6979D8EB287C9BFB7070001637CF600F3 +:1048E800935606014147D1B32E8F9DB79A8615BFBF +:1048F800C29729BB93568601614745BB3703100011 +:1049080001117D1313D74601B377B3003378D30071 +:1049180056C293DA45018E0726CA52C493FAFA7F23 +:10492800135AD50193D4F5010E089375F77F06CE77 +:104938001357D60122CC4AC84EC6FD82336AFA0004 +:10494800B288B387BA4033670701131E3500931E38 +:1049580036006389D40E6355F00463920516B36676 +:10496800D701638106309386F7FF638C06621306CE +:10497800F07F6386C73A13068003635FD656130435 +:10498800FEFF333E8E00330ACA4193168A0037076A +:104998008000BE8A63DA0604130AF7FF7D54B9A2C1 +:1049A8006384071AB3875541639D0A3C3366CA017D +:1049B800630006581386F7FF6307066A1305F07F3E +:1049C800638FA762130580036356C5741384FEFFC3 +:1049D800B3BE8E00330AD74113168A00370780000A +:1049E8006341067CB684BE8A9307440033B48700CB +:1049F800229A3E8493178A0063DD072093871A0062 +:104A08001307F07F2688638AE720370780FF7D1722 +:104A180093F7F77F3377EA001316D7010D8026073F +:104A2800418E3183F2406244D207D98F1317F801BF +:104A3800D98FD2444249B249224A924A3285BE8528 +:104A4800056182802688635DF01C63920516B36653 +:104A5800D701638906209386F7FF638E064E1306F7 +:104A6800F07F6389C75A13068003635CD662931686 +:104A78008A003707800013041E00BE8AE3D606F6B4 +:104A88003A8A0144850A9307F07F6387FA18B707C3 +:104A980080FFFD17B377FA00135714000588939623 +:104AA800F701418F13DA170033E4E60093777400B7 +:104AB800B1D39377F4001147E38EE7F235B7930645 +:104AC800F07F638EDA249306800363D2F61C130406 +:104AD800FEFF333E8E00330ACA4113178A00B70718 +:104AE8008000E35307F0138AF7FF7D545285EF10D7 +:104AF8009061930785FF13070002B306F740B3568A +:104B0800D400331AFA00B3E646013314F40063C73D +:104B1800572FB387574185071D8F3316E400333667 +:104B2800C000335AF400336646013397E600336415 +:104B3800C70033DAF600B3674401814AA5FB26882B +:104B4800814701470146F9BD93871A0093F7E77F2C +:104B580063920728B367CA013366D70163910A3E97 +:104B6800638B075263050620B305DE413336BE006A +:104B7800B307EA40918F13968700635F065C338E14 +:104B8800CE41B3BECE01330747413307D741B367A0 +:104B9800EE007284B684C5D79317870063D7076081 +:104BA800B70780FFFD177D8F36888547B5B5930613 +:104BB800F07F6386DA169306800363C2F62CB70685 +:104BC8008000558FFD4663C8F640130600021D8E0F +:104BD800B316C7003396CE00B3DEFE003357F70096 +:104BE8003336C000B3E6D601B3E7C6003A9A3E9E14 +:104BF800B337FE003E9A728493178A00E3C407E82D +:104C080093777400638C075A9377F4001147E39DF8 +:104C1800E7DCD6870D8091A8D6870147014619B5EC +:104C280063890710B387554163940A26B366CA019E +:104C3800638D064C9386F7FF638F06301306F07F6B +:104C48006384C73E13068003635BD65293168700BE +:104C5800370A8000BE8A0144E3C606E213841E00B8 +:104C68003A8A59B3131435000D801316DA019306E6 +:104C7800F07F418E13573A006398D708598E59CA66 +:104C880001489307F07F37070800014661BBB70664 +:104C98008000558FFD4663C0F618930600029D8E6E +:104CA8003314D700B396DE00B3DEFE00B336D0006F +:104CB8003364D4013357F700558C330AEA40330480 +:104CC8008E40333E8E00330ACA4193178A00E3D9D7 +:104CD80007F2260A135A9A00E31A0AE02285EF100F +:104CE8009042930785017D47E357F7E06115B316B6 +:104CF800A40063D65715370780FF7D17758F1316E5 +:104D0800D701B387FA400D833207318393F7F77FD2 +:104D1800268809BB26889307F07F014721B313141F +:104D28003500135534001316DA01498E13573A002B +:104D3800B1B793871A0093F6E77F639F0616B367A8 +:104D4800CA01639E0A3AB366D7016380074085C2E9 +:104D5800F29E33BECE015297330AC70193178A00D9 +:104D6800768E63C00742B3E74E01E38A07DC135E21 +:104D78003E001316DA013366C60113573A0081471D +:104D880061B71306F07F638CC5261306800363475B +:104D9800F61637068000336ACA007D46634EF62849 +:104DA800130600021D8E3314CA003316CE00335E7C +:104DB800FE003336C0003364C401B357FA00518C87 +:104DC8001D8F33848E40B3BE8E00330AD741AE8A1E +:104DD800B684E5BD3304DE4133368E00B307EA40BE +:104DE800918F13968700634A06123366F4003E8A51 +:104DF800E31406EE0148814701472DB1370A80FFC9 +:104E08007D1A13777400B38AFA4033FA4601E31D1A +:104E180007DED68701B5938607FE13060002B35650 +:104E2800D700638AC70013060004B307F640B31718 +:104E3800F700B3EEFE003334D001558C49B5338406 +:104E4800574193071400635DF72E051413070002FA +:104E580033D48600638BE70013070004B307F740D9 +:104E6800B397F600B337F0005D8CE30A04CC937770 +:104E78007400814AE39F07C2014A0D80FDB31317EE +:104E88008A00B7078000635D071C3E8A0144DDBEC7 +:104E98009306F07F638AD5189306800363D5F620BE +:104EA80093178700370A8000AE8A0144E3CC07BC19 +:104EB80013841E003A8A0DBE9306F07FE38FD7D481 +:104EC800F29E33BECE015297729793DE1E001314E2 +:104ED800F70193F67E003364D401135A170099C67C +:104EE8009376F4001146BE8AE390C6B00D8013167F +:104EF800DA01418E118309BDB68769BB1384FEFFB1 +:104F0800B3BE8E00330AD74113178A00B707800053 +:104F1800634B071CB684AE8AC1BC338ECE41B3BE88 +:104F2800CE01330747417284330AD741B6846DB343 +:104F38001396380013543600B6843A8A3DB3E9EB29 +:104F480063090622139638009317D7010D82B68499 +:104F58005D8E0D8325B3F29E33BECE0152977297B4 +:104F68009317870063D40718B70780FFFD1793D6F8 +:104F78001E007D8F9317F70193F57600D58F135692 +:104F880017006382051E93F6F7009145638DB61CE2 +:104F98003384B700B337F400338AC7000D808947DC +:104FA800E9B1B30EDE41333EDE013307EA40330A8E +:104FB800C74193178A00768463CD070093DE3E00CD +:104FC8001316DA013366D60113573A0085472DBB0D +:104FD800B684854AFDB9938607FE13060002B356C8 +:104FE800D700638AC70013060004B307F640B31757 +:104FF800F700B3EEFE00B337D001D58FCDBE93973F +:1050080038001316D7018D83B6845D8E0D83BDB12C +:10501800E31806C613143500935734001316DA0143 +:105028005D8E13573A0099B9939738001316D70134 +:105038008D835D8E0D8399B1138607FE13050002DB +:105048003356CA00638AA70013050004B307F54066 +:10505800B317FA00336EFE003334C001518C95B398 +:1050680013041E0051B2338ECE41B3BECE013307B6 +:105078004741330AD74193178A007284E3CA07F479 +:10508800135E3E001316DA01B6843366CE0013575A +:105098003A00854795B9E30F06D43A8A768EB684E6 +:1050A800F9B1B68705B6B7068000336ADA00FD465F +:1050B80063C4F606130600021D8EB316CA00331623 +:1050C800CE00335EFE003336C000B3E6C601B357E8 +:1050D800FA00D18E3E97B69EB3B6DE00338AE6005C +:1050E8007684AE8A11BEAE8AB684F5BA1316D70195 +:1050F80093DE3E003366D6010D83854731B18DD7E7 +:10510800B36ED701E39E0EB631B70E0613543600C0 +:105118003A8AA1BEB28751B1138607FE93060002F0 +:105128003356CA00638AD70093060004B387F64053 +:10513800B317FA00336EFE00B336C001D18E61BFDB +:10514800130700021D8F0146F9BAE38A069E76848A +:105158003A8A81470D8011BE33E6F500E30C06C894 +:105168003E8A2E8E29B18D8376065D8E11838947FE +:1051780061BE01489307F07F3707080065B0B6871E +:105188003DB7370780FF7D173377EA001316D7013D +:1051980093DE3E000D833366D6013377670085477B +:1051A80051B0BE8AB6846FF02FFF1316D701135E75 +:1051B8003E003366CE000D838147B9B60D80D68791 +:1051C8006DB4797193D7450122D426D252CC56CAF0 +:1051D80066C29394C50006D64AD04ECE5AC85EC65B +:1051E80062C46AC093F7F77F2A84B28C368AB1808A +:1051F80093DAF501638907121307F07F638AE706DC +:105208008E04935BD501B3EB9B0037078000138BAB +:1052180017C0131C3500B3EBEB008144014D9357C5 +:105228004A011314CA0093F7F77F3180135AFA0121 +:10523800B5C31307F07F638EE70C0E0413D7DC01A8 +:10524800938717C0418F37048000330BFB40598C7C +:1052580093973C0081463D47B3C54A01636D971853 +:10526800373700201307478A8A04BA949840028780 +:10527800B3EBA400639C0B143E8B93574A011314A1 +:10528800CA0093F7F77F014CA144094D3180135AA6 +:10529800FA01C5F3B36794016385071463060436FE +:1052A8002285EF1040662A87930755FFF5469D8EA5 +:1052B800930787FF3314F400B3D6DC00558CB397FB +:1052C800FC005A97130B373F814671B79307F07F5D +:1052D80081460147B2502254D207FE05D58FCD8FA3 +:1052E80092540259F249624AD24A424BB24B224C7A +:1052F800924C024D3A85BE85456182808147814640 +:105308000147C9BF81459307F07FB70608000147E9 +:10531800D1B7B3679401130B1B80E9EB93E4240026 +:10532800014489460DBFB3EBA40063870B0A638F62 +:10533800042A2685EF10205D2A87930755FFF54B31 +:10534800130C87FFB38BFB40B3948401B35B7401E8 +:10535800B3EB9B00331C84019307D0C0338BE74029 +:105368008144014D6DBDD6855E84E2870947E30F10 +:10537800EDF40D47E308EDF80547E301EDF8930F69 +:10538800FB3F7E87635AF03B93F6770063940630C1 +:1053980013D537009317740063D80700B70700FFC9 +:1053A800FD1713070B407D8C9307E07FE3C0E7F2FE +:1053B8009316D401131694009377F77F33E7A6006A +:1053C8009356C60001BFD285368D4DB7A68B2A8C61 +:1053D8003E8BB1440D4DA1B5014C9144014B054D97 +:1053E8003DBD93E4140001448546B5B593E434000B +:1053F800E6878D468DB56362741F638E8B1CE286CB +:105408007D1B014C131784001353070133D46B021F +:1054180013D68701598E9318060193D8080113D71C +:10542800060113988700B3FB6B0233858802C20B11 +:10543800B367770163F8A700B2971307F4FF63F621 +:10544800C7243A84898F33D76702C206C182B3F76B +:105458006702B38FE802C207DD8E63F8F601B296E1 +:105468009307F7FF63FEC6203E874204598C9317C3 +:105478000401131E0801C183135E0E01935E080127 +:10548800135504013387FE02B386F641338FC703F1 +:10549800B30FC50393570F017E97BA973305D5030A +:1054A80063F4F70141673A95931F0F0113D707017A +:1054B800139F070193DF0F01B307A7007E9F63E2E5 +:1054C800F60E638EF60C330FEC41333CEC019D8EE7 +:1054D800930FFB3FB38686417E876304D616B3D706 +:1054E800660213550F01B3F66602B382F802C206CC +:1054F800C98E63FB5600B2961385F7FF63E2C61A9E +:1055080063F0561AF917B296B386564033D5660239 +:10551800420F135F0F01B3F66602B388A802C206F2 +:10552800336FDF00637B1F01329F9306F5FF636BC8 +:10553800CF1663791F177915329FC207C98F9396C3 +:105548000701C18293D207013385DE02330F1F4161 +:105558003383C203330EDE021A9593560E01AA96C0 +:10556800B38E5E0263F466004165AA9E13D50601F8 +:10557800420E135E0E01C2067695F2966367AF0A75 +:105588006303AF0A930620C093E717006348DB1252 +:1055980013854700B337F5000D813E94E5BBE374EE +:1055A800ECF333070C0133358701B30FC500FE96C2 +:1055B8003A8C930FF4FF6371D60C63E6F600639F91 +:1055C800D70A637DE70B4297333507013295791483 +:1055D800AA963A8CCDBDE364FCE29396FB0113577F +:1055E8001C0093DB1B00D98E7E0C29BDEF10A03167 +:1055F80093075501F14613070502E3D2F6D4611566 +:10560800B31BA400014C89BB6685EF10C02F93071C +:105618005501F14613070502E3DAF6C8611533941C +:10562800AC00814779B9E38E06D4329FFA88138398 +:10563800F7FF636BCF06636AAF126303AF149A87F1 +:1056480091B701458547E34AF0F563960F08370798 +:1056580000809317F4017D17D98F058013874700C1 +:10566800B337F7003E94BA871317840063590712BB +:10567800854781460147B9B9630ED6027E84A1B534 +:10568800E3F4F6DF7917B296CDB3E3FCA7DA791421 +:10569800B2974DBB93F6F7001146E38BC6CECDBD4E +:1056A800AA879DB5368551BD9A87E39DA8ECE39BF3 +:1056B80006EDC1B961F5E3E8F6F011B7130710C0BC +:1056C800631CEB0013D71700136717009317F40137 +:1056D800D98F058061B7FD5705473307F741930612 +:1056E8008003E3CDE6C0FD4663D2E60A8556B3865D +:1056F800F64113060002B356D4006307C700130B24 +:10570800EB4333146401C18FB337F000D58F13F71F +:105718007700814611CF13F6F70011450147630959 +:10572800A6003386A700B337F6001397D701B287D0 +:105738008D835D8F814779BEE3900FFA93F67700EA +:1057480013D617007D4B0547ADE2331B6401558E18 +:10575800B367CB0093F677003354E40091D613F780 +:10576800F7009146E302D7F0D5BD13131800B338FC +:105778000301B298FA98F9171A88E38AA8F219B5BA +:10578800E365D8FE9A87E39F06DFE5BE130BEB417E +:10579800B3966701B336D00033D6E7007DB79316CA +:1057A8009400B1821317D40161B7B3F6E70071BF53 +:1057B80093D84501B707100013D746012A88FD176B +:1057C8001303F07F93F8F87F33756700428E33F741 +:1057D800B700B28EF58FFD81FD82638E6802630F7C +:1057E8006500639708043368070121E15D8E35C2BF +:1057F800631C0806139516007D1582805D8E3DE2B8 +:10580800639508003367070175D7639BD500139527 +:1058180015007D1582803367070129E7630E15039C +:10582800B305B04013E515008280E30508FCF1BF1D +:1058380065D9E397D5FEE34515FFE3CAA8FCE3E184 +:10584800E7FEE316F7FCE3EDCEFD0145E361DEFD7F +:105858008280E31708FC8280D18F89E7E392D5FC28 +:105868000145828079558280E38BD5FC55BF93D85A +:105878004501B707100013D746012A88FD171303FF +:10588800F07F93F8F87F33756700428E33F7B700DF +:10589800B28EF58FFD81FD8263836804630F650016 +:1058A800639B0804336807013DE95D8E15C6631DD7 +:1058B8000806139516007D1582805D8E094519EE40 +:1058C80063950800336707016DD76386D504B30570 +:1058D800B04013E515008280E31B08FE8280336721 +:1058E800070129E3E31515FFD18F0945E5FBE3908F +:1058F800D5FE0145828061DDE39BD5FCE34915FDBA +:1059080063CBA800E3E5E7FC6317F700E3E1CEFD0E +:105918000145E375DEFD139515007D158280E30AC8 +:1059280008F865B709458280E38ED5FC4DB77971D3 +:1059380093D7450122D426D252CC56CA62C41394B6 +:10594800C50006D64AD04ECE5AC85EC666C26AC0E0 +:1059580093F7F77FAA8A328CB684318013DAF5017F +:10596800638207341307F07F6384E7220E0413571A +:10597800D501418F37048000138B17C0931B350066 +:10598800598C814C014D93D744011397C40093F768 +:10599800F77F935AC700FD80638F07201307F07FB6 +:1059A800638EE72C938717C029473E9B634C972546 +:1059B80013973A009357DC01D98FB3469A003707FB +:1059C80080000946B3EAE70013183C00B685814712 +:1059D80063519603054633169601137706536314ED +:1059E800072293750624639B053C13768608631A81 +:1059F800063A93970B0113160801C183418293DB82 +:105A08000B01135808013387C7023385CB021353A0 +:105A18000701B305F802AA952E93B38E0B0363749E +:105A2800A300C165AE9E139E0A014207135E0E01D4 +:105A380093DA0A01418393150301B388CB03BA951E +:105A4800135303013387C703B387FA0213550701BA +:105A5800C6973E95B38B5B0363741501C167BE9B04 +:105A68009317040193180701C183418093D8080153 +:105A780013170501B30FF802469741813A935E95D3 +:105A8800B308C402338FC702C69F13560F017E9610 +:105A98003308880263741601C1684698420F931848 +:105AA8000601135F0F014182469F4296B308C40363 +:105AB8003388C703B387FA02135E0801C6973E9E70 +:105AC800B38A8A0263741E01C167BE9A93180801DB +:105AD80093D8080193170E013308D301C6973E9552 +:105AE8003337E800B308E8012A973A9633B8080133 +:105AF8003298B337F5003335A700C98F3337E6003E +:105B0800135E0E013336C800F297518F939B9800AD +:105B18003E97B3EBBB0056972607B33B700193D86B +:105B2800780113547801B3EB1B012608931777000B +:105B3800598CB3EB0B0163C907109307FB3F635BF9 +:105B4800F02013F77B0015C713F7FB00114663021B +:105B5800C70213874B00B33B77015E94BA8B1317C8 +:105B6800740063580700370700FF7D1793070B4041 +:105B7800798C1307E07F6349F7241317D40193DB6B +:105B88003B00260493F7F77F33677701318049A8F4 +:105B9800B36BA40063940B1A3E8B93D744011397FD +:105BA800C40093F7F77F0144A14C094D935AC700ED +:105BB800FD80E39507DE33E88A01630808126388ED +:105BC8000A225685EF003054AA87130755FFF54679 +:105BD800998E138887FF33970A01B356DC00B3EA1E +:105BE800E60033180C01B307FB402947138BD7C0D5 +:105BF800634A97018947B3469A00E3DC97DFB68585 +:105C08008147C9BBD28589476304FD1A8D47630C58 +:105C1800FD128547AE866314FD04814701440147A0 +:105C2800D207B250C18F2254FE06D58F9254025922 +:105C3800F249624AD24A424BB24B224C924C024D34 +:105C48003A85BE854561828093D71B0093FB1B0074 +:105C5800B3E77701931BF401B3EB77010580930752 +:105C68000B40050B6358F00E13F77B00E30907EEB2 +:105C780013F7FB001146E31EC7ECD5B533E88A01DC +:105C8800130BFB7F631B080893E72C002947E34BA2 +:105C9800F7F6B3459A00AE86638E0C1CBE8C814A1B +:105CA80089470DBBB36BA400638C0B02630304121A +:105CB8002285EF0050452A87930655FFF547930B39 +:105CC80087FF958F33147401B3D7FA005D8CB39BAB +:105CD8007A019307D0C0338BE740814C014D65B101 +:105CE8000144914C014B054D79B993EC1C00A9472F +:105CF800E3CA97F1B3459A000947AE86814A8547BA +:105D0800E34A97CD09476385E70A054D854701446E +:105D1800814BAE86E315FDF409B793EC3C002947A7 +:105D28006345971505473316970113768608B346DA +:105D38009A0062888D47E30E06CAA5A0AA8B3E8BFF +:105D4800B14C0D4D89B181469307F07F37040800A7 +:105D58000147F9B50546DDEB130BEB41B3976B0132 +:105D6800B337F000331B6401B3E7670133D7CB00C7 +:105D78005D8F937777003356C40081CF9377F70010 +:105D880091456388B700B307B70033B7E7003A9681 +:105D98003E879317860063D1070E85470144014764 +:105DA80041B53E8D8947A6855684C28BE310FDE632 +:105DB800AE869307F07F014401479DB5814693075E +:105DC800F07F37040800A9BD9307F07F014401471D +:105DD80081BDEF00503393065501F14713070502C3 +:105DE800E3DED7EC61153394AA00814BDDB56285FB +:105DF800EF00703113075501F14693070502E3D808 +:105E0800E6DC6115B31AAC000148F1BB1D8E13071F +:105E18008003E344C7E07D47E350C7F40557B30761 +:105E2800F74013070002B357F4006308E600130BAA +:105E3800EB43331B6401B3EB6B01333770015D8FA8 +:105E480093777700014491CF1376F7009145814706 +:105E58006309B6003306B7003337E6009317D70156 +:105E680032870D835D8F814765BB81463704080003 +:105E780001477DB3894779B513149600318093178C +:105E8800D601C5B7B7071000FD170111B3F8B70061 +:105E980013D84601F58F8E081397370026CA52C4C7 +:105EA80056C2135AD50193DA45019357D60193D4B4 +:105EB800F5011303F07F06CE22CC4AC84EC61378EC +:105EC800F87F336A1A01328ED98FFD82B3FA6A00DD +:105ED800A685931E3500931836006308681693C686 +:105EE800160033870A416385D40C6352E05A630B6A +:105EF8000818638F6A389306800363C3E61AB706E7 +:105F08008000D58FFD4663C4E64693060002998E4D +:105F18003394D700B396D800B3D8E800B336D0008E +:105F28003364140133D7E700558C330AEA403384CD +:105F38008E40B3BE8E00330ADA4193178A0063C3DA +:105F4800072E93777400638D07329377F400114717 +:105F58006388E7329307440033B48700229A3E846B +:105F680093178A0063DE073093871A001307F07FC0 +:105F780093F51400638FE726370780FF7D1793F7A3 +:105F8800F77F3377EA001316D7010D802607418E75 +:105F98003183F2406244D207FE05D98FCD8FD244B7 +:105FA8004249B249224A924A3285BE8505618280B9 +:105FB8006358E05A631C082033E71701630E072271 +:105FC8001387FAFF630C074663846A5C93068003B1 +:105FD80063C8E620FD4663C0E65213060002198E28 +:105FE800B396C7003396C800B3D8E8003336C0006C +:105FF80033D7E700B3E61601B3E7C6003A9ABE9E68 +:10600800B3B7FE003E9A768493178A00E3DB07F263 +:10601800850A9307F07F638CFA4CB70780FFFD175A +:10602800B377FA001357140005889396F701418F48 +:1060380013DA170033E4E6009377740095D3937767 +:10604800F4001147E398E7F021BF33E717011386FF +:106058001A8069C76388D40C63070610638A0A2C00 +:1060680013173E001396D7010D83B684598E8D837E +:106078005D8E6309062081459307F07F3707080086 +:10608800014601BF33E71701630807161387FAFFB4 +:1060980063080742638E6A1E93068003E3D4E6E62C +:1060A8001384FEFFB3BE8E00330ADA4113178A0049 +:1060B800B7078000E35007EA138AF7FF7D5452853B +:1060C800EF007004130785FF93070002B386E740CB +:1060D800B356D400331AEA00B3E646013314E40099 +:1060E800634B5723330757410507998F3316F4003D +:1060F8003336C000335AE400B397F60033664601DE +:1061080033E4C70033DAE600B3674401814A8DF708 +:1061180093F51400814701470146A5BD93C61600B3 +:10612800E39CD4F2630E061663920A2C4287B36688 +:10613800DA01638B06529306F7FF63810630130674 +:10614800F07F6305C72A130680036354D65A9396D3 +:106158008700370A8000BA8A0144E3CB06EA138431 +:1061680018003E8AC5BB13871A001377E77F6311AF +:10617800071833E617013367DA01639C0A28630EB0 +:106188000746630D0614B3851E4133B6BE003307B8 +:10619800FA40118F13168700635A0652B38ED841FE +:1061A800B3B8D801B3874741B387174133E7FE0037 +:1061B8007684B68431DF1397870063510756370713 +:1061C80080FF7D177D8FB685854775BB63826A0C16 +:1061D8009306800363C6E600B7068000D58FDDBB53 +:1061E80013178A00B70780006350072A3E8A0144C4 +:1061F80005B50147014671BB131435000D80131610 +:10620800DA011307F07F418E93573A00E382EAE6FA +:10621800B20713D7C70093F5140093F7FA7F95BB1D +:10622800B684854A260A135A9A00E31A0AE8228590 +:10623800D92D13078501FD47E3D8E7E86115B316A3 +:10624800A400634A5715330457411307140063D455 +:10625800E74605149307000233D48600630AF70063 +:1062680093070004998FB397F600B337F0005D8C5D +:10627800E30004EA93777400814AE39207DC014A59 +:106288000D80B5BF93F514009307F07F014711B354 +:106298000E050D811316DA01498E93573A00C9BBD2 +:1062A80013871A009376E77F639106103367DA0144 +:1062B80063950A3AB3E617016304074085C2F69866 +:1062C800B3BED801D297338AD70193178A00C68EF6 +:1062D80063C30742B3E74801E38C07E293DE3E005D +:1062E8001316DA013366D60193573A00814A0DB77F +:1062F80033841E4133B68E003307FA40118F1316CC +:106308008700634D060E3366E4003A8A19FE81451C +:1063180081470147BDB9370A80FF7D1A937774001A +:10632800B38AEA4033FA4601E39107C20D80C1BD42 +:1063380042873366DA017DCA1306F7FF630706282A +:106348009305F07FE30EB7D09305800363DEC53273 +:106358001384F8FFB3B88800338A174113168A00EC +:10636800B70780006349063AB684BA8AE5B6930649 +:1063780007FE13060002B3D6D700630AC700130648 +:1063880000043307E640B397E700B3E8F800333476 +:106398001001558C69BEB70780FFFD17F58F13965E +:1063A800D701B38AEA408D83A5B59306F07F6302CF +:1063B800D72AF698B3BED801D297F69793D8180083 +:1063C8001394F70193F678003364140113DA170075 +:1063D800638E06349376F4001146BA8AE39CC6B6F7 +:1063E8001316DA010D80418E91831DB513173E00F7 +:1063F8001396D7010D83598E8D839DB9B38ED841DD +:10640800B3B8D801B38747417684338A1741B68435 +:1064180029BD631D07166308062C13163E00139743 +:10642800D7010D82B684598E8D8399B113163E001B +:1064380013543600B684BA8A3E8AD1B3F698B3BEEE +:10644800D801D297F6971397870063560722370724 +:1064580080FF7D1793D61800F98F1397F70193F5EE +:106468007600558F13D61700638905269376F700B3 +:1064780091456384B6263304B7003337E400330A02 +:10648800C700894A0D80A5BB13841E00E1B4E30C44 +:1064980007CC33075841E38E0AE81306800363509C +:1064A800E6081384F8FFB3B88800338A1741131736 +:1064B8008A00B707800063480718B684C28A59BCA7 +:1064C800B3881E41B307FA40B3BE1E01338AD741D1 +:1064D80093178A004684E3C607D493D83800131666 +:1064E800DA0133E6C80093573A00854A15B3D687D0 +:1064F8000147014679BC930607FE13060002B3D68E +:10650800D700630AC700130600043307E640B397B1 +:10651800E700B3E8F800B3371001D58FCDB43706DC +:106528008000B684336ACA00FD4663CCE60693064B +:106538000002998E3314DA00B396DE00B3DEEE0063 +:10654800B336D0003364D4013357EA00558C998FA1 +:1065580033848840B3B88800338A1741C28AF1BAB5 +:10656800E30007D433075841E3830ABC930680034A +:1065780063DBE60813978700370A8000C28A014464 +:10658800E34807A8138418003E8AE9B2E31506AE6B +:10659800931735008D831316DA015D8E93573A00F1 +:1065A800C1BC930607FE13060002B356DA00630A5D +:1065B800C700130600043307E6403317EA00B3EEBA +:1065C800EE003334D001558C61B7B38ED841B38710 +:1065D8004741B3B8D801338A174193178A007684A4 +:1065E800E3C007C493DE3E001316DA01B6843366AF +:1065F800D60193573A00854A21B9E30A06D03E8A64 +:10660800C68EB684E1B9B7068000336ADA00FD4663 +:1066180063CFE60613060002198EB316CA00339636 +:10662800CE00B3DEEE003336C000B3E6D6013357F2 +:10663800EA00D18EBA97B698B3B6D800338AF60076 +:106648004684C28AD1B2C28AB684138AF7FF7D54BF +:10665800BDB4BA87014601472DBAE30907D8B3E8A4 +:106668001701E39A08A02DB713163E0013543600FD +:10667800BA8A3E8A69B61396D70193D8380033662A +:1066880016018D83854A69B6B684328771BD1306B3 +:1066980007FE930600023356CA00630AD700930622 +:1066A80000043387E6403317EA00B3EEEE00B33652 +:1066B800D001D18E49B793070002998F01462DBCAE +:1066C800E38806A446843E8A0D8015BE33E6E500BD +:1066D800E30F06C23A8AAE8E11B10D837606598E43 +:1066E8009183894A35B681459307F07F37070800BB +:1066F8004DB0368729BFB70780FFFD17B377FA007B +:106708001396D70193DE3800A60713D7C700336660 +:10671800D6018547BDB8BA8AB68479BA1396D70127 +:1067280093DE3E003366D6018D83DDB40D801316EB +:10673800DA01418E9183BA8AE1BC13D74501B707C4 +:106748001000FD171347F7FF13D84601FD8DF58F8D +:10675800931657011378F87F99CA1307F07F0145FC +:106768006303E8008280D18F3335F0008280C98DC1 +:106778000545E5D5828093D74501B70610001387F4 +:10678800F6FF93F7F77F1306E03F6D8FFD81635B9C +:10679800F6001306D0416359F600370500807D15D1 +:1067A8002E95828001458280130630431D8E7D48D8 +:1067B800558F635DC80093063041B387F640335761 +:1067C800F7003305E040E5F13A8582809387D7BE2C +:1067D8003317F7003355C500498FE5B793D74501FF +:1067E800370610001307F6FF93F7F77F1308E03F0B +:1067F800AA866D8F0145FD816353F80091C182809F +:106808009305E0417D55E3CCF5FE930530439D8D1E +:106818007D45518F634AB5009387D7BE3317F7007C +:1068280033D5B600598D8280130530411D8D3355FF +:10683800A7008280011106CE22CC26CA4AC84EC6BD +:106848000DCD1357F541B344A700998CAA87268527 +:1068580013D4F7014D289307E041898F294793F70F +:10686800F77F634DA7022D47098F33D7E40032071E +:1068780055053183B394A40029A0014481470147F9 +:106888008144D2077E04D98FF240C18F62444249C5 +:10689800B2492685BE85D244056182805515339755 +:1068A800A400320731838144E9BF411122C406C6DE +:1068B8004AC24EC02A840DC5B9209307E041898F8A +:1068C800294793F7F77F6349A7022D47098F335765 +:1068D800E40032079306550131833314D40019A01C +:1068E80081470147B24022852244D207D98F1249F5 +:1068F8008249BE854101828055153317A4003207AD +:1069080031830144C5B7C1676376F50213370510B3 +:10691800133717000E07B73700203355E500938764 +:10692800478EAA9703C5070093060002998E338500 +:10693800A6408280B70700016370F502C14636871A +:10694800B73700203355E5009387478EAA9703C5CC +:1069580007003385A64082806147B737002033554A +:10696800E5009387478EAA9703C50700A14633859C +:10697800A640828026130020FC1100202C12002043 +:10698800F61200202C120020341200202C120020B5 +:10699800F6120020FC110020FC1100203412002007 +:1069A800F61200209612002096120020961200205F +:1069B8003412002000010202030303030404040448 +:1069C8000404040405050505050505050505050573 +:1069D8000505050506060606060606060606060653 +:1069E800060606060606060606060606060606063F +:1069F8000606060607070707070707070707070723 +:106A0800070707070707070707070707070707070E +:106A180007070707070707070707070707070707FE +:106A280007070707070707070707070707070707EE +:106A380007070707080808080808080808080808D2 +:106A480008080808080808080808080808080808BE +:106A580008080808080808080808080808080808AE +:106A6800080808080808080808080808080808089E +:106A7800080808080808080808080808080808088E +:106A8800080808080808080808080808080808087E +:106A9800080808080808080808080808080808086E +:106AA800080808080808080808080808080808085E +:106AB80008080808000000000000000000000100AD +:106AC80000000000000000000000020000000000BC +:106AD80000000000000003000000000000000000AB +:106AE8000000FF0042B89380420083A20200828225 +:106AF800138560FF97E0FFEFE780E0E042BE00000B +:106B0800000000000000000000000000000000007D +:106B180000000000502C00200000000000000000D1 +:106B2800000000000000000000000000000000005D +:106B3800000000000000000000000000000000004D +:106B4800000000000000000000000000000000003D +:106B58006F00001A00000000000000006F006019BC +:106B68000000000000000000000000006F00401856 +:106B78000000000000000000000000005D7106C079 +:106B880016C21AC41EC62AC82ECA32CC36CE3AD06D +:106B98003ED242D446D672D876DA7ADC7EDE7325C7 +:106BA8001034F3250030AAC0AEC2736651BEB2C419 +:106BB80073E540BE6341050273600430B7350020B9 +:106BC800AA9583A505B5E78005007370043073E5C1 +:106BD80040BEE35305FE0645964526467310153418 +:106BE80073900530731056BE824092422243B243DE +:106BF800D2456246F246025792572258B258425E30 +:106C0800D25E625FF25F732540BEE35005FA4245EB +:106C180061617300203000000000000000000000E7 +:106C2800242C0020242C0020242C0020242C00209C +:106C3800242C0020242C0020242C0020242C00208C +:106C4800242C0020242C0020242C0020242C00207C +:106C5800242C0020242C0020242C0020242C00206C +:106C6800242C0020242C0020242C0020242C00205C +:106C7800242C0020242C0020242C0020242C00204C +:106C8800242C0020242C0020242C0020242C00203C +:106C9800242C0020242C0020242C0020242C00202C +:106CA800242C0020242C0020242C0020242C00201C +:106CB800242C0020242C0020242C0020242C00200C +:106CC800242C0020242C0020242C0020242C0020FC +:106CD800242C0020242C0020242C0020242C0020EC +:106CE800242C0020242C0020242C0020242C0020DC +:106CF8000290029009810290A6390010903A001083 +:106D0800F03900109C3A001000000000000100005B +:0C6D18001000000000000000000000005F +:106D2400D3DEFFFFFE010000FF010000F092FFFF31 +:046D3400793512ABF0 +:0400000510000034B3 +:00000001FF diff --git a/package-lock.json b/package-lock.json index 99f1bba1f8..a725070d06 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { - "name": "rp2040js", - "version": "1.3.3", + "name": "rp2350js", + "version": "0.1.0", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "rp2040js", - "version": "1.3.3", + "name": "rp2350js", + "version": "0.1.0", "license": "MIT", "devDependencies": { "@types/minimist": "^1.2.2", diff --git a/package.json b/package.json index d8b9140a8b..a0a4cd1b0c 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,17 @@ { - "name": "rp2040js", - "version": "1.3.3", - "description": "Raspberry Pi Pico (RP2040) Emulator", + "name": "rp2350js", + "version": "0.1.0", + "description": "RP2350 (Raspberry Pi Pico 2) Hazard3 RISC-V emulator - a fork of wokwi/rp2040js", "repository": { "type": "git", - "url": "git+https://github.com/wokwi/rp2040js.git" + "url": "git+https://github.com/GhostRoboticsLab/rp2350js_emulator.git" }, "keywords": [ + "rp2350", "rp2040", - "raspberry pi pico", + "raspberry pi pico 2", + "hazard3", + "risc-v", "emulator" ], "files": [ @@ -47,7 +50,7 @@ }, "scripts": { "build": "rimraf dist && tsc && tsc -p tsconfig.cjs.json && node build-scripts/dist-package-json", - "prepublish": "npm run build", + "prepublishOnly": "npm run build", "prepare": "husky install", "format:check": "prettier --check **/*.{ts,js} !**/dist/** !**/node_modules/**", "lint": "eslint . --ext .ts", diff --git a/src/clock/clock.ts b/src/clock/clock.ts index b5969ee8b9..acafd36f03 100644 --- a/src/clock/clock.ts +++ b/src/clock/clock.ts @@ -9,4 +9,7 @@ export interface IClock { readonly nanos: number; createAlarm(callback: AlarmCallback): IAlarm; + + /** Advance the clock by the given number of nanoseconds (RP2350 cycle stepping). */ + tick(deltaNanos: number): void; } diff --git a/src/core.ts b/src/core.ts new file mode 100644 index 0000000000..de2ccd9f47 --- /dev/null +++ b/src/core.ts @@ -0,0 +1,4 @@ +export enum Core { + Core0, + Core1, +} diff --git a/src/gpio-pin.ts b/src/gpio-pin.ts index 76a2de9bb0..f552e8cacc 100644 --- a/src/gpio-pin.ts +++ b/src/gpio-pin.ts @@ -1,5 +1,15 @@ -import { WaitType } from './peripherals/pio.js'; -import { RP2040 } from './rp2040.js'; +/** + * The slice of chip behaviour a GPIO pin needs. Both RP2040 and RP2350 implement it, so one GPIOPin + * works on either chip without depending on the concrete chip type. The chip owns the + * function-select -> peripheral-output dispatch, because the two chips number functions differently + * (RP2350 adds FUNCTION_PIO2 and can re-base PIO pins via GPIOBASE). + */ +export interface IGPIOChipHost { + gpioRawOutputValue(index: number): boolean; + gpioRawOutputEnable(index: number): boolean; + gpioInputValueHasBeenSet(index: number): void; + updateIOInterrupt(): void; +} export enum GPIOPinState { Low, @@ -14,6 +24,7 @@ export const FUNCTION_PWM = 4; export const FUNCTION_SIO = 5; export const FUNCTION_PIO0 = 6; export const FUNCTION_PIO1 = 7; +export const FUNCTION_PIO2 = 8; // RP2350 only (third PIO block) export type GPIOPinListener = (state: GPIOPinState, oldState: GPIOPinState) => void; @@ -39,7 +50,10 @@ const IRQ_LEVEL_LOW = 1 << 0; export class GPIOPin { private rawInputValue = false; - private lastValue = this.value; + // A constant, not `this.value`: the chip now owns output dispatch (gpioRawOutputValue), and during + // the chip's gpio-array construction `this.gpio[index]` isn't populated yet, so computing the live + // value here would dereference undefined. First checkForUpdates() reconciles it. + private lastValue: GPIOPinState = GPIOPinState.Input; ctrl: number = 0x1f; padValue: number = 0b0110110; @@ -50,7 +64,7 @@ export class GPIOPin { private readonly listeners = new Set(); constructor( - readonly rp2040: RP2040, + readonly rp2040: IGPIOChipHost, readonly index: number, readonly name = index.toString(), ) {} @@ -107,48 +121,6 @@ export class GPIOPin { return (this.ctrl >> 28) & 0x3; } - get rawOutputEnable() { - const { index, rp2040, functionSelect } = this; - const bitmask = 1 << index; - switch (functionSelect) { - case FUNCTION_PWM: - return !!(rp2040.pwm.gpioDirection & bitmask); - - case FUNCTION_SIO: - return !!(rp2040.sio.gpioOutputEnable & bitmask); - - case FUNCTION_PIO0: - return !!(rp2040.pio[0].pinDirections & bitmask); - - case FUNCTION_PIO1: - return !!(rp2040.pio[1].pinDirections & bitmask); - - default: - return false; - } - } - - get rawOutputValue() { - const { index, rp2040, functionSelect } = this; - const bitmask = 1 << index; - switch (functionSelect) { - case FUNCTION_PWM: - return !!(rp2040.pwm.gpioValue & bitmask); - - case FUNCTION_SIO: - return !!(rp2040.sio.gpioValue & bitmask); - - case FUNCTION_PIO0: - return !!(rp2040.pio[0].pinValues & bitmask); - - case FUNCTION_PIO1: - return !!(rp2040.pio[1].pinValues & bitmask); - - default: - return false; - } - } - get inputValue() { return applyOverride(this.rawInputValue && this.inputEnable, this.inputOverride); } @@ -158,11 +130,11 @@ export class GPIOPin { } get outputEnable() { - return applyOverride(this.rawOutputEnable, this.outputEnableOverride); + return applyOverride(this.rp2040.gpioRawOutputEnable(this.index), this.outputEnableOverride); } get outputValue() { - return applyOverride(this.rawOutputValue, this.outputOverride); + return applyOverride(this.rp2040.gpioRawOutputValue(this.index), this.outputOverride); } /** @@ -174,9 +146,9 @@ export class GPIOPin { const inToPeri = this.inputValue ? 1 << 19 : 0; const inFromPad = this.rawInputValue ? 1 << 17 : 0; const oeToPad = this.outputEnable ? 1 << 13 : 0; - const oeFromPeri = this.rawOutputEnable ? 1 << 12 : 0; + const oeFromPeri = this.rp2040.gpioRawOutputEnable(this.index) ? 1 << 12 : 0; const outToPad = this.outputValue ? 1 << 9 : 0; - const outFromPeri = this.rawOutputValue ? 1 << 8 : 0; + const outFromPeri = this.rp2040.gpioRawOutputValue(this.index) ? 1 << 8 : 0; return ( irqToProc | irqFromPad | inToPeri | inFromPad | oeToPad | oeFromPeri | outToPad | outFromPeri ); @@ -213,21 +185,9 @@ export class GPIOPin { if (this.irqValue !== prevIrqValue) { this.rp2040.updateIOInterrupt(); } - if (this.functionSelect === FUNCTION_PWM) { - this.rp2040.pwm.gpioOnInput(this.index); - } - for (const pio of this.rp2040.pio) { - for (const machine of pio.machines) { - if ( - machine.enabled && - machine.waiting && - machine.waitType === WaitType.Pin && - machine.waitIndex === this.index - ) { - machine.checkWait(); - } - } - } + // The chip dispatches the input change to whichever peripheral owns the pin (PWM B-input, + // PIO pin-wait, ...), since the function-select map differs between RP2040 and RP2350. + this.rp2040.gpioInputValueHasBeenSet(this.index); } checkForUpdates() { diff --git a/src/irq_rp2350.ts b/src/irq_rp2350.ts new file mode 100644 index 0000000000..8956e9d3d8 --- /dev/null +++ b/src/irq_rp2350.ts @@ -0,0 +1,56 @@ +export enum IRQ { + TIMER0_IRQ_0 = 0, + TIMER0_IRQ_1 = 1, + TIMER0_IRQ_2 = 2, + TIMER0_IRQ_3 = 3, + TIMER1_IRQ_0 = 4, + TIMER1_IRQ_1 = 5, + TIMER1_IRQ_2 = 6, + TIMER1_IRQ_3 = 7, + PWM_IRQ_WRAP_0 = 8, + PWM_IRQ_WRAP_1 = 9, + DMA_IRQ_0 = 10, + DMA_IRQ_1 = 11, + DMA_IRQ_2 = 12, + DMA_IRQ_3 = 13, + USBCTRL_IRQ = 14, + PIO0_IRQ_0 = 15, + PIO0_IRQ_1 = 16, + PIO1_IRQ_0 = 17, + PIO1_IRQ_1 = 18, + PIO2_IRQ_0 = 19, + PIO2_IRQ_1 = 20, + IO_IRQ_BANK0 = 21, + IO_IRQ_BANK0_NS = 22, + IO_IRQ_QSPI = 23, + IO_IRQ_QSPI_NS = 24, + SIO_IRQ_FIFO = 25, + SIO_IRQ_BELL = 26, + SIO_IRQ_FIFO_NS = 27, + SIO_IRQ_BELL_NS = 28, + SIO_IRQ_MTIMECMP = 29, + CLOCKS_IRQ = 30, + SPI0_IRQ = 31, + SPI1_IRQ = 32, + UART0_IRQ = 33, + UART1_IRQ = 34, + ADC_IRQ_FIFO = 35, + I2C0_IRQ = 36, + I2C1_IRQ = 37, + OTP_IRQ = 38, + TRNG_IRQ = 39, + PROC0_IRQ_CTI = 40, + PROC1_IRQ_CTI = 41, + PLL_SYS_IRQ = 42, + PLL_USB_IRQ = 43, + POWMAN_IRQ_POW = 44, + POWMAN_IRQ_TIMER = 45, + SPAREIRQ_IRQ_0 = 46, + SPAREIRQ_IRQ_1 = 47, + SPAREIRQ_IRQ_2 = 48, + SPAREIRQ_IRQ_3 = 49, + SPAREIRQ_IRQ_4 = 40, + SPAREIRQ_IRQ_5 = 51 +} + +export const MAX_HARDWARE_IRQ = IRQ.SPAREIRQ_IRQ_5; diff --git a/src/peripherals/adc.ts b/src/peripherals/adc.ts index a6aa48726f..9efcbfc901 100644 --- a/src/peripherals/adc.ts +++ b/src/peripherals/adc.ts @@ -1,5 +1,5 @@ import { IRQ } from '../irq.js'; -import { RP2040 } from '../rp2040.js'; +import { IRPChip } from '../rpchip.js'; import { FIFO } from '../utils/fifo.js'; import { DREQChannel } from './dma.js'; import { BasePeripheral, Peripheral } from './peripheral.js'; @@ -96,7 +96,7 @@ export class RPADC extends BasePeripheral implements Peripheral { }; readonly fifo = new FIFO(4); - readonly dreq = DREQChannel.DREQ_ADC; + readonly dreq: number; // Registers cs = 0; @@ -151,8 +151,14 @@ export class RPADC extends BasePeripheral implements Peripheral { this.cs |= (channel & CS_AINSEL_SHIFT) << CS_AINSEL_SHIFT; } - constructor(rp2040: RP2040, name: string) { + constructor( + rp2040: IRPChip, + name: string, + readonly adc_interrupt: number = IRQ.ADC_FIFO, + adc_dreq: number = DREQChannel.DREQ_ADC, + ) { super(rp2040, name); + this.dreq = adc_dreq; this.sampleAlarm = this.rp2040.clock.createAlarm(() => this.completeADCRead(this.channelValues[this.currentChannel], false), ); @@ -164,7 +170,7 @@ export class RPADC extends BasePeripheral implements Peripheral { } checkInterrupts() { - this.rp2040.setInterrupt(IRQ.ADC_FIFO, !!this.intStatus); + this.rp2040.setInterrupt(this.adc_interrupt, !!this.intStatus); } startADCRead() { @@ -176,9 +182,9 @@ export class RPADC extends BasePeripheral implements Peripheral { if (this.fcs & FCS_DREQ_EN) { const thres = (this.fcs >> FCS_THRESH_SHIFT) & FCS_THRES_MASK; if (this.fifo.itemCount >= thres) { - this.rp2040.dma.setDREQ(this.dreq); + this.rp2040.dma_setDREQ(this.dreq); } else { - this.rp2040.dma.clearDREQ(this.dreq); + this.rp2040.dma_clearDREQ(this.dreq); } } } diff --git a/src/peripherals/bootram.ts b/src/peripherals/bootram.ts new file mode 100644 index 0000000000..ee4a23f38e --- /dev/null +++ b/src/peripherals/bootram.ts @@ -0,0 +1,44 @@ +import { BasePeripheral, Peripheral } from './peripheral.js'; + +const BOOTLOCK_ST = 0x808; +const BOOTLOCK0 = 0x80c; +const BOOTLOCK7 = 0x828; + +const WRITE_ONCE0 = 0x800; +const WRITE_ONCE1 = 0x804; + +export class RPBootRAM extends BasePeripheral implements Peripheral { + private bootram: number[] = Array(256).fill(0); + write_once = [0, 0]; + spinLock = 0; + + readUint32(offset: number) { + if (offset >= BOOTLOCK0 && offset <= BOOTLOCK7) { + const bitIndexMask = 1 << ((offset - BOOTLOCK0) / 4); + if (this.spinLock & bitIndexMask) { + return 0; + } else { + this.spinLock |= bitIndexMask; + return bitIndexMask; + } + } + if (offset == BOOTLOCK_ST) return this.spinLock; + if (offset >= WRITE_ONCE0 && offset <= WRITE_ONCE1) { + return this.write_once[(offset - WRITE_ONCE0) >>> 2]; + } + return this.bootram[offset >>> 2]; + } + + writeUint32(offset: number, value: number) { + if (offset >= BOOTLOCK0 && offset <= BOOTLOCK7) { + const bitIndexMask = ~(1 << ((offset - BOOTLOCK0) / 4)); + this.spinLock &= bitIndexMask; + return; + } + if (offset >= WRITE_ONCE0 && offset <= WRITE_ONCE1) { + this.write_once[(offset - WRITE_ONCE0) >>> 2] |= value; + return; + } + this.bootram[offset >>> 2] = value; + } +} diff --git a/src/peripherals/busctrl.ts b/src/peripherals/busctrl.ts index 0a3dea9e7b..ee84d2fe64 100644 --- a/src/peripherals/busctrl.ts +++ b/src/peripherals/busctrl.ts @@ -1,4 +1,4 @@ -import { RP2040 } from '../rp2040.js'; +import { IRPChip } from '../rpchip.js'; import { BasePeripheral, Peripheral } from './peripheral.js'; /** Bus priority acknowledge */ @@ -29,7 +29,7 @@ export class RPBUSCTRL extends BasePeripheral implements Peripheral { readonly perfCtr = [0, 0, 0, 0]; readonly perfSel = [0x1f, 0x1f, 0x1f, 0x1f]; - constructor(rp2040: RP2040, name: string) { + constructor(rp2040: IRPChip, name: string) { super(rp2040, name); } diff --git a/src/peripherals/clocks.ts b/src/peripherals/clocks.ts index deb879bced..72db6f0164 100644 --- a/src/peripherals/clocks.ts +++ b/src/peripherals/clocks.ts @@ -1,4 +1,4 @@ -import { RP2040 } from '../rp2040.js'; +import { IRPChip } from '../rpchip.js'; import { BasePeripheral, Peripheral } from './peripheral.js'; const CLK_GPOUT0_CTRL = 0x00; @@ -55,7 +55,7 @@ export class RPClocks extends BasePeripheral implements Peripheral { adcDiv = 0x100; rtcCtrl = 0; rtcDiv = 0x100; - constructor(rp2040: RP2040, name: string) { + constructor(rp2040: IRPChip, name: string) { super(rp2040, name); } diff --git a/src/peripherals/dma.ts b/src/peripherals/dma.ts index 904eb0b0a1..a2b18b30b0 100644 --- a/src/peripherals/dma.ts +++ b/src/peripherals/dma.ts @@ -1,5 +1,5 @@ import { IRQ } from '../irq.js'; -import { RP2040 } from '../rp2040.js'; +import { IRPChip } from '../rpchip.js'; import { BasePeripheral, Peripheral } from './peripheral.js'; export enum DREQChannel { @@ -135,7 +135,7 @@ export class RPDMAChannel { constructor( readonly dma: RPDMA, - readonly rp2040: RP2040, + readonly rp2040: IRPChip, readonly index: number, ) { this.transferAlarm = rp2040.clock.createAlarm(this.transfer); diff --git a/src/peripherals/dma_rp2350.ts b/src/peripherals/dma_rp2350.ts new file mode 100644 index 0000000000..7670f753ad --- /dev/null +++ b/src/peripherals/dma_rp2350.ts @@ -0,0 +1,578 @@ +import { IRPChip } from '../rpchip.js'; +import { BasePeripheral, Peripheral } from './peripheral.js'; + +export enum DREQChannel { + DREQ_PIO0_TX0, + DREQ_PIO0_TX1, + DREQ_PIO0_TX2, + DREQ_PIO0_TX3, + DREQ_PIO0_RX0, + DREQ_PIO0_RX1, + DREQ_PIO0_RX2, + DREQ_PIO0_RX3, + DREQ_PIO1_TX0, + DREQ_PIO1_TX1, + DREQ_PIO1_TX2, + DREQ_PIO1_TX3, + DREQ_PIO1_RX0, + DREQ_PIO1_RX1, + DREQ_PIO1_RX2, + DREQ_PIO1_RX3, + DREQ_PIO2_TX0, + DREQ_PIO2_TX1, + DREQ_PIO2_TX2, + DREQ_PIO2_TX3, + DREQ_PIO2_RX0, + DREQ_PIO2_RX1, + DREQ_PIO2_RX2, + DREQ_PIO2_RX3, + DREQ_SPI0_TX, + DREQ_SPI0_RX, + DREQ_SPI1_TX, + DREQ_SPI1_RX, + DREQ_UART0_TX, + DREQ_UART0_RX, + DREQ_UART1_TX, + DREQ_UART1_RX, + DREQ_PWM_WRAP0, + DREQ_PWM_WRAP1, + DREQ_PWM_WRAP2, + DREQ_PWM_WRAP3, + DREQ_PWM_WRAP4, + DREQ_PWM_WRAP5, + DREQ_PWM_WRAP6, + DREQ_PWM_WRAP7, + DREQ_PWM_WRAP8, + DREQ_PWM_WRAP9, + DREQ_PWM_WRAP10, + DREQ_PWM_WRAP11, + DREQ_I2C0_TX, + DREQ_I2C0_RX, + DREQ_I2C1_TX, + DREQ_I2C1_RX, + DREQ_ADC, + DREQ_XIP_STREAM, + DREQ_XIP_QMITX, + DREQ_XIP_QMIRX, + DREQ_HSTX, + DREQ_CORESIGHT, + DREQ_SHA256, + DREQ_MAX, +} + +enum TREQ { + Timer0 = 0x3b, + Timer1 = 0x3c, + Timer2 = 0x3d, + Timer3 = 0x3e, + Permanent = 0x3f, +} + +const CHANNEL_COUNT = 16; +const REGISTERS_SIZE_PER_CHANNEL = 0x40; +const DEBUG_REGISTER_START = 0x800; + +// Per-channel registers +const CHn_READ_ADDR = 0x000; // DMA Channel n Read Address pointer +const CHn_WRITE_ADDR = 0x004; // DMA Channel n Write Address pointer +const CHn_TRANS_COUNT = 0x008; // DMA Channel n Transfer Count +const CHn_CTRL_TRIG = 0x00c; // DMA Channel n Control and Status +const CHn_AL1_CTRL = 0x010; // Alias for channel n CTRL register +const CHn_AL1_READ_ADDR = 0x014; // Alias for channel n READ_ADDR register +const CHn_AL1_WRITE_ADDR = 0x018; // Alias for channel n WRITE_ADDR register +const CHn_AL1_TRANS_COUNT_TRIG = 0x01c; // Alias for channel n TRANS_COUNT register +const CHn_AL2_CTRL = 0x020; // Alias for channel n CTRL register +const CHn_AL2_TRANS_COUNT = 0x024; // Alias for channel n TRANS_COUNT register +const CHn_AL2_READ_ADDR = 0x028; // Alias for channel n READ_ADDR register +const CHn_AL2_WRITE_ADDR_TRIG = 0x02c; // Alias for channel n WRITE_ADDR register +const CHn_AL3_CTRL = 0x030; // Alias for channel n CTRL register +const CHn_AL3_WRITE_ADDR = 0x034; // Alias for channel n WRITE_ADDR register +const CHn_AL3_TRANS_COUNT = 0x038; // Alias for channel n TRANS_COUNT register +const CHn_AL3_READ_ADDR_TRIG = 0x03c; // Alias for channel n READ_ADDR register +const CHn_DBG_CTDREQ = 0x800; +const CHn_DBG_TCR = 0x804; + +// General DMA registers +const INTR = 0x400; // Interrupt Status (raw) +const INTE0 = 0x404; // Interrupt Enables for IRQ 0 +const INTF0 = 0x408; // Force Interrupts +const INTS0 = 0x40c; // Interrupt Status for IRQ 0 +const INTE1 = 0x414; // Interrupt Enables for IRQ 1 +const INTF1 = 0x418; // Force Interrupts for IRQ 1 +const INTS1 = 0x41c; // Interrupt Status (masked) for IRQ 1 +const INTE2 = 0x424; // Interrupt Enables for IRQ 2 +const INTF2 = 0x428; // Force Interrupts for IRQ 2 +const INTS2 = 0x42c; // Interrupt Status (masked) for IRQ 2 +const INTE3 = 0x434; // Interrupt Enables for IRQ 3 +const INTF3 = 0x438; // Force Interrupts for IRQ 3 +const INTS3 = 0x43c; // Interrupt Status (masked) for IRQ 3 +const TIMER0 = 0x440; // Pacing (X/Y) Fractional Timer +const TIMER1 = 0x444; // Pacing (X/Y) Fractional Timer +const TIMER2 = 0x448; // Pacing (X/Y) Fractional Timer +const TIMER3 = 0x44c; // Pacing (X/Y) Fractional Timer +const MULTI_CHAN_TRIGGER = 0x450; // Trigger one or more channels simultaneously +const SNIFF_CTRL = 0x454; // Sniffer Control +const SNIFF_DATA = 0x458; // Data accumulator for sniff hardware +const FIFO_LEVELS = 0x460; // Debug RAF, WAF, TDF levels +const CHAN_ABORT = 0x464; // Abort an in-progress transfer sequence on one or more channels +const N_CHANNELS = 0x468; + +// CHn_CTRL_TRIG bits +const AHB_ERROR = 1 << 31; +const READ_ERROR = 1 << 30; +const WRITE_ERROR = 1 << 29; +const BUSY = 1 << 26; +const SNIFF_EN = 1 << 25; +const BSWAP = 1 << 24; +const IRQ_QUIET = 1 << 23; +const TREQ_SEL_MASK = 0x3f; +const TREQ_SEL_SHIFT = 17; +const CHAIN_TO_MASK = 0xf; +const CHAIN_TO_SHIFT = 13; +const RING_SEL = 1 << 12; +const RING_SIZE_MASK = 0xf; +const RING_SIZE_SHIFT = 8; +const INCR_WRITE_REV = 1 << 7; //TODO +const INCR_WRITE = 1 << 6; +const INCR_READ_REV = 1 << 5; //TODO +const INCR_READ = 1 << 4; +const DATA_SIZE_MASK = 0x3; +const DATA_SIZE_SHIFT = 2; +const HIGH_PRIORITY = 1 << 1; +const EN = 1 << 0; +const CHn_CTRL_TRIG_WRITE_MASK = 0xffffff; +const CHn_CTRL_TRIG_WC_MASK = READ_ERROR | WRITE_ERROR; + +export class RPDMAChannel { + private ctrl = 0; + private readAddr = 0; + private writeAddr = 0; + private transCount = 0; + private dreqCounter = 0; + private transCountReload = 0; + private transMode = 0; + private treqValue = 0; + private dataSize = 1; + private chainTo = 0; + private ringMask = 0; + private transferFn: () => void = () => 0; + private transferAlarm; + + constructor( + readonly dma: RPDMA, + readonly rp2040: IRPChip, + readonly index: number, + ) { + this.transferAlarm = rp2040.clock.createAlarm(this.transfer); + this.reset(); + } + + start() { + if (!(this.ctrl & EN) || this.ctrl & BUSY) { + return; + } + this.ctrl |= BUSY; + this.transCount = this.transCountReload; + if (this.transCount) { + this.scheduleTransfer(); + } + } + + get treq() { + return this.treqValue; + } + + get active() { + return this.ctrl & EN && this.ctrl & BUSY; + } + + transfer8 = () => { + const { rp2040 } = this; + rp2040.writeUint8(this.writeAddr, rp2040.readUint8(this.readAddr)); + }; + + transfer16 = () => { + const { rp2040 } = this; + rp2040.writeUint16(this.writeAddr, rp2040.readUint16(this.readAddr)); + }; + + transferSwap16 = () => { + const { rp2040 } = this; + const input = rp2040.readUint16(this.readAddr); + rp2040.writeUint16(this.writeAddr, ((input & 0xff) << 8) | (input >> 8)); + }; + + transfer32 = () => { + const { rp2040 } = this; + rp2040.writeUint32(this.writeAddr, rp2040.readUint32(this.readAddr)); + }; + + transferSwap32 = () => { + const { rp2040 } = this; + const input = rp2040.readUint32(this.readAddr); + rp2040.writeUint32( + this.writeAddr, + ((input & 0x000000ff) << 24) | + ((input & 0x0000ff00) << 8) | + ((input & 0x00ff0000) >> 8) | + ((input >> 24) & 0xff) + ); + }; + + transfer = () => { + const { ctrl, dataSize, ringMask } = this; + this.transferFn(); + if (ctrl & INCR_READ) { + if (ringMask && !(ctrl & RING_SEL)) { + this.readAddr = (this.readAddr & ~ringMask) | ((this.readAddr + dataSize) & ringMask); + } else { + this.readAddr += dataSize; + } + } + if (ctrl & INCR_WRITE) { + if (ringMask && ctrl & RING_SEL) { + this.writeAddr = (this.writeAddr & ~ringMask) | ((this.writeAddr + dataSize) & ringMask); + } else { + this.writeAddr += dataSize; + } + } + if(this.transMode != 0xf) { + this.transCount--; + } + if (this.transCount > 0) { + this.scheduleTransfer(); + } else { + if (!(this.ctrl & IRQ_QUIET)) { + this.dma.intRaw |= 1 << this.index; + this.dma.checkInterrupts(); + } + if (this.chainTo !== this.index) { + this.dma.channels[this.chainTo]?.start(); + } + if (this.transMode == 1) { + this.transCount = this.transCountReload; + this.scheduleTransfer(); + } else { + this.ctrl &= ~BUSY; + } + } + }; + + scheduleTransfer() { + if (this.dma.dreq[this.treqValue] || this.treqValue === TREQ.Permanent) { + this.transferAlarm.schedule(0); + } else { + const delay = this.dma.getTimer(this.treqValue); + if (delay) { + this.transferAlarm.schedule(delay * 1000); + } + } + } + + abort() { + this.ctrl &= ~BUSY; + this.transferAlarm.cancel(); + } + + readUint32(offset: number) { + switch (offset) { + case CHn_READ_ADDR: + case CHn_AL1_READ_ADDR: + case CHn_AL2_READ_ADDR: + case CHn_AL3_READ_ADDR_TRIG: + return this.readAddr; + + case CHn_WRITE_ADDR: + case CHn_AL1_WRITE_ADDR: + case CHn_AL2_WRITE_ADDR_TRIG: + case CHn_AL3_WRITE_ADDR: + return this.writeAddr; + + case CHn_TRANS_COUNT: + case CHn_AL1_TRANS_COUNT_TRIG: + case CHn_AL2_TRANS_COUNT: + case CHn_AL3_TRANS_COUNT: + return this.transCount; + + case CHn_CTRL_TRIG: + case CHn_AL1_CTRL: + case CHn_AL2_CTRL: + case CHn_AL3_CTRL: + return this.ctrl; + + case CHn_DBG_CTDREQ: + return this.dreqCounter; + + case CHn_DBG_TCR: + return this.transCountReload; + } + + return 0; + } + + writeUint32(offset: number, value: number) { + switch (offset) { + case CHn_READ_ADDR: + case CHn_AL1_READ_ADDR: + case CHn_AL2_READ_ADDR: + case CHn_AL3_READ_ADDR_TRIG: + this.readAddr = value; + break; + + case CHn_WRITE_ADDR: + case CHn_AL1_WRITE_ADDR: + case CHn_AL2_WRITE_ADDR_TRIG: + case CHn_AL3_WRITE_ADDR: + this.writeAddr = value; + break; + + case CHn_TRANS_COUNT: + case CHn_AL1_TRANS_COUNT_TRIG: + case CHn_AL2_TRANS_COUNT: + case CHn_AL3_TRANS_COUNT: + this.transCountReload = value & 0x0fffffff; + this.transMode = value >>> 28; + break; + + case CHn_CTRL_TRIG: + case CHn_AL1_CTRL: + case CHn_AL2_CTRL: + case CHn_AL3_CTRL: { + this.ctrl = (this.ctrl & ~CHn_CTRL_TRIG_WRITE_MASK) | (value & CHn_CTRL_TRIG_WRITE_MASK); + this.ctrl &= ~(value & CHn_CTRL_TRIG_WC_MASK); // Handle write-clear (WC) bits + this.treqValue = (this.ctrl >> TREQ_SEL_SHIFT) & TREQ_SEL_MASK; + this.chainTo = (this.ctrl >> CHAIN_TO_SHIFT) & CHAIN_TO_MASK; + const ringSize = (this.ctrl >> RING_SIZE_SHIFT) & RING_SIZE_MASK; + this.ringMask = ringSize ? (1 << ringSize) - 1 : 0; + switch ((this.ctrl >> DATA_SIZE_SHIFT) & DATA_SIZE_MASK) { + case 1: + this.dataSize = 2; + this.transferFn = this.ctrl & BSWAP ? this.transferSwap16 : this.transfer16; + break; + case 2: + this.dataSize = 4; + this.transferFn = this.ctrl & BSWAP ? this.transferSwap32 : this.transfer32; + break; + case 0: + default: + this.transferFn = this.transfer8; + this.dataSize = 1; + } + if (this.ctrl & EN && this.ctrl & BUSY) { + this.scheduleTransfer(); + } + if (!(this.ctrl & EN)) { + this.transferAlarm.cancel(); + } + break; + } + + case CHn_DBG_CTDREQ: + this.dreqCounter = 0; + break; + } + + if ( + offset === CHn_AL3_READ_ADDR_TRIG || + offset === CHn_AL2_WRITE_ADDR_TRIG || + offset === CHn_AL1_TRANS_COUNT_TRIG || + offset === CHn_CTRL_TRIG + ) { + if (value) { + this.start(); + } else if (this.ctrl & IRQ_QUIET) { + // Null trigger interrupts + this.dma.intRaw |= 1 << this.index; + this.dma.checkInterrupts(); + } + } + } + + reset() { + this.writeUint32(CHn_CTRL_TRIG, this.index << CHAIN_TO_SHIFT); + } +} + +export class RPDMA extends BasePeripheral implements Peripheral { + readonly channels: Array = Array(CHANNEL_COUNT).fill(0).map((v,i) => new RPDMAChannel(this, this.rp2040, i)); + + intRaw = 0; + private intEnable = [0, 0, 0, 0]; + private intForce = [0, 0, 0, 0]; + private timer0 = 0; + private timer1 = 0; + private timer2 = 0; + private timer3 = 0; + + readonly dreq: boolean[] = Array(DREQChannel.DREQ_MAX); + + constructor(readonly rp2040: IRPChip, name: string, readonly dma_irq_base: number) { + super(rp2040, name); + } + + intStatus(intNum: number) { + return (this.intRaw & this.intEnable[intNum]) | this.intForce[intNum]; + } + + intNumFromOffset(offset: number) { + return ((offset - INTE0) / (INTE1 - INTE0)) >>> 0; + } + + readUint32(offset: number) { + if ((offset % DEBUG_REGISTER_START) < (CHANNEL_COUNT * REGISTERS_SIZE_PER_CHANNEL)) { + // this handles both the normal CHn registers (starting at 0x0) as well as the CHn_DBG registers (starting at DEBUG_REGISTER_START) + const channelIndex = ((offset % DEBUG_REGISTER_START) / REGISTERS_SIZE_PER_CHANNEL) >>> 0; + return this.channels[channelIndex].readUint32(offset & (DEBUG_REGISTER_START | (REGISTERS_SIZE_PER_CHANNEL - 1))); + } + switch (offset) { + case TIMER0: + return this.timer0; + case TIMER1: + return this.timer1; + case TIMER2: + return this.timer2; + case TIMER3: + return this.timer3; + case INTR: + return this.intRaw; + case INTE0: + case INTE1: + case INTE2: + case INTE3: + return this.intEnable[this.intNumFromOffset(offset)]; + case INTF0: + case INTF1: + case INTF2: + case INTF3: + return this.intForce[this.intNumFromOffset(offset)]; + case INTS0: + case INTS1: + case INTS2: + case INTS3: + return this.intStatus(this.intNumFromOffset(offset)); + case CHAN_ABORT: + return 0; + case N_CHANNELS: + return this.channels.length; + } + return super.readUint32(offset); + } + + writeUint32(offset: number, value: number) { + if ((offset % DEBUG_REGISTER_START) < (CHANNEL_COUNT * REGISTERS_SIZE_PER_CHANNEL)) { + // this handles both the normal CHn registers (starting at 0x0) as well as the CHn_DBG registers (starting at DEBUG_REGISTER_START) + const channelIndex = ((offset % DEBUG_REGISTER_START) / REGISTERS_SIZE_PER_CHANNEL) >>> 0; + this.channels[channelIndex].writeUint32(offset & (DEBUG_REGISTER_START | (REGISTERS_SIZE_PER_CHANNEL - 1)), value); + return; + } + switch (offset) { + case TIMER0: + this.timer0 = value; + return; + case TIMER1: + this.timer1 = value; + return; + case TIMER2: + this.timer2 = value; + return; + case TIMER3: + this.timer3 = value; + return; + case INTR: + case INTS0: + case INTS1: + case INTS2: + case INTS3: + this.intRaw &= ~this.rawWriteValue; + this.checkInterrupts(); + return; + case INTE0: + case INTE1: + case INTE2: + case INTE3: + this.intEnable[this.intNumFromOffset(offset)] = value & 0xffff; + this.checkInterrupts(); + return; + case INTF0: + case INTF1: + case INTF2: + case INTF3: + this.intForce[this.intNumFromOffset(offset)] = value & 0xffff; + this.checkInterrupts(); + return; + case MULTI_CHAN_TRIGGER: + for (const chan of this.channels) { + if (value & (1 << chan.index)) { + chan.start(); + } + } + return; + case CHAN_ABORT: + for (const chan of this.channels) { + if (value & (1 << chan.index)) { + chan.abort(); + } + } + return; + default: + super.writeUint32(offset, value); + } + } + + setDREQ(dreqChannel: DREQChannel) { + const { dreq } = this; + if (!dreq[dreqChannel]) { + dreq[dreqChannel] = true; + for (const channel of this.channels) { + if (channel.treq === dreqChannel && channel.active) { + channel.scheduleTransfer(); + } + } + } + } + + clearDREQ(dreqChannel: DREQChannel) { + this.dreq[dreqChannel] = false; + } + + /** + * Returns the number of microseconds for a cycle of the given DMA timer, or 0 if the timer is disabled. + */ + getTimer(treq: TREQ) { + let dividend = 0, + divisor = 1; + switch (treq) { + case TREQ.Permanent: + dividend = 1; + divisor = 1; + break; + case TREQ.Timer0: + dividend = this.timer0 >>> 16; + divisor = this.timer0 & 0xffff; + break; + case TREQ.Timer1: + dividend = this.timer1 >>> 16; + divisor = this.timer1 & 0xffff; + break; + case TREQ.Timer2: + dividend = this.timer2 >>> 16; + divisor = this.timer2 & 0xffff; + break; + case TREQ.Timer3: + dividend = this.timer3 >>> 36; + divisor = this.timer3 & 0xffff; + break; + } + if (divisor === 0) { + return 0; + } + return ((dividend / divisor) * 1e6) / this.rp2040.clkSys; + } + + checkInterrupts() { + this.rp2040.setInterrupt(this.dma_irq_base + 0, !!this.intStatus(0)); + this.rp2040.setInterrupt(this.dma_irq_base + 1, !!this.intStatus(1)); + this.rp2040.setInterrupt(this.dma_irq_base + 2, !!this.intStatus(2)); + this.rp2040.setInterrupt(this.dma_irq_base + 3, !!this.intStatus(3)); + } +} diff --git a/src/peripherals/i2c.ts b/src/peripherals/i2c.ts index 0389309acc..708fd1674a 100644 --- a/src/peripherals/i2c.ts +++ b/src/peripherals/i2c.ts @@ -1,4 +1,4 @@ -import { RP2040 } from '../rp2040.js'; +import { IRPChip } from '../rpchip.js'; import { FIFO } from '../utils/fifo.js'; import { BasePeripheral, Peripheral } from './peripheral.js'; @@ -194,7 +194,7 @@ export class RPI2C extends BasePeripheral implements Peripheral { } constructor( - rp2040: RP2040, + rp2040: IRPChip, name: string, readonly irq: number, ) { diff --git a/src/peripherals/io_rp2350.ts b/src/peripherals/io_rp2350.ts new file mode 100644 index 0000000000..88a1dc245d --- /dev/null +++ b/src/peripherals/io_rp2350.ts @@ -0,0 +1,103 @@ +import { IRPChip } from '../rpchip.js'; +import { BasePeripheral, Peripheral } from './peripheral.js'; + +const GPIO_CTRL_LAST = 0x17c; +const INTR0 = 0x230; +const PROC0_INTE0 = 0x248; +const PROC0_INTF0 = 0x260; +const PROC0_INTS0 = 0x278; +const PROC0_INTS5 = 0x280; + +export class RPIO extends BasePeripheral implements Peripheral { + constructor(rp2040: IRPChip, name: string) { + super(rp2040, name); + } + + getPinFromOffset(offset: number) { + const gpioIndex = offset >>> 3; + return { + gpio: this.rp2040.gpio[gpioIndex], + isCtrl: !!(offset & 0x4), + }; + } + + readUint32(offset: number) { + if (offset <= GPIO_CTRL_LAST) { + const { gpio, isCtrl } = this.getPinFromOffset(offset); + return isCtrl ? gpio.ctrl : gpio.status; + } + if (offset >= INTR0 && offset <= PROC0_INTS5) { + const startIndex = ((offset - INTR0) % 0x18) * 8; + const register = (offset % 0x18) * 0x18; + const { gpio } = this.rp2040; + let result = 0; + for (let index = 7; index >= 0; index--) { + const pin = gpio[index + startIndex]; + if (!pin) { + continue; + } + result <<= 4; + switch (register) { + case INTR0: + result |= pin.irqStatus; + break; + case PROC0_INTE0: + result |= pin.irqEnableMask; + break; + case PROC0_INTF0: + result |= pin.irqForceMask; + break; + case PROC0_INTS0: + result |= (pin.irqStatus & pin.irqEnableMask) | pin.irqForceMask; + break; + } + } + return result; + } + return super.readUint32(offset); + } + + writeUint32(offset: number, value: number) { + if (offset <= GPIO_CTRL_LAST) { + const { gpio, isCtrl } = this.getPinFromOffset(offset); + if (isCtrl) { + gpio.ctrl = value; + gpio.checkForUpdates(); + } + return; + } + if (offset >= INTR0 && offset <= PROC0_INTS5) { + const startIndex = ((offset - INTR0) % 0x18) * 8; + const register = (offset % 0x18) * 0x18; + const { gpio } = this.rp2040; + for (let index = 0; index < 8; index++) { + const pin = gpio[index + startIndex]; + if (!pin) { + continue; + } + const pinValue = (value >> (index * 4)) & 0xf; + const pinRawWriteValue = (this.rawWriteValue >> (index * 4)) & 0xf; + switch (register) { + case INTR0: + pin.updateIRQValue(pinRawWriteValue); + break; + case PROC0_INTE0: + if (pin.irqEnableMask !== pinValue) { + pin.irqEnableMask = pinValue; + this.rp2040.updateIOInterrupt(); + } + break; + case PROC0_INTF0: + if (pin.irqForceMask !== pinValue) { + pin.irqForceMask = pinValue; + this.rp2040.updateIOInterrupt(); + } + break; + } + } + return; + } + + super.writeUint32(offset, value); + } +} diff --git a/src/peripherals/pads_rp2350.ts b/src/peripherals/pads_rp2350.ts new file mode 100644 index 0000000000..dce5cea5eb --- /dev/null +++ b/src/peripherals/pads_rp2350.ts @@ -0,0 +1,63 @@ +import { IRPChip } from '../rpchip.js'; +import { BasePeripheral, Peripheral } from './peripheral.js'; + +const VOLTAGE_SELECT = 0; +const BANK0_FIRST = 0x4; +const BANK0_LAST = 0xc0; + +const QSPI_FIRST = 0x4; +const QSPI_LAST = 0x18; + +export type IIOBank = 'qspi' | 'bank0'; + +export class RPPADS extends BasePeripheral implements Peripheral { + voltageSelect = 0; + + private readonly firstPadRegister = this.bank === 'qspi' ? QSPI_FIRST : BANK0_FIRST; + private readonly lastPadRegister = this.bank === 'qspi' ? QSPI_LAST : BANK0_LAST; + + constructor(rp2040: IRPChip, name: string, readonly bank: IIOBank) { + super(rp2040, name); + } + + getPinFromOffset(offset: number) { + const gpioIndex = (offset - this.firstPadRegister) >>> 2; + if (this.bank === 'qspi') { + return this.rp2040.qspi[gpioIndex]; + } else { + return this.rp2040.gpio[gpioIndex]; + } + } + + readUint32(offset: number) { + if (offset >= this.firstPadRegister && offset <= this.lastPadRegister) { + const gpio = this.getPinFromOffset(offset); + return gpio.padValue; + } + switch (offset) { + case VOLTAGE_SELECT: + return this.voltageSelect; + } + return super.readUint32(offset); + } + + writeUint32(offset: number, value: number) { + if (offset >= this.firstPadRegister && offset <= this.lastPadRegister) { + const gpio = this.getPinFromOffset(offset); + const oldInputEnable = gpio.inputEnable; + gpio.padValue = value; + gpio.checkForUpdates(); + if (oldInputEnable !== gpio.inputEnable) { + gpio.refreshInput(); + } + return; + } + switch (offset) { + case VOLTAGE_SELECT: + this.voltageSelect = value & 1; + break; + default: + super.writeUint32(offset, value); + } + } +} diff --git a/src/peripherals/peripheral.ts b/src/peripherals/peripheral.ts index a443493f66..0a6aae12ad 100644 --- a/src/peripherals/peripheral.ts +++ b/src/peripherals/peripheral.ts @@ -1,4 +1,4 @@ -import { RP2040 } from '../rp2040.js'; +import { IRPChip } from '../rpchip.js'; const ATOMIC_NORMAL = 0; const ATOMIC_XOR = 1; @@ -29,7 +29,7 @@ export class BasePeripheral implements Peripheral { protected rawWriteValue = 0; constructor( - protected rp2040: RP2040, + protected rp2040: IRPChip, readonly name: string, ) {} diff --git a/src/peripherals/pio.ts b/src/peripherals/pio.ts index 8d9ef35908..b51c569248 100644 --- a/src/peripherals/pio.ts +++ b/src/peripherals/pio.ts @@ -1,4 +1,4 @@ -import { RP2040 } from '../rp2040.js'; +import { IRPChip } from '../rpchip.js'; import { FIFO } from '../utils/fifo.js'; import { DREQChannel } from './dma.js'; import { BasePeripheral, Peripheral } from './peripheral.js'; @@ -25,6 +25,10 @@ const IRQ1_INTE = 0x138; // Interrupt Enable for irq1 const IRQ1_INTF = 0x13c; // Interrupt Force for irq1 const IRQ1_INTS = 0x140; // Interrupt status after masking & forcing for irq1 +// RP2350-only: selects whether this PIO's internal 32-pin window starts at chip GPIO0 or GPIO16 +// (the GPIOBASE bit is bit 4, so the stored offset is 0 or 16). Lets one PIO drive GPIO16..47. +const RP2350_GPIOBASE = 0x168; + // State-machine specific registers const TXF0 = 0x010; const TXF1 = 0x014; @@ -153,11 +157,15 @@ export class StateMachine { waitPolarity = false; waitDelay = -1; - readonly dreqRx = this.pio.dreqRx[this.index]; - readonly dreqTx = this.pio.dreqTx[this.index]; + // RP2350 numbers PIO DREQs as contiguous per-block bases (dreq*_base + state-machine index); + // RP2040 uses fixed per-block arrays. Prefer the base when the chip supplied one. + readonly dreqRx = + this.pio.dreqRx_base !== undefined ? this.pio.dreqRx_base + this.index : this.pio.dreqRx[this.index]; + readonly dreqTx = + this.pio.dreqTx_base !== undefined ? this.pio.dreqTx_base + this.index : this.pio.dreqTx[this.index]; constructor( - readonly rp2040: RP2040, + readonly rp2040: IRPChip, readonly pio: RPPIO, readonly index: number, ) { @@ -167,17 +175,17 @@ export class StateMachine { private updateDMATx() { if (this.txFIFO.full) { - this.rp2040.dma.clearDREQ(this.dreqTx); + this.rp2040.dma_clearDREQ(this.dreqTx); } else { - this.rp2040.dma.setDREQ(this.dreqTx); + this.rp2040.dma_setDREQ(this.dreqTx); } } private updateDMARx() { if (this.rxFIFO.empty) { - this.rp2040.dma.clearDREQ(this.dreqRx); + this.rp2040.dma_clearDREQ(this.dreqRx); } else { - this.rp2040.dma.setDREQ(this.dreqRx); + this.rp2040.dma_setDREQ(this.dreqRx); } } @@ -268,7 +276,8 @@ export class StateMachine { } get inPins() { - const { gpioValues } = this.rp2040; + // Read the 32-pin window this PIO block sees (RP2350 can re-base it via GPIOBASE; 0 on RP2040). + const gpioValues = this.rp2040.gpioValues(this.pio.gpiobase); const { inBase } = this; return inBase ? (gpioValues << (32 - inBase)) | (gpioValues >>> inBase) : gpioValues; } @@ -925,6 +934,11 @@ export class RPPIO extends BasePeripheral implements Peripheral { readonly instructions = new Uint32Array(32); readonly dreqRx = this.index ? dreqRx1 : dreqRx0; readonly dreqTx = this.index ? dreqTx1 : dreqTx0; + // GPIO base offset for the PIO pin window (RP2350 GPIOBASE register; always 0 on RP2040). + gpiobase = 0; + // RP2350 has 48 GPIOs, a movable PIO pin window (GPIOBASE) and a 32-bit pad mask; RP2040 has none + // of these. Gate the RP2350-only behaviour on the chip identifier rather than the concrete class. + readonly isRp2040 = this.rp2040.identifier === 'rp2040'; readonly machines = [ new StateMachine(this.rp2040, this, 0), new StateMachine(this.rp2040, this, 1), @@ -950,14 +964,31 @@ export class RPPIO extends BasePeripheral implements Peripheral { irq1IntForce = 0; constructor( - rp2040: RP2040, + rp2040: IRPChip, name: string, readonly firstIrq: number, readonly index: number, + // RP2350 supplies per-block DREQ bases (RP2040 leaves these undefined and uses dreqRx/dreqTx). + readonly dreqRx_base?: number, + readonly dreqTx_base?: number, ) { super(rp2040, name); } + // Read a chip GPIO's PIO-driven output / direction. RP2350 can re-base the PIO pin window via the + // GPIOBASE register; that offset is modelled by `gpiobase` (0 on RP2040). + getPinValue(chip_gpio_index: number): boolean { + const index = chip_gpio_index - this.gpiobase; + if (index < 0 || index > 31) return false; + return !!(this.pinValues & (1 << index)); + } + + getPinOutputEnabled(chip_gpio_index: number): boolean { + const index = chip_gpio_index - this.gpiobase; + if (index < 0 || index > 31) return false; + return !!(this.pinDirections & (1 << index)); + } + get intRaw() { return ( ((this.irq & 0xf) << 8) | @@ -1057,6 +1088,11 @@ export class RPPIO extends BasePeripheral implements Peripheral { return this.irq1IntForce; case IRQ1_INTS: return this.irq1IntStatus; + case RP2350_GPIOBASE: + if (!this.isRp2040) { + return this.gpiobase; + } + break; } return super.readUint32(offset); } @@ -1147,6 +1183,13 @@ export class RPPIO extends BasePeripheral implements Peripheral { this.irq1IntForce = value & 0xfff; this.checkInterrupts(); break; + case RP2350_GPIOBASE: + if (!this.isRp2040) { + this.gpiobase = value & 16; + } else { + super.writeUint32(offset, value); + } + break; default: super.writeUint32(offset, value); } @@ -1155,14 +1198,18 @@ export class RPPIO extends BasePeripheral implements Peripheral { pinValuesChanged(value: number, firstPin: number, count: number) { // TODO: wrapping after pin 31 const mask = count > 31 ? 0xffffffff : ((1 << count) - 1) << firstPin; - const newValue = ((this.pinValues & ~mask) | ((value << firstPin) & mask)) & 0x3fffffff; + const newValue = + ((this.pinValues & ~mask) | ((value << firstPin) & mask)) & + (this.isRp2040 ? 0x3fffffff : 0xffffffff); this.pinValues = newValue; } pinDirectionsChanged(value: number, firstPin: number, count: number) { // TODO: wrapping after pin 31 const mask = count > 31 ? 0xffffffff : ((1 << count) - 1) << firstPin; - const newValue = ((this.pinDirections & ~mask) | ((value << firstPin) & mask)) & 0x3fffffff; + const newValue = + ((this.pinDirections & ~mask) | ((value << firstPin) & mask)) & + (this.isRp2040 ? 0x3fffffff : 0xffffffff); this.pinDirections = newValue; } @@ -1186,11 +1233,17 @@ export class RPPIO extends BasePeripheral implements Peripheral { this.oldPinDirections = this.pinDirections; this.oldPinValues = this.pinValues; - // Notify GPIO about the changed pins + // Notify GPIO about the changed pins. `changedPins` lives in the PIO's internal 32-pin space; + // RP2350 re-bases that window onto chip GPIOs via GPIOBASE (`gpiobase`, always 0 on RP2040). + // (The old `1 << gpioIndex` over gpio.length aliased pins 32..47 back onto 0..15 — JS shifts + // are mod-32 — and never applied the offset, so GPIO16..47 were never notified.) const { gpio } = this.rp2040; - for (let gpioIndex = 0; gpioIndex < gpio.length; gpioIndex++) { - if (changedPins & (1 << gpioIndex)) { - gpio[gpioIndex].checkForUpdates(); + for (let pinIndex = 0; pinIndex < 32; pinIndex++) { + if (changedPins & (1 << pinIndex)) { + const gpioIndex = pinIndex + this.gpiobase; + if (gpioIndex < gpio.length) { + gpio[gpioIndex].checkForUpdates(); + } } } } diff --git a/src/peripherals/pll_rp2350.ts b/src/peripherals/pll_rp2350.ts new file mode 100644 index 0000000000..6be12449fc --- /dev/null +++ b/src/peripherals/pll_rp2350.ts @@ -0,0 +1,36 @@ +import { BasePeripheral, Peripheral } from './peripheral.js'; + +const FREF = 12000000; + +export class RP2350PLL extends BasePeripheral implements Peripheral { + reg = [1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, (1<<12) + (1<<16), 0]; + foutpostdiv = 1; + + readUint32(offset: number) { + if(offset === 0x0) return this.reg[0] | (1 << 31); // PLL is always locked + if(offset <= 0xc) return this.reg[offset]; + return super.readUint32(offset); + } + + writeUint32(offset: number, value: number) { + let handled = false; + switch(offset) { + case 0x00: + case 0x08: + case 0x0c: + this.reg[offset] = value; + handled = true; + break; + } + const refdiv = this.reg[0x0] & 0x1f; + const fbdiv = this.reg[0x8]; + const postdiv2 = (this.reg[0xc] >> 12) & 7; + const postdiv1 = (this.reg[0xc] >> 16) & 7; + this.foutpostdiv = (FREF / refdiv) * fbdiv / (postdiv1 * postdiv2); + if(handled) { + this.rp2040.logger.info(this.name, `PLL write ${value} to 0x${offset.toString(16)}, foutpostdiv = ${this.foutpostdiv}`); + return; + } + return super.writeUint32(offset, value); + } +} diff --git a/src/peripherals/powman.ts b/src/peripherals/powman.ts new file mode 100644 index 0000000000..b0547d87d0 --- /dev/null +++ b/src/peripherals/powman.ts @@ -0,0 +1,12 @@ +import { BasePeripheral, Peripheral } from './peripheral.js'; + +export class RPPOWMAN extends BasePeripheral implements Peripheral { + readUint32(offset: number) { + if(offset === 0xc) return 0; + return super.readUint32(offset); + } + + writeUint32(offset: number, value: number) { + super.writeUint32(offset, value); + } +} diff --git a/src/peripherals/ppb.ts b/src/peripherals/ppb.ts index 917252e1e1..4bdf8a6e63 100644 --- a/src/peripherals/ppb.ts +++ b/src/peripherals/ppb.ts @@ -56,8 +56,8 @@ export class RPPPB extends BasePeripheral implements Peripheral { readonly systickAlarm = new Timer32PeriodicAlarm(this.systickTimer, () => { this.systickCountFlag = true; if (this.systickIntEnable) { - this.rp2040.core.pendingSystick = true; - this.rp2040.core.interruptsUpdated = true; + (this.rp2040 as RP2040).core.pendingSystick = true; + (this.rp2040 as RP2040).core.interruptsUpdated = true; } this.systickTimer.set(this.systickReload); }); @@ -79,7 +79,7 @@ export class RPPPB extends BasePeripheral implements Peripheral { readUint32(offset: number) { const { rp2040 } = this; - const { core } = rp2040; + const core = (rp2040 as RP2040).core; switch (offset) { case CPUID: @@ -159,7 +159,7 @@ export class RPPPB extends BasePeripheral implements Peripheral { writeUint32(offset: number, value: number) { const { rp2040 } = this; - const { core } = rp2040; + const core = (rp2040 as RP2040).core; const hardwareInterruptMask = (1 << MAX_HARDWARE_IRQ) - 1; diff --git a/src/peripherals/pwm.spec.ts b/src/peripherals/pwm.spec.ts new file mode 100644 index 0000000000..95546938f3 --- /dev/null +++ b/src/peripherals/pwm.spec.ts @@ -0,0 +1,25 @@ +import { afterEach, beforeEach, describe, expect, it } from 'vitest'; +import { createTestDriver } from '../../test-utils/create-test-driver.js'; +import { ICortexTestDriver } from '../../test-utils/test-driver.js'; +import { RP2040TestDriver } from '../../test-utils/test-driver-rp2040.js'; + +describe('PWM', () => { + let cpu: ICortexTestDriver; + + beforeEach(async () => { + cpu = await createTestDriver(); + }); + + afterEach(async () => { + await cpu.tearDown(); + }); + + it('should not hang', async () => { + await cpu.writeUint32(0x4005008c,0); + await cpu.writeUint32(0x40050094,0); + await cpu.writeUint32(0x40050098,0); + await cpu.writeUint32(0x4005009c,9); + await cpu.writeUint32(0x40050090,16); + for(let i=0; i < 1000; i++) { cpu.singleStep(); } + }); +}); diff --git a/src/peripherals/pwm.ts b/src/peripherals/pwm.ts index 7d50398ce9..76a48ab2dc 100644 --- a/src/peripherals/pwm.ts +++ b/src/peripherals/pwm.ts @@ -2,6 +2,7 @@ import { IClock } from '../clock/clock.js'; import { IRQ } from '../irq.js'; import { Timer32, Timer32PeriodicAlarm, TimerMode } from '../utils/timer32.js'; import { DREQChannel } from './dma.js'; +import { IRPChip } from '../rpchip.js'; import { BasePeripheral, Peripheral } from './peripheral.js'; /** Control and status register */ @@ -283,6 +284,17 @@ export class RPPWM extends BasePeripheral implements Peripheral { gpioValue = 0; gpioDirection = 0; + // pwm_wrap_irq: the PWM wrap IRQ (RP2040 PWM_WRAP vs RP2350 PWM_IRQ_WRAP_0). + // pwm_dreq_base: first PWM-wrap DREQ; slice i raises pwm_dreq_base + i. + constructor( + rp2040: IRPChip, + name: string, + readonly pwm_wrap_irq: number = IRQ.PWM_WRAP, + readonly pwm_dreq_base: number = DREQChannel.DREQ_PWM_WRAP0, + ) { + super(rp2040, name); + } + get intStatus() { return (this.intRaw & this.intEnable) | this.intForce; } @@ -359,11 +371,11 @@ export class RPPWM extends BasePeripheral implements Peripheral { this.checkInterrupts(); // We also set the DMA Request (DREQ) for the channel - this.rp2040.dma.setDREQ(DREQChannel.DREQ_PWM_WRAP0 + index); + this.rp2040.dma_setDREQ(this.pwm_dreq_base + index); } checkInterrupts() { - this.rp2040.setInterrupt(IRQ.PWM_WRAP, !!this.intStatus); + this.rp2040.setInterrupt(this.pwm_wrap_irq, !!this.intStatus); } gpioSet(index: number, value: boolean) { diff --git a/src/peripherals/reset.ts b/src/peripherals/reset.ts index 1355d47ebd..27cd15d8b0 100644 --- a/src/peripherals/reset.ts +++ b/src/peripherals/reset.ts @@ -1,3 +1,4 @@ +import { IRPChip } from '../rpchip.js'; import { BasePeripheral, Peripheral } from './peripheral.js'; const RESET = 0x0; //Reset control. @@ -7,7 +8,15 @@ const RESET_DONE = 0x8; //Reset Done export class RPReset extends BasePeripheral implements Peripheral { private reset: number = 0; private wdsel: number = 0; - private reset_done: number = 0x1ffffff; + private reset_done: number; + + // reset_mask is the set of valid reset blocks. RP2040 has 25 (0x1ffffff); RP2350 has 29 + // (0x1fffffff). The bootrom de-asserts a block then polls RESET_DONE for it, so a too-narrow + // mask leaves the firmware spinning forever on a high-numbered block (e.g. RP2350 IO_BANK0). + constructor(rp2040: IRPChip, name: string, private readonly reset_mask: number = 0x1ffffff) { + super(rp2040, name); + this.reset_done = reset_mask; + } readUint32(offset: number) { switch (offset) { @@ -24,10 +33,10 @@ export class RPReset extends BasePeripheral implements Peripheral { writeUint32(offset: number, value: number) { switch (offset) { case RESET: - this.reset = value & 0x1ffffff; + this.reset = value & this.reset_mask; break; case WDSEL: - this.wdsel = value & 0x1ffffff; + this.wdsel = value & this.reset_mask; break; default: super.writeUint32(offset, value); diff --git a/src/peripherals/spi.ts b/src/peripherals/spi.ts index a8e01c0cfe..bb49ac49a4 100644 --- a/src/peripherals/spi.ts +++ b/src/peripherals/spi.ts @@ -1,4 +1,4 @@ -import { RP2040 } from '../rp2040.js'; +import { IRPChip } from '../rpchip.js'; import { FIFO } from '../utils/fifo.js'; import { DREQChannel } from './dma.js'; import { BasePeripheral, Peripheral } from './peripheral.js'; @@ -60,8 +60,9 @@ const SSPRTINTR = 1 << 1; const SSPRORINTR = 1 << 0; export interface ISPIDMAChannels { - rx: DREQChannel; - tx: DREQChannel; + // Numeric DREQ ids: the RP2040 and RP2350 DREQChannel enums differ, so accept either chip's value. + rx: number; + tx: number; } export class RPSPI extends BasePeripheral implements Peripheral { @@ -113,22 +114,22 @@ export class RPSPI extends BasePeripheral implements Peripheral { private updateDMATx() { if (this.txFIFO.full) { - this.rp2040.dma.clearDREQ(this.dreq.tx); + this.rp2040.dma_clearDREQ(this.dreq.tx); } else { - this.rp2040.dma.setDREQ(this.dreq.tx); + this.rp2040.dma_setDREQ(this.dreq.tx); } } private updateDMARx() { if (this.rxFIFO.empty) { - this.rp2040.dma.clearDREQ(this.dreq.rx); + this.rp2040.dma_clearDREQ(this.dreq.rx); } else { - this.rp2040.dma.setDREQ(this.dreq.rx); + this.rp2040.dma_setDREQ(this.dreq.rx); } } constructor( - rp2040: RP2040, + rp2040: IRPChip, name: string, readonly irq: number, readonly dreq: ISPIDMAChannels, diff --git a/src/peripherals/syscfg.ts b/src/peripherals/syscfg.ts index 62e9947a9c..e342d52b46 100644 --- a/src/peripherals/syscfg.ts +++ b/src/peripherals/syscfg.ts @@ -1,5 +1,8 @@ +import { RP2040 } from '../rp2040.js'; import { BasePeripheral, Peripheral } from './peripheral.js'; +// RP2040-only peripheral (RP2350 uses syscfg_rp2350). It reaches into the ARM core's NMI mask, +// which only exists on RP2040, so the chip reference is narrowed here. const PROC0_NMI_MASK = 0; // eslint-disable-next-line @typescript-eslint/no-unused-vars const PROC1_NMI_MASK = 4; @@ -8,7 +11,7 @@ export class RP2040SysCfg extends BasePeripheral implements Peripheral { readUint32(offset: number) { switch (offset) { case PROC0_NMI_MASK: - return this.rp2040.core.interruptNMIMask; + return (this.rp2040 as RP2040).core.interruptNMIMask; } return super.readUint32(offset); } @@ -16,7 +19,7 @@ export class RP2040SysCfg extends BasePeripheral implements Peripheral { writeUint32(offset: number, value: number) { switch (offset) { case PROC0_NMI_MASK: - this.rp2040.core.interruptNMIMask = value; + (this.rp2040 as RP2040).core.interruptNMIMask = value; break; default: diff --git a/src/peripherals/syscfg_rp2350.ts b/src/peripherals/syscfg_rp2350.ts new file mode 100644 index 0000000000..4e959c0709 --- /dev/null +++ b/src/peripherals/syscfg_rp2350.ts @@ -0,0 +1,13 @@ +import { RP2350 } from '../rp2350.js'; +import { BasePeripheral, Peripheral } from './peripheral.js'; + +export class RP2350SysCfg extends BasePeripheral implements Peripheral { + readUint32(offset: number) { + if(offset === 0) return 0; + return super.readUint32(offset); + } + + writeUint32(offset: number, value: number) { + super.writeUint32(offset, value); + } +} diff --git a/src/peripherals/sysinfo_rp2350.ts b/src/peripherals/sysinfo_rp2350.ts new file mode 100644 index 0000000000..3c54e83863 --- /dev/null +++ b/src/peripherals/sysinfo_rp2350.ts @@ -0,0 +1,26 @@ +import { BasePeripheral, Peripheral } from './peripheral.js'; + +const CHIP_ID = 0; +const PACKAGE_SEL = 0x4; +const PLATFORM = 0x8; +const GITREF_RP2350 = 0x14; + +export class RP2350SysInfo extends BasePeripheral implements Peripheral { + readUint32(offset: number) { + // All the values here were verified against the silicon + switch (offset) { + case CHIP_ID: + return 0x20004927; + + case PACKAGE_SEL: + return 0x00000000; // QFN80 + + case PLATFORM: + return 0x00000000; + + case GITREF_RP2350: + return 0x5a09d5a2; + } + return super.readUint32(offset); + } +} diff --git a/src/peripherals/timer.ts b/src/peripherals/timer.ts index ea68bd7a74..f1b1d9619e 100644 --- a/src/peripherals/timer.ts +++ b/src/peripherals/timer.ts @@ -1,6 +1,6 @@ import { IAlarm, IClock } from '../clock/clock.js'; import { IRQ } from '../irq.js'; -import { RP2040 } from '../rp2040.js'; +import { IRPChip } from '../rpchip.js'; import { BasePeripheral, Peripheral } from './peripheral.js'; const TIMEHR = 0x08; @@ -13,10 +13,8 @@ const ALARM2 = 0x18; const ALARM3 = 0x1c; const ARMED = 0x20; const PAUSE = 0x30; -const INTR = 0x34; -const INTE = 0x38; -const INTF = 0x3c; -const INTS = 0x40; +// INTR/INTE/INTF/INTS live at different offsets on RP2350 (shifted up by 8 vs RP2040), so they are +// resolved per-chip in the constructor rather than as fixed module constants. const ALARM_0 = 1 << 0; const ALARM_1 = 1 << 1; @@ -43,10 +41,24 @@ export class RPTimer extends BasePeripheral implements Peripheral { private intEnable = 0; private intForce = 0; private paused = false; - - constructor(rp2040: RP2040, name: string) { + // Interrupt-register offsets (resolved per-chip in the constructor). + private INTR = 0x34; + private INTE = 0x38; + private INTF = 0x3c; + private INTS = 0x40; + + // timer_irq_base: the first of this timer's 4 consecutive alarm IRQs (RP2040 TIMER_0..3 vs the + // RP2350 TIMER0_IRQ_0..3 / TIMER1_IRQ_0..3 blocks). Alarm i raises timer_irq_base + i. + constructor(rp2040: IRPChip, name: string, readonly timer_irq_base: number = IRQ.TIMER_0) { super(rp2040, name); this.clock = rp2040.clock; + if (rp2040.identifier === 'rp2350') { + // RP2350 inserts extra registers, shifting the interrupt block up by 8 bytes. + this.INTR = 0x3c; + this.INTE = 0x40; + this.INTF = 0x44; + this.INTS = 0x48; + } this.alarms = [ new RPTimerAlarm( ALARM_0, @@ -100,13 +112,13 @@ export class RPTimer extends BasePeripheral implements Peripheral { case PAUSE: return this.paused ? 1 : 0; - case INTR: + case this.INTR: return this.intRaw; - case INTE: + case this.INTE: return this.intEnable; - case INTF: + case this.INTF: return this.intForce; - case INTS: + case this.INTS: return this.intStatus; case ARMED: @@ -148,15 +160,15 @@ export class RPTimer extends BasePeripheral implements Peripheral { } // TODO actually pause the timer break; - case INTR: + case this.INTR: this.intRaw &= ~this.rawWriteValue; this.checkInterrupts(); break; - case INTE: + case this.INTE: this.intEnable = value & 0xf; this.checkInterrupts(); break; - case INTF: + case this.INTF: this.intForce = value & 0xf; this.checkInterrupts(); break; @@ -175,7 +187,7 @@ export class RPTimer extends BasePeripheral implements Peripheral { private checkInterrupts() { const { intStatus } = this; for (let i = 0; i < this.alarms.length; i++) { - this.rp2040.setInterrupt(timerInterrupts[i], !!(intStatus & (1 << i))); + this.rp2040.setInterrupt(this.timer_irq_base + i, !!(intStatus & (1 << i))); } } diff --git a/src/peripherals/uart.ts b/src/peripherals/uart.ts index b5f55b73fd..c842d0220d 100644 --- a/src/peripherals/uart.ts +++ b/src/peripherals/uart.ts @@ -1,4 +1,4 @@ -import { RP2040 } from '../rp2040.js'; +import { IRPChip } from '../rpchip.js'; import { FIFO } from '../utils/fifo.js'; import { DREQChannel } from './dma.js'; import { BasePeripheral, Peripheral } from './peripheral.js'; @@ -40,8 +40,9 @@ const UARTTXINTR = 1 << 5; const UARTRXINTR = 1 << 4; export interface IUARTDMAChannels { - rx: DREQChannel; - tx: DREQChannel; + // Numeric DREQ ids: the RP2040 and RP2350 DREQChannel enums differ, so accept either chip's value. + rx: number; + tx: number; } export class RPUART extends BasePeripheral implements Peripheral { @@ -57,7 +58,7 @@ export class RPUART extends BasePeripheral implements Peripheral { public onBaudRateChange?: (baudRate: number) => void; constructor( - rp2040: RP2040, + rp2040: IRPChip, name: string, readonly irq: number, readonly dreq: IUARTDMAChannels, @@ -193,9 +194,9 @@ export class RPUART extends BasePeripheral implements Peripheral { case UARTCR: this.ctrlRegister = value; if (this.enabled) { - this.rp2040.dma.setDREQ(this.dreq.tx); + this.rp2040.dma_setDREQ(this.dreq.tx); } else { - this.rp2040.dma.clearDREQ(this.dreq.tx); + this.rp2040.dma_clearDREQ(this.dreq.tx); } break; diff --git a/src/peripherals/usb.ts b/src/peripherals/usb.ts index f9efbd74df..9f88ae05d8 100644 --- a/src/peripherals/usb.ts +++ b/src/peripherals/usb.ts @@ -1,6 +1,6 @@ import { IAlarm } from '../clock/clock.js'; import { IRQ } from '../irq.js'; -import { RP2040 } from '../rp2040.js'; +import { IRPChip } from '../rpchip.js'; import { parseSetupPacket, StandardRequest, @@ -252,7 +252,7 @@ export class RPUSBController extends BasePeripheral { return (this.intRaw & this.intEnable) | this.intForce; } - constructor(rp2040: RP2040, name: string) { + constructor(rp2040: IRPChip, name: string, readonly usbctrl_irq: number = IRQ.USBCTRL) { super(rp2040, name); const clock = rp2040.clock; this.endpointReadAlarms = []; @@ -547,7 +547,7 @@ export class RPUSBController extends BasePeripheral { private checkInterrupts() { const { intStatus } = this; - this.rp2040.setInterrupt(IRQ.USBCTRL, !!intStatus); + this.rp2040.setInterrupt(this.usbctrl_irq, !!intStatus); } resetDevice() { diff --git a/src/peripherals/watchdog.ts b/src/peripherals/watchdog.ts index 0b46cef85a..7258868abb 100644 --- a/src/peripherals/watchdog.ts +++ b/src/peripherals/watchdog.ts @@ -1,4 +1,4 @@ -import { RP2040 } from '../rp2040.js'; +import { IRPChip } from '../rpchip.js'; import { Timer32, Timer32PeriodicAlarm, TimerMode } from '../utils/timer32.js'; import { BasePeripheral, Peripheral } from './peripheral.js'; @@ -60,7 +60,7 @@ export class RPWatchdog extends BasePeripheral implements Peripheral { }; // User provided - constructor(rp2040: RP2040, name: string) { + constructor(rp2040: IRPChip, name: string) { super(rp2040, name); this.timer = new Timer32(rp2040.clock, TICK_FREQUENCY); this.timer.mode = TimerMode.Decrement; diff --git a/src/riscv/Assembler/assembler.ts b/src/riscv/Assembler/assembler.ts new file mode 100644 index 0000000000..c1db1ff867 --- /dev/null +++ b/src/riscv/Assembler/assembler.ts @@ -0,0 +1,314 @@ +import { B_Type, I_Type, Instruction, InstructionType, InstructionValues, J_Type, R_Type, S_Type, U_Type } from "./instruction.js"; + +export class Assembler { + + // Convert a a set of assembly instructions to machine code + static assemble(asm: string[]): ArrayBuffer { + + //const parsedAssembly = parse(asm); + + // TODO: link symbols, labels, sections, files etc. + + const parsedAssembly = asm; + + const binaryBuffer = new ArrayBuffer(parsedAssembly.length * 4); + + const binView = new DataView(binaryBuffer); + + parsedAssembly.forEach((line: string, index: number) => { + const machineCode = this.assembleLine(line); + binView.setInt32(index * 4, machineCode.binary, true); + }) + + return binaryBuffer; + } + + // Convert a single assembly instruction to machine code + static assembleLine(asm: string): Instruction { + + const tokens = asm.toLowerCase() + .replace(/,/g, '') + .replace(/\(|\)/g, ' ') + .split(' '); + const baseValues = instructionTable.get(tokens[0]); + + if (baseValues === undefined) { + throw new Error(`Instruction not found in instruction table; instruction provided: ${tokens[0]}`) + } + + let instruction: Instruction; + + switch (baseValues.type!!) { + case InstructionType.R: + instruction = new R_Type({ + ...baseValues, + rd: parseRegister(tokens[1]), + rs1: parseRegister(tokens[2]), + rs2: parseRegister(tokens[3]) + }); + break; + + case InstructionType.I: + + switch (i_Subtypes.get(tokens[0])!! as ImmediateSubtypes) { + case ImmediateSubtypes.Normal: + instruction = new I_Type({ + ...baseValues, + rd: parseRegister(tokens[1]), + rs1: parseRegister(tokens[2]), + imm: parseInt(tokens[3]) + }); + break; + + case ImmediateSubtypes.Indexed: + instruction = new I_Type({ + ...baseValues, + rd: parseRegister(tokens[1]), + imm: parseInt(tokens[2]), + rs1: parseRegister(tokens[3]) + }); + break; + + case ImmediateSubtypes.Shamt: + instruction = new I_Type({ + ...baseValues, + rd: parseRegister(tokens[1]), + rs1: parseRegister(tokens[2]), + shamt: parseInt(tokens[3]) + }); + break; + + case ImmediateSubtypes.Ecall: + instruction = new I_Type({ + ...baseValues + }); + break; + + } + break; + + case InstructionType.S: + instruction = new S_Type({ + ...baseValues, + rs2: parseRegister(tokens[1]), + imm: parseInt(tokens[2]), + rs1: parseRegister(tokens[3]) + }); + break; + + case InstructionType.B: + instruction = new B_Type({ + ...baseValues, + rs1: parseRegister(tokens[1]), + rs2: parseRegister(tokens[2]), + imm: parseInt(tokens[3]), + }); + break; + + case InstructionType.U: + instruction = new U_Type({ + ...baseValues, + rd: parseRegister(tokens[1]), + imm: parseInt(tokens[2]), + }); + break; + + case InstructionType.J: + instruction = new J_Type({ + ...baseValues, + rd: parseRegister(tokens[1]), + imm: parseInt(tokens[2]), + }); + break; + + case InstructionType.CUSTOM0: + throw new Error("Bug: CUSTOM0 instruction type should not get reached here"); + + } + + return instruction; + + } + +} + +/* +===================================================== +=============== Register Aliases: =============== +===================================================== + +x0 zero Hard-wired zero +x1 ra Return address +x2 sp Stack Pointer +x3 gp Global Pointer +x4 tp Thread Pointer +x5 t0 Temporary register/Alternative link +x6-7 t1-2 Temporary registers +x8 s0/fp Saved Register/Frame pointer +x9 s1 Saved Register +x10-11 a0-1 Function Arguments/Return value +x12-17 a2-7 Function Arguments +x18-27 s2-11 Saved Registers +x28-31 t3-6 Temporaries + +Source: Page 137 of Volume I: RISC-V Unprivileged ISA V20191213 + +*/ + +function parseRegister(registerName: string): number { + const registerIndex = registerTable.get(registerName); + if (registerIndex === undefined) { + throw new Error(`Register name not found in register table; Name provided: ${registerName}`); + } + + return registerIndex; +} + +const registerTable = new Map([ + ['x0', 0], + ['x1', 1], + ['x2', 2], + ['x3', 3], + ['x4', 4], + ['x5', 5], + ['x6', 6], + ['x7', 7], + ['x8', 8], + ['x9', 9], + ['x10', 10], + ['x11', 11], + ['x12', 12], + ['x13', 13], + ['x14', 14], + ['x15', 15], + ['x16', 16], + ['x17', 17], + ['x18', 18], + ['x19', 19], + ['x20', 20], + ['x21', 21], + ['x22', 22], + ['x23', 23], + ['x24', 24], + ['x25', 25], + ['x26', 26], + ['x27', 27], + ['x28', 28], + ['x29', 29], + ['x30', 30], + ['x31', 31], + + ['zero', 0], + ['ra', 1], + ['sp', 2], + ['gp', 3], + ['tp', 4], + ['t0', 5], + ['t1', 6], + ['t2', 7], + ['s0', 8], + ['fp', 8], + ['s1', 9], + ['a0', 10], + ['a1', 11], + ['a2', 12], + ['a3', 13], + ['a4', 14], + ['a5', 15], + ['a6', 16], + ['a7', 17], + ['s2', 18], + ['s3', 19], + ['s4', 20], + ['s5', 21], + ['s6', 22], + ['s7', 23], + ['s8', 24], + ['s9', 25], + ['s10', 26], + ['s11', 27], + ['t3', 28], + ['t4', 29], + ['t5', 30], + ['t6', 31], + +]) + +const instructionTable = new Map([ + ['lui', { type: InstructionType.U, opcode: 0x37 }], + ['auipc', { type: InstructionType.U, opcode: 0x17 }], + + ['jal', { type: InstructionType.J, opcode: 0x6F }], + ['jalr', { type: InstructionType.I, opcode: 0x67, func3: 0x0 }], + + ['beq', { type: InstructionType.B, opcode: 0x63, func3: 0x0 }], + ['bne', { type: InstructionType.B, opcode: 0x63, func3: 0x1 }], + ['blt', { type: InstructionType.B, opcode: 0x63, func3: 0x4 }], + ['bge', { type: InstructionType.B, opcode: 0x63, func3: 0x5 }], + ['bltu', { type: InstructionType.B, opcode: 0x63, func3: 0x6 }], + ['bgeu', { type: InstructionType.B, opcode: 0x63, func3: 0x7 }], + + ['lb', { type: InstructionType.I, opcode: 0x03, func3: 0x0 }], + ['lh', { type: InstructionType.I, opcode: 0x03, func3: 0x1 }], + ['lw', { type: InstructionType.I, opcode: 0x03, func3: 0x2 }], + ['lbu', { type: InstructionType.I, opcode: 0x03, func3: 0x4 }], + ['lhu', { type: InstructionType.I, opcode: 0x03, func3: 0x5 }], + + ['sb', { type: InstructionType.S, opcode: 0x23, func3: 0x0 }], + ['sh', { type: InstructionType.S, opcode: 0x23, func3: 0x1 }], + ['sw', { type: InstructionType.S, opcode: 0x23, func3: 0x2 }], + + ['addi', { type: InstructionType.I, opcode: 0x13, func3: 0x0 }], + ['slti', { type: InstructionType.I, opcode: 0x13, func3: 0x2 }], + ['sltiu', { type: InstructionType.I, opcode: 0x13, func3: 0x3 }], + ['xori', { type: InstructionType.I, opcode: 0x13, func3: 0x4 }], + ['ori', { type: InstructionType.I, opcode: 0x13, func3: 0x6 }], + ['andi', { type: InstructionType.I, opcode: 0x13, func3: 0x7 }], + ['slli', { type: InstructionType.I, opcode: 0x13, func3: 0x1, func7: 0x00 }], + ['srli', { type: InstructionType.I, opcode: 0x13, func3: 0x5, func7: 0x00 }], + ['srai', { type: InstructionType.I, opcode: 0x13, func3: 0x5, func7: 0x20 }], + + ['add', { type: InstructionType.R, opcode: 0x33, func3: 0x0, func7: 0x00 }], + ['sub', { type: InstructionType.R, opcode: 0x33, func3: 0x0, func7: 0x20 }], + ['sll', { type: InstructionType.R, opcode: 0x33, func3: 0x1, func7: 0x00 }], + ['slt', { type: InstructionType.R, opcode: 0x33, func3: 0x2, func7: 0x00 }], + ['sltu', { type: InstructionType.R, opcode: 0x33, func3: 0x3, func7: 0x00 }], + ['xor', { type: InstructionType.R, opcode: 0x33, func3: 0x4, func7: 0x00 }], + ['srl', { type: InstructionType.R, opcode: 0x33, func3: 0x5, func7: 0x00 }], + ['sra', { type: InstructionType.R, opcode: 0x33, func3: 0x5, func7: 0x20 }], + ['or', { type: InstructionType.R, opcode: 0x33, func3: 0x6, func7: 0x00 }], + ['and', { type: InstructionType.R, opcode: 0x33, func3: 0x7, func7: 0x00 }], + + ['ecall', { type: InstructionType.I, opcode: 0x73, func3: 0x0, func7: 0x00 }], +]) + +enum ImmediateSubtypes { + Normal, + Shamt, + Indexed, + Ecall +} + +const i_Subtypes = new Map([ + + ['jalr', ImmediateSubtypes.Indexed], + + ['lb', ImmediateSubtypes.Indexed], + ['lh', ImmediateSubtypes.Indexed], + ['lw', ImmediateSubtypes.Indexed], + ['lbu', ImmediateSubtypes.Indexed], + ['lhu', ImmediateSubtypes.Indexed], + + ['addi', ImmediateSubtypes.Normal], + ['slti', ImmediateSubtypes.Normal], + ['sltiu', ImmediateSubtypes.Normal], + ['xori', ImmediateSubtypes.Normal], + ['ori', ImmediateSubtypes.Normal], + ['andi', ImmediateSubtypes.Normal], + + ['slli', ImmediateSubtypes.Shamt], + ['srli', ImmediateSubtypes.Shamt], + ['srai', ImmediateSubtypes.Shamt], + + ['ecall', ImmediateSubtypes.Ecall], +]) \ No newline at end of file diff --git a/src/riscv/Assembler/instruction.ts b/src/riscv/Assembler/instruction.ts new file mode 100644 index 0000000000..c1b4607f0d --- /dev/null +++ b/src/riscv/Assembler/instruction.ts @@ -0,0 +1,425 @@ +import { getBit, getRange, setRange, signExtend } from "../binaryFunctions.js"; + +export abstract class Instruction { + + binary: number; + + abstract type: InstructionType; + + constructor(options: InstructionValues) { + + if (options.binary) { + this.binary = options.binary; + + } else if (options.opcode) { + this.binary = 0; + + if (options.opcode) { + this.binary = setRange(this.binary, options.opcode, 6, 0); + } + + if (options.rd) { + this.binary = setRange(this.binary, options.rd, 11, 7); + } + + if (options.rs1) { + this.binary = setRange(this.binary, options.rs1, 19, 15); + } + + if (options.rs2) { + this.binary = setRange(this.binary, options.rs2, 24, 20); + } + + if (options.func3) { + this.binary = setRange(this.binary, options.func3, 14, 12); + } + + if (options.func7) { + this.binary = setRange(this.binary, options.func7, 31, 25); + } + + if (options.shamt) { + this.binary = setRange(this.binary, options.shamt, 24, 20); + } + + } else { + throw new Error('Instruction must be constructed with at least a binary value OR opcode value'); + } + + } + + get opcode() { + return getRange(this.binary, 6, 0); + } + + set opcode(value: number) { + this.binary = setRange(this.binary, value, 6, 0); + } + +} + +export class R_Type extends Instruction { + + type: InstructionType; + + constructor(options: InstructionValues) { + super(options); + this.type = InstructionType.R; + } + + get rd() { + return getRange(this.binary, 11, 7); + } + + set rd(value: number) { + this.binary = setRange(this.binary, value, 11, 7); + } + + get func3() { + return getRange(this.binary, 14, 12); + } + + set func3(value: number) { + this.binary = setRange(this.binary, value, 14, 12); + } + + get rs1() { + return getRange(this.binary, 19, 15); + } + + set rs1(value: number) { + this.binary = setRange(this.binary, value, 19, 15); + } + + get rs2() { + return getRange(this.binary, 24, 20); + } + + set rs2(value: number) { + this.binary = setRange(this.binary, value, 24, 20); + } + + get func7() { + return getRange(this.binary, 31, 25); + } + + set func7(value: number) { + this.binary = setRange(this.binary, value, 31, 25); + } + +} + +export class I_Type extends Instruction implements HasImmediate { + + type: InstructionType; + + constructor(options: InstructionValues) { + super(options); + this.type = InstructionType.I; + + if (options.imm) { + this.imm = options.imm; + } + + } + + get rd() { + return getRange(this.binary, 11, 7); + } + + set rd(value: number) { + this.binary = setRange(this.binary, value, 11, 7); + } + + get func3() { + return getRange(this.binary, 14, 12); + } + + set func3(value: number) { + this.binary = setRange(this.binary, value, 14, 12); + } + + get rs1() { + return getRange(this.binary, 19, 15); + } + + set rs1(value: number) { + this.binary = setRange(this.binary, value, 19, 15); + } + + get func7() { + return getRange(this.binary, 31, 25); + } + + set func7(value: number) { + this.binary = setRange(this.binary, value, 31, 25); + } + + get shamt() { + return getRange(this.binary, 24, 20); + } + + set shamt(value: number) { + this.binary = setRange(this.binary, value, 24, 20); + } + + get imm() { + return signExtend(this.immU, 12); + } + + get immU() { + return getRange(this.binary, 31, 20); + } + + set imm(value: number) { + this.binary = setRange(this.binary, value, 31, 20); + } + +} + +export class S_Type extends Instruction implements HasImmediate { + + type: InstructionType; + + constructor(options: InstructionValues) { + super(options); + this.type = InstructionType.S; + + if (options.imm) { + this.imm = options.imm; + } + } + + get func3() { + return getRange(this.binary, 14, 12); + } + + set func3(value: number) { + this.binary = setRange(this.binary, value, 14, 12); + } + + get rs1() { + return getRange(this.binary, 19, 15); + } + + set rs1(value: number) { + this.binary = setRange(this.binary, value, 19, 15); + } + + get rs2() { + return getRange(this.binary, 24, 20); + } + + set rs2(value: number) { + this.binary = setRange(this.binary, value, 24, 20); + } + + get imm() { + return signExtend(this.immU, 12); + } + + get immU() { + return (getRange(this.binary, 11, 7) + (getRange(this.binary, 31, 25) << 5)) >>> 0; + } + + set imm(value: number) { + const imm5 = getRange(value, 4, 0); + const imm7 = getRange(value, 11, 5); + + this.binary = setRange(this.binary, imm5, 11, 7); + this.binary = setRange(this.binary, imm7, 31, 25); + } + +} + +export class B_Type extends Instruction implements HasImmediate { + + type: InstructionType; + + constructor(options: InstructionValues) { + super(options); + this.type = InstructionType.B; + + if (options.imm) { + this.imm = options.imm; + } + } + + get func3() { + return getRange(this.binary, 14, 12); + } + + set func3(value: number) { + this.binary = setRange(this.binary, value, 14, 12); + } + + get rs1() { + return getRange(this.binary, 19, 15); + } + + set rs1(value: number) { + this.binary = setRange(this.binary, value, 19, 15); + } + + get rs2() { + return getRange(this.binary, 24, 20); + } + + set rs2(value: number) { + this.binary = setRange(this.binary, value, 24, 20); + } + + get imm() { + return signExtend(this.immU, 13); + } + + get immU() { + + const imm5 = getRange(this.binary, 11, 7); + const imm7 = getRange(this.binary, 31, 25); + + return ( + (getRange(imm5, 4, 1) << 1) + + (getBit(imm5, 0) << 11) + + (getRange(imm7, 5, 0) << 5) + + (getBit(imm7, 6) << 12) + ) + } + + set imm(value: number) { + + const imm4_1 = getRange(value, 4, 1); + const imm10_5 = getRange(value, 10, 5); + const imm11 = getBit(value, 11); + const imm12 = getBit(value, 12); + + const imm5 = (imm4_1 << 1) + imm11; + const imm7 = (imm12 << 6) + imm10_5; + + this.binary = setRange(this.binary, imm5, 11, 7); + this.binary = setRange(this.binary, imm7, 31, 25); + } + +} + +export class U_Type extends Instruction implements HasImmediate { + + type: InstructionType; + + constructor(options: InstructionValues) { + super(options); + this.type = InstructionType.U; + + if (options.imm) { + this.imm = options.imm; + } + } + + get rd() { + return getRange(this.binary, 11, 7); + } + + set rd(value: number) { + this.binary = setRange(this.binary, value, 11, 7); + } + + get imm() { + const immU = getRange(this.binary, 31, 12); + const imm = signExtend(immU, 20); + return imm << 12; + } + + get immU() { + return (getRange(this.binary, 31, 12) << 12) >>> 0; // make sure 0x80000 is read as unsigned + } + + set imm(value: number) { + this.binary = setRange(this.binary, value >> 12, 31, 12); + } + +} + +export class J_Type extends Instruction implements HasImmediate { + + type: InstructionType; + + constructor(options: InstructionValues) { + super(options); + this.type = InstructionType.J; + + if (options.imm) { + this.imm = options.imm; + } + } + + get rd() { + return getRange(this.binary, 11, 7);; + } + + set rd(value: number) { + this.binary = setRange(this.binary, value, 11, 7); + } + + get imm() { + return signExtend(this.immU, 21); + } + + get immU() { + + const imm = getRange(this.binary, 31, 12); + + return ( + (getRange(imm, 18, 9) << 1) + + (getBit(imm, 8) << 11) + + (getRange(imm, 7, 0) << 12) + + (getBit(imm, 19) << 20) + ); + } + + set imm(value: number) { + const imm10_1 = getRange(value, 10, 1); + const imm19_12 = getRange(value, 19, 12); + const imm11 = getBit(value, 11); + const imm20 = getBit(value, 20); + + const imm = ( + imm19_12 + + (imm11 << 8) + + (imm10_1 << 9) + + (imm20 << 19) + ) + + this.binary = setRange(this.binary, imm, 31, 12); + + } + +} + +export enum InstructionType { + R, + I, + S, + B, + U, + J, + CUSTOM0 +} + +export interface InstructionValues { + binary?: number, + opcode?: number, + rd?: number, + rs1?: number, + rs2?: number, + func3?: number, + func7?: number, + shamt?: number, + imm?: number + + type?: InstructionType +} + +interface HasImmediate { + imm: number, + immU: number +} \ No newline at end of file diff --git a/src/riscv/Assembler/parser.ts b/src/riscv/Assembler/parser.ts new file mode 100644 index 0000000000..b80b2ab91e --- /dev/null +++ b/src/riscv/Assembler/parser.ts @@ -0,0 +1,135 @@ +/* +The parser's job is to translate pseudo-instructions into sequences of native assembly + +For example, there is no dedicated opcode/function combination for the MV instruction +The MV instruction is an abstraction for assembly programming +An assembler actually converts "MV rd, rs" into "ADDI rd, rs, 0" + +====================================================== +============ Pseudo instruction list: ============ +====================================================== + +LA rd, symbol (Non-PIC) AUIPC rd, delta[31:12] + delta[11] + ADDI rd, rd, delta[11:0] +LA rd, symbol (PIC) AUIPC rd, delta[31:12] + delta[11] + L{W|D} rd, rd, delta[11:0] +LLA rd, symbol AUIPC rd, delta[31:12] + delta[11] + ADDI rd, rd, delta[11:0] +L{B|H|W|D} rd, symbol AUIPC rd, delta[31:12] + delta[11] + L{B|H|W|D} rd, delta[11:0](rd) +S{B|H|W|D} rd, symbol, rt AUIPC rt, delta[31:12] + delta[11] + S{B|H|W|D} rd, delta[11:0](rt) + +NOP ADDI x0, x0, 0 +LI rd, imm *Myriad Sequences* +MV rd, rs ADDI rd, rs, 0 +NOT rd, rs XORI rd, rs, -1 +NEG rd, rs SUB rd, x0, rs +SEQZ rd, rs SLTIU rd, rs, 1 +SNEZ rd, rs SLTU rd, x0, rs +SLTZ rd, rs SLT rd, rs, x0 +SGTZ rd, rs SLT rd, x0, rs + +BEQZ rs, offset BEQ rs, x0, offset +BNEZ rs, offset BNE rs, x0, offset +BLEZ rs, offset BGE x0, rs, offset +BGEZ rs, offset BGE rs, x0, offset +BLTZ rs, offset BLT rs, x0, offset +BGTZ rs, offset BLT x0, rs, offset + +BGT rs, rt, offset BLT rt, rs, offset +BLE rs, rt, offset BGE rt, rs, offset +BGTU rs, rt, offset BLTU rt, rs, offset +BLEU rs, rt, offset BGEU rt, rs, offset + +J offset JAL x0, offset +JAL offset JAL x1, offset +JR rs JALR x0, 0(rs) +JALR rs JALR x1, 0(rs) +RET JALR x0, 0(x1) +CALL offset(12 bit) JALR ra, ra, offset +CALL offset AUIPC x1, offset[31:12 + offset[11] + JALR x1, offset[11:0](x1) +TAIL offset AUIPC x6, offset[31:12] + offset[11] + JALR x0, offset[11:0](x6) + +Source: Page 139 of Volume I: RISC-V Unprivileged ISA V20191213 + +*/ + +export function parse(instructions: string[]): string[] { + return instructions; +} + +//TODO Rewrite parsing function to work with instruction classes + +const pseudoInstructionConversions = new Map([ + ['LA rd, symbol (Non-PIC)', ['AUIPC rd, delta[31:12] + delta[11]', + 'ADDI rd, rd, delta[11:0]']], + ['LA rd, symbol (PIC)', ['AUIPC rd, delta[31:12] + delta[11]', + 'L{W|D} rd, rd, delta[11:0]']], + ['LLA rd, symbol', ['AUIPC rd, delta[31:12] + delta[11]', + 'ADDI rd, rd, delta[11:0]']], + ['L{B|H|W|D} rd, symbol', ['AUIPC rd, delta[31:12] + delta[11]', + 'L{B|H|W|D} rd, delta[11:0](rd)']], + ['S{B|H|W|D} rd, symbol, rt', ['AUIPC rt, delta[31:12] + delta[11]', + 'S{B|H|W|D} rd, delta[11:0](rt)']], + + ['NOP ', ['ADDI x0, x0, 0']], + ['LI rd, imm ', ['*Myriad Sequences*']], + ['MV rd, rs ', ['ADDI rd, rs, 0']], + ['NOT rd, rs ', ['XORI rd, rs, -1']], + ['NEG rd, rs ', ['SUB rd, x0, rs']], + ['SEQZ rd, rs ', ['SLTIU rd, rs, 1']], + ['SNEZ rd, rs ', ['SLTU rd, x0, rs']], + ['SLTZ rd, rs ', ['SLT rd, rs, x0']], + ['SGTZ rd, rs ', ['SLT rd, x0, rs']], + + ['BEQZ rs, offset ', ['BEQ rs, x0, offset']], + ['BNEZ rs, offset ', ['BNE rs, x0, offset']], + ['BLEZ rs, offset ', ['BGE x0, rs, offset']], + ['BGEZ rs, offset ', ['BGE rs, x0, offset']], + ['BLTZ rs, offset ', ['BLT rs, x0, offset']], + ['BGTZ rs, offset ', ['BLT x0, rs, offset']], + + ['BGT rs, rt, offset ', ['BLT rt, rs, offset']], + ['BLE rs, rt, offset ', ['BGE rt, rs, offset']], + ['BGTU rs, rt, offset', ['BLTU rt, rs, offset']], + ['BLEU rs, rt, offset', ['BGEU rt, rs, offset']], + + ['J offset ', ['JAL x0, offset']], + ['JAL offset ', ['JAL x1, offset']], + ['JR rs ', ['JALR x0, 0(rs)']], + ['JALR rs ', ['JALR x1, 0(rs)']], + ['RET ', ['JALR x0, 0(x1)']], + ['CALL offset(12 bit)', ['JALR ra, ra, offset']], + ['CALL offset ', ['AUIPC x1, offset[31:12 + offset[11]', + 'JALR x1, offset[11:0](x1)']], + ['TAIL offset ', ['AUIPC x6, offset[31:12] + offset[11]', + 'JALR x0, offset[11:0](x6)']] +]); + +export const parserTestCases = new Map([ + [['NOP'], ['ADDI x0, x0, 0']], + [['MV x3, x5'], ['ADDI x3, x5, 0']], + [['MV t3, a5'], ['ADDI x28, x15, 0']], + [['NOT x2, x7'], ['XORI x2, x7, 0']], + [['NEG fp, s0'], ['SUB x8, x0, x8']], + [['SEQZ s3, gp'], ['SLTIU x19, x3, 1']], + [['SNEZ t2, ra'], ['SLTU x7, x0, x1']], + [['SLTZ sp, tp'], ['SLT x2, x4, x0']], + [['SGTZ t4, a0'], ['SLT x29, x0, x10']], + [['RET'], ['JALR x0, 0(x1)']], + [[ + 'loop:', + 'SUB s1, s1, a3', + 'BEQZ s1, loop' + ], [ + 'SUB x9, x9, x13', + 'BEQ x9, x0, -2' + ]], + [[''], ['']], + [[''], ['']], + [[''], ['']], + [[''], ['']], +]); \ No newline at end of file diff --git a/src/riscv/README.txt b/src/riscv/README.txt new file mode 100644 index 0000000000..75f41f2d4b --- /dev/null +++ b/src/riscv/README.txt @@ -0,0 +1,5 @@ +https://github.com/c1570/rp2040js RISC-V emulator code for rp2350js implementation + +RISC-V emulator originally by Alice Parrish https://github.com/Aloeminium108/risc-v-emulator +RV32C code translated from original C version https://github.com/kaeteyaruyo/rv32emu-next/tree/feature-RVC +both have been modified extensively diff --git a/src/riscv/binaryFunctions.ts b/src/riscv/binaryFunctions.ts new file mode 100644 index 0000000000..9ab172a244 --- /dev/null +++ b/src/riscv/binaryFunctions.ts @@ -0,0 +1,86 @@ +// Returns bits from 32-bit input in specified range +export function getRange(input: number, upperEnd: number, lowerEnd: number): number { + if ( + upperEnd > 31 || + lowerEnd < 0 || + lowerEnd > upperEnd || + lowerEnd === upperEnd + ) { + throw new Error('Specified range not possible'); + } + + let result = input; + + if (upperEnd < 31) { + const bitmask: number = 0xFFFFFFFF >>> (31 - upperEnd); + result &= bitmask; + } + + return result >>> lowerEnd; + +} + +// Sets bits from 32-bit input in specified range to provided value +export function setRange(input: number, value: number, upperEnd: number, lowerEnd: number): number { + if ( + upperEnd > 31 || + lowerEnd < 0 || + lowerEnd > upperEnd || + lowerEnd === upperEnd + ) { + throw new Error('Specified range not possible'); + } + + if (value > (2 ** (1 + upperEnd - lowerEnd)) - 1) { + throw new Error(`Value does not fit within specified range; max value: ${(2 ** (1 + upperEnd - lowerEnd)) - 1}, value supplied: ${value}`); + } + + const lowerMask = 0xFFFFFFFF >>> (31 - lowerEnd); + const upperMask = 0xFFFFFFFF << upperEnd; + const bitMask = lowerMask | upperMask; + + return (input & bitMask) | (value << lowerEnd); + +} + +// Returns specified bit from 32-bit input +export function getBit(input: number, index: number): number { + if ( + index > 31 || + index < 0 + ) { + throw new Error('Specified index not possible'); + } + + return (input >>> index) & 0x00000001 +} + +// Sets the specified bit to provided value in given input +export function setBit(input: number, value: number, index: number): number { + if ( + index > 31 || + index < 0 + ) { + throw new Error('Specified index not possible'); + } + + if (value !== 0 && value !== 1) { + throw new Error(`Specified value must be 1 or 0; value received: ${value}`); + } + + return value === 1 ? + input | (1 << index) : + (input | (1 << index)) ^ (1 << index); + +} + +// Sign extends input of specified width to 32 bits +export function signExtend(input: number, width: number): number { + if (getBit(input, width - 1)) { + const bitmask = 0xFFFFFFFF >> (32 - width); + return setRange(input, bitmask, 31, width - 1); + + } else { + return input; + } +} \ No newline at end of file diff --git a/src/riscv/cpu.ts b/src/riscv/cpu.ts new file mode 100644 index 0000000000..2d5e0c3295 --- /dev/null +++ b/src/riscv/cpu.ts @@ -0,0 +1,1461 @@ +import { B_Type, I_Type, Instruction, InstructionType, J_Type, R_Type, S_Type, U_Type } from "./Assembler/instruction.js"; +import { getRange } from "./binaryFunctions.js"; +import { IRPChip } from "../rpchip.js"; +import { decompress_rv32c_inst } from "./rv32c.js"; + +enum ExecutionMode { + Mode_Machine, + Mode_User, +} + +class EICAND { + constructor(readonly irq_number: number, readonly priority: number) {} +} + +export class CPU { + + public onSEV?: () => void; + public waiting = false; + public eventRegistered = false; + + registerSet: RegisterSet = new RegisterSet(32); + csrs = new Array(0x1000); + pc = 0; + next_pc = 0; + stopped = false; //TODO + cycles = 0; + currentMode: ExecutionMode = ExecutionMode.Mode_Machine; + + interruptsUpdated = false; + meiea = new Array(512); + meipa = new Array(512); + meifa = new Array(512); + meipra = new Array(512); + meicand = new Array(); + + did_just_jump = false; + // True when the current instruction set a new PC (branch / jump / trap). Replaces the old + // `next_pc == 0` sentinel, which silently dropped any control transfer whose target was + // exactly 0 (the bootrom base) and made synchronous traps land at mtvec+ilen instead of + // mtvec. Set in every branch/JAL/JALR/MRET handler and in trapEntry; consumed in step(). + branch_taken = false; + + constructor(readonly chip: IRPChip, readonly coreLabel: string, readonly mhartid: number) { + this.reset(); + } + + get PC() { + return this.pc; + } + + get logger() { + return this.chip.logger; + } + + reset() { + // Restore the architectural reset state. This previously did NOT reset the PC, so a warm + // reset (e.g. loadBootrom on a core that had already executed) resumed mid-stream instead + // of re-entering the reset vector (0 on Hazard3/RP2350). Cold boot only worked by luck of + // the field initializer being 0. + this.pc = 0; + this.next_pc = 0; + this.branch_taken = false; + this.did_just_jump = false; + this.waiting = false; + this.eventRegistered = false; + this.inst_length = 0; + this.meiea.fill(0); + this.meipa.fill(0); + this.meifa.fill(0); + this.meipra.fill(0); + this.meicand = new Array(); + this.interruptsUpdated = false; + + this.csrs.fill(0); + this.csrs[0x300] = 3<<11; + this.csrs[0x301] = 0b01000000100100000001000100000101; + this.csrs[0x305] = 0x00001fff00; + this.csrs[0x320] = 0x101; + //TODO 0x3a1 - 0x7b0 + // MEINEXT must reset to NOIRQ (bit 31), not 0. A zeroed MEINEXT reads as "IRQ 0, NOIRQ clear", + // which the !NOIRQ interrupt gate (the IRQ-0-delivery fix) would treat as a real pending IRQ 0 + // the instant the firmware enables interrupts — a phantom trap before any IRQ has fired. With + // NOIRQ set at reset, !NOIRQ is false until a real interrupt populates MEINEXT (a true IRQ 0 + // sets MEINEXT=0/NOIRQ-clear), so index 0 is still deliverable while the idle state is correct. + this.csrs[0xbe4] = (1 << 31) >>> 0; + this.csrs[0xbe5] = 1<<15; + this.csrs[0xf11] = (0x9<<7)|(0x13); + this.csrs[0xf12] = 0x1b; + this.csrs[0xf13] = 0x86fc4e3f; + } + + inst_length = 0; + + private fetchInstruction(): number { + let inst = this.chip.readUint16(this.pc); + if ((inst & 3) != 3) { + if (inst == 0) { + throw Error(`Illegal 16 bit instruction 0 at 0x${this.pc.toString(16)}`); + } + + inst = decompress_rv32c_inst(this, inst); + this.inst_length = 2; + } else { + // we have a 32 bit instruction + inst |= this.chip.readUint16(this.pc + 2) << 16; + if(this.did_just_jump && (this.pc & 3)) this.cycles++; // jumped to non 32 bit aligned instr + this.inst_length = 4; + } + return inst >>> 0; + } + + printDisassembly() { + let pc = this.pc; + if(this.chip.disassembly) { + const search = (this.pc.toString(16) + ":").replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); + const re = new RegExp(search + "(.*)"); + const res = re.exec(this.chip.disassembly); + const dis = (res == null) ? "?" : res[1]; + this.logger.info(this.coreLabel, `PC 0x${this.pc.toString(16)} - ${dis}`); + } else { + this.logger.info(this.coreLabel, `PC 0x${this.pc.toString(16)}`); + } + } + + executeInstruction() { + this.checkForInterrupts(); + if (this.branch_taken) { + // An asynchronous trap (external interrupt) redirected the PC before this fetch. + // Commit it now so we fetch from the vector; the vector instruction then steps normally. + this.pc = this.next_pc >>> 0; + this.branch_taken = false; + this.did_just_jump = true; + } + if (this.waiting) { + this.cycles++; + return; + } + const instruction = this.fetchInstruction(); + try { + this.step(instruction); + } catch(e) { + this.printDisassembly(); + throw e; + } + this.cycles++; + } + + step(instruction: number) { + + const instructionType = opcodeTypeTable.get(getRange(instruction, 6, 0)); + + switch (instructionType as InstructionType) { + case InstructionType.R: + this.executeR_Type(new R_Type({ binary: instruction })); + break; + case InstructionType.I: + this.executeI_Type(new I_Type({ binary: instruction })); + break; + case InstructionType.S: + this.executeS_Type(new S_Type({ binary: instruction })); + break; + case InstructionType.B: + this.executeB_Type(new B_Type({ binary: instruction })); + break; + case InstructionType.U: + this.executeU_Type(new U_Type({ binary: instruction })); + break; + case InstructionType.J: + this.executeJ_Type(new J_Type({ binary: instruction })); + break; + case InstructionType.CUSTOM0: + this.executeCustom0_Type(instruction); + break; + default: + throw Error(`Invalid instruction: 0x${instruction.toString(16)} at 0x${this.pc.toString(16)}, OpcodeType 0x${getRange(instruction, 6, 0).toString(16)}`); + break; + } + + if(this.branch_taken) { + this.pc = this.next_pc >>> 0; + this.branch_taken = false; + this.did_just_jump = true; + } else { + this.pc += this.inst_length; + this.did_just_jump = false; + } + + } + + setInterruptEnabled(irq: number, value: boolean) { + if (value && !this.meiea[irq] && this.meipa[irq]) { + // interrupt was pending and just has been enabled, put into meicand + this.meiea[irq] = 1; + this.meipa[irq] = 0; + this.setInterrupt(irq, true); + } else if (!value && this.meiea[irq] && this.meipa[irq]) { + // interrupt is pending and just has been disabled, remove from meicand + this.setInterrupt(irq, false); + this.meipa[irq] = 1; + } + this.meiea[irq] = +value; + } + + setInterrupt(irq: number, value: boolean) { + //this.logger.warn(this.coreLabel, `New interrupt: ${irq} = ${value}`); + if (value && !this.meipa[irq] && this.meiea[irq]) { + this.meipa[irq] = 1; + this.meicand.push(new EICAND(irq, this.meipra[irq])); + this.meicand.sort((a,b) => ((b.priority - a.priority) << 9) + (a.irq_number - b.irq_number)); + this.updateMEINEXT(); + this.interruptsUpdated = true; + } else if (!value && this.meipa[irq]) { + this.meipa[irq] = 0; + this.meicand = this.meicand.filter((icand) => icand.irq_number != irq); + this.updateMEINEXT(); + } + } + + updateMEINEXT() { + // MEINEXT and mip.MEIP are both gated by PPREEMPT. meinext.irq stays visible down to PPREEMPT so + // a handler can loop-drain pending interrupts within one frame, and Hazard3 keeps mip.MEIP + // asserted at that same level (it only suppresses the actual trap, in checkForInterrupts, via + // PREEMPT). NOTE: an earlier "fix" gated mip.MEIP by PREEMPT instead; that cleared mip.MEIP for + // a same-priority interrupt pending mid-handler, which broke firmware that polls mip while + // servicing a timer IRQ (hello_timer stalled after a few periods). Reverted to PPREEMPT. + const meicontext_ppreempt = (this.csrs[0xbe5] >>> 24) & 0b1111; + if(this.meicand.length > 0 && this.meicand[0].priority >= meicontext_ppreempt) { + this.csrs[0xbe4] = this.meicand[0].irq_number << 2; + this.csrs[0x344] |= 1 << 11; + } else { + this.csrs[0xbe4] = (1 << 31) >>> 0; // NOIRQ + this.csrs[0x344] &= ~(1 << 11); + } + } + + updateMEICONTEXT_update() { + // called on MEINEXT.UPDATE write + // clear NOIRQ and IRQ + let meicontext = this.csrs[0xbe5]; + meicontext &= ~(0b1001111111110000); + // update NOIRQ + meicontext |= (this.csrs[0xbe4] >>> 31) << 15; + // update IRQ + const current_irq = (this.csrs[0xbe4] >>> 2) & 511; + meicontext |= current_irq << 4; + this.csrs[0xbe5] = meicontext; + } + + updateMEICONTEXT_priority_save() { + // called on priority save (external interrupt trap) + let meicontext = this.csrs[0xbe5]; + // clear PPPREEMPT, PPREEMPT, PREEMPT, MTIESAVE, MSIESAVE, CLEARTS + meicontext &= 0b1111111111110001; + // update PPREEMPT from old PREEMPT + meicontext |= ((this.csrs[0xbe5] >>> 16) & 0b1111) << 24; + // update PPPREEMPT from old PPREEMPT + meicontext |= ((this.csrs[0xbe5] >>> 24) & 0b1111) << 28; + // update PREEMPT + const current_irq = (this.csrs[0xbe4] >>> 2) & 511; + if(!((this.csrs[0xbe4] >>> 31) & 1)) { // a real IRQ is in meinext (NOIRQ clear) - including index 0 + meicontext |= (this.meipra[current_irq] + 1) << 16; + } else { + meicontext |= 16 << 16; + } + meicontext |= 1; // set MEICONTEXT.MRETEIRQ + this.csrs[0xbe5] = meicontext; + } + + updateMEICONTEXT_priority_restore() { + // called on potential priority restore (mret) + let meicontext = this.csrs[0xbe5]; + if(!(meicontext & 1)) return; // only proceed if MRETEIRQ is set + // clear PPP/PP/PREEMPT/MRETEIRQ + meicontext &= 0b111111111111110; + // set PPREEMPT from old PPPREEMPT + meicontext |= (this.csrs[0xbe5] >>> 28) << 24; + // set PREEMPT from old PPREEMPT + meicontext |= ((this.csrs[0xbe5] >>> 24) & 0b1111) << 16; + this.csrs[0xbe5] = meicontext; + } + + checkForInterrupts() { + if(!this.interruptsUpdated) return; + this.interruptsUpdated = false; + if(this.csrs[0x304] & 0b100000000000) { // if MIE.MEIE is set... TODO consider software and timer interrupts as well + const meinext_noirq = (this.csrs[0xbe4] >>> 31) & 1; // meinext.NOIRQ (bit 31) + const meinext_irq_number = (this.csrs[0xbe4] >>> 2) & 511; + const meinext_irq_prio = this.meipra[meinext_irq_number]; + const meicontext_preempt = (this.csrs[0xbe5] >>> 16) & 0b11111; + // Presence of an external interrupt is signalled by NOIRQ, NOT by irq != 0: index 0 + // (TIMER0_IRQ_0 on RP2350) is a legal interrupt and was previously never taken. + if(!meinext_noirq && meinext_irq_prio >= meicontext_preempt) { // ...and the interrupt visible in MEINEXT has at least PREEMPT priority... + if(this.csrs[0x300] & 0b1000) { // ...and MSTATUS.MIE is set... + this.updateMEICONTEXT_priority_save(); // this gets called ONLY on external interrupt trap + this.trapEntry(((1<<31) | 11) >>> 0); //TODO hardwired cause MEIP = external interrupt + } + this.waiting = false; // "wfi ignores the global interrupt enable, MSTATUS.MIE" + } + } + } + + trapEntry(mcause: number) { + //this.logger.info(this.coreLabel, `Entering trap handler, mcause 0x${mcause.toString(16)}`); + if(mcause != (((1<<31) | 11) >>> 0)) this.csrs[0xbe5] &= ~1; // clear MIECONTEXT.MRETEIRQ on any trap that's not an external interrupt + this.setCSR(0x341, this.pc, 0); // Save the address of the interrupted or excepting instruction to MEPC + // 2. Set the MSB of MCAUSE to indicate the cause is an interrupt, or clear it to indicate an exception + // 3. Write the detailed trap cause to the LSBs of the MCAUSE register + this.setCSR(0x342, mcause, 0); + // TODO 4. Save the current privilege level to MSTATUS.MPP + // TODO 5. Set the privilege to M-mode (note Hazard3 does not implement S-mode) + // 6. Save the current value of MSTATUS.MIE to MSTATUS.MPIE + let mstatus = this.getCSR(0x300, 0); + mstatus &= ~0b10000000; mstatus |= (mstatus << 4) & 0b10000000; + // 7. Disable interrupts by clearing MSTATUS.MIE. MIE is bit 3 (0b1000). The old `&= 1<<7` + // kept only MPIE (bit 7) and wiped the rest of mstatus (MPP etc.); the mret path restores + // MIE from MPIE with `&= ~0b1000`, confirming the intent is to clear only MIE here. + mstatus &= ~(1<<3); + this.setCSR(0x300, mstatus, 0); + // 8. Jump to the correct offset from MTVEC depending on the trap cause. Set next_pc + + // branch_taken rather than this.pc directly: for a SYNCHRONOUS trap (ecall/ebreak, invoked + // from inside step()) this routes through the normal commit so the handler's FIRST + // instruction executes at mtvec, instead of the old code landing at mtvec+ilen and skipping + // it. For the ASYNCHRONOUS path (checkForInterrupts, before the fetch) executeInstruction + // commits next_pc to pc before fetching. + // MTVEC bits [1:0] are the MODE field, not part of the address — they must be masked off the + // target. Only vectored interrupts add an offset; exceptions and direct-mode interrupts go to + // BASE = mtvec & ~3. The old code jumped to the raw mtvec, so a vectored mtvec (e.g. RP2350 + // firmware sets 0x20000001) sent an exception/EBREAK to the odd address 0x20000001 -> fetch of a + // misaligned "instruction 0" -> crash. (c1570 masked this by accident: its sync-trap path landed + // at mtvec+ilen = 0x20000003, which happened to decode.) + const mtvec = this.getCSR(0x305, 0); + const mtvecBase = mtvec & ~0b11; + if(mcause >> 31) { + if((mtvec & 1) == 0) { + this.next_pc = mtvecBase; // direct mode: all interrupts to BASE + } else { + this.next_pc = mtvecBase + ((mcause & 0b1111) << 2); // vectored mode + } + } else { + this.next_pc = mtvecBase; // exceptions always go to BASE, even in vectored mode + } + this.branch_taken = true; + this.cycles += 2; + } + + // Hazard3 branch predictor + private btb: number = -1; + public h3_branch_cycles(taken: boolean) { + const from_pc = this.pc; + const to_pc = this.next_pc; + const jumped_back = to_pc < from_pc; + if(from_pc === this.btb) { + if(taken && jumped_back) return; // predictor hit + // known branch mispredicted + this.btb = -1; + this.cycles++; + return; + } + if(taken) { + this.cycles++; + if(jumped_back) this.btb = from_pc; // new backwards branch + } + } + + private executeR_Type(instruction: R_Type) { + + const { opcode, func3 } = instruction; + + // Get func3 lookup table for R_Type instructions + const funcTable = r_TypeOpcodeTable.get(opcode); + + const operation = funcTable?.get(func3); + + if (operation !== undefined) { + operation(instruction, this); + } else { + throw Error(`Invalid Instruction opcode 0x${opcode.toString(16)}, func3 ${func3}`); + } + } + + private executeI_Type(instruction: I_Type) { + const { opcode, func3 } = instruction; + + // Get func3 lookup table for I_Type instructions + const funcTable = i_TypeOpcodeTable.get(opcode); + + const operation = funcTable?.get(func3); + + if (operation !== undefined) { + operation(instruction, this); + } else { + throw Error(`Invalid Instruction opcode 0x${opcode.toString(16)}, func3 ${func3}`); + } + + } + + private executeS_Type(instruction: S_Type) { + + const { opcode, func3 } = instruction; + + // Get func3 lookup table for S_Type instructions + const funcTable = s_TypeOpcodeTable.get(opcode); + + const operation = funcTable?.get(func3); + + if (operation !== undefined) { + operation(instruction, this); + } else { + throw Error(`Invalid Instruction opcode 0x${opcode.toString(16)}, func3 ${func3}`); + } + } + + private executeB_Type(instruction: B_Type) { + + const { opcode, func3 } = instruction; + + // Get func3 lookup table for B_Type instructions + const funcTable = b_TypeOpcodeTable.get(opcode); + + const operation = funcTable?.get(func3); + + if (operation !== undefined) { + operation(instruction, this); + } else { + throw Error(`Invalid Instruction opcode 0x${opcode.toString(16)}, func3 ${func3}`); + } + + } + + private executeU_Type(instruction: U_Type) { + const { opcode } = instruction; + + // Get lookup table for U_Type instructions + const operation = u_TypeOpcodeTable.get(opcode); + + if (operation !== undefined) { + operation(instruction, this); + } else { + throw Error(`Invalid Instruction opcode 0x${opcode.toString(16)}`); + } + } + + private executeJ_Type(instruction: J_Type) { + const { opcode } = instruction; + + // Get lookup table for J_Type instructions + const operation = j_TypeOpcodeTable.get(opcode); + + if (operation !== undefined) { + operation(instruction, this); + } else { + throw Error(`Invalid Instruction opcode 0x${opcode.toString(16)}`); + } + } + + private executeCustom0_Type(instruction: number) { + const c_ident = instruction & 0b11100010000000000111000001111111; + if(c_ident === 0b00000000000000000000000000001011) { // h3.bextm + const size = (instruction >>> 26) & 0b111; + const rs2 = (instruction >>> 20) & 0b11111; + const rs1 = (instruction >>> 15) & 0b11111; + const rd = (instruction >>> 7) & 0b11111; + let value = this.registerSet.getRegisterU(rs1) >>> this.registerSet.getRegisterU(rs2); + value &= (2 << size) - 1; + this.registerSet.setRegisterU(rd, value); + } else if(c_ident === 0b00000000000000000100000000001011) { // h3.bextmi + const size = (instruction >>> 26) & 0b111; + const rs2 = (instruction >>> 20) & 0b11111; + const rs1 = (instruction >>> 15) & 0b11111; + const rd = (instruction >>> 7) & 0b11111; + let value = this.registerSet.getRegisterU(rs1) >>> rs2; + value &= (2 << size) - 1; + this.registerSet.setRegisterU(rd, value); + } else { + throw Error(`Invalid Instruction opcode 0x${instruction.toString(16)}`); + } + } + + setCSR(csr: number, value: number, raw_write: number) { + // raw_write: instruction raw write value, used for Xh3irq interrupt array indices + value >>>= 0; raw_write >>>= 0; + switch(csr) { + case 0x300: // MSTATUS + if((value & ~this.csrs[csr]) & 0b1000) this.interruptsUpdated = true; // MSTATUS.MIE has been set + this.csrs[csr] = value; + return; + case 0x305: // MTVEC + this.csrs[csr] = value; + return; + case 0x304: // MIE + if(value & ~this.csrs[csr]) this.interruptsUpdated = true; // any bit in MIE has been set + this.csrs[csr] = value; + return; + case 0x301: + case 0x30a: + case 0x310: + case 0x31a: + case 0x323: case 0x324: case 0x325: case 0x326: case 0x327: case 0x328: case 0x329: case 0x32a: case 0x32b: case 0x32c: case 0x32d: case 0x32e: case 0x32f: + case 0x330: case 0x331: case 0x332: case 0x333: case 0x334: case 0x335: case 0x336: case 0x337: case 0x338: case 0x339: case 0x33a: case 0x33b: case 0x33c: case 0x33d: case 0x33e: case 0x33f: + case 0x343: + case 0x3b8: case 0x3b9: case 0x3ba: case 0x3bb: case 0x3bc: case 0x3bd: case 0x3be: case 0x3bf: + return; + case 0x340: + case 0x341: + case 0x342: + this.csrs[csr] = value; + return; + //TODO + case 0xbe0: { // MEIEA + let state = value >>> 16; + for(let irq = (raw_write & 0b11111) * 16; irq < (raw_write & 0b11111) * 16 + 16; irq++) { this.setInterruptEnabled(irq, !!(state & 1)); state >>= 1; } + return; } + case 0xbe1: return; // MEIPA + case 0xbe2: { // MEIFA + let state = value >>> 16; + for(let irq = (raw_write & 0b11111) * 16; irq < (raw_write & 0b11111) * 16 + 16; irq++) { + const forced = state & 1; + this.meifa[irq] = forced; + if(forced) this.setInterrupt(irq, true); + else if(irq >= 46) this.setInterrupt(irq, false); + state >>= 1; + } + return; } + case 0xbe3: { // MEIPRA + let state = value >>> 16; + for(let irq = (raw_write & 0b11111) * 4; irq < (raw_write & 0b11111) * 4 + 4; irq++) { + this.meipra[irq] = state & 0b1111; + if(this.meipa[irq]) { + this.setInterrupt(irq, false); + this.setInterrupt(irq, true); + } + state >>= 4; + } + return; } + case 0xbe4: { // MEINEXT + if(value & 1) { // MEINEXT.UPDATE set + this.updateMEICONTEXT_update(); + this.updateMEINEXT(); + this.interruptsUpdated = true; + } + return; } + case 0xbe5: // MEICONTEXT - note MTIESAVE/MSIESAVE/CLEARTS writes are a side effect of getCTS here + this.csrs[csr] = value; + this.updateMEINEXT(); + this.interruptsUpdated = true; + return; + //TODO + case 0xc00: + case 0xc02: + case 0xc80: + case 0xc82: + case 0xf11: case 0xf12: case 0xf13: case 0xf14: + return; + } + this.logger.info(this.coreLabel, `Unknown CSR set: 0x${value.toString(16)} => 0x${csr.toString(16)}`); + this.csrs[csr] = value; + } + + getCSR(csr: number, raw_write: number): number { + raw_write >>>= 0; + // raw_write: instruction raw write value, used for Xh3irq interrupt array indices + // MSLEEP 0xbf0 + switch(csr) { + case 0xf14: return this.mhartid; + case 0x300: // MSTATUS + case 0x301: + case 0x302: + case 0x303: + case 0x304: // MIE + case 0x305: // MTVEC + case 0x340: // MSCRATCH + case 0x341: + case 0x342: + case 0x343: + case 0x344: + case 0xbf0: return this.csrs[csr]; + case 0xbe0: return (this.meiea.slice((raw_write & 0b11111) * 16, (raw_write & 0b11111) * 16 + 16).reduceRight((acc, val) => (acc << 1) | val, 0) << 16) >>> 0; + case 0xbe1: return (this.meipa.slice((raw_write & 0b11111) * 16, (raw_write & 0b11111) * 16 + 16).reduceRight((acc, val) => (acc << 1) | val, 0) << 16) >>> 0; + case 0xbe2: return (this.meifa.slice((raw_write & 0b11111) * 16, (raw_write & 0b11111) * 16 + 16).reduceRight((acc, val) => (acc << 1) | val, 0) << 16) >>> 0; + case 0xbe3: return (this.meipra.slice((raw_write & 0b11111) * 4, (raw_write & 0b11111) * 4 + 4).reduceRight((acc, val) => (acc << 4) | val, 0) << 16) >>> 0; + case 0xbe4: + const meinext = this.csrs[csr] >>> 0; + if(!(meinext >> 31)) { + // reading MEINEXT clears MEIFA bits + const irq = (meinext >> 2) & 511; + const old_forced = this.meifa[irq]; + this.meifa[irq] = 0; + if(irq >= 46 && old_forced) this.setInterrupt(irq, false); // for soft irqs, removing MEIFA will deassert the irq + //TODO deassert lower irqs as well? + } + return meinext; + case 0xbe5: + let meicontext = this.csrs[0xbe5]; + if(raw_write & 0b0010) { // write to CLEARTS + meicontext &= ~0b1110; + meicontext |= ((this.csrs[0x304] >>> 7) & 1) << 3; // MTIE + meicontext |= ((this.csrs[0x304] >>> 3) & 1) << 2; // MSIE + this.csrs[0x304] &= ~(0b10001000); // clear MIE.MTIE and MSIE + } else { + if(raw_write & 0b1000) this.csrs[0x304] |= 1<<7; // write to MTIESAVE: set MIE.MTIE + if(raw_write & 0b0100) this.csrs[0x304] |= 1<<3; // write to MSIESAVE: set MIE.MSIE + } + return meicontext; + } + this.logger.info(this.coreLabel, `Unknown CSR get: 0x${csr.toString(16)}`); + return this.csrs[csr]; + } + +} + +function signExtend8(value: number) { + return (value << 24) >> 24; +} + +function signExtend16(value: number) { + return (value << 16) >> 16; +} + +export class RegisterSet { + + private registerBuffer: ArrayBuffer; + private registerView: DataView; + + constructor(numRegisters: number) { + this.registerBuffer = new ArrayBuffer(numRegisters * 4); + this.registerView = new DataView(this.registerBuffer); + } + + getRegister(index: number): number { + if (index === 0) { + return 0; + } + + return this.registerView.getInt32(index * 4, true); + } + + getRegisterU(index: number): number { + if (index === 0) { + return 0; + } + + return this.registerView.getUint32(index * 4, true); + } + + setRegister(index: number, value: number): void { + if (index === 0) { + return; + } + + this.registerView.setInt32(index * 4, value, true); + } + + setRegisterU(index: number, value: number): void { + if (index === 0) { + return; + } + + this.registerView.setUint32(index * 4, value, true); + } + +} + +type OpcodeTable = Map void>; +type OpcodeFuncTable = Map void>>; +type FuncTable = Map void>; + +const opcode0x03func3Table: FuncTable = new Map([ + [0x0, (instruction: I_Type, cpu: CPU) => { // lb + const { registerSet, chip } = cpu; + const { rd, rs1, imm } = instruction; + const rs1Value = registerSet.getRegisterU(rs1); + + const byte = signExtend8(chip.readUint8(rs1Value + imm)); + registerSet.setRegister(rd, byte); + }], + + [0x1, (instruction: I_Type, cpu: CPU) => { // lh + const { registerSet, chip } = cpu; + const { rd, rs1, imm } = instruction; + const rs1Value = registerSet.getRegisterU(rs1); + + const half = signExtend16(chip.readUint16(rs1Value + imm)); + registerSet.setRegister(rd, half); + }], + + [0x2, (instruction: I_Type, cpu: CPU) => { // lw + const { registerSet, chip } = cpu; + const { rd, rs1, imm } = instruction; + const rs1Value = registerSet.getRegisterU(rs1); + + const word = chip.readUint32(rs1Value + imm); + registerSet.setRegisterU(rd, word); + }], + + [0x4, (instruction: I_Type, cpu: CPU) => { // lbu + const { registerSet, chip } = cpu; + const { rd, rs1, imm } = instruction; + const rs1Value = registerSet.getRegisterU(rs1); + + const byte = chip.readUint8(rs1Value + imm); + registerSet.setRegister(rd, byte); + }], + + [0x5, (instruction: I_Type, cpu: CPU) => { // lhu + const { registerSet, chip } = cpu; + const { rd, rs1, imm } = instruction; + const rs1Value = registerSet.getRegisterU(rs1); + + const half = chip.readUint16(rs1Value + imm); + registerSet.setRegister(rd, half); + }], +]); + +const opcode0x0ffunc3Table: FuncTable = new Map([ + [0x0, (instruction: I_Type, cpu: CPU) => { // TODO FENCE + const { registerSet, chip } = cpu; + const { rd, rs1, imm } = instruction; + const rs1Value = registerSet.getRegister(rs1); + + //console.log("FENCE not implemented"); + }], + [0x1, (instruction: I_Type, cpu: CPU) => { // TODO FENCE.I + const { registerSet, chip } = cpu; + const { rd, rs1, imm } = instruction; + const rs1Value = registerSet.getRegister(rs1); + + //console.log("FENCE.I not implemented"); + }], +]); + +const opcode0x13func3Table: FuncTable = new Map([ + [0x0, (instruction: I_Type, cpu: CPU) => { // addi + const { rd, rs1, imm } = instruction; + const { registerSet } = cpu; + + const rs1Value = registerSet.getRegisterU(rs1); + + const result = (rs1Value + imm) >>> 0; // make sure 0x80000000 - 1 works + + registerSet.setRegisterU(rd, result); + }], + + [0x1, (instruction: I_Type, cpu: CPU) => { + const { rd, rs1, func7, immU, shamt } = instruction; + const { registerSet } = cpu; + + if (func7 === 0) { // slli + const rs1Value = registerSet.getRegisterU(rs1); + const result = rs1Value << shamt; + registerSet.setRegisterU(rd, result); + } else if (func7 === 0x14) { // bseti (Zbb) + const rs1Value = registerSet.getRegister(rs1); + const result = rs1Value | ( 1 << shamt); + registerSet.setRegister(rd, result); + } else if (func7 === 0x24) { // bclri (Zbs) + const rs1Value = registerSet.getRegister(rs1); + const result = rs1Value & ~(1 << shamt); + registerSet.setRegister(rd, result); + } else if (func7 === 0x34) { // binvi (Zbs) + const rs1Value = registerSet.getRegister(rs1); + const result = rs1Value ^ (1 << shamt); + registerSet.setRegister(rd, result); + } else if (immU === 0b011000000001) { // ctz (Zbb) + const rs1Value = registerSet.getRegister(rs1); + let tmp = rs1Value >>> 0; + if (tmp === 0) { + registerSet.setRegister(rd, 32); + } else { + tmp &= -tmp; + tmp = 31 - Math.clz32(tmp); + registerSet.setRegister(rd, tmp); + } + } else if (immU === 0b011000000010) { // cpop (Zbb) + const rs1Value = registerSet.getRegister(rs1); + let tmp = rs1Value >>> 0; + tmp = tmp - ((tmp >> 1) & 0x55555555); + tmp = (tmp & 0x33333333) + ((tmp >> 2) & 0x33333333); + tmp = ((tmp + (tmp >> 4) & 0xF0F0F0F) * 0x1010101) >> 24; + registerSet.setRegister(rd, tmp); + } else if (immU === 0b011000000101) { // sext.h (Zbb) + const rs1Value = registerSet.getRegisterU(rs1); + const value = signExtend16(rs1Value & 0xffff); + registerSet.setRegister(rd, value); + } else if (immU === 0b011000000100) { // sext.b (Zbb) + const rs1Value = registerSet.getRegisterU(rs1); + const value = signExtend8(rs1Value & 0xff); + registerSet.setRegister(rd, value); + } else if ((instruction.binary & 0b11111111111100000111000001111111) === + 0b01100000000000000001000000010011) { // clz (Zbb) + const rs1Value = registerSet.getRegisterU(rs1); + const lzc = Math.clz32(rs1Value); + registerSet.setRegister(rd, lzc); + } else throw Error(`Unknown instruction, func7: 0x${func7.toString(16)}`); + }], + + [0x2, (instruction: I_Type, cpu: CPU) => { // slti + const { rd, rs1, imm } = instruction; + const { registerSet } = cpu; + + const rs1Value = registerSet.getRegister(rs1); + + const result = rs1Value < imm ? 1 : 0; + registerSet.setRegister(rd, result); + }], + + [0x3, (instruction: I_Type, cpu: CPU) => { // sltiu + const { rd, rs1, imm } = instruction; + const { registerSet } = cpu; + + const rs1Value = registerSet.getRegisterU(rs1); + + // The 12-bit immediate is SIGN-extended to XLEN, then both operands compared as unsigned. + // The old code compared against the zero-extended `immU` (0..4095), wrong for any negative + // immediate (e.g. `sltiu rd, rs1, -1` must compare against 0xFFFFFFFF, not 4095). + const result = (rs1Value >>> 0) < (imm >>> 0) ? 1 : 0; + registerSet.setRegister(rd, result); + }], + + [0x4, (instruction: I_Type, cpu: CPU) => { // xori + const { rd, rs1, imm } = instruction; + const { registerSet } = cpu; + + const rs1Value = registerSet.getRegister(rs1); + + const result = rs1Value ^ imm; + + registerSet.setRegister(rd, result); + }], + + [0x5, (instruction: I_Type, cpu: CPU) => { + const { rd, rs1, imm, func7, shamt } = instruction; + const { registerSet } = cpu; + + const rs1Value = registerSet.getRegister(rs1); + + if (func7 === 0x00) { // srli + const result = rs1Value >>> shamt; + registerSet.setRegister(rd, result); + + } else if (func7 === 0x20) { // srai + const result = rs1Value >> shamt; + registerSet.setRegister(rd, result); + + } else if (func7 === 0x24) { // bexti (Zbs) + const result = (rs1Value >>> shamt) & 1; + registerSet.setRegister(rd, result); + + } else if (func7 === 0x30) { // rori (Zbs) + const rs1Val = registerSet.getRegisterU(rs1); + const result = ((rs1Val << (32 - shamt)) >>> 0) | (rs1Val >>> shamt); + registerSet.setRegister(rd, result); + + } else if (func7 === 0x34) { // rev8 (Zbb) + const result = (rs1Value >>> 24) | ((rs1Value >>> 8) & 0xff00) | ((rs1Value << 8) & 0xff0000) | (((rs1Value & 0xff) << 24) >>> 0); + registerSet.setRegisterU(rd, result >>> 0); + + } else throw Error(`Unknown instruction, func7: 0x${func7.toString(16)}`); + }], + + [0x6, (instruction: I_Type, cpu: CPU) => { // ori + const { rd, rs1, imm } = instruction; + const { registerSet } = cpu; + + const rs1Value = registerSet.getRegister(rs1); + + const result = rs1Value | imm; + registerSet.setRegister(rd, result); + }], + + [0x7, (instruction: I_Type, cpu: CPU) => { // andi + const { rd, rs1, imm } = instruction; + const { registerSet } = cpu; + + const rs1Value = registerSet.getRegister(rs1); + + const result = rs1Value & imm; + registerSet.setRegister(rd, result); + }], +]); + +const opcode0x23func3Table: FuncTable = new Map([ + [0x0, (instruction: S_Type, cpu: CPU) => { + const { rs1, rs2, imm } = instruction; + const { registerSet, chip } = cpu; + + const rs1Value = registerSet.getRegister(rs1); + const rs2Value = registerSet.getRegister(rs2); + + const byte = getRange(rs2Value, 7, 0); + + chip.writeUint8(rs1Value + imm, byte); //CHECK Int8? + }], + + [0x1, (instruction: S_Type, cpu: CPU) => { + const { rs1, rs2, imm } = instruction; + const { registerSet, chip } = cpu; + + const rs1Value = registerSet.getRegister(rs1); + const rs2Value = registerSet.getRegister(rs2); + + const half = getRange(rs2Value, 15, 0); + + chip.writeUint16(rs1Value + imm, half); //CHECK Int16? + }], + + [0x2, (instruction: S_Type, cpu: CPU) => { + const { rs1, rs2, imm } = instruction; + const { registerSet, chip } = cpu; + + const rs1Value = registerSet.getRegister(rs1); + const rs2Value = registerSet.getRegister(rs2); + + chip.writeUint32(rs1Value + imm, rs2Value); //CHECK Int32? + }], +]); + +const opcode0x2ffunc3Table: FuncTable = new Map([ + [0x2, (instruction: R_Type, cpu: CPU) => { + + const { rd, rs1, rs2, func7 } = instruction; + const { registerSet, chip } = cpu; + + const rs1Value = registerSet.getRegisterU(rs1); + const rs2Value = registerSet.getRegisterU(rs2); + if (func7 === 0x4) { // amoswap.w (rv32a) + // 08a5a52f amoswap.w a0,a0,(a1) + const rs1Mem = chip.readUint32(rs1Value); + const value = rs2Value; + registerSet.setRegisterU(rd, rs1Mem); + chip.writeUint32(rs1Value, value); + cpu.cycles += 3; + } else if (func7 === 0x22 || func7 === 0x20) { // amoor.w.aq and amoor.w (rv32a) + // 44e7a6af amoor.w.aq a3,a4,(a5) + // 40c3a52f amoor.w a0,a2,(t2) + const rs1Mem = chip.readUint32(rs1Value); + registerSet.setRegisterU(rd, rs1Mem); + const value = rs1Mem | rs2Value; + chip.writeUint32(rs1Value, value); + cpu.cycles += 3; + } else if (func7 === 0x30) { // amoand.w (rv32a) + // 60b7a02f amoand.w zero,a1,(a5) + const rs1Mem = chip.readUint32(rs1Value); + registerSet.setRegisterU(rd, rs1Mem); + const value = rs1Mem & rs2Value; + chip.writeUint32(rs1Value, value); + cpu.cycles += 3; + } else throw Error(`Unknown instruction, func7: 0x${func7.toString(16)}`); + }], +]); + +const opcode0x33func3Table: FuncTable = new Map([ + [0x0, (instruction: R_Type, cpu: CPU) => { + + const { rd, rs1, rs2, func7 } = instruction; + const { registerSet } = cpu; + + const rs1Value = registerSet.getRegister(rs1); + const rs2Value = registerSet.getRegister(rs2); + + if (func7 === 0x00) { + const sum = rs1Value + rs2Value; + registerSet.setRegister(rd, sum); + + } else if (func7 === 0x20) { + const difference = registerSet.getRegister(rs1) - registerSet.getRegister(rs2); + registerSet.setRegister(rd, difference); + } else if (func7 === 0x1) { // mul (rv32m) + // Exact low-32 product. A JS float64 multiply rounds for any product > 2^53, so the low + // bits the `& 0xffffffff` mask extracted were already corrupted (~95% of random operand + // pairs wrong). Math.imul does an exact modular 32x32 multiply; the low word is identical + // for signed/unsigned operands, so the old "FIXME check sign" was a non-issue. + registerSet.setRegister(rd, Math.imul(rs1Value, rs2Value)); + } else throw Error(`Unknown instruction, func7: 0x${func7.toString(16)}`); + + }], + + [0x1, (instruction: R_Type, cpu: CPU) => { + const { rd, rs1, rs2, func7 } = instruction; + const { registerSet } = cpu; + + const rs1Value = registerSet.getRegister(rs1); + const rs2Value = registerSet.getRegisterU(rs2); + + if(func7 === 0) { // sll + const result = rs1Value << rs2Value; + registerSet.setRegister(rd, result); + } else if(func7 === 0x1) { // mulh (rv32m) + // Upper 32 bits of the signed*signed 64-bit product. The old `* / 2^32 >>> 0` form was + // wrong twice over: float64 loses precision above 2^53, and `>>> 0` truncates toward zero + // instead of flooring, so it returned 0 for every small negative product. BigInt is exact + // and sign-correct. + const product = BigInt(rs1Value) * BigInt(registerSet.getRegister(rs2)); + registerSet.setRegisterU(rd, Number((product >> BigInt(32)) & BigInt(0xffffffff))); + } else if(func7 === 0x14) { // bset (Zbs) + const index = rs2Value & 31; + const result = rs1Value | (1 << index); + registerSet.setRegister(rd, result); + } else if(func7 === 0x24) { // bclr (Zbs) + const index = rs2Value & 31; + const result = rs1Value & ~(1 << index); + registerSet.setRegister(rd, result); + } else throw Error(`Unknown instruction, func7: 0x${func7.toString(16)}`); + }], + + [0x2, (instruction: R_Type, cpu: CPU) => { + const { rd, rs1, rs2, func7 } = instruction; + const { registerSet } = cpu; + + const rs1Value = registerSet.getRegister(rs1); + const rs2Value = registerSet.getRegister(rs2); + + if(func7 === 0) { // slt + if(rd === 0 && rs1 === 0) { + if(rs2 === 0) { // h3.block (Xh3power) - slt x0, x0, x0 + if(!cpu.eventRegistered) { + cpu.waiting = true; + return; + } else { + cpu.eventRegistered = false; + return; + } + } else if(rs2 === 1) { // h3.unblock (Xh3power) - slt x0, x0, x1 + if(cpu.onSEV) cpu.onSEV(); + return; + } + } + const result = rs1Value < rs2Value ? 1 : 0; + registerSet.setRegister(rd, result); + } else if(func7 === 0x10) { // sh1add (Zbb) + const result = ((rs1Value << 1) + rs2Value) & 0xffffffff; + registerSet.setRegister(rd, result); + } else if(func7 === 0x1) { // mulhsu (rv32m) - upper 32 bits of signed(rs1) * unsigned(rs2) + // Was entirely missing from this func3=0x2 handler, so a MULHSU fell through to `throw` + // and HARD-ABORTED the core. MULHSU is mandatory in the M extension (Hazard3 implements + // it) and GCC emits it for mixed-sign 64-bit multiplies. rs1 signed, rs2 unsigned. + const product = BigInt(rs1Value) * BigInt(registerSet.getRegisterU(rs2)); + registerSet.setRegisterU(rd, Number((product >> BigInt(32)) & BigInt(0xffffffff))); + } else throw Error(`Unknown instruction, func7: 0x${func7.toString(16)}`); + }], + + [0x3, (instruction: R_Type, cpu: CPU) => { + const { rd, rs1, rs2, func7 } = instruction; + const { registerSet } = cpu; + + const rs1Value = registerSet.getRegisterU(rs1); + const rs2Value = registerSet.getRegisterU(rs2); + + if(func7 === 0) { + const result = rs1Value < rs2Value ? 1 : 0; + registerSet.setRegister(rd, result); + } else if(func7 === 1) { // mulhu (rv32m) + // Upper 32 bits of the unsigned*unsigned 64-bit product. Float64 division lost precision + // near 2^32 boundaries (off-by-one high word). BigInt is exact. + const product = BigInt(rs1Value >>> 0) * BigInt(rs2Value >>> 0); + registerSet.setRegisterU(rd, Number((product >> BigInt(32)) & BigInt(0xffffffff))); + } else throw Error(`Unknown instruction, func7: 0x${func7.toString(16)}`); + }], + + [0x4, (instruction: R_Type, cpu: CPU) => { + const { rd, rs1, rs2, func7 } = instruction; + const { registerSet } = cpu; + + const rs1Value = registerSet.getRegister(rs1); + const rs2Value = registerSet.getRegister(rs2); + + if(func7 === 0) { + const result = rs1Value ^ rs2Value; + registerSet.setRegister(rd, result); + } else if(func7 === 0x1) { // div (rv32m) + if(rs2Value === 0) { + registerSet.setRegisterU(rd, 0xffffffff); + } else if((rs1Value >>> 0) === 0x80000000 && (rs2Value >>> 0) === 0xffffffff) { + registerSet.setRegisterU(rd, 0x80000000); + } else { + const result = (rs1Value / rs2Value) | 0; + registerSet.setRegister(rd, result); + } + cpu.cycles += 17; + } else if(func7 === 0x10) { // sh2add (Zbb) + const result = ((rs1Value << 2) + rs2Value) & 0xffffffff; + registerSet.setRegister(rd, result); + } else if(func7 === 0x4) { // PACK (Zbkb) + const result = (rs1Value & 0xffff) | ((rs2Value & 0xffff) << 16); + registerSet.setRegister(rd, result); + } else if(func7 === 0x5) { // MIN (Zbb) + const result = rs1Value < rs2Value ? rs1Value : rs2Value; + registerSet.setRegister(rd, result); + } else if(func7 === 0x20) { // XNOR (Zbb) + const result = (~rs1Value) ^ rs2Value; + registerSet.setRegister(rd, result); + } else throw Error(`Unknown instruction, func7: 0x${func7.toString(16)}`); + }], + + [0x5, (instruction: R_Type, cpu: CPU) => { + const { rd, rs1, rs2, func7 } = instruction; + const { registerSet } = cpu; + + const rs1Value = registerSet.getRegister(rs1); + const rs2Value = registerSet.getRegister(rs2); + + if (func7 === 0x00) { + const result = rs1Value >>> rs2Value; + registerSet.setRegister(rd, result); + } else if (func7 === 0x5) { // minu (Zbb) + const r1 = rs1Value >>> 0; + const r2 = rs2Value >>> 0; + const result = r1 < r2 ? r1 : r2; + registerSet.setRegister(rd, result); + } else if (func7 === 0x20) { + const result = rs1Value >> rs2Value; + registerSet.setRegister(rd, result); + } else if (func7 === 0x24) { // bext (Zbs) + const result = (rs1Value >>> (rs2Value & 31)) & 1; + registerSet.setRegister(rd, result); + } else if (func7 === 0x01) { // divu (rv32m) + if(rs2Value === 0) { + registerSet.setRegisterU(rd, 0xffffffff); + } else { + const result = ((rs1Value >>> 0) / (rs2Value >>> 0)) >>> 0; + registerSet.setRegister(rd, result); + } + cpu.cycles += 17; + } else throw Error(`Unknown instruction, func7: 0x${func7.toString(16)}`); + + }], + + [0x6, (instruction: R_Type, cpu: CPU) => { + const { rd, rs1, rs2, func7 } = instruction; + const { registerSet } = cpu; + + const rs1Value = registerSet.getRegister(rs1); + const rs2Value = registerSet.getRegister(rs2); + + if(func7 === 0) { // OR + const result = rs1Value | rs2Value; + registerSet.setRegister(rd, result); + } else if(func7 === 0x1) { // REM (RV32M) + // 02c6e6b3 rem a3,a3,a2 + const result = (rs2Value === 0) ? rs1Value : (rs1Value % rs2Value); + registerSet.setRegister(rd, result); + cpu.cycles += 17; + } else if(func7 === 0x5) { // MAX (Zbb) + const result = rs1Value > rs2Value ? rs1Value : rs2Value; + registerSet.setRegister(rd, result); + } else if(func7 === 0x20) { // ORN (Zbb) + const result = rs1Value | ~rs2Value; + registerSet.setRegister(rd, result); + } else if(func7 === 0x10) { // sh3add (Zbb) + const result = ((rs1Value << 3) + rs2Value) & 0xffffffff; + registerSet.setRegister(rd, result); + } else throw Error(`Unknown instruction, func7: 0x${func7.toString(16)}`); + }], + + [0x7, (instruction: R_Type, cpu: CPU) => { + const { rd, rs1, rs2, func7 } = instruction; + const { registerSet } = cpu; + + const rs1Value = registerSet.getRegister(rs1); + const rs2Value = registerSet.getRegister(rs2); + + if(func7 === 0) { // AND + const result = rs1Value & rs2Value; + registerSet.setRegister(rd, result); + } else if(func7 === 0x20) { // ANDN (Zbb) + const result = rs1Value & ~rs2Value; + registerSet.setRegister(rd, result); + } else if(func7 === 0x4) { // PACKH (Zbkb) + const result = (rs1Value & 0xff) | ((rs2Value & 0xff) << 8); + registerSet.setRegister(rd, result); + } else if(func7 === 0x5) { // MAXU (Zbb) + const result = (rs1Value >>> 0) > (rs2Value >>> 0) ? rs1Value : rs2Value; + registerSet.setRegisterU(rd, result >>> 0); + } else if(func7 === 0x1) { // REMU (RV32M) + const result = (rs2Value === 0) ? rs1Value : ((rs1Value >>> 0) % (rs2Value >>> 0)); + registerSet.setRegisterU(rd, result >>> 0); + cpu.cycles += 17; + } else throw Error(`Unknown instruction, func7: 0x${func7.toString(16)}`); + }], + +]); + +const opcode0x63func3Table: FuncTable = new Map([ + [0x0, (instruction: B_Type, cpu: CPU) => { + const { rs1, rs2, imm } = instruction; + const { registerSet } = cpu; + + const rs1Value = registerSet.getRegister(rs1); + const rs2Value = registerSet.getRegister(rs2); + + const do_branch = rs1Value === rs2Value; + if (do_branch) { + cpu.next_pc = cpu.pc + imm; + cpu.branch_taken = true; + } + cpu.h3_branch_cycles(do_branch); + }], + + [0x1, (instruction: B_Type, cpu: CPU) => { + const { rs1, rs2, imm } = instruction; + const { registerSet } = cpu; + + const rs1Value = registerSet.getRegister(rs1); + const rs2Value = registerSet.getRegister(rs2); + + const do_branch = rs1Value !== rs2Value; + if (do_branch) { + cpu.next_pc = cpu.pc + imm; + cpu.branch_taken = true; + } + cpu.h3_branch_cycles(do_branch); + }], + + [0x4, (instruction: B_Type, cpu: CPU) => { + const { rs1, rs2, imm } = instruction; + const { registerSet } = cpu; + + const rs1Value = registerSet.getRegister(rs1); + const rs2Value = registerSet.getRegister(rs2); + + const do_branch = rs1Value < rs2Value; + if (do_branch) { + cpu.next_pc = cpu.pc + imm; + cpu.branch_taken = true; + } + cpu.h3_branch_cycles(do_branch); + }], + + [0x5, (instruction: B_Type, cpu: CPU) => { + const { rs1, rs2, imm } = instruction; + const { registerSet } = cpu; + + const rs1Value = registerSet.getRegister(rs1); + const rs2Value = registerSet.getRegister(rs2); + + const do_branch = rs1Value >= rs2Value; + if (do_branch) { + cpu.next_pc = cpu.pc + imm; + cpu.branch_taken = true; + } + cpu.h3_branch_cycles(do_branch); + }], + + [0x6, (instruction: B_Type, cpu: CPU) => { + const { rs1, rs2, imm } = instruction; + const { registerSet } = cpu; + + const rs1Value = registerSet.getRegisterU(rs1); + const rs2Value = registerSet.getRegisterU(rs2); + + const do_branch = rs1Value < rs2Value; + if (do_branch) { + cpu.next_pc = cpu.pc + imm; + cpu.branch_taken = true; + } + cpu.h3_branch_cycles(do_branch); + }], + + [0x7, (instruction: B_Type, cpu: CPU) => { + const { rs1, rs2, imm } = instruction; + const { registerSet } = cpu; + + const rs1Value = registerSet.getRegisterU(rs1); + const rs2Value = registerSet.getRegisterU(rs2); + + const do_branch = rs1Value >= rs2Value; + if (do_branch) { + cpu.next_pc = cpu.pc + imm; + cpu.branch_taken = true; + } + cpu.h3_branch_cycles(do_branch); + }], +]); + +const opcode0x67func3Table: FuncTable = new Map([ + [0x0, (instruction: I_Type, cpu: CPU) => { + const { rd, rs1, imm } = instruction; + const { registerSet } = cpu; + + const rs1Value = registerSet.getRegister(rs1); + + registerSet.setRegister(rd, cpu.pc + cpu.inst_length); + // JALR: target = (rs1 + imm) with bit 0 forced to zero (spec). The mask was missing. + cpu.next_pc = (rs1Value + imm) & ~1; + cpu.branch_taken = true; + cpu.cycles++; + }] +]); + +const opcode0x73func3Table: FuncTable = new Map([ + [0x0, (instruction: I_Type, cpu: CPU) => { + let mstatus = 0; + switch(instruction.binary) { + case 0x30200073: // mret + // TODO Restore core privilege level to the value of MSTATUS.MPP + mstatus = cpu.getCSR(0x300, 0); + mstatus &= ~(3<<11); // Write 0 (U-mode) to MSTATUS.MPP + mstatus &= ~0b1000; mstatus |= (mstatus >>> 4) & 0b1000; // Restore MSTATUS.MIE from MSTATUS.MPIE + mstatus |= 1<<7; // Write 1 to MSTATUS.MPIE + cpu.setCSR(0x300, mstatus, 0); + cpu.next_pc = cpu.getCSR(0x341, 0); // Jump to the address in MEPC. + cpu.branch_taken = true; + cpu.cycles++; + cpu.updateMEICONTEXT_priority_restore(); // Xh3irq + cpu.interruptsUpdated = true; + break; + case 0x73: // ecall + const u_mode = 0; //TODO + const reason = u_mode?0x8:0xb; + cpu.trapEntry(reason); + break; + case 0x100073: // ebreak + cpu.trapEntry(3); + break; + default: + throw Error(`Unknown instruction 0x${instruction.binary.toString(16)}`); + } + }], + [0x1, (instruction: I_Type, cpu: CPU) => { // csrrw, csrw + const { rd, rs1, immU } = instruction; // immU is csr + const { registerSet } = cpu; + const newValue = registerSet.getRegister(rs1); + if(rd != 0) { + const oldValue = cpu.getCSR(immU, newValue); + registerSet.setRegister(rd, oldValue); + } + cpu.setCSR(immU, newValue, newValue); + }], + [0x2, (instruction: I_Type, cpu: CPU) => { // csrrs, csrs, csrr + const { rd, rs1, immU } = instruction; // immU is csr + const { registerSet } = cpu; + const orValue = registerSet.getRegister(rs1); + const oldValue = cpu.getCSR(immU, orValue); + if(rs1 != 0) { + const newValue = oldValue | orValue; + cpu.setCSR(immU, newValue, orValue); + } + registerSet.setRegister(rd, oldValue); + }], + [0x3, (instruction: I_Type, cpu: CPU) => { // csrrc, csrc + const { rd, rs1, immU } = instruction; // immU is csr + const { registerSet } = cpu; + const notValue = registerSet.getRegister(rs1); + const oldValue = cpu.getCSR(immU, notValue); + const newValue = oldValue & (~notValue); + // Write-suppression is keyed on the source register INDEX (rs1 == x0), not its runtime + // value: a real register holding 0 must still perform the (value-preserving) CSR write + // and its side effects. Was `if(notValue != 0)`. Matches the csrrs handler. + if(rs1 != 0) { + cpu.setCSR(immU, newValue, notValue); + } + registerSet.setRegister(rd, oldValue); + }], + [0x5, (instruction: I_Type, cpu: CPU) => { // csrwi + const { rd, rs1, immU } = instruction; // rs1 is imm, immU is csr + const { registerSet } = cpu; + const newValue = rs1; + if(rd != 0) { + const oldValue = cpu.getCSR(immU, newValue); + registerSet.setRegister(rd, oldValue); + } + cpu.setCSR(immU, newValue, newValue); + }], + [0x6, (instruction: I_Type, cpu: CPU) => { // csrrsi, csrsi + const { rd, rs1, immU } = instruction; // rs1 is imm, immU is csr + const { registerSet } = cpu; + const oldValue = cpu.getCSR(immU, rs1); + if(rs1 != 0) { + const newValue = oldValue | rs1; + cpu.setCSR(immU, newValue, rs1); + } + registerSet.setRegister(rd, oldValue); + }], + [0x7, (instruction: I_Type, cpu: CPU) => { // csrrci, csrci + const { rd, rs1, immU } = instruction; // rs1 is imm, immU is csr + const { registerSet } = cpu; + const oldValue = cpu.getCSR(immU, rs1); + if(rs1 != 0) { + const newValue = oldValue & (~rs1); + cpu.setCSR(immU, newValue, rs1); + } + registerSet.setRegister(rd, oldValue); + }] +]); + +const r_TypeOpcodeTable: OpcodeFuncTable = new Map([ + [0x2f, opcode0x2ffunc3Table], + [0x33, opcode0x33func3Table] +]); + +const i_TypeOpcodeTable: OpcodeFuncTable = new Map([ + [0x03, opcode0x03func3Table], + [0x0f, opcode0x0ffunc3Table], + [0x13, opcode0x13func3Table], + [0x67, opcode0x67func3Table], + [0x73, opcode0x73func3Table] +]); + +const s_TypeOpcodeTable: OpcodeFuncTable = new Map([ + [0x23, opcode0x23func3Table] +]); + +const b_TypeOpcodeTable: OpcodeFuncTable = new Map([ + [0x63, opcode0x63func3Table] +]); + +const u_TypeOpcodeTable: OpcodeTable = new Map([ + [0x37, (instruction: U_Type, cpu: CPU) => { // lui + const { rd, immU } = instruction; + const { registerSet } = cpu; + + registerSet.setRegisterU(rd, immU); + }], + + [0x17, (instruction: U_Type, cpu: CPU) => { // auipc + const { rd, imm } = instruction; + const { registerSet } = cpu; + + registerSet.setRegister(rd, imm + cpu.pc); + }] +]); + +const j_TypeOpcodeTable: OpcodeTable = new Map([ + [0x6F, (instruction: J_Type, cpu: CPU) => { + const { rd, imm } = instruction; + const { registerSet } = cpu; + + registerSet.setRegister(rd, cpu.pc + cpu.inst_length); + + // test for profiler trace magic + const magicStart = cpu.pc + cpu.inst_length; + if((cpu.chip.readUint16(magicStart) === 0xabcd) && (cpu.chip.readUint16(magicStart + 2) === 0xffff)) { + let profTag = ""; + for(let i = magicStart + 4; 1; i++) { + let ch = cpu.chip.readUint8(i); + if(ch == 0) break; + profTag = profTag + String.fromCharCode(ch); + } + cpu.chip.onTrace(cpu.mhartid, cpu.pc, profTag); + } + + cpu.next_pc = cpu.pc + imm; + cpu.branch_taken = true; + cpu.cycles++; + }] +]); + +const opcodeTypeTable = new Map([ + [0x03, InstructionType.I], // LOAD + [0x0b, InstructionType.CUSTOM0], // H3.BEXTM + [0x0f, InstructionType.I], // MISC-MEM + [0x13, InstructionType.I], // OP-IMM + [0x17, InstructionType.U], // AUIPC + [0x23, InstructionType.S], // STORE + [0x2f, InstructionType.R], // AMO + [0x33, InstructionType.R], // OP + [0x37, InstructionType.U], // LUI + [0x63, InstructionType.B], // BRANCH + [0x67, InstructionType.I], // JALR + [0x6F, InstructionType.J], // ? + [0x73, InstructionType.I], // SYSTEM +]) diff --git a/src/riscv/index.ts b/src/riscv/index.ts new file mode 100644 index 0000000000..269ffc80db --- /dev/null +++ b/src/riscv/index.ts @@ -0,0 +1,5 @@ +import { Assembler } from "./Assembler/assembler.js"; +import { CPU, RegisterSet } from "./cpu.js"; + +export { CPU, RegisterSet } from "./cpu.js"; +export { Assembler } from "./Assembler/assembler.js"; \ No newline at end of file diff --git a/src/riscv/rv32c.ts b/src/riscv/rv32c.ts new file mode 100644 index 0000000000..33291664b6 --- /dev/null +++ b/src/riscv/rv32c.ts @@ -0,0 +1,792 @@ +import { CPU } from "./cpu.js"; + +export function decompress_rv32c_inst(cpu: CPU, inst: number): number { + let index = ((inst & 0x0003) << 3) | ((inst & 0xE000) >> 13); + let decompressor: any = decompressors[index]; + if(!decompressor) throw new Error(`cannot handle index 0b${index.toString(2)}`); + return decompressor(cpu, inst); +} + +const decompressors: Array<((cpu: CPU, inst: number) => number) | null> = [ +// 000 001 010 011 100 101 110 111 + caddi4spn_to_addi, null, clw_to_lw, null, zcb_100_00, null, csw_to_sw, null, // 00 + caddi_to_addi, cjal_to_jal, cli_to_addi, parse_011_01, parse_100_01, cj_to_jal, cbeqz_to_beq, cbenz_to_bne, // 01 + cslli_to_slli, null, clwsp_to_lw, null, parse_100_10, parse_101_10, cswsp_to_sw, null, // 10 +]; + + +function assert(a: boolean) {}; + + +// C.ADDI4SPN, funct3 = 000, opcode = 00 +function caddi4spn_to_addi(cpu: CPU, inst: number): number +{ + // decode imm and rd + const nzuimm: number = dec_ciw_imm(inst); + const rd: number = dec_rd_short(inst); + + // encode to addi rd' x2 nzuimm[9:2] + return enc_itype(nzuimm, 2, 0b000, rd, 0b0010011); +} + +// C.LW, funct3 = 010, opcode = 00 +function clw_to_lw(cpu: CPU, inst: number): number +{ + // decode imm, rs1 and rd + const imm: number = dec_clw_csw_imm(inst); + const rs1: number = dec_rs1_short(inst); + const rd: number = dec_rd_short(inst); + + // encode to lw rd', offset[6:2](rs1') + return enc_itype(imm, rs1, 0b010, rd, 0b0000011); +} + +// Zcb extension, funct3 = 100, opcode = 00 (the c.lbu/c.lhu/c.lh/c.sb/c.sh group). +// Sub-op is funct bits[12:10]; the RP2350 bootrom emits c.sh, so all five are needed. +function zcb_100_00(cpu: CPU, inst: number): number +{ + const sub: number = (inst >>> 10) & 0b111; // bits[12:10] + const rs1: number = dec_rs1_short(inst); + const uimm_b: number = (((inst >>> 5) & 1) << 1) | ((inst >>> 6) & 1); // byte: imm[1]=i5, imm[0]=i6 + const uimm_h: number = ((inst >>> 5) & 1) << 1; // halfword: imm[1]=i5 + + switch (sub) { + case 0b000: { // c.lbu rd', uimm(rs1') + const rd: number = dec_rd_short(inst); + return enc_itype(uimm_b, rs1, 0b100, rd, 0b0000011); + } + case 0b001: { // c.lhu (bit6=0) / c.lh (bit6=1) + const rd: number = dec_rd_short(inst); + const funct3: number = ((inst >>> 6) & 1) ? 0b001 : 0b101; // lh : lhu + return enc_itype(uimm_h, rs1, funct3, rd, 0b0000011); + } + case 0b010: { // c.sb rs2', uimm(rs1') + const rs2: number = dec_rs2_short(inst); + return enc_stype(uimm_b, rs2, rs1, 0b000, 0b0100011); + } + case 0b011: { // c.sh rs2', uimm(rs1') + const rs2: number = dec_rs2_short(inst); + return enc_stype(uimm_h, rs2, rs1, 0b001, 0b0100011); + } + } + throw Error(`Unsupported Zcb instruction: 0x${inst.toString(16)}`); +} + +// C.SW, funct3 = 110, opcode = 00 +function csw_to_sw(cpu: CPU, inst: number): number +{ + // decode imm, rs1 and rs2 + const imm: number = dec_clw_csw_imm(inst); + const rs1: number = dec_rs1_short(inst); + const rs2: number = dec_rs2_short(inst); + + // encode to sw rs2', offset[6:2](rs1') + return enc_stype(imm, rs2, rs1, 0b010, 0b0100011); +} + +function cnop_to_addi(): number +{ + // encode to addi x0 x0 0 + return enc_itype(0, 0, 0b000, 0, 0b0010011); +} + +// C.ADDI, funct3 = 000, opcode = 01 +function caddi_to_addi(cpu: CPU, inst: number): number +{ + // decode nzimm and rd + const rd: number = dec_rd(inst); + let nzimm: number = 0; + nzimm |= (inst & C.CI_MASK_12) >> 7; + nzimm |= (inst & (C.CI_MASK_6_4 | C.CI_MASK_3_2)) >> 2; + nzimm = sign_extend(nzimm, 5); + + // if nzimm == 0, marked as HINT, implement as nop + if (nzimm == 0) + return cnop_to_addi(); + + // encode to addi rd, rd, nzimm[5:0] + return enc_itype(nzimm, rd, 0b000, rd, 0b0010011); +} + +// C.JAL, funct3 = 001, opcode = 01 +function cjal_to_jal(cpu: CPU, inst: number): number +{ + // decode imm + const imm: number = dec_cj_imm(inst); + + // encode to jal x1, offset[11:1] + return enc_jtype(imm, 1, 0b1101111); +} + +// C.LI, funct3 = 010, opcode = 01 +function cli_to_addi(cpu: CPU, inst: number): number +{ + // decode imm and rd + const rd: number = dec_rd(inst); + let imm: number = 0; + imm |= (inst & C.CI_MASK_12) >> 7; + imm |= (inst & (C.CI_MASK_6_4 | C.CI_MASK_3_2)) >> 2; + imm = sign_extend(imm, 5); + + // if rd == 0, marked as HINT, implement as nop + if (rd == 0) + return cnop_to_addi(); + + // encode to addi rd, x0, imm[5:0] + return enc_itype(imm, 0, 0b000, rd, 0b0010011); +} + +// C.ADDI16SP, funct3 = 011, opcode = 01 +function caddi16sp_to_addi(cpu: CPU, inst: number): number +{ + // decode nzimm + let nzimm: number = 0; + nzimm |= (inst & 0x1000) >> 3; + nzimm |= (inst & 0x0018) << 4; + nzimm |= (inst & 0x0020) << 1; + nzimm |= (inst & 0x0004) << 3; + nzimm |= (inst & 0x0040) >> 2; + nzimm = sign_extend(nzimm, 9); + + // ensure nzimm != 0 + assert(nzimm != 0); + + // encode to addi x2, x2, nzimm[9:4] + return enc_itype(nzimm, 2, 0b000, 2, 0b0010011); +} + +// C.LUI, funct3 = 011, opcode = 01 +function clui_to_lui(cpu: CPU, inst: number): number +{ + // decode nzimm and rd + const rd: number = dec_rd(inst); + let nzimm: number = 0; + nzimm |= (inst & C.CI_MASK_12) << 5; + nzimm |= (inst & (C.CI_MASK_6_4 | C.CI_MASK_3_2)) << 10; + nzimm = sign_extend(nzimm, 17); + + // ensure nzimm != 0 + assert(nzimm != 0); + + // if rd == 0, marked as HINT, implement as nop + if (rd == 0) + return cnop_to_addi(); + + // encode to lui rd, nzuimm[17:12] + return enc_utype(nzimm, rd, 0b0110111); +} + +function csrli_to_srli(cpu: CPU, inst: number): number +{ + // decode shamt and rd = rs1 + let shamt: number = 0; + shamt |= (inst & C.CI_MASK_12) >> 7; + // shamt[5] must be zero for RV32C + assert(shamt == 0); + shamt |= (inst & (C.CI_MASK_6_4 | C.CI_MASK_3_2)) >> 2; + // ensure shamt != 0 + assert(shamt != 0); + + const rd: number = dec_rs1_short(inst); + + // encode to srli rd', rd', shamt[5:0] + return enc_rtype(0b0000000, shamt, rd, 0b101, rd, 0b0010011); +} + +function csrai_to_srai(cpu: CPU, inst: number): number +{ + // decode shamt and rd = rs1 + let shamt: number = 0; + shamt |= (inst & C.CI_MASK_12) >> 7; + // shamt[5] must be zero for RV32C + assert(shamt == 0); + shamt |= (inst & (C.CI_MASK_6_4 | C.CI_MASK_3_2)) >> 2; + // ensure shamt != 0 + assert(shamt != 0); + + const rd: number = dec_rs1_short(inst); + + // encode to srai rd', rd', shamt[5:0] + return enc_rtype(0b0100000, shamt, rd, 0b101, rd, 0b0010011); +} + +function candi_to_andi(cpu: CPU, inst: number): number +{ + // decode imm and rd = rs1 + const rd: number = dec_rs1_short(inst); + let imm: number = 0; + imm |= (inst & C.CI_MASK_12) >> 7; + imm |= (inst & (C.CI_MASK_6_4 | C.CI_MASK_3_2)) >> 2; + imm = sign_extend(imm, 5); + + // encode to andi rd', rd', imm[5:0] + return enc_itype(imm, rd, 0b111, rd, 0b0010011); +} + +function csub_to_sub(cpu: CPU, inst: number): number +{ + // decode rd = rs1 and rs2 + const rd: number = dec_rs1_short(inst); + const rs2: number = dec_rs2_short(inst); + + // encode to sub rd', rd', rs2' + return enc_rtype(0b0100000, rs2, rd, 0b000, rd, 0b0110011); +} + +function cxor_to_xor(cpu: CPU, inst: number): number +{ + // decode rd = rs1 and rs2 + const rd: number = dec_rs1_short(inst); + const rs2: number = dec_rs2_short(inst); + + // encode to xor rd', rd', rs2' + return enc_rtype(0b0000000, rs2, rd, 0b100, rd, 0b0110011); +} + +function cor_to_or(cpu: CPU, inst: number): number +{ + // decode rd = rs1 and rs2 + const rd: number = dec_rs1_short(inst); + const rs2: number = dec_rs2_short(inst); + + // encode to or rd', rd', rs2' + return enc_rtype(0b0000000, rs2, rd, 0b110, rd, 0b0110011); +} + +function cand_to_and(cpu: CPU, inst: number): number +{ + // decode rd = rs1 and rs2 + const rd: number = dec_rs1_short(inst); + const rs2: number = dec_rs2_short(inst); + + // encode to and rd', rd', rs2' + return enc_rtype(0b0000000, rs2, rd, 0b111, rd, 0b0110011); +} + +// C.J, funct3 = 101, opcode = 01 +function cj_to_jal(cpu: CPU, inst: number): number +{ + // decode imm + const imm: number = dec_cj_imm(inst); + + // encode to jal x0, offset[11:1] + return enc_jtype(imm, 0, 0b1101111); +} + +// C.BEQZ, funct3 = 110, opcode = 01 +function cbeqz_to_beq(cpu: CPU, inst: number): number +{ + // decode offset and rs1 + const offset: number = dec_branch_imm(inst); + const rs1: number = dec_rs1_short(inst); + + // encode to beq rs1', x0, offset[8:1] + return enc_btype(offset, 0, rs1, 0b000, 0b1100011); +} + +// C.BENZ, funct3 = 111, opcode = 01 +function cbenz_to_bne(cpu: CPU, inst: number): number +{ + // decode offset and rs1 + const offset: number = dec_branch_imm(inst); + const rs1: number = dec_rs1_short(inst); + + // encode to bne rs1', x0, offset[8:1] + return enc_btype(offset, 0, rs1, 0b001, 0b1100011); +} + +// C.SLLI, funct3 = 000, opcode = 10 +function cslli_to_slli(cpu: CPU, inst: number): number +{ + // decode shamt and rd + let shamt: number = 0; + shamt |= (inst & C.CI_MASK_12) >> 7; + // shamt[5] must be zero for RV32C + assert(shamt == 0); + shamt |= (inst & (C.CI_MASK_6_4 | C.CI_MASK_3_2)) >> 2; + // ensure shamt != 0 + assert(shamt != 0); + + const rd: number = dec_rd(inst); + // if rd == 0, marked as HINT, implement as nop + if (rd == 0) + return cnop_to_addi(); + + // encode to slli rd, rd, shamt[5:0] + return enc_rtype(0b0000000, shamt, rd, 0b001, rd, 0b0010011); +} + +// C.LWSP, funct3 = 010, opcode = 10 +function clwsp_to_lw(cpu: CPU, inst: number): number +{ + // decode offset and rd + let offset: number = 0; + offset |= (inst & C.CI_MASK_12) >> 7; + offset |= (inst & C.CI_MASK_6_4) >> 2; + offset |= (inst & C.CI_MASK_3_2) << 4; + + const rd: number = dec_rd(inst); + // ensure rd != 0 + assert(rd != 0); + + // decode to lw rd, offset[7:2](x2) + return enc_itype(offset, 2, 0b010, rd, 0b0000011); +} + +function cjr_to_jalr(cpu: CPU, inst: number): number +{ + // decode rs1 + const rs1: number = dec_rs1(inst); + // ensure rs1 != 0 + assert(rs1 != 0); + + // encode to jalr x0, rs1, 0 + return enc_itype(0, rs1, 0b000, 0, 0b1100111); +} + +function cmv_to_add(cpu: CPU, inst: number): number +{ + // decode rs2 and rd + const rs2: number = dec_rs2(inst); + // ensure rs2 != 0 + assert(rs2 != 0); + + const rd: number = dec_rd(inst); + // if rd == 0, marked as HINT, implement as nop + if (rd == 0) + return cnop_to_addi(); + + // encode to add rd, x0, rs2 + return enc_rtype(0b0000000, rs2, 0, 0b000, rd, 0b0110011); +} + +function cebreak_to_ebreak(): number +{ + // return ebreak + return enc_itype(1, 0, 0b000, 0, 0b1110011); +} + +function cjalr_to_jalr(cpu: CPU, inst: number): number +{ + // decode rs1 + const rs1: number = dec_rs1(inst); + // ensure rs1 != 0 + assert(rs1 != 0); + + // encode to jalr x1, rs1, 0 + return enc_itype(0, rs1, 0b000, 1, 0b1100111); +} + +function cadd_to_add(cpu: CPU, inst: number): number +{ + // decode rs2 and rd + const rs2: number = dec_rs2(inst); + // ensure rs2 != 0 + assert(rs2 != 0); + + const rd: number = dec_rd(inst); + // if rd == 0, marked as HINT, implement as nop + if (rd == 0) + return cnop_to_addi(); + + // encode to add rd, rd, rs2 + return enc_rtype(0b0000000, rs2, rd, 0b000, rd, 0b0110011); +} + +// C.SWSP, funct3 = 110, opcode = 10 +function cswsp_to_sw(cpu: CPU, inst: number): number +{ + // decode imm and rs2 + const offset: number = dec_css_imm(inst); + const rs2: number = dec_rs2(inst); + + // encode to sw rs2, offset[7:2](x2) + return enc_stype(offset, rs2, 2, 0b010, 0b0100011); +} + +// funct3 = 011, opcode = 01 +function parse_011_01(cpu: CPU, inst: number): number +{ + const rd: number = dec_rd(inst); + + if (rd == 2) + return caddi16sp_to_addi(cpu, inst); + else + return clui_to_lui(cpu, inst); +} + +// funct3 = 100, opcode = 01 +function parse_100_01(cpu: CPU, inst: number): number +{ + const cb_funct2: number = dec_cb_funct2(inst); + const cs_funct6_3_funct2: number = (((dec_cs_funct6(inst) >>> 2) & 1) << 2) | dec_cs_funct2(inst); + + // Actual lookup order: funct3, xlen, rdRs1Val, cb_funct2, funct6[3]+funct2 + switch (cb_funct2) { + case 0b00: + return csrli_to_srli(cpu, inst); + case 0b01: + return csrai_to_srai(cpu, inst); + case 0b10: + return candi_to_andi(cpu, inst); + case 0b11: + switch (cs_funct6_3_funct2) { + case 0b000: + return csub_to_sub(cpu, inst); + case 0b001: + return cxor_to_xor(cpu, inst); + case 0b010: + return cor_to_or(cpu, inst); + case 0b011: + return cand_to_and(cpu, inst); + case 0b110: { // c.mul (Zcb): mul rd', rd', rs2' + const rd: number = dec_rs1_short(inst); + const rs2: number = dec_rs2_short(inst); + return enc_rtype(0b0000001, rs2, rd, 0b000, rd, 0b0110011); + } + case 0b111: { // Zcb unary ops (sub-op in bits[4:2]); the RP2350 bootrom uses these + const rd: number = dec_rs1_short(inst); + switch ((inst >>> 2) & 0b111) { + case 0b000: // c.zext.b -> andi rd, rd, 0xff + return enc_itype(0xff, rd, 0b111, rd, 0b0010011); + case 0b001: // c.sext.b -> sext.b rd, rd (Zbb) + return enc_itype(0b011000000100, rd, 0b001, rd, 0b0010011); + case 0b010: // c.zext.h -> zext.h rd, rd (Zbb) + return enc_rtype(0b0000100, 0, rd, 0b100, rd, 0b0110011); + case 0b011: // c.sext.h -> sext.h rd, rd (Zbb) + return enc_itype(0b011000000101, rd, 0b001, rd, 0b0010011); + case 0b101: // c.not -> xori rd, rd, -1 + return enc_itype(-1, rd, 0b100, rd, 0b0010011); + } + } + } + } + throw Error(`Unknown compressed instruction: 0x${inst.toString(16)}`); +} + +// funct3 = 100, opcode = 10 +function parse_100_10(cpu: CPU, inst: number): number +{ + const cr_funct4: number = dec_cr_funct4(inst); + const rs1: number = dec_rs1(inst); + const rs2: number = dec_rs2(inst); + + if (cr_funct4 == 0b1000) { + if (rs2 == 0) + return cjr_to_jalr(cpu, inst); + else + return cmv_to_add(cpu, inst); + } else if (cr_funct4 == 0b1001) { + if (rs1 == 0 && rs2 == 0) + return cebreak_to_ebreak(); + else if (rs2 == 0) + return cjalr_to_jalr(cpu, inst); + else + return cadd_to_add(cpu, inst); + } else + return cnop_to_addi(); +} + +const xreg_list = [[],[],[],[],[1],[8,1],[9,8,1],[18,9,8,1],[19,18,9,8,1],[20,19,18,9,8,1],[21,20,19,18,9,8,1],[22,21,20,19,18,9,8,1],[23,22,21,20,19,18,9,8,1],[24,23,22,21,20,19,18,9,8,1],[25,24,23,22,21,20,19,18,9,8,1],[27,26,25,24,23,22,21,20,19,18,9,8,1]]; +const stack_adj_base = [0,0,0,0,16,16,16,16,32,32,32,32,48,48,48,64]; + +function parse_101_10(cpu: CPU, inst: number): number +{ + switch(inst & 0b1111111100000011) { + case 0b1011100000000010: { // cm.push (Zcmp) + const rlist = (inst & 0b11110000) >>> 4; + const spimm = (inst & 0b1100) << 2; + const stack_adj = stack_adj_base[rlist] + spimm; + const sp = cpu.registerSet.getRegisterU(2); + let addr = sp - 4; + for(let reg of xreg_list[rlist]) { + cpu.chip.writeUint32(addr, cpu.registerSet.getRegisterU(reg)); + addr -= 4; + cpu.cycles++; + } + cpu.registerSet.setRegisterU(2, sp - stack_adj); + return cnop_to_addi(); } + case 0b1011101000000010: + throw new Error("cm.pop unsupported"); + case 0b1011110000000010: + throw new Error("cm.popretz unsupported"); + case 0b1011111000000010: { // cm.popret (Zcmp) + const rlist = (inst & 0b11110000) >>> 4; + const spimm = (inst & 0b1100) << 2; + const stack_adj = stack_adj_base[rlist] + spimm; + const sp = cpu.registerSet.getRegisterU(2); + let addr = sp + stack_adj - 4; + for(let reg of xreg_list[rlist]) { + cpu.registerSet.setRegisterU(reg, cpu.chip.readUint32(addr)); + addr -= 4; + cpu.cycles++; + } + cpu.registerSet.setRegisterU(2, sp + stack_adj); + return 0x8067; /* ret */ } + } + switch(inst & 0b1111110001100011) { + case 0b1010110000100010: + throw new Error("cm.mvsa01 unsupported"); + case 0b1010110001100010: + throw new Error("cm.mva01s unsupported"); + } + throw new Error(`Unsupported instruction: 0x${inst.toString(16)}`); +} + +enum C { + // ....xxxx....xxxx + C_RD = 0b0000111110000000, // general + C_RS1 = 0b0000111110000000, + C_RS2 = 0b0000000001111100, + C_RD_S = 0b0000000000011100, + C_RS1_S = 0b0000001110000000, + C_RS2_S = 0b0000000000011100, + // ....xxxx....xxxx + CR_FUNCT4 = 0b1111000000000000, // CR-format + // ....xxxx....xxxx + CI_MASK_12 = 0b0001000000000000, // CI-format + CI_MASK_6_4 = 0b0000000001110000, + CI_MASK_3_2 = 0b0000000000001100, + // ....xxxx....xxxx + CSS_IMM_5_2 = 0b0001111000000000, // CSS-format + CSS_IMM_7_6 = 0b0000000110000000, + // ....xxxx....xxxx + CIW_IMM_5_4 = 0b0001100000000000, // CIW-format + CIW_IMM_9_6 = 0b0000011110000000, + CIW_IMM_2 = 0b0000000001000000, + CIW_IMM_3 = 0b0000000000100000, + // ....xxxx....xxxx + CLWSW_IMM_5_3 = 0b0001110000000000, // C.LW, C.SW + CLWSW_IMM_2 = 0b0000000001000000, + CLWSW_IMM_6 = 0b0000000000100000, + // ....xxxx....xxxx + CS_FUNCT6 = 0b1111110000000000, // CS-format + CS_FUNCT2 = 0b0000000001100000, + // ....xxxx....xxxx + CB_FUNCT2 = 0b0000110000000000, // C.SRLI, C.SRAI, C.ANDI + CB_OFFSET_8 = 0b0001000000000000, // C.BEQZ, C.BNEZ + CB_OFFSET_4_3 = 0b0000110000000000, + CB_OFFSET_7_6 = 0b0000000001100000, + CB_OFFSET_2_1 = 0b0000000000011000, + CB_OFFSET_5 = 0b0000000000000100, + // ....xxxx....xxxx + CJ_OFFSET_11 = 0b0001000000000000, // CJ-format + CJ_OFFSET_4 = 0b0000100000000000, + CJ_OFFSET_9_8 = 0b0000011000000000, + CJ_OFFSET_10 = 0b0000000100000000, + CJ_OFFSET_6 = 0b0000000010000000, + CJ_OFFSET_7 = 0b0000000001000000, + CJ_OFFSET_3_1 = 0b0000000000111000, + CJ_OFFSET_5 = 0b0000000000000100, +}; +// clang-format off + +// decode rd field +function dec_rd(inst: number): number +{ + return (inst & C.C_RD) >> 7; +} + +// decode rs1 field +function dec_rs1(inst: number): number +{ + return (inst & C.C_RS1) >> 7; +} + +// decode rs2 field +function dec_rs2(inst: number): number +{ + return (inst & C.C_RS2) >> 2; +} + +// decode rd' field and return its correspond register +function dec_rd_short(inst: number): number +{ + return ((inst & C.C_RD_S) >> 2) | 0b1000; +} + +// decode rs1' field and return its correspond register +function dec_rs1_short(inst: number): number +{ + return ((inst & C.C_RS1_S) >> 7) | 0b1000; +} + +// decode rs2' field and return its correspond register +function dec_rs2_short(inst: number): number +{ + return ((inst & C.C_RS2_S) >> 2) | 0b1000; +} + +// sign extend from specific position to MSB +function sign_extend(x: number, sign_position: number): number +{ + let sign: number = (x >> sign_position) & 1; + for (let i: number = sign_position + 1; i < 32; ++i) + x |= sign << i; + return x; +} + +// decode CR-format instruction funct4 field +function dec_cr_funct4(inst: number): number +{ + return (inst & C.CR_FUNCT4) >> 12; +} + +// decode CSS-format instruction immediate +function dec_css_imm(inst: number): number +{ + // zero-extended offset, scaled by 4 + let imm: number = 0; + imm |= (inst & C.CSS_IMM_7_6) >> 1; + imm |= (inst & C.CSS_IMM_5_2) >> 7; + return imm; +} + +// decode CIW-format instruction immediate +function dec_ciw_imm(inst: number): number +{ + // zero-extended non-zero immediate, scaled by 4 + let imm: number = 0; + imm |= (inst & C.CIW_IMM_9_6) >> 1; + imm |= (inst & C.CIW_IMM_5_4) >> 7; + imm |= (inst & C.CIW_IMM_3) >> 2; + imm |= (inst & C.CIW_IMM_2) >> 4; + assert(imm != 0); + return imm; +} + +// decode immediate of C.LW and C.SW +function dec_clw_csw_imm(inst: number): number +{ + // zero-extended offset, scaled by 4 + let imm: number = 0; + imm |= (inst & C.CLWSW_IMM_6) << 1; + imm |= (inst & C.CLWSW_IMM_5_3) >> 7; + imm |= (inst & C.CLWSW_IMM_2) >> 4; + return imm; +} + +// decode CS-format instruction funct6 field +function dec_cs_funct6(inst: number): number +{ + return (inst & C.CS_FUNCT6) >> 10; +} + +// decode CS-format instruction funct2 field +function dec_cs_funct2(inst: number): number +{ + return (inst & C.CS_FUNCT2) >> 5; +} + +// decode CB-format instruction funct2 field +function dec_cb_funct2(inst: number): number +{ + return (inst & C.CB_FUNCT2) >> 10; +} + +// decode immediate of branch instruction +function dec_branch_imm(inst: number): number +{ + // sign-extended offset, scaled by 2 + let imm: number = 0; + imm |= (inst & C.CB_OFFSET_8) >> 4; + imm |= (inst & C.CB_OFFSET_7_6) << 1; + imm |= (inst & C.CB_OFFSET_5) << 3; + imm |= (inst & C.CB_OFFSET_4_3) >> 7; + imm |= (inst & C.CB_OFFSET_2_1) >> 2; + imm = sign_extend(imm, 8); + return imm; +} + +// decode CJ-format instruction immediate +function dec_cj_imm(inst: number): number +{ + // sign-extended offset, scaled by 2 + let imm: number = 0; + imm |= (inst & C.CJ_OFFSET_11) >> 1; + imm |= (inst & C.CJ_OFFSET_10) << 2; + imm |= (inst & C.CJ_OFFSET_9_8) >> 1; + imm |= (inst & C.CJ_OFFSET_7) << 1; + imm |= (inst & C.CJ_OFFSET_6) >> 1; + imm |= (inst & C.CJ_OFFSET_5) << 3; + imm |= (inst & C.CJ_OFFSET_4) >> 7; + imm |= (inst & C.CJ_OFFSET_3_1) >> 2; + imm = sign_extend(imm, 11); + return imm; +} + +// encode R-type instruction +function enc_rtype(funct7: number, rs2: number, rs1: number, funct3: number, rd: number, opcode: number): number +{ + let inst: number = 0; + inst |= funct7 << 25; + inst |= rs2 << 20; + inst |= rs1 << 15; + inst |= funct3 << 12; + inst |= rd << 7; + inst |= opcode; + return inst; +} + +// encode I-type instruction +function enc_itype(imm: number, rs1: number, funct3: number, rd: number, opcode: number): number +{ + let inst: number = 0; + inst |= imm << 20; + inst |= rs1 << 15; + inst |= funct3 << 12; + inst |= rd << 7; + inst |= opcode; + return inst; +} + +// encode S-type instruction +function enc_stype(imm: number, rs2: number, rs1: number, funct3: number, opcode: number): number +{ + let inst: number = 0; + inst |= (imm & 0b111111100000) << 20; + inst |= rs2 << 20; + inst |= rs1 << 15; + inst |= funct3 << 12; + inst |= (imm & 0b000000011111) << 7; + inst |= opcode; + return inst; +} + +// encode B-type instruction +function enc_btype(imm: number, rs2: number, rs1: number, funct3: number, opcode: number): number +{ + let inst: number = 0; + inst |= (imm & 0b1000000000000) << 19; + inst |= (imm & 0b0011111100000) << 20; + inst |= rs2 << 20; + inst |= rs1 << 15; + inst |= funct3 << 12; + inst |= (imm & 0b0000000011110) << 7; + inst |= (imm & 0b0100000000000) >> 4; + inst |= opcode; + return inst; +} + +// encode U-type instruction +function enc_utype(imm: number, rd: number, opcode: number): number +{ + let inst: number = 0; + inst |= imm; + inst |= rd << 7; + inst |= opcode; + return inst; +} + +// encode J-type instruction +function enc_jtype(imm: number, rd: number, opcode: number): number +{ + let inst: number = 0; + inst |= (imm & 0x00100000) << 11; + inst |= (imm & 0x000007FE) << 20; + inst |= (imm & 0x00000800) << 9; + inst |= (imm & 0x000FF000); + inst |= rd << 7; + inst |= opcode; + return inst; +} diff --git a/src/riscv/test/assembler.spec.ts b/src/riscv/test/assembler.spec.ts new file mode 100644 index 0000000000..caa097e00f --- /dev/null +++ b/src/riscv/test/assembler.spec.ts @@ -0,0 +1,40 @@ +import { describe, expect, test } from 'vitest'; +import { Assembler } from "../Assembler/assembler.js"; + +describe('Testing assembleLine function:', () => { + test('Input: addi, x17, x0, 93', () => { + expect(Assembler.assembleLine('addi, x17, x0, 93')).toHaveProperty('binary', 0x05D00893) + }) + + test('Input: add fp, a2, t4', () => { + expect(Assembler.assembleLine('add fp, a2, t4')).toHaveProperty('binary', 0x01D60433) + }) + + test('Input: beq tp, ra, 0xC', () => { + expect(Assembler.assembleLine('beq tp, ra, 0xC')).toHaveProperty('binary', 0x00120663) + }) + + test('Input: jal s5, 0xF7B4', () => { + expect(Assembler.assembleLine('jal s5, 0xF7B4')).toHaveProperty('binary', 0x7B40FAEF) + }) + + test('Input auipc a3, 0xABCD000', () => { + expect(Assembler.assembleLine('auipc a3, 0xABCD000')).toHaveProperty('binary', 0x0ABCD697) + }) + + test('Input: sh t2, 0x35C(a0)', () => { + expect(Assembler.assembleLine('sh t2, 0x35C(a0)')).toHaveProperty('binary', 0x34751E23) + }) + + test('Input: srai x5, x2, 5', () => { + expect(Assembler.assembleLine('srai x5, x2, 5')).toHaveProperty('binary', 0x40515293) + }) + + test('Input: jalr ra, 1089(a7)', () => { + expect(Assembler.assembleLine('jalr ra, 1089(a7)')).toHaveProperty('binary', 0x441880E7) + }) + + test('Input: ecall', () => { + expect(Assembler.assembleLine('ecall')).toHaveProperty('binary', 0x00000073) + }) +}); \ No newline at end of file diff --git a/src/riscv/test/binaryFunctions.spec.ts b/src/riscv/test/binaryFunctions.spec.ts new file mode 100644 index 0000000000..e1707de404 --- /dev/null +++ b/src/riscv/test/binaryFunctions.spec.ts @@ -0,0 +1,85 @@ +import { describe, expect, test } from 'vitest'; +import { getBit, getRange, setBit, setRange, signExtend } from "../binaryFunctions.js"; + +const getBitTestCases: Map = new Map([ + [[32, 4], 0], + [[32, 5], 1], + [[32, 6], 0], + [[24, 2], 0], + [[24, 3], 1], + [[24, 4], 1], + [[24, 5], 0], + [[48, 3], 0], + [[48, 4], 1], + [[48, 5], 1], + [[0x80000000, 30], 0], + [[0x80000000, 31], 1] +]); + +const setBitTestCases: Map = new Map([ + [[0, 1, 0], 1], + [[0, 1, 1], 2], + [[0, 1, 2], 4], + [[0, 1, 3], 8], + [[0, 1, 4], 16], + [[0, 1, 5], 32], + [[31, 0, 0], 30], +]) + +const getRangeTestCases: Map = new Map([ + [[0xFF, 3, 0], 0xF], + [[0xFFFFFFFF, 31, 0], 0xFFFFFFFF], + [[0xFFFFFFFF, 30, 0], 0x7FFFFFFF], + [[0xFFFFFFFF, 12, 9], 0xF], + [[0x0A0B0C0D, 23, 8], 0x0B0C] +]); + +const setRangeTestCases: Map = new Map([ + [[0, 0xFF, 7, 0], 0xFF], + [[0, 0xFF, 15, 8], 0xFF00], + [[0x0A0B0C0D, 0xFF, 15, 8], 0x0A0BFF0D] +]); + +describe('Testing getBit function:', () => { + getBitTestCases.forEach((expected: number, input: number[]) => { + test(`Input: ${input[0]}, ${input[1]}`, () => { + expect(getBit(input[0], input[1])).toBe(expected); + }) + }) +}); + +describe('Testing setBit function:', () => { + setBitTestCases.forEach((expected: number, input: number[]) => { + test(`Input: ${input[0]}, ${input[1]}, ${input[2]}`, () => { + expect(setBit(input[0], input[1], input[2])).toBe(expected); + }) + }) +}); + +describe('Testing getRange function:', () => { + getRangeTestCases.forEach((expected: number, input: number[]) => { + test(`Input: ${input[0]}, ${input[1]}, ${input[2]}`, () => { + expect(getRange(input[0], input[1], input[2])).toBe(expected); + }) + }) +}); + +describe('Testing setRange function:', () => { + setRangeTestCases.forEach((expected: number, input: number[]) => { + test(`Input: ${input[0]}, ${input[1]}, ${input[2]}, ${input[3]}`, () => { + expect(setRange(input[0], input[1], input[2], input[3])).toBe(expected); + }) + }) +}); + +describe('Testing signExtend:', () => { + + test('0xFFF as 12-bit signed int', () => { + expect(signExtend(0xFFF, 12)).toBe(-1); + }) + + test('0xFFF as 13-bit signed int', () => { + expect(signExtend(0xFFF, 13)).toBe(0xFFF); + }) + +}) \ No newline at end of file diff --git a/src/riscv/test/cpu-fixes.spec.ts b/src/riscv/test/cpu-fixes.spec.ts new file mode 100644 index 0000000000..6b4306a1cf --- /dev/null +++ b/src/riscv/test/cpu-fixes.spec.ts @@ -0,0 +1,120 @@ +// Regression tests for the RP2350 RISC-V core defects found in the adversarial spec review of +// c1570's fork (2026-06). Each test encodes the reviewer's repro and asserts the SPEC-correct +// result; the comment records what the original (buggy) code produced, so each test is +// falsifiable — it fails on the pre-fix engine and passes on the fixed one. +// +// Harness mirrors cpu.spec.ts: a real RP2350, drive core0 directly. Raw 32-bit encodings are +// used (with the assembly in a comment) so the tests don't depend on the assembler. +import { describe, expect, test } from 'vitest'; +import { RP2350 } from '../../rp2350.js'; + +function freshCore() { + const chip = new RP2350(); + chip.core1.waiting = true; + return chip.core0; +} + +describe('RV32M multiply (was computed with float64 * — wrong above 2^53)', () => { + test('MUL low word is exact (Math.imul), not the rounded float64 product', () => { + const cpu = freshCore(); + cpu.registerSet.setRegisterU(1, 0x10000001); + cpu.registerSet.setRegisterU(2, 0x10000001); + cpu.step(0x022081b3); // mul x3, x1, x2 + // (0x10000001 * 0x10000001) low32 = 0x20000001. Buggy float64 multiply gave 0x20000000. + expect(cpu.registerSet.getRegisterU(3) >>> 0).toBe(0x20000001); + }); + + test('MULH high word is correct for a negative product (BigInt, not trunc-toward-zero)', () => { + const cpu = freshCore(); + cpu.registerSet.setRegisterU(1, 0xffffffff); // -1 + cpu.registerSet.setRegisterU(2, 0x00000002); // 2 + cpu.step(0x022091b3); // mulh x3, x1, x2 + // signed -1 * 2 = -2 = 0xFFFFFFFFFFFFFFFE; high word = 0xFFFFFFFF. Buggy code gave 0x00000000. + expect(cpu.registerSet.getRegisterU(3) >>> 0).toBe(0xffffffff); + }); + + test('MULHSU is decoded and correct (previously threw, aborting the core)', () => { + const cpu = freshCore(); + cpu.registerSet.setRegisterU(1, 0xffffffff); // signed -1 + cpu.registerSet.setRegisterU(2, 0x00000002); // unsigned 2 + // mulhsu x3, x1, x2 = 0x0220a1b3. Must NOT throw. + expect(() => cpu.step(0x0220a1b3)).not.toThrow(); + // high word of (signed -1) * (unsigned 2) = high of 0xFFFFFFFE * ... = 0xFFFFFFFF. + expect(cpu.registerSet.getRegisterU(3) >>> 0).toBe(0xffffffff); + }); + + test('MULHU high word is exact near a 2^32 boundary (BigInt, not float64 division)', () => { + const cpu = freshCore(); + cpu.registerSet.setRegisterU(1, 0x6ad3f95d); + cpu.registerSet.setRegisterU(2, 0xac135f14); + cpu.step(0x0220b1b3); // mulhu x3, x1, x2 + // true high word = 0x47ce80f2. Buggy float64 division gave 0x47ce80f3 (off by one). + expect(cpu.registerSet.getRegisterU(3) >>> 0).toBe(0x47ce80f2); + }); +}); + +describe('RV32I SLTIU immediate (must be sign-extended then compared unsigned)', () => { + test('sltiu rd, rs1, -1 compares against 0xFFFFFFFF, not 0x00000FFF', () => { + const cpu = freshCore(); + cpu.registerSet.setRegisterU(1, 0x00010000); // 65536 + cpu.step(0xfff0b193); // sltiu x3, x1, -1 + // imm sign-extends to 0xFFFFFFFF (unsigned 4294967295); 65536 < that => 1. + // Buggy code compared against immU=4095, so 65536 < 4095 => 0. + expect(cpu.registerSet.getRegister(3)).toBe(1); + }); +}); + +describe('JALR target alignment (LSB must be cleared)', () => { + test('jalr clears bit 0 of (rs1 + imm)', () => { + const cpu = freshCore(); + cpu.pc = 0x20000000; + cpu.registerSet.setRegisterU(1, 0x20000100); + cpu.step(0x00108067); // jalr x0, 1(x1) + // target = (0x20000100 + 1) & ~1 = 0x20000100. Buggy code left it odd: 0x20000101. + expect(cpu.pc >>> 0).toBe(0x20000100); + }); +}); + +describe('Synchronous trap entry (ECALL) lands at MTVEC, not MTVEC+ilen', () => { + test('ECALL executes the first handler instruction at mtvec', () => { + const cpu = freshCore(); + cpu.csrs[0x305] = 0x20001000; // mtvec, direct mode + cpu.pc = 0x20004320; + cpu.inst_length = 4; // a real fetch of the 32-bit ecall sets this; the bug only + // manifests when step()'s tail adds a non-zero inst_length. + cpu.step(0x00000073); // ecall + // pc must be exactly mtvec; the old next_pc==0 sentinel made it mtvec+4 (skipping the + // handler's first instruction). + expect(cpu.pc >>> 0).toBe(0x20001000); + expect(cpu.csrs[0x341] >>> 0).toBe(0x20004320); // mepc = faulting pc + expect(cpu.csrs[0x342] >>> 0).toBe(11); // mcause = ecall-from-M + }); + + test('trap-entry mstatus saves MIE->MPIE, clears only MIE, preserves MPP', () => { + const cpu = freshCore(); + cpu.csrs[0x305] = 0x20001000; + cpu.setCSR(0x300, (3 << 11) | (1 << 3), 0); // MPP=3, MIE=1 (0x1808) + cpu.pc = 0x20004320; + cpu.step(0x00000073); // ecall + // Expect MPP preserved (3<<11), MPIE set (1<<7), MIE cleared. = 0x1880. + // Buggy `mstatus &= 1<<7` wiped MPP and left 0x0080. + expect(cpu.getCSR(0x300, 0) >>> 0).toBe((3 << 11) | (1 << 7)); + }); +}); + +describe('Hazard3 Xh3irq external interrupt index 0 (TIMER0_IRQ_0) is deliverable', () => { + test('an asserted, enabled IRQ 0 is taken (NOIRQ tested via bit 31, not irq==0)', () => { + const cpu = freshCore(); + cpu.csrs[0x305] = 0x20001000; // mtvec + cpu.csrs[0x304] |= 1 << 11; // mie.MEIE + cpu.csrs[0x300] |= 1 << 3; // mstatus.MIE + cpu.meipra[0] = 1; // priority of IRQ 0 + cpu.meiea[0] = 1; // IRQ 0 enabled + cpu.setInterrupt(0, true); // assert IRQ 0 -> meinext.irq=0, NOIRQ=0 + cpu.checkForInterrupts(); + // With the fix, trapEntry runs for IRQ 0: mcause = (1<<31)|11, and a branch is pending. + // Buggy `meinext_irq_number > 0` gate dropped IRQ 0 entirely (mcause stays 0). + expect(cpu.csrs[0x342] >>> 0).toBe(((1 << 31) | 11) >>> 0); + expect(cpu.branch_taken).toBe(true); + }); +}); diff --git a/src/riscv/test/cpu.spec.ts b/src/riscv/test/cpu.spec.ts new file mode 100644 index 0000000000..6f2974186e --- /dev/null +++ b/src/riscv/test/cpu.spec.ts @@ -0,0 +1,81 @@ +import { describe, expect, test } from 'vitest'; +import { Assembler } from "../Assembler/assembler.js"; +import { RegisterSet } from "../cpu.js"; +import { RP2350 } from "../../rp2350.js"; + +describe('Testing RegisterSet class:', () => { + test('Set x1 to 5', () => { + + const registerSet = new RegisterSet(32); + + registerSet.setRegister(1, 5); + + expect(registerSet.getRegister(1)).toBe(5); + + }) +}) + +describe('Testing R-Type instruction execution:', () => { + + test('Add 3 + 5, place the result in x3', () => { + + const chip = new RP2350(); + const cpu = chip.core0; + chip.core1.waiting = true; + + cpu.registerSet.setRegister(1, 3); + cpu.registerSet.setRegister(2, 5); + + expect(cpu.registerSet.getRegister(1)).toBe(3); + expect(cpu.registerSet.getRegister(2)).toBe(5); + + const addInstruction = Assembler.assembleLine('add x3, x1, x2'); + + cpu.step(addInstruction.binary); + + expect(cpu.registerSet.getRegister(3)).toBe(8); + + }); +}) + +describe('Testing basic toy programs:', () => { + + test('Simple add, branch, and srl instructions', () => { + + const program = [ + 'add tp, ra, sp', + 'beq tp, zero, 0xC', + 'blt tp, ra, 12', + 'add gp, gp, sp', + 'add gp, gp, sp', + 'srl gp, gp, ra', + 'add zero, zero, x1', + 'add zero, zero, x1', + ] + + const chip = new RP2350(); + const cpu = chip.core0; + chip.core1.waiting = true; + + const bin = Assembler.assemble(program); + const prg = new Uint32Array(bin); + for(let i = 0; i < 20; i++) { + chip.writeUint32(0x20000000 + (i << 2), prg[i]); + } + cpu.pc = 0x20000000; + + cpu.registerSet.setRegister(1, 5); + cpu.registerSet.setRegister(2, -8); + cpu.registerSet.setRegister(3, 64); + + for (let i = 0; i < 6; i++) { + cpu.executeInstruction(); + } + + expect(cpu.registerSet.getRegister(3)).toBe(2); + expect(cpu.registerSet.getRegister(0)).toBe(0); + + }) + +}) + diff --git a/src/rp2040.ts b/src/rp2040.ts index 4626e5082d..815030677a 100644 --- a/src/rp2040.ts +++ b/src/rp2040.ts @@ -1,7 +1,14 @@ import { IClock } from './clock/clock.js'; +import { IRPChip } from './rpchip.js'; import { SimulationClock } from './clock/simulation-clock.js'; import { CortexM0Core } from './cortex-m0-core.js'; -import { GPIOPin } from './gpio-pin.js'; +import { + GPIOPin, + FUNCTION_PWM, + FUNCTION_SIO, + FUNCTION_PIO0, + FUNCTION_PIO1, +} from './gpio-pin.js'; import { IRQ } from './irq.js'; import { RPADC } from './peripherals/adc.js'; import { RPBUSCTRL } from './peripherals/busctrl.js'; @@ -11,7 +18,7 @@ import { RPI2C } from './peripherals/i2c.js'; import { RPIO } from './peripherals/io.js'; import { RPPADS } from './peripherals/pads.js'; import { Peripheral, UnimplementedPeripheral } from './peripherals/peripheral.js'; -import { RPPIO } from './peripherals/pio.js'; +import { RPPIO, WaitType } from './peripherals/pio.js'; import { RPPPB } from './peripherals/ppb.js'; import { RPPSM } from './peripherals/psm.js'; import { RPPWM } from './peripherals/pwm.js'; @@ -43,7 +50,8 @@ const KB = 1024; const MB = 1024 * KB; const MHz = 1_000_000; -export class RP2040 { +export class RP2040 implements IRPChip { + readonly identifier = 'rp2040'; readonly bootrom = new Uint32Array(4 * KB); readonly sram = new Uint8Array(264 * KB); readonly sramView = new DataView(this.sram.buffer); @@ -119,7 +127,9 @@ export class RP2040 { ]; readonly dma = new RPDMA(this, 'DMA'); - readonly pio = [ + // Explicit type: with `implements IRPChip`, the inferred element type would reference RP2040 + // (via the IGPIOChipHost the machines hold) circularly through this field's own initializer. + readonly pio: RPPIO[] = [ new RPPIO(this, 'PIO0', IRQ.PIO0_IRQ0, 0), new RPPIO(this, 'PIO1', IRQ.PIO1_IRQ0, 1), ]; @@ -188,6 +198,15 @@ export class RP2040 { this.reset(); } + // IRPChip surface (disassembly view / execution trace hook). RP2040 has no built-in disassembler; + // these let tooling attach one, matching the RP2350 chip API. + disassembly = ''; + loadDisassembly(dis: string) { + this.disassembly = dis; + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + onTrace = (coreNumber: number, pc: number, tag: string) => {}; + reset() { this.core.reset(); this.pwm.reset(); @@ -345,12 +364,15 @@ export class RP2040 { this.writeUint32(alignedAddress, newValue[0]); } - get gpioValues() { + // Method (not a getter) to match IRPChip — RP2350 reads pin banks in 32-bit windows + // (gpioValues(0), gpioValues(32)); RP2040 has a single bank, so callers pass 0. + gpioValues(start_index: number) { const { gpio } = this; let result = 0; - for (let gpioIndex = 0; gpioIndex < gpio.length; gpioIndex++) { + const end_index = Math.min(start_index + 32, gpio.length); + for (let gpioIndex = start_index; gpioIndex < end_index; gpioIndex++) { if (gpio[gpioIndex].inputValue) { - result |= 1 << gpioIndex; + result |= 1 << (gpioIndex - start_index); } } return result; @@ -360,6 +382,24 @@ export class RP2040 { this.core.setInterrupt(irq, value); } + // Single-core part: the per-core variant ignores the core index. Present for IRPChip parity + // with the dual-core RP2350. + setInterruptCore(irq: number, value: boolean, _core: number) { + this.core.setInterrupt(irq, value); + } + + dma_clearDREQ(dreq: number) { + this.dma.clearDREQ(dreq); + } + + dma_setDREQ(dreq: number) { + this.dma.setDREQ(dreq); + } + + get cycles(): number { + return this.core.cycles; + } + updateIOInterrupt() { let interruptValue = false; for (const pin of this.gpio) { @@ -370,7 +410,68 @@ export class RP2040 { this.setInterrupt(IRQ.IO_BANK0, interruptValue); } + // GPIOPin delegates its function-select -> peripheral-output dispatch to the chip (see + // IGPIOChipHost in gpio-pin.ts). RP2040 wires the RP2040 peripheral set; RP2350 has its own. + gpioRawOutputEnable(index: number): boolean { + const bitmask = 1 << index; + switch (this.gpio[index].functionSelect) { + case FUNCTION_PWM: + return !!(this.pwm.gpioDirection & bitmask); + case FUNCTION_SIO: + return !!(this.sio.gpioOutputEnable & bitmask); + case FUNCTION_PIO0: + return !!(this.pio[0].pinDirections & bitmask); + case FUNCTION_PIO1: + return !!(this.pio[1].pinDirections & bitmask); + default: + return false; + } + } + + gpioRawOutputValue(index: number): boolean { + const bitmask = 1 << index; + switch (this.gpio[index].functionSelect) { + case FUNCTION_PWM: + return !!(this.pwm.gpioValue & bitmask); + case FUNCTION_SIO: + return !!(this.sio.gpioValue & bitmask); + case FUNCTION_PIO0: + return !!(this.pio[0].pinValues & bitmask); + case FUNCTION_PIO1: + return !!(this.pio[1].pinValues & bitmask); + default: + return false; + } + } + + gpioInputValueHasBeenSet(index: number): void { + if (this.gpio[index].functionSelect === FUNCTION_PWM) { + this.pwm.gpioOnInput(index); + } + for (const pio of this.pio) { + for (const machine of pio.machines) { + if ( + machine.enabled && + machine.waiting && + machine.waitType === WaitType.Pin && + machine.waitIndex === index + ) { + machine.checkWait(); + } + } + } + } + step() { this.core.executeInstruction(); } + + // IRPChip parity. RP2040 advances peripherals through its existing clock/alarm machinery rather + // than the RP2350 stepCores/stepThings split, so these just satisfy the interface; nothing on the + // RP2040 path calls them. + stepCores(): void { + this.step(); + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + stepThings(cycles: number): void {} } diff --git a/src/rp2350.spec.ts b/src/rp2350.spec.ts new file mode 100644 index 0000000000..60616436e3 --- /dev/null +++ b/src/rp2350.spec.ts @@ -0,0 +1,105 @@ +import * as fs from 'fs'; +import { describe, expect, it, vi } from 'vitest'; +import { BasePeripheral } from './peripherals/peripheral.js'; +import { RP2350 } from './rp2350.js'; +import { bootrom_rp2350_A2 } from '../demo/bootrom_rp2350.js'; +import { loadHex } from '../demo/intelhex.js'; +import { GPIOPinState } from '../src/gpio-pin.js'; + +describe('RP2350', () => { + describe('IO Register Writes', () => { + it('should replicate 8-bit values four times', () => { + const rp2350 = new RP2350(); + const testPeripheral = new BasePeripheral(rp2350, 'TestPeripheral'); + const writeUint32 = vi.spyOn(testPeripheral, 'writeUint32'); + rp2350.peripherals[0x10] = testPeripheral; + rp2350.writeUint8(0x10123, 0x534); + expect(writeUint32).toHaveBeenCalledWith(0x120, 0x34343434); + }); + + it('should replicate 16-bit values twice', () => { + const rp2350 = new RP2350(); + const testPeripheral = new BasePeripheral(rp2350, 'TestPeripheral'); + const writeUint32 = vi.spyOn(testPeripheral, 'writeUint32'); + rp2350.peripherals[0x10] = testPeripheral; + rp2350.writeUint16(0x10123, 0x12345678); + expect(writeUint32).toHaveBeenCalledWith(0x120, 0x56785678); + }); + + it('should support atomic I/O register write addresses', () => { + const rp2350 = new RP2350(); + const testPeripheral = new BasePeripheral(rp2350, 'TestAtomic'); + vi.spyOn(testPeripheral, 'readUint32').mockReturnValue(0xff); + const writeUint32 = vi.spyOn(testPeripheral, 'writeUint32'); + rp2350.peripherals[0x10] = testPeripheral; + rp2350.writeUint32(0x11120, 0x0f); + expect(writeUint32).toHaveBeenCalledWith(0x120, 0xf0); + }); + }); + + // NOTE (GhostLabs fork): all three RISC-V firmware integration tests now PASS on the latest- + // upstream base. Two genuine RISC-V core bugs (found by lockstepping this engine against c1570's) + // were fixed first: + // * MEINEXT reset value — it must reset to NOIRQ, else the !NOIRQ interrupt gate took a phantom + // IRQ 0 the instant the firmware enabled interrupts (this is what stalled hello_timer). + // * MTVEC mode bits — trap targets must mask mtvec[1:0]; a vectored mtvec (RP2350 uses + // 0x20000001) sent an exception to the odd address 0x20000001 and crashed (the pio_blink fault). + // pio_blink then needed the RP2350 PIO pin-window feature: the GPIOBASE register (0x168) re-bases a + // PIO block's internal 32-pin window onto chip GPIO16..47, which is how a PIO drives GPIO32. With + // GPIOBASE handled (plus the gpiobase offset in checkChangedPins and the 32-bit pad mask), GPIO32 + // toggles. The remaining RP2350 PIO features c1570 also implemented — IN_COUNT masking, the PIO + // IRQ-index mode, neighbour-SM synchronous restart, FJOIN RX/TX — are not exercised by pio_blink + // (a plain counter-blink: pull/out/mov/set/jmp) and are deferred, each to land with its own test. + // See ROADMAP.md. + describe('rp2350js regression tests', () => { + it('should run blink_simple', () => { + const rp2350 = new RP2350(); + rp2350.loadBootrom(bootrom_rp2350_A2); + const hex = fs.readFileSync("./demo/riscv_blink/blink_simple.hex", 'utf-8'); + loadHex(hex, rp2350.sram, 0x20000000); + rp2350.core0.pc = rp2350.core1.pc = 0x20000220; + let gpio2toggle = 0; + let gpio25toggle = 0; + rp2350.gpio[2].addListener( (state: GPIOPinState, oldState: GPIOPinState) => { if(state == 1 && oldState == 0) gpio2toggle++ } ); + rp2350.gpio[25].addListener( (state: GPIOPinState, oldState: GPIOPinState) => { if(state == 1 && oldState == 0) gpio25toggle++ } ); + for(let i = 0; i < 500000; i++) rp2350.step(); + expect(gpio2toggle).equals(5); + expect(gpio25toggle).equals(2); + }); + + it('should run hello_timer', () => { + const rp2350 = new RP2350(); + rp2350.loadBootrom(bootrom_rp2350_A2); + const hex = fs.readFileSync("./demo/riscv_timer/hello_timer.hex", 'utf-8'); + loadHex(hex, rp2350.flash, 0x10000000); + rp2350.core0.pc = rp2350.core1.pc = 0x10000036; + let output = ""; + rp2350.uart[0].onByte = (value: number) => { + output = output + String.fromCharCode(value); + }; + for(let i = 0; i < 250000000; i++) rp2350.step(); + expect(output.startsWith("Hello Timer!")).toBeTruthy(); + expect((output.match(/Repeat at/g) || []).length).equals(19); + }, 60000); + }); + + it('should run pio_blink', () => { + const rp2350 = new RP2350(); + rp2350.loadBootrom(bootrom_rp2350_A2); + const hex = fs.readFileSync("./demo/riscv_pio_blink/pio_blink.hex", 'utf-8'); + loadHex(hex, rp2350.sram, 0x20000000); + + rp2350.core0.pc = rp2350.core1.pc = 0x20000220; + let output = ""; + rp2350.uart[0].onByte = (value: number) => { + output = output + String.fromCharCode(value); + }; + let gpio3toggle = 0; + let gpio32toggle = 0; + rp2350.gpio[3].addListener( (state: GPIOPinState, oldState: GPIOPinState) => { rp2350.gpio[3].setInputValue(state == 1); if(state == 1 && oldState == 0) gpio3toggle++ } ); + rp2350.gpio[32].addListener( (state: GPIOPinState, oldState: GPIOPinState) => { rp2350.gpio[32].setInputValue(state == 1); if(state == 1 && oldState == 0) gpio32toggle++ } ); + for(let i = 0; i < 2000000; i++) rp2350.step(); + expect(gpio3toggle).equals(2); + expect(gpio32toggle).equals(2); + }, 20000); +}); diff --git a/src/rp2350.ts b/src/rp2350.ts new file mode 100644 index 0000000000..7080fef8a7 --- /dev/null +++ b/src/rp2350.ts @@ -0,0 +1,494 @@ +import { IRPChip } from './rpchip.js'; +import { IClock } from './clock/clock.js'; +import { SimulationClock } from './clock/simulation-clock.js'; +import { CPU } from './riscv/cpu.js'; +import { GPIOPin, FUNCTION_PWM, FUNCTION_SIO, FUNCTION_PIO0, FUNCTION_PIO1, FUNCTION_PIO2 } from './gpio-pin.js'; +import { IRQ } from './irq_rp2350.js'; +import { RPADC } from './peripherals/adc.js'; +import { RPBUSCTRL } from './peripherals/busctrl.js'; +import { RPBootRAM } from './peripherals/bootram.js'; +import { RPPOWMAN } from './peripherals/powman.js'; +import { RPClocks } from './peripherals/clocks.js'; +import { DREQChannel, RPDMA } from './peripherals/dma_rp2350.js'; +import { RPI2C } from './peripherals/i2c.js'; +import { RPIO } from './peripherals/io_rp2350.js'; +import { RPPADS } from './peripherals/pads_rp2350.js'; +import { Peripheral, UnimplementedPeripheral } from './peripherals/peripheral.js'; +import { RPPIO, WaitType } from './peripherals/pio.js'; +import { RPPWM } from './peripherals/pwm.js'; +import { RP2350PLL } from './peripherals/pll_rp2350.js'; +import { RPReset } from './peripherals/reset.js'; +import { RP2040RTC } from './peripherals/rtc.js'; +import { RPSPI } from './peripherals/spi.js'; +import { RP2350SysCfg } from './peripherals/syscfg_rp2350.js'; +import { RP2350SysInfo } from './peripherals/sysinfo_rp2350.js'; +import { RPTBMAN } from './peripherals/tbman.js'; +import { RPTimer } from './peripherals/timer.js'; +import { RPUART } from './peripherals/uart.js'; +import { RPUSBController } from './peripherals/usb.js'; +import { RPSIO } from './sio_rp2350.js'; +import { RPWatchdog } from './peripherals/watchdog.js'; +import { Core } from './core.js'; +import { ConsoleLogger, Logger, LogLevel } from './utils/logging.js'; + +export const FLASH_START_ADDRESS = 0x10000000; +export const RAM_START_ADDRESS = 0x20000000; +export const APB_START_ADDRESS = 0x40000000; +export const DPRAM_START_ADDRESS = 0x50100000; +export const SIO_START_ADDRESS = 0xd0000000; + +const LOG_NAME = 'RP2350'; + +const KB = 1024; +const MB = 1024 * KB; +const MHz = 1_000_000; + +const FLASH_SIZE = 16 * MB; + +export class RP2350 implements IRPChip { + readonly bootrom = new Uint32Array((32 >>> 2) * KB); + readonly sram = new Uint8Array((256 * 2 + 8) * KB); + readonly sramView = new DataView(this.sram.buffer); + readonly flash = new Uint8Array(FLASH_SIZE); + readonly flash16 = new Uint16Array(this.flash.buffer); + readonly flashView = new DataView(this.flash.buffer); + readonly usbDPRAM = new Uint8Array(4 * KB); + readonly usbDPRAMView = new DataView(this.usbDPRAM.buffer); + + readonly identifier = "rp2350"; + + readonly core0: CPU = new CPU(this, 'RISCVCore0', 0); + readonly core1: CPU = new CPU(this, 'RISCVCore1', 1); + + /* Clocks */ + clkSys = 125 * MHz; + clkPeri = 125 * MHz; + + readonly sio = new RPSIO(this, IRQ.SIO_IRQ_FIFO, IRQ.SIO_IRQ_FIFO); + + readonly uart = [ + new RPUART(this, 'UART0', IRQ.UART0_IRQ, { + rx: DREQChannel.DREQ_UART0_RX, + tx: DREQChannel.DREQ_UART0_TX, + }), + new RPUART(this, 'UART1', IRQ.UART1_IRQ, { + rx: DREQChannel.DREQ_UART1_RX, + tx: DREQChannel.DREQ_UART1_TX, + }), + ]; + readonly i2c = [new RPI2C(this, 'I2C0', IRQ.I2C0_IRQ), new RPI2C(this, 'I2C1', IRQ.I2C1_IRQ)]; + readonly pwm = new RPPWM(this, 'PWM_BASE', IRQ.PWM_IRQ_WRAP_0, DREQChannel.DREQ_PWM_WRAP0); + readonly adc = new RPADC(this, 'ADC', IRQ.ADC_IRQ_FIFO, DREQChannel.DREQ_ADC); + + readonly gpio: Array = Array(48).fill(0).map((v,i) => new GPIOPin(this, i)); + + readonly qspi: Array = [ + new GPIOPin(this, 0, 'SCLK'), + new GPIOPin(this, 1, 'SS'), + new GPIOPin(this, 2, 'SD0'), + new GPIOPin(this, 3, 'SD1'), + new GPIOPin(this, 4, 'SD2'), + new GPIOPin(this, 5, 'SD3'), + ]; + + readonly dma = new RPDMA(this, 'DMA', IRQ.DMA_IRQ_0); + readonly pio: Array = [ + new RPPIO(this, 'PIO0', IRQ.PIO0_IRQ_0, 0, DREQChannel.DREQ_PIO0_RX0, DREQChannel.DREQ_PIO0_TX0), + new RPPIO(this, 'PIO1', IRQ.PIO1_IRQ_0, 1, DREQChannel.DREQ_PIO1_RX0, DREQChannel.DREQ_PIO1_TX0), + new RPPIO(this, 'PIO2', IRQ.PIO2_IRQ_0, 2, DREQChannel.DREQ_PIO2_RX0, DREQChannel.DREQ_PIO2_TX0), + ]; + readonly usbCtrl = new RPUSBController(this, 'USB', IRQ.USBCTRL_IRQ); + readonly spi = [ + new RPSPI(this, 'SPI0', IRQ.SPI0_IRQ, { + rx: DREQChannel.DREQ_SPI0_RX, + tx: DREQChannel.DREQ_SPI0_TX, + }), + new RPSPI(this, 'SPI1', IRQ.SPI1_IRQ, { + rx: DREQChannel.DREQ_SPI1_RX, + tx: DREQChannel.DREQ_SPI1_TX, + }), + ]; + + public logger: Logger = new ConsoleLogger(LogLevel.Debug, true); + + readonly peripherals: { [index: number]: Peripheral } = { + 0x40000: new RP2350SysInfo(this, 'SYSINFO_BASE'), + 0x40008: new RP2350SysCfg(this, 'SYSCFG'), + 0x40010: new RPClocks(this, 'CLOCKS_BASE'), + 0x40018: new UnimplementedPeripheral(this, 'PSM_BASE'), + 0x40020: new RPReset(this, 'RESETS_BASE', 0x1fffffff), + 0x40028: new RPIO(this, 'IO_BANK0_BASE'), + 0x40030: new UnimplementedPeripheral(this, 'IO_QSPI_BASE'), + 0x40038: new RPPADS(this, 'PADS_BANK0_BASE', 'bank0'), + 0x40040: new RPPADS(this, 'PADS_QSPI_BASE', 'qspi'), + 0x40048: new UnimplementedPeripheral(this, 'XOSC_BASE'), + 0x40050: new RP2350PLL(this, 'PLL_SYS_BASE'), + 0x40058: new UnimplementedPeripheral(this, 'PLL_USB_BASE'), + 0x40060: new UnimplementedPeripheral(this, 'ACCESSCTRL_BASE'), + 0x40068: new UnimplementedPeripheral(this, 'BUSCTRL_BASE'), //TODO new RPBUSCTRL(this, 'BUSCTRL_BASE'), + 0x40070: this.uart[0], + 0x40078: this.uart[1], + 0x40080: this.spi[0], + 0x40088: this.spi[1], + 0x40090: this.i2c[0], + 0x40098: this.i2c[1], + 0x400a0: this.adc, + 0x400a8: this.pwm, + 0x400b0: new RPTimer(this, 'TIMER0_BASE', IRQ.TIMER0_IRQ_0), + 0x400b8: new RPTimer(this, 'TIMER1_BASE', IRQ.TIMER1_IRQ_0), + 0x400c0: new UnimplementedPeripheral(this, 'HSTX_CTRL_BASE'), + 0x400d0: new UnimplementedPeripheral(this, 'XIP_QMI_BASE'), + + 0x400d8: new UnimplementedPeripheral(this, 'WATCHDOG_BASE'), //TODO new RPWatchdog(this, 'WATCHDOG_BASE'), + //0x400xx: new RP2040RTC(this, 'RTC_BASE'), + 0x400e0: new RPBootRAM(this, 'BOOTRAM_BASE'), + 0x400e8: new UnimplementedPeripheral(this, 'ROSC_BASE'), + 0x40100: new RPPOWMAN(this, 'POWMAN_BASE'), + 0x40108: new UnimplementedPeripheral(this, 'TICKS_BASE'), + 0x40160: new RPTBMAN(this, 'TBMAN_BASE'), + + 0x50000: this.dma, + 0x50110: this.usbCtrl, + 0x50200: this.pio[0], + 0x50300: this.pio[1], + 0x50400: this.pio[2], + }; + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + public onTrace = (coreNumber: number, pc: number, tag: string) => {}; + + constructor(readonly debug: boolean = false, readonly clock: IClock = new SimulationClock()) { + this.reset(); + this.core0.onSEV = () => { + if (this.core1.waiting) { + this.core1.waiting = false; + } else { + this.core1.eventRegistered = true; + } + }; + this.core1.onSEV = () => { + if (this.core0.waiting) { + this.core0.waiting = false; + } else { + this.core0.eventRegistered = true; + } + }; + } + + isCore0Running = true; + loadBootrom(bootromData: Uint32Array) { + this.bootrom.set(bootromData); + this.reset(); + } + + disassembly = ""; + loadDisassembly(dis: string) { + this.disassembly = dis; + } + + reset() { + this.core0.reset(); + this.core1.reset(); + this.pwm.reset(); + this.flash.fill(0xff); + } + + readUint32(address: number) : number { + address = address >>> 0; // round to 32-bits, unsigned + if (address & 0x3) { + this.logger.error( + LOG_NAME, + `read from address ${address.toString(16)}, which is not 32 bit aligned` + ); + } + + const { bootrom } = this; + const core = this.isCore0Running ? Core.Core0 : Core.Core1; + if (address < bootrom.length * 4) { + return bootrom[address / 4]; + } else if (address >= FLASH_START_ADDRESS && address < RAM_START_ADDRESS) { + // XIP mirrors flash four times. Also, reads from invalid adresses + // don't seem to trigger exceptions (see Micropython) + const offset = address & (FLASH_SIZE - 1); + return this.flashView.getUint32(offset, true); + } else if (address >= RAM_START_ADDRESS && address < RAM_START_ADDRESS + this.sram.length) { + return this.sramView.getUint32(address - RAM_START_ADDRESS, true); + } else if ( + address >= DPRAM_START_ADDRESS && + address < DPRAM_START_ADDRESS + this.usbDPRAM.length + ) { + return this.usbDPRAMView.getUint32(address - DPRAM_START_ADDRESS, true); + } else if (address >= SIO_START_ADDRESS && address < SIO_START_ADDRESS + 0x10000000) { + return this.sio.readUint32(address - SIO_START_ADDRESS, core); + } + + const peripheral = this.findPeripheral(address); + if (peripheral) { + return peripheral.readUint32(address & 0x3fff); + } + + throw Error(`${LOG_NAME} Read from invalid memory address: ${address.toString(16)}`); + //return 0xffffffff; + } + + findPeripheral(address: number) { + return this.peripherals[(address >>> 14) << 2]; + } + + /** We assume the address is 16-bit aligned */ + readUint16(address: number) { + if (address >= FLASH_START_ADDRESS && address < RAM_START_ADDRESS) { + return this.flashView.getUint16(address & (FLASH_SIZE - 1), true); + } else if (address >= RAM_START_ADDRESS && address < RAM_START_ADDRESS + this.sram.length) { + return this.sramView.getUint16(address - RAM_START_ADDRESS, true); + } + + const value = this.readUint32(address & 0xfffffffc); + return address & 0x2 ? (value & 0xffff0000) >>> 16 : value & 0xffff; + } + + readUint8(address: number) { + if (address >= FLASH_START_ADDRESS && address < RAM_START_ADDRESS) { + return this.flash[address & (FLASH_SIZE - 1)]; + } else if (address >= RAM_START_ADDRESS && address < RAM_START_ADDRESS + this.sram.length) { + return this.sram[address - RAM_START_ADDRESS]; + } + + const value = this.readUint16(address & 0xfffffffe); + return (address & 0x1 ? (value & 0xff00) >>> 8 : value & 0xff) >>> 0; + } + + writeUint32(address: number, value: number) { + address = address >>> 0; + const { bootrom } = this; + const core = this.isCore0Running ? Core.Core0 : Core.Core1; + const peripheral = this.findPeripheral(address); + if (peripheral) { + const atomicType = (address & 0x3000) >> 12; + const offset = address & 0xfff; + peripheral.writeUint32Atomic(offset, value, atomicType); + } else if (address < bootrom.length * 4) { + bootrom[address / 4] = value; + } else if ( + address >= FLASH_START_ADDRESS && + address < RAM_START_ADDRESS + ) { + return; // "XIP memory is read-only by default" (writes get downgraded to reads) + } else if (address >= RAM_START_ADDRESS && address < RAM_START_ADDRESS + this.sram.length) { + this.sramView.setUint32(address - RAM_START_ADDRESS, value, true); + } else if ( + address >= DPRAM_START_ADDRESS && + address < DPRAM_START_ADDRESS + this.usbDPRAM.length + ) { + const offset = address - DPRAM_START_ADDRESS; + this.usbDPRAMView.setUint32(offset, value, true); + this.usbCtrl.DPRAMUpdated(offset, value); + } else if (address >= SIO_START_ADDRESS && address < SIO_START_ADDRESS + 0x10000000) { + this.sio.writeUint32(address - SIO_START_ADDRESS, value, core); + } else { + throw Error(`${LOG_NAME} Write to invalid memory address: ${address.toString(16)}`); + } + } + + writeUint8(address: number, value: number) { + if (address >= RAM_START_ADDRESS && address < RAM_START_ADDRESS + this.sram.length) { + this.sram[address - RAM_START_ADDRESS] = value; + return; + } + if (address >= FLASH_START_ADDRESS && address < RAM_START_ADDRESS) { + return; + } + + const alignedAddress = (address & 0xfffffffc) >>> 0; + const offset = address & 0x3; + const peripheral = this.findPeripheral(address); + if (peripheral) { + const atomicType = (alignedAddress & 0x3000) >> 12; + const offset = alignedAddress & 0xfff; + peripheral.writeUint32Atomic( + offset, + (value & 0xff) | ((value & 0xff) << 8) | ((value & 0xff) << 16) | ((value & 0xff) << 24), + atomicType + ); + return; + } + const originalValue = this.readUint32(alignedAddress); + const newValue = new Uint32Array([originalValue]); + new DataView(newValue.buffer).setUint8(offset, value); + this.writeUint32(alignedAddress, newValue[0]); + } + + writeUint16(address: number, value: number) { + // we assume that addess is 16-bit aligned. + // Ideally we should generate a fault if not! + + if (address >= RAM_START_ADDRESS && address < RAM_START_ADDRESS + this.sram.length) { + this.sramView.setUint16(address - RAM_START_ADDRESS, value, true); + return; + } + if (address >= FLASH_START_ADDRESS && address < RAM_START_ADDRESS) { + return; + } + + const alignedAddress = (address & 0xfffffffc) >>> 0; + const offset = address & 0x3; + const peripheral = this.findPeripheral(address); + if (peripheral) { + const atomicType = (alignedAddress & 0x3000) >> 12; + const offset = alignedAddress & 0xfff; + peripheral.writeUint32Atomic(offset, (value & 0xffff) | ((value & 0xffff) << 16), atomicType); + return; + } + const originalValue = this.readUint32(alignedAddress); + const newValue = new Uint32Array([originalValue]); + new DataView(newValue.buffer).setUint16(offset, value, true); + this.writeUint32(alignedAddress, newValue[0]); + } + + dma_clearDREQ(dreq: number) { + this.dma.clearDREQ(dreq); + } + + dma_setDREQ(dreq: number) { + this.dma.setDREQ(dreq); + } + + get cycles(): number { + return this.core0.cycles; + } + + gpioValues(start_index: number) { + const { gpio } = this; + let result = 0; + const end_index = Math.min(start_index + 32, gpio.length); + for (let gpioIndex = start_index; gpioIndex < end_index; gpioIndex++) { + if (gpio[gpioIndex].inputValue) { + result |= 1 << (gpioIndex - start_index); + } + } + return result; + } + + gpioRawOutputValue(index: number): boolean { + const functionSelect = this.gpio[index].functionSelect; + const mask = 1 << index; + switch (functionSelect) { + case FUNCTION_PWM: + return !!(this.pwm.gpioValue & mask); + case FUNCTION_SIO: + return this.sio.getPinValue(index); + case FUNCTION_PIO0: + return this.pio[0].getPinValue(index); + case FUNCTION_PIO1: + return this.pio[1].getPinValue(index); + case FUNCTION_PIO2: + return this.pio[2].getPinValue(index); + default: + return false; + } + } + + gpioRawOutputEnable(index: number): boolean { + const functionSelect = this.gpio[index].functionSelect; + const mask = 1 << index; + switch (functionSelect) { + case FUNCTION_PWM: + return !!(this.pwm.gpioDirection & mask); + case FUNCTION_SIO: + return this.sio.getOutputEnabled(index); + case FUNCTION_PIO0: + return this.pio[0].getPinOutputEnabled(index); + case FUNCTION_PIO1: + return this.pio[1].getPinOutputEnabled(index); + case FUNCTION_PIO2: + return this.pio[2].getPinOutputEnabled(index); + default: + return false; + } + } + + gpioInputValueHasBeenSet(index: number) { + if(this.gpio[index].functionSelect === FUNCTION_PWM) { + this.pwm.gpioOnInput(index); + } + for (const pio of this.pio) { + for (const machine of pio.machines) { + if ( + machine.enabled && + machine.waiting && + machine.waitType === WaitType.Pin && + machine.waitIndex === index + ) { + machine.checkWait(); + } + } + } + } + + setInterrupt(irq: number, value: boolean) { + this.core0.setInterrupt(irq, value); + this.core1.setInterrupt(irq, value); + } + + setInterruptCore(irq: number, value: boolean, core: Core) { + switch (core) { + case Core.Core0: + this.core0.setInterrupt(irq, value); + break; + case Core.Core1: + this.core1.setInterrupt(irq, value); + break; + } + } + + updateIOInterrupt() { + let interruptValue = false; + for (const pin of this.gpio) { + if (pin.irqValue) { + interruptValue = true; + } + } + this.setInterrupt(IRQ.IO_IRQ_BANK0, interruptValue); + } + + stepCores() { + this.core0.stopped = false; + this.core1.stopped = false; + let core0StartCycles = this.core0.cycles; + //if(this.core0.cycles>(1<<0)) console.log(`core0: ${this.core0.cycles}, waiting: ${this.core0.waiting}`); + this.isCore0Running = true; + this.core0.executeInstruction(); + this.isCore0Running = false; + while(this.core1.cycles < this.core0.cycles) { + //if(this.core0.cycles>(1<<0)) console.log(`core1: ${this.core1.cycles}, waiting: ${this.core1.waiting}`); + this.core1.executeInstruction(); + } + return this.core0.cycles - core0StartCycles; + } + + stepThings(cycles: number) { + for(let cycle = 0; cycle < cycles; cycle++) { + this.pio[0].step(); + this.pio[1].step(); + this.pio[2].step(); + } + const cycleNanos = 1e9 / this.clkSys; + this.clock.tick(cycles * cycleNanos); + } + + step() { + this.stepThings(this.stepCores()); + } + + stop() {} + execute() {} + + executing(core: Core): boolean { + switch (core) { + case Core.Core0: + return this.core0.stopped; + case Core.Core1: + return this.core1.stopped; + } + } +} diff --git a/src/rpchip.ts b/src/rpchip.ts new file mode 100644 index 0000000000..9a35965343 --- /dev/null +++ b/src/rpchip.ts @@ -0,0 +1,50 @@ +import { GPIOPin } from './gpio-pin.js'; +import { IClock } from './clock/clock.js'; +import { Logger } from './utils/logging.js'; +import { RPPIO } from './peripherals/pio.js'; + +export interface IRPChip { + readonly identifier: string; // "rp2040" or "rp2350" + + logger: Logger; + loadBootrom(bootromData: Uint32Array): void; + readonly disassembly: string; + loadDisassembly(dis: string): void; + onTrace(coreNumber: number, pc: number, tag: string): void; + + readonly qspi: Array; + readonly gpio: Array; + gpioValues(start_index: number): number; + gpioRawOutputValue(index: number): boolean; + gpioRawOutputEnable(index: number): boolean; + gpioInputValueHasBeenSet(index: number): void; + + readonly pio: Array; + + readonly usbDPRAM: Uint8Array; + readonly usbDPRAMView: DataView; + + readonly cycles: number; + readonly clkSys: number; + readonly clkPeri: number; + + readUint32(address: number): number; + readUint16(address: number): number; + readUint8(address: number): number; + writeUint32(address: number, value: number): void; + writeUint8(address: number, value: number): void; + writeUint16(address: number, value: number): void; + + dma_clearDREQ(dreq: number): void; + dma_setDREQ(dreq: number): void; + clock: IClock; + + reset(): void; + setInterrupt(irq: number, value: boolean): void; + setInterruptCore(irq: number, value: boolean, core: number): void; + updateIOInterrupt(): void; + + stepCores(): void; + stepThings(cycles: number): void; + step(): void; +} diff --git a/src/sio-core.ts b/src/sio-core.ts new file mode 100644 index 0000000000..3b9b2bc110 --- /dev/null +++ b/src/sio-core.ts @@ -0,0 +1,373 @@ +import { IRPChip } from './rpchip.js'; +import type { RP2350 } from './rp2350.js'; +import { Core } from './core.js'; +import { Interpolator } from './interpolator.js'; +import { FIFO } from './utils/fifo.js'; + +//HARDWARE DIVIDER +const DIV_UDIVIDEND = 0x060; // Divider unsigned dividend +const DIV_UDIVISOR = 0x064; // Divider unsigned divisor +const DIV_SDIVIDEND = 0x068; // Divider signed dividend +const DIV_SDIVISOR = 0x06c; // Divider signed divisor +const DIV_QUOTIENT = 0x070; // Divider result quotient +const DIV_REMAINDER = 0x074; //Divider result remainder +const DIV_CSR = 0x078; + +//INTERPOLATOR +const INTERP0_ACCUM0 = 0x080; // Read/write access to accumulator 0 +const INTERP0_ACCUM1 = 0x084; // Read/write access to accumulator 1 +const INTERP0_BASE0 = 0x088; // Read/write access to BASE0 register +const INTERP0_BASE1 = 0x08c; // Read/write access to BASE1 register +const INTERP0_BASE2 = 0x090; // Read/write access to BASE2 register +const INTERP0_POP_LANE0 = 0x094; // Read LANE0 result, and simultaneously write lane results to both accumulators (POP) +const INTERP0_POP_LANE1 = 0x098; // Read LANE1 result, and simultaneously write lane results to both accumulators (POP) +const INTERP0_POP_FULL = 0x09c; // Read FULL result, and simultaneously write lane results to both accumulators (POP) +const INTERP0_PEEK_LANE0 = 0x0a0; // Read LANE0 result, without altering any internal state (PEEK) +const INTERP0_PEEK_LANE1 = 0x0a4; // Read LANE1 result, without altering any internal state (PEEK) +const INTERP0_PEEK_FULL = 0x0a8; // Read FULL result, without altering any internal state (PEEK) +const INTERP0_CTRL_LANE0 = 0x0ac; // Control register for lane 0 +const INTERP0_CTRL_LANE1 = 0x0b0; // Control register for lane 1 +const INTERP0_ACCUM0_ADD = 0x0b4; // Values written here are atomically added to ACCUM0 +const INTERP0_ACCUM1_ADD = 0x0b8; // Values written here are atomically added to ACCUM1 +const INTERP0_BASE_1AND0 = 0x0bc; // On write, the lower 16 bits go to BASE0, upper bits to BASE1 simultaneously +const INTERP1_ACCUM0 = 0x0c0; // Read/write access to accumulator 0 +const INTERP1_ACCUM1 = 0x0c4; // Read/write access to accumulator 1 +const INTERP1_BASE0 = 0x0c8; // Read/write access to BASE0 register +const INTERP1_BASE1 = 0x0cc; // Read/write access to BASE1 register +const INTERP1_BASE2 = 0x0d0; // Read/write access to BASE2 register +const INTERP1_POP_LANE0 = 0x0d4; // Read LANE0 result, and simultaneously write lane results to both accumulators (POP) +const INTERP1_POP_LANE1 = 0x0d8; // Read LANE1 result, and simultaneously write lane results to both accumulators (POP) +const INTERP1_POP_FULL = 0x0dc; // Read FULL result, and simultaneously write lane results to both accumulators (POP) +const INTERP1_PEEK_LANE0 = 0x0e0; // Read LANE0 result, without altering any internal state (PEEK) +const INTERP1_PEEK_LANE1 = 0x0e4; // Read LANE1 result, without altering any internal state (PEEK) +const INTERP1_PEEK_FULL = 0x0e8; // Read FULL result, without altering any internal state (PEEK) +const INTERP1_CTRL_LANE0 = 0x0ec; // Control register for lane 0 +const INTERP1_CTRL_LANE1 = 0x0f0; // Control register for lane 1 +const INTERP1_ACCUM0_ADD = 0x0f4; // Values written here are atomically added to ACCUM0 +const INTERP1_ACCUM1_ADD = 0x0f8; // Values written here are atomically added to ACCUM1 +const INTERP1_BASE_1AND0 = 0x0fc; // On write, the lower 16 bits go to BASE0, upper bits to BASE1 simultaneously + +// FIFO +const FIFO_ST_VLD_BITS = 0x01; +const FIFO_ST_RDY_BITS = 0x02; +const FIFO_ST_WOF_BITS = 0x04; +const FIFO_ST_ROE_BITS = 0x08; + +const FIFO_ST = 0x50; +const FIFO_WR = 0x54; +const FIFO_RD = 0x58; + +export class RPSIOCore { + divDividend = 0; + divDivisor = 1; + divQuotient = 0; + divRemainder = 0; + divCSR = 0; + + interp0 = new Interpolator(0); + interp1 = new Interpolator(1); + + ROE = false; + WOF = false; + + static create2Cores(rp2040: IRPChip, sio_proc0_irq: number, sio_proc1_irq: number) { + const rxFIFO = new FIFO(8); + const txFIFO = new FIFO(8); + const core0 = new RPSIOCore(rp2040, rxFIFO, txFIFO, sio_proc0_irq, sio_proc1_irq, Core.Core0, Core.Core1); + const core1 = new RPSIOCore(rp2040, txFIFO, rxFIFO, sio_proc1_irq, sio_proc0_irq, Core.Core1, Core.Core0); + return [core0, core1]; + } + + private constructor( + private readonly rp2040: IRPChip, + private readonly rxFIFO: FIFO, + private readonly txFIFO: FIFO, + private readonly sio_interrupt: number, + private readonly sio_interrupt_other_core: number, + private readonly core: Core, + private readonly core_other: Core + ) {} + + readUint32(offset: number) { + switch (offset) { + case DIV_UDIVIDEND: + return this.divDividend; + case DIV_SDIVIDEND: + return this.divDividend; + case DIV_UDIVISOR: + return this.divDivisor; + case DIV_SDIVISOR: + return this.divDivisor; + case DIV_QUOTIENT: + this.divCSR &= ~0b10; + return this.divQuotient; + case DIV_REMAINDER: + return this.divRemainder; + case DIV_CSR: + return this.divCSR; + case INTERP0_ACCUM0: + return this.interp0.accum0; + case INTERP0_ACCUM1: + return this.interp0.accum1; + case INTERP0_BASE0: + return this.interp0.base0; + case INTERP0_BASE1: + return this.interp0.base1; + case INTERP0_BASE2: + return this.interp0.base2; + case INTERP0_CTRL_LANE0: + return this.interp0.ctrl0; + case INTERP0_CTRL_LANE1: + return this.interp0.ctrl1; + case INTERP0_PEEK_LANE0: + return this.interp0.result0; + case INTERP0_PEEK_LANE1: + return this.interp0.result1; + case INTERP0_PEEK_FULL: + return this.interp0.result2; + case INTERP0_POP_LANE0: { + const value = this.interp0.result0; + this.interp0.writeback(); + return value; + } + case INTERP0_POP_LANE1: { + const value = this.interp0.result1; + this.interp0.writeback(); + return value; + } + case INTERP0_POP_FULL: { + const value = this.interp0.result2; + this.interp0.writeback(); + return value; + } + case INTERP0_ACCUM0_ADD: + return this.interp0.smresult0; + case INTERP0_ACCUM1_ADD: + return this.interp0.smresult1; + case INTERP1_ACCUM0: + return this.interp1.accum0; + case INTERP1_ACCUM1: + return this.interp1.accum1; + case INTERP1_BASE0: + return this.interp1.base0; + case INTERP1_BASE1: + return this.interp1.base1; + case INTERP1_BASE2: + return this.interp1.base2; + case INTERP1_CTRL_LANE0: + return this.interp1.ctrl0; + case INTERP1_CTRL_LANE1: + return this.interp1.ctrl1; + case INTERP1_PEEK_LANE0: + return this.interp1.result0; + case INTERP1_PEEK_LANE1: + return this.interp1.result1; + case INTERP1_PEEK_FULL: + return this.interp1.result2; + case INTERP1_POP_LANE0: { + const value = this.interp1.result0; + this.interp1.writeback(); + return value; + } + case INTERP1_POP_LANE1: { + const value = this.interp1.result1; + this.interp1.writeback(); + return value; + } + case INTERP1_POP_FULL: { + const value = this.interp1.result2; + this.interp1.writeback(); + return value; + } + case INTERP1_ACCUM0_ADD: + return this.interp1.smresult0; + case INTERP1_ACCUM1_ADD: + return this.interp1.smresult1; + case FIFO_ST: { + let value = 0; + if (!this.rxFIFO.empty) { + value |= FIFO_ST_VLD_BITS; + } + if (!this.txFIFO.full) { + value |= FIFO_ST_RDY_BITS; + } + if (this.WOF) { + value |= FIFO_ST_WOF_BITS; + } + if (this.ROE) { + value |= FIFO_ST_ROE_BITS; + } + return value; + } + case FIFO_RD: + if (this.rxFIFO.empty) { + this.ROE = true; + this.rp2040.setInterruptCore(this.sio_interrupt, true, this.core); + return 0; + } + return this.rxFIFO.pull(); + default: + console.warn(`Read from invalid SIO address: ${offset.toString(16)} (${this.core})`); + return 0xffffffff; + } + } + + writeUint32(offset: number, value: number) { + switch (offset) { + case DIV_UDIVIDEND: + this.divDividend = value; + this.updateHardwareDivider(false); + break; + case DIV_SDIVIDEND: + this.divDividend = value; + this.updateHardwareDivider(true); + break; + case DIV_UDIVISOR: + this.divDivisor = value; + this.updateHardwareDivider(false); + break; + case DIV_SDIVISOR: + this.divDivisor = value; + this.updateHardwareDivider(true); + break; + case DIV_QUOTIENT: + this.divQuotient = value; + this.divCSR = 0b11; + break; + case DIV_REMAINDER: + this.divRemainder = value; + this.divCSR = 0b11; + break; + case INTERP0_ACCUM0: + this.interp0.accum0 = value; + this.interp0.update(); + break; + case INTERP0_ACCUM1: + this.interp0.accum1 = value; + this.interp0.update(); + break; + case INTERP0_BASE0: + this.interp0.base0 = value; + this.interp0.update(); + break; + case INTERP0_BASE1: + this.interp0.base1 = value; + this.interp0.update(); + break; + case INTERP0_BASE2: + this.interp0.base2 = value; + this.interp0.update(); + break; + case INTERP0_CTRL_LANE0: + this.interp0.ctrl0 = value; + this.interp0.update(); + break; + case INTERP0_CTRL_LANE1: + this.interp0.ctrl1 = value; + this.interp0.update(); + break; + case INTERP0_ACCUM0_ADD: + this.interp0.accum0 += value; + this.interp0.update(); + break; + case INTERP0_ACCUM1_ADD: + this.interp0.accum1 += value; + this.interp0.update(); + break; + case INTERP0_BASE_1AND0: + this.interp0.setBase01(value); + break; + case INTERP1_ACCUM0: + this.interp1.accum0 = value; + this.interp1.update(); + break; + case INTERP1_ACCUM1: + this.interp1.accum1 = value; + this.interp1.update(); + break; + case INTERP1_BASE0: + this.interp1.base0 = value; + this.interp1.update(); + break; + case INTERP1_BASE1: + this.interp1.base1 = value; + this.interp1.update(); + break; + case INTERP1_BASE2: + this.interp1.base2 = value; + this.interp1.update(); + break; + case INTERP1_CTRL_LANE0: + this.interp1.ctrl0 = value; + this.interp1.update(); + break; + case INTERP1_CTRL_LANE1: + this.interp1.ctrl1 = value; + this.interp1.update(); + break; + case INTERP1_ACCUM0_ADD: + this.interp1.accum0 += value; + this.interp1.update(); + break; + case INTERP1_ACCUM1_ADD: + this.interp1.accum1 += value; + this.interp1.update(); + break; + case INTERP1_BASE_1AND0: + this.interp1.setBase01(value); + break; + case FIFO_ST: + if (value | FIFO_ST_WOF_BITS) { + this.WOF = false; + } + if (value | FIFO_ST_ROE_BITS) { + this.ROE = false; + } + if (!this.WOF && !this.ROE && this.rxFIFO.empty) { + this.rp2040.setInterruptCore(this.sio_interrupt, false, this.core); + } + break; + case FIFO_WR: + if (this.txFIFO.full) { + this.WOF = true; + this.rp2040.setInterruptCore(this.sio_interrupt, true, this.core); + } else { + this.txFIFO.push(value); + this.rp2040.setInterruptCore(this.sio_interrupt_other_core, true, this.core_other); + } + break; + default: + console.warn( + `Write to invalid SIO address: ${offset.toString(16)}, value=${value.toString(16)} (${ + this.core + })` + ); + break; + } + } + + private updateHardwareDivider(signed: boolean) { + if (this.divDivisor == 0) { + this.divQuotient = this.divDividend > 0 ? -1 : 1; + this.divRemainder = this.divDividend; + } else { + if (signed) { + this.divQuotient = (this.divDividend | 0) / (this.divDivisor | 0); + this.divRemainder = (this.divDividend | 0) % (this.divDivisor | 0); + } else { + this.divQuotient = (this.divDividend >>> 0) / (this.divDivisor >>> 0); + this.divRemainder = (this.divDividend >>> 0) % (this.divDivisor >>> 0); + } + } + this.divCSR = 0b11; + // RPSIOCore is RP2350-only (instantiated by sio_rp2350); the dual RISC-V cores live on RP2350. + switch (this.core) { + case Core.Core0: + (this.rp2040 as RP2350).core0.cycles += 8; + break; + case Core.Core1: + (this.rp2040 as RP2350).core1.cycles += 8; + break; + } + } +} diff --git a/src/sio.ts b/src/sio.ts index 5fcf08fcc6..22bd4d08b7 100644 --- a/src/sio.ts +++ b/src/sio.ts @@ -118,7 +118,7 @@ export class RPSIO { } switch (offset) { case GPIO_IN: - return this.rp2040.gpioValues; + return this.rp2040.gpioValues(0); case GPIO_HI_IN: { const { qspi } = this.rp2040; let result = 0; diff --git a/src/sio_rp2350.ts b/src/sio_rp2350.ts new file mode 100644 index 0000000000..da69cc939f --- /dev/null +++ b/src/sio_rp2350.ts @@ -0,0 +1,230 @@ +import { IRPChip } from './rpchip.js'; +import { Core } from './core.js'; +import { RPSIOCore } from './sio-core.js'; + +const CPUID = 0x000; + +// GPIO +const GPIO_IN = 0x004; // Input value for GPIO pins +const GPIO_HI_IN = 0x008; // Input value for QSPI pins + +const GPIO_OUT = 0x010; // GPIO output value +const GPIO_OUT_SET = 0x018; // GPIO output value set +const GPIO_OUT_CLR = 0x020; // GPIO output value clear +const GPIO_OUT_XOR = 0x028; // GPIO output value XOR +const GPIO_OE = 0x030; // GPIO output enable +const GPIO_OE_SET = 0x038; // GPIO output enable set +const GPIO_OE_CLR = 0x040; // GPIO output enable clear +const GPIO_OE_XOR = 0x048; // GPIO output enable XOR + +const GPIO_HI_OUT = 0x014; // GPIO32..47, QSPI, USB output value +const GPIO_HI_OUT_SET = 0x01c; // GPIO32..47, QSPI, USB output value set +const GPIO_HI_OUT_CLR = 0x024; // GPIO32..47, QSPI, USB output value clear +const GPIO_HI_OUT_XOR = 0x02c; // GPIO32..47, QSPI, USB output value XOR +const GPIO_HI_OE = 0x034; // GPIO32..47, QSPI, USB output enable +const GPIO_HI_OE_SET = 0x03c; // GPIO32..47, QSPI, USB output enable set +const GPIO_HI_OE_CLR = 0x044; // GPIO32..47, QSPI, USB output enable clear +const GPIO_HI_OE_XOR = 0x04c; // GPIO32..47, QSPI, USB output enable XOR + +const GPIO_MASK = 0x3fffffff; + +//SPINLOCK +const SPINLOCK_ST = 0x5c; +const SPINLOCK0 = 0x100; +const SPINLOCK31 = 0x17c; + +export class RPSIO { + gpioValue = 0; + gpioOutputEnable = 0; + gpioHiValue = 0; + gpioHiOutputEnable = 0; + spinLock = 0; + readonly core0; + readonly core1; + + constructor(private readonly rp2040: IRPChip, readonly sio_proc0_irq: number, readonly sio_proc1_irq: number) { + const cores = RPSIOCore.create2Cores(rp2040, sio_proc0_irq, sio_proc1_irq); + this.core0 = cores[0]; + this.core1 = cores[1]; + } + + readUint32(offset: number, core: Core) : number { + if (offset >= SPINLOCK0 && offset <= SPINLOCK31) { + const bitIndexMask = 1 << ((offset - SPINLOCK0) / 4); + if (this.spinLock & bitIndexMask) { + return 0; + } else { + this.spinLock |= bitIndexMask; + return bitIndexMask; + } + } + switch (offset) { + case GPIO_IN: + return this.rp2040.gpioValues(0); + case GPIO_HI_IN: { + const { qspi } = this.rp2040; + let result = 0; + for (let qspiIndex = 0; qspiIndex < qspi.length; qspiIndex++) { + if (qspi[qspiIndex].inputValue) { + result |= 1 << qspiIndex; + } + } + result <<= 26; + result |= this.rp2040.gpioValues(32); + return result; + } + case GPIO_OUT: + return this.gpioValue; + case GPIO_OE: + return this.gpioOutputEnable; + case GPIO_HI_OUT: + return this.gpioHiValue; + case GPIO_HI_OE: + return this.gpioHiOutputEnable; + case GPIO_OUT_SET: + case GPIO_OUT_CLR: + case GPIO_OUT_XOR: + case GPIO_OE_SET: + case GPIO_OE_CLR: + case GPIO_OE_XOR: + case GPIO_HI_OUT_SET: + case GPIO_HI_OUT_CLR: + case GPIO_HI_OUT_XOR: + case GPIO_HI_OE_SET: + case GPIO_HI_OE_CLR: + case GPIO_HI_OE_XOR: + return 0; // TODO verify with silicone + case CPUID: + switch (core) { + case Core.Core0: + return 0; + case Core.Core1: + return 1; + } + break; + case SPINLOCK_ST: + return this.spinLock; + } + // Divider, Interpolator, FIFO get handled per core in sio-core + switch (core) { + case Core.Core0: + return this.core0.readUint32(offset); + case Core.Core1: + return this.core1.readUint32(offset); + } + } + + writeUint32(offset: number, value: number, core: Core) { + if (offset >= SPINLOCK0 && offset <= SPINLOCK31) { + const bitIndexMask = ~(1 << ((offset - SPINLOCK0) / 4)); + this.spinLock &= bitIndexMask; + return; + } + const prevGpioValue = this.gpioValue; + const prevGpioOutputEnable = this.gpioOutputEnable; + const prevGpioHiValue = this.gpioHiValue; + const prevGpioHiOutputEnable = this.gpioHiOutputEnable; + switch (offset) { + case GPIO_OUT: + this.gpioValue = value & GPIO_MASK; + break; + case GPIO_OUT_SET: + this.gpioValue |= value & GPIO_MASK; + break; + case GPIO_OUT_CLR: + this.gpioValue &= ~value; + break; + case GPIO_OUT_XOR: + this.gpioValue ^= value & GPIO_MASK; + break; + case GPIO_OE: + this.gpioOutputEnable = value & GPIO_MASK; + break; + case GPIO_OE_SET: + this.gpioOutputEnable |= value & GPIO_MASK; + break; + case GPIO_OE_CLR: + this.gpioOutputEnable &= ~value; + break; + case GPIO_OE_XOR: + this.gpioOutputEnable ^= value & GPIO_MASK; + break; + case GPIO_HI_OUT: + this.gpioHiValue = value & GPIO_MASK; + break; + case GPIO_HI_OUT_SET: + this.gpioHiValue |= value & GPIO_MASK; + break; + case GPIO_HI_OUT_CLR: + this.gpioHiValue &= ~value; + break; + case GPIO_HI_OUT_XOR: + this.gpioHiValue ^= value & GPIO_MASK; + break; + case GPIO_HI_OE: + this.gpioHiOutputEnable = value & GPIO_MASK; + break; + case GPIO_HI_OE_SET: + this.gpioHiOutputEnable |= value & GPIO_MASK; + break; + case GPIO_HI_OE_CLR: + this.gpioHiOutputEnable &= ~value; + break; + case GPIO_HI_OE_XOR: + this.gpioHiOutputEnable ^= value & GPIO_MASK; + break; + default: + // Divider, Interpolator, FIFO get handled per core in sio-core + switch (core) { + case Core.Core0: + this.core0.writeUint32(offset, value); + break; + case Core.Core1: + this.core1.writeUint32(offset, value); + break; + } + } + + let pinsToUpdate = + (this.gpioValue ^ prevGpioValue) | (this.gpioOutputEnable ^ prevGpioOutputEnable); + const { gpio } = this.rp2040; + if (pinsToUpdate) { + for (let gpioIndex = 0; gpioIndex < 32; gpioIndex++) { + if (pinsToUpdate & (1 << gpioIndex)) { + gpio[gpioIndex].checkForUpdates(); + } + } + } + + pinsToUpdate = + (this.gpioHiValue ^ prevGpioHiValue) | (this.gpioHiOutputEnable ^ prevGpioHiOutputEnable); + if (pinsToUpdate) { + for (let gpioIndex = 32; gpioIndex < gpio.length; gpioIndex++) { + if (pinsToUpdate & (1 << (gpioIndex - 32))) { + gpio[gpioIndex].checkForUpdates(); + } + } + } + //TODO qspi pins + } + + getPinValue(index: number) { + if (index < 32) { + return !!(this.gpioValue & (1 << index)); + } else if (index < 48) { + return !!(this.gpioHiValue & (1 << (index - 32))); + } + //TODO qspi pins + return false; + } + + getOutputEnabled(index: number) { + if (index < 32) { + return !!(this.gpioOutputEnable & (1 << index)); + } else if (index < 48) { + return !!(this.gpioHiOutputEnable & (1 << (index - 32))); + } + //TODO qspi pins + return false; + } +}