Buckets:
| .globl emscripten_stack_init | |
| .globl emscripten_stack_set_limits | |
| .globl emscripten_stack_get_free | |
| .globl emscripten_stack_get_base | |
| .globl emscripten_stack_get_end | |
| #ifdef __wasm64__ | |
| #define PTR i64 | |
| #define ALIGN 3 | |
| #define PTRSTORE .int64 | |
| #else | |
| #define PTR i32 | |
| #define ALIGN 2 | |
| #define PTRSTORE .int32 | |
| #endif | |
| .globaltype __stack_pointer, PTR | |
| .section .globals,"",@ | |
| # TODO(sbc): It would be nice if these were initialized directly | |
| # using PTR.const rather than using the `emscripten_stack_init` | |
| .globaltype __stack_end, PTR | |
| __stack_end: | |
| .globaltype __stack_base, PTR | |
| __stack_base: | |
| .section .text,"",@ | |
| emscripten_stack_get_base: | |
| .functype emscripten_stack_get_base () -> (PTR) | |
| global.get __stack_base | |
| end_function | |
| emscripten_stack_get_end: | |
| .functype emscripten_stack_get_end () -> (PTR) | |
| global.get __stack_end | |
| end_function | |
| emscripten_stack_init: | |
| # Initialize __stack_end and __stack_base. | |
| # This must be called before emscripten_stack_get_end, | |
| # emscripten_stack_get_base, or emscripten_stack_get_free are called | |
| .functype emscripten_stack_init () -> () | |
| # What llvm calls __stack_high is the high address from where it grows | |
| # downwards. We call this the stack base here in emscripten. | |
| #ifdef __PIC__ | |
| global.get __stack_high@GOT | |
| #else | |
| PTR.const __stack_high | |
| #endif | |
| global.set __stack_base | |
| # What llvm calls __stack_low is that end of the stack | |
| #ifdef __PIC__ | |
| global.get __stack_low@GOT | |
| #else | |
| PTR.const __stack_low | |
| #endif | |
| # Align up to 16 bytes | |
| PTR.const 0xf | |
| PTR.add | |
| PTR.const -0x10 | |
| PTR.and | |
| global.set __stack_end | |
| end_function | |
| emscripten_stack_set_limits: | |
| .functype emscripten_stack_set_limits (PTR, PTR) -> () | |
| local.get 0 | |
| global.set __stack_base | |
| local.get 1 | |
| global.set __stack_end | |
| end_function | |
| emscripten_stack_get_free: | |
| .functype emscripten_stack_get_free () -> (PTR) | |
| global.get __stack_pointer | |
| global.get __stack_end | |
| PTR.sub | |
| end_function | |
| # Add emscripten_stack_init to static ctors | |
| .section .init_array.1,"",@ | |
| .p2align ALIGN | |
| PTRSTORE emscripten_stack_init | |
Xet Storage Details
- Size:
- 2.04 kB
- Xet hash:
- f78fd50c68d62a6708b2df5d9568d7f94f437ab1a15b66ed133e758fbb5dc9e6
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.