mirror of
https://github.com/zeldaret/oot.git
synced 2025-08-10 17:00:19 +00:00
Use IDO for assembling handwritten asm files in src (#2390)
* as0 * Fix ASOPTFLAGS for src/libc, remove unnecessary noreorder region in kanread * Suggested changes * Use %half to load the boot bss size for matching Co-authored-by: cadmic <cadmic24@gmail.com> * Wrap all of __osProbeTLB in noreorder --------- Co-authored-by: cadmic <cadmic24@gmail.com>
This commit is contained in:
parent
ba6a83533a
commit
7e082f0c4f
54 changed files with 2612 additions and 2653 deletions
|
@ -1,34 +1,44 @@
|
|||
#include "ultra64/asm.h"
|
||||
#include "ultra64/regdef.h"
|
||||
#include "boot.h"
|
||||
|
||||
.set noreorder
|
||||
.text
|
||||
|
||||
.section .text
|
||||
|
||||
.balign 16
|
||||
#if defined(__sgi) && !defined(AVOID_UB)
|
||||
/* IDO assembler workaround: The makerom tool in the N64 SDK was given the bss segment size as a const
|
||||
* literal, and since this literal was < 0x10000 it was loaded in one instruction. We don't have access
|
||||
* to the bss segment size until we link everything so we cannot do the same thing. Instead we must load
|
||||
* only the lower 16 bits of the bss size for matching.
|
||||
* When AVOID_UB is enabled, don't do this and instead load the full symbol value, otherwise not all of
|
||||
* bss may be cleared. */
|
||||
#define LOAD_BSS_SIZE(reg) li reg, %half(_bootSegmentBssSize)
|
||||
#else
|
||||
#define LOAD_BSS_SIZE(reg) la reg, _bootSegmentBssSize
|
||||
#endif
|
||||
|
||||
LEAF(entrypoint)
|
||||
// Clear boot segment .bss
|
||||
la $t0, _bootSegmentBssStart
|
||||
#ifndef AVOID_UB
|
||||
// UB: li only loads the lower 16 bits of _bootSegmentBssSize when it may be larger than this,
|
||||
// so not all of bss may be cleared if it is too large
|
||||
li $t1, _bootSegmentBssSize
|
||||
#else
|
||||
la $t1, _bootSegmentBssSize
|
||||
#endif
|
||||
/* Clear boot segment .bss */
|
||||
la t0, _bootSegmentBssStart
|
||||
LOAD_BSS_SIZE(t1)
|
||||
.clear_bss:
|
||||
addi $t1, $t1, -8
|
||||
sw $zero, ($t0)
|
||||
sw $zero, 4($t0)
|
||||
bnez $t1, .clear_bss
|
||||
addi $t0, $t0, 8
|
||||
// Set up stack and enter program code
|
||||
lui $t2, %hi(bootproc)
|
||||
lui $sp, %hi(sBootThreadStack + BOOT_STACK_SIZE)
|
||||
addiu $t2, %lo(bootproc)
|
||||
jr $t2
|
||||
addiu $sp, %lo(sBootThreadStack + BOOT_STACK_SIZE)
|
||||
sw zero, 0(t0)
|
||||
sw zero, 4(t0)
|
||||
addi t0, t0, 8
|
||||
addi t1, t1, -8
|
||||
bnez t1, .clear_bss
|
||||
|
||||
/* Set up stack and enter program code */
|
||||
la sp, sBootThreadStack + BOOT_STACK_SIZE
|
||||
la t2, bootproc
|
||||
jr t2
|
||||
END(entrypoint)
|
||||
|
||||
#ifdef __GNUC__
|
||||
/* Pad to a total size of 0x60 */
|
||||
.fill 0x60 - (. - entrypoint)
|
||||
#else
|
||||
/* IDO can't take absolute differences of symbols.. */
|
||||
.repeat (0x60 - 0x34)
|
||||
.byte 0
|
||||
.endr
|
||||
#endif
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
|
||||
.section .text
|
||||
|
||||
.incbin "incbin/ipl3"
|
Loading…
Add table
Add a link
Reference in a new issue