diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..567609b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+build/
diff --git a/LICENSE b/LICENSE
index 687ee36..797ffcc 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2013-2017 Cesanta Software Limited
+Copyright (c) 2013-2025 Cesanta Software Limited
All rights reserved
This software is dual-licensed: you can redistribute it and/or modify
diff --git a/mjs/Makefile b/Makefile
similarity index 55%
rename from mjs/Makefile
rename to Makefile
index dc3620e..d265d7e 100644
--- a/mjs/Makefile
+++ b/Makefile
@@ -1,22 +1,28 @@
-REPO_ROOT = ..
+MAKEFLAGS += --warn-undefined-variables
SRCPATH = src
-VPATH = $(REPO_ROOT)/common $(REPO_ROOT)/frozen src
BUILD_DIR = build
+RD ?= docker run -v $(CURDIR):$(CURDIR) --user=$(shell id -u):$(shell id -g) -w $(CURDIR)
+DOCKER_GCC ?= $(RD) mgos/gcc
+DOCKER_CLANG ?= $(RD) mgos/clang
+
include $(SRCPATH)/mjs_sources.mk
-TOP_SOURCES = $(addprefix $(SRCPATH)/, $(SOURCES))
TOP_HEADERS = $(addprefix $(SRCPATH)/, $(HEADERS))
-TOP_SOURCES_DIRS = $(sort $(dir $(TOP_SOURCES)))
-TOP_HEADERS_DIRS = $(sort $(dir $(TOP_HEADERS)))
-
-MFLAGS += -I. -I$(REPO_ROOT) -Isrc
-MFLAGS += -DMJS_MAIN -DMJS_EXPOSE_PRIVATE -DCS_ENABLE_STDIO -DMJS_ENABLE_DEBUG
-CFLAGS += -lm -W -Wall -g
-CFLAGS += $(MFLAGS) $(CFLAGS_EXTRA)
-COMMON_CFLAGS = -DCS_MMAP
+TOP_MJS_PUBLIC_HEADERS = $(addprefix $(SRCPATH)/, $(MJS_PUBLIC_HEADERS))
+TOP_MJS_SOURCES = $(addprefix $(SRCPATH)/, $(MJS_SOURCES))
+TOP_COMMON_SOURCES = $(addprefix $(SRCPATH)/, $(COMMON_SOURCES))
+
+CFLAGS_EXTRA ?=
+MFLAGS += -I. -Isrc -Isrc/frozen
+MFLAGS += -DMJS_MAIN -DMJS_EXPOSE_PRIVATE -DCS_ENABLE_STDIO -DMJS_ENABLE_DEBUG -I../frozen
+MFLAGS += $(CFLAGS_EXTRA)
+CFLAGS += -lm -std=c99 -Wall -Wextra -pedantic -g $(MFLAGS)
+COMMON_CFLAGS = -DCS_MMAP -DMJS_MODULE_LINES
ASAN_CFLAGS = -fsanitize=address
+.PHONY: all test test_full difftest ci-test
+
VERBOSE ?=
ifeq ($(VERBOSE),1)
Q :=
@@ -35,56 +41,57 @@ ifeq ($(UNAME_S),Linux)
ASAN_CFLAGS += -fsanitize=leak
endif
-PROG = $(BUILD_DIR)/mjs
-
-all: $(PROG)
-
-TESTUTIL_FILES = $(REPO_ROOT)/common/cs_dirent.c \
- $(REPO_ROOT)/common/cs_time.c \
- $(REPO_ROOT)/common/test_util.c
+ifeq ($(UNAME_S),Darwin)
+ MFLAGS += -D_DARWIN_C_SOURCE
+endif
-mjs.c: $(TOP_SOURCES) mjs.h Makefile
- @printf "AMALGAMATING\tmjs.c\n"
- $(Q) (cd .. && tools/amalgam.py \
- --autoinc --exportable-headers -I mjs --prefix MJS \
- --public-header mjs.h --ignore mjs/mjs.h \
- --first mjs/src/license.h,mjs/src/internal.h,common/platform.h,common/platforms/platform_windows.h,common/platforms/platform_unix.h,common/platforms/platform_esp_lwip.h $(TOP_SOURCES)) > $@
+PROG = $(BUILD_DIR)/mjs
-mjs.h: $(TOP_HEADERS) $(TOP_SOURCES) Makefile
- @printf "AMALGAMATING\tmjs.h\n"
- $(Q) (cd .. && tools/amalgam.py \
- --autoinc --exportable-headers -I mjs --prefix MJS \
- --ignore mjs/mjs.h \
- --first mjs/src/license.h,common/platform.h $(filter %_public.h,$(TOP_HEADERS))) > $@
+all: mjs.c mjs_no_common.c $(PROG)
+
+TESTUTIL_FILES = $(SRCPATH)/common/cs_dirent.c \
+ $(SRCPATH)/common/cs_time.c \
+ $(SRCPATH)/common/test_main.c \
+ $(SRCPATH)/common/test_util.c
+
+mjs.h: $(TOP_MJS_PUBLIC_HEADERS) Makefile tools/amalgam.py
+ @printf "AMALGAMATING $@\n"
+ $(Q) (tools/amalgam.py \
+ --autoinc -I src --prefix MJS --strict --license src/mjs_license.h \
+ --first common/platform.h $(TOP_MJS_PUBLIC_HEADERS)) > $@
+
+mjs.c: $(TOP_COMMON_SOURCES) $(TOP_MJS_SOURCES) mjs.h Makefile
+ @printf "AMALGAMATING $@\n"
+ $(Q) (tools/amalgam.py \
+ --autoinc -I src -I src/frozen --prefix MJS --license src/mjs_license.h \
+ --license src/mjs_license.h --public-header mjs.h --autoinc-ignore mjs_*_public.h \
+ --first mjs_common_guard_begin.h,common/platform.h,common/platforms/platform_windows.h,common/platforms/platform_unix.h,common/platforms/platform_esp_lwip.h \
+ $(TOP_COMMON_SOURCES) $(TOP_MJS_SOURCES)) > $@
+
+mjs_no_common.c: $(TOP_MJS_SOURCES) mjs.h Makefile
+ @printf "AMALGAMATING $@\n"
+ $(Q) (tools/amalgam.py \
+ --autoinc -I src -I src/frozen --prefix MJS --license src/mjs_license.h \
+ --public-header mjs.h --ignore mjs.h,*common/*,*frozen.[ch] \
+ --first mjs_common_guard_begin.h,common/platform.h,common/platforms/platform_windows.h,common/platforms/platform_unix.h,common/platforms/platform_esp_lwip.h \
+ $(TOP_MJS_SOURCES)) > $@
CFLAGS += $(COMMON_CFLAGS)
# NOTE: we compile straight from sources, not from the single amalgamated file,
# in order to make sure that all sources include the right headers
-$(PROG): $(TOP_SOURCES) $(TOP_HEADERS) $(BUILD_DIR)
- $(CLANG) $(CFLAGS) $(CPPFLAGS) $(TOP_SOURCES) -o $(PROG)
+$(PROG): $(TOP_MJS_SOURCES) $(TOP_COMMON_SOURCES) $(TOP_HEADERS) $(BUILD_DIR)
+ $(DOCKER_CLANG) clang $(CFLAGS) $(TOP_MJS_SOURCES) $(TOP_COMMON_SOURCES) -o $(PROG)
$(BUILD_DIR):
mkdir -p $@
-$(BUILD_DIR)/%.o: %.c $(TOP_HEADERS)
+$(BUILD_DIR)/%.o: %.c $(TOP_HEADERS) mjs.h
$(CLANG) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
-# On Windows and Mac, run container as root since volume sharing on those OSes
-# doesn't play nice with unprivileged user.
-#
-# On other OSes, run it as the current user.
-DOCKER_USER_ARG =
-ifneq ($(OS),Windows_NT)
-UNAME_S := $(shell uname -s)
-ifneq ($(UNAME_S),Darwin)
-DOCKER_USER_ARG = --user $$(id -u):$$(id -u)
-endif
-endif
-
-COMMON_TEST_FLAGS = -W -Wall -I. -I$(REPO_ROOT) -g3 -O0 $(COMMON_CFLAGS) $< $(TESTUTIL_FILES) -DMJS_MEMORY_STATS
+COMMON_TEST_FLAGS = -W -Wall -I. -Isrc -g3 -O0 $(COMMON_CFLAGS) $< $(TESTUTIL_FILES) -DMJS_MEMORY_STATS
-include $(REPO_ROOT)/common.mk
+#include $(REPO_ROOT)/common.mk
# ==== Test Variants ====
#
@@ -128,12 +135,14 @@ TEST_VARIANTS =
# params:
#
# 1: binary name component, e.g. "clang_O1_offset_4_whatever_else"
-# 2: compiler, like "clang" or "gcc"
-# 3: compiler flags
+# 2: docker image to run compiler and binary in
+# 3: full path to compiler, like "/usr/bin/clang-3.6" or "/usr/bin/gcc"
+# 4: compiler flags
define compile_test
$(BUILD_DIR)/unit_test_$1: tests/unit_test.c mjs.c $(TESTUTIL_FILES) $(BUILD_DIR)
- @echo BUILDING $$@ with $2, flags: "'$3'"
- $2 $$(COMMON_TEST_FLAGS) $3 -lm -o $$@
+ @echo BUILDING $$@ with $2[$3], flags: "'$4'"
+ $(RD) --entrypoint $3 $2 $$(COMMON_TEST_FLAGS) $4 -ldl -lm -o $$@
+ $(RD) --entrypoint ./$$@ $2
TEST_VARIANTS += $(BUILD_DIR)/unit_test_$1
endef
@@ -143,7 +152,7 @@ endef
# 2: binary name component, typically the same as compiler: "clang" or "gcc"
# 3: additional compiler flags
define compile_test_with_compiler
-$(eval $(call compile_test,$2,$1,$3))
+$(eval $(call compile_test,$3,$1,$2,$4))
endef
# params:
@@ -151,9 +160,9 @@ endef
# 2: binary name component, like "O0" or whatever
# 3: additional compiler flags
define compile_test_with_opt
-$(eval $(call compile_test_with_compiler,$(CLANG),clang_$2,$(ASAN_CFLAGS) $1 $3))
-$(eval $(call compile_test_with_compiler,$(CLANG),clang_32bit_$2,-m32 $1 $3))
-$(eval $(call compile_test_with_compiler,gcc,gcc_$2,$1 $3))
+$(eval $(call compile_test_with_compiler,mgos/clang,/usr/bin/clang-3.6,clang_$2,$(ASAN_CFLAGS) $1 $3))
+$(eval $(call compile_test_with_compiler,mgos/clang,/usr/bin/clang-3.6,clang_32bit_$2,-m32 $1 $3))
+$(eval $(call compile_test_with_compiler,mgos/gcc,/usr/bin/gcc,gcc_$2,$1 $3))
endef
# params:
@@ -187,37 +196,34 @@ $(eval $(call compile_test_all))
# Run all tests from $(TEST_VARIANTS)
test_full: $(TEST_VARIANTS) $(PROG)
- for f in $(TEST_VARIANTS); do \
- echo ; echo running $$f; \
- $$f; \
- done
+# for f in $(TEST_VARIANTS); do \
+# echo ; echo running $$f; \
+# $$f; \
+# done
# Run just a single test (a first one from $(TEST_VARIANTS))
test: $(firstword $(TEST_VARIANTS))
- $<
+# $<
clean:
- rm -rf $(BUILD_DIR) *.obj mjs.c mjs.h
-
-print_sources:
- @echo $(TOP_SOURCES) $(TOP_HEADERS)
+ rm -rf $(BUILD_DIR) *.obj mjs.c mjs.h _CL_*
-print_source_dirs:
- @echo $(TOP_SOURCES_DIRS) $(TOP_HEADERS_DIRS)
+difftest:
+ @TMP=`mktemp -t checkout-diff.XXXXXX`; \
+ git diff >$$TMP ; \
+ if [ -s "$$TMP" ]; then echo found diffs in checkout:; git status -s; head -n 50 "$$TMP"; exit 1; fi; \
+ rm $$TMP
################################### Windows targets for wine, with MSVC6
-$(PROG).exe: $(BUILD_DIR) $(TOP_HEADERS) mjs.c
- wine cl $(MFLAGS) mjs.c -O1 -MD /Fe$@
+ci-test: $(BUILD_DIR) vc98 vc2017 test_full
-$(BUILD_DIR)/unit_test.exe: tests/unit_test.c mjs.c $(TESTUTIL_FILES) $(BUILD_DIR)
- wine cl -I. -I$(REPO_ROOT) $< $(TESTUTIL_FILES) -o $@
+$(PROG).exe: $(BUILD_DIR) $(TOP_HEADERS) mjs.c
+ $(RD) mgos/vc98 wine cl mjs.c $(CLFLAGS) $(MFLAGS) /Fe$@
-wtest: $(BUILD_DIR)/unit_test.exe
- wine $(BUILD_DIR)/unit_test.exe
+TEST_SOURCES = tests/unit_test.c $(TESTUTIL_FILES)
+CLFLAGS = /DWIN32_LEAN_AND_MEAN /MD /O1 /TC /W2 /WX /I.. /I. /DNDEBUG /DMJS_MEMORY_STATS
+vc98 vc2017: mjs.c mjs.h
+ $(RD) mgos/$@ wine cl $(TEST_SOURCES) $(CLFLAGS) /Fe$@.exe
+ $(RD) mgos/$@ wine ./$@.exe
-difftest:
- @TMP=`mktemp -t checkout-diff.XXXXXX`; \
- git diff >$$TMP ; \
- if [ -s "$$TMP" ]; then echo found diffs in checkout:; git status -s; head -n 50 "$$TMP"; exit 1; fi; \
- rm $$TMP
diff --git a/README.md b/README.md
index b093a6a..eb2a36b 100644
--- a/README.md
+++ b/README.md
@@ -12,8 +12,8 @@ implements a strict subset of ES6 (JavaScript version 6):
- Any valid mJS code is a valid ES6 code.
- Any valid ES6 code is not necessarily a valid mJS code.
-On 32-bit ARM mJS engine takes about 25k of flash memory, and less than 1k
-of RAM (see [intro article](http://goo.gl/zJYyWF)).
+On 32-bit ARM mJS engine takes about 50k of flash memory, and less than 1k
+of RAM (see [intro article](https://mongoose-os.com/blog/mjs-a-new-approach-to-embedded-scripting/)).
mJS is part of [MongooseOS](https://mongoose-os.com),
where it enables scripting for IoT devices.
@@ -61,20 +61,42 @@ where it enables scripting for IoT devices.
'some_string'.slice(start, end);
Return a substring between two indices. Example:
- 'abcdef'.slice(1,3) === 'bc';
+ 'abcdef'.slice(1,3) === 'bc';
+
+ 'abc'.at(0);
+ Return numeric byte value at given string index. Example:
+ 'abc'.at(0) === 0x61;
+
+ 'abc'.indexOf(substr[, fromIndex]);
+ Return index of first occurence of substr within the string or `-1`
+ if not found.
+ 'abc'.indexOf('bc') === 1;
+
+ chr(n);
+ Return 1-byte string whose ASCII code is the integer `n`. If `n` is
+ not numeric or outside of `0-255` range, `null` is returned. Example:
+ chr(0x61) === 'a';
let a = [1,2,3,4,5]; a.splice(start, deleteCount, ...);
Change the contents of an array by removing existing elements and/or
adding new elements. Example:
let a = [1,2,3,4,5]; a.splice(1, 2, 100, 101, 102); a === [1,100,101,102,4,5];
- let s = fstr(ptrVar, offset, length);
+ let s = mkstr(ptrVar, length);
Create a string backed by a C memory chunk. A string s starts
- at memory location ptrVar + offset , and is length bytes long.
- Short form is also available: fstr(ptrVar, length) .
+ at memory location ptrVar , and is length bytes long.
+
+ let s = mkstr(ptrVar, offset, length, copy = false);
+ Like `mkstr(ptrVar, length)`, but string s starts
+ at memory location ptrVar + offset , and the caller can specify
+ whether the string needs to be copied to the internal mjs buffer. By default
+ it's not copied.
let f = ffi('int foo(int)');
Import C function into mJS. See next section.
+
+ gc(full);
+ Perform garbage collection. If `full` is `true`, reclaim RAM to OS.
# C/C++ interoperability
@@ -122,7 +144,97 @@ In order to make FFI work, mJS must be able to get the address of a C
function by its name. On POSIX systems, `dlsym()` API can do that. On
Windows, `GetProcAddress()`. On embedded systems, a system resolver should
be either manually written, or be implemented with some aid from a firmware
-linker script. mJS resolver uses `dlsym`-compatible signature.
+linker script. mJS resolver uses `dlsym`-compatible signature.
+
+## Converting structs to objects
+
+mJS provides a helper to facilitate coversion of C structs to JS objects.
+The functions is called `s2o` and takes two parameters: foreign pointer to
+the struct and foreign pointer to the struct's descriptor which specifies
+names and offsets of the struct's members. Here's an simple example:
+
+C/C++ side code:
+```c
+#include "mjs.h"
+
+struct my_struct {
+ int a;
+ const char *b;
+ double c;
+ struct mg_str d;
+ struct mg_str *e;
+ float f;
+ bool g;
+};
+
+static const struct mjs_c_struct_member my_struct_descr[] = {
+ {"a", offsetof(struct my_struct, a), MJS_STRUCT_FIELD_TYPE_INT, NULL},
+ {"b", offsetof(struct my_struct, b), MJS_STRUCT_FIELD_TYPE_CHAR_PTR, NULL},
+ {"c", offsetof(struct my_struct, c), MJS_STRUCT_FIELD_TYPE_DOUBLE, NULL},
+ {"d", offsetof(struct my_struct, d), MJS_STRUCT_FIELD_TYPE_MG_STR, NULL},
+ {"e", offsetof(struct my_struct, e), MJS_STRUCT_FIELD_TYPE_MG_STR_PTR, NULL},
+ {"f", offsetof(struct my_struct, f), MJS_STRUCT_FIELD_TYPE_FLOAT, NULL},
+ {"g", offsetof(struct my_struct, g), MJS_STRUCT_FIELD_TYPE_BOOL, NULL},
+ {NULL, 0, MJS_STRUCT_FIELD_TYPE_INVALID, NULL},
+};
+
+const struct mjs_c_struct_member *get_my_struct_descr(void) {
+ return my_struct_descr;
+};
+```
+
+JS side code:
+```js
+// Assuming `s` is a foreign pointer to an instance of `my_struct`, obtained elsewhere.
+let sd = ffi('void *get_my_struct_descr(void)')();
+let o = s2o(s, sd);
+print(o.a, o.b);
+```
+
+Nested structs are also supported - use `MJS_STRUCT_FIELD_TYPE_STRUCT` field type
+and provide pointer to the definition:
+
+```c
+struct my_struct2 {
+ int8_t i8;
+ int16_t i16;
+ uint8_t u8;
+ uint16_t u16;
+};
+
+static const struct mjs_c_struct_member my_struct2_descr[] = {
+ {"i8", offsetof(struct my_struct2, i8), MJS_STRUCT_FIELD_TYPE_INT8, NULL},
+ {"i16", offsetof(struct my_struct2, i16), MJS_STRUCT_FIELD_TYPE_INT16, NULL},
+ {"u8", offsetof(struct my_struct2, u8), MJS_STRUCT_FIELD_TYPE_UINT8, NULL},
+ {"u16", offsetof(struct my_struct2, u16), MJS_STRUCT_FIELD_TYPE_UINT16, NULL},
+ {NULL, 0, MJS_STRUCT_FIELD_TYPE_INVALID, NULL},
+};
+
+struct my_struct {
+ struct my_struct2 s;
+ struct my_struct2 *sp;
+};
+
+static const struct mjs_c_struct_member my_struct_descr[] = {
+ {"s", offsetof(struct my_struct, s), MJS_STRUCT_FIELD_TYPE_STRUCT, my_struct2_descr},
+ {"sp", offsetof(struct my_struct, sp), MJS_STRUCT_FIELD_TYPE_STRUCT_PTR, my_struct2_descr},
+ {NULL, 0, MJS_STRUCT_FIELD_TYPE_INVALID, NULL},
+};
+```
+
+For complicated cases, a custom conversion function can be invoked that returns value:
+```c
+mjs_val_t custom_value_func(struct mjs *mjs, void *ap) {
+ /* Do something with ap, construct and return mjs_val_t */
+}
+
+static const struct mjs_c_struct_member my_struct_descr[] = {
+ ...
+ {"x", offsetof(struct my_struct, x), MJS_STRUCT_FIELD_TYPE_CUSTOM, custom_value_func},
+ ...
+};
+```
+
# Complete embedding example
@@ -212,3 +324,17 @@ happy to work on a solution with you.
Prototyping: While your project is still in prototyping stage and not for sale,
you can use MJS’s open source code without license restrictions.
+
+# See also
+- [Mongoose Web Server Library](https://mongoose.ws/) - a robust, open-source solution licensed under GPLv2, designed to seamlessly integrate web server functionality into your embedded devices.
+- With complementary [Mongoose Wizard](https://mongoose.ws/wizard/) - a no-code visual tool that enables rapid WebUI creation without the need for frontend expertise.
+
+# Technical guides
+
+Technical atricles and deep dives into embedded networking technologies:
+- [Embedded Web Server: A Comprehensive Guide for Modern Connected Devices](https://mongoose.ws/articles/embedded-web-server-a-comprehensive-guide-for-modern-connected-devices/)
+- [Building Embedded Web Device Dashboards](https://mongoose.ws/articles/building-embedded-web-device-dashboard/)
+- [ESP32 Device Dashboard: A Step-by-Step Guide for Developers](https://mongoose.ws/articles/esp32-device-dashboard/)
+- [How to build an STM32 Web Dashboard](https://mongoose.ws/articles/stm32-device-dashboard/)
+- [STM32 WebSocket Guide](https://mongoose.ws/articles/stm32-websocket-guide/)
+- [Web File Manager on STM32, ESP32 and Embedded Linux](https://mongoose.ws/articles/building-a-web-file-manager-on-stm32-esp32-embedded-linux/)
diff --git a/common/cs_dbg.c b/common/cs_dbg.c
deleted file mode 100644
index 4c7369d..0000000
--- a/common/cs_dbg.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2014-2016 Cesanta Software Limited
- * All rights reserved
- */
-
-#include "common/cs_dbg.h"
-
-#include
-#include
-#include
-
-#include "common/cs_time.h"
-
-enum cs_log_level cs_log_threshold WEAK =
-#if CS_ENABLE_DEBUG
- LL_VERBOSE_DEBUG;
-#else
- LL_ERROR;
-#endif
-
-#if CS_ENABLE_STDIO
-
-FILE *cs_log_file WEAK = NULL;
-
-#if CS_LOG_ENABLE_TS_DIFF
-double cs_log_ts WEAK;
-#endif
-
-enum cs_log_level cs_log_cur_msg_level WEAK = LL_NONE;
-
-void cs_log_print_prefix(enum cs_log_level level, const char *func) WEAK;
-void cs_log_print_prefix(enum cs_log_level level, const char *func) {
- char prefix[21];
- strncpy(prefix, func, 20);
- prefix[20] = '\0';
- if (cs_log_file == NULL) cs_log_file = stderr;
- cs_log_cur_msg_level = level;
- fprintf(cs_log_file, "%-20s ", prefix);
-#if CS_LOG_ENABLE_TS_DIFF
- {
- double now = cs_time();
- fprintf(cs_log_file, "%7u ", (unsigned int) ((now - cs_log_ts) * 1000000));
- cs_log_ts = now;
- }
-#endif
-}
-
-void cs_log_printf(const char *fmt, ...) WEAK;
-void cs_log_printf(const char *fmt, ...) {
- va_list ap;
- va_start(ap, fmt);
- vfprintf(cs_log_file, fmt, ap);
- va_end(ap);
- fputc('\n', cs_log_file);
- fflush(cs_log_file);
- cs_log_cur_msg_level = LL_NONE;
-}
-
-void cs_log_set_file(FILE *file) WEAK;
-void cs_log_set_file(FILE *file) {
- cs_log_file = file;
-}
-
-#endif /* CS_ENABLE_STDIO */
-
-void cs_log_set_level(enum cs_log_level level) WEAK;
-void cs_log_set_level(enum cs_log_level level) {
- cs_log_threshold = level;
-#if CS_LOG_ENABLE_TS_DIFF && CS_ENABLE_STDIO
- cs_log_ts = cs_time();
-#endif
-}
diff --git a/common/cs_dbg.h b/common/cs_dbg.h
deleted file mode 100644
index c75f6b0..0000000
--- a/common/cs_dbg.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 2014-2016 Cesanta Software Limited
- * All rights reserved
- */
-
-#ifndef CS_COMMON_CS_DBG_H_
-#define CS_COMMON_CS_DBG_H_
-
-#include "common/platform.h"
-
-#if CS_ENABLE_STDIO
-#include
-#endif
-
-#ifndef CS_ENABLE_DEBUG
-#define CS_ENABLE_DEBUG 0
-#endif
-
-#ifndef CS_LOG_ENABLE_TS_DIFF
-#define CS_LOG_ENABLE_TS_DIFF 0
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-enum cs_log_level {
- LL_NONE = -1,
- LL_ERROR = 0,
- LL_WARN = 1,
- LL_INFO = 2,
- LL_DEBUG = 3,
- LL_VERBOSE_DEBUG = 4,
-
- _LL_MIN = -2,
- _LL_MAX = 5,
-};
-
-void cs_log_set_level(enum cs_log_level level);
-
-#if CS_ENABLE_STDIO
-
-void cs_log_set_file(FILE *file);
-extern enum cs_log_level cs_log_threshold;
-void cs_log_print_prefix(enum cs_log_level level, const char *func);
-void cs_log_printf(const char *fmt, ...);
-
-#define LOG(l, x) \
- do { \
- if (cs_log_threshold >= l) { \
- cs_log_print_prefix(l, __func__); \
- cs_log_printf x; \
- } \
- } while (0)
-
-#ifndef CS_NDEBUG
-
-#define DBG(x) \
- do { \
- if (cs_log_threshold >= LL_VERBOSE_DEBUG) { \
- cs_log_print_prefix(LL_VERBOSE_DEBUG, __func__); \
- cs_log_printf x; \
- } \
- } while (0)
-
-#else /* NDEBUG */
-
-#define DBG(x)
-
-#endif
-
-#else /* CS_ENABLE_STDIO */
-
-#define LOG(l, x)
-#define DBG(x)
-
-#endif
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CS_COMMON_CS_DBG_H_ */
diff --git a/common/cs_file.h b/common/cs_file.h
deleted file mode 100644
index d62fa8d..0000000
--- a/common/cs_file.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2015 Cesanta Software Limited
- * All rights reserved
- */
-
-#ifndef CS_COMMON_CS_FILE_H_
-#define CS_COMMON_CS_FILE_H_
-
-#include "common/platform.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/*
- * Read whole file `path` in memory. It is responsibility of the caller
- * to `free()` allocated memory. File content is guaranteed to be
- * '\0'-terminated. File size is returned in `size` variable, which does not
- * count terminating `\0`.
- * Return: allocated memory, or NULL on error.
- */
-char *cs_read_file(const char *path, size_t *size);
-
-#ifdef CS_MMAP
-char *cs_mmap_file(const char *path, size_t *size);
-#endif
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CS_COMMON_CS_FILE_H_ */
diff --git a/common/cs_time.c b/common/cs_time.c
deleted file mode 100644
index 7eaa4c3..0000000
--- a/common/cs_time.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2014-2016 Cesanta Software Limited
- * All rights reserved
- */
-
-#include "common/cs_time.h"
-
-#ifndef _WIN32
-#include
-/*
- * There is no sys/time.h on ARMCC.
- */
-#if !(defined(__ARMCC_VERSION) || defined(__ICCARM__)) && \
- !defined(__TI_COMPILER_VERSION__) && \
- (!defined(CS_PLATFORM) || CS_PLATFORM != CS_P_NXP_LPC)
-#include
-#endif
-#else
-#include
-#endif
-
-double cs_time(void) WEAK;
-double cs_time(void) {
- double now;
-#ifndef _WIN32
- struct timeval tv;
- if (gettimeofday(&tv, NULL /* tz */) != 0) return 0;
- now = (double) tv.tv_sec + (((double) tv.tv_usec) / 1000000.0);
-#else
- SYSTEMTIME sysnow;
- FILETIME ftime;
- GetLocalTime(&sysnow);
- SystemTimeToFileTime(&sysnow, &ftime);
- /*
- * 1. VC 6.0 doesn't support conversion uint64 -> double, so, using int64
- * This should not cause a problems in this (21th) century
- * 2. Windows FILETIME is a number of 100-nanosecond intervals since January
- * 1, 1601 while time_t is a number of _seconds_ since January 1, 1970 UTC,
- * thus, we need to convert to seconds and adjust amount (subtract 11644473600
- * seconds)
- */
- now = (double) (((int64_t) ftime.dwLowDateTime +
- ((int64_t) ftime.dwHighDateTime << 32)) /
- 10000000.0) -
- 11644473600;
-#endif /* _WIN32 */
- return now;
-}
diff --git a/common/cs_time.h b/common/cs_time.h
deleted file mode 100644
index 4d3e716..0000000
--- a/common/cs_time.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright (c) 2014-2016 Cesanta Software Limited
- * All rights reserved
- */
-
-#ifndef CS_COMMON_CS_TIME_H_
-#define CS_COMMON_CS_TIME_H_
-
-#include "common/platform.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/* Sub-second granularity time(). */
-double cs_time(void);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* CS_COMMON_CS_TIME_H_ */
diff --git a/common/cs_varint.c b/common/cs_varint.c
deleted file mode 100644
index e19beea..0000000
--- a/common/cs_varint.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2014-2017 Cesanta Software Limited
- * All rights reserved
- */
-
-#include "common/cs_varint.h"
-
-/*
- * Strings in AST are encoded as tuples (length, string).
- * Length is variable-length: if high bit is set in a byte, next byte is used.
- * Small string length (less then 128 bytes) is encoded in 1 byte.
- */
-int64_t cs_varint_decode(const uint8_t *p, int *llen) {
- int64_t i = 0, num = 0;
-
- do {
- /*
- * Each byte of varint contains 7 bits, in little endian order.
- * MSB is a continuation bit: it tells whether next byte is used.
- */
- num |= ((int64_t)(p[i] & 0x7f)) << (7 * i);
- /*
- * First we increment i, then check whether it is within boundary and
- * whether decoded byte had continuation bit set.
- */
- } while ((unsigned int) ++i < sizeof(int64_t) && (p[i - 1] & 0x80));
- *llen = i;
-
- return num;
-}
-
-/* Return number of bytes to store length */
-int cs_varint_llen(int64_t num) {
- int n = 0;
-
- do {
- n++;
- } while (num >>= 7);
-
- return n;
-}
-
-int cs_varint_encode(int64_t num, uint8_t *p) {
- int i, llen = cs_varint_llen(num);
-
- for (i = 0; i < llen; i++) {
- p[i] = (num & 0x7f) | (i < llen - 1 ? 0x80 : 0);
- num >>= 7;
- }
-
- return llen;
-}
diff --git a/common/cs_varint.h b/common/cs_varint.h
deleted file mode 100644
index ff98308..0000000
--- a/common/cs_varint.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (c) 2014-2017 Cesanta Software Limited
- * All rights reserved
- */
-
-#ifndef CS_COMMON_CS_VARINT_H_
-#define CS_COMMON_CS_VARINT_H_
-
-#include
-
-#if defined(__cplusplus)
-extern "C" {
-#endif /* __cplusplus */
-
-int cs_varint_encode(int64_t num, uint8_t *to);
-int64_t cs_varint_decode(const uint8_t *from, int *llen);
-int cs_varint_llen(int64_t num);
-
-#if defined(__cplusplus)
-}
-#endif /* __cplusplus */
-
-#endif /* CS_COMMON_CS_VARINT_H_ */
diff --git a/common/mg_mem.h b/common/mg_mem.h
deleted file mode 100644
index 3efdc3b..0000000
--- a/common/mg_mem.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (c) 2014-2016 Cesanta Software Limited
- * All rights reserved
- */
-
-#ifndef CS_COMMON_MG_MEM_H_
-#define CS_COMMON_MG_MEM_H_
-
-#ifndef MG_MALLOC
-#define MG_MALLOC malloc
-#endif
-
-#ifndef MG_CALLOC
-#define MG_CALLOC calloc
-#endif
-
-#ifndef MG_REALLOC
-#define MG_REALLOC realloc
-#endif
-
-#ifndef MG_FREE
-#define MG_FREE free
-#endif
-
-#endif /* CS_COMMON_MG_MEM_H_ */
diff --git a/common/platforms/esp/debug_coredump.mk b/common/platforms/esp/debug_coredump.mk
deleted file mode 100644
index 2caaa8f..0000000
--- a/common/platforms/esp/debug_coredump.mk
+++ /dev/null
@@ -1,27 +0,0 @@
-# This provides a debug_coredump target for ESP8266 and ESP32.
-
-OBJ_DIR ?= build/objs
-BIN_FILE ?= $(OBJ_DIR)/$(APP).bin
-ELF_FILE ?= $(OBJ_DIR)/fw.elf
-
-debug_coredump:
-ifndef CONSOLE_LOG
- $(error Please set CONSOLE_LOG)
-endif
- docker run --rm -i --tty=true \
- -v $(APP_MOUNT_PATH):$(DOCKER_APP_PATH) \
- -v $(MGOS_PATH_ABS):$(DOCKER_MGOS_PATH) \
- -v $(MGOS_PATH_ABS):$(MGOS_PATH_ABS) \
- -v $(realpath $(BIN_FILE)):/app.bin \
- -v $(realpath $(ELF_FILE)):/app.elf \
- -v $(realpath $(CONSOLE_LOG)):/console.log \
- $(SDK_VERSION) /bin/bash -c "\
- cd $(DOCKER_APP_PATH)/$(APP_SUBDIR); \
- $(DOCKER_MGOS_PATH)/common/platforms/esp/serve_core.py \
- --rom $(DOCKER_MGOS_PATH)/common/platforms/$(APP_PLATFORM)/rom/rom.bin \
- --irom /app.bin --irom_addr $(IROM_MAP_ADDR) \
- /console.log & \
- $(GDB) /app.elf \
- -ex 'target remote 127.0.0.1:1234' \
- -ex 'set confirm off' \
- -ex 'add-symbol-file $(DOCKER_MGOS_PATH)/common/platforms/$(APP_PLATFORM)/rom/rom.elf 0x40000000'"
diff --git a/common/platforms/esp/serve_core.py b/common/platforms/esp/serve_core.py
deleted file mode 100755
index 6e1a6a6..0000000
--- a/common/platforms/esp/serve_core.py
+++ /dev/null
@@ -1,330 +0,0 @@
-#!/usr/bin/env python
-
-#
-# usage: tools/serve_core.py --iram firmware/0x00000.bin --irom firmware/0x11000.bin /tmp/esp-console.log
-#
-# Then you can connect with gdb. The ESP8266 SDK image provides a debugger with
-# reasonable support of lx106. Example invocation:
-#
-# docker run -v $PWD:/cesanta -ti \
-# docker.cesanta.com/esp8266-build-oss:latest \
-# xt-gdb /cesanta/fw/platforms/esp8266/build/fw.out \
-# -ex "target remote localhost:1234"
-#
-# If you run on OSX or windows, you have to put the IP of your host instead of
-# localhost since gdb will run in a virtualmachine.
-
-import SocketServer
-import argparse
-import base64
-import binascii
-import ctypes
-import json
-import os
-import struct
-import sys
-
-IRAM_BASE=0x40100000
-IROM_BASE=0x40200000
-ROM_BASE= 0x40000000
-
-parser = argparse.ArgumentParser(description='Serve ESP core dump to GDB')
-parser.add_argument('--port', dest='port', default=1234, type=int, help='listening port')
-parser.add_argument('--iram', dest='iram', help='iram firmware section')
-parser.add_argument('--iram_addr', dest='iram_addr',
- type=lambda x: int(x,16), help='iram firmware section')
-parser.add_argument('--irom', dest='irom', required=False, help='irom firmware section')
-parser.add_argument('--irom_addr', dest='irom_addr',
- type=lambda x: int(x,16), help='irom firmware section')
-parser.add_argument('--rom', dest='rom', required=False, help='rom section')
-parser.add_argument('--rom_addr', dest='rom_addr', default=ROM_BASE,
- type=lambda x: int(x,16), help='rom section')
-parser.add_argument('log', help='serial log containing core dump snippet')
-
-args = parser.parse_args()
-
-START_DELIM = '--- BEGIN CORE DUMP ---'
-END_DELIM = '---- END CORE DUMP ----'
-
-
-configMAX_TASK_NAME_LEN = 16
-XT_SOL_FRMSZ = 32
-XT_STK_FRMSZ = 192
-XT_STK_EXTRA = 112
-XCHAL_EXTRA_SA_SIZE = 48
-
-class FreeRTOSTask(object):
- handle = 0
- pxTopOfStack = 0
- uxPriority = 0
- pxStack = 0
- pcTaskName = ""
-
- def __init__(self, handle, data):
- self.handle = handle
- self.pxTopOfStack = struct.unpack('= 0:
- self.pcTaskName = self.pcTaskName[0:i]
-
- def __str__(self):
- return "0x%08x '%s' pri %d sp 0x%08x (%d free)" % (
- self.handle, self.pcTaskName, self.uxPriority, self.pxTopOfStack,
- self.pxTopOfStack - self.pxStack)
-
-
-class Core(object):
- def __init__(self, filename):
- self._dump = self._read(filename)
- self.mem = self._map_core(self._dump)
- if args.iram:
- self.mem.extend(self._map_firmware(args.iram_addr, args.iram, IRAM_BASE))
- if args.irom:
- self.mem.extend(self._map_firmware(args.irom_addr, args.irom, IROM_BASE))
- if args.rom_addr:
- self.mem.extend(self._map_firmware(args.rom_addr, args.rom, ROM_BASE))
- self.regs = base64.decodestring(self._dump['REGS']['data'])
- self.tasks = dict((a, self._parse_tcb(a)) for a in self._dump.get('tasks', []))
-
- def get_cur_task_for_cpu(self, cpu_no):
- tt = self._dump.get('tasks', [])
- if cpu_no < len(tt):
- return tt[cpu_no]
- else:
- return None
-
- def _parse_tcb(self, addr):
- sizeofTCB = 352 # sizeof(taskTCB)
- # Task ID is the address of the TCB and must be in DRAM.
- tcb_data = self.read(addr, sizeofTCB)
- if tcb_data[3] != '\x3f':
- return None
- return FreeRTOSTask(addr, tcb_data)
-
-
- def _search_backwards(self, f, start_offset, pattern):
- offset = start_offset
- while True:
- offset = max(0, offset - 10000)
- f.seek(offset)
- data = f.read(min(10000, start_offset))
- pos = data.rfind(pattern)
- if pos >= 0:
- return offset + pos
- elif offset == 0:
- return -1
- offset += 5000
-
- def _read(self, filename):
- with open(filename) as f:
- f.seek(0, os.SEEK_END)
- size = f.tell()
- end_pos = self._search_backwards(f, f.tell(), END_DELIM)
- if end_pos == -1:
- print >>sys.stderr, "Cannot find end delimiter:", END_DELIM
- sys.exit(1)
- start_pos = self._search_backwards(f, end_pos, START_DELIM)
- if start_pos == -1:
- print >>sys.stderr, "Cannot find start delimiter:", START_DELIM
- sys.exit(1)
- start_pos += len(START_DELIM)
-
- print >>sys.stderr, "Found core at %d - %d" % (start_pos, end_pos)
- f.seek(start_pos)
- core_json = f.read(end_pos - start_pos)
- return json.loads(core_json.replace('\n', '').replace('\r', ''))
-
- def _map_core(self, core):
- mem = []
- for k, v in core.items():
- if not isinstance(v, dict) or k == 'REGS':
- continue
- data = base64.decodestring(v["data"])
- print >>sys.stderr, "Mapping {0}: {1} @ {2:#02x}".format(k, len(data), v["addr"])
- if "crc32" in v:
- crc32 = ctypes.c_uint32(binascii.crc32(data))
- expected_crc32 = ctypes.c_uint32(v["crc32"])
- if crc32.value != expected_crc32.value:
- print >>sys.stderr, "CRC mismatch, section corrupted %s %s" % (crc32, expected_crc32)
- sys.exit(1)
- mem.append((v["addr"], v["addr"] + len(data), data))
- return mem
-
- def _map_firmware(self, addr, filename, base):
- if addr is None:
- name = os.path.splitext(os.path.basename(filename))[0]
- addr = base + int(name, 16)
- with open(filename) as f:
- data = f.read()
- result = []
- i = 0
- magic, count = struct.unpack('>sys.stderr, "Mapping IROM: {0} @ {1:#02x}".format(irom_len, addr)
- result.append((addr, addr + irom_len, data[i:i+irom_len+16]))
- # The rest (IRAM) will be in the core.
- else:
- print >>sys.stderr, "Mapping {0} at {1:#02x}".format(filename, addr)
- result.append((addr, addr + len(data), data))
- return result
-
- def read(self, addr, size):
- for base, end, data in self.mem:
- if addr >= base and addr < end:
- return data[addr - base : addr - base + size]
- print >>sys.stderr, "Unmapped addr", hex(addr)
- return "\0" * size
-
-
-class GDBHandler(SocketServer.BaseRequestHandler):
- def handle(self):
- self._core = core = Core(args.log)
- self._curtask = None
- print >>sys.stderr, "Loaded core dump from last snippet in ", args.log
-
- while self.expect_packet_start():
- pkt = self.read_packet()
- #print >>sys.stderr, ">>", pkt
- if pkt == "?": # status -> trap
- self.send_str("S09")
- elif pkt == "g": # dump registers
- regs = core.regs
- if self._curtask:
- # Dump specific task's registers
- t = self._curtask
- sp = t.pxTopOfStack
- # The first word on the stack of a task determines how
- # task's execution ended: by yield (0) or int/exc (non-0).
- exit, pc, ps = struct.unpack('>sys.stderr, "task %x pc %x sp %x" % (self._curtask.handle, pc, sp)
- self.send_str(self.encode_bytes(regs))
- elif pkt[0] == "G": # set registers
- core.regs = self.decode_bytes(pkt[1:])
- self.send_str("OK")
- elif pkt[0] == "m": # read memory
- addr, size = [int(n, 16) for n in pkt[1:].split(',')]
- if addr < 0x10000000 and addr > 0x80000:
- print >>sys.stderr, 'fixup %08x' % addr
- addr |= 0x40000000
- bs = core.read(addr, size)
- #if bs == "\0\0\0\0":
- # bs = "\x01\0\0\0"
- #print >>sys.stderr, "<<", " ".join("{:02x}".format(ord(c)) for c in bs)
- self.send_str(self.encode_bytes(bs))
- elif pkt.startswith("Hg"):
- tid = int(pkt[2:], 16)
- self._curtask = core.tasks.get(tid)
- self.send_str("OK")
- elif pkt.startswith("Hc-1"):
- # cannot continue, this is post mortem debugging
- self.send_str("E01")
- elif pkt == "qC":
- t = core.get_cur_task_for_cpu(0)
- if t:
- self.send_str("QC%016x" % t)
- self.send_str("1")
- elif pkt == "qAttached":
- self.send_str("1")
- elif pkt == "qSymbol::":
- self.send_str("OK")
- elif pkt == "qfThreadInfo":
- if core.tasks:
- self.send_str("m%s" % ",".join("%016x" % t for t in core.tasks))
- else:
- self.send_str("l")
- elif pkt == "qsThreadInfo":
- self.send_str("l")
- elif pkt.startswith("qThreadExtraInfo,"):
- self.send_thread_extra_info(int(pkt[17:], 16))
- elif pkt[0] == "T":
- tid = int(pkt[1:], 16)
- if tid in core.tasks:
- self.send_str("OK")
- else:
- self.send_str("ERR00")
- elif pkt in ("qTStatus", "qOffsets", "D") or pkt.startswith("qSupported"):
- # silently ignore
- self.send_str("")
- else:
- print >>sys.stderr, "Ignoring unknown command '%s'" % (pkt,)
- self.send_str("")
-
- print >>sys.stderr, "GDB closed the connection"
-
- def encode_bytes(self, bs):
- return "".join("{0:02x}".format(ord(i)) for i in bs)
-
- def decode_bytes(self, s):
- return s.decode('hex')
-
- def send_ack(self):
- self.request.sendall("+");
-
- def send_nack(self):
- self.request.sendall("-");
-
- def send_str(self, s):
- self.request.sendall("${0}#{1:02x}".format(s, self._checksum(s)))
-
- def _checksum(self, s):
- return sum(ord(i) for i in s) % 0x100
-
- def expect_packet_start(self):
- return len(self.read_until('$')) > 0
-
- def read_packet(self):
- pkt = self.read_until('#')
- chk = ""
- chk += self.request.recv(1)
- chk += self.request.recv(1)
- if len(chk) != 2:
- return ""
- if int(chk, 16) != self._checksum(pkt):
- print >>sys.stderr, "Bad checksum for {0}; got: {1} want: {2:02x}".format(pkt, chk, "want:", self._checksum(pkt))
- self.send_nack()
- return ""
-
- self.send_ack()
- return pkt
-
- def read_until(self, limit):
- buf = ''
- while True:
- ch = self.request.recv(1)
- if len(ch) == 0: # eof
- return ""
- if ch == limit:
- return buf
- buf += ch
-
- def send_thread_extra_info(self, tid):
- task = self._core.tasks.get(tid)
- if task:
- self.send_str(binascii.hexlify(str(task)))
- else:
- self.send_str(binascii.hexlify('[Invalid task 0x%08x]' % tid))
-
-
-
-class TCPServer(SocketServer.TCPServer):
- allow_reuse_address = True
-
-server = TCPServer(('0.0.0.0', args.port), GDBHandler)
-print "Waiting for gdb on", args.port
-server.serve_forever()
diff --git a/common/platforms/esp/src/esp_mmap.c b/common/platforms/esp/src/esp_mmap.c
deleted file mode 100644
index b44e1ec..0000000
--- a/common/platforms/esp/src/esp_mmap.c
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- * Copyright (c) 2014-2016 Cesanta Software Limited
- * All rights reserved
- */
-
-/*
- * This is a generic implementation of SPIFFS mmapping on esp8266 and esp32.
- *
- * Each of these two archs has arch-specific header which fills a few gaps,
- * see e.g. fw/platforms/esp32/src/esp32_mmap.h.
- *
- * It already works, but there are a few major TODO-s:
- *
- * - Use linked list instead of fixed-size array of mmap descriptors
- * - On esp32, implement reading unaligned bytes from flash in a generic
- * manner, and rename read_unaligned_byte() below to read_mmapped_byte()
- * - On esp32, use spi_flash_mmap() to map flash area at some address, and
- * get rid of FLASH_READ_BYTE() (see fw/platforms/esp32/src/esp32_mmap.h)
- */
-
-#include
-#include
-#include
-
-#include "common/platforms/esp/src/esp_mmap.h"
-
-#include "common/cs_dbg.h"
-#include "common/mbuf.h"
-#include "common/spiffs/spiffs.h"
-#include "common/spiffs/spiffs_nucleus.h"
-
-#ifdef CS_MMAP
-
-#define MMAP_DESCS_ADD_SIZE 4
-
-#define MMAP_ADDR_MASK ((1 << MMAP_ADDR_BITS) - 1)
-
-struct mbuf mmap_descs_mbuf;
-struct mmap_desc *mmap_descs = NULL;
-static struct mmap_desc *cur_mmap_desc;
-
-/*
- * Reads unaligned byte, handles spiffs-mmapped addresses properly.
- *
- * TODO(dfrank): handle reading unaligned bytes on esp32 in a generic way,
- * and rename this function to read_mmapped_byte().
- */
-IRAM NOINSTR static uint8_t read_unaligned_byte(uint8_t *addr) {
- uint32_t *base = (uint32_t *) ((uintptr_t) addr & ~0x3);
- uint32_t word;
-
- if (addr >= (uint8_t *) MMAP_BASE && addr < (uint8_t *) MMAP_END) {
- struct mmap_desc *desc = MMAP_DESC_FROM_ADDR(addr);
- int block = ((uintptr_t) addr & MMAP_ADDR_MASK) / SPIFFS_PAGE_DATA_SIZE;
- int off = ((uintptr_t) addr & MMAP_ADDR_MASK) % SPIFFS_PAGE_DATA_SIZE;
- uint8_t *ea = (uint8_t *) desc->blocks[block] + off;
-
- /*
- * This is commented because on esp32 we might have more than one
- * mount points
- *
- * TODO(dfrank): somehow deduce that from the address, and uncomment
- */
-#if 0
- if (ea < (uint8_t *) FLASH_BASE(cs_spiffs_get_fs())) {
- printf("MMAP invalid address %p: block %d, off %d, pages %d, desc %d\n",
- ea, block, off, desc->pages, desc - mmap_descs);
- *(int *) 1 = 1;
- }
-#endif
-
- return FLASH_READ_BYTE(ea);
- }
-
- word = *base;
- return (uint8_t)(word >> 8 * ((uintptr_t) addr & 0x3));
-}
-
-IRAM NOINSTR int esp_mmap_exception_handler(uint32_t vaddr, uint8_t *pc,
- long *pa2) {
- int pc_inc = 0;
-
- uint32_t instr = (uint32_t) read_unaligned_byte(pc) | ((uint32_t) read_unaligned_byte(pc + 1) << 8);
- uint8_t at = (instr >> 4) & 0xf;
-
- uint32_t val = 0;
-
- if ((instr & 0xf00f) == 0x2) {
- /* l8ui at, as, imm r = 0 */
- val = read_unaligned_byte((uint8_t *) vaddr);
- pc_inc = 3;
- } else if ((instr & 0x700f) == 0x1002) {
- /*
- * l16ui at, as, imm r = 1
- * l16si at, as, imm r = 9
- */
- val = read_unaligned_byte((uint8_t *) vaddr) |
- read_unaligned_byte((uint8_t *) vaddr + 1) << 8;
- if (instr & 0x8000) val = (int16_t) val;
- pc_inc = 3;
- } else if ((instr & 0xf00f) == 0x2002 || (instr & 0xf) == 0x8) {
- /*
- * l32i at, as, imm r = 2
- * l32i.n at, as, imm
- */
- /*
- * TODO(dfrank): provide fast code path for aligned access since
- * all mmap 32-bit loads will be aligned.
- */
- val = read_unaligned_byte((uint8_t *) vaddr) |
- read_unaligned_byte((uint8_t *) vaddr + 1) << 8 |
- read_unaligned_byte((uint8_t *) vaddr + 2) << 16 |
- read_unaligned_byte((uint8_t *) vaddr + 3) << 24;
- pc_inc = ((instr & 0xf) == 0x8) ? 2 : 3;
- } else {
- fprintf(stderr, "cannot emulate flash mem instr at pc = %p\n", (void *) pc);
- }
-
- if (pc_inc > 0) {
- /*
- * a0 and a1 are never used as scratch registers.
- * Here we assume that a2...15 are laid out contiguously in the struct.
- */
- *(pa2 + at - 2) = val;
- }
-
- return pc_inc;
-}
-
-static struct mmap_desc *alloc_mmap_desc(void) {
- size_t i;
- size_t descs_cnt = mmap_descs_mbuf.len / sizeof(struct mmap_desc);
- for (i = 0; i < descs_cnt; i++) {
- if (mmap_descs[i].blocks == NULL) {
- return &mmap_descs[i];
- }
- }
-
- /* Failed to find an empty descriptor, need to grow mbuf */
- int old_len = mmap_descs_mbuf.len;
- mbuf_append(&mmap_descs_mbuf, NULL, MMAP_DESCS_ADD_SIZE * sizeof(struct mmap_desc));
- mmap_descs = (struct mmap_desc *)mmap_descs_mbuf.buf;
- memset(mmap_descs_mbuf.buf + old_len, 0, mmap_descs_mbuf.len - old_len);
-
- /* Call this function again; this time it should succeed */
- return alloc_mmap_desc();
-}
-
-void *mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset) {
- int pages = (len + SPIFFS_PAGE_DATA_SIZE - 1) / SPIFFS_PAGE_DATA_SIZE;
- struct mmap_desc *desc = alloc_mmap_desc();
- (void) addr;
- (void) prot;
- (void) flags;
- (void) offset;
-
- if (len == 0) {
- return NULL;
- }
-
- if (desc == NULL) {
- LOG(LL_ERROR, ("cannot allocate mmap desc"));
- return MAP_FAILED;
- }
-
- cur_mmap_desc = desc;
- desc->pages = 0;
- desc->blocks = (uint32_t *) calloc(sizeof(uint32_t), pages);
- if (desc->blocks == NULL) {
- LOG(LL_ERROR, ("Out of memory"));
- return MAP_FAILED;
- }
- desc->base = MMAP_ADDR_FROM_DESC(desc);
-
- {
- spiffs *fs;
- fd = esp_translate_fd(fd, &fs);
- if (fd < 0) {
- LOG(LL_ERROR, ("Failed to translate fd: %d", fd));
- return NULL;
- }
-
- int32_t t;
- t = SPIFFS_read(fs, fd, DUMMY_MMAP_BUFFER_START, len);
- if (t != (int32_t)len) {
- LOG(LL_ERROR, ("Spiffs dummy read failed: expected len: %d, actual: %d",
- len, t));
- return NULL;
- }
- /*
- * this breaks the posix-like mmap abstraction but file descriptors are a
- * scarse resource here.
- */
- t = SPIFFS_close(fs, fd);
- if (t != 0) {
- LOG(LL_ERROR, ("Failed to close descr after dummy read: %d", t));
- return NULL;
- }
- }
-
- return desc->base;
-}
-
-int munmap(void *addr, size_t len) {
- size_t i;
- size_t descs_cnt = mmap_descs_mbuf.len / sizeof(struct mmap_desc);
-
- (void) len;
-
- if (addr != NULL) {
- for (i = 0; i < descs_cnt; i++) {
- if (mmap_descs[i].base == addr) {
- free(mmap_descs[i].blocks);
- memset(&mmap_descs[i], 0, sizeof(mmap_descs[i]));
- return 0;
- }
- }
- }
-
- /* didn't find the mapping with the given addr */
- LOG(LL_ERROR, ("Didn't find the mapping for the addr %p", addr));
- return -1;
-}
-
-/*
- * Relocate mmapped pages.
- */
-void esp_spiffs_on_page_move_hook(spiffs *fs, spiffs_file fh,
- spiffs_page_ix src_pix,
- spiffs_page_ix dst_pix) {
- size_t i, j;
- (void) fh;
- uint32_t fbase = FLASH_BASE(fs);
- size_t descs_cnt = mmap_descs_mbuf.len / sizeof(struct mmap_desc);
- for (i = 0; i < descs_cnt; i++) {
- if (mmap_descs[i].blocks) {
- for (j = 0; j < mmap_descs[i].pages; j++) {
- uint32_t addr = mmap_descs[i].blocks[j];
- uint32_t page = SPIFFS_PADDR_TO_PAGE(fs, addr - fbase);
- if (page == src_pix) {
- int delta = (int) dst_pix - (int) src_pix;
- mmap_descs[i].blocks[j] += delta * LOG_PAGE_SIZE;
- }
- }
- }
- }
-}
-
-int esp_spiffs_dummy_read(spiffs *fs, u32_t addr, u32_t size, u8_t *dst) {
- (void) fs;
- (void) size;
-
- if (dst >= DUMMY_MMAP_BUFFER_START && dst < DUMMY_MMAP_BUFFER_END) {
- if ((addr - SPIFFS_PAGE_HEADER_SIZE) % LOG_PAGE_SIZE == 0) {
- addr &= MMAP_ADDR_MASK;
- cur_mmap_desc->blocks[cur_mmap_desc->pages++] = FLASH_BASE(fs) + addr;
- }
- return 1;
- }
-
- return 0;
-}
-
-void esp_mmap_init(void) {
- mbuf_init(&mmap_descs_mbuf, 0);
-}
-
-#endif /* CS_MMAP */
diff --git a/common/platforms/esp/src/esp_mmap.h b/common/platforms/esp/src/esp_mmap.h
deleted file mode 100644
index 9965228..0000000
--- a/common/platforms/esp/src/esp_mmap.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (c) 2014-2016 Cesanta Software Limited
- * All rights reserved
- */
-
-#ifndef CS_COMMON_PLATFORMS_ESP_SRC_ESP_MMAP_H_
-#define CS_COMMON_PLATFORMS_ESP_SRC_ESP_MMAP_H_
-
-#include
-
-#include "common/spiffs/spiffs.h"
-#include "common/platform.h"
-
-/*
- * Platform-dependent header should define the following macros:
- *
- * - MMAP_BASE: base address for mmapped points; e.g. ((void *) 0x10000000)
- * - MMAP_END: end address for mmapped points; e.g. ((void *) 0x20000000)
- *
- * So with the example values given above, the range 0x10000000 - 0x20000000 is
- * used for all mmapped areas. We need to partition it further, by choosing the
- * optimal tradeoff between the max number of mmapped areas and the max size
- * of the mmapped area. Within the example range, we have 28 bits, and we
- * need to define two more macros which will define how these bits are used:
- *
- * - MMAP_ADDR_BITS: how many bits are used for the address within each
- * mmapped area;
- * - MMAP_NUM_BITS: how many bits are used for the number of mmapped area.
- */
-
-#if CS_PLATFORM == CS_P_ESP32
-#include "fw/platforms/esp32/src/esp32_fs.h"
-#include "fw/platforms/esp32/src/esp32_mmap.h"
-#elif CS_PLATFORM == CS_P_ESP8266
-#include "fw/platforms/esp8266/src/esp8266_mmap.h"
-#include "fw/platforms/esp8266/src/esp_fs.h"
-#else
-#error unsupported CS_PLATFORM: only esp32 and esp8266 are supported
-#endif
-
-#ifdef CS_MMAP
-
-#define MMAP_NUM_MASK ((1 << MMAP_NUM_BITS) - 1)
-
-#define MMAP_DESC_FROM_ADDR(addr) \
- (&mmap_descs[(((uintptr_t) addr) >> MMAP_ADDR_BITS) & MMAP_NUM_MASK])
-#define MMAP_ADDR_FROM_DESC(desc) \
- ((void *) ((uintptr_t) MMAP_BASE | ((desc - mmap_descs) << MMAP_ADDR_BITS)))
-
-struct mmap_desc {
- void *base;
- uint32_t pages;
- uint32_t *blocks; /* pages long */
-};
-
-extern struct mmap_desc *mmap_descs;
-
-IRAM NOINSTR int esp_mmap_exception_handler(uint32_t vaddr, uint8_t *pc,
- long *pa2);
-int esp_spiffs_dummy_read(spiffs *fs, u32_t addr, u32_t size, u8_t *dst);
-
-/*
- * Arch-dependent: translates vfs file descriptor from vfs to a spiffs file
- * descriptor; also returns an instance of spiffs through the pointer.
- */
-int esp_translate_fd(int fd, spiffs **pfs);
-
-void esp_mmap_init(void);
-
-#endif /* CS_MMAP */
-#endif /* CS_COMMON_PLATFORMS_ESP_SRC_ESP_MMAP_H_ */
diff --git a/common/platforms/esp/stub_flasher.c b/common/platforms/esp/stub_flasher.c
deleted file mode 100644
index f1ad80d..0000000
--- a/common/platforms/esp/stub_flasher.c
+++ /dev/null
@@ -1,399 +0,0 @@
-/*
- * Copyright (c) 2014-2016 Cesanta Software Limited
- * All rights reserved
- *
- * Spiffy flasher. Implements strong checksums (MD5) and can use higher
- * baud rates. Actual max baud rate will differe from device to device,
- * but 921K seems to be common.
- *
- * SLIP protocol is used for communication.
- * First packet is a single byte - command number.
- * After that, a packet with a variable number of 32-bit (LE) arguments,
- * depending on command.
- *
- * Then command produces variable number of packets of output, but first
- * packet of length 1 is the response code: 0 for success, non-zero - error.
- *
- * See individual command description below.
- */
-
-#include "stub_flasher.h"
-
-#include
-#include
-
-#include "rom_functions.h"
-
-#if defined(ESP8266)
-#include "eagle_soc.h"
-#include "ets_sys.h"
-#elif defined(ESP32)
-#include "soc/uart_reg.h"
-#endif
-
-#include "slip.h"
-#include "uart.h"
-
-/* Param: baud rate. */
-uint32_t params[1] __attribute__((section(".params")));
-
-#define FLASH_BLOCK_SIZE 65536
-#define FLASH_SECTOR_SIZE 4096
-#define FLASH_PAGE_SIZE 256
-
-/* These consts should be in sync with flasher_client.go */
-#define UART_BUF_SIZE (8 * FLASH_SECTOR_SIZE)
-#define FLASH_WRITE_SIZE FLASH_SECTOR_SIZE
-
-#define UART_RX_INTS (UART_RXFIFO_FULL_INT_ENA | UART_RXFIFO_TOUT_INT_ENA)
-
-extern uint32_t _bss_start, _bss_end;
-
-#ifdef ESP8266
-#define REG_SPI_BASE(i) (0x60000200 - i * 0x100)
-
-#define SPI_CMD_REG(i) (REG_SPI_BASE(i) + 0x0)
-#define SPI_FLASH_RDID (BIT(28))
-
-#define SPI_W0_REG(i) (REG_SPI_BASE(i) + 0x40)
-#endif
-
-int do_flash_erase(uint32_t addr, uint32_t len) {
- if (addr % FLASH_SECTOR_SIZE != 0) return 0x32;
- if (len % FLASH_SECTOR_SIZE != 0) return 0x33;
- if (SPIUnlock() != 0) return 0x34;
-
- while (len > 0 && (addr % FLASH_BLOCK_SIZE != 0)) {
- if (SPIEraseSector(addr / FLASH_SECTOR_SIZE) != 0) return 0x35;
- len -= FLASH_SECTOR_SIZE;
- addr += FLASH_SECTOR_SIZE;
- }
-
- while (len > FLASH_BLOCK_SIZE) {
- if (SPIEraseBlock(addr / FLASH_BLOCK_SIZE) != 0) return 0x36;
- len -= FLASH_BLOCK_SIZE;
- addr += FLASH_BLOCK_SIZE;
- }
-
- while (len > 0) {
- if (SPIEraseSector(addr / FLASH_SECTOR_SIZE) != 0) return 0x37;
- len -= FLASH_SECTOR_SIZE;
- addr += FLASH_SECTOR_SIZE;
- }
-
- return 0;
-}
-
-struct uart_buf {
- uint8_t data[UART_BUF_SIZE];
- uint32_t nr;
- uint8_t *pr, *pw;
-};
-
-uint32_t ccount(void) {
- uint32_t r;
- __asm volatile("rsr.ccount %0" : "=a"(r));
- return r;
-}
-
-struct write_progress {
- uint32_t num_written;
- uint32_t buf_level;
-};
-
-struct write_result {
- uint32_t wait_time;
- uint32_t write_time;
- uint32_t erase_time;
- uint32_t total_time;
- uint8_t digest[16];
-};
-
-static struct uart_buf ub;
-
-void uart_isr(void *arg) {
- uint32_t int_st = READ_PERI_REG(UART_INT_ST_REG(0));
- uint8_t fifo_len;
- while ((fifo_len = READ_PERI_REG(UART_STATUS_REG(0))) > 0 &&
- ub.nr < UART_BUF_SIZE) {
- while (fifo_len-- > 0 && ub.nr < UART_BUF_SIZE) {
- uint8_t byte = READ_PERI_REG(UART_FIFO_REG(0));
- *ub.pw++ = byte;
- ub.nr++;
- if (ub.pw >= ub.data + UART_BUF_SIZE) ub.pw = ub.data;
- }
- }
- WRITE_PERI_REG(UART_INT_CLR_REG(0), int_st);
- (void) arg;
-}
-
-int do_flash_write(uint32_t addr, uint32_t len, uint32_t erase) {
- uint32_t num_erased = 0;
- struct MD5Context ctx;
- MD5Init(&ctx);
-
- if (addr % FLASH_SECTOR_SIZE != 0) return 0x32;
- if (len % FLASH_SECTOR_SIZE != 0) return 0x33;
- if (SPIUnlock() != 0) return 0x34;
-
- ub.nr = 0;
- ub.pr = ub.pw = ub.data;
- ets_isr_attach(ETS_UART0_INUM, uart_isr, &ub);
- uint32_t saved_conf1 = READ_PERI_REG(UART_CONF1_REG(0));
- /* Reduce frequency of UART interrupts */
- WRITE_PERI_REG(UART_CONF1_REG(0), UART_RX_TOUT_EN |
- (20 << UART_RX_TOUT_THRHD_S) |
- (100 << UART_RXFIFO_FULL_THRHD_S));
- SET_PERI_REG_MASK(UART_INT_ENA_REG(0), UART_RX_INTS);
- ets_isr_unmask(1 << ETS_UART0_INUM);
-
- struct write_result wr;
- memset(&wr, 0, sizeof(wr));
-
- struct write_progress wp = {.num_written = 0, .buf_level = ub.nr};
- SLIP_send(&wp, sizeof(wp));
- wr.total_time = ccount();
- while (wp.num_written < len) {
- volatile uint32_t *nr = &ub.nr;
- /* Prepare the space ahead. */
- uint32_t start_count = ccount();
- while (erase && num_erased < wp.num_written + FLASH_WRITE_SIZE) {
- const uint32_t num_left = (len - num_erased);
- if (num_left >= FLASH_BLOCK_SIZE && addr % FLASH_BLOCK_SIZE == 0) {
- if (SPIEraseBlock(addr / FLASH_BLOCK_SIZE) != 0) return 0x35;
- num_erased += FLASH_BLOCK_SIZE;
- } else {
- /* len % FLASH_SECTOR_SIZE == 0 is enforced, no further checks needed */
- if (SPIEraseSector(addr / FLASH_SECTOR_SIZE) != 0) return 0x36;
- num_erased += FLASH_SECTOR_SIZE;
- }
- }
- wr.erase_time += ccount() - start_count;
- start_count = ccount();
- /* Wait for data to arrive. */
- wp.buf_level = *nr;
- while (*nr < FLASH_WRITE_SIZE) {
- }
- wr.wait_time += ccount() - start_count;
- MD5Update(&ctx, ub.pr, FLASH_WRITE_SIZE);
- start_count = ccount();
- if (SPIWrite(addr, (uint32_t *) ub.pr, FLASH_WRITE_SIZE) != 0) return 0x37;
- wr.write_time += ccount() - start_count;
- ets_intr_lock();
- *nr -= FLASH_WRITE_SIZE;
- ets_intr_unlock();
- addr += FLASH_WRITE_SIZE;
- ub.pr += FLASH_WRITE_SIZE;
- if (ub.pr >= ub.data + UART_BUF_SIZE) ub.pr = ub.data;
- wp.num_written += FLASH_WRITE_SIZE;
- SLIP_send(&wp, sizeof(wp));
- }
-
- ets_isr_mask(1 << ETS_UART0_INUM);
- WRITE_PERI_REG(UART_CONF1_REG(0), saved_conf1);
- MD5Final(wr.digest, &ctx);
-
- wr.total_time = ccount() - wr.total_time;
- SLIP_send(&wr, sizeof(wr));
-
- return 0;
-}
-
-int do_flash_read(uint32_t addr, uint32_t len, uint32_t block_size,
- uint32_t max_in_flight) {
- uint8_t buf[FLASH_SECTOR_SIZE];
- uint8_t digest[16];
- struct MD5Context ctx;
- uint32_t num_sent = 0, num_acked = 0;
- if (block_size > sizeof(buf)) return 0x52;
- MD5Init(&ctx);
- while (num_acked < len) {
- while (num_sent < len && num_sent - num_acked < max_in_flight) {
- uint32_t n = len - num_sent;
- if (n > block_size) n = block_size;
- if (SPIRead(addr, (uint32_t *) buf, n) != 0) return 0x53;
- send_packet(buf, n);
- MD5Update(&ctx, buf, n);
- addr += n;
- num_sent += n;
- }
- {
- if (SLIP_recv(&num_acked, sizeof(num_acked)) != 4) return 0x54;
- if (num_acked > num_sent) return 0x55;
- }
- }
- MD5Final(digest, &ctx);
- send_packet(digest, sizeof(digest));
- return 0;
-}
-
-int do_flash_digest(uint32_t addr, uint32_t len, uint32_t digest_block_size) {
- uint8_t buf[FLASH_SECTOR_SIZE];
- uint8_t digest[16];
- uint32_t read_block_size =
- digest_block_size ? digest_block_size : sizeof(buf);
- struct MD5Context ctx;
- if (digest_block_size > sizeof(buf)) return 0x62;
- MD5Init(&ctx);
- while (len > 0) {
- uint32_t n = len;
- struct MD5Context block_ctx;
- MD5Init(&block_ctx);
- if (n > read_block_size) n = read_block_size;
- if (SPIRead(addr, (uint32_t *) buf, n) != 0) return 0x63;
- MD5Update(&ctx, buf, n);
- if (digest_block_size > 0) {
- MD5Update(&block_ctx, buf, n);
- MD5Final(digest, &block_ctx);
- send_packet(digest, sizeof(digest));
- }
- addr += n;
- len -= n;
- }
- MD5Final(digest, &ctx);
- send_packet(digest, sizeof(digest));
- return 0;
-}
-
-int do_flash_read_chip_id(void) {
- uint32_t chip_id = 0;
- WRITE_PERI_REG(SPI_CMD_REG(0), SPI_FLASH_RDID);
- while (READ_PERI_REG(SPI_CMD_REG(0)) & SPI_FLASH_RDID) {
- }
- chip_id = READ_PERI_REG(SPI_W0_REG(0)) & 0xFFFFFF;
- send_packet((uint8_t *) &chip_id, sizeof(chip_id));
- return 0;
-}
-
-uint8_t cmd_loop(void) {
- uint8_t cmd;
- do {
- uint32_t args[4];
- uint32_t len = SLIP_recv(&cmd, 1);
- if (len != 1) {
- continue;
- }
- uint8_t resp = 0xff;
- switch (cmd) {
- case CMD_FLASH_ERASE: {
- len = SLIP_recv(args, sizeof(args));
- if (len == 8) {
- resp = do_flash_erase(args[0] /* addr */, args[1] /* len */);
- } else {
- resp = 0x31;
- }
- break;
- }
- case CMD_FLASH_WRITE: {
- len = SLIP_recv(args, sizeof(args));
- if (len == 12) {
- resp = do_flash_write(args[0] /* addr */, args[1] /* len */,
- args[2] /* erase */);
- } else {
- resp = 0x41;
- }
- break;
- }
- case CMD_FLASH_READ: {
- len = SLIP_recv(args, sizeof(args));
- if (len == 16) {
- resp = do_flash_read(args[0] /* addr */, args[1], /* len */
- args[2] /* block_size */,
- args[3] /* max_in_flight */);
- } else {
- resp = 0x51;
- }
- break;
- }
- case CMD_FLASH_DIGEST: {
- len = SLIP_recv(args, sizeof(args));
- if (len == 12) {
- resp = do_flash_digest(args[0] /* addr */, args[1], /* len */
- args[2] /* digest_block_size */);
- } else {
- resp = 0x61;
- }
- break;
- }
- case CMD_FLASH_READ_CHIP_ID: {
- resp = do_flash_read_chip_id();
- break;
- }
- case CMD_FLASH_ERASE_CHIP: {
- resp = SPIEraseChip();
- break;
- }
- case CMD_BOOT_FW:
- case CMD_REBOOT: {
- resp = 0;
- SLIP_send(&resp, 1);
- return cmd;
- }
- }
- SLIP_send(&resp, 1);
- } while (cmd != CMD_BOOT_FW && cmd != CMD_REBOOT);
- return cmd;
-}
-
-void stub_main(void) {
- uint32_t baud_rate = params[0];
- uint32_t greeting = 0x4941484f; /* OHAI */
- uint8_t last_cmd;
-
- /* This points at us right now, reset for next boot. */
- ets_set_user_start(0);
-
- memset(&_bss_start, 0, (&_bss_end - &_bss_start));
-
-/* Selects SPI functions for flash pins. */
-#if defined(ESP8266)
- SelectSpiFunction();
- SET_PERI_REG_MASK(0x3FF00014, 1); /* Switch to 160 MHz */
-#elif defined(ESP32)
- spi_flash_attach(0, 0);
-#endif
-
- SPIParamCfg(0, 16 * 1024 * 1024, FLASH_BLOCK_SIZE, FLASH_SECTOR_SIZE,
- FLASH_PAGE_SIZE, 0xffff);
-
- if (baud_rate > 0) {
- ets_delay_us(10000);
- set_baud_rate(0, baud_rate);
- }
-
- /* Give host time to get ready too. */
- ets_delay_us(50000);
-
- SLIP_send(&greeting, 4);
-
- last_cmd = cmd_loop();
-
- ets_delay_us(10000);
-
- if (last_cmd == CMD_BOOT_FW) {
-#if defined(ESP8266)
- /*
- * Find the return address in our own stack and change it.
- * "flash_finish" it gets to the same point, except it doesn't need to
- * patch up its RA: it returns from UartDwnLdProc, then from f_400011ac,
- * then jumps to 0x4000108a, then checks strapping bits again (which will
- * not have changed), and then proceeds to 0x400010a8.
- */
- volatile uint32_t *sp = &baud_rate;
- while (*sp != (uint32_t) 0x40001100) sp++;
- *sp = 0x400010a8;
- /*
- * The following dummy asm fragment acts as a barrier, to make sure function
- * epilogue, including return address loading, is added after our stack
- * patching.
- */
- __asm volatile("nop.n");
- return; /* To 0x400010a8 */
-#elif defined(ESP32)
-/* TODO(rojer) */
-#endif
- } else {
- software_reset();
- }
- /* Not reached */
-}
diff --git a/common/platforms/esp32/rom/ESP32_ROM.txt b/common/platforms/esp32/rom/ESP32_ROM.txt
deleted file mode 100644
index 632f09a..0000000
--- a/common/platforms/esp32/rom/ESP32_ROM.txt
+++ /dev/null
@@ -1,172789 +0,0 @@
-
-rom.elf: file format elf32-xtensa-le
-
-
-Disassembly of section .text:
-
-40000000 <_start>:
-40000000: 49c500 s32e a0, a5, -16
-40000003: 49d510 s32e a1, a5, -12
-40000006: 49e520 s32e a2, a5, -8
-40000009: 49f530 s32e a3, a5, -4
-4000000c: 003400 rfwo
- ...
-
-40000010 <_xtos_alloca_handler>:
-40000010: 4128 l32i.n a2, a1, 16
-40000012: 5138 l32i.n a3, a1, 20
-40000014: 6148 l32i.n a4, a1, 24
-40000016: 01d112 addmi a1, a1, 0x100
-40000019: 13d100 wsr.excsave1 a0
-4000001c: 034800 rsr.windowbase a0
-4000001f: 4080f0 rotw -1
-40000022: 03e620 rsr.ps a2
-40000025: 343820 extui a3, a2, 8, 4
-40000028: 303340 xor a3, a3, a4
-4000002b: 000846 j 40000050 <_WindowUnderflow4+0x10>
- ...
-
-40000040 <_WindowUnderflow4>:
-40000040: 09c500 l32e a0, a5, -16
-40000043: 09d510 l32e a1, a5, -12
-40000046: 09e520 l32e a2, a5, -8
-40000049: 09f530 l32e a3, a5, -4
-4000004c: 003500 rfwu
-4000004f: d14000 mul16s a4, a0, a0
-40000052: 338003 lsip f0, a0, 204
-40000055: 223011 l32r a1, 3ffc8918 <_bss_end_btdm+0x89a8>
-40000058: e62030 lsi f3, a0, 0x398
-4000005b: 201013 lsi f1, a0, 128
-4000005e: 74f700 extui a15, a0, 7, 8
-40000061: f0dd lsi f13, a0, 0
-40000063: e74080 lsi f8, a0, 0x39c
-40000066: 5778 l32i.n a7, a7, 20
-40000068: 4080f0 rotw -1
-4000006b: 003446 j 40000140 <_WindowUnderflow12>
- ...
-
-40000080 <_WindowOverflow8>:
-40000080: 49c900 s32e a0, a9, -16
-40000083: 09d100 l32e a0, a1, -12
-40000086: 49d910 s32e a1, a9, -12
-40000089: 49e920 s32e a2, a9, -8
-4000008c: 49f930 s32e a3, a9, -4
-4000008f: 498040 s32e a4, a0, -32
-40000092: 499050 s32e a5, a0, -28
-40000095: 49a060 s32e a6, a0, -24
-40000098: 49b070 s32e a7, a0, -20
-4000009b: 003400 rfwo
- ...
-
-400000c0 <_WindowUnderflow8>:
-400000c0: 09c900 l32e a0, a9, -16
-400000c3: 09d910 l32e a1, a9, -12
-400000c6: 09e920 l32e a2, a9, -8
-400000c9: 09d170 l32e a7, a1, -12
-400000cc: 09f930 l32e a3, a9, -4
-400000cf: 098740 l32e a4, a7, -32
-400000d2: 099750 l32e a5, a7, -28
-400000d5: 09a760 l32e a6, a7, -24
-400000d8: 09b770 l32e a7, a7, -20
-400000db: 003500 rfwu
- ...
-
-40000100 <_WindowOverflow12>:
-40000100: 49cd00 s32e a0, a13, -16
-40000103: 09d100 l32e a0, a1, -12
-40000106: 49dd10 s32e a1, a13, -12
-40000109: 49ed20 s32e a2, a13, -8
-4000010c: 49fd30 s32e a3, a13, -4
-4000010f: 494040 s32e a4, a0, -48
-40000112: 495050 s32e a5, a0, -44
-40000115: 496060 s32e a6, a0, -40
-40000118: 497070 s32e a7, a0, -36
-4000011b: 498080 s32e a8, a0, -32
-4000011e: 499090 s32e a9, a0, -28
-40000121: 49a0a0 s32e a10, a0, -24
-40000124: 49b0b0 s32e a11, a0, -20
-40000127: 003400 rfwo
- ...
-
-40000140 <_WindowUnderflow12>:
-40000140: 09cd00 l32e a0, a13, -16
-40000143: 09dd10 l32e a1, a13, -12
-40000146: 09ed20 l32e a2, a13, -8
-40000149: 09d1b0 l32e a11, a1, -12
-4000014c: 09fd30 l32e a3, a13, -4
-4000014f: 094b40 l32e a4, a11, -48
-40000152: 095b50 l32e a5, a11, -44
-40000155: 096b60 l32e a6, a11, -40
-40000158: 097b70 l32e a7, a11, -36
-4000015b: 098b80 l32e a8, a11, -32
-4000015e: 099b90 l32e a9, a11, -28
-40000161: 09aba0 l32e a10, a11, -24
-40000164: 09bbb0 l32e a11, a11, -20
-40000167: 003500 rfwu
-4000016a: 480000 ssx f0, a0, a0
-4000016d: 3ffe04 lsi f0, a14, 252
- ...
-
-40000180 <_Level2Vector>:
-40000180: 61d220 xsr.excsave2 a2
-40000183: 0002a0 jx a2
- ...
-
-400001c0 <_Level3Vector>:
-400001c0: 61d320 xsr.excsave3 a2
-400001c3: 0002a0 jx a2
- ...
-
-40000200 <_Level4Vector>:
-40000200: 61d420 xsr.excsave4 a2
-40000203: 0002a0 jx a2
- ...
-
-40000240 <_Level5Vector>:
-40000240: 61d520 xsr.excsave5 a2
-40000243: 0002a0 jx a2
- ...
-
-40000280 <_DebugExceptionVector>:
-40000280: 13d620 wsr.excsave6 a2
-40000283: 827c movi.n a2, -8
-40000285: 005100 simcall
-40000288: ffff06 j 40000288 <_DebugExceptionVector+0x8>
- ...
-
-400002c0 <_NMIExceptionVector>:
-400002c0: 003710 rfi 7
- ...
-
-40000300 <_KernelExceptionVector>:
-40000300: 004100 break 1, 0
-40000303: fffe46 j 40000300 <_KernelExceptionVector>
- ...
-
-40000340 <_UserExceptionVector>:
-40000340: ffd112 addmi a1, a1, 0xffffff00
-40000343: 4129 s32i.n a2, a1, 16
-40000345: 5139 s32i.n a3, a1, 20
-40000347: ff8931 l32r a3, 4000016c <_WindowUnderflow12+0x2c>
-4000034a: 03e820 rsr.exccause a2
-4000034d: a03230 addx4 a3, a2, a3
-40000350: 0338 l32i.n a3, a3, 0
-40000352: 6149 s32i.n a4, a1, 24
-40000354: 0003a0 jx a3
- ...
-
-400003c0 <_DoubleExceptionVector>:
-400003c0: 004140 break 1, 4
-400003c3: fffe46 j 400003c0 <_DoubleExceptionVector>
- ...
-
-40000400 <_ResetVector>:
-40000400: 001306 j 40000450 <_ResetHandler>
-40000403: abab00 movltz.s f10, f11, a0
-40000406: 380000 lsi f0, a0, 224
-40000409: 3ff000 f64cmph a15, a0, a0, 3
-4000040c: ff .byte 0xff
-4000040d: ff .byte 0xff
-4000040e: ff .byte 0xff
-4000040f: 7f .byte 0x7f
-40000410: 000000 ill
-40000413: 000000 ill
-40000416: 1f4000 f64cmph a4, a0, a0, 1
-40000419: 222221 l32r a2, 3ffc8ca4 <_bss_end_btdm+0x8d34>
-4000041c: 000000 ill
-4000041f: 04c3e0 extui a12, a14, 3, 1
-40000422: f84000 lsi f0, a0, 0x3e0
-40000425: 4000d4 lsi f13, a0, 0x100
-40000428: d5c8 l32i.n a12, a5, 52
-4000042a: 544000 extui a4, a0, 0, 6
-4000042d: 0009 s32i.n a0, a0, 0
-4000042f: 0a2840 add.s f2, f8, f4
-40000432: f84000 lsi f0, a0, 0x3e0
-40000435: 000a add.n a0, a0, a0
-40000437: 064840 lsi f4, a8, 24
-4000043a: fe .byte 0xfe
-4000043b: 3f .byte 0x3f
-4000043c: 0c68 l32i.n a6, a12, 0
-4000043e: 4c4000 lsi f0, a0, 0x130
-40000441: 3ffe06 j 4001043d
- ...
-
-40000450 <_ResetHandler>:
-40000450: 00a002 movi a0, 0
-40000453: 13e400 wsr.intenable a0
-40000456: 03eb20 rsr.prid a2
-40000459: ffea31 l32r a3, 40000404 <_ResetVector+0x4>
-4000045c: 119237 bne a2, a3, 40000471 <_ResetHandler+0x21>
-4000045f: ffea31 l32r a3, 40000408 <_ResetVector+0x8>
-40000462: 002332 l32i a3, a3, 0
-40000465: 0873f7 bbci a3, 31, 40000471 <_ResetHandler+0x21>
-40000468: ffe921 l32r a2, 4000040c <_ResetVector+0xc>
-4000046b: 103320 and a3, a3, a2
-4000046e: 0003c0 callx0 a3
-40000471: ffe721 l32r a2, 40000410 <_ResetVector+0x10>
-40000474: 03eb30 rsr.prid a3
-40000477: 743030 extui a3, a3, 0, 8
-4000047a: 228c beqz.n a2, 40000480 <_ResetHandler+0x30>
-4000047c: 03cc bnez.n a3, 40000480 <_ResetHandler+0x30>
-4000047e: 0209 s32i.n a0, a2, 0
-40000480: ffe521 l32r a2, 40000414 <_ResetVector+0x14>
-40000483: 13e720 wsr.vecbase a2
-40000486: 531c movi.n a3, 21
-40000488: 136330 wsr.atomctl a3
-4000048b: 006120 rsil a2, 1
-4000048e: ffe221 l32r a2, 40000418 <_ResetVector+0x18>
-40000491: ffe251 l32r a5, 4000041c <_ResetVector+0x1c>
-40000494: ffe361 l32r a6, 40000420 <_ResetVector+0x20>
-40000497: 030c movi.n a3, 0
-40000499: 027d mov.n a7, a2
-4000049b: 106650 and a6, a6, a5
-4000049e: 000846 j 400004c3 <_ResetHandler+0x73>
- ...
-400004ad: 000000 ill
-400004b0: 506340 witlb a4, a3
-400004b3: 002000 isync
-400004b6: f03d nop.n
-400004b8: f03d nop.n
-400004ba: c03350 sub a3, a3, a5
-400004bd: 14b3b6 bltui a3, 16, 400004d5 <_ResetHandler+0x85>
-400004c0: 417470 srli a7, a7, 4
-400004c3: 344070 extui a4, a7, 0, 4
-400004c6: e61367 beq a3, a6, 400004b0 <_ResetHandler+0x60>
-400004c9: 506340 witlb a4, a3
-400004cc: c03350 sub a3, a3, a5
-400004cf: edb3f6 bgeui a3, 16, 400004c0 <_ResetHandler+0x70>
-400004d2: 002000 isync
-400004d5: ffd151 l32r a5, 4000041c <_ResetVector+0x1c>
-400004d8: 030c movi.n a3, 0
-400004da: 207220 or a7, a2, a2
-400004dd: 344070 extui a4, a7, 0, 4
-400004e0: 50e340 wdtlb a4, a3
-400004e3: c03350 sub a3, a3, a5
-400004e6: 417470 srli a7, a7, 4
-400004e9: f0b3f6 bgeui a3, 16, 400004dd <_ResetHandler+0x8d>
-400004ec: 002030 dsync
-400004ef: 01a032 movi a3, 1
-400004f2: 036120 rsr.memctl a2
-400004f5: 202230 or a2, a2, a3
-400004f8: 136120 wsr.memctl a2
-400004fb: ffca41 l32r a4, 40000424 <_ResetVector+0x24>
-400004fe: ffca51 l32r a5, 40000428 <_ResetVector+0x28>
-40000501: 0468 l32i.n a6, a4, 0
-40000503: 1478 l32i.n a7, a4, 4
-40000505: 2488 l32i.n a8, a4, 8
-40000507: 3428 l32i.n a2, a4, 12
-40000509: 081226 beqi a2, 1, 40000515 <_ResetHandler+0xc5>
-4000050c: 03eb20 rsr.prid a2
-4000050f: ffbd31 l32r a3, 40000404 <_ResetVector+0x4>
-40000512: 0a1237 beq a2, a3, 40000520 <_ResetHandler+0xd0>
-40000515: 0828 l32i.n a2, a8, 0
-40000517: 0629 s32i.n a2, a6, 0
-40000519: 664b addi.n a6, a6, 4
-4000051b: 884b addi.n a8, a8, 4
-4000051d: f43677 bltu a6, a7, 40000515 <_ResetHandler+0xc5>
-40000520: 10c442 addi a4, a4, 16
-40000523: da3457 bltu a4, a5, 40000501 <_ResetHandler+0xb1>
-40000526: 002000 isync
-40000529: 110c movi.n a1, 1
-4000052b: 134910 wsr.windowstart a1
-4000052e: 134800 wsr.windowbase a0
-40000531: 002010 rsync
-40000534: 000c movi.n a0, 0
-40000536: ffbd41 l32r a4, 4000042c <_ResetVector+0x2c>
-40000539: 13d240 wsr.excsave2 a4
-4000053c: ffbd41 l32r a4, 40000430 <_ResetVector+0x30>
-4000053f: 13d340 wsr.excsave3 a4
-40000542: ffbc41 l32r a4, 40000434 <_ResetVector+0x34>
-40000545: 13d440 wsr.excsave4 a4
-40000548: ffbc51 l32r a5, 40000438 <_ResetVector+0x38>
-4000054b: 006542 s32i a4, a5, 0
-4000054e: ffbb41 l32r a4, 4000043c <_ResetVector+0x3c>
-40000551: 13d540 wsr.excsave5 a4
-40000554: ffbb51 l32r a5, 40000440 <_ResetVector+0x40>
-40000557: 006542 s32i a4, a5, 0
-4000055a: 001a85 call0 40000704 <_stext+0x1a4>
-4000055d: 000000 ill
-
-40000560 <_stext>:
-40000560: fe3f20 f64iter a3, a15, a2, 3, 1
-40000563: 3f .byte 0x3f
-40000564: 040020 extui a0, a2, 0, 1
-40000567: d5d000 extui a13, a0, 16, 14
-4000056a: 6c4000 lsi f0, a0, 0x1b0
-4000056d: 4000d6 bgez a0, 40000971 <_Level2FromVector+0x1d>
-40000570: abab addi.n a10, a11, 10
-40000572: d40000 extui a0, a0, 0, 14
-40000575: bf .byte 0xbf
-40000576: 244000 extui a4, a0, 0, 3
-40000579: 4000c0 lsi f12, a0, 0x100
-4000057c: 0de8 l32i.n a14, a13, 0
-4000057e: 484000 ssx f4, a0, a0
-40000581: 3ffe05 call0 40040564
-40000584: 0448 l32i.n a4, a4, 0
-40000586: fe .byte 0xfe
-40000587: 3f .byte 0x3f
-40000588: 050023 lsi f2, a0, 20
-4000058b: 000700 lsi f0, a7, 0
-4000058e: 058000 extui a8, a0, 16, 1
-40000591: 000000 ill
-40000594: 000000 ill
-40000597: 0650c0 lsi f12, a0, 24
-4000059a: fe .byte 0xfe
-4000059b: 3f .byte 0x3f
-4000059c: 000000 ill
-4000059f: 065880 lsi f8, a8, 24
-400005a2: fe .byte 0xfe
-400005a3: 3f .byte 0x3f
-400005a4: 00c034 lsi f3, a0, 0
-400005a7: 000040 lsi f4, a0, 0
-400005aa: 0038 l32i.n a3, a0, 0
-400005ac: 0a19 s32i.n a1, a10, 0
-400005ae: 004000 break 0, 0
-400005b1: c088 l32i.n a8, a0, 48
-400005b3: ea28 l32i.n a2, a10, 56
-400005b5: 000a add.n a0, a0, a0
-400005b7: 0c6040 lsi f4, a0, 48
-400005ba: fe .byte 0xfe
-400005bb: 3f .byte 0x3f
-400005bc: 0648 l32i.n a4, a6, 0
-400005be: fe .byte 0xfe
-400005bf: 3f .byte 0x3f
-400005c0: 050024 lsi f2, a0, 20
-400005c3: 000000 ill
-400005c6: c05300 sub a5, a3, a0
-400005c9: 3ffe11 l32r a1, 3ffd05c4 <_bss_end_btdm+0x10654>
-400005cc: 064c movi.n a6, 64
-400005ce: fe .byte 0xfe
-400005cf: 3f .byte 0x3f
-400005d0: 050025 call8 400055d4
-400005d3: 000000 ill
-400005d6: 008401 l32r a0, 3ffc07e8 <_bss_end_btdm+0x878>
-400005d9: 0000f0 callx12 a0
-400005dc: f9c2d4 lsi f13, a2, 0x3e4
-400005df: 3f .byte 0x3f
-400005e0: f96024 lsi f2, a0, 0x3e4
-400005e3: 3f .byte 0x3f
-400005e4: f96000 lsi f0, a0, 0x3e4
-400005e7: 3f .byte 0x3f
-400005e8: f96350 lsi f5, a3, 0x3e4
-400005eb: 3f .byte 0x3f
-400005ec: 0e .byte 0xe
-400005ed: 000033 lsi f3, a0, 0
-400005f0: abcd lsi f12, a11, 44
-400005f2: ff .byte 0xff
-400005f3: ff .byte 0xff
-400005f4: 001234 lsi f3, a2, 0
-400005f7: e66d00 lsi f0, a13, 0x398
-400005fa: ff .byte 0xff
-400005fb: ff .byte 0xff
-400005fc: deec bnez.n a14, 4000062d <_stext+0xcd>
-400005fe: ff .byte 0xff
-400005ff: ff .byte 0xff
-40000600: 000001 l32r a0, 3ffc0600 <_bss_end_btdm+0x690>
-40000603: 000000 ill
-40000606: 2d0000 lsi f0, a0, 180
-40000609: 7f .byte 0x7f
-4000060a: 2d4c95 call4 4002dad4
-4000060d: 5851f4 mula.da.ll.lddec m1, a1, m1, a15
-40000610: ff .byte 0xff
-40000611: ff .byte 0xff
-40000612: ff .byte 0xff
-40000613: 7f .byte 0x7f
-40000614: 345987 bbc a9, a8, 4000064c <_stext+0xec>
-40000617: 0b5f12 s16i a1, a15, 22
-4000061a: 4e .byte 0x4e
-4000061b: 0ce383 lsi f8, a3, 48
-4000061e: fe .byte 0xfe
-4000061f: ff .byte 0xff
-40000620: 0041a7 ball a1, a10, 40000624 <_stext+0xc4>
-40000623: f4ec00 extui a14, a0, 12, 16
-40000626: ff .byte 0xff
-40000627: ff .byte 0xff
-40000628: ff .byte 0xff
-40000629: ef .byte 0xef
-4000062a: ff .byte 0xff
-4000062b: ff .byte 0xff
-4000062c: 001000 movsp a0, a0
-4000062f: 00ff00 lsi f0, a15, 0
-40000632: 000000 ill
-40000635: ff .byte 0xff
-40000636: 000000 ill
-40000639: 00ff00 lsi f0, a15, 0
-4000063c: 000000 ill
-4000063f: ff .byte 0xff
-40000640: 404040 lsi f4, a0, 0x100
-40000643: 625440 lsi f4, a4, 0x188
-40000646: 3ff9 s32i.n a15, a15, 12
-40000648: 1f .byte 0x1f
-40000649: 51eb85 call0 40052504
-4000064c: 609c beqz.n a0, 40000666 <_stext+0x106>
-4000064e: 3ff9 s32i.n a15, a15, 12
-40000650: 492493 lsi f9, a4, 0x124
-40000653: ffff92 s32ri a9, a15, 0x3fc
-40000656: ff .byte 0xff
-40000657: 3f .byte 0x3f
-40000658: 015180 slli a5, a1, 24
-4000065b: e08000 subx4 a8, a0, a0
-4000065e: 3ffa add.n a3, a15, a15
-40000660: f9c4a6 blti a4, 32, 4000065d <_stext+0xfd>
-40000663: 3f .byte 0x3f
-40000664: fae0a0 rsqrt0.s f14, f0
-40000667: 3f .byte 0x3f
-40000668: fae0a4 lsi f10, a0, 0x3e8
-4000066b: 3f .byte 0x3f
-4000066c: fae030 const.s f14, 0
-4000066f: 3f .byte 0x3f
-40000670: c4a9 s32i.n a10, a4, 48
-40000672: 3ff9 s32i.n a15, a15, 12
-40000674: fae084 lsi f8, a0, 0x3e8
-40000677: 3f .byte 0x3f
-40000678: c4ad lsi f10, a4, 16
-4000067a: 3ff9 s32i.n a15, a15, 12
-4000067c: fae093 lsi f9, a0, 0x3e8
-4000067f: 3f .byte 0x3f
-40000680: f9c4d0 lsi f13, a4, 0x3e4
-40000683: 3f .byte 0x3f
-40000684: e088 l32i.n a8, a0, 56
-40000686: 3ffa add.n a3, a15, a15
-40000688: fff1f0 f64cmph a15, a1, a15, 15
-4000068b: ff .byte 0xff
-4000068c: c4bc beqz.n a4, 400006cc <_stext+0x16c>
-4000068e: 3ff9 s32i.n a15, a15, 12
-40000690: cf .byte 0xcf
-40000691: 3ff9c4 lsi f12, a9, 252
-40000694: 1fec bnez.n a15, 400006b9 <_stext+0x159>
-40000696: 184000 lsxp f4, a0, a0
-40000699: 400011 l32r a1, 3ffd069c <_bss_end_btdm+0x1072c>
-4000069c: 001150 movsp a5, a1
-4000069f: 118440 slli a8, a4, 12
-400006a2: b84000 lsi f0, a0, 0x2e0
-400006a5: 400011 l32r a1, 3ffd06a8 <_bss_end_btdm+0x10738>
-400006a8: fae0b0 nexp01.s f14, f0
-400006ab: 3f .byte 0x3f
-400006ac: e0ac beqz.n a0, 400006de <_stext+0x17e>
-400006ae: 3ffa add.n a3, a15, a15
-400006b0: e0a8 l32i.n a10, a0, 56
-400006b2: 3ffa add.n a3, a15, a15
-400006b4: 1d48 l32i.n a4, a13, 4
-400006b6: 584000 ssxp f4, a0, a0
-400006b9: 001d mov.n a1, a0
-400006bb: 1d7040 lsi f4, a0, 116
-400006be: b44000 extui a4, a0, 0, 12
-400006c1: 3ffae0 f64cmph a15, a10, a14, 3
-400006c4: e038 l32i.n a3, a0, 56
-400006c6: 3ffa add.n a3, a15, a15
-400006c8: e0b8 l32i.n a11, a0, 56
-400006ca: 3ffa add.n a3, a15, a15
-400006cc: 6498 l32i.n a9, a4, 24
-400006ce: 3ff9 s32i.n a15, a15, 12
-400006d0: 6478 l32i.n a7, a4, 24
-400006d2: 3ff9 s32i.n a15, a15, 12
-400006d4: 6458 l32i.n a5, a4, 24
-400006d6: 3ff9 s32i.n a15, a15, 12
-400006d8: 800000 add a0, a0, a0
-400006db: 7f .byte 0x7f
-400006dc: 400000 ssr a0
-400006df: ffff00 f64cmph a15, a15, a0, 15
-400006e2: ff .byte 0xff
-400006e3: 000000 ill
-400006e6: 007ff0 sddr32.p a15
-400006e9: 000800 lsi f0, a8, 0
-400006ec: ff .byte 0xff
-400006ed: ff .byte 0xff
-400006ee: 1f .byte 0x1f
-400006ef: 000000 ill
-400006f2: 443800 extui a3, a0, 8, 5
-400006f5: 3ff965 call8 4004068c
-400006f8: 006996 bltz a9, 40000702 <_stext+0x1a2>
-400006fb: c2b400 quou a11, a4, a0
-400006fe: 3ff9 s32i.n a15, a15, 12
-40000700: c01c movi.n a0, 28
-40000702: 0c4000 lsi f0, a0, 48
-40000705: 961100 lsi f0, a1, 0x258
-40000708: ff .byte 0xff
-40000709: ff9631 l32r a3, 40000564 <_stext+0x4>
-4000070c: 13e630 wsr.ps a3
-4000070f: 002010 rsync
-40000712: ff9561 l32r a6, 40000568 <_stext+0x8>
-40000715: ff9571 l32r a7, 4000056c <_stext+0xc>
-40000718: 000c movi.n a0, 0
-4000071a: 0648 l32i.n a4, a6, 0
-4000071c: 1658 l32i.n a5, a6, 4
-4000071e: 2638 l32i.n a3, a6, 8
-40000720: 111326 beqi a3, 1, 40000735 <_stext+0x1d5>
-40000723: 03eb20 rsr.prid a2
-40000726: ff9231 l32r a3, 40000570 <_stext+0x10>
-40000729: 0b1237 beq a2, a3, 40000738 <_stext+0x1d8>
-4000072c: 000146 j 40000735 <_stext+0x1d5>
-4000072f: 090000 l32e a0, a0, -64
-40000732: 444b04 lsi f0, a11, 0x110
-40000735: f83457 bltu a4, a5, 40000731 <_stext+0x1d1>
-40000738: 66cb addi.n a6, a6, 12
-4000073a: dc3677 bltu a6, a7, 4000071a <_stext+0x1ba>
-4000073d: 06f855 call4 400076c4
-40000740: 120c movi.n a2, 1
-40000742: 005100 simcall
-40000745: 0041f0 break 1, 15
-40000748: fffd06 j 40000740 <_stext+0x1e0>
- ...
-
-4000074c <_xtos_set_exception_handler>:
-4000074c: 004136 entry a1, 32
-4000074f: f83c movi.n a8, 63
-40000751: 03b827 bgeu a8, a2, 40000758 <_xtos_set_exception_handler+0xc>
-40000754: 020c movi.n a2, 0
-40000756: f01d retw.n
-40000758: ff8aa1 l32r a10, 40000580 <_stext+0x20>
-4000075b: 1182e0 slli a8, a2, 2
-4000075e: 23ac beqz.n a3, 40000784 <_xtos_set_exception_handler+0x38>
-40000760: ff8591 l32r a9, 40000574 <_stext+0x14>
-40000763: 2a8a add.n a2, a10, a8
-40000765: 002222 l32i a2, a2, 0
-40000768: ff85b1 l32r a11, 4000057c <_stext+0x1c>
-4000076b: 059397 bne a3, a9, 40000774 <_xtos_set_exception_handler+0x28>
-4000076e: ff82b1 l32r a11, 40000578 <_stext+0x18>
-40000771: 203990 or a3, a9, a9
-40000774: ff84c1 l32r a12, 40000584 <_stext+0x24>
-40000777: aa8a add.n a10, a10, a8
-40000779: 8c8a add.n a8, a12, a8
-4000077b: 08b9 s32i.n a11, a8, 0
-4000077d: 0a39 s32i.n a3, a10, 0
-4000077f: d11297 beq a2, a9, 40000754 <_xtos_set_exception_handler+0x8>
-40000782: f01d retw.n
-40000784: 2a8a add.n a2, a10, a8
-40000786: 0228 l32i.n a2, a2, 0
-40000788: ff7b91 l32r a9, 40000574 <_stext+0x14>
-4000078b: fff7c6 j 4000076e <_xtos_set_exception_handler+0x22>
- ...
-
-40000790 <_xtos_syscall_handler>:
-40000790: 03b130 rsr.epc1 a3
-40000793: 030120 rsr.lend a2
-40000796: 333b addi.n a3, a3, 3
-40000798: 0c9237 bne a2, a3, 400007a8 <_xtos_syscall_handler+0x18>
-4000079b: 030220 rsr.lcount a2
-4000079e: 628c beqz.n a2, 400007a8 <_xtos_syscall_handler+0x18>
-400007a0: 220b addi.n a2, a2, -1
-400007a2: 130220 wsr.lcount a2
-400007a5: 030030 rsr.lbeg a3
-400007a8: 4128 l32i.n a2, a1, 16
-400007aa: 13b130 wsr.epc1 a3
-400007ad: 5138 l32i.n a3, a1, 20
-400007af: 056256 bnez a2, 40000809 <_SyscallException+0x3a>
-400007b2: 396132 s32i a3, a1, 228
-400007b5: 3a6142 s32i a4, a1, 232
-400007b8: 3b6152 s32i a5, a1, 236
-400007bb: ff7331 l32r a3, 40000588 <_stext+0x28>
-400007be: 03e620 rsr.ps a2
-400007c1: 13e630 wsr.ps a3
-400007c4: 03b130 rsr.epc1 a3
-400007c7: 01d112 addmi a1, a1, 0x100
-400007ca: 002010 rsync
-400007cd: 040c movi.n a4, 0
-
-400007cf <_SyscallException>:
-400007cf: 008136 entry a1, 64
-400007d2: 0001f5 call12 400007f0 <_SyscallException+0x21>
-400007d5: ff6de1 l32r a14, 4000058c <_stext+0x2c>
-400007d8: 0cea add.n a0, a12, a14
-400007da: f01d retw.n
-400007dc: 13e620 wsr.ps a2
-400007df: 020c movi.n a2, 0
-400007e1: a548 l32i.n a4, a5, 40
-400007e3: 002010 rsync
-400007e6: 13b130 wsr.epc1 a3
-400007e9: 9538 l32i.n a3, a5, 36
-400007eb: b558 l32i.n a5, a5, 44
-400007ed: 003000 rfe
-400007f0: 006136 entry a1, 48
-400007f3: ff67c1 l32r a12, 40000590 <_stext+0x30>
-400007f6: c0ca add.n a12, a0, a12
-400007f8: 006136 entry a1, 48
-400007fb: 00cd mov.n a12, a0
-400007fd: 006136 entry a1, 48
-40000800: 00cd mov.n a12, a0
-40000802: 002136 entry a1, 16
-40000805: 0bbd mov.n a11, a11
-40000807: f01d retw.n
-40000809: f27c movi.n a2, -1
-4000080b: 01d112 addmi a1, a1, 0x100
-4000080e: 003000 rfe
-40000811: 000000 ill
-
-40000814 <_xtos_l1int_handler>:
-40000814: 7159 s32i.n a5, a1, 28
-40000816: ff5c21 l32r a2, 40000588 <_stext+0x28>
-40000819: 03b130 rsr.epc1 a3
-4000081c: 61e620 xsr.ps a2
-4000081f: 0139 s32i.n a3, a1, 0
-40000821: 1129 s32i.n a2, a1, 4
-40000823: 3b2122 l32i a2, a1, 236
-40000826: 01d112 addmi a1, a1, 0x100
-40000829: 002010 rsync
-4000082c: ff5a41 l32r a4, 40000594 <_stext+0x34>
-4000082f: 203430 or a3, a4, a3
-40000832: 904430 addx2 a4, a4, a3
-
-40000835 <_LevelOneInterrupt>:
-40000835: 020136 entry a1, 0x100
-40000838: 0061f0 rsil a15, 1
-4000083b: ff57e1 l32r a14, 40000598 <_stext+0x38>
-4000083e: 03e2f0 rsr.interrupt a15
-40000841: 03e4c0 rsr.intenable a12
-40000844: 1ed8 l32i.n a13, a14, 4
-40000846: 10ffc0 and a15, a15, a12
-40000849: 0303c0 rsr.sar a12
-4000084c: 31d9 s32i.n a13, a1, 12
-4000084e: 092f16 beqz a15, 400008e4 <_LevelOneInterrupt+0xaf>
-40000851: 21c9 s32i.n a12, a1, 8
-40000853: 8129 s32i.n a2, a1, 32
-40000855: ffaf22 movi a2, -1
-40000858: 40ffc0 nsau a12, a15
-4000085b: ff50f1 l32r a15, 4000059c <_stext+0x3c>
-4000085e: 400c00 ssr a12
-40000861: 91f0f0 srl a15, a15
-40000864: 3022f0 xor a2, a2, a15
-40000867: ff4ed1 l32r a13, 400005a0 <_stext+0x40>
-4000086a: 13e3f0 wsr.intclear a15
-4000086d: b0ccd0 addx8 a12, a12, a13
-40000870: 402cd2 l32i a13, a12, 0x100
-40000873: 0066f0 rsil a15, 6
-40000876: 0ef8 l32i.n a15, a14, 0
-40000878: 1ed9 s32i.n a13, a14, 4
-4000087a: 10ffd0 and a15, a15, a13
-4000087d: 13e4f0 wsr.intenable a15
-40000880: 002010 rsync
-40000883: 0060f0 rsil a15, 0
-40000886: 0302d0 rsr.lcount a13
-40000889: 0300f0 rsr.lbeg a15
-4000088c: 91d9 s32i.n a13, a1, 36
-4000088e: 0301d0 rsr.lend a13
-40000891: a1f9 s32i.n a15, a1, 40
-40000893: b1d9 s32i.n a13, a1, 44
-40000895: 0310d0 rsr.acclo a13
-40000898: 0311f0 rsr.acchi a15
-4000089b: c1d9 s32i.n a13, a1, 48
-4000089d: d1f9 s32i.n a15, a1, 52
-4000089f: 0cd8 l32i.n a13, a12, 0
-400008a1: 01fd mov.n a15, a1
-400008a3: 012ce2 l32i a14, a12, 4
-400008a6: 000df0 callx12 a13
-400008a9: 91d8 l32i.n a13, a1, 36
-400008ab: a1e8 l32i.n a14, a1, 40
-400008ad: b1f8 l32i.n a15, a1, 44
-400008af: 1302d0 wsr.lcount a13
-400008b2: 1300e0 wsr.lbeg a14
-400008b5: 1301f0 wsr.lend a15
-400008b8: c1d8 l32i.n a13, a1, 48
-400008ba: d1e8 l32i.n a14, a1, 52
-400008bc: 1310d0 wsr.acclo a13
-400008bf: 1311e0 wsr.acchi a14
-400008c2: ff35e1 l32r a14, 40000598 <_stext+0x38>
-400008c5: 03e2f0 rsr.interrupt a15
-400008c8: 0066d0 rsil a13, 6
-400008cb: 0ed8 l32i.n a13, a14, 0
-400008cd: 31c8 l32i.n a12, a1, 12
-400008cf: 10ddc0 and a13, a13, a12
-400008d2: 10ffd0 and a15, a15, a13
-400008d5: 01ff56 bnez a15, 400008f8 <_LevelOneInterrupt+0xc3>
-400008d8: 8128 l32i.n a2, a1, 32
-400008da: 1ec9 s32i.n a12, a14, 4
-400008dc: 21c8 l32i.n a12, a1, 8
-400008de: 13e4d0 wsr.intenable a13
-400008e1: 0063d0 rsil a13, 3
-400008e4: ff3001 l32r a0, 400005a4 <_stext+0x44>
-400008e7: ff2bd1 l32r a13, 40000594 <_stext+0x34>
-400008ea: 1303c0 wsr.sar a12
-400008ed: 2000d0 or a0, a0, a13
-400008f0: 900d00 addx2 a0, a13, a0
-400008f3: 0063d0 rsil a13, 3
-400008f6: f01d retw.n
-400008f8: 40ffd0 nsau a13, a15
-400008fb: ff29c1 l32r a12, 400005a0 <_stext+0x40>
-400008fe: b0cdc0 addx8 a12, a13, a12
-40000901: 412ce2 l32i a14, a12, 0x104
-40000904: 10ff20 and a15, a15, a2
-40000907: 10ffe0 and a15, a15, a14
-4000090a: ff23e1 l32r a14, 40000598 <_stext+0x38>
-4000090d: f47f56 bnez a15, 40000858 <_LevelOneInterrupt+0x23>
-40000910: ff23f1 l32r a15, 4000059c <_stext+0x3c>
-40000913: 400d00 ssr a13
-40000916: 91d0f0 srl a13, a15
-40000919: 412cf2 l32i a15, a12, 0x104
-4000091c: 13e3d0 wsr.intclear a13
-4000091f: 2022f0 or a2, a2, a15
-40000922: 3022d0 xor a2, a2, a13
-40000925: ffd1c6 j 40000870 <_LevelOneInterrupt+0x3b>
-
-40000928 <_xtos_restore_intlevel>:
-40000928: 002136 entry a1, 16
-4000092b: 13e620 wsr.ps a2
-4000092e: 002010 rsync
-40000931: f01d retw.n
- ...
-
-40000934 <_xtos_set_vpri>:
-40000934: 002136 entry a1, 16
-40000937: 023d mov.n a3, a2
-40000939: ff1741 l32r a4, 40000598 <_stext+0x38>
-4000093c: 006670 rsil a7, 6
-4000093f: 1428 l32i.n a2, a4, 4
-40000941: 0458 l32i.n a5, a4, 0
-40000943: 1439 s32i.n a3, a4, 4
-40000945: 105530 and a5, a5, a3
-40000948: 13e450 wsr.intenable a5
-4000094b: 13e670 wsr.ps a7
-4000094e: 002010 rsync
-40000951: f01d retw.n
- ...
-
-40000954 <_Level2FromVector>:
-40000954: 61d220 xsr.excsave2 a2
-40000957: ffd112 addmi a1, a1, 0xffffff00
-4000095a: 4129 s32i.n a2, a1, 16
-4000095c: ff0b21 l32r a2, 40000588 <_stext+0x28>
-4000095f: 6149 s32i.n a4, a1, 24
-40000961: 7159 s32i.n a5, a1, 28
-40000963: 13e620 wsr.ps a2
-40000966: 002010 rsync
-40000969: 3b2122 l32i a2, a1, 236
-4000096c: 01d112 addmi a1, a1, 0x100
-4000096f: 03b240 rsr.epc2 a4
-40000972: ff0851 l32r a5, 40000594 <_stext+0x34>
-40000975: 204540 or a4, a5, a4
-40000978: 904540 addx2 a4, a5, a4
-4000097b: 020136 entry a1, 0x100
-4000097e: 0062f0 rsil a15, 2
-40000981: 03e2f0 rsr.interrupt a15
-40000984: 03e4c0 rsr.intenable a12
-40000987: ff08d1 l32r a13, 400005a8 <_stext+0x48>
-4000098a: 10ffc0 and a15, a15, a12
-4000098d: 10ffd0 and a15, a15, a13
-40000990: 0303e0 rsr.sar a14
-40000993: 06ef16 beqz a15, 40000a05 <_Level2FromVector+0xb1>
-40000996: 21e9 s32i.n a14, a1, 8
-40000998: 0302d0 rsr.lcount a13
-4000099b: 0300e0 rsr.lbeg a14
-4000099e: 91d9 s32i.n a13, a1, 36
-400009a0: 0301d0 rsr.lend a13
-400009a3: a1e9 s32i.n a14, a1, 40
-400009a5: b1d9 s32i.n a13, a1, 44
-400009a7: 0310d0 rsr.acclo a13
-400009aa: 0311e0 rsr.acchi a14
-400009ad: c1d9 s32i.n a13, a1, 48
-400009af: d1e9 s32i.n a14, a1, 52
-400009b1: 60c0f0 neg a12, a15
-400009b4: 10ccf0 and a12, a12, a15
-400009b7: 13e3c0 wsr.intclear a12
-400009ba: fef9d1 l32r a13, 400005a0 <_stext+0x40>
-400009bd: fe1c movi.n a14, 31
-400009bf: 40fcc0 nsau a12, a12
-400009c2: c0fec0 sub a15, a14, a12
-400009c5: 60f0f0 neg a15, a15
-400009c8: 1fcff2 addi a15, a15, 31
-400009cb: b0cfd0 addx8 a12, a15, a13
-400009ce: 0cd8 l32i.n a13, a12, 0
-400009d0: 1ce8 l32i.n a14, a12, 4
-400009d2: 20f110 or a15, a1, a1
-400009d5: 000df0 callx12 a13
-400009d8: 03e2f0 rsr.interrupt a15
-400009db: 03e4c0 rsr.intenable a12
-400009de: fef2d1 l32r a13, 400005a8 <_stext+0x48>
-400009e1: 10ffc0 and a15, a15, a12
-400009e4: 10ffd0 and a15, a15, a13
-400009e7: fc6f56 bnez a15, 400009b1 <_Level2FromVector+0x5d>
-400009ea: 91d8 l32i.n a13, a1, 36
-400009ec: a1e8 l32i.n a14, a1, 40
-400009ee: b1f8 l32i.n a15, a1, 44
-400009f0: 1302d0 wsr.lcount a13
-400009f3: 1300e0 wsr.lbeg a14
-400009f6: 1301f0 wsr.lend a15
-400009f9: c1d8 l32i.n a13, a1, 48
-400009fb: d1e8 l32i.n a14, a1, 52
-400009fd: 1310d0 wsr.acclo a13
-40000a00: 1311e0 wsr.acchi a14
-40000a03: 21e8 l32i.n a14, a1, 8
-40000a05: fee901 l32r a0, 400005ac <_stext+0x4c>
-40000a08: fee3d1 l32r a13, 40000594 <_stext+0x34>
-40000a0b: 1303e0 wsr.sar a14
-40000a0e: 2000d0 or a0, a0, a13
-40000a11: 900d00 addx2 a0, a13, a0
-40000a14: 0063e0 rsil a14, 3
-40000a17: f01d retw.n
-40000a19: 3b6522 s32i a2, a5, 236
-40000a1c: 4528 l32i.n a2, a5, 16
-40000a1e: 6548 l32i.n a4, a5, 24
-40000a20: 7558 l32i.n a5, a5, 28
-40000a22: 003210 rfi 2
-40000a25: 000000 ill
-
-40000a28 <_Level3FromVector>:
-40000a28: 61d320 xsr.excsave3 a2
-40000a2b: ffd112 addmi a1, a1, 0xffffff00
-40000a2e: 4129 s32i.n a2, a1, 16
-40000a30: fed621 l32r a2, 40000588 <_stext+0x28>
-40000a33: 6149 s32i.n a4, a1, 24
-40000a35: 7159 s32i.n a5, a1, 28
-40000a37: 13e620 wsr.ps a2
-40000a3a: 002010 rsync
-40000a3d: 3b2122 l32i a2, a1, 236
-40000a40: 01d112 addmi a1, a1, 0x100
-40000a43: 03b340 rsr.epc3 a4
-40000a46: fed351 l32r a5, 40000594 <_stext+0x34>
-40000a49: 204540 or a4, a5, a4
-40000a4c: 904540 addx2 a4, a5, a4
-40000a4f: 020136 entry a1, 0x100
-40000a52: 0063f0 rsil a15, 3
-40000a55: 03e2f0 rsr.interrupt a15
-40000a58: 03e4c0 rsr.intenable a12
-40000a5b: fed5d1 l32r a13, 400005b0 <_stext+0x50>
-40000a5e: 10ffc0 and a15, a15, a12
-40000a61: 10ffd0 and a15, a15, a13
-40000a64: 0303e0 rsr.sar a14
-40000a67: 06ef16 beqz a15, 40000ad9 <_Level3FromVector+0xb1>
-40000a6a: 21e9 s32i.n a14, a1, 8
-40000a6c: 0302d0 rsr.lcount a13
-40000a6f: 0300e0 rsr.lbeg a14
-40000a72: 91d9 s32i.n a13, a1, 36
-40000a74: 0301d0 rsr.lend a13
-40000a77: a1e9 s32i.n a14, a1, 40
-40000a79: b1d9 s32i.n a13, a1, 44
-40000a7b: 0310d0 rsr.acclo a13
-40000a7e: 0311e0 rsr.acchi a14
-40000a81: c1d9 s32i.n a13, a1, 48
-40000a83: d1e9 s32i.n a14, a1, 52
-40000a85: 60c0f0 neg a12, a15
-40000a88: 10ccf0 and a12, a12, a15
-40000a8b: 13e3c0 wsr.intclear a12
-40000a8e: fec4d1 l32r a13, 400005a0 <_stext+0x40>
-40000a91: fe1c movi.n a14, 31
-40000a93: 40fcc0 nsau a12, a12
-40000a96: c0fec0 sub a15, a14, a12
-40000a99: 60f0f0 neg a15, a15
-40000a9c: 1fcff2 addi a15, a15, 31
-40000a9f: b0cfd0 addx8 a12, a15, a13
-40000aa2: 0cd8 l32i.n a13, a12, 0
-40000aa4: 1ce8 l32i.n a14, a12, 4
-40000aa6: 20f110 or a15, a1, a1
-40000aa9: 000df0 callx12 a13
-40000aac: 03e2f0 rsr.interrupt a15
-40000aaf: 03e4c0 rsr.intenable a12
-40000ab2: febfd1 l32r a13, 400005b0 <_stext+0x50>
-40000ab5: 10ffc0 and a15, a15, a12
-40000ab8: 10ffd0 and a15, a15, a13
-40000abb: fc6f56 bnez a15, 40000a85 <_Level3FromVector+0x5d>
-40000abe: 91d8 l32i.n a13, a1, 36
-40000ac0: a1e8 l32i.n a14, a1, 40
-40000ac2: b1f8 l32i.n a15, a1, 44
-40000ac4: 1302d0 wsr.lcount a13
-40000ac7: 1300e0 wsr.lbeg a14
-40000aca: 1301f0 wsr.lend a15
-40000acd: c1d8 l32i.n a13, a1, 48
-40000acf: d1e8 l32i.n a14, a1, 52
-40000ad1: 1310d0 wsr.acclo a13
-40000ad4: 1311e0 wsr.acchi a14
-40000ad7: 21e8 l32i.n a14, a1, 8
-40000ad9: feb601 l32r a0, 400005b4 <_stext+0x54>
-40000adc: feaed1 l32r a13, 40000594 <_stext+0x34>
-40000adf: 1303e0 wsr.sar a14
-40000ae2: 2000d0 or a0, a0, a13
-40000ae5: 900d00 addx2 a0, a13, a0
-40000ae8: f01d retw.n
-40000aea: 3b6522 s32i a2, a5, 236
-40000aed: 4528 l32i.n a2, a5, 16
-40000aef: 6548 l32i.n a4, a5, 24
-40000af1: 7558 l32i.n a5, a5, 28
-40000af3: 003310 rfi 3
- ...
-
-40000af8 <_Level4FromVector>:
-40000af8: feb021 l32r a2, 400005b8 <_stext+0x58>
-40000afb: d209 s32i.n a0, a2, 52
-40000afd: feaf01 l32r a0, 400005bc <_stext+0x5c>
-40000b00: e219 s32i.n a1, a2, 56
-40000b02: 0008 l32i.n a0, a0, 0
-40000b04: 106232 s32i a3, a2, 64
-40000b07: 61d400 xsr.excsave4 a0
-40000b0a: 116242 s32i a4, a2, 68
-40000b0d: f209 s32i.n a0, a2, 60
-40000b0f: 03b130 rsr.epc1 a3
-40000b12: 03e840 rsr.exccause a4
-40000b15: 3239 s32i.n a3, a2, 12
-40000b17: 4249 s32i.n a4, a2, 16
-40000b19: 03ee30 rsr.excvaddr a3
-40000b1c: 056232 s32i a3, a2, 20
-40000b1f: 03d140 rsr.excsave1 a4
-40000b22: 6249 s32i.n a4, a2, 24
-40000b24: 38a002 movi a0, 56
-40000b27: 126252 s32i a5, a2, 72
-40000b2a: 136262 s32i a6, a2, 76
-40000b2d: 146272 s32i a7, a2, 80
-40000b30: 156282 s32i a8, a2, 84
-40000b33: 166292 s32i a9, a2, 88
-40000b36: 1762a2 s32i a10, a2, 92
-40000b39: 1862b2 s32i a11, a2, 96
-40000b3c: 1962c2 s32i a12, a2, 100
-40000b3f: 1a62d2 s32i a13, a2, 104
-40000b42: 1b62e2 s32i a14, a2, 108
-40000b45: 1c62f2 s32i a15, a2, 112
-40000b48: f8c082 addi a8, a0, -8
-40000b4b: 20c2a2 addi a10, a2, 32
-40000b4e: 408020 rotw 2
-40000b51: fdb056 bnez a0, 40000b30 <_Level4FromVector+0x38>
-40000b54: 408020 rotw 2
-40000b57: 034930 rsr.windowstart a3
-40000b5a: 034840 rsr.windowbase a4
-40000b5d: 1239 s32i.n a3, a2, 4
-40000b5f: 2249 s32i.n a4, a2, 8
-40000b61: 130c movi.n a3, 1
-40000b63: 040c movi.n a4, 0
-40000b65: 134930 wsr.windowstart a3
-40000b68: 134840 wsr.windowbase a4
-40000b6b: 002010 rsync
-40000b6e: fe9211 l32r a1, 400005b8 <_stext+0x58>
-40000b71: 000c movi.n a0, 0
-40000b73: fe9321 l32r a2, 400005c0 <_stext+0x60>
-40000b76: 13e620 wsr.ps a2
-40000b79: 002010 rsync
-40000b7c: 0303e0 rsr.sar a14
-40000b7f: 01e9 s32i.n a14, a1, 0
-40000b81: 0302e0 rsr.lcount a14
-40000b84: a1e9 s32i.n a14, a1, 40
-40000b86: 0300e0 rsr.lbeg a14
-40000b89: b1e9 s32i.n a14, a1, 44
-40000b8b: 0301e0 rsr.lend a14
-40000b8e: c1e9 s32i.n a14, a1, 48
-40000b90: 0310e0 rsr.acclo a14
-40000b93: 81e9 s32i.n a14, a1, 32
-40000b95: 0311e0 rsr.acchi a14
-40000b98: 91e9 s32i.n a14, a1, 36
-40000b9a: 03e2f0 rsr.interrupt a15
-40000b9d: 03e4c0 rsr.intenable a12
-40000ba0: fe89d1 l32r a13, 400005c4 <_stext+0x64>
-40000ba3: 10ffc0 and a15, a15, a12
-40000ba6: 10ffd0 and a15, a15, a13
-40000ba9: 02af16 beqz a15, 40000bd7 <_Level4FromVector+0xdf>
-40000bac: 60e0f0 neg a14, a15
-40000baf: 10eef0 and a14, a14, a15
-40000bb2: 13e3e0 wsr.intclear a14
-40000bb5: fe7ac1 l32r a12, 400005a0 <_stext+0x40>
-40000bb8: 40fee0 nsau a14, a14
-40000bbb: b0cec0 addx8 a12, a14, a12
-40000bbe: 0cd8 l32i.n a13, a12, 0
-40000bc0: 1c68 l32i.n a6, a12, 4
-40000bc2: 000dd0 callx4 a13
-40000bc5: 03e2f0 rsr.interrupt a15
-40000bc8: 03e4c0 rsr.intenable a12
-40000bcb: fe7ed1 l32r a13, 400005c4 <_stext+0x64>
-40000bce: 10ffc0 and a15, a15, a12
-40000bd1: 10ffd0 and a15, a15, a13
-40000bd4: fd4f56 bnez a15, 40000bac <_Level4FromVector+0xb4>
-40000bd7: a1d8 l32i.n a13, a1, 40
-40000bd9: b1e8 l32i.n a14, a1, 44
-40000bdb: c1f8 l32i.n a15, a1, 48
-40000bdd: 1302d0 wsr.lcount a13
-40000be0: 1300e0 wsr.lbeg a14
-40000be3: 1301f0 wsr.lend a15
-40000be6: 81d8 l32i.n a13, a1, 32
-40000be8: 91e8 l32i.n a14, a1, 36
-40000bea: 1310d0 wsr.acclo a13
-40000bed: 1311e0 wsr.acchi a14
-40000bf0: 01f8 l32i.n a15, a1, 0
-40000bf2: 1303f0 wsr.sar a15
-40000bf5: 423c movi.n a2, 52
-40000bf7: 13e620 wsr.ps a2
-40000bfa: 002010 rsync
-40000bfd: 1128 l32i.n a2, a1, 4
-40000bff: 022132 l32i a3, a1, 8
-40000c02: 134920 wsr.windowstart a2
-40000c05: 134830 wsr.windowbase a3
-40000c08: 002010 rsync
-40000c0b: fe6b11 l32r a1, 400005b8 <_stext+0x58>
-40000c0e: 38a062 movi a6, 56
-40000c11: e0c172 addi a7, a1, -32
-40000c14: f8c6e2 addi a14, a6, -8
-40000c17: 20c7f2 addi a15, a7, 32
-40000c1a: 112f42 l32i a4, a15, 68
-40000c1d: 122f52 l32i a5, a15, 72
-40000c20: 132f62 l32i a6, a15, 76
-40000c23: 142f72 l32i a7, a15, 80
-40000c26: 152f82 l32i a8, a15, 84
-40000c29: 162f92 l32i a9, a15, 88
-40000c2c: 172fa2 l32i a10, a15, 92
-40000c2f: 182fb2 l32i a11, a15, 96
-40000c32: 408020 rotw 2
-40000c35: fdb656 bnez a6, 40000c14 <_Level4FromVector+0x11c>
-40000c38: 192742 l32i a4, a7, 100
-40000c3b: 1a2752 l32i a5, a7, 104
-40000c3e: 1b2762 l32i a6, a7, 108
-40000c41: 1c2772 l32i a7, a7, 112
-40000c44: 408020 rotw 2
-40000c47: 3128 l32i.n a2, a1, 12
-40000c49: 4138 l32i.n a3, a1, 16
-40000c4b: 13b120 wsr.epc1 a2
-40000c4e: 13e830 wsr.exccause a3
-40000c51: 5128 l32i.n a2, a1, 20
-40000c53: 13ee20 wsr.excvaddr a2
-40000c56: 6138 l32i.n a3, a1, 24
-40000c58: 13d130 wsr.excsave1 a3
-40000c5b: d108 l32i.n a0, a1, 52
-40000c5d: f128 l32i.n a2, a1, 60
-40000c5f: 102132 l32i a3, a1, 64
-40000c62: e118 l32i.n a1, a1, 56
-40000c64: 003410 rfi 4
- ...
-
-40000c68 <_Level5FromVector>:
-40000c68: fe5821 l32r a2, 400005c8 <_stext+0x68>
-40000c6b: d209 s32i.n a0, a2, 52
-40000c6d: fe5701 l32r a0, 400005cc <_stext+0x6c>
-40000c70: e219 s32i.n a1, a2, 56
-40000c72: 0008 l32i.n a0, a0, 0
-40000c74: 106232 s32i a3, a2, 64
-40000c77: 61d500 xsr.excsave5 a0
-40000c7a: 116242 s32i a4, a2, 68
-40000c7d: f209 s32i.n a0, a2, 60
-40000c7f: 03b130 rsr.epc1 a3
-40000c82: 03e840 rsr.exccause a4
-40000c85: 3239 s32i.n a3, a2, 12
-40000c87: 4249 s32i.n a4, a2, 16
-40000c89: 03ee30 rsr.excvaddr a3
-40000c8c: 056232 s32i a3, a2, 20
-40000c8f: 03d140 rsr.excsave1 a4
-40000c92: 6249 s32i.n a4, a2, 24
-40000c94: 38a002 movi a0, 56
-40000c97: 126252 s32i a5, a2, 72
-40000c9a: 136262 s32i a6, a2, 76
-40000c9d: 146272 s32i a7, a2, 80
-40000ca0: 156282 s32i a8, a2, 84
-40000ca3: 166292 s32i a9, a2, 88
-40000ca6: 1762a2 s32i a10, a2, 92
-40000ca9: 1862b2 s32i a11, a2, 96
-40000cac: 1962c2 s32i a12, a2, 100
-40000caf: 1a62d2 s32i a13, a2, 104
-40000cb2: 1b62e2 s32i a14, a2, 108
-40000cb5: 1c62f2 s32i a15, a2, 112
-40000cb8: f8c082 addi a8, a0, -8
-40000cbb: 20c2a2 addi a10, a2, 32
-40000cbe: 408020 rotw 2
-40000cc1: fdb056 bnez a0, 40000ca0 <_Level5FromVector+0x38>
-40000cc4: 408020 rotw 2
-40000cc7: 034930 rsr.windowstart a3
-40000cca: 034840 rsr.windowbase a4
-40000ccd: 1239 s32i.n a3, a2, 4
-40000ccf: 2249 s32i.n a4, a2, 8
-40000cd1: 130c movi.n a3, 1
-40000cd3: 040c movi.n a4, 0
-40000cd5: 134930 wsr.windowstart a3
-40000cd8: 134840 wsr.windowbase a4
-40000cdb: 002010 rsync
-40000cde: fe3a11 l32r a1, 400005c8 <_stext+0x68>
-40000ce1: 000c movi.n a0, 0
-40000ce3: fe3b21 l32r a2, 400005d0 <_stext+0x70>
-40000ce6: 13e620 wsr.ps a2
-40000ce9: 002010 rsync
-40000cec: 0303e0 rsr.sar a14
-40000cef: 01e9 s32i.n a14, a1, 0
-40000cf1: 0302e0 rsr.lcount a14
-40000cf4: a1e9 s32i.n a14, a1, 40
-40000cf6: 0300e0 rsr.lbeg a14
-40000cf9: b1e9 s32i.n a14, a1, 44
-40000cfb: 0301e0 rsr.lend a14
-40000cfe: c1e9 s32i.n a14, a1, 48
-40000d00: 0310e0 rsr.acclo a14
-40000d03: 81e9 s32i.n a14, a1, 32
-40000d05: 0311e0 rsr.acchi a14
-40000d08: 91e9 s32i.n a14, a1, 36
-40000d0a: 03e2f0 rsr.interrupt a15
-40000d0d: 03e4c0 rsr.intenable a12
-40000d10: fe31d1 l32r a13, 400005d4 <_stext+0x74>
-40000d13: 10ffc0 and a15, a15, a12
-40000d16: 10ffd0 and a15, a15, a13
-40000d19: 02af16 beqz a15, 40000d47 <_Level5FromVector+0xdf>
-40000d1c: 60e0f0 neg a14, a15
-40000d1f: 10eef0 and a14, a14, a15
-40000d22: 13e3e0 wsr.intclear a14
-40000d25: fe1ec1 l32r a12, 400005a0 <_stext+0x40>
-40000d28: 40fee0 nsau a14, a14
-40000d2b: b0cec0 addx8 a12, a14, a12
-40000d2e: 0cd8 l32i.n a13, a12, 0
-40000d30: 1c68 l32i.n a6, a12, 4
-40000d32: 000dd0 callx4 a13
-40000d35: 03e2f0 rsr.interrupt a15
-40000d38: 03e4c0 rsr.intenable a12
-40000d3b: fe26d1 l32r a13, 400005d4 <_stext+0x74>
-40000d3e: 10ffc0 and a15, a15, a12
-40000d41: 10ffd0 and a15, a15, a13
-40000d44: fd4f56 bnez a15, 40000d1c <_Level5FromVector+0xb4>
-40000d47: a1d8 l32i.n a13, a1, 40
-40000d49: b1e8 l32i.n a14, a1, 44
-40000d4b: c1f8 l32i.n a15, a1, 48
-40000d4d: 1302d0 wsr.lcount a13
-40000d50: 1300e0 wsr.lbeg a14
-40000d53: 1301f0 wsr.lend a15
-40000d56: 81d8 l32i.n a13, a1, 32
-40000d58: 91e8 l32i.n a14, a1, 36
-40000d5a: 1310d0 wsr.acclo a13
-40000d5d: 1311e0 wsr.acchi a14
-40000d60: 01f8 l32i.n a15, a1, 0
-40000d62: 1303f0 wsr.sar a15
-40000d65: 523c movi.n a2, 53
-40000d67: 13e620 wsr.ps a2
-40000d6a: 002010 rsync
-40000d6d: 1128 l32i.n a2, a1, 4
-40000d6f: 022132 l32i a3, a1, 8
-40000d72: 134920 wsr.windowstart a2
-40000d75: 134830 wsr.windowbase a3
-40000d78: 002010 rsync
-40000d7b: fe1311 l32r a1, 400005c8 <_stext+0x68>
-40000d7e: 38a062 movi a6, 56
-40000d81: e0c172 addi a7, a1, -32
-40000d84: f8c6e2 addi a14, a6, -8
-40000d87: 20c7f2 addi a15, a7, 32
-40000d8a: 112f42 l32i a4, a15, 68
-40000d8d: 122f52 l32i a5, a15, 72
-40000d90: 132f62 l32i a6, a15, 76
-40000d93: 142f72 l32i a7, a15, 80
-40000d96: 152f82 l32i a8, a15, 84
-40000d99: 162f92 l32i a9, a15, 88
-40000d9c: 172fa2 l32i a10, a15, 92
-40000d9f: 182fb2 l32i a11, a15, 96
-40000da2: 408020 rotw 2
-40000da5: fdb656 bnez a6, 40000d84 <_Level5FromVector+0x11c>
-40000da8: 192742 l32i a4, a7, 100
-40000dab: 1a2752 l32i a5, a7, 104
-40000dae: 1b2762 l32i a6, a7, 108
-40000db1: 1c2772 l32i a7, a7, 112
-40000db4: 408020 rotw 2
-40000db7: 3128 l32i.n a2, a1, 12
-40000db9: 4138 l32i.n a3, a1, 16
-40000dbb: 13b120 wsr.epc1 a2
-40000dbe: 13e830 wsr.exccause a3
-40000dc1: 5128 l32i.n a2, a1, 20
-40000dc3: 13ee20 wsr.excvaddr a2
-40000dc6: 6138 l32i.n a3, a1, 24
-40000dc8: 13d130 wsr.excsave1 a3
-40000dcb: d108 l32i.n a0, a1, 52
-40000dcd: f128 l32i.n a2, a1, 60
-40000dcf: 102132 l32i a3, a1, 64
-40000dd2: e118 l32i.n a1, a1, 56
-40000dd4: 003510 rfi 5
- ...
-
-40000dd8 <_xtos_cause3_handler>:
-40000dd8: 320c movi.n a2, 3
-40000dda: 000286 j 40000de8 <_xtos_c_wrapper_handler>
-40000ddd: 000000 ill
-40000de0: fdc332 addi a3, a3, -3
-40000de3: 332a add.n a3, a3, a2
-40000de5: 000446 j 40000dfa <_xtos_c_wrapper_handler+0x12>
-
-40000de8 <_xtos_c_wrapper_handler>:
-40000de8: 7159 s32i.n a5, a1, 28
-40000dea: 8129 s32i.n a2, a1, 32
-40000dec: 03e620 rsr.ps a2
-40000def: fde631 l32r a3, 40000588 <_stext+0x28>
-40000df2: 1129 s32i.n a2, a1, 4
-40000df4: 342020 extui a2, a2, 0, 4
-40000df7: e542f6 bgeui a2, 4, 40000de0 <_xtos_cause3_handler+0x8>
-40000dfa: 03b120 rsr.epc1 a2
-40000dfd: 13e630 wsr.ps a3
-40000e00: 0129 s32i.n a2, a1, 0
-40000e02: 3b2122 l32i a2, a1, 236
-40000e05: 01d112 addmi a1, a1, 0x100
-40000e08: 002010 rsync
-40000e0b: fde241 l32r a4, 40000594 <_stext+0x34>
-40000e0e: 203430 or a3, a4, a3
-40000e11: 904430 addx2 a4, a4, a3
-
-40000e14 <_GeneralException>:
-40000e14: 020136 entry a1, 0x100
-40000e17: 0303c0 rsr.sar a12
-40000e1a: 11d8 l32i.n a13, a1, 4
-40000e1c: 03e6e0 rsr.ps a14
-40000e1f: 34d0d0 extui a13, a13, 0, 4
-40000e22: 34f0e0 extui a15, a14, 0, 4
-40000e25: 30eef0 xor a14, a14, a15
-40000e28: 30eed0 xor a14, a14, a13
-40000e2b: 13e6e0 wsr.ps a14
-40000e2e: fdd4d1 l32r a13, 40000580 <_stext+0x20>
-40000e31: 81f8 l32i.n a15, a1, 32
-40000e33: 21c9 s32i.n a12, a1, 8
-40000e35: 0302c0 rsr.lcount a12
-40000e38: 0300e0 rsr.lbeg a14
-40000e3b: 91c9 s32i.n a12, a1, 36
-40000e3d: 0301c0 rsr.lend a12
-40000e40: a1e9 s32i.n a14, a1, 40
-40000e42: b1c9 s32i.n a12, a1, 44
-40000e44: 0310c0 rsr.acclo a12
-40000e47: 0311e0 rsr.acchi a14
-40000e4a: c1c9 s32i.n a12, a1, 48
-40000e4c: d1e9 s32i.n a14, a1, 52
-40000e4e: a0cfd0 addx4 a12, a15, a13
-40000e51: 0cc8 l32i.n a12, a12, 0
-40000e53: 01ed mov.n a14, a1
-40000e55: 1c8c beqz.n a12, 40000e5a <_GeneralException+0x46>
-40000e57: 000cf0 callx12 a12
-40000e5a: 91d8 l32i.n a13, a1, 36
-40000e5c: a1e8 l32i.n a14, a1, 40
-40000e5e: b1f8 l32i.n a15, a1, 44
-40000e60: 1302d0 wsr.lcount a13
-40000e63: 1300e0 wsr.lbeg a14
-40000e66: 1301f0 wsr.lend a15
-40000e69: c1d8 l32i.n a13, a1, 48
-40000e6b: d1e8 l32i.n a14, a1, 52
-40000e6d: 1310d0 wsr.acclo a13
-40000e70: 1311e0 wsr.acchi a14
-40000e73: 21e8 l32i.n a14, a1, 8
-40000e75: 0063c0 rsil a12, 3
-40000e78: 1303e0 wsr.sar a14
-40000e7b: fdca01 l32r a0, 400005a4 <_stext+0x44>
-40000e7e: fdc5d1 l32r a13, 40000594 <_stext+0x34>
-40000e81: 2000d0 or a0, a0, a13
-40000e84: 900d00 addx2 a0, a13, a0
-40000e87: f01d retw.n
-40000e89: 000000 ill
-
-40000e8c :
-40000e8c: 004136 entry a1, 32
-40000e8f: 20a220 or a10, a2, a2
-40000e92: 01a6b2 movi a11, 0x601
-40000e95: 20c330 or a12, a3, a3
-40000e98: 008f25 call8 4000178c
-40000e9b: 202aa0 or a2, a10, a10
-40000e9e: f01d retw.n
-
-40000ea0 <_isatty_r>:
-40000ea0: 00c136 entry a1, 96
-40000ea3: 02ad mov.n a10, a2
-40000ea5: 03bd mov.n a11, a3
-40000ea7: 01cd mov.n a12, a1
-40000ea9: 0ae225 call8 4000bccc <_fstat_r>
-40000eac: 014a96 bltz a10, 40000ec4 <_isatty_r+0x24>
-40000eaf: fdca21 l32r a2, 400005d8 <_stext+0x78>
-40000eb2: 1198 l32i.n a9, a1, 4
-40000eb4: 180c movi.n a8, 1
-40000eb6: 109920 and a9, a9, a2
-40000eb9: e0d992 addmi a9, a9, 0xffffe000
-40000ebc: 020c movi.n a2, 0
-40000ebe: 832890 moveqz a2, a8, a9
-40000ec1: f01d retw.n
-40000ec3: 020c00 andb b0, b12, b0
-40000ec6: f01d retw.n
-
-40000ec8 :
-40000ec8: 006136 entry a1, 48
-40000ecb: 028d mov.n a8, a2
-40000ecd: 1898 l32i.n a9, a8, 4
-40000ecf: 68c8 l32i.n a12, a8, 24
-40000ed1: 48d8 l32i.n a13, a8, 16
-40000ed3: 0199 s32i.n a9, a1, 0
-40000ed5: 0898 l32i.n a9, a8, 0
-40000ed7: 6ca7a2 movi a10, 0x76c
-40000eda: 1199 s32i.n a9, a1, 4
-40000edc: 5898 l32i.n a9, a8, 20
-40000ede: 90ccc0 addx2 a12, a12, a12
-40000ee1: 9a9a add.n a9, a10, a9
-40000ee3: 2199 s32i.n a9, a1, 8
-40000ee5: fdbe91 l32r a9, 400005e0 <_stext+0x80>
-40000ee8: 90ddd0 addx2 a13, a13, a13
-40000eeb: c9ca add.n a12, a9, a12
-40000eed: fdbd91 l32r a9, 400005e4 <_stext+0x84>
-40000ef0: fdbbb1 l32r a11, 400005dc <_stext+0x7c>
-40000ef3: 38e8 l32i.n a14, a8, 12
-40000ef5: 28f8 l32i.n a15, a8, 8
-40000ef7: 03ad mov.n a10, a3
-40000ef9: d9da add.n a13, a9, a13
-40000efb: 032d mov.n a2, a3
-40000efd: 55d0a5 call8 40056c08
-40000f00: f01d retw.n
- ...
-
-40000f04 :
-40000f04: 004136 entry a1, 32
-40000f07: fdb881 l32r a8, 400005e8 <_stext+0x88>
-40000f0a: 0888 l32i.n a8, a8, 0
-40000f0c: 282a add.n a2, a8, a2
-40000f0e: 010222 l8ui a2, a2, 1
-40000f11: 242020 extui a2, a2, 0, 3
-40000f14: f01d retw.n
- ...
-
-40000f18 :
-40000f18: 004136 entry a1, 32
-40000f1b: fdb381 l32r a8, 400005e8 <_stext+0x88>
-40000f1e: 0888 l32i.n a8, a8, 0
-40000f20: 282a add.n a2, a8, a2
-40000f22: 010222 l8ui a2, a2, 1
-40000f25: 142020 extui a2, a2, 0, 2
-40000f28: f01d retw.n
- ...
-
-40000f2c :
-40000f2c: 004136 entry a1, 32
-40000f2f: fdae81 l32r a8, 400005e8 <_stext+0x88>
-40000f32: 0888 l32i.n a8, a8, 0
-40000f34: 882a add.n a8, a8, a2
-40000f36: 010892 l8ui a9, a8, 1
-40000f39: 180c movi.n a8, 1
-40000f3b: 239900 sext a9, a9, 7
-40000f3e: 00a996 bltz a9, 40000f4c
-40000f41: f7c292 addi a9, a2, -9
-40000f44: 020c movi.n a2, 0
-40000f46: 832890 moveqz a2, a8, a9
-40000f49: f01d retw.n
-40000f4b: 082d00 lsx f2, a13, a0
-40000f4e: f01d retw.n
-
-40000f50 :
-40000f50: 004136 entry a1, 32
-40000f53: fda581 l32r a8, 400005e8 <_stext+0x88>
-40000f56: 0888 l32i.n a8, a8, 0
-40000f58: 282a add.n a2, a8, a2
-40000f5a: 010222 l8ui a2, a2, 1
-40000f5d: 082c movi.n a8, 32
-40000f5f: 102280 and a2, a2, a8
-40000f62: f01d retw.n
-
-40000f64 :
-40000f64: 004136 entry a1, 32
-40000f67: fda081 l32r a8, 400005e8 <_stext+0x88>
-40000f6a: 0888 l32i.n a8, a8, 0
-40000f6c: 282a add.n a2, a8, a2
-40000f6e: 010222 l8ui a2, a2, 1
-40000f71: 480c movi.n a8, 4
-40000f73: 102280 and a2, a2, a8
-40000f76: f01d retw.n
-
-40000f78 :
-40000f78: 004136 entry a1, 32
-40000f7b: fd9b81 l32r a8, 400005e8 <_stext+0x88>
-40000f7e: 0888 l32i.n a8, a8, 0
-40000f80: 282a add.n a2, a8, a2
-40000f82: 010292 l8ui a9, a2, 1
-40000f85: 180c movi.n a8, 1
-40000f87: 149090 extui a9, a9, 0, 2
-40000f8a: fec992 addi a9, a9, -2
-40000f8d: 020c movi.n a2, 0
-40000f8f: 832890 moveqz a2, a8, a9
-40000f92: f01d retw.n
-
-40000f94 :
-40000f94: 004136 entry a1, 32
-40000f97: fd9481 l32r a8, 400005e8 <_stext+0x88>
-40000f9a: 0888 l32i.n a8, a8, 0
-40000f9c: 282a add.n a2, a8, a2
-40000f9e: 010282 l8ui a8, a2, 1
-40000fa1: 721c movi.n a2, 23
-40000fa3: 102280 and a2, a2, a8
-40000fa6: f01d retw.n
-
-40000fa8 :
-40000fa8: 004136 entry a1, 32
-40000fab: fd8f81 l32r a8, 400005e8 <_stext+0x88>
-40000fae: 0888 l32i.n a8, a8, 0
-40000fb0: 282a add.n a2, a8, a2
-40000fb2: 010282 l8ui a8, a2, 1
-40000fb5: 97a022 movi a2, 151
-40000fb8: 102280 and a2, a2, a8
-40000fbb: f01d retw.n
-40000fbd: 000000 ill
-
-40000fc0 :
-40000fc0: 004136 entry a1, 32
-40000fc3: fd8981 l32r a8, 400005e8 <_stext+0x88>
-40000fc6: 0888 l32i.n a8, a8, 0
-40000fc8: 282a add.n a2, a8, a2
-40000fca: 010222 l8ui a2, a2, 1
-40000fcd: 081c movi.n a8, 16
-40000fcf: 102280 and a2, a2, a8
-40000fd2: f01d retw.n
-
-40000fd4 :
-40000fd4: 004136 entry a1, 32
-40000fd7: fd8481 l32r a8, 400005e8 <_stext+0x88>
-40000fda: 0888 l32i.n a8, a8, 0
-40000fdc: 282a add.n a2, a8, a2
-40000fde: 010222 l8ui a2, a2, 1
-40000fe1: 880c movi.n a8, 8
-40000fe3: 102280 and a2, a2, a8
-40000fe6: f01d retw.n
-
-40000fe8 :
-40000fe8: 004136 entry a1, 32
-40000feb: fd7f81 l32r a8, 400005e8 <_stext+0x88>
-40000fee: 0888 l32i.n a8, a8, 0
-40000ff0: 282a add.n a2, a8, a2
-40000ff2: 010292 l8ui a9, a2, 1
-40000ff5: 180c movi.n a8, 1
-40000ff7: 149090 extui a9, a9, 0, 2
-40000ffa: 990b addi.n a9, a9, -1
-40000ffc: 020c movi.n a2, 0
-40000ffe: 832890 moveqz a2, a8, a9
-40001001: f01d retw.n
- ...
-
-40001004 :
-40001004: 004136 entry a1, 32
-40001007: 0ae865 call8 4000be8c <__getreent>
-4000100a: 0e2a82 l32i a8, a10, 56
-4000100d: 203aa0 or a3, a10, a10
-40001010: 88fc bnez.n a8, 4000104c
-40001012: 18a0a2 movi a10, 24
-40001015: 0ae8a5 call8 4000bea0
-40001018: fd7541 l32r a4, 400005ec <_stext+0x8c>
-4000101b: e3a9 s32i.n a10, a3, 56
-4000101d: 005a42 s16i a4, a10, 0
-40001020: fd7441 l32r a4, 400005f0 <_stext+0x90>
-40001023: 580c movi.n a8, 5
-40001025: 015a42 s16i a4, a10, 2
-40001028: fd7341 l32r a4, 400005f4 <_stext+0x94>
-4000102b: 055a82 s16i a8, a10, 10
-4000102e: 025a42 s16i a4, a10, 4
-40001031: fd7141 l32r a4, 400005f8 <_stext+0x98>
-40001034: b80c movi.n a8, 11
-40001036: 035a42 s16i a4, a10, 6
-40001039: 065a82 s16i a8, a10, 12
-4000103c: fd7041 l32r a4, 400005fc <_stext+0x9c>
-4000103f: fd7081 l32r a8, 40000600 <_stext+0xa0>
-40001042: fd7091 l32r a9, 40000604 <_stext+0xa4>
-40001045: 045a42 s16i a4, a10, 8
-40001048: 4a89 s32i.n a8, a10, 16
-4000104a: 5a99 s32i.n a9, a10, 20
-4000104c: e338 l32i.n a3, a3, 56
-4000104e: 4329 s32i.n a2, a3, 16
-40001050: 020c movi.n a2, 0
-40001052: 5329 s32i.n a2, a3, 20
-40001054: f01d retw.n
- ...
-
-40001058 :
-40001058: 004136 entry a1, 32
-4000105b: 0ae325 call8 4000be8c <__getreent>
-4000105e: 0e2a82 l32i a8, a10, 56
-40001061: 202aa0 or a2, a10, a10
-40001064: 88fc bnez.n a8, 400010a0
-40001066: 18a0a2 movi a10, 24
-40001069: 0ae365 call8 4000bea0
-4000106c: fd6031 l32r a3, 400005ec <_stext+0x8c>
-4000106f: e2a9 s32i.n a10, a2, 56
-40001071: 005a32 s16i a3, a10, 0
-40001074: fd5f31 l32r a3, 400005f0 <_stext+0x90>
-40001077: 580c movi.n a8, 5
-40001079: 015a32 s16i a3, a10, 2
-4000107c: fd5e31 l32r a3, 400005f4 <_stext+0x94>
-4000107f: 055a82 s16i a8, a10, 10
-40001082: 025a32 s16i a3, a10, 4
-40001085: fd5c31 l32r a3, 400005f8 <_stext+0x98>
-40001088: b80c movi.n a8, 11
-4000108a: 035a32 s16i a3, a10, 6
-4000108d: 065a82 s16i a8, a10, 12
-40001090: fd5b31 l32r a3, 400005fc <_stext+0x9c>
-40001093: fd5b81 l32r a8, 40000600 <_stext+0xa0>
-40001096: fd5b91 l32r a9, 40000604 <_stext+0xa4>
-40001099: 045a32 s16i a3, a10, 8
-4000109c: 4a89 s32i.n a8, a10, 16
-4000109e: 5a99 s32i.n a9, a10, 20
-400010a0: e288 l32i.n a8, a2, 56
-400010a2: fd5aa1 l32r a10, 4000060c <_stext+0xac>
-400010a5: 4898 l32i.n a9, a8, 16
-400010a7: fd5821 l32r a2, 40000608 <_stext+0xa8>
-400010aa: 58b8 l32i.n a11, a8, 20
-400010ac: 82a9a0 mull a10, a9, a10
-400010af: 82bb20 mull a11, a11, a2
-400010b2: abaa add.n a10, a11, a10
-400010b4: 82b920 mull a11, a9, a2
-400010b7: a22920 muluh a2, a9, a2
-400010ba: 9b1b addi.n a9, a11, 1
-400010bc: 2a2a add.n a2, a10, a2
-400010be: 1a0c movi.n a10, 1
-400010c0: 0139b7 bltu a9, a11, 400010c5
-400010c3: 0a0c movi.n a10, 0
-400010c5: 2a2a add.n a2, a10, a2
-400010c7: 5829 s32i.n a2, a8, 20
-400010c9: 4899 s32i.n a9, a8, 16
-400010cb: fd5181 l32r a8, 40000610 <_stext+0xb0>
-400010ce: 102280 and a2, a2, a8
-400010d1: f01d retw.n
- ...
-
-400010d4 :
-400010d4: 004136 entry a1, 32
-400010d7: 0288 l32i.n a8, a2, 0
-400010d9: fd4e91 l32r a9, 40000614 <_stext+0xb4>
-400010dc: 838980 moveqz a8, a9, a8
-400010df: fd4e91 l32r a9, 40000618 <_stext+0xb8>
-400010e2: 31af80 srai a10, a8, 31
-400010e5: b29890 mulsh a9, a8, a9
-400010e8: 989a add.n a9, a8, a9
-400010ea: 319090 srai a9, a9, 16
-400010ed: c099a0 sub a9, a9, a10
-400010f0: fd4ba1 l32r a10, 4000061c <_stext+0xbc>
-400010f3: 82a9a0 mull a10, a9, a10
-400010f6: 88aa add.n a8, a8, a10
-400010f8: fd4aa1 l32r a10, 40000620 <_stext+0xc0>
-400010fb: 8288a0 mull a8, a8, a10
-400010fe: fd49a1 l32r a10, 40000624 <_stext+0xc4>
-40001101: 8299a0 mull a9, a9, a10
-40001104: 889a add.n a8, a8, a9
-40001106: fd4291 l32r a9, 40000610 <_stext+0xb0>
-40001109: a89a add.n a10, a8, a9
-4000110b: a38a80 movltz a8, a10, a8
-4000110e: 0289 s32i.n a8, a2, 0
-40001110: 102890 and a2, a8, a9
-40001113: f01d retw.n
-40001115: 000000 ill
-
-40001118 <__sread>:
-40001118: 004136 entry a1, 32
-4000111b: 0793b2 l16si a11, a3, 14
-4000111e: 02ad mov.n a10, a2
-40001120: 04cd mov.n a12, a4
-40001122: 20d550 or a13, a5, a5
-40001125: 0ac825 call8 4000bda8 <_read_r>
-40001128: 00ca96 bltz a10, 40001138 <__sread+0x20>
-4000112b: 152382 l32i a8, a3, 84
-4000112e: 88aa add.n a8, a8, a10
-40001130: 156382 s32i a8, a3, 84
-40001133: 000346 j 40001144 <__sread+0x2c>
-40001136: 920000 lsi f0, a0, 0x248
-40001139: 810613 lsi f1, a6, 0x204
-4000113c: fd3b addi.n a15, a13, 3
-4000113e: 108980 and a8, a9, a8
-40001141: 065382 s16i a8, a3, 12
-40001144: 0a2d mov.n a2, a10
-40001146: f01d retw.n
-
-40001148 <__seofread>:
-40001148: 004136 entry a1, 32
-4000114b: 020c movi.n a2, 0
-4000114d: f01d retw.n
- ...
-
-40001150 <__swrite>:
-40001150: 004136 entry a1, 32
-40001153: 061382 l16ui a8, a3, 12
-40001156: 0b6887 bbci a8, 8, 40001165 <__swrite+0x15>
-40001159: 0793b2 l16si a11, a3, 14
-4000115c: 02ad mov.n a10, a2
-4000115e: 0c0c movi.n a12, 0
-40001160: 2d0c movi.n a13, 2
-40001162: 0ac2a5 call8 4000bd8c <_lseek_r>
-40001165: 061392 l16ui a9, a3, 12
-40001168: fd3081 l32r a8, 40000628 <_stext+0xc8>
-4000116b: 0793b2 l16si a11, a3, 14
-4000116e: 108980 and a8, a9, a8
-40001171: 065382 s16i a8, a3, 12
-40001174: 20a220 or a10, a2, a2
-40001177: 20c440 or a12, a4, a4
-4000117a: 20d550 or a13, a5, a5
-4000117d: 0abf25 call8 4000bd70 <_write_r>
-40001180: 0a2d mov.n a2, a10
-40001182: f01d retw.n
-
-40001184 <__sseek>:
-40001184: 004136 entry a1, 32
-40001187: 0793b2 l16si a11, a3, 14
-4000118a: 02ad mov.n a10, a2
-4000118c: 04cd mov.n a12, a4
-4000118e: 20d550 or a13, a5, a5
-40001191: 0abfa5 call8 4000bd8c <_lseek_r>
-40001194: 061382 l16ui a8, a3, 12
-40001197: 0d0a66 bnei a10, -1, 400011a8 <__sseek+0x24>
-4000119a: fd2391 l32r a9, 40000628 <_stext+0xc8>
-4000119d: 108980 and a8, a9, a8
-400011a0: 065382 s16i a8, a3, 12
-400011a3: 000346 j 400011b4 <__sseek+0x30>
-400011a6: 910000 srl a0, a0
-400011a9: a2fd21 l32r a2, 3ffe9da0 <__stack_app+0x1f70>
-400011ac: 801563 lsi f6, a5, 0x200
-400011af: 2089 s32i.n a8, a0, 8
-400011b1: 065382 s16i a8, a3, 12
-400011b4: 0a2d mov.n a2, a10
-400011b6: f01d retw.n
-
-400011b8 <__sclose>:
-400011b8: 004136 entry a1, 32
-400011bb: 0793b2 l16si a11, a3, 14
-400011be: 20a220 or a10, a2, a2
-400011c1: 0ab7a5 call8 4000bd3c <_close_r>
-400011c4: 202aa0 or a2, a10, a10
-400011c7: 000090 retw
- ...
-
-400011cc :
-400011cc: 004136 entry a1, 32
-400011cf: 02cd mov.n a12, a2
-400011d1: fd0521 l32r a2, 400005e8 <_stext+0x88>
-400011d4: 080c movi.n a8, 0
-400011d6: 02b8 l32i.n a11, a2, 0
-400011d8: 2c8a add.n a2, a12, a8
-400011da: 000292 l8ui a9, a2, 0
-400011dd: 2b9a add.n a2, a11, a9
-400011df: 010222 l8ui a2, a2, 1
-400011e2: 20c9a2 addi a10, a9, 32
-400011e5: 142020 extui a2, a2, 0, 2
-400011e8: 220b addi.n a2, a2, -1
-400011ea: 839a20 moveqz a9, a10, a2
-400011ed: 092d mov.n a2, a9
-400011ef: 938a add.n a9, a3, a8
-400011f1: 000992 l8ui a9, a9, 0
-400011f4: ab9a add.n a10, a11, a9
-400011f6: 010aa2 l8ui a10, a10, 1
-400011f9: 20c9d2 addi a13, a9, 32
-400011fc: 14a0a0 extui a10, a10, 0, 2
-400011ff: aa0b addi.n a10, a10, -1
-40001201: 839da0 moveqz a9, a13, a10
-40001204: c02290 sub a2, a2, a9
-40001207: 32cc bnez.n a2, 4000120e
-40001209: 881b addi.n a8, a8, 1
-4000120b: fc9956 bnez a9, 400011d8
-4000120e: f01d retw.n
-
-40001210 :
-40001210: 006136 entry a1, 48
-40001213: 000382 l8ui a8, a3, 0
-40001216: 024d mov.n a4, a2
-40001218: 055816 beqz a8, 40001271
-4000121b: fcf321 l32r a2, 400005e8 <_stext+0x88>
-4000121e: 331b addi.n a3, a3, 1
-40001220: 0228 l32i.n a2, a2, 0
-40001222: 03ad mov.n a10, a3
-40001224: 0129 s32i.n a2, a1, 0
-40001226: 228a add.n a2, a2, a8
-40001228: 010272 l8ui a7, a2, 1
-4000122b: 20c822 addi a2, a8, 32
-4000122e: 147070 extui a7, a7, 0, 2
-40001231: 770b addi.n a7, a7, -1
-40001233: 838270 moveqz a8, a2, a7
-40001236: 747080 extui a7, a8, 0, 8
-40001239: 002865 call8 400014c0
-4000123c: 0a5d mov.n a5, a10
-4000123e: 000046 j 40001243
-40001241: 064d mov.n a4, a6
-40001243: 000422 l8ui a2, a4, 0
-40001246: 641b addi.n a6, a4, 1
-40001248: 52ac beqz.n a2, 40001271
-4000124a: 0188 l32i.n a8, a1, 0
-4000124c: 982a add.n a9, a8, a2
-4000124e: 0109a2 l8ui a10, a9, 1
-40001251: 20c292 addi a9, a2, 32
-40001254: 14a0a0 extui a10, a10, 0, 2
-40001257: aa0b addi.n a10, a10, -1
-40001259: 8329a0 moveqz a2, a9, a10
-4000125c: 742020 extui a2, a2, 0, 8
-4000125f: de9277 bne a2, a7, 40001241
-40001262: 06ad mov.n a10, a6
-40001264: 03bd mov.n a11, a3
-40001266: 20c550 or a12, a5, a5
-40001269: 002e65 call8 40001550
-4000126c: fd1a56 bnez a10, 40001241
-4000126f: 042d mov.n a2, a4
-40001271: f01d retw.n
- ...
-
-40001274 :
-40001274: 002136 entry a1, 16
-40001277: 000282 l8ui a8, a2, 0
-4000127a: 000392 l8ui a9, a3, 0
-4000127d: 3a0c movi.n a10, 3
-4000127f: 529897 bne a8, a9, 400012d5
-40001282: 20b230 or a11, a2, a3
-40001285: 530ba7 bnone a11, a10, 400012dc
-40001288: 30b230 xor a11, a2, a3
-4000128b: 318ba7 bany a11, a10, 400012c0
-4000128e: 221b addi.n a2, a2, 1
-40001290: 0b2816 beqz a8, 40001346
-40001293: 331b addi.n a3, a3, 1
-40001295: 4302a7 bnone a2, a10, 400012dc
-40001298: 000282 l8ui a8, a2, 0
-4000129b: 000392 l8ui a9, a3, 0
-4000129e: 221b addi.n a2, a2, 1
-400012a0: 319897 bne a8, a9, 400012d5
-400012a3: 09f816 beqz a8, 40001346
-400012a6: 331b addi.n a3, a3, 1
-400012a8: 3002a7 bnone a2, a10, 400012dc
-400012ab: 000282 l8ui a8, a2, 0
-400012ae: 000392 l8ui a9, a3, 0
-400012b1: 221b addi.n a2, a2, 1
-400012b3: 1e9897 bne a8, a9, 400012d5
-400012b6: 08c816 beqz a8, 40001346
-400012b9: 331b addi.n a3, a3, 1
-400012bb: 000746 j 400012dc
-400012be: 0c0000 lsi f0, a0, 48
-400012c1: 7608 l32i.n a0, a6, 28
-400012c3: 0f88 l32i.n a8, a15, 0
-400012c5: 000282 l8ui a8, a2, 0
-400012c8: 000392 l8ui a9, a3, 0
-400012cb: 221b addi.n a2, a2, 1
-400012cd: 049897 bne a8, a9, 400012d5
-400012d0: 331b addi.n a3, a3, 1
-400012d2: fff816 beqz a8, 400012d5
-400012d5: c02890 sub a2, a8, a9
-400012d8: f01d retw.n
-400012da: 410000 srli a0, a0, 0
-400012dd: 71fcd5 call4 400732ac <__bss_start+0x32ac>
-400012e0: fcd8 l32i.n a13, a12, 60
-400012e2: 238076 loop a0, 40001309
-400012e5: 0288 l32i.n a8, a2, 0
-400012e7: 0398 l32i.n a9, a3, 0
-400012e9: 1158f0 slli a5, a8, 1
-400012ec: 5c9897 bne a8, a9, 4000134c
-400012ef: 209850 or a9, a8, a5
-400012f2: 1ac977 bnall a9, a7, 40001310
-400012f5: 1288 l32i.n a8, a2, 4
-400012f7: 1398 l32i.n a9, a3, 4
-400012f9: 1158f0 slli a5, a8, 1
-400012fc: 4c9897 bne a8, a9, 4000134c
-400012ff: 209850 or a9, a8, a5
-40001302: 06c977 bnall a9, a7, 4000130c
-40001305: 228b addi.n a2, a2, 8
-40001307: 338b addi.n a3, a3, 8
-40001309: fff546 j 400012e2
-4000130c: 224b addi.n a2, a2, 4
-4000130e: 334b addi.n a3, a3, 4
-40001310: 320847 bnone a8, a4, 40001346
-40001313: fcc851 l32r a5, 40000634 <_stext+0xd4>
-40001316: fcc861 l32r a6, 40000638 <_stext+0xd8>
-40001319: 290857 bnone a8, a5, 40001346
-4000131c: fcc871 l32r a7, 4000063c <_stext+0xdc>
-4000131f: 230867 bnone a8, a6, 40001346
-40001322: 200877 bnone a8, a7, 40001346
-40001325: 224b addi.n a2, a2, 4
-40001327: 334b addi.n a3, a3, 4
-40001329: 198076 loop a0, 40001346
-4000132c: 0288 l32i.n a8, a2, 0
-4000132e: 0398 l32i.n a9, a3, 0
-40001330: 224b addi.n a2, a2, 4
-40001332: 169897 bne a8, a9, 4000134c
-40001335: 0d0847 bnone a8, a4, 40001346
-40001338: 0a0857 bnone a8, a5, 40001346
-4000133b: 070867 bnone a8, a6, 40001346
-4000133e: 040877 bnone a8, a7, 40001346
-40001341: 334b addi.n a3, a3, 4
-40001343: fff886 j 40001329
-40001346: 020c movi.n a2, 0
-40001348: f01d retw.n
-4000134a: 900000 addx2 a0, a0, a0
-4000134d: 3028 l32i.n a2, a0, 12
-4000134f: 218247 bany a2, a4, 40001374
-40001352: fcb851 l32r a5, 40000634 <_stext+0xd4>
-40001355: ed0847 bnone a8, a4, 40001346
-40001358: 248257 bany a2, a5, 40001380
-4000135b: fcb761 l32r a6, 40000638 <_stext+0xd8>
-4000135e: e40857 bnone a8, a5, 40001346
-40001361: 278267 bany a2, a6, 4000138c
-40001364: de0867 bnone a8, a6, 40001346
-40001367: 75a880 extui a10, a8, 24, 8
-4000136a: 75b890 extui a11, a9, 24, 8
-4000136d: c02ab0 sub a2, a10, a11
-40001370: f01d retw.n
-40001372: 800000 add a0, a0, a0
-40001375: 9074a0 addx2 a7, a4, a10
-40001378: b074b0 addx8 a7, a4, a11
-4000137b: c02a add.n a12, a0, a2
-4000137d: f01d retw.n
-4000137f: a88000 lsi f0, a0, 0x2a0
-40001382: b89074 lsi f7, a0, 0x2e0
-40001385: 2ab074 lsi f7, a0, 168
-40001388: f01dc0 subx8 a1, a13, a12
-4000138b: a08000 addx4 a8, a0, a0
-4000138e: b09075 call12 3ffb1c94 <_data_end_btdm+0x1d84>
-40001391: 2ab075 call12 4002be98
-40001394: f01dc0 subx8 a1, a13, a12
- ...
-
-40001398 :
-40001398: 004136 entry a1, 32
-4000139b: 20a220 or a10, a2, a2
-4000139e: 20b330 or a11, a3, a3
-400013a1: ffed25 call8 40001274
-400013a4: 202aa0 or a2, a10, a10
-400013a7: f01d retw.n
-400013a9: 000000 ill
-
-400013ac :
-400013ac: 002136 entry a1, 16
-400013af: 20a220 or a10, a2, a2
-400013b2: ffa042 movi a4, 255
-400013b5: fc9f51 l32r a5, 40000634 <_stext+0xd4>
-400013b8: fca061 l32r a6, 40000638 <_stext+0xd8>
-400013bb: fca071 l32r a7, 4000063c <_stext+0xdc>
-400013be: 0be307 bbsi a3, 0, 400013cd
-400013c1: 17e317 bbsi a3, 1, 400013dc
-400013c4: 380c movi.n a8, 3
-400013c6: 2a0a87 bnone a10, a8, 400013f4
-400013c9: 0016c6 j 40001428
-400013cc: 038200 lsi f0, a2, 12
-400013cf: 331b00 clamps a1, a11, 7
-400013d2: 004a82 s8i a8, a10, 0
-400013d5: 889c beqz.n a8, 400013f1
-400013d7: aa1b addi.n a10, a10, 1
-400013d9: e76317 bbci a3, 1, 400013c4
-400013dc: 000382 l8ui a8, a3, 0
-400013df: 004a82 s8i a8, a10, 0
-400013e2: b88c beqz.n a8, 400013f1
-400013e4: 010382 l8ui a8, a3, 1
-400013e7: 332b addi.n a3, a3, 2
-400013e9: 014a82 s8i a8, a10, 1
-400013ec: aa2b addi.n a10, a10, 2
-400013ee: fd2856 bnez a8, 400013c4
-400013f1: f01d retw.n
-400013f3: 080c00 lsx f0, a12, a0
-400013f6: 138876 loop a8, 4000140d
-400013f9: 0388 l32i.n a8, a3, 0
-400013fb: 334b addi.n a3, a3, 4
-400013fd: 0f0847 bnone a8, a4, 40001410
-40001400: 110857 bnone a8, a5, 40001415
-40001403: 150867 bnone a8, a6, 4000141c
-40001406: 0a89 s32i.n a8, a10, 0
-40001408: 010877 bnone a8, a7, 4000140d
-4000140b: aa4b addi.n a10, a10, 4
-4000140d: f01d retw.n
-4000140f: 4a8200 madd.s f8, f2, f0
-40001412: f01d00 subx8 a1, a13, a0
-40001415: 005a82 s16i a8, a10, 0
-40001418: f01d retw.n
-4000141a: 820000 mull a0, a0, a0
-4000141d: 005a add.n a0, a0, a5
-4000141f: 080c movi.n a8, 0
-40001421: 024a82 s8i a8, a10, 2
-40001424: f01d retw.n
-40001426: 0c0000 lsi f0, a0, 48
-40001429: 7608 l32i.n a0, a6, 28
-4000142b: 0c88 l32i.n a8, a12, 0
-4000142d: 000382 l8ui a8, a3, 0
-40001430: 331b addi.n a3, a3, 1
-40001432: 004a82 s8i a8, a10, 0
-40001435: aa1b addi.n a10, a10, 1
-40001437: fff816 beqz a8, 4000143a
-4000143a: f01d retw.n
-
-4000143c :
-4000143c: 004136 entry a1, 32
-4000143f: 0aa4e5 call8 4000be8c <__getreent>
-40001442: 20b220 or a11, a2, a2
-40001445: 0000a5 call8 40001450 <_strdup_r>
-40001448: 202aa0 or a2, a10, a10
-4000144b: f01d retw.n
-4000144d: 000000 ill
-
-40001450 <_strdup_r>:
-40001450: 004136 entry a1, 32
-40001453: 20a330 or a10, a3, a3
-40001456: 0006a5 call8 400014c0
-40001459: 01ca42 addi a4, a10, 1
-4000145c: 04bd mov.n a11, a4
-4000145e: 02ad mov.n a10, a2
-40001460: 0a7525 call8 4000bbb4 <_malloc_r>
-40001463: 0a2d mov.n a2, a10
-40001465: 5a8c beqz.n a10, 4000146e <_strdup_r+0x1e>
-40001467: 03bd mov.n a11, a3
-40001469: 04cd mov.n a12, a4
-4000146b: 0ae5e5 call8 4000c2c8
-4000146e: f01d retw.n
-
-40001470 :
-40001470: 004136 entry a1, 32
-40001473: 03ad mov.n a10, a3
-40001475: b24a add.n a11, a2, a4
-40001477: 028d mov.n a8, a2
-40001479: 000046 j 4000147e
-4000147c: 881b addi.n a8, a8, 1
-4000147e: 0e98b7 bne a8, a11, 40001490
-40001481: c02820 sub a2, a8, a2
-40001484: c04420 sub a4, a4, a2
-40001487: 0a9d mov.n a9, a10
-40001489: 34ec bnez.n a4, 400014b0
-4000148b: 0002c6 j 4000149a
-4000148e: 920000 lsi f0, a0, 0x248
-40001491: 0008 l32i.n a0, a0, 0
-40001493: fe5956 bnez a9, 4000147c
-40001496: fff9c6 j 40001481
-40001499: 026500 andb b6, b5, b0
-4000149c: 2a2a00 mul.s f2, f10, f0
-4000149f: f01d retw.n
-400014a1: 000000 ill
-400014a4: 061426 beqi a4, 1, 400014ae
-400014a7: 0048b2 s8i a11, a8, 0
-400014aa: 440b addi.n a4, a4, -1
-400014ac: 881b addi.n a8, a8, 1
-400014ae: 991b addi.n a9, a9, 1
-400014b0: 0009b2 l8ui a11, a9, 0
-400014b3: fedb56 bnez a11, 400014a4
-400014b6: c099a0 sub a9, a9, a10
-400014b9: 0048b2 s8i a11, a8, 0
-400014bc: 292a add.n a2, a9, a2
-400014be: f01d retw.n
-
-400014c0 :
-400014c0: 002136 entry a1, 16
-400014c3: fcc232 addi a3, a2, -4
-400014c6: ffa042 movi a4, 255
-400014c9: fc5a51 l32r a5, 40000634 <_stext+0xd4>
-400014cc: fc5b61 l32r a6, 40000638 <_stext+0xd8>
-400014cf: fc5b71 l32r a7, 4000063c <_stext+0xdc>
-400014d2: 06e207 bbsi a2, 0, 400014dc
-400014d5: 0de217 bbsi a2, 1, 400014e6
-400014d8: 000706 j 400014f8
-400014db: 038200 lsi f0, a2, 12
-400014de: 331b04 lsi f0, a11, 204
-400014e1: 88ac beqz.n a8, 4000150d
-400014e3: 116317 bbci a3, 1, 400014f8
-400014e6: 332b addi.n a3, a3, 2
-400014e8: 0388 l32i.n a8, a3, 0
-400014ea: 2e0867 bnone a8, a6, 4000151c
-400014ed: 078877 bany a8, a7, 400014f8
-400014f0: 333b addi.n a3, a3, 3
-400014f2: c02320 sub a2, a3, a2
-400014f5: f01d retw.n
-400014f7: 080c00 lsx f0, a12, a0
-400014fa: 0f8876 loop a8, 4000150d
-400014fd: 1388 l32i.n a8, a3, 4
-400014ff: 334b addi.n a3, a3, 4
-40001501: 0a0847 bnone a8, a4, 4000150f
-40001504: 0c0857 bnone a8, a5, 40001514
-40001507: 110867 bnone a8, a6, 4000151c
-4000150a: ff0877 bnone a8, a7, 4000150d
-4000150d: 333b addi.n a3, a3, 3
-4000150f: c02320 sub a2, a3, a2
-40001512: f01d retw.n
-40001514: 331b addi.n a3, a3, 1
-40001516: c02320 sub a2, a3, a2
-40001519: f01d retw.n
-4000151b: 332b00 clamps a2, a11, 7
-4000151e: c02320 sub a2, a3, a2
-40001521: f01d retw.n
- ...
-
-40001524 :
-40001524: 004136 entry a1, 32
-40001527: fc3081 l32r a8, 400005e8 <_stext+0x88>
-4000152a: 029d mov.n a9, a2
-4000152c: 08a8 l32i.n a10, a8, 0
-4000152e: 000506 j 40001546
-40001531: ba8a add.n a11, a10, a8
-40001533: 010bc2 l8ui a12, a11, 1
-40001536: 20c8b2 addi a11, a8, 32
-40001539: 14c0c0 extui a12, a12, 0, 2
-4000153c: cc0b addi.n a12, a12, -1
-4000153e: 838bc0 moveqz a8, a11, a12
-40001541: 004982 s8i a8, a9, 0
-40001544: 991b addi.n a9, a9, 1
-40001546: 000982 l8ui a8, a9, 0
-40001549: fe4856 bnez a8, 40001531
-4000154c: f01d retw.n
- ...
-
-40001550 :
-40001550: 004136 entry a1, 32
-40001553: 02cd mov.n a12, a2
-40001555: fc2421 l32r a2, 400005e8 <_stext+0x88>
-40001558: 080c movi.n a8, 0
-4000155a: 02a8 l32i.n a10, a2, 0
-4000155c: 000d46 j 40001595
-4000155f: 2c8a00 lsi f0, a10, 176
-40001562: 000292 l8ui a9, a2, 0
-40001565: 2a9a add.n a2, a10, a9
-40001567: 010222 l8ui a2, a2, 1
-4000156a: 20c9b2 addi a11, a9, 32
-4000156d: 142020 extui a2, a2, 0, 2
-40001570: 220b addi.n a2, a2, -1
-40001572: 839b20 moveqz a9, a11, a2
-40001575: 092d mov.n a2, a9
-40001577: 938a add.n a9, a3, a8
-40001579: 000992 l8ui a9, a9, 0
-4000157c: ba9a add.n a11, a10, a9
-4000157e: 010bb2 l8ui a11, a11, 1
-40001581: 20c9d2 addi a13, a9, 32
-40001584: 14b0b0 extui a11, a11, 0, 2
-40001587: bb0b addi.n a11, a11, -1
-40001589: 839db0 moveqz a9, a13, a11
-4000158c: c02290 sub a2, a2, a9
-4000158f: 72cc bnez.n a2, 4000159a
-40001591: 881b addi.n a8, a8, 1
-40001593: 398c beqz.n a9, 4000159a
-40001595: c79847 bne a8, a4, 40001560
-40001598: 020c movi.n a2, 0
-4000159a: f01d retw.n
-4000159c: 000382 l8ui a8, a3, 0
-4000159f: 331b addi.n a3, a3, 1
-400015a1: 004a82 s8i a8, a10, 0
-400015a4: 440b addi.n a4, a4, -1
-400015a6: 74ac beqz.n a4, 400015d1
-400015a8: aa1b addi.n a10, a10, 1
-400015aa: 048816 beqz a8, 400015f6
-400015ad: 3d6317 bbci a3, 1, 400015ee
-400015b0: 000382 l8ui a8, a3, 0
-400015b3: 440b addi.n a4, a4, -1
-400015b5: 004a82 s8i a8, a10, 0
-400015b8: 549c beqz.n a4, 400015d1
-400015ba: aa1b addi.n a10, a10, 1
-400015bc: 68bc beqz.n a8, 400015f6
-400015be: 010382 l8ui a8, a3, 1
-400015c1: 332b addi.n a3, a3, 2
-400015c3: 004a82 s8i a8, a10, 0
-400015c6: 440b addi.n a4, a4, -1
-400015c8: 548c beqz.n a4, 400015d1
-400015ca: aa1b addi.n a10, a10, 1
-400015cc: e8dc bnez.n a8, 400015ee
-400015ce: 000906 j 400015f6
-400015d1: f01d retw.n
- ...
-
-400015d4 :
-400015d4: 002136 entry a1, 16
-400015d7: 02ad mov.n a10, a2
-400015d9: ff4416 beqz a4, 400015d1
-400015dc: ffa0b2 movi a11, 255
-400015df: fc1551 l32r a5, 40000634 <_stext+0xd4>
-400015e2: fc1561 l32r a6, 40000638 <_stext+0xd8>
-400015e5: fc1571 l32r a7, 4000063c <_stext+0xdc>
-400015e8: b0e307 bbsi a3, 0, 4000159c
-400015eb: c1e317 bbsi a3, 1, 400015b0
-400015ee: 380c movi.n a8, 3
-400015f0: 540a87 bnone a10, a8, 40001648
-400015f3: 002746 j 40001694
-400015f6: 090c movi.n a9, 0
-400015f8: 28ea07 bbsi a10, 0, 40001624
-400015fb: 32ea17 bbsi a10, 1, 40001631
-400015fe: 1344a6 blti a4, 4, 40001615
-40001601: 218240 srai a8, a4, 2
-40001604: f03d nop.n
-40001606: 038876 loop a8, 4000160d
-40001609: 0a99 s32i.n a9, a10, 0
-4000160b: aa4b addi.n a10, a10, 4
-4000160d: 1188e0 slli a8, a8, 2
-40001610: c04480 sub a4, a4, a8
-40001613: 948c beqz.n a4, 40001620
-40001615: 004a92 s8i a9, a10, 0
-40001618: 440b addi.n a4, a4, -1
-4000161a: 01caa2 addi a10, a10, 1
-4000161d: ff4456 bnez a4, 40001615
-40001620: f01d retw.n
-40001622: 920000 lsi f0, a0, 0x248
-40001625: 004a add.n a0, a0, a4
-40001627: 440b addi.n a4, a4, -1
-40001629: ff3416 beqz a4, 40001620
-4000162c: aa1b addi.n a10, a10, 1
-4000162e: cc6a17 bbci a10, 1, 400015fe
-40001631: 004a92 s8i a9, a10, 0
-40001634: 440b addi.n a4, a4, -1
-40001636: fe6416 beqz a4, 40001620
-40001639: 014a92 s8i a9, a10, 1
-4000163c: 440b addi.n a4, a4, -1
-4000163e: fde416 beqz a4, 40001620
-40001641: aa2b addi.n a10, a10, 2
-40001643: ffedc6 j 400015fe
-40001646: 0c0000 lsi f0, a0, 48
-40001649: 7608 l32i.n a0, a6, 28
-4000164b: 1988 l32i.n a8, a9, 4
-4000164d: 4354a6 blti a4, 5, 40001694
-40001650: 0388 l32i.n a8, a3, 0
-40001652: 334b addi.n a3, a3, 4
-40001654: 1408b7 bnone a8, a11, 4000166c
-40001657: 1d0857 bnone a8, a5, 40001678
-4000165a: 260867 bnone a8, a6, 40001684
-4000165d: 0a89 s32i.n a8, a10, 0
-4000165f: fcc442 addi a4, a4, -4
-40001662: aa4b addi.n a10, a10, 4
-40001664: 8e0877 bnone a8, a7, 400015f6
-40001667: ffe2c6 j 400015f6
-4000166a: 820000 mull a0, a0, a0
-4000166d: 004a add.n a0, a0, a4
-4000166f: 440b addi.n a4, a4, -1
-40001671: aa1b addi.n a10, a10, 1
-40001673: ffdfc6 j 400015f6
-40001676: 820000 mull a0, a0, a0
-40001679: 005a add.n a0, a0, a5
-4000167b: fec442 addi a4, a4, -2
-4000167e: aa2b addi.n a10, a10, 2
-40001680: ffdc86 j 400015f6
-40001683: 5a8200 msub.s f8, f2, f0
-40001686: 080c00 lsx f0, a12, a0
-40001689: 024a82 s8i a8, a10, 2
-4000168c: fdc442 addi a4, a4, -3
-4000168f: aa3b addi.n a10, a10, 3
-40001691: ffd846 j 400015f6
-40001694: 080c movi.n a8, 0
-40001696: 108876 loop a8, 400016aa
-40001699: 000382 l8ui a8, a3, 0
-4000169c: 331b addi.n a3, a3, 1
-4000169e: 004a82 s8i a8, a10, 0
-400016a1: 440b addi.n a4, a4, -1
-400016a3: 648c beqz.n a4, 400016ad
-400016a5: aa1b addi.n a10, a10, 1
-400016a7: fff816 beqz a8, 400016aa
-400016aa: ffd206 j 400015f6
-400016ad: f01d retw.n
- ...
-
-400016b0 :
-400016b0: 004136 entry a1, 32
-400016b3: 0a7da5 call8 4000be8c <__getreent>
-400016b6: 20b220 or a11, a2, a2
-400016b9: 20c330 or a12, a3, a3
-400016bc: 000065 call8 400016c4 <_strndup_r>
-400016bf: 202aa0 or a2, a10, a10
-400016c2: f01d retw.n
-
-400016c4 <_strndup_r>:
-400016c4: 004136 entry a1, 32
-400016c7: 434a add.n a4, a3, a4
-400016c9: 03cd mov.n a12, a3
-400016cb: 000086 j 400016d1 <_strndup_r+0xd>
-400016ce: 01ccc2 addi a12, a12, 1
-400016d1: 139c47 bne a12, a4, 400016e8 <_strndup_r+0x24>
-400016d4: c04c30 sub a4, a12, a3
-400016d7: 20a220 or a10, a2, a2
-400016da: 01c4b2 addi a11, a4, 1
-400016dd: 0a4d65 call8 4000bbb4 <_malloc_r>
-400016e0: 0a2d mov.n a2, a10
-400016e2: cacc bnez.n a10, 400016f2 <_strndup_r+0x2e>
-400016e4: f01d retw.n
-400016e6: 820000 mull a0, a0, a0
-400016e9: 000c movi.n a0, 0
-400016eb: fdf856 bnez a8, 400016ce <_strndup_r+0xa>
-400016ee: fff886 j 400016d4 <_strndup_r+0x10>
-400016f1: b33000 movgez a3, a0, a0
-400016f4: c44020 extui a4, a2, 0, 13
-400016f7: bce520 lsi f2, a5, 0x2f0
-400016fa: 400a add.n a4, a0, a0
-400016fc: 0c8042 lsi f4, a0, 48
-400016ff: 443203 lsi f0, a2, 0x110
-40001702: f01d00 subx8 a1, a13, a0
-40001705: 000000 ill
-
-40001708 :
-40001708: 004136 entry a1, 32
-4000170b: 02ad mov.n a10, a2
-4000170d: 020c movi.n a2, 0
-4000170f: 53cc bnez.n a3, 40001718
-40001711: 0004c6 j 40001728
-40001714: a81b addi.n a10, a8, 1
-40001716: 082d mov.n a2, a8
-40001718: 20b330 or a11, a3, a3
-4000171b: 0ae225 call8 4000c53c
-4000171e: 208aa0 or a8, a10, a10
-40001721: fefa56 bnez a10, 40001714
-40001724: 000090 retw
-40001727: b33000 movgez a3, a0, a0
-4000172a: e12520 lsi f2, a5, 0x384
-4000172d: a00a add.n a10, a0, a0
-4000172f: 202a add.n a2, a0, a2
-40001731: 000090 retw
-
-40001734 :
-40001734: 004136 entry a1, 32
-40001737: 0022a2 l32i a10, a2, 0
-4000173a: 20c220 or a12, a2, a2
-4000173d: 20b330 or a11, a3, a3
-40001740: 0d0c movi.n a13, 0
-40001742: 0af665 call8 4000c6a8 <__strtok_r>
-40001745: 0a2d mov.n a2, a10
-40001747: f01d retw.n
-40001749: 000000 ill
-
-4000174c :
-4000174c: 004136 entry a1, 32
-4000174f: fba681 l32r a8, 400005e8 <_stext+0x88>
-40001752: 029d mov.n a9, a2
-40001754: 08a8 l32i.n a10, a8, 0
-40001756: 000546 j 4000176f
-40001759: ba8a add.n a11, a10, a8
-4000175b: 010bc2 l8ui a12, a11, 1
-4000175e: e0c8b2 addi a11, a8, -32
-40001761: 14c0c0 extui a12, a12, 0, 2
-40001764: feccc2 addi a12, a12, -2
-40001767: 838bc0 moveqz a8, a11, a12
-4000176a: 004982 s8i a8, a9, 0
-4000176d: 991b addi.n a9, a9, 1
-4000176f: 000982 l8ui a8, a9, 0
-40001772: fe3856 bnez a8, 40001759
-40001775: f01d retw.n
- ...
-
-40001778 :
-40001778: 004136 entry a1, 32
-4000177b: 0a7125 call8 4000be8c <__getreent>
-4000177e: 20b220 or a11, a2, a2
-40001781: 0a5ba5 call8 4000bd3c <_close_r>
-40001784: 202aa0 or a2, a10, a10
-40001787: f01d retw.n
-40001789: 000000 ill
-
-4000178c :
-4000178c: 00a136 entry a1, 80
-4000178f: 9179 s32i.n a7, a1, 36
-40001791: 10c172 addi a7, a1, 16
-40001794: 1179 s32i.n a7, a1, 4
-40001796: 30c172 addi a7, a1, 48
-40001799: 0179 s32i.n a7, a1, 0
-4000179b: 870c movi.n a7, 8
-4000179d: 6149 s32i.n a4, a1, 24
-4000179f: 7159 s32i.n a5, a1, 28
-400017a1: 8169 s32i.n a6, a1, 32
-400017a3: 2179 s32i.n a7, a1, 8
-400017a5: 0a6e65 call8 4000be8c <__getreent>
-400017a8: 2188 l32i.n a8, a1, 8
-400017aa: 891c movi.n a9, 24
-400017ac: d84b addi.n a13, a8, 4
-400017ae: 21d9 s32i.n a13, a1, 8
-400017b0: 0529d7 blt a9, a13, 400017b9
-400017b3: 1188 l32i.n a8, a1, 4
-400017b5: 000286 j 400017c3
-400017b8: 298700 lsi f0, a7, 164
-400017bb: 472c03 lsi f0, a12, 0x11c
-400017be: 2179 s32i.n a7, a1, 8
-400017c0: 002182 l32i a8, a1, 0
-400017c3: 022172 l32i a7, a1, 8
-400017c6: 20b220 or a11, a2, a2
-400017c9: 887a add.n a8, a8, a7
-400017cb: fcc882 addi a8, a8, -4
-400017ce: 08d8 l32i.n a13, a8, 0
-400017d0: 03cd mov.n a12, a3
-400017d2: 0a5825 call8 4000bd54 <_open_r>
-400017d5: 0a2d mov.n a2, a10
-400017d7: f01d retw.n
-400017d9: 000000 ill
-
-400017dc :
-400017dc: 004136 entry a1, 32
-400017df: 0a6ae5 call8 4000be8c <__getreent>
-400017e2: 20b220 or a11, a2, a2
-400017e5: 20c330 or a12, a3, a3
-400017e8: 04dd mov.n a13, a4
-400017ea: 0a5be5 call8 4000bda8 <_read_r>
-400017ed: 0a2d mov.n a2, a10
-400017ef: f01d retw.n
-400017f1: 000000 ill
-
-400017f4 :
-400017f4: 004136 entry a1, 32
-400017f7: 0a6965 call8 4000be8c <__getreent>
-400017fa: 20b220 or a11, a2, a2
-400017fd: 0a4e65 call8 4000bce4 <_sbrk_r>
-40001800: 202aa0 or a2, a10, a10
-40001803: f01d retw.n
-40001805: 000000 ill
-
-40001808 :
-40001808: 004136 entry a1, 32
-4000180b: 0a6825 call8 4000be8c <__getreent>
-4000180e: 20b220 or a11, a2, a2
-40001811: 0a42e5 call8 4000bc40 <_times_r>
-40001814: 202aa0 or a2, a10, a10
-40001817: f01d retw.n
-40001819: 000000 ill
-
-4000181c :
-4000181c: 004136 entry a1, 32
-4000181f: 0a66e5 call8 4000be8c <__getreent>
-40001822: 20b220 or a11, a2, a2
-40001825: 20c330 or a12, a3, a3
-40001828: 04dd mov.n a13, a4
-4000182a: 0a5465 call8 4000bd70 <_write_r>
-4000182d: 0a2d mov.n a2, a10
-4000182f: f01d retw.n
-40001831: 000000 ill
-
-40001834 <__get_current_time_locale>:
-40001834: 004136 entry a1, 32
-40001837: fb8321 l32r a2, 40000644 <_stext+0xe4>
-4000183a: f01d retw.n
-
-4000183c <__time_load_locale>:
-4000183c: 004136 entry a1, 32
-4000183f: 020c movi.n a2, 0
-40001841: f01d retw.n
- ...
-
-40001844 :
-40001844: 006136 entry a1, 48
-40001847: 0a6465 call8 4000be8c <__getreent>
-4000184a: 20b110 or a11, a1, a1
-4000184d: 00a0c2 movi a12, 0
-40001850: 0a4065 call8 4000bc58 <_gettimeofday_r>
-40001853: 00aa96 bltz a10, 40001861
-40001856: 002182 l32i a8, a1, 0
-40001859: 028c beqz.n a2, 4000185d
-4000185b: 0289 s32i.n a8, a2, 0
-4000185d: 082d mov.n a2, a8
-4000185f: f01d retw.n
-40001861: f27c movi.n a2, -1
-40001863: f01d retw.n
-40001865: 000000 ill
-
-40001868 :
-40001868: 004136 entry a1, 32
-4000186b: fb5f81 l32r a8, 400005e8 <_stext+0x88>
-4000186e: 0888 l32i.n a8, a8, 0
-40001870: 882a add.n a8, a8, a2
-40001872: 010892 l8ui a9, a8, 1
-40001875: 20c282 addi a8, a2, 32
-40001878: 149090 extui a9, a9, 0, 2
-4000187b: 990b addi.n a9, a9, -1
-4000187d: 832890 moveqz a2, a8, a9
-40001880: f01d retw.n
- ...
-
-40001884 :
-40001884: 004136 entry a1, 32
-40001887: fb5881 l32r a8, 400005e8 <_stext+0x88>
-4000188a: 0888 l32i.n a8, a8, 0
-4000188c: 882a add.n a8, a8, a2
-4000188e: 010892 l8ui a9, a8, 1
-40001891: e0c282 addi a8, a2, -32
-40001894: 149090 extui a9, a9, 0, 2
-40001897: fec992 addi a9, a9, -2
-4000189a: 832890 moveqz a2, a8, a9
-4000189d: f01d retw.n
- ...
-
-400018a0 <__tzcalc_limits>:
-400018a0: 006136 entry a1, 48
-400018a3: 0072a5 call8 40001fcc <__gettzinfo>
-400018a6: b1a742 movi a4, 0x7b1
-400018a9: 00a0e2 movi a14, 0
-400018ac: 022427 blt a4, a2, 400018b2 <__tzcalc_limits+0x12>
-400018af: 0052c6 j 400019fe <__tzcalc_limits+0x15e>
-400018b2: 4ea832 movi a3, 0xfffff84e
-400018b5: 803230 add a3, a2, a3
-400018b8: b05330 addx8 a5, a3, a3
-400018bb: b03530 addx8 a3, a5, a3
-400018be: c04240 sub a4, a2, a4
-400018c1: a03330 addx4 a3, a3, a3
-400018c4: 214240 srai a4, a4, 2
-400018c7: 80f340 add a15, a3, a4
-400018ca: fb5f31 l32r a3, 40000648 <_stext+0xe8>
-400018cd: 93a842 movi a4, 0xfffff893
-400018d0: 424a add.n a4, a2, a4
-400018d2: b25430 mulsh a5, a4, a3
-400018d5: 314f40 srai a4, a4, 31
-400018d8: 215550 srai a5, a5, 5
-400018db: c04450 sub a4, a4, a5
-400018de: ff4a add.n a15, a15, a4
-400018e0: bfa942 movi a4, 0xfffff9bf
-400018e3: 424a add.n a4, a2, a4
-400018e5: b25430 mulsh a5, a4, a3
-400018e8: b23230 mulsh a3, a2, a3
-400018eb: 215750 srai a5, a5, 7
-400018ee: 314f40 srai a4, a4, 31
-400018f1: c04540 sub a4, a5, a4
-400018f4: 219530 srai a9, a3, 5
-400018f7: ff4a add.n a15, a15, a4
-400018f9: 213730 srai a3, a3, 7
-400018fc: 314f20 srai a4, a2, 31
-400018ff: c03340 sub a3, a3, a4
-40001902: a03330 addx4 a3, a3, a3
-40001905: c09940 sub a9, a9, a4
-40001908: a03330 addx4 a3, a3, a3
-4000190b: 11b3c0 slli a11, a3, 4
-4000190e: a09990 addx4 a9, a9, a9
-40001911: c0b2b0 sub a11, a2, a11
-40001914: 140c movi.n a4, 1
-40001916: a09990 addx4 a9, a9, a9
-40001919: 0e3d mov.n a3, a14
-4000191b: 1199e0 slli a9, a9, 2
-4000191e: 8334b0 moveqz a3, a4, a11
-40001921: c09290 sub a9, a2, a9
-40001924: 74b030 extui a11, a3, 0, 8
-40001927: 045d mov.n a5, a4
-40001929: 835b90 moveqz a5, a11, a9
-4000192c: 1a29 s32i.n a2, a10, 4
-4000192e: 0a8d mov.n a8, a10
-40001930: 142020 extui a2, a2, 0, 2
-40001933: 0159 s32i.n a5, a1, 0
-40001935: 080832 l8ui a3, a8, 8
-40001938: ac4c movi.n a12, 74
-4000193a: 1e93c7 bne a3, a12, 4000195c <__tzcalc_limits+0xbc>
-4000193d: 5858 l32i.n a5, a8, 20
-4000193f: 6f5a add.n a6, a15, a5
-40001941: 02cc bnez.n a2, 40001945 <__tzcalc_limits+0xa5>
-40001943: 39cc bnez.n a9, 4000194a <__tzcalc_limits+0xaa>
-40001945: 030c movi.n a3, 0
-40001947: 091b37 beq a11, a3, 40001954 <__tzcalc_limits+0xb4>
-4000194a: bd3c movi.n a13, 59
-4000194c: 130c movi.n a3, 1
-4000194e: 022d57 blt a13, a5, 40001954 <__tzcalc_limits+0xb4>
-40001951: 00a032 movi a3, 0
-40001954: 363a add.n a3, a6, a3
-40001956: 330b addi.n a3, a3, -1
-40001958: 001e06 j 400019d4 <__tzcalc_limits+0x134>
-4000195b: 454c00 extui a4, a0, 28, 5
-4000195e: 069357 bne a3, a5, 40001968 <__tzcalc_limits+0xc8>
-40001961: 5838 l32i.n a3, a8, 20
-40001963: 3f3a add.n a3, a15, a3
-40001965: 001ac6 j 400019d4 <__tzcalc_limits+0x134>
-40001968: 0138 l32i.n a3, a1, 0
-4000196a: fb38c1 l32r a12, 4000064c <_stext+0xec>
-4000196d: 933b20 movnez a3, a11, a2
-40001970: 1153f0 slli a5, a3, 1
-40001973: 553a add.n a5, a5, a3
-40001975: 1155c0 slli a5, a5, 4
-40001978: 55ca add.n a5, a5, a12
-4000197a: 3868 l32i.n a6, a8, 12
-4000197c: 053d mov.n a3, a5
-4000197e: 0fcd mov.n a12, a15
-40001980: 1d0c movi.n a13, 1
-40001982: 0001c6 j 4000198d <__tzcalc_limits+0xed>
-40001985: 0378 l32i.n a7, a3, 0
-40001987: dd1b addi.n a13, a13, 1
-40001989: cc7a add.n a12, a12, a7
-4000198b: 334b addi.n a3, a3, 4
-4000198d: f42d67 blt a13, a6, 40001985 <__tzcalc_limits+0xe5>
-40001990: fb3031 l32r a3, 40000650 <_stext+0xf0>
-40001993: dc4b addi.n a13, a12, 4
-40001995: b27d30 mulsh a7, a13, a3
-40001998: 313fd0 srai a3, a13, 31
-4000199b: 7d7a add.n a7, a13, a7
-4000199d: 217270 srai a7, a7, 2
-400019a0: c03730 sub a3, a7, a3
-400019a3: f03330 subx8 a3, a3, a3
-400019a6: c0dd30 sub a13, a13, a3
-400019a9: 5838 l32i.n a3, a8, 20
-400019ab: 536640 max a6, a6, a4
-400019ae: c0d3d0 sub a13, a3, a13
-400019b1: 3d7b addi.n a3, a13, 7
-400019b3: a3d3d0 movltz a13, a3, a13
-400019b6: 4838 l32i.n a3, a8, 16
-400019b8: 330b addi.n a3, a3, -1
-400019ba: f03330 subx8 a3, a3, a3
-400019bd: 33da add.n a3, a3, a13
-400019bf: fb25d1 l32r a13, 40000654 <_stext+0xf4>
-400019c2: 66da add.n a6, a6, a13
-400019c4: a06650 addx4 a6, a6, a5
-400019c7: 0658 l32i.n a5, a6, 0
-400019c9: 000086 j 400019cf <__tzcalc_limits+0x12f>
-400019cc: f9c332 addi a3, a3, -7
-400019cf: f9a357 bge a3, a5, 400019cc <__tzcalc_limits+0x12c>
-400019d2: 3c3a add.n a3, a12, a3
-400019d4: fb21c1 l32r a12, 40000658 <_stext+0xf8>
-400019d7: 6858 l32i.n a5, a8, 24
-400019d9: 8233c0 mull a3, a3, a12
-400019dc: ee1b addi.n a14, a14, 1
-400019de: 335a add.n a3, a3, a5
-400019e0: 8858 l32i.n a5, a8, 32
-400019e2: 1cc882 addi a8, a8, 28
-400019e5: 335a add.n a3, a3, a5
-400019e7: 0839 s32i.n a3, a8, 0
-400019e9: 022e26 beqi a14, 2, 400019ef <__tzcalc_limits+0x14f>
-400019ec: ffd146 j 40001935 <__tzcalc_limits+0x95>
-400019ef: 7a48 l32i.n a4, a10, 28
-400019f1: ea38 l32i.n a3, a10, 56
-400019f3: 120c movi.n a2, 1
-400019f5: 012437 blt a4, a3, 400019fa <__tzcalc_limits+0x15a>
-400019f8: 020c movi.n a2, 0
-400019fa: 0a29 s32i.n a2, a10, 0
-400019fc: 1e0c movi.n a14, 1
-400019fe: 0e2d mov.n a2, a14
-40001a00: f01d retw.n
- ...
-
-40001a04 <__tz_lock>:
-40001a04: 004136 entry a1, 32
-40001a07: fb15a1 l32r a10, 4000065c <_stext+0xfc>
-40001a0a: 0a40a5 call8 4000be14 <_lock_acquire>
-40001a0d: f01d retw.n
- ...
-
-40001a10 <__tz_unlock>:
-40001a10: 004136 entry a1, 32
-40001a13: fb12a1 l32r a10, 4000065c <_stext+0xfc>
-40001a16: 0a44e5 call8 4000be64 <_lock_release>
-40001a19: f01d retw.n
- ...
-
-40001a1c :
-40001a1c: 004136 entry a1, 32
-40001a1f: 0a46e5 call8 4000be8c <__getreent>
-40001a22: 000065 call8 40001a28 <_tzset_r>
-40001a25: f01d retw.n
- ...
-
-40001a28 <_tzset_r>:
-40001a28: 00c136 entry a1, 96
-40001a2b: 005a25 call8 40001fcc <__gettzinfo>
-40001a2e: fb0cb1 l32r a11, 40000660 <_stext+0x100>
-40001a31: 0a3d mov.n a3, a10
-40001a33: 02ad mov.n a10, a2
-40001a35: 005865 call8 40001fbc <_getenv_r>
-40001a38: 0a4d mov.n a4, a10
-40001a3a: fb0e51 l32r a5, 40000674 <_stext+0x114>
-40001a3d: 020a56 bnez a10, 40001a61 <_tzset_r+0x39>
-40001a40: fffc25 call8 40001a04 <__tz_lock>
-40001a43: fb0821 l32r a2, 40000664 <_stext+0x104>
-40001a46: fb0a31 l32r a3, 40000670 <_stext+0x110>
-40001a49: 0249 s32i.n a4, a2, 0
-40001a4b: fb0721 l32r a2, 40000668 <_stext+0x108>
-40001a4e: 05a8 l32i.n a10, a5, 0
-40001a50: 0249 s32i.n a4, a2, 0
-40001a52: fb0621 l32r a2, 4000066c <_stext+0x10c>
-40001a55: 0239 s32i.n a3, a2, 0
-40001a57: 1239 s32i.n a3, a2, 4
-40001a59: 0a45e5 call8 4000beb8
-40001a5c: 0549 s32i.n a4, a5, 0
-40001a5e: 00b7c6 j 40001d41 <_tzset_r+0x319>
-40001a61: fffa25 call8 40001a04 <__tz_lock>
-40001a64: 0025b2 l32i a11, a5, 0
-40001a67: 00bb16 beqz a11, 40001a76 <_tzset_r+0x4e>
-40001a6a: 20a440 or a10, a4, a4
-40001a6d: ff8065 call8 40001274
-40001a70: 2acc bnez.n a10, 40001a76 <_tzset_r+0x4e>
-40001a72: 00b2c6 j 40001d41 <_tzset_r+0x319>
-40001a75: 05a800 extui a10, a0, 24, 1
-40001a78: 0a43e5 call8 4000beb8
-40001a7b: 04ad mov.n a10, a4
-40001a7d: ffa425 call8 400014c0
-40001a80: ba1b addi.n a11, a10, 1
-40001a82: 02ad mov.n a10, a2
-40001a84: 0a12e5 call8 4000bbb4 <_malloc_r>
-40001a87: 05a9 s32i.n a10, a5, 0
-40001a89: 3a8c beqz.n a10, 40001a90 <_tzset_r+0x68>
-40001a8b: 04bd mov.n a11, a4
-40001a8d: ff91e5 call8 400013ac
-40001a90: 000462 l8ui a6, a4, 0
-40001a93: 150c movi.n a5, 1
-40001a95: c6c662 addi a6, a6, -58
-40001a98: 020c movi.n a2, 0
-40001a9a: 832560 moveqz a2, a5, a6
-40001a9d: faf771 l32r a7, 4000067c <_stext+0x11c>
-40001aa0: faf661 l32r a6, 40000678 <_stext+0x118>
-40001aa3: 442a add.n a4, a4, a2
-40001aa5: 14c122 addi a2, a1, 20
-40001aa8: 04ad mov.n a10, a4
-40001aaa: 06bd mov.n a11, a6
-40001aac: 07cd mov.n a12, a7
-40001aae: 20d220 or a13, a2, a2
-40001ab1: 56d1e5 call8 400587d0
-40001ab4: 02aa57 bge a10, a5, 40001aba <_tzset_r+0x92>
-40001ab7: 00a186 j 40001d41 <_tzset_r+0x319>
-40001aba: 5188 l32i.n a8, a1, 20
-40001abc: d92c movi.n a9, 45
-40001abe: 448a add.n a4, a4, a8
-40001ac0: 000482 l8ui a8, a4, 0
-40001ac3: 079897 bne a8, a9, 40001ace <_tzset_r+0xa6>
-40001ac6: 445a add.n a4, a4, a5
-40001ac8: f97c movi.n a9, -1
-40001aca: 000406 j 40001ade <_tzset_r+0xb6>
-40001acd: 955000 extui a5, a0, 16, 10
-40001ad0: c88220 lsi f2, a2, 0x320
-40001ad3: a052d5 call4 3ffa2000
-40001ad6: 1a0c00 sub.s f0, f12, f0
-40001ad9: 835a80 moveqz a5, a10, a8
-40001adc: 445a add.n a4, a4, a5
-40001ade: 050c movi.n a5, 0
-40001ae0: 105152 s16i a5, a1, 32
-40001ae3: 0f5152 s16i a5, a1, 30
-40001ae6: fae651 l32r a5, 40000680 <_stext+0x120>
-40001ae9: 1ec182 addi a8, a1, 30
-40001aec: 0189 s32i.n a8, a1, 0
-40001aee: 1129 s32i.n a2, a1, 4
-40001af0: 04ad mov.n a10, a4
-40001af2: 05bd mov.n a11, a5
-40001af4: 22c1c2 addi a12, a1, 34
-40001af7: 02dd mov.n a13, a2
-40001af9: 20c1e2 addi a14, a1, 32
-40001afc: 02fd mov.n a15, a2
-40001afe: c199 s32i.n a9, a1, 48
-40001b00: 56cce5 call8 400587d0
-40001b03: 058d mov.n a8, a5
-40001b05: c198 l32i.n a9, a1, 48
-40001b07: 021ae6 bgei a10, 1, 40001b0d <_tzset_r+0xe5>
-40001b0a: 008cc6 j 40001d41 <_tzset_r+0x319>
-40001b0d: 101152 l16ui a5, a1, 32
-40001b10: 1111a2 l16ui a10, a1, 34
-40001b13: 0f11c2 l16ui a12, a1, 30
-40001b16: 11b5c0 slli a11, a5, 4
-40001b19: c05b50 sub a5, a11, a5
-40001b1c: a0b5c0 addx4 a11, a5, a12
-40001b1f: 115ac0 slli a5, a10, 4
-40001b22: c055a0 sub a5, a5, a10
-40001b25: 11a5c0 slli a10, a5, 4
-40001b28: c05a50 sub a5, a10, a5
-40001b2b: 11a5c0 slli a10, a5, 4
-40001b2e: 5baa add.n a5, a11, a10
-40001b30: 829950 mull a9, a9, a5
-40001b33: face51 l32r a5, 4000066c <_stext+0x10c>
-40001b36: 8399 s32i.n a9, a3, 32
-40001b38: 0579 s32i.n a7, a5, 0
-40001b3a: 5178 l32i.n a7, a1, 20
-40001b3c: 06bd mov.n a11, a6
-40001b3e: 447a add.n a4, a4, a7
-40001b40: fad171 l32r a7, 40000684 <_stext+0x124>
-40001b43: 04ad mov.n a10, a4
-40001b45: 07cd mov.n a12, a7
-40001b47: 02dd mov.n a13, a2
-40001b49: c189 s32i.n a8, a1, 48
-40001b4b: 56c865 call8 400587d0
-40001b4e: c188 l32i.n a8, a1, 48
-40001b50: 141ae6 bgei a10, 1, 40001b68 <_tzset_r+0x140>
-40001b53: 0528 l32i.n a2, a5, 0
-40001b55: 8338 l32i.n a3, a3, 32
-40001b57: 1529 s32i.n a2, a5, 4
-40001b59: fac221 l32r a2, 40000664 <_stext+0x104>
-40001b5c: 0239 s32i.n a3, a2, 0
-40001b5e: fac221 l32r a2, 40000668 <_stext+0x108>
-40001b61: 030c movi.n a3, 0
-40001b63: 0239 s32i.n a3, a2, 0
-40001b65: 007606 j 40001d41 <_tzset_r+0x319>
-40001b68: 1579 s32i.n a7, a5, 4
-40001b6a: 5158 l32i.n a5, a1, 20
-40001b6c: d62c movi.n a6, 45
-40001b6e: 445a add.n a4, a4, a5
-40001b70: 000452 l8ui a5, a4, 0
-40001b73: 069567 bne a5, a6, 40001b7d <_tzset_r+0x155>
-40001b76: 441b addi.n a4, a4, 1
-40001b78: f67c movi.n a6, -1
-40001b7a: 0002c6 j 40001b89 <_tzset_r+0x161>
-40001b7d: d5c592 addi a9, a5, -43
-40001b80: 160c movi.n a6, 1
-40001b82: 050c movi.n a5, 0
-40001b84: 835690 moveqz a5, a6, a9
-40001b87: 445a add.n a4, a4, a5
-40001b89: 050c movi.n a5, 0
-40001b8b: 115152 s16i a5, a1, 34
-40001b8e: 105152 s16i a5, a1, 32
-40001b91: 0f5152 s16i a5, a1, 30
-40001b94: 050c movi.n a5, 0
-40001b96: 5159 s32i.n a5, a1, 20
-40001b98: 1ec152 addi a5, a1, 30
-40001b9b: 0159 s32i.n a5, a1, 0
-40001b9d: 1129 s32i.n a2, a1, 4
-40001b9f: 04ad mov.n a10, a4
-40001ba1: 08bd mov.n a11, a8
-40001ba3: 22c1c2 addi a12, a1, 34
-40001ba6: 02dd mov.n a13, a2
-40001ba8: 20c1e2 addi a14, a1, 32
-40001bab: 02fd mov.n a15, a2
-40001bad: 56c225 call8 400587d0
-40001bb0: 0d1ae6 bgei a10, 1, 40001bc1 <_tzset_r+0x199>
-40001bb3: 8368 l32i.n a6, a3, 32
-40001bb5: fab451 l32r a5, 40000688 <_stext+0x128>
-40001bb8: 565a add.n a5, a6, a5
-40001bba: f359 s32i.n a5, a3, 60
-40001bbc: 000a46 j 40001be9 <_tzset_r+0x1c1>
-40001bbf: 520000 lsi f0, a0, 0x148
-40001bc2: 721011 l32r a1, 3ffde404 <_bss_end_btdm+0x1e494>
-40001bc5: c01111 l32r a1, 3fff1c0c <__stack_app+0x9ddc>
-40001bc8: 921185 call0 3ff93ce4 <__month_lengths-0x23b8>
-40001bcb: 500f11 l32r a1, 3ffd5c08 <_bss_end_btdm+0x15c98>
-40001bce: c058 l32i.n a5, a0, 48
-40001bd0: a08590 addx4 a8, a5, a9
-40001bd3: 1157c0 slli a5, a7, 4
-40001bd6: c05570 sub a5, a5, a7
-40001bd9: 1175c0 slli a7, a5, 4
-40001bdc: c05750 sub a5, a7, a5
-40001bdf: 1175c0 slli a7, a5, 4
-40001be2: 587a add.n a5, a8, a7
-40001be4: 826650 mull a6, a6, a5
-40001be7: f369 s32i.n a6, a3, 60
-40001be9: 5158 l32i.n a5, a1, 20
-40001beb: 060c movi.n a6, 0
-40001bed: 445a add.n a4, a4, a5
-40001bef: 035d mov.n a5, a3
-40001bf1: 000492 l8ui a9, a4, 0
-40001bf4: 01a082 movi a8, 1
-40001bf7: d4c992 addi a9, a9, -44
-40001bfa: 00a072 movi a7, 0
-40001bfd: 837890 moveqz a7, a8, a9
-40001c00: 804470 add a4, a4, a7
-40001c03: 000472 l8ui a7, a4, 0
-40001c06: d84c movi.n a8, 77
-40001c08: 559787 bne a7, a8, 40001c61 <_tzset_r+0x239>
-40001c0b: 18c182 addi a8, a1, 24
-40001c0e: fa9fb1 l32r a11, 4000068c <_stext+0x12c>
-40001c11: 0189 s32i.n a8, a1, 0
-40001c13: 1129 s32i.n a2, a1, 4
-40001c15: 04ad mov.n a10, a4
-40001c17: 1cc1c2 addi a12, a1, 28
-40001c1a: 02dd mov.n a13, a2
-40001c1c: 1ac1e2 addi a14, a1, 26
-40001c1f: 02fd mov.n a15, a2
-40001c21: 56bae5 call8 400587d0
-40001c24: 023a26 beqi a10, 3, 40001c2a <_tzset_r+0x202>
-40001c27: 004586 j 40001d41 <_tzset_r+0x319>
-40001c2a: 0e11a2 l16ui a10, a1, 28
-40001c2d: b90c movi.n a9, 11
-40001c2f: 8a0b addi.n a8, a10, -1
-40001c31: f48080 extui a8, a8, 0, 16
-40001c34: 02b987 bgeu a9, a8, 40001c3a <_tzset_r+0x212>
-40001c37: 004186 j 40001d41 <_tzset_r+0x319>
-40001c3a: 0d1192 l16ui a9, a1, 26
-40001c3d: 890b addi.n a8, a9, -1
-40001c3f: f48080 extui a8, a8, 0, 16
-40001c42: 0258b6 bltui a8, 5, 40001c48 <_tzset_r+0x220>
-40001c45: 003e06 j 40001d41 <_tzset_r+0x319>
-40001c48: 0c1182 l16ui a8, a1, 24
-40001c4b: 0278b6 bltui a8, 7, 40001c51 <_tzset_r+0x229>
-40001c4e: 003bc6 j 40001d41 <_tzset_r+0x319>
-40001c51: 084572 s8i a7, a5, 8
-40001c54: 5178 l32i.n a7, a1, 20
-40001c56: 35a9 s32i.n a10, a5, 12
-40001c58: 4599 s32i.n a9, a5, 16
-40001c5a: 5589 s32i.n a8, a5, 20
-40001c5c: 747a add.n a7, a4, a7
-40001c5e: 0015c6 j 40001cb9 <_tzset_r+0x291>
-40001c61: a94c movi.n a9, 74
-40001c63: 484c movi.n a8, 68
-40001c65: 049797 bne a7, a9, 40001c6d <_tzset_r+0x245>
-40001c68: 441b addi.n a4, a4, 1
-40001c6a: 208770 or a8, a7, a7
-40001c6d: 20a440 or a10, a4, a4
-40001c70: 10c1b2 addi a11, a1, 16
-40001c73: 0aa0c2 movi a12, 10
-40001c76: 0c6182 s32i a8, a1, 48
-40001c79: 54cb25 call8 4005692c
-40001c7c: 4178 l32i.n a7, a1, 16
-40001c7e: 0c51a2 s16i a10, a1, 24
-40001c81: c188 l32i.n a8, a1, 48
-40001c83: 299747 bne a7, a4, 40001cb0 <_tzset_r+0x288>
-40001c86: d44c movi.n a4, 77
-40001c88: 06dc bnez.n a6, 40001c9c <_tzset_r+0x274>
-40001c8a: 084342 s8i a4, a3, 8
-40001c8d: 340c movi.n a4, 3
-40001c8f: 3349 s32i.n a4, a3, 12
-40001c91: 240c movi.n a4, 2
-40001c93: 4349 s32i.n a4, a3, 16
-40001c95: 5369 s32i.n a6, a3, 20
-40001c97: 000786 j 40001cb9 <_tzset_r+0x291>
-40001c9a: 420000 xorb b0, b0, b0
-40001c9d: 0c2443 lsi f4, a4, 48
-40001ca0: a349b4 lsi f11, a9, 0x28c
-40001ca3: 140c movi.n a4, 1
-40001ca5: b349 s32i.n a4, a3, 44
-40001ca7: 040c movi.n a4, 0
-40001ca9: c349 s32i.n a4, a3, 48
-40001cab: 000286 j 40001cb9 <_tzset_r+0x291>
-40001cae: a00000 addx4 a0, a0, a0
-40001cb1: 82f4a0 mull a15, a4, a10
-40001cb4: a20845 call0 3ffa3d3c
-40001cb7: 420565 call8 40043d0c
-40001cba: 4202a0 xorb b0, b2, b10
-40001cbd: 421151 l32r a5, 3ffd2504 <_bss_end_btdm+0x12594>
-40001cc0: 4200a0 xorb b0, b0, b10
-40001cc3: 421051 l32r a5, 3ffd2504 <_bss_end_btdm+0x12594>
-40001cc6: 0c0f51 l32r a5, 3ffc4d04 <_bss_end_btdm+0x4d94>
-40001cc9: 514904 lsi f0, a9, 0x144
-40001ccc: 000782 l8ui a8, a7, 0
-40001ccf: f42c movi.n a4, 47
-40001cd1: 189847 bne a8, a4, 40001ced <_tzset_r+0x2c5>
-40001cd4: 1ec142 addi a4, a1, 30
-40001cd7: fa6eb1 l32r a11, 40000690 <_stext+0x130>
-40001cda: 0149 s32i.n a4, a1, 0
-40001cdc: 1129 s32i.n a2, a1, 4
-40001cde: 07ad mov.n a10, a7
-40001ce0: 22c1c2 addi a12, a1, 34
-40001ce3: 02dd mov.n a13, a2
-40001ce5: 20c1e2 addi a14, a1, 32
-40001ce8: 02fd mov.n a15, a2
-40001cea: 56ae65 call8 400587d0
-40001ced: 101142 l16ui a4, a1, 32
-40001cf0: 111182 l16ui a8, a1, 34
-40001cf3: 0f11a2 l16ui a10, a1, 30
-40001cf6: 1194c0 slli a9, a4, 4
-40001cf9: c04940 sub a4, a9, a4
-40001cfc: a094a0 addx4 a9, a4, a10
-40001cff: 1148c0 slli a4, a8, 4
-40001d02: c04480 sub a4, a4, a8
-40001d05: 1184c0 slli a8, a4, 4
-40001d08: c04840 sub a4, a8, a4
-40001d0b: 1184c0 slli a8, a4, 4
-40001d0e: 804980 add a4, a9, a8
-40001d11: 066542 s32i a4, a5, 24
-40001d14: 052142 l32i a4, a1, 20
-40001d17: 661b addi.n a6, a6, 1
-40001d19: 474a add.n a4, a7, a4
-40001d1b: 1cc552 addi a5, a5, 28
-40001d1e: 022626 beqi a6, 2, 40001d24 <_tzset_r+0x2fc>
-40001d21: ffb306 j 40001bf1 <_tzset_r+0x1c9>
-40001d24: 13a8 l32i.n a10, a3, 4
-40001d26: ffb7a5 call8 400018a0 <__tzcalc_limits>
-40001d29: 8328 l32i.n a2, a3, 32
-40001d2b: fa4e41 l32r a4, 40000664 <_stext+0x104>
-40001d2e: 0429 s32i.n a2, a4, 0
-40001d30: f348 l32i.n a4, a3, 60
-40001d32: 130c movi.n a3, 1
-40001d34: c04240 sub a4, a2, a4
-40001d37: 020c movi.n a2, 0
-40001d39: 932340 movnez a2, a3, a4
-40001d3c: fa4b31 l32r a3, 40000668 <_stext+0x108>
-40001d3f: 0329 s32i.n a2, a3, 0
-40001d41: ffcce5 call8 40001a10 <__tz_unlock>
-40001d44: f01d retw.n
- ...
-
-40001d48 <_cleanup_r>:
-40001d48: 004136 entry a1, 32
-40001d4b: fa52b1 l32r a11, 40000694 <_stext+0x134>
-40001d4e: 02ad mov.n a10, a2
-40001d50: 0aa1e5 call8 4000c770 <_fwalk_reent>
-40001d53: f01d retw.n
-40001d55: 000000 ill
-40001d58: 004136 entry a1, 32
-40001d5b: 061282 l16ui a8, a2, 12
-40001d5e: 08e897 bbsi a8, 9, 40001d6a <_cleanup_r+0x22>
-40001d61: 58c2a2 addi a10, a2, 88
-40001d64: 201110 or a1, a1, a1
-40001d67: 0a0c25 call8 4000be28 <_lock_acquire_recursive>
-40001d6a: 020c movi.n a2, 0
-40001d6c: f01d retw.n
-40001d6e: 360000 lsi f0, a0, 216
-40001d71: 820041 l32r a4, 3ffe2574 <_stack_sentry+0x1254>
-40001d74: 970612 l8ui a1, a6, 151
-40001d77: 08e8 l32i.n a14, a8, 0
-40001d79: 58c2a2 addi a10, a2, 88
-40001d7c: 201110 or a1, a1, a1
-40001d7f: 0a0fa5 call8 4000be78 <_lock_release_recursive>
-40001d82: 020c movi.n a2, 0
-40001d84: f01d retw.n
-40001d86: 360000 lsi f0, a0, 216
-40001d89: b20041 l32r a4, 3ffee58c <__stack_app+0x675c>
-40001d8c: b200a0 mulsh a0, a0, a10
-40001d8f: b20062 l8ui a6, a0, 178
-40001d92: b90162 l8ui a6, a1, 185
-40001d95: 523222 lsi f2, a2, 0x148
-40001d98: 62b206 j 4001a864
-40001d9b: 4219 s32i.n a1, a2, 16
-40001d9d: b90752 l8ui a5, a7, 185
-40001da0: 52b942 l32ai a4, a9, 0x148
-40001da3: 62b9 s32i.n a11, a2, 24
-40001da5: 5cc2a2 addi a10, a2, 92
-40001da8: 8c0c movi.n a12, 8
-40001daa: 0a6a25 call8 4000c44c
-40001dad: fa3a81 l32r a8, 40000698 <_stext+0x138>
-40001db0: 8229 s32i.n a2, a2, 32
-40001db2: 9289 s32i.n a8, a2, 36
-40001db4: fa3a81 l32r a8, 4000069c <_stext+0x13c>
-40001db7: a289 s32i.n a8, a2, 40
-40001db9: fa3981 l32r a8, 400006a0 <_stext+0x140>
-40001dbc: b289 s32i.n a8, a2, 44
-40001dbe: fa3981 l32r a8, 400006a4 <_stext+0x144>
-40001dc1: c289 s32i.n a8, a2, 48
-40001dc3: f01d retw.n
-40001dc5: 000000 ill
-
-40001dc8 <__sfmoreglue>:
-40001dc8: 004136 entry a1, 32
-40001dcb: ffc382 addi a8, a3, -1
-40001dce: 904880 addx2 a4, a8, a8
-40001dd1: a08480 addx4 a8, a4, a8
-40001dd4: 1148d0 slli a4, a8, 3
-40001dd7: 20a220 or a10, a2, a2
-40001dda: 74c4b2 addi a11, a4, 116
-40001ddd: 09dd65 call8 4000bbb4 <_malloc_r>
-40001de0: 0a2d mov.n a2, a10
-40001de2: ea8c beqz.n a10, 40001df4 <__sfmoreglue+0x2c>
-40001de4: 0b0c movi.n a11, 0
-40001de6: 0ab9 s32i.n a11, a10, 0
-40001de8: 1a39 s32i.n a3, a10, 4
-40001dea: aacb addi.n a10, a10, 12
-40001dec: 22a9 s32i.n a10, a2, 8
-40001dee: 68c4c2 addi a12, a4, 104
-40001df1: 0a65a5 call8 4000c44c
-40001df4: f01d retw.n
- ...
-
-40001df8 <_cleanup>:
-40001df8: 004136 entry a1, 32
-40001dfb: fa2b81 l32r a8, 400006a8 <_stext+0x148>
-40001dfe: 0028a2 l32i a10, a8, 0
-40001e01: fff465 call8 40001d48 <_cleanup_r>
-40001e04: f01d retw.n
- ...
-
-40001e08 <__sfp_lock_acquire>:
-40001e08: 004136 entry a1, 32
-40001e0b: fa28a1 l32r a10, 400006ac <_stext+0x14c>
-40001e0e: 0a01a5 call8 4000be28 <_lock_acquire_recursive>
-40001e11: f01d retw.n
- ...
-
-40001e14 <__sfp_lock_release>:
-40001e14: 004136 entry a1, 32
-40001e17: fa25a1 l32r a10, 400006ac <_stext+0x14c>
-40001e1a: 0a05e5 call8 4000be78 <_lock_release_recursive>
-40001e1d: f01d retw.n
- ...
-
-40001e20 <__sinit_lock_acquire>:
-40001e20: 004136 entry a1, 32
-40001e23: fa23a1 l32r a10, 400006b0 <_stext+0x150>
-40001e26: 0a0025 call8 4000be28 <_lock_acquire_recursive>
-40001e29: f01d retw.n
- ...
-
-40001e2c <__sinit_lock_release>:
-40001e2c: 004136 entry a1, 32
-40001e2f: fa20a1 l32r a10, 400006b0 <_stext+0x150>
-40001e32: 0a0465 call8 4000be78 <_lock_release_recursive>
-40001e35: f01d retw.n
- ...
-
-40001e38 <__sinit>:
-40001e38: 004136 entry a1, 32
-40001e3b: fffe65 call8 40001e20 <__sinit_lock_acquire>
-40001e3e: 6238 l32i.n a3, a2, 24
-40001e40: 138c beqz.n a3, 40001e45 <__sinit+0xd>
-40001e42: 001106 j 40001e8a <__sinit+0x52>
-40001e45: fa1b41 l32r a4, 400006b4 <_stext+0x154>
-40001e48: 366232 s32i a3, a2, 216
-40001e4b: a249 s32i.n a4, a2, 40
-40001e4d: 140c movi.n a4, 1
-40001e4f: 6249 s32i.n a4, a2, 24
-40001e51: 376232 s32i a3, a2, 220
-40001e54: 386232 s32i a3, a2, 224
-40001e57: 02ad mov.n a10, a2
-40001e59: 000365 call8 40001e90 <__sfp>
-40001e5c: 12a9 s32i.n a10, a2, 4
-40001e5e: 02ad mov.n a10, a2
-40001e60: 0002e5 call8 40001e90 <__sfp>
-40001e63: 22a9 s32i.n a10, a2, 8
-40001e65: 02ad mov.n a10, a2
-40001e67: 0002a5 call8 40001e90 <__sfp>
-40001e6a: 32a9 s32i.n a10, a2, 12
-40001e6c: 12a8 l32i.n a10, a2, 4
-40001e6e: 4b0c movi.n a11, 4
-40001e70: 03cd mov.n a12, a3
-40001e72: fff165 call8 40001d88 <_cleanup_r+0x40>
-40001e75: 22a8 l32i.n a10, a2, 8
-40001e77: 9b0c movi.n a11, 9
-40001e79: 04cd mov.n a12, a4
-40001e7b: fff0e5 call8 40001d88 <_cleanup_r+0x40>
-40001e7e: 32a8 l32i.n a10, a2, 12
-40001e80: ab0c movi.n a11, 10
-40001e82: 02a0c2 movi a12, 2
-40001e85: fff025 call8 40001d88 <_cleanup_r+0x40>
-40001e88: 6249 s32i.n a4, a2, 24
-40001e8a: fffa25 call8 40001e2c <__sinit_lock_release>
-40001e8d: f01d retw.n
- ...
-
-40001e90 <__sfp>:
-40001e90: 004136 entry a1, 32
-40001e93: fff765 call8 40001e08 <__sfp_lock_acquire>
-40001e96: fa0431 l32r a3, 400006a8 <_stext+0x148>
-40001e99: 03a8 l32i.n a10, a3, 0
-40001e9b: 6a48 l32i.n a4, a10, 24
-40001e9d: 14cc bnez.n a4, 40001ea2 <__sfp+0x12>
-40001e9f: fff9a5 call8 40001e38 <__sinit>
-40001ea2: 0358 l32i.n a5, a3, 0
-40001ea4: d8a032 movi a3, 216
-40001ea7: 553a add.n a5, a5, a3
-40001ea9: 2538 l32i.n a3, a5, 8
-40001eab: 1588 l32i.n a8, a5, 4
-40001ead: 0001c6 j 40001eb8 <__sfp+0x28>
-40001eb0: 069342 l16si a4, a3, 12
-40001eb3: 74ac beqz.n a4, 40001ede <__sfp+0x4e>
-40001eb5: 68c332 addi a3, a3, 104
-40001eb8: 880b addi.n a8, a8, -1
-40001eba: ff28d6 bgez a8, 40001eb0 <__sfp+0x20>
-40001ebd: 0538 l32i.n a3, a5, 0
-40001ebf: b3cc bnez.n a3, 40001ece <__sfp+0x3e>
-40001ec1: 02ad mov.n a10, a2
-40001ec3: 4b0c movi.n a11, 4
-40001ec5: fff025 call8 40001dc8 <__sfmoreglue>
-40001ec8: 05a9 s32i.n a10, a5, 0
-40001eca: 0a3d mov.n a3, a10
-40001ecc: 4a8c beqz.n a10, 40001ed4 <__sfp+0x44>
-40001ece: 0558 l32i.n a5, a5, 0
-40001ed0: fff546 j 40001ea9 <__sfp+0x19>
-40001ed3: c40c00 extui a0, a0, 12, 13
-40001ed6: fff3e5 call8 40001e14 <__sfp_lock_release>
-40001ed9: 0249 s32i.n a4, a2, 0
-40001edb: 000e06 j 40001f17 <__sfp+0x87>
-40001ede: ffaf22 movi a2, -1
-40001ee1: 075322 s16i a2, a3, 14
-40001ee4: 01a022 movi a2, 1
-40001ee7: 58c3a2 addi a10, a3, 88
-40001eea: 065322 s16i a2, a3, 12
-40001eed: 196342 s32i a4, a3, 100
-40001ef0: 09ee65 call8 4000bdd8 <_lock_init_recursive>
-40001ef3: fff225 call8 40001e14 <__sfp_lock_release>
-40001ef6: 5cc3a2 addi a10, a3, 92
-40001ef9: 006342 s32i a4, a3, 0
-40001efc: 2349 s32i.n a4, a3, 8
-40001efe: 1349 s32i.n a4, a3, 4
-40001f00: 4349 s32i.n a4, a3, 16
-40001f02: 5349 s32i.n a4, a3, 20
-40001f04: 6349 s32i.n a4, a3, 24
-40001f06: 04bd mov.n a11, a4
-40001f08: 8c0c movi.n a12, 8
-40001f0a: 0a5425 call8 4000c44c
-40001f0d: d349 s32i.n a4, a3, 52
-40001f0f: e349 s32i.n a4, a3, 56
-40001f11: 126342 s32i a4, a3, 72
-40001f14: 136342 s32i a4, a3, 76
-40001f17: 032d mov.n a2, a3
-40001f19: f01d retw.n
- ...
-
-40001f1c <__fp_lock_all>:
-40001f1c: 004136 entry a1, 32
-40001f1f: ffeea5 call8 40001e08 <__sfp_lock_acquire>
-40001f22: 09f6a5 call8 4000be8c <__getreent>
-40001f25: f9e4b1 l32r a11, 400006b8 <_stext+0x158>
-40001f28: 0a80e5 call8 4000c738 <_fwalk>
-40001f2b: f01d retw.n
-40001f2d: 000000 ill
-
-40001f30 <__fp_unlock_all>:
-40001f30: 004136 entry a1, 32
-40001f33: 09f5a5 call8 4000be8c <__getreent>
-40001f36: f9e1b1 l32r a11, 400006bc <_stext+0x15c>
-40001f39: 0a7fe5 call8 4000c738 <_fwalk>
-40001f3c: ffed65 call8 40001e14 <__sfp_lock_release>
-40001f3f: f01d retw.n
-40001f41: 000000 ill
-
-40001f44 <_findenv_r>:
-40001f44: 006136 entry a1, 48
-40001f47: 02ad mov.n a10, a2
-40001f49: 0008a5 call8 40001fd4 <__env_lock>
-40001f4c: f9dd61 l32r a6, 400006c0 <_stext+0x160>
-40001f4f: 0658 l32i.n a5, a6, 0
-40001f51: 069d mov.n a9, a6
-40001f53: 358c beqz.n a5, 40001f5a <_findenv_r+0x16>
-40001f55: 03cd mov.n a12, a3
-40001f57: 000346 j 40001f68 <_findenv_r+0x24>
-40001f5a: 20a220 or a10, a2, a2
-40001f5d: 000825 call8 40001fe0 <__env_unlock>
-40001f60: 00a022 movi a2, 0
-40001f63: 000090 retw
-40001f66: cc1b addi.n a12, a12, 1
-40001f68: 000c82 l8ui a8, a12, 0
-40001f6b: c3c862 addi a6, a8, -61
-40001f6e: 002616 beqz a6, 40001f74 <_findenv_r+0x30>
-40001f71: ff1856 bnez a8, 40001f66 <_findenv_r+0x22>
-40001f74: d73c movi.n a7, 61
-40001f76: c06c30 sub a6, a12, a3
-40001f79: 359877 bne a8, a7, 40001fb2 <_findenv_r+0x6e>
-40001f7c: fff686 j 40001f5a <_findenv_r+0x16>
-40001f7f: b33000 movgez a3, a0, a0
-40001f82: c66020 lsi f2, a0, 0x318
-40001f85: 019920 slli a9, a9, 30
-40001f88: 0a66a5 call8 4000c5f4
-40001f8b: 0198 l32i.n a9, a1, 0
-40001f8d: fadc bnez.n a10, 40001fb0 <_findenv_r+0x6c>
-40001f8f: 0588 l32i.n a8, a5, 0
-40001f91: 886a add.n a8, a8, a6
-40001f93: 0008a2 l8ui a10, a8, 0
-40001f96: 169a77 bne a10, a7, 40001fb0 <_findenv_r+0x6c>
-40001f99: 0938 l32i.n a3, a9, 0
-40001f9b: 02ad mov.n a10, a2
-40001f9d: c05530 sub a5, a5, a3
-40001fa0: 215250 srai a5, a5, 2
-40001fa3: 0459 s32i.n a5, a4, 0
-40001fa5: 0189 s32i.n a8, a1, 0
-40001fa7: 0003a5 call8 40001fe0 <__env_unlock>
-40001faa: 0188 l32i.n a8, a1, 0
-40001fac: 281b addi.n a2, a8, 1
-40001fae: f01d retw.n
-40001fb0: 554b addi.n a5, a5, 4
-40001fb2: 05a8 l32i.n a10, a5, 0
-40001fb4: fc8a56 bnez a10, 40001f80 <_findenv_r+0x3c>
-40001fb7: ffe7c6 j 40001f5a <_findenv_r+0x16>
- ...
-
-40001fbc <_getenv_r>:
-40001fbc: 006136 entry a1, 48
-40001fbf: 02ad mov.n a10, a2
-40001fc1: 03bd mov.n a11, a3
-40001fc3: 01cd mov.n a12, a1
-40001fc5: fff7e5 call8 40001f44 <_findenv_r>
-40001fc8: 0a2d mov.n a2, a10
-40001fca: f01d retw.n
-
-40001fcc <__gettzinfo>:
-40001fcc: 004136 entry a1, 32
-40001fcf: f9bd21 l32r a2, 400006c4 <_stext+0x164>
-40001fd2: f01d retw.n
-
-40001fd4 <__env_lock>:
-40001fd4: 004136 entry a1, 32
-40001fd7: f9bca1 l32r a10, 400006c8 <_stext+0x168>
-40001fda: 09e4e5 call8 4000be28 <_lock_acquire_recursive>
-40001fdd: f01d retw.n
- ...
-
-40001fe0 <__env_unlock>:
-40001fe0: 004136 entry a1, 32
-40001fe3: f9b9a1 l32r a10, 400006c8 <_stext+0x168>
-40001fe6: 09e925 call8 4000be78 <_lock_release_recursive>
-40001fe9: f01d retw.n
- ...
-
-40001fec <_fclose_r>:
-40001fec: 004136 entry a1, 32
-40001fef: 0b3316 beqz a3, 400020a6 <_fclose_r+0xba>
-40001ff2: 00a216 beqz a2, 40002000 <_fclose_r+0x14>
-40001ff5: 062242 l32i a4, a2, 24
-40001ff8: 004456 bnez a4, 40002000 <_fclose_r+0x14>
-40001ffb: 02ad mov.n a10, a2
-40001ffd: ffe3a5 call8 40001e38 <__sinit>
-40002000: f9b341 l32r a4, 400006cc <_stext+0x16c>
-40002003: 059347 bne a3, a4, 4000200c <_fclose_r+0x20>
-40002006: 1238 l32i.n a3, a2, 4
-40002008: 000506 j 40002020 <_fclose_r+0x34>
-4000200b: b14100 lsi f0, a1, 0x2c4
-4000200e: 47f9 s32i.n a15, a7, 16
-40002010: 380593 lsi f9, a5, 224
-40002013: 020622 l8ui a2, a6, 2
-40002016: 410000 srli a0, a0, 0
-40002019: af .byte 0xaf
-4000201a: 47f9 s32i.n a15, a7, 16
-4000201c: 380193 lsi f9, a1, 224
-4000201f: 135232 s16i a3, a2, 38
-40002022: c34206 j 3fff2d2e <__stack_app+0xaefe>
-40002025: 9758 l32i.n a5, a7, 36
-40002027: ad07e5 call8 3ffaf0a4
-4000202a: 111004 lsi f0, a0, 68
-4000202d: dfa520 f64cmph a10, a5, a2, 13
-40002030: 5209 s32i.n a0, a2, 20
-40002032: 560693 lsi f9, a6, 0x158
-40002035: ad0085 call0 3ffaf040
-40002038: e3e504 lsi f0, a5, 0x38c
-4000203b: 8609 s32i.n a0, a6, 32
-4000203d: 0018 l32i.n a1, a0, 0
-4000203f: a22000 muluh a2, a0, a0
-40002042: b33020 movgez a3, a0, a2
-40002045: 19a520 lsi f2, a5, 100
-40002048: c38857 bany a8, a5, 4000200f <_fclose_r+0x23>
-4000204b: 0a5d mov.n a5, a10
-4000204d: 00c816 beqz a8, 4000205d <_fclose_r+0x71>
-40002050: 0823b2 l32i a11, a3, 32
-40002053: 02ad mov.n a10, a2
-40002055: 0008e0 callx8 a8
-40002058: f87c movi.n a8, -1
-4000205a: a358a0 movltz a5, a8, a10
-4000205d: 061382 l16ui a8, a3, 12
-40002060: 066877 bbci a8, 7, 4000206a <_fclose_r+0x7e>
-40002063: 43b8 l32i.n a11, a3, 16
-40002065: 02ad mov.n a10, a2
-40002067: 09b665 call8 4000bbcc <_free_r>
-4000206a: d3b8 l32i.n a11, a3, 52
-4000206c: db8c beqz.n a11, 4000207d <_fclose_r+0x91>
-4000206e: 44c382 addi a8, a3, 68
-40002071: 041b87 beq a11, a8, 40002079 <_fclose_r+0x8d>
-40002074: 02ad mov.n a10, a2
-40002076: 09b565 call8 4000bbcc <_free_r>
-40002079: 080c movi.n a8, 0
-4000207b: d389 s32i.n a8, a3, 52
-4000207d: 1223b2 l32i a11, a3, 72
-40002080: 8b8c beqz.n a11, 4000208c <_fclose_r+0xa0>
-40002082: 02ad mov.n a10, a2
-40002084: 020c movi.n a2, 0
-40002086: 09b465 call8 4000bbcc <_free_r>
-40002089: 126322 s32i a2, a3, 72
-4000208c: ffd7a5 call8 40001e08 <__sfp_lock_acquire>
-4000208f: 020c movi.n a2, 0
-40002091: 20a440 or a10, a4, a4
-40002094: 065322 s16i a2, a3, 12
-40002097: 09de25 call8 4000be78 <_lock_release_recursive>
-4000209a: 04ad mov.n a10, a4
-4000209c: 09d625 call8 4000be00 <_lock_close_recursive>
-4000209f: ffd765 call8 40001e14 <__sfp_lock_release>
-400020a2: 052d mov.n a2, a5
-400020a4: f01d retw.n
-400020a6: 032d mov.n a2, a3
-400020a8: f01d retw.n
- ...
-
-400020ac :
-400020ac: 004136 entry a1, 32
-400020af: 09dde5 call8 4000be8c <__getreent>
-400020b2: 20b220 or a11, a2, a2
-400020b5: fff365 call8 40001fec <_fclose_r>
-400020b8: 202aa0 or a2, a10, a10
-400020bb: 000090 retw
- ...
-
-400020c0 <__negsf2>:
-400020c0: 002136 entry a1, 16
-400020c3: f93641 l32r a4, 4000059c <_stext+0x3c>
-400020c6: 302240 xor a2, a2, a4
-400020c9: f01d retw.n
-400020cb: c36700 movf a6, a7, b0
-400020ce: 727004 lsi f0, a0, 0x1c8
-400020d1: 078c11 l32r a1, 3ffc3f04 <_bss_end_btdm+0x3f94>
-400020d4: f01d retw.n
-400020d6: 032d mov.n a2, a3
-400020d8: f01d retw.n
-400020da: 800000 add a0, a0, a0
-400020dd: 701176 bt b1, 40002151 <__addsf3+0x69>
-400020e0: 863033 lsi f3, a0, 0x218
-400020e3: 003d mov.n a3, a0
-400020e5: 000000 ill
-
-400020e8 <__addsf3>:
-400020e8: 002136 entry a1, 16
-400020eb: f97b61 l32r a6, 400006d8 <_stext+0x178>
-400020ee: 307230 xor a7, a2, a3
-400020f1: fe7796 bltz a7, 400020dc <__negsf2+0x1c>
-400020f4: d44267 ball a2, a6, 400020cc <__negsf2+0xc>
-400020f7: db4367 ball a3, a6, 400020d6 <__negsf2+0x16>
-400020fa: 857720 extui a7, a2, 23, 9
-400020fd: 858730 extui a8, a3, 23, 9
-40002100: 493787 bltu a7, a8, 4000214d <__addsf3+0x65>
-40002103: 260367 bnone a3, a6, 4000212d <__addsf3+0x45>
-40002106: 203360 or a3, a3, a6
-40002109: 113380 slli a3, a3, 8
-4000210c: 413830 srli a3, a3, 8
-4000210f: c0a780 sub a10, a7, a8
-40002112: 28caf6 bgeui a10, 32, 4000213e <__addsf3+0x56>
-40002115: 400a00 ssr a10
-40002118: 090c movi.n a9, 0
-4000211a: 819390 src a9, a3, a9
-4000211d: 913030 srl a3, a3
-40002120: 223a add.n a2, a2, a3
-40002122: 85a720 extui a10, a2, 23, 9
-40002125: 471a77 beq a10, a7, 40002170 <__addsf3+0x88>
-40002128: 078d mov.n a8, a7
-4000212a: 001486 j 40002180 <__addsf3+0x98>
-4000212d: 113370 slli a3, a3, 9
-40002130: 413930 srli a3, a3, 9
-40002133: 050267 bnone a2, a6, 4000213c <__addsf3+0x54>
-40002136: 881b addi.n a8, a8, 1
-40002138: fff4c6 j 4000210f <__addsf3+0x27>
-4000213b: 223a00 orb b3, b10, b0
-4000213e: f01d retw.n
-40002140: 112270 slli a2, a2, 9
-40002143: 412920 srli a2, a2, 9
-40002146: 771b addi.n a7, a7, 1
-40002148: 000346 j 40002159 <__addsf3+0x71>
-4000214b: 670000 lsi f0, a0, 0x19c
-4000214e: 60ef02 s32c1i a0, a15, 0x180
-40002151: 802022 l32i a2, a0, 0x200
-40002154: 201122 l16ui a2, a1, 64
-40002157: 4128 l32i.n a2, a1, 16
-40002159: c0a870 sub a10, a8, a7
-4000215c: 1ccaf6 bgeui a10, 32, 4000217c <__addsf3+0x94>
-4000215f: 400a00 ssr a10
-40002162: a19200 sll a9, a2
-40002165: 912020 srl a2, a2
-40002168: 223a add.n a2, a2, a3
-4000216a: 85a720 extui a10, a2, 23, 9
-4000216d: 0f9a87 bne a10, a8, 40002180 <__addsf3+0x98>
-40002170: 0069d6 bgez a9, 4000217a <__addsf3+0x92>
-40002173: 221b addi.n a2, a2, 1
-40002175: 1199f0 slli a9, a9, 1
-40002178: a9ac beqz.n a9, 400021a6 <__addsf3+0xbe>
-4000217a: f01d retw.n
-4000217c: 032d mov.n a2, a3
-4000217e: f01d retw.n
-40002180: 02ad mov.n a10, a2
-40002182: 412120 srli a2, a2, 1
-40002185: 881b addi.n a8, a8, 1
-40002187: 0188a0 slli a8, a8, 22
-4000218a: 228a add.n a2, a2, a8
-4000218c: 084267 ball a2, a6, 40002198 <__addsf3+0xb0>
-4000218f: 036a07 bbci a10, 0, 40002196 <__addsf3+0xae>
-40002192: 221b addi.n a2, a2, 1
-40002194: e98c beqz.n a9, 400021a6 <__addsf3+0xbe>
-40002196: f01d retw.n
-40002198: 852720 extui a2, a2, 23, 9
-4000219b: 012290 slli a2, a2, 23
-4000219e: 1188f0 slli a8, a8, 1
-400021a1: 202280 or a2, a2, a8
-400021a4: f01d retw.n
-400021a6: 412120 srli a2, a2, 1
-400021a9: 1122f0 slli a2, a2, 1
-400021ac: f01d retw.n
-400021ae: 670000 lsi f0, a0, 0x19c
-400021b1: 4105c3 lsi f12, a5, 0x104
-400021b4: f94a add.n a15, a9, a4
-400021b6: 202240 or a2, a2, a4
-400021b9: f01d retw.n
-400021bb: 768000 lsi f0, a0, 0x1d8
-400021be: 237011 l32r a1, 3ffcaf80 <_bss_end_btdm+0xb010>
-400021c1: f01d30 subx8 a1, a13, a3
-400021c4: 117680 slli a7, a6, 8
-400021c7: 303370 xor a3, a3, a7
-400021ca: ffc986 j 400020f4 <__addsf3+0xc>
-400021cd: 000000 ill
-
-400021d0 <__subsf3>:
-400021d0: 002136 entry a1, 16
-400021d3: f94161 l32r a6, 400006d8 <_stext+0x178>
-400021d6: 307230 xor a7, a2, a3
-400021d9: fe7796 bltz a7, 400021c4 <__addsf3+0xdc>
-400021dc: d04267 ball a2, a6, 400021b0 <__addsf3+0xc8>
-400021df: d94367 ball a3, a6, 400021bc <__addsf3+0xd4>
-400021e2: 757720 extui a7, a2, 23, 8
-400021e5: 758730 extui a8, a3, 23, 8
-400021e8: 493237 bltu a2, a3, 40002235 <__subsf3+0x65>
-400021eb: 2d0367 bnone a3, a6, 4000221c <__subsf3+0x4c>
-400021ee: 203360 or a3, a3, a6
-400021f1: 113380 slli a3, a3, 8
-400021f4: 413830 srli a3, a3, 8
-400021f7: c0a780 sub a10, a7, a8
-400021fa: 35caf6 bgeui a10, 32, 40002233 <__subsf3+0x63>
-400021fd: 400a00 ssr a10
-40002200: 090c movi.n a9, 0
-40002202: 819390 src a9, a3, a9
-40002205: 913030 srl a3, a3
-40002208: c02230 sub a2, a2, a3
-4000220b: 609090 neg a9, a9
-4000220e: a20b addi.n a10, a2, -1
-40002210: 932a90 movnez a2, a10, a9
-40002213: 75a720 extui a10, a2, 23, 8
-40002216: 4f1a77 beq a10, a7, 40002269 <__subsf3+0x99>
-40002219: 001c06 j 4000228d <__subsf3+0xbd>
-4000221c: 691237 beq a2, a3, 40002289 <__subsf3+0xb9>
-4000221f: 113370 slli a3, a3, 9
-40002222: 413930 srli a3, a3, 9
-40002225: ce0267 bnone a2, a6, 400021f7 <__subsf3+0x27>
-40002228: 881b addi.n a8, a8, 1
-4000222a: fff246 j 400021f7 <__subsf3+0x27>
-4000222d: 117680 slli a7, a6, 8
-40002230: 302370 xor a2, a3, a7
-40002233: f01d retw.n
-40002235: 3f0267 bnone a2, a6, 40002278 <__subsf3+0xa8>
-40002238: 202260 or a2, a2, a6
-4000223b: 112280 slli a2, a2, 8
-4000223e: 412820 srli a2, a2, 8
-40002241: c0a870 sub a10, a8, a7
-40002244: e5caf6 bgeui a10, 32, 4000222d <__subsf3+0x5d>
-40002247: 400a00 ssr a10
-4000224a: 090c movi.n a9, 0
-4000224c: 819290 src a9, a2, a9
-4000224f: 912020 srl a2, a2
-40002252: 11b680 slli a11, a6, 8
-40002255: 3033b0 xor a3, a3, a11
-40002258: c02320 sub a2, a3, a2
-4000225b: 609090 neg a9, a9
-4000225e: a20b addi.n a10, a2, -1
-40002260: 932a90 movnez a2, a10, a9
-40002263: 75a720 extui a10, a2, 23, 8
-40002266: 239a87 bne a10, a8, 4000228d <__subsf3+0xbd>
-40002269: 0079d6 bgez a9, 40002274 <__subsf3+0xa4>
-4000226c: 01c222 addi a2, a2, 1
-4000226f: 1199f0 slli a9, a9, 1
-40002272: e9bc beqz.n a9, 400022b4 <__subsf3+0xe4>
-40002274: f01d retw.n
-40002276: 370000 lsi f0, a0, 220
-40002279: 700d12 l8ui a1, a13, 112
-4000227c: 201122 l16ui a2, a1, 64
-4000227f: 4129 s32i.n a2, a1, 16
-40002281: bc0367 bnone a3, a6, 40002241 <__subsf3+0x71>
-40002284: 771b addi.n a7, a7, 1
-40002286: ffedc6 j 40002241 <__subsf3+0x71>
-40002289: 020c movi.n a2, 0
-4000228b: f01d retw.n
-4000228d: 118270 slli a8, a2, 9
-40002290: 88ac beqz.n a8, 400022bc <__subsf3+0xec>
-40002292: 40f860 nsau a6, a8
-40002295: 418980 srli a8, a8, 9
-40002298: 2ea6a7 bge a6, a10, 400022ca <__subsf3+0xfa>
-4000229b: 661b addi.n a6, a6, 1
-4000229d: 401600 ssl a6
-400022a0: 818890 src a8, a8, a9
-400022a3: a19900 sll a9, a9
-400022a6: 852720 extui a2, a2, 23, 9
-400022a9: c02260 sub a2, a2, a6
-400022ac: 012290 slli a2, a2, 23
-400022af: 228a add.n a2, a2, a8
-400022b1: ffed06 j 40002269 <__subsf3+0x99>
-400022b4: 412120 srli a2, a2, 1
-400022b7: 1122f0 slli a2, a2, 1
-400022ba: f01d retw.n
-400022bc: fc9916 beqz a9, 40002289 <__subsf3+0xb9>
-400022bf: e8cab2 addi a11, a10, -24
-400022c2: 861c movi.n a6, 24
-400022c4: a36ab0 movltz a6, a10, a11
-400022c7: fff486 j 4000229d <__subsf3+0xcd>
-400022ca: 0a6d mov.n a6, a10
-400022cc: fff346 j 4000229d <__subsf3+0xcd>
-400022cf: 33f000 clamps a15, a0, 7
-400022d2: 313011 l32r a1, 3ffce794 <_bss_end_btdm+0xe824>
-400022d5: 339c41 l32r a4, 3ffcf148 <_bss_end_btdm+0xf1d8>
-400022d8: 40f3a0 nsau a10, a3
-400022db: f8caa2 addi a10, a10, -8
-400022de: 401a00 ssl a10
-400022e1: a13300 sll a3, a3
-400022e4: 190c movi.n a9, 1
-400022e6: c099a0 sub a9, a9, a10
-400022e9: 001dc6 j 40002364 <__divsf3+0x18>
-400022ec: 42f000 xorb b15, b0, b0
-400022ef: 414011 l32r a1, 3ffd27f0 <_bss_end_btdm+0x12880>
-400022f2: 2f7041 l32r a4, 3ffce0b4 <_bss_end_btdm+0xe144>
-400022f5: 221005 call0 400243f8
-400022f8: 226001 l32r a0, 3ffcac78 <_bss_end_btdm+0xad08>
-400022fb: 44cc20 extui a12, a2, 12, 5
-400022fe: f8f741 l32r a4, 400006dc <_stext+0x17c>
-40002301: 202240 or a2, a2, a4
-40002304: f01d retw.n
-40002306: f00000 subx8 a0, a0, a0
-40002309: 201122 l16ui a2, a1, 64
-4000230c: 9c4121 l32r a2, 3ffe9410 <__stack_app+0x15e0>
-4000230f: f2a022 movi a2, 242
-40002312: caa240 float.s f10, a2, 4
-40002315: 00f8 l32i.n a15, a0, 0
-40002317: 401a add.n a4, a0, a1
-40002319: a12200 sll a2, a2
-4000231c: 180c movi.n a8, 1
-4000231e: c088a0 sub a8, a8, a10
-40002321: 001086 j 40002367 <__divsf3+0x1b>
-40002324: 052f70 extui a2, a7, 31, 1
-40002327: 012210 slli a2, a2, 31
-4000232a: f01d retw.n
-4000232c: 057f30 extui a7, a3, 31, 1
-4000232f: 017710 slli a7, a7, 31
-40002332: 302270 xor a2, a2, a7
-40002335: 05c367 bnall a3, a6, 4000233e <__subsf3+0x16e>
-40002338: f8e941 l32r a4, 400006dc <_stext+0x17c>
-4000233b: 202240 or a2, a2, a4
-4000233e: f01d retw.n
-40002340: 118370 slli a8, a3, 9
-40002343: fdd816 beqz a8, 40002324 <__subsf3+0x154>
-40002346: 032d mov.n a2, a3
-40002348: f01d retw.n
- ...
-
-4000234c <__divsf3>:
-4000234c: 002136 entry a1, 16
-4000234f: f8e261 l32r a6, 400006d8 <_stext+0x178>
-40002352: 307230 xor a7, a2, a3
-40002355: d34267 ball a2, a6, 4000232c <__subsf3+0x15c>
-40002358: e44367 ball a3, a6, 40002340 <__subsf3+0x170>
-4000235b: 758720 extui a8, a2, 23, 8
-4000235e: 759730 extui a9, a3, 23, 8
-40002361: f6b916 beqz a9, 400022d0 <__subsf3+0x100>
-40002364: fa0816 beqz a8, 40002308 <__subsf3+0x138>
-40002367: c08890 sub a8, a8, a9
-4000236a: f8dda1 l32r a10, 400006e0 <_stext+0x180>
-4000236d: 202260 or a2, a2, a6
-40002370: 1022a0 and a2, a2, a10
-40002373: 203360 or a3, a3, a6
-40002376: 1033a0 and a3, a3, a10
-40002379: 043327 bltu a3, a2, 40002381 <__divsf3+0x35>
-4000237c: 1122f0 slli a2, a2, 1
-4000237f: 880b addi.n a8, a8, -1
-40002381: c02230 sub a2, a2, a3
-40002384: 1122f0 slli a2, a2, 1
-40002387: 01a0a2 movi a10, 1
-4000238a: 17a092 movi a9, 23
-4000238d: 0e8976 loop a9, 4000239f <__divsf3+0x53>
-40002390: 11aaf0 slli a10, a10, 1
-40002393: 053237 bltu a2, a3, 4000239c <__divsf3+0x50>
-40002396: 01caa2 addi a10, a10, 1
-40002399: c02230 sub a2, a2, a3
-4000239c: 1122f0 slli a2, a2, 1
-4000239f: 7ec882 addi a8, a8, 126
-400023a2: fea042 movi a4, 254
-400023a5: 17b847 bgeu a8, a4, 400023c0 <__divsf3+0x74>
-400023a8: 043237 bltu a2, a3, 400023b0 <__divsf3+0x64>
-400023ab: aa1b addi.n a10, a10, 1
-400023ad: 1b1237 beq a2, a3, 400023cc <__divsf3+0x80>
-400023b0: 018890 slli a8, a8, 23
-400023b3: 2a8a add.n a2, a10, a8
-400023b5: 057f70 extui a7, a7, 31, 1
-400023b8: 017710 slli a7, a7, 31
-400023bb: 202270 or a2, a2, a7
-400023be: f01d retw.n
-400023c0: 011896 bltz a8, 400023d5 <__divsf3+0x89>
-400023c3: 841b addi.n a8, a4, 1
-400023c5: 012890 slli a2, a8, 23
-400023c8: fffa46 j 400023b5 <__divsf3+0x69>
-400023cb: a1a000 sll a10, a0
-400023ce: aaf041 l32r a4, 3ffecf90 <__stack_app+0x5160>
-400023d1: f68611 l32r a1, 3ffffdec <__stack_app+0x17fbc>
-400023d4: ff .byte 0xff
-400023d5: 608080 neg a8, a8
-400023d8: 400800 ssr a8
-400023db: 22c8f6 bgeui a8, 32, 40002401 <__divsf3+0xb5>
-400023de: a16a00 sll a6, a10
-400023e1: 91a0a0 srl a10, a10
-400023e4: 080c movi.n a8, 0
-400023e6: 328c beqz.n a2, 400023ed <__divsf3+0xa1>
-400023e8: 190c movi.n a9, 1
-400023ea: 206690 or a6, a6, a9
-400023ed: fbf6d6 bgez a6, 400023b0 <__divsf3+0x64>
-400023f0: aa1b addi.n a10, a10, 1
-400023f2: 1166f0 slli a6, a6, 1
-400023f5: fb7656 bnez a6, 400023b0 <__divsf3+0x64>
-400023f8: 41a1a0 srli a10, a10, 1
-400023fb: 11aaf0 slli a10, a10, 1
-400023fe: ffeb86 j 400023b0 <__divsf3+0x64>
-40002401: 052f70 extui a2, a7, 31, 1
-40002404: 012210 slli a2, a2, 31
-40002407: f01d retw.n
-40002409: 000000 ill
-
-4000240c <__fixsfsi>:
-4000240c: 002136 entry a1, 16
-4000240f: f8b261 l32r a6, 400006d8 <_stext+0x178>
-40002412: 1f4267 ball a2, a6, 40002435 <__fixsfsi+0x29>
-40002415: 754720 extui a4, a2, 23, 8
-40002418: 82c442 addi a4, a4, -126
-4000241b: 1dc4e6 bgei a4, 32, 4000243c <__fixsfsi+0x30>
-4000241e: 2614a6 blti a4, 1, 40002448 <__fixsfsi+0x3c>
-40002421: 207260 or a7, a2, a6
-40002424: 115780 slli a5, a7, 8
-40002427: 401400 ssl a4
-4000242a: 915050 srl a5, a5
-4000242d: 602050 neg a2, a5
-40002430: b32570 movgez a2, a5, a7
-40002433: f01d retw.n
-40002435: 114270 slli a4, a2, 9
-40002438: 048c beqz.n a4, 4000243c <__fixsfsi+0x30>
-4000243a: 020c movi.n a2, 0
-4000243c: 114680 slli a4, a6, 8
-4000243f: 540b addi.n a5, a4, -1
-40002441: b34520 movgez a4, a5, a2
-40002444: 042d mov.n a2, a4
-40002446: f01d retw.n
-40002448: 020c movi.n a2, 0
-4000244a: f01d retw.n
-
-4000244c <__fixsfdi>:
-4000244c: 002136 entry a1, 16
-4000244f: f8a261 l32r a6, 400006d8 <_stext+0x178>
-40002452: 374267 ball a2, a6, 4000248d <__fixsfdi+0x41>
-40002455: 754720 extui a4, a2, 23, 8
-40002458: 82c442 addi a4, a4, -126
-4000245b: 35d4e6 bgei a4, 64, 40002494 <__fixsfdi+0x48>
-4000245e: 4414a6 blti a4, 1, 400024a6 <__fixsfdi+0x5a>
-40002461: 207260 or a7, a2, a6
-40002464: 113780 slli a3, a7, 8
-40002467: 401400 ssl a4
-4000246a: 14c4e6 bgei a4, 32, 40002482 <__fixsfdi+0x36>
-4000246d: 912030 srl a2, a3
-40002470: 030c movi.n a3, 0
-40002472: 00a7d6 bgez a7, 40002480 <__fixsfdi+0x34>
-40002475: 602020 neg a2, a2
-40002478: 603030 neg a3, a3
-4000247b: 128c beqz.n a2, 40002480 <__fixsfdi+0x34>
-4000247d: ffc332 addi a3, a3, -1
-40002480: f01d retw.n
-40002482: 020c movi.n a2, 0
-40002484: a12300 sll a2, a3
-40002487: 913030 srl a3, a3
-4000248a: fff906 j 40002472 <__fixsfdi+0x26>
-4000248d: 114270 slli a4, a2, 9
-40002490: 048c beqz.n a4, 40002494 <__fixsfdi+0x48>
-40002492: 020c movi.n a2, 0
-40002494: 117680 slli a7, a6, 8
-40002497: 0052d6 bgez a2, 400024a0 <__fixsfdi+0x54>
-4000249a: 073d mov.n a3, a7
-4000249c: 020c movi.n a2, 0
-4000249e: f01d retw.n
-400024a0: 370b addi.n a3, a7, -1
-400024a2: f27c movi.n a2, -1
-400024a4: f01d retw.n
-400024a6: 030c movi.n a3, 0
-400024a8: 020c movi.n a2, 0
-400024aa: f01d retw.n
-
-400024ac <__fixunssfsi>:
-400024ac: 002136 entry a1, 16
-400024af: f88a61 l32r a6, 400006d8 <_stext+0x178>
-400024b2: 264267 ball a2, a6, 400024dc <__fixunssfsi+0x30>
-400024b5: 754720 extui a4, a2, 23, 8
-400024b8: 81c442 addi a4, a4, -127
-400024bb: 26c4e6 bgei a4, 32, 400024e5 <__fixunssfsi+0x39>
-400024be: 02f496 bltz a4, 400024f1 <__fixunssfsi+0x45>
-400024c1: 207260 or a7, a2, a6
-400024c4: 115780 slli a5, a7, 8
-400024c7: 441b addi.n a4, a4, 1
-400024c9: 28c426 beqi a4, 32, 400024f5 <__fixunssfsi+0x49>
-400024cc: 401400 ssl a4
-400024cf: 915050 srl a5, a5
-400024d2: 602050 neg a2, a5
-400024d5: b32570 movgez a2, a5, a7
-400024d8: f01d retw.n
-400024da: 700000 lsi f0, a0, 0x1c0
-400024dd: 8c1142 l16ui a4, a1, 0x118
-400024e0: f27c24 lsi f2, a12, 0x3c8
-400024e3: f01d retw.n
-400024e5: 114680 slli a4, a6, 8
-400024e8: f57c movi.n a5, -1
-400024ea: b34520 movgez a4, a5, a2
-400024ed: 042d mov.n a2, a4
-400024ef: f01d retw.n
-400024f1: 020c movi.n a2, 0
-400024f3: f01d retw.n
-400024f5: 003296 bltz a2, 400024fc <__fixunssfsi+0x50>
-400024f8: 052d mov.n a2, a5
-400024fa: f01d retw.n
-400024fc: 112680 slli a2, a6, 8
-400024ff: f01d retw.n
-40002501: 000000 ill
-
-40002504 <__fixunssfdi>:
-40002504: 002136 entry a1, 16
-40002507: f87461 l32r a6, 400006d8 <_stext+0x178>
-4000250a: 3b4267 ball a2, a6, 40002549 <__fixunssfdi+0x45>
-4000250d: 754720 extui a4, a2, 23, 8
-40002510: 81c442 addi a4, a4, -127
-40002513: 3ed4e6 bgei a4, 64, 40002555 <__fixunssfdi+0x51>
-40002516: 046496 bltz a4, 40002560 <__fixunssfdi+0x5c>
-40002519: 207260 or a7, a2, a6
-4000251c: 113780 slli a3, a7, 8
-4000251f: 441b addi.n a4, a4, 1
-40002521: 43d426 beqi a4, 64, 40002568 <__fixunssfdi+0x64>
-40002524: 401400 ssl a4
-40002527: 13c4e6 bgei a4, 32, 4000253e <__fixunssfdi+0x3a>
-4000252a: 912030 srl a2, a3
-4000252d: 030c movi.n a3, 0
-4000252f: 0097d6 bgez a7, 4000253c <__fixunssfdi+0x38>
-40002532: 602020 neg a2, a2
-40002535: 603030 neg a3, a3
-40002538: 028c beqz.n a2, 4000253c <__fixunssfdi+0x38>
-4000253a: 330b addi.n a3, a3, -1
-4000253c: f01d retw.n
-4000253e: 020c movi.n a2, 0
-40002540: 812320 src a2, a3, a2
-40002543: 913030 srl a3, a3
-40002546: fff946 j 4000252f <__fixunssfdi+0x2b>
-40002549: 114270 slli a4, a2, 9
-4000254c: 548c beqz.n a4, 40002555 <__fixunssfdi+0x51>
-4000254e: f37c movi.n a3, -1
-40002550: f27c movi.n a2, -1
-40002552: f01d retw.n
-40002554: 52d600 lsi f0, a6, 0x148
-40002557: ff .byte 0xff
-40002558: 113680 slli a3, a6, 8
-4000255b: 020c movi.n a2, 0
-4000255d: f01d retw.n
-4000255f: 030c00 rsr.scompare1 a0
-40002562: 020c movi.n a2, 0
-40002564: f01d retw.n
-40002566: 960000 lsi f0, a0, 0x258
-40002569: 0cfec7 bbsi a14, 28, 40002579 <__fixunssfdi+0x75>
-4000256c: f01d02 l16ui a0, a13, 0x1e0
-4000256f: c56700 extui a6, a0, 23, 13
-40002572: 4008 l32i.n a0, a0, 16
-40002574: 201173 lsi f7, a1, 128
-40002577: 162077 blt a0, a7, 40002591 <__adddf3+0x1>
-4000257a: 1d0017 bnone a0, a1, 4000259b <__adddf3+0xb>
-4000257d: 053df0 extui a3, a15, 29, 1
-40002580: 042d mov.n a2, a4
-40002582: f01d retw.n
-40002584: 117650 slli a7, a6, 11
-40002587: 305570 xor a5, a5, a7
-4000258a: 005886 j 400026f0 <__subdf3+0xc>
-4000258d: 000000 ill
-
-40002590 <__adddf3>:
-40002590: 002136 entry a1, 16
-40002593: f85461 l32r a6, 400006e4 <_stext+0x184>
-40002596: 307350 xor a7, a3, a5
-40002599: fe7796 bltz a7, 40002584 <__fixunssfdi+0x80>
-4000259c: d04367 ball a3, a6, 40002570 <__fixunssfdi+0x6c>
-4000259f: db4567 ball a5, a6, 4000257e <__fixunssfdi+0x7a>
-400025a2: b57430 extui a7, a3, 20, 12
-400025a5: b58450 extui a8, a5, 20, 12
-400025a8: 783787 bltu a7, a8, 40002624 <__adddf3+0x94>
-400025ab: 310567 bnone a5, a6, 400025e0 <__adddf3+0x50>
-400025ae: 205560 or a5, a5, a6
-400025b1: 115550 slli a5, a5, 11
-400025b4: 415b50 srli a5, a5, 11
-400025b7: c0a780 sub a10, a7, a8
-400025ba: 3ecaf6 bgeui a10, 32, 400025fc <__adddf3+0x6c>
-400025bd: 400a00 ssr a10
-400025c0: 00a092 movi a9, 0
-400025c3: 819490 src a9, a4, a9
-400025c6: 814540 src a4, a5, a4
-400025c9: 915050 srl a5, a5
-400025cc: 224a add.n a2, a2, a4
-400025ce: 335a add.n a3, a3, a5
-400025d0: 01b247 bgeu a2, a4, 400025d5 <__adddf3+0x45>
-400025d3: 331b addi.n a3, a3, 1
-400025d5: b5a430 extui a10, a3, 20, 12
-400025d8: 761a77 beq a10, a7, 40002652 <__adddf3+0xc2>
-400025db: 078d mov.n a8, a7
-400025dd: 0028c6 j 40002684 <__adddf3+0xf4>
-400025e0: 115540 slli a5, a5, 12
-400025e3: 415c50 srli a5, a5, 12
-400025e6: 040367 bnone a3, a6, 400025ee <__adddf3+0x5e>
-400025e9: 881b addi.n a8, a8, 1
-400025eb: fff206 j 400025b7 <__adddf3+0x27>
-400025ee: 224a add.n a2, a2, a4
-400025f0: 335a add.n a3, a3, a5
-400025f2: 02b247 bgeu a2, a4, 400025f8 <__adddf3+0x68>
-400025f5: 01c332 addi a3, a3, 1
-400025f8: f01d retw.n
-400025fa: f60000 lsi f0, a0, 0x3d8
-400025fd: f8da add.n a15, a8, a13
-400025ff: 400a00 ssr a10
-40002602: a1b400 sll a11, a4
-40002605: 819540 src a9, a5, a4
-40002608: 914050 srl a4, a5
-4000260b: 050c movi.n a5, 0
-4000260d: fbbb16 beqz a11, 400025cc <__adddf3+0x3c>
-40002610: 2099a0 or a9, a9, a10
-40002613: ffed46 j 400025cc <__adddf3+0x3c>
-40002616: 400000 ssr a0
-40002619: 301133 lsi f3, a1, 192
-4000261c: 413c movi.n a1, 52
-4000261e: 771b addi.n a7, a7, 1
-40002620: 000306 j 40002630 <__adddf3+0xa0>
-40002623: 036700 lsi f0, a7, 12
-40002626: 3360f0 clamps a6, a0, 22
-40002629: 335020 clamps a5, a0, 9
-4000262c: 3b3011 l32r a1, 3ffd12ec <_bss_end_btdm+0x1137c>
-4000262f: a87041 l32r a4, 3ffec7f0 <__stack_app+0x49c0>
-40002632: caf6c0 float.s f15, a6, 12
-40002635: 002d mov.n a2, a0
-40002637: 400a add.n a4, a0, a0
-40002639: a19200 sll a9, a2
-4000263c: 812320 src a2, a3, a2
-4000263f: 913030 srl a3, a3
-40002642: 224a add.n a2, a2, a4
-40002644: 803350 add a3, a3, a5
-40002647: 01b247 bgeu a2, a4, 4000264c <__adddf3+0xbc>
-4000264a: 331b addi.n a3, a3, 1
-4000264c: b5a430 extui a10, a3, 20, 12
-4000264f: 319a87 bne a10, a8, 40002684 <__adddf3+0xf4>
-40002652: 00a9d6 bgez a9, 40002660 <__adddf3+0xd0>
-40002655: 221b addi.n a2, a2, 1
-40002657: 061216 beqz a2, 400026bc <__adddf3+0x12c>
-4000265a: 1199f0 slli a9, a9, 1
-4000265d: 053916 beqz a9, 400026b4 <__adddf3+0x124>
-40002660: f01d retw.n
-40002662: f60000 lsi f0, a0, 0x3d8
-40002665: 16da add.n a1, a6, a13
-40002667: 400a00 ssr a10
-4000266a: a1b200 sll a11, a2
-4000266d: 819320 src a9, a3, a2
-40002670: 912030 srl a2, a3
-40002673: 030c movi.n a3, 0
-40002675: fc9b16 beqz a11, 40002642 <__adddf3+0xb2>
-40002678: 2099a0 or a9, a9, a10
-4000267b: fff0c6 j 40002642 <__adddf3+0xb2>
-4000267e: 053d mov.n a3, a5
-40002680: 042d mov.n a2, a4
-40002682: f01d retw.n
-40002684: 02ad mov.n a10, a2
-40002686: 404100 ssai 1
-40002689: 812320 src a2, a3, a2
-4000268c: 913030 srl a3, a3
-4000268f: 881b addi.n a8, a8, 1
-40002691: 0188d0 slli a8, a8, 19
-40002694: 338a add.n a3, a3, a8
-40002696: 0a4367 ball a3, a6, 400026a4 <__adddf3+0x114>
-40002699: 056a07 bbci a10, 0, 400026a2 <__adddf3+0x112>
-4000269c: 221b addi.n a2, a2, 1
-4000269e: a29c beqz.n a2, 400026bc <__adddf3+0x12c>
-400026a0: 099c beqz.n a9, 400026b4 <__adddf3+0x124>
-400026a2: f01d retw.n
-400026a4: 020c movi.n a2, 0
-400026a6: b53430 extui a3, a3, 20, 12
-400026a9: 0133c0 slli a3, a3, 20
-400026ac: 1188f0 slli a8, a8, 1
-400026af: 203380 or a3, a3, a8
-400026b2: f01d retw.n
-400026b4: 412120 srli a2, a2, 1
-400026b7: 1122f0 slli a2, a2, 1
-400026ba: f01d retw.n
-400026bc: 331b addi.n a3, a3, 1
-400026be: f01d retw.n
-400026c0: 05c567 bnall a5, a6, 400026c9 <__adddf3+0x139>
-400026c3: f80941 l32r a4, 400006e8 <_stext+0x188>
-400026c6: 203340 or a3, a3, a4
-400026c9: f01d retw.n
-400026cb: 765000 lsi f0, a0, 0x1d8
-400026ce: 357011 l32r a1, 3ffcfc90 <_bss_end_btdm+0xfd20>
-400026d1: 042d30 extui a2, a3, 13, 1
-400026d4: f01d retw.n
-400026d6: 500000 lsi f0, a0, 0x140
-400026d9: 701176 bt b1, 4000274d <__subdf3+0x69>
-400026dc: 863055 call4 3ff889e4 <__month_lengths-0xd6b8>
-400026df: ae .byte 0xae
-400026e0: ff .byte 0xff
-400026e1: 000000 ill
-
-400026e4 <__subdf3>:
-400026e4: 002136 entry a1, 16
-400026e7: f7ff61 l32r a6, 400006e4 <_stext+0x184>
-400026ea: 307350 xor a7, a3, a5
-400026ed: fe7796 bltz a7, 400026d8 <__adddf3+0x148>
-400026f0: cc4367 ball a3, a6, 400026c0 <__adddf3+0x130>
-400026f3: d54567 ball a5, a6, 400026cc <__adddf3+0x13c>
-400026f6: a57430 extui a7, a3, 20, 11
-400026f9: a58450 extui a8, a5, 20, 11
-400026fc: 7a3357 bltu a3, a5, 4000277a <__subdf3+0x96>
-400026ff: 411357 beq a3, a5, 40002744 <__subdf3+0x60>
-40002702: 4a0567 bnone a5, a6, 40002750 <__subdf3+0x6c>
-40002705: 205560 or a5, a5, a6
-40002708: 115550 slli a5, a5, 11
-4000270b: 415b50 srli a5, a5, 11
-4000270e: c0a780 sub a10, a7, a8
-40002711: 4bcaf6 bgeui a10, 32, 40002760 <__subdf3+0x7c>
-40002714: 400a00 ssr a10
-40002717: 090c movi.n a9, 0
-40002719: 819490 src a9, a4, a9
-4000271c: 814540 src a4, a5, a4
-4000271f: 915050 srl a5, a5
-40002722: c03350 sub a3, a3, a5
-40002725: 01b247 bgeu a2, a4, 4000272a <__subdf3+0x46>
-40002728: 330b addi.n a3, a3, -1
-4000272a: c02240 sub a2, a2, a4
-4000272d: 609090 neg a9, a9
-40002730: 598c beqz.n a9, 40002739 <__subdf3+0x55>
-40002732: 530b addi.n a5, a3, -1
-40002734: 833520 moveqz a3, a5, a2
-40002737: 220b addi.n a2, a2, -1
-40002739: a5a430 extui a10, a3, 20, 11
-4000273c: 7e1a77 beq a10, a7, 400027be <__subdf3+0xda>
-4000273f: 003146 j 40002808 <__subdf3+0x124>
-40002742: 470000 lsi f0, a0, 0x11c
-40002745: 273232 lsi f3, a2, 156
-40002748: 0cb734 lsi f3, a7, 48
-4000274b: 020c03 lsi f0, a12, 8
-4000274e: f01d retw.n
-40002750: 115540 slli a5, a5, 12
-40002753: 415c50 srli a5, a5, 12
-40002756: b40367 bnone a3, a6, 4000270e <__subdf3+0x2a>
-40002759: 881b addi.n a8, a8, 1
-4000275b: ffebc6 j 4000270e <__subdf3+0x2a>
-4000275e: f60000 lsi f0, a0, 0x3d8
-40002761: eada add.n a14, a10, a13
-40002763: 400a00 ssr a10
-40002766: a1b400 sll a11, a4
-40002769: 819540 src a9, a5, a4
-4000276c: 914050 srl a4, a5
-4000276f: 050c movi.n a5, 0
-40002771: fadb16 beqz a11, 40002722 <__subdf3+0x3e>
-40002774: 2099a0 or a9, a9, a10
-40002777: ffe9c6 j 40002722 <__subdf3+0x3e>
-4000277a: 520367 bnone a3, a6, 400027d0 <__subdf3+0xec>
-4000277d: 203360 or a3, a3, a6
-40002780: 113350 slli a3, a3, 11
-40002783: 413b30 srli a3, a3, 11
-40002786: c0a870 sub a10, a8, a7
-40002789: 53caf6 bgeui a10, 32, 400027e0 <__subdf3+0xfc>
-4000278c: 400a00 ssr a10
-4000278f: 00a092 movi a9, 0
-40002792: 819290 src a9, a2, a9
-40002795: 812320 src a2, a3, a2
-40002798: 913030 srl a3, a3
-4000279b: 11b650 slli a11, a6, 11
-4000279e: 3055b0 xor a5, a5, a11
-400027a1: c02420 sub a2, a4, a2
-400027a4: c03530 sub a3, a5, a3
-400027a7: 01b427 bgeu a4, a2, 400027ac <__subdf3+0xc8>
-400027aa: 330b addi.n a3, a3, -1
-400027ac: 609090 neg a9, a9
-400027af: 598c beqz.n a9, 400027b8 <__subdf3+0xd4>
-400027b1: 530b addi.n a5, a3, -1
-400027b3: 833520 moveqz a3, a5, a2
-400027b6: 220b addi.n a2, a2, -1
-400027b8: a5a430 extui a10, a3, 20, 11
-400027bb: 499a87 bne a10, a8, 40002808 <__subdf3+0x124>
-400027be: 00a9d6 bgez a9, 400027cc <__subdf3+0xe8>
-400027c1: 221b addi.n a2, a2, 1
-400027c3: 075216 beqz a2, 4000283c <__subdf3+0x158>
-400027c6: 1199f0 slli a9, a9, 1
-400027c9: 067916 beqz a9, 40002834 <__subdf3+0x150>
-400027cc: f01d retw.n
-400027ce: 400000 ssr a0
-400027d1: 301133 lsi f3, a1, 192
-400027d4: 413c movi.n a1, 52
-400027d6: ac0567 bnone a5, a6, 40002786 <__subdf3+0xa2>
-400027d9: 771b addi.n a7, a7, 1
-400027db: ffe9c6 j 40002786 <__subdf3+0xa2>
-400027de: f60000 lsi f0, a0, 0x3d8
-400027e1: 18da add.n a1, a8, a13
-400027e3: 400a00 ssr a10
-400027e6: a1b200 sll a11, a2
-400027e9: 819320 src a9, a3, a2
-400027ec: 912030 srl a2, a3
-400027ef: 113650 slli a3, a6, 11
-400027f2: fabb16 beqz a11, 400027a1 <__subdf3+0xbd>
-400027f5: 2099a0 or a9, a9, a10
-400027f8: ffe946 j 400027a1 <__subdf3+0xbd>
-400027fb: 765000 lsi f0, a0, 0x1d8
-400027fe: 357011 l32r a1, 3ffcfdc0 <_bss_end_btdm+0xfe50>
-40002801: 042d30 extui a2, a3, 13, 1
-40002804: f01d retw.n
-40002806: 400000 ssr a0
-40002809: bc1183 lsi f8, a1, 0x2f0
-4000280c: 6018 l32i.n a1, a0, 24
-4000280e: 40f8 l32i.n a15, a0, 16
-40002810: 418c80 srli a8, a8, 12
-40002813: 4ea6a7 bge a6, a10, 40002865 <__subdf3+0x181>
-40002816: 661b addi.n a6, a6, 1
-40002818: 401600 ssl a6
-4000281b: 818820 src a8, a8, a2
-4000281e: 812290 src a2, a2, a9
-40002821: a19900 sll a9, a9
-40002824: b53430 extui a3, a3, 20, 12
-40002827: c03360 sub a3, a3, a6
-4000282a: 0133c0 slli a3, a3, 20
-4000282d: 338a add.n a3, a3, a8
-4000282f: ffe2c6 j 400027be <__subdf3+0xda>
-40002832: 200000 or a0, a0, a0
-40002835: f04121 l32r a2, 3fffe93c <__stack_app+0x16b0c>
-40002838: 1d1122 l16ui a2, a1, 58
-4000283b: 331bf0 clamps a1, a11, 22
-4000283e: f01d retw.n
-40002840: 40f260 nsau a6, a2
-40002843: 15c662 addi a6, a6, 21
-40002846: 1b2a67 blt a10, a6, 40002865 <__subdf3+0x181>
-40002849: cbc6b6 bltui a6, 32, 40002818 <__subdf3+0x134>
-4000284c: 401600 ssl a6
-4000284f: 818290 src a8, a2, a9
-40002852: a12900 sll a2, a9
-40002855: 090c movi.n a9, 0
-40002857: b53430 extui a3, a3, 20, 12
-4000285a: c03360 sub a3, a3, a6
-4000285d: 0133c0 slli a3, a3, 20
-40002860: 338a add.n a3, a3, a8
-40002862: ffd606 j 400027be <__subdf3+0xda>
-40002865: 0a6d mov.n a6, a10
-40002867: fff786 j 40002849 <__subdf3+0x165>
-4000286a: f00000 subx8 a0, a0, a0
-4000286d: 501155 call4 40052984
-40002870: 404151 l32r a5, 3ffd2974 <_bss_end_btdm+0x12a04>
-40002873: bc20a5 call8 3ffbea7c
-40002876: 9cba add.n a9, a12, a11
-40002878: f5a055 call4 3fff8280 <__stack_app+0x10450>
-4000287b: caa240 float.s f10, a2, 4
-4000287e: 1a00f5 call12 4001c88c
-40002881: 554040 extui a4, a4, 16, 6
-40002884: 440081 l32r a8, 3ffd3884 <_bss_end_btdm+0x13914>
-40002887: 190ca1 l32r a10, 3ffc8cb8 <_bss_end_btdm+0x8d48>
-4000288a: c099a0 sub a9, a9, a10
-4000288d: 0036c6 j 4000296c <__divdf3+0x18>
-40002890: 40f4a0 nsau a10, a4
-40002893: f5caa2 addi a10, a10, -11
-40002896: 196c movi.n a9, -31
-40002898: c099a0 sub a9, a9, a10
-4000289b: 401a00 ssl a10
-4000289e: 007a96 bltz a10, 400028a9 <__subdf3+0x1c5>
-400028a1: a15400 sll a5, a4
-400028a4: 040c movi.n a4, 0
-400028a6: 003086 j 4000296c <__divdf3+0x18>
-400028a9: 915040 srl a5, a4
-400028ac: a14400 sll a4, a4
-400028af: 002e46 j 4000296c <__divdf3+0x18>
-400028b2: f00000 subx8 a0, a0, a0
-400028b5: 301133 lsi f3, a1, 192
-400028b8: 304131 l32r a3, 3ffce9bc <_bss_end_btdm+0xea4c>
-400028bb: 702022 l32i a2, a0, 0x1c0
-400028be: 3f .byte 0x3f
-400028bf: 331005 call0 400359c0
-400028c2: 336001 l32r a0, 3ffcf644 <_bss_end_btdm+0xf6d4>
-400028c5: 42cc20 xorb b12, b12, b2
-400028c8: f78841 l32r a4, 400006e8 <_stext+0x188>
-400028cb: 203340 or a3, a3, a4
-400028ce: 020c movi.n a2, 0
-400028d0: f01d retw.n
-400028d2: f00000 subx8 a0, a0, a0
-400028d5: 301133 lsi f3, a1, 192
-400028d8: 204131 l32r a3, 3ffca9dc <_bss_end_btdm+0xaa6c>
-400028db: bc20a3 lsi f10, a0, 0x2f0
-400028de: 9cba add.n a9, a12, a11
-400028e0: f3a053 lsi f5, a0, 0x3cc
-400028e3: caa240 float.s f10, a2, 4
-400028e6: 1a00f5 call12 4001c8f4
-400028e9: 332040 clamps a2, a0, 11
-400028ec: 220081 l32r a8, 3ffcb0ec <_bss_end_btdm+0xb17c>
-400028ef: 180ca1 l32r a10, 3ffc8920 <_bss_end_btdm+0x89b0>
-400028f2: c088a0 sub a8, a8, a10
-400028f5: 001d86 j 4000296f <__divdf3+0x1b>
-400028f8: 40f2a0 nsau a10, a2
-400028fb: f5caa2 addi a10, a10, -11
-400028fe: 186c movi.n a8, -31
-40002900: c088a0 sub a8, a8, a10
-40002903: 401a00 ssl a10
-40002906: 007a96 bltz a10, 40002911 <__subdf3+0x22d>
-40002909: a13200 sll a3, a2
-4000290c: 020c movi.n a2, 0
-4000290e: 001746 j 4000296f <__divdf3+0x1b>
-40002911: 913020 srl a3, a2
-40002914: a12200 sll a2, a2
-40002917: 001506 j 4000296f <__divdf3+0x1b>
-4000291a: 700000 lsi f0, a0, 0x1c0
-4000291d: 3f .byte 0x3f
-4000291e: 331005 call0 40035a20
-40002921: 020c01 l32r a0, 3ffc3154 <_bss_end_btdm+0x31e4>
-40002924: f01d retw.n
-40002926: 500000 lsi f0, a0, 0x140
-40002929: 7f .byte 0x7f
-4000292a: 771005 call0 40079a2c <__bss_start+0x9a2c>
-4000292d: 337001 l32r a0, 3ffcf6f0 <_bss_end_btdm+0xf780>
-40002930: c56730 extui a6, a3, 23, 13
-40002933: 6d4105 call0 4006fd44 <__udivmoddi4+0xb294>
-40002936: 3340f7 ball a0, a15, 4000296d <__divdf3+0x19>
-40002939: f01d20 subx8 a1, a13, a2
-4000293c: 118540 slli a8, a5, 12
-4000293f: 208840 or a8, a8, a4
-40002942: fd6816 beqz a8, 4000291c <__subdf3+0x238>
-40002945: 053d mov.n a3, a5
-40002947: 042d mov.n a2, a4
-40002949: f01d retw.n
-4000294b: 324700 orbc b4, b7, b0
-4000294e: c63a add.n a12, a6, a3
-40002950: 0f .byte 0xf
-40002951: 000000 ill
-
-40002954 <__divdf3>:
-40002954: 002136 entry a1, 16
-40002957: f76361 l32r a6, 400006e4 <_stext+0x184>
-4000295a: 307350 xor a7, a3, a5
-4000295d: c74367 ball a3, a6, 40002928 <__subdf3+0x244>
-40002960: d84567 ball a5, a6, 4000293c <__subdf3+0x258>
-40002963: a58430 extui a8, a3, 20, 11
-40002966: a59450 extui a9, a5, 20, 11
-40002969: eff916 beqz a9, 4000286c <__subdf3+0x188>
-4000296c: f64816 beqz a8, 400028d4 <__subdf3+0x1f0>
-4000296f: c08890 sub a8, a8, a9
-40002972: f75ea1 l32r a10, 400006ec <_stext+0x18c>
-40002975: 203360 or a3, a3, a6
-40002978: 1033a0 and a3, a3, a10
-4000297b: 205560 or a5, a5, a6
-4000297e: 1055a0 and a5, a5, a10
-40002981: 404f10 ssai 31
-40002984: 0a3537 bltu a5, a3, 40002992 <__divdf3+0x3e>
-40002987: c11537 beq a5, a3, 4000294c <__subdf3+0x268>
-4000298a: 813320 src a3, a3, a2
-4000298d: a12200 sll a2, a2
-40002990: 880b addi.n a8, a8, -1
-40002992: c03350 sub a3, a3, a5
-40002995: 01b247 bgeu a2, a4, 4000299a <__divdf3+0x46>
-40002998: 330b addi.n a3, a3, -1
-4000299a: c02240 sub a2, a2, a4
-4000299d: 813320 src a3, a3, a2
-400029a0: a12200 sll a2, a2
-400029a3: 0a0c movi.n a10, 0
-400029a5: 1b0c movi.n a11, 1
-400029a7: 493c movi.n a9, 52
-400029a9: 1e8976 loop a9, 400029cb <__divdf3+0x77>
-400029ac: 81aab0 src a10, a10, a11
-400029af: a1bb00 sll a11, a11
-400029b2: 0f3357 bltu a3, a5, 400029c5 <__divdf3+0x71>
-400029b5: 3b1357 beq a3, a5, 400029f4 <__divdf3+0xa0>
-400029b8: bb1b addi.n a11, a11, 1
-400029ba: c03350 sub a3, a3, a5
-400029bd: 01b247 bgeu a2, a4, 400029c2 <__divdf3+0x6e>
-400029c0: 330b addi.n a3, a3, -1
-400029c2: c02240 sub a2, a2, a4
-400029c5: 813320 src a3, a3, a2
-400029c8: a12200 sll a2, a2
-400029cb: fea392 movi a9, 0x3fe
-400029ce: 889a add.n a8, a8, a9
-400029d0: 04d992 addmi a9, a9, 0x400
-400029d3: 39b897 bgeu a8, a9, 40002a10 <__divdf3+0xbc>
-400029d6: 073357 bltu a3, a5, 400029e1 <__divdf3+0x8d>
-400029d9: 1f1357 beq a3, a5, 400029fc <__divdf3+0xa8>
-400029dc: bb1b addi.n a11, a11, 1
-400029de: 086b16 beqz a11, 40002a68 <__divdf3+0x114>
-400029e1: 0b2d mov.n a2, a11
-400029e3: 0188c0 slli a8, a8, 20
-400029e6: 3a8a add.n a3, a10, a8
-400029e8: 057f70 extui a7, a7, 31, 1
-400029eb: 017710 slli a7, a7, 31
-400029ee: 203370 or a3, a3, a7
-400029f1: f01d retw.n
-400029f3: b24700 mulsh a4, a7, a0
-400029f6: f286c0 rems a8, a6, a12
-400029f9: ff .byte 0xff
-400029fa: 470000 lsi f0, a0, 0x11c
-400029fd: 47e132 s32c1i a3, a1, 0x11c
-40002a00: 1bd992 addmi a9, a9, 0x1b00
-40002a03: 16bb addi.n a1, a6, 11
-40002a05: 060b addi.n a0, a6, -1
-40002a07: 41b1b0 srli a11, a11, 1
-40002a0a: 11bbf0 slli a11, a11, 1
-40002a0d: fff406 j 400029e1 <__divdf3+0x8d>
-40002a10: 009896 bltz a8, 40002a1d <__divdf3+0xc9>
-40002a13: 891b addi.n a8, a9, 1
-40002a15: 0138c0 slli a3, a8, 20
-40002a18: 020c movi.n a2, 0
-40002a1a: fff286 j 400029e8 <__divdf3+0x94>
-40002a1d: 608080 neg a8, a8
-40002a20: 400800 ssr a8
-40002a23: 0dc8f6 bgeui a8, 32, 40002a34 <__divdf3+0xe0>
-40002a26: a16b00 sll a6, a11
-40002a29: 81bab0 src a11, a10, a11
-40002a2c: 91a0a0 srl a10, a10
-40002a2f: 000486 j 40002a45 <__divdf3+0xf1>
-40002a32: f60000 lsi f0, a0, 0x3d8
-40002a35: 35d8 l32i.n a13, a5, 12
-40002a37: a19b00 sll a9, a11
-40002a3a: 816ab0 src a6, a10, a11
-40002a3d: 91b0a0 srl a11, a10
-40002a40: 0a0c movi.n a10, 0
-40002a42: 202290 or a2, a2, a9
-40002a45: 080c movi.n a8, 0
-40002a47: 203320 or a3, a3, a2
-40002a4a: 338c beqz.n a3, 40002a51 <__divdf3+0xfd>
-40002a4c: 190c movi.n a9, 1
-40002a4e: 206690 or a6, a6, a9
-40002a51: f8c6d6 bgez a6, 400029e1 <__divdf3+0x8d>
-40002a54: bb1b addi.n a11, a11, 1
-40002a56: eb8c beqz.n a11, 40002a68 <__divdf3+0x114>
-40002a58: 1166f0 slli a6, a6, 1
-40002a5b: f82656 bnez a6, 400029e1 <__divdf3+0x8d>
-40002a5e: 41b1b0 srli a11, a11, 1
-40002a61: 11bbf0 slli a11, a11, 1
-40002a64: ffde46 j 400029e1 <__divdf3+0x8d>
-40002a67: aa1b00 floor.s a1, f11, 0
-40002a6a: ffdcc6 j 400029e1 <__divdf3+0x8d>
-40002a6d: 053f70 extui a3, a7, 31, 1
-40002a70: 013310 slli a3, a3, 31
-40002a73: 020c movi.n a2, 0
-40002a75: f01d retw.n
- ...
-
-40002a78 <__fixdfsi>:
-40002a78: 002136 entry a1, 16
-40002a7b: f71a61 l32r a6, 400006e4 <_stext+0x184>
-40002a7e: 264367 ball a3, a6, 40002aa8 <__fixdfsi+0x30>
-40002a81: a54430 extui a4, a3, 20, 11
-40002a84: 955360 extui a5, a6, 19, 10
-40002a87: c04450 sub a4, a4, a5
-40002a8a: 26c4e6 bgei a4, 32, 40002ab4 <__fixdfsi+0x3c>
-40002a8d: 2f14a6 blti a4, 1, 40002ac0 <__fixdfsi+0x48>
-40002a90: 207360 or a7, a3, a6
-40002a93: 404510 ssai 21
-40002a96: 815720 src a5, a7, a2
-40002a99: 401400 ssl a4
-40002a9c: 915050 srl a5, a5
-40002a9f: 602050 neg a2, a5
-40002aa2: b32570 movgez a2, a5, a7
-40002aa5: f01d retw.n
-40002aa7: 434000 min a4, a0, a0
-40002aaa: 442011 l32r a1, 3ffd3b2c <_bss_end_btdm+0x13bbc>
-40002aad: 241620 extui a1, a2, 6, 3
-40002ab0: a03200 addx4 a3, a2, a0
-40002ab3: 465000 lsi f0, a0, 0x118
-40002ab6: 540b11 l32r a1, 3ffd7ae4 <_bss_end_btdm+0x17b74>
-40002ab9: b34530 movgez a4, a5, a3
-40002abc: 042d mov.n a2, a4
-40002abe: f01d retw.n
-40002ac0: 020c movi.n a2, 0
-40002ac2: f01d retw.n
-
-40002ac4 <__fixdfdi>:
-40002ac4: 002136 entry a1, 16
-40002ac7: f70761 l32r a6, 400006e4 <_stext+0x184>
-40002aca: 3f4367 ball a3, a6, 40002b0d <__fixdfdi+0x49>
-40002acd: a54430 extui a4, a3, 20, 11
-40002ad0: 955360 extui a5, a6, 19, 10
-40002ad3: c04450 sub a4, a4, a5
-40002ad6: 3ed4e6 bgei a4, 64, 40002b18 <__fixdfdi+0x54>
-40002ad9: 4d14a6 blti a4, 1, 40002b2a <__fixdfdi+0x66>
-40002adc: 207360 or a7, a3, a6
-40002adf: 404510 ssai 21
-40002ae2: 813720 src a3, a7, a2
-40002ae5: a12200 sll a2, a2
-40002ae8: 401400 ssl a4
-40002aeb: 15c4e6 bgei a4, 32, 40002b04 <__fixdfdi+0x40>
-40002aee: 912030 srl a2, a3
-40002af1: 030c movi.n a3, 0
-40002af3: 0097d6 bgez a7, 40002b00 <__fixdfdi+0x3c>
-40002af6: 602020 neg a2, a2
-40002af9: 603030 neg a3, a3
-40002afc: 028c beqz.n a2, 40002b00 <__fixdfdi+0x3c>
-40002afe: 330b addi.n a3, a3, -1
-40002b00: f01d retw.n
-40002b02: 200000 or a0, a0, a0
-40002b05: 308123 lsip f2, a1, 192
-40002b08: 469130 lsi f3, a1, 0x118
-40002b0b: fff9 s32i.n a15, a15, 60
-40002b0d: 114340 slli a4, a3, 12
-40002b10: 204420 or a4, a4, a2
-40002b13: 148c beqz.n a4, 40002b18 <__fixdfdi+0x54>
-40002b15: 00a032 movi a3, 0
-40002b18: 117650 slli a7, a6, 11
-40002b1b: 0053d6 bgez a3, 40002b24 <__fixdfdi+0x60>
-40002b1e: 073d mov.n a3, a7
-40002b20: 020c movi.n a2, 0
-40002b22: f01d retw.n
-40002b24: 370b addi.n a3, a7, -1
-40002b26: f27c movi.n a2, -1
-40002b28: f01d retw.n
-40002b2a: 030c movi.n a3, 0
-40002b2c: 020c movi.n a2, 0
-40002b2e: f01d retw.n
-
-40002b30 <__fixunsdfsi>:
-40002b30: 002136 entry a1, 16
-40002b33: f6ec61 l32r a6, 400006e4 <_stext+0x184>
-40002b36: 2a4367 ball a3, a6, 40002b64 <__fixunsdfsi+0x34>
-40002b39: a54430 extui a4, a3, 20, 11
-40002b3c: 955460 extui a5, a6, 20, 10
-40002b3f: c04450 sub a4, a4, a5
-40002b42: 2ac4e6 bgei a4, 32, 40002b70 <__fixunsdfsi+0x40>
-40002b45: 033496 bltz a4, 40002b7c <__fixunsdfsi+0x4c>
-40002b48: 207360 or a7, a3, a6
-40002b4b: 404510 ssai 21
-40002b4e: 815720 src a5, a7, a2
-40002b51: 441b addi.n a4, a4, 1
-40002b53: 29c426 beqi a4, 32, 40002b80 <__fixunsdfsi+0x50>
-40002b56: 401400 ssl a4
-40002b59: 915050 srl a5, a5
-40002b5c: 602050 neg a2, a5
-40002b5f: b32570 movgez a2, a5, a7
-40002b62: f01d retw.n
-40002b64: 114340 slli a4, a3, 12
-40002b67: 204420 or a4, a4, a2
-40002b6a: 248c beqz.n a4, 40002b70 <__fixunsdfsi+0x40>
-40002b6c: f27c movi.n a2, -1
-40002b6e: f01d retw.n
-40002b70: 114650 slli a4, a6, 11
-40002b73: f57c movi.n a5, -1
-40002b75: b34530 movgez a4, a5, a3
-40002b78: 042d mov.n a2, a4
-40002b7a: f01d retw.n
-40002b7c: 020c movi.n a2, 0
-40002b7e: f01d retw.n
-40002b80: 004396 bltz a3, 40002b88 <__fixunsdfsi+0x58>
-40002b83: 052d mov.n a2, a5
-40002b85: f01d retw.n
-40002b87: 265000 lsi f0, a0, 152
-40002b8a: f01d11 l32r a1, 3fffec00 <__stack_app+0x16dd0>
-40002b8d: 000000 ill
-
-40002b90 <__truncdfsf2>:
-40002b90: 002136 entry a1, 16
-40002b93: f6d741 l32r a4, 400006f0 <_stext+0x190>
-40002b96: c05340 sub a5, a3, a4
-40002b99: 306350 xor a6, a3, a5
-40002b9c: 054696 bltz a6, 40002bf4 <__truncdfsf2+0x64>
-40002b9f: a56450 extui a6, a5, 20, 11
-40002ba2: 04e616 beqz a6, 40002bf4 <__truncdfsf2+0x64>
-40002ba5: ffa042 movi a4, 255
-40002ba8: 28a647 bge a6, a4, 40002bd4 <__truncdfsf2+0x44>
-40002bab: 404d10 ssai 29
-40002bae: 815520 src a5, a5, a2
-40002bb1: a14200 sll a4, a2
-40002bb4: 056f30 extui a6, a3, 31, 1
-40002bb7: 016610 slli a6, a6, 31
-40002bba: 202650 or a2, a6, a5
-40002bbd: 0074d6 bgez a4, 40002bc8 <__truncdfsf2+0x38>
-40002bc0: 221b addi.n a2, a2, 1
-40002bc2: 1144f0 slli a4, a4, 1
-40002bc5: 003416 beqz a4, 40002bcc <__truncdfsf2+0x3c>
-40002bc8: f01d retw.n
-40002bca: 200000 or a0, a0, a0
-40002bcd: f04121 l32r a2, 3fffecd4 <__stack_app+0x16ea4>
-40002bd0: 1d1122 l16ui a2, a1, 58
-40002bd3: c441f0 extui a4, a15, 1, 13
-40002bd6: c347f6 bgeui a7, 4, 40002b9d <__truncdfsf2+0xd>
-40002bd9: 400a add.n a4, a0, a0
-40002bdb: 201153 lsi f5, a1, 128
-40002bde: 8c2055 call4 3ff8ede4 <__month_lengths-0x72b8>
-40002be1: 414015 call4 40043fe4
-40002be4: 44c041 l32r a4, 3ffd3ee4 <_bss_end_btdm+0x13f74>
-40002be7: 6f3011 l32r a1, 3ffde8a8 <_bss_end_btdm+0x1e938>
-40002bea: 410005 call0 40043bec
-40002bed: 264040 lsi f4, a0, 152
-40002bf0: f01d81 l32r a8, 3fffec64 <__stack_app+0x16e34>
-40002bf3: 643000 extui a3, a0, 0, 7
-40002bf6: a352a5 call8 3ffa6120
-40002bf9: 656080 extui a6, a8, 16, 7
-40002bfc: 661bc0 lsi f12, a11, 0x198
-40002bff: 29c6f6 bgeui a6, 32, 40002c2c <__truncdfsf2+0x9c>
-40002c02: 115530 slli a5, a5, 13
-40002c05: 205530 or a5, a5, a3
-40002c08: 115550 slli a5, a5, 11
-40002c0b: 415b50 srli a5, a5, 11
-40002c0e: 404d10 ssai 29
-40002c11: 815520 src a5, a5, a2
-40002c14: a14200 sll a4, a2
-40002c17: 400600 ssr a6
-40002c1a: a17400 sll a7, a4
-40002c1d: 814540 src a4, a5, a4
-40002c20: 915050 srl a5, a5
-40002c23: f8d716 beqz a7, 40002bb4 <__truncdfsf2+0x24>
-40002c26: 204460 or a4, a4, a6
-40002c29: ffe1c6 j 40002bb4 <__truncdfsf2+0x24>
-40002c2c: 052f30 extui a2, a3, 31, 1
-40002c2f: 012210 slli a2, a2, 31
-40002c32: f01d retw.n
-
-40002c34 <__extendsfdf2>:
-40002c34: 002136 entry a1, 16
-40002c37: 055f20 extui a5, a2, 31, 1
-40002c3a: 015510 slli a5, a5, 31
-40002c3d: 1142f0 slli a4, a2, 1
-40002c40: 756720 extui a6, a2, 23, 8
-40002c43: a6ac beqz.n a6, 40002c71 <__extendsfdf2+0x3d>
-40002c45: 661b addi.n a6, a6, 1
-40002c47: 11f626 beqi a6, 0x100, 40002c5c <__extendsfdf2+0x28>
-40002c4a: 414440 srli a4, a4, 4
-40002c4d: 012230 slli a2, a2, 29
-40002c50: f6a861 l32r a6, 400006f0 <_stext+0x190>
-40002c53: 446a add.n a4, a4, a6
-40002c55: 203450 or a3, a4, a5
-40002c58: f01d retw.n
-40002c5a: 410000 srli a0, a0, 0
-40002c5d: 70f6a2 s32ri a10, a6, 0x1c0
-40002c60: 8c1172 l16ui a7, a1, 0x118
-40002c63: 665047 bbc a0, a4, 40002ccd <__addvdi3+0x11>
-40002c66: 446011 l32r a1, 3ffd3de8 <_bss_end_btdm+0x13e78>
-40002c69: 345020 extui a5, a2, 0, 4
-40002c6c: 020c20 andb b0, b12, b2
-40002c6f: f01d retw.n
-40002c71: ff5416 beqz a4, 40002c6a <__extendsfdf2+0x36>
-40002c74: 40f470 nsau a7, a4
-40002c77: f8c772 addi a7, a7, -8
-40002c7a: 401700 ssl a7
-40002c7d: a14400 sll a4, a4
-40002c80: 012430 slli a2, a4, 29
-40002c83: 414340 srli a4, a4, 3
-40002c86: 7fa362 movi a6, 0x37f
-40002c89: c06670 sub a6, a6, a7
-40002c8c: 0166c0 slli a6, a6, 20
-40002c8f: 446a add.n a4, a4, a6
-40002c91: 203450 or a3, a4, a5
-40002c94: f01d retw.n
- ...
-
-40002c98 <__addvsi3>:
-40002c98: 004136 entry a1, 32
-40002c9b: 028d mov.n a8, a2
-40002c9d: 223a add.n a2, a2, a3
-40002c9f: 007396 bltz a3, 40002caa <__addvsi3+0x12>
-40002ca2: 130c movi.n a3, 1
-40002ca4: 092287 blt a2, a8, 40002cb1 <__addvsi3+0x19>
-40002ca7: 000106 j 40002caf <__addvsi3+0x17>
-40002caa: 130c movi.n a3, 1
-40002cac: 012827 blt a8, a2, 40002cb1 <__addvsi3+0x19>
-40002caf: 030c movi.n a3, 0
-40002cb1: 743030 extui a3, a3, 0, 8
-40002cb4: 138c beqz.n a3, 40002cb9 <__addvsi3+0x21>
-40002cb6: 08eee5 call8 4000bba4
-40002cb9: f01d retw.n
- ...
-
-40002cbc <__addvdi3>:
-40002cbc: 004136 entry a1, 32
-40002cbf: 029d mov.n a9, a2
-40002cc1: 224a add.n a2, a2, a4
-40002cc3: 038d mov.n a8, a3
-40002cc5: 130c movi.n a3, 1
-40002cc7: 013297 bltu a2, a9, 40002ccc <__addvdi3+0x10>
-40002cca: 030c movi.n a3, 0
-40002ccc: a85a add.n a10, a8, a5
-40002cce: 33aa add.n a3, a3, a10
-40002cd0: 00d596 bltz a5, 40002ce1 <__addvdi3+0x25>
-40002cd3: 150c movi.n a5, 1
-40002cd5: 152387 blt a3, a8, 40002cee <__addvdi3+0x32>
-40002cd8: 109837 bne a8, a3, 40002cec <__addvdi3+0x30>
-40002cdb: 0f3297 bltu a2, a9, 40002cee <__addvdi3+0x32>
-40002cde: 000286 j 40002cec <__addvdi3+0x30>
-40002ce1: 150c movi.n a5, 1
-40002ce3: 072837 blt a8, a3, 40002cee <__addvdi3+0x32>
-40002ce6: 029387 bne a3, a8, 40002cec <__addvdi3+0x30>
-40002ce9: 013927 bltu a9, a2, 40002cee <__addvdi3+0x32>
-40002cec: 050c movi.n a5, 0
-40002cee: 745050 extui a5, a5, 0, 8
-40002cf1: 158c beqz.n a5, 40002cf6 <__addvdi3+0x3a>
-40002cf3: 08eb25 call8 4000bba4
-40002cf6: f01d retw.n
-
-40002cf8 <__subvsi3>:
-40002cf8: 004136 entry a1, 32
-40002cfb: 028d mov.n a8, a2
-40002cfd: c02230 sub a2, a2, a3
-40002d00: 00a396 bltz a3, 40002d0e <__subvsi3+0x16>
-40002d03: 130c movi.n a3, 1
-40002d05: 0c2827 blt a8, a2, 40002d15 <__subvsi3+0x1d>
-40002d08: 0001c6 j 40002d13 <__subvsi3+0x1b>
-40002d0b: 000000 ill
-40002d0e: 130c movi.n a3, 1
-40002d10: 012287 blt a2, a8, 40002d15 <__subvsi3+0x1d>
-40002d13: 030c movi.n a3, 0
-40002d15: 743030 extui a3, a3, 0, 8
-40002d18: 138c beqz.n a3, 40002d1d <__subvsi3+0x25>
-40002d1a: 08e8a5 call8 4000bba4
-40002d1d: f01d retw.n
- ...
-
-40002d20 <__subvdi3>:
-40002d20: 004136 entry a1, 32
-40002d23: 029d mov.n a9, a2
-40002d25: c02240 sub a2, a2, a4
-40002d28: 038d mov.n a8, a3
-40002d2a: 130c movi.n a3, 1
-40002d2c: 013927 bltu a9, a2, 40002d31 <__subvdi3+0x11>
-40002d2f: 030c movi.n a3, 0
-40002d31: c0a850 sub a10, a8, a5
-40002d34: c03a30 sub a3, a10, a3
-40002d37: 00e596 bltz a5, 40002d49 <__subvdi3+0x29>
-40002d3a: 150c movi.n a5, 1
-40002d3c: 162837 blt a8, a3, 40002d56 <__subvdi3+0x36>
-40002d3f: 119387 bne a3, a8, 40002d54 <__subvdi3+0x34>
-40002d42: 103927 bltu a9, a2, 40002d56 <__subvdi3+0x36>
-40002d45: 0002c6 j 40002d54 <__subvdi3+0x34>
-40002d48: 150c00 extui a0, a0, 28, 2
-40002d4b: 072387 blt a3, a8, 40002d56 <__subvdi3+0x36>
-40002d4e: 029837 bne a8, a3, 40002d54 <__subvdi3+0x34>
-40002d51: 013297 bltu a2, a9, 40002d56 <__subvdi3+0x36>
-40002d54: 050c movi.n a5, 0
-40002d56: 745050 extui a5, a5, 0, 8
-40002d59: 158c beqz.n a5, 40002d5e <__subvdi3+0x3e>
-40002d5b: 08e4a5 call8 4000bba4
-40002d5e: f01d retw.n
-
-40002d60 <__mulvsi3>:
-40002d60: 004136 entry a1, 32
-40002d63: 028d mov.n a8, a2
-40002d65: 822230 mull a2, a2, a3
-40002d68: b28830 mulsh a8, a8, a3
-40002d6b: 313f20 srai a3, a2, 31
-40002d6e: 021387 beq a3, a8, 40002d74 <__mulvsi3+0x14>
-40002d71: 08e325 call8 4000bba4
-40002d74: f01d retw.n
- ...
-
-40002d78 <__mulvdi3>:
-40002d78: 004136 entry a1, 32
-40002d7b: 318f20 srai a8, a2, 31
-40002d7e: 4f9387 bne a3, a8, 40002dd1 <__mulvdi3+0x59>
-40002d81: 313f40 srai a3, a4, 31
-40002d84: 089537 bne a5, a3, 40002d90 <__mulvdi3+0x18>
-40002d87: b23240 mulsh a3, a2, a4
-40002d8a: 822240 mull a2, a2, a4
-40002d8d: f01d retw.n
-40002d8f: 852000 extui a2, a0, 16, 9
-40002d92: a520a2 l32i a10, a0, 0x294
-40002d95: b82082 l32i a8, a0, 0x2e0
-40002d98: c420c0 extui a2, a12, 0, 13
-40002d9b: 342082 l32i a8, a0, 208
-40002d9e: 0a9da2 l16si a10, a13, 20
-40002da1: a38b50 movltz a8, a11, a5
-40002da4: 0112d6 bgez a2, 40002db9 <__mulvdi3+0x41>
-40002da7: c04a40 sub a4, a10, a4
-40002daa: 1b0c movi.n a11, 1
-40002dac: 013a47 bltu a10, a4, 40002db1 <__mulvdi3+0x39>
-40002daf: 0b0c movi.n a11, 0
-40002db1: c08850 sub a8, a8, a5
-40002db4: 049d mov.n a9, a4
-40002db6: c088b0 sub a8, a8, a11
-40002db9: 393a add.n a3, a9, a3
-40002dbb: 140c movi.n a4, 1
-40002dbd: 013397 bltu a3, a9, 40002dc2 <__mulvdi3+0x4a>
-40002dc0: 040c movi.n a4, 0
-40002dc2: 448a add.n a4, a4, a8
-40002dc4: 312f30 srai a2, a3, 31
-40002dc7: 021247 beq a2, a4, 40002dcd <__mulvdi3+0x55>
-40002dca: 0029c6 j 40002e75 <__mulvdi3+0xfd>
-40002dcd: 0c2d mov.n a2, a12
-40002dcf: f01d retw.n
-40002dd1: 318f40 srai a8, a4, 31
-40002dd4: 3c9587 bne a5, a8, 40002e14 <__mulvdi3+0x9c>
-40002dd7: a25340 muluh a5, a3, a4
-40002dda: 829340 mull a9, a3, a4
-40002ddd: c0c540 sub a12, a5, a4
-40002de0: 82a420 mull a10, a4, a2
-40002de3: a2b420 muluh a11, a4, a2
-40002de6: 098d mov.n a8, a9
-40002de8: a35c30 movltz a5, a12, a3
-40002deb: 00f4d6 bgez a4, 40002dfe <__mulvdi3+0x86>
-40002dee: c08920 sub a8, a9, a2
-40002df1: 140c movi.n a4, 1
-40002df3: 013987 bltu a9, a8, 40002df8 <__mulvdi3+0x80>
-40002df6: 040c movi.n a4, 0
-40002df8: c05530 sub a5, a5, a3
-40002dfb: c05540 sub a5, a5, a4
-40002dfe: 38ba add.n a3, a8, a11
-40002e00: 140c movi.n a4, 1
-40002e02: 023387 bltu a3, a8, 40002e08 <__mulvdi3+0x90>
-40002e05: 00a042 movi a4, 0
-40002e08: 445a add.n a4, a4, a5
-40002e0a: 312f30 srai a2, a3, 31
-40002e0d: 649247 bne a2, a4, 40002e75 <__mulvdi3+0xfd>
-40002e10: 0a2d mov.n a2, a10
-40002e12: f01d retw.n
-40002e14: 02c396 bltz a3, 40002e44 <__mulvdi3+0xcc>
-40002e17: 011596 bltz a5, 40002e2c <__mulvdi3+0xb4>
-40002e1a: 057356 bnez a3, 40002e75 <__mulvdi3+0xfd>
-40002e1d: 054556 bnez a5, 40002e75 <__mulvdi3+0xfd>
-40002e20: a23420 muluh a3, a4, a2
-40002e23: 822420 mull a2, a4, a2
-40002e26: 04b396 bltz a3, 40002e75 <__mulvdi3+0xfd>
-40002e29: f01d retw.n
-40002e2b: 535600 max a5, a6, a0
-40002e2e: 056604 lsi f0, a6, 20
-40002e31: 342042 l32i a4, a0, 208
-40002e34: 4420a2 l32i a10, a0, 0x110
-40002e37: 332082 l32i a8, a0, 204
-40002e3a: 63d6c0 minu a13, a6, a12
-40002e3d: 042d03 lsi f0, a13, 16
-40002e40: f01d retw.n
-40002e42: 960000 lsi f0, a0, 0x258
-40002e45: 660145 call0 40068e5c <__udivmoddi4+0x43ac>
-40002e48: ec2a03 lsi f0, a10, 0x3b0
-40002e4b: 342075 call12 40037050
-40002e4e: 2420a2 l32i a10, a0, 144
-40002e51: 334082 s8i a8, a0, 51
-40002e54: c3d6c0 movf a13, a6, b12
-40002e57: f01d01 l32r a0, 3fffeecc <__stack_app+0x1709c>
-40002e5a: 660000 lsi f0, a0, 0x198
-40002e5d: 661503 lsi f0, a5, 0x198
-40002e60: 201205 call0 40022f84
-40002e63: 20a234 lsi f3, a2, 128
-40002e66: 208254 lsi f5, a2, 128
-40002e69: 40c023 ssip f2, a0, 0x100
-40002e6c: 96c032 addi a3, a0, -106
-40002e6f: 2d0033 lsi f3, a0, 180
-40002e72: f01d05 call0 3fff3044 <__stack_app+0xb214>
-40002e75: 08d2e5 call8 4000bba4
-
-40002e78 <__negvsi2>:
-40002e78: 004136 entry a1, 32
-40002e7b: 608020 neg a8, a2
-40002e7e: 059f80 extui a9, a8, 31, 1
-40002e81: 008296 bltz a2, 40002e8d <__negvsi2+0x15>
-40002e84: 319f80 srai a9, a8, 31
-40002e87: c09980 sub a9, a9, a8
-40002e8a: 059f90 extui a9, a9, 31, 1
-40002e8d: 198c beqz.n a9, 40002e92 <__negvsi2+0x1a>
-40002e8f: 08d165 call8 4000bba4
-40002e92: 082d mov.n a2, a8
-40002e94: f01d retw.n
- ...
-
-40002e98 <__negvdi2>:
-40002e98: 004136 entry a1, 32
-40002e9b: 0b0c movi.n a11, 0
-40002e9d: 038d mov.n a8, a3
-40002e9f: 602020 neg a2, a2
-40002ea2: 1a0c movi.n a10, 1
-40002ea4: 0b3d mov.n a3, a11
-40002ea6: 609080 neg a9, a8
-40002ea9: 933a20 movnez a3, a10, a2
-40002eac: c03930 sub a3, a9, a3
-40002eaf: 059f30 extui a9, a3, 31, 1
-40002eb2: 1328b7 blt a8, a11, 40002ec9 <__negvdi2+0x31>
-40002eb5: 318f30 srai a8, a3, 31
-40002eb8: c09820 sub a9, a8, a2
-40002ebb: 013897 bltu a8, a9, 40002ec0 <__negvdi2+0x28>
-40002ebe: 0bad mov.n a10, a11
-40002ec0: c08830 sub a8, a8, a3
-40002ec3: c0a8a0 sub a10, a8, a10
-40002ec6: 059fa0 extui a9, a10, 31, 1
-40002ec9: 198c beqz.n a9, 40002ece <__negvdi2+0x36>
-40002ecb: 08cda5 call8 4000bba4
-40002ece: f01d retw.n
-
-40002ed0 <__popcountsi2>:
-40002ed0: 004136 entry a1, 32
-40002ed3: 00a092 movi a9, 0
-40002ed6: f607b1 l32r a11, 400006f4 <_stext+0x194>
-40002ed9: 208990 or a8, a9, a9
-40002edc: 400800 ssr a8
-40002edf: 91a020 srl a10, a2
-40002ee2: 74a0a0 extui a10, a10, 0, 8
-40002ee5: abaa add.n a10, a11, a10
-40002ee7: 000aa2 l8ui a10, a10, 0
-40002eea: 888b addi.n a8, a8, 8
-40002eec: 99aa add.n a9, a9, a10
-40002eee: eac866 bnei a8, 32, 40002edc <__popcountsi2+0xc>
-40002ef1: 092d mov.n a2, a9
-40002ef3: f01d retw.n
-40002ef5: 000000 ill
-
-40002ef8 <__popcountdi2>:
-40002ef8: 004136 entry a1, 32
-40002efb: 0a0c movi.n a10, 0
-40002efd: f5fdd1 l32r a13, 400006f4 <_stext+0x194>
-40002f00: 0a8d mov.n a8, a10
-40002f02: 1143f0 slli a4, a3, 1
-40002f05: 0f2c movi.n a15, 32
-40002f07: fe7c movi.n a14, -1
-40002f09: 3058e0 xor a5, a8, a14
-40002f0c: 400800 ssr a8
-40002f0f: 919020 srl a9, a2
-40002f12: 401500 ssl a5
-40002f15: a15400 sll a5, a4
-40002f18: 10c8f0 and a12, a8, a15
-40002f1b: 400800 ssr a8
-40002f1e: 91b030 srl a11, a3
-40002f21: 209590 or a9, a5, a9
-40002f24: 939bc0 movnez a9, a11, a12
-40002f27: 749090 extui a9, a9, 0, 8
-40002f2a: 9d9a add.n a9, a13, a9
-40002f2c: 000992 l8ui a9, a9, 0
-40002f2f: 888b addi.n a8, a8, 8
-40002f31: aa9a add.n a10, a10, a9
-40002f33: d2d866 bnei a8, 64, 40002f09 <__popcountdi2+0x11>
-40002f36: 0a2d mov.n a2, a10
-40002f38: f01d retw.n
- ...
-
-40002f3c <__paritysi2>:
-40002f3c: 004136 entry a1, 32
-40002f3f: f58020 extui a8, a2, 16, 16
-40002f42: 302820 xor a2, a8, a2
-40002f45: 418820 srli a8, a2, 8
-40002f48: 308820 xor a8, a8, a2
-40002f4b: 412480 srli a2, a8, 4
-40002f4e: 308280 xor a8, a2, a8
-40002f51: f5e921 l32r a2, 400006f8 <_stext+0x198>
-40002f54: 348080 extui a8, a8, 0, 4
-40002f57: 400800 ssr a8
-40002f5a: b12020 sra a2, a2
-40002f5d: 042020 extui a2, a2, 0, 1
-40002f60: f01d retw.n
-40002f62: 300000 xor a0, a0, a0
-40002f65: 6001c0 abs a0, a12
-40002f68: 000000 ill
-40002f6b: 413620 srli a3, a2, 6
-
-40002f6c :
-40002f6c: 004136 entry a1, 32
-40002f6f: fffd81 l32r a8, 40002f64 <__paritysi2+0x28>
-40002f72: fffd91 l32r a9, 40002f68 <__paritysi2+0x2c>
-40002f75: 0020c0 memw
-40002f78: 08a8 l32i.n a10, a8, 0
-40002f7a: 209a90 or a9, a10, a9
-40002f7d: 0020c0 memw
-40002f80: 0899 s32i.n a9, a8, 0
-40002f82: f01d retw.n
-40002f84: ff .byte 0xff
-40002f85: ff .byte 0xff
-40002f86: ff .byte 0xff
-40002f87: df .byte 0xdf
-
-40002f88