// Library function names, kept by hand. splat symbol_addrs format.
// exact: the instruction sequence matched one libultra function in W.G. 3D Hockey: Recompiled (same SDK, same compiler).
// manual: identified by hand, for the reason on the line above it. Mostly tiny functions with the same instruction
// shape as several library functions, told apart by the register or address they use.
osInitialize = 0x80002590; // type:func segment:boot exact
osCreateThread = 0x800027C0; // type:func segment:boot exact
osStartThread = 0x80002910; // type:func segment:boot exact
osSetThreadPri = 0x80002A60; // type:func segment:boot exact
_bzero = 0x80002B80; // type:func segment:boot exact
osInvalICache = 0x80002C20; // type:func segment:boot exact
osInvalDCache = 0x80002CA0; // type:func segment:boot exact
osCreatePiManager = 0x80002D50; // type:func segment:boot exact
osCreateMesgQueue = 0x80002ED0; // type:func segment:boot exact
osPiStartDma = 0x80002F00; // type:func segment:boot exact
osRecvMesg = 0x80003010; // type:func segment:boot exact
osCreateViManager = 0x800031F0; // type:func segment:boot exact
// manual: VI manager thread: __osViGetCurrentContext, osRecvMesg loop, __osViSwapContext
viMgrMain = 0x80003374; // type:func segment:boot manual
osSetEventMesg = 0x80003550; // type:func segment:boot exact
osViSetEvent = 0x800035C0; // type:func segment:boot exact
// manual: __osSpSetStatus(SP_SET_YIELD 0x400)
osSpTaskYield = 0x80003630; // type:func segment:boot manual
sptask_text_0000 = 0x80003650; // type:func segment:boot exact
osSpTaskLoad = 0x8000376C; // type:func segment:boot exact
osSpTaskStartGo = 0x800038CC; // type:func segment:boot exact
osSendMesg = 0x80003910; // type:func segment:boot exact
osSpTaskYielded = 0x80003A60; // type:func segment:boot exact
osViSwapBuffer = 0x80003AE0; // type:func segment:boot exact
// manual: reads __osViCurr (0x80007040)->framebuffer
osViGetCurrentFramebuffer = 0x80003B30; // type:func segment:boot manual
// manual: reads __osViNext (0x80007044)->framebuffer
osViGetNextFramebuffer = 0x80003B70; // type:func segment:boot manual
osDpSetNextBuffer = 0x80003BB0; // type:func segment:boot exact
osViSetMode = 0x80003C60; // type:func segment:boot exact
__osSetSR = 0x80003CD0; // type:func segment:boot exact
// manual: mfc0 Status
__osGetSR = 0x80003CE0; // type:func segment:boot manual
__osSetFpcCsr = 0x80003CF0; // type:func segment:boot exact
__osSpRawReadIo = 0x80003D00; // type:func segment:boot exact
__osSpRawWriteIo = 0x80003D50; // type:func segment:boot exact
__osExceptionPreamble = 0x80003DA0; // type:func segment:boot exact
__osException = 0x80003DB0; // type:func segment:boot exact
send_mesg = 0x800042F8; // type:func segment:boot exact
handle_CpU = 0x800043AC; // type:func segment:boot exact
__osEnqueueAndYield = 0x800043E0; // type:func segment:boot exact
__osEnqueueThread = 0x80004470; // type:func segment:boot exact
__osPopThread = 0x800044B8; // type:func segment:boot exact
// manual: wg3d match breaks once the body keeps its trailing delay slot (eret path); restores context and erets
__osDispatchThread = 0x800044C8; // type:func segment:boot manual
__osCleanupThread = 0x80004608; // type:func segment:boot exact
osWritebackDCache = 0x80004610; // type:func segment:boot exact
osMapTLBRdb = 0x80004690; // type:func segment:boot exact
osPiRawReadIo = 0x800046F0; // type:func segment:boot exact
__ull_rshift = 0x80004750; // type:func segment:boot exact
__ull_div = 0x800047B8; // type:func segment:boot exact
__ll_lshift = 0x800047F4; // type:func segment:boot exact
__ll_div = 0x8000485C; // type:func segment:boot exact
__ll_mul = 0x800048B8; // type:func segment:boot exact
__ull_divremi = 0x800048E8; // type:func segment:boot exact
__ll_mod = 0x80004948; // type:func segment:boot exact
__ll_rshift = 0x800049E4; // type:func segment:boot exact
__osDisableInt = 0x80004A10; // type:func segment:boot exact
__osRestoreInt = 0x80004A30; // type:func segment:boot exact
__osDequeueThread = 0x80004A50; // type:func segment:boot exact
// manual: next to the PI functions; seg0 has the SI copy
__osPiCreateAccessQueue = 0x80004A90; // type:func segment:boot manual
// manual: PI access queue
__osPiGetAccess = 0x80004AE0; // type:func segment:boot manual
// manual: PI access queue
__osPiRelAccess = 0x80004B24; // type:func segment:boot manual
osGetThreadPri = 0x80004B50; // type:func segment:boot exact
osPiRawStartDma = 0x80004B70; // type:func segment:boot exact
osJamMesg = 0x80004DD0; // type:func segment:boot exact
osPiGetCmdQueue = 0x80004F20; // type:func segment:boot exact
__osTimerServicesInit = 0x80004F50; // type:func segment:boot exact
__osTimerInterrupt = 0x80004FDC; // type:func segment:boot exact
__osSetTimerIntr = 0x80005154; // type:func segment:boot exact
__osInsertTimer = 0x800051C8; // type:func segment:boot exact
// manual: clears the two VI contexts at 0x80006FE0, sets __osViCurr/__osViNext
__osViInit = 0x80005350; // type:func segment:boot manual
__osGetActiveQueue = 0x80005480; // type:func segment:boot exact
__osViSwapContext = 0x80005490; // type:func segment:boot exact
// manual: mfc0 Count
osGetCount = 0x800057F0; // type:func segment:boot manual
__osSpSetStatus = 0x80005800; // type:func segment:boot exact
_bcopy = 0x80005810; // type:func segment:boot exact
osVirtualToPhysical = 0x80005B20; // type:func segment:boot exact
__osSpSetPc = 0x80005BA0; // type:func segment:boot exact
__osSpRawStartDma = 0x80005BE0; // type:func segment:boot exact
// manual: SP_STATUS (0xA4040010) & 0x1C
__osSpDeviceBusy = 0x80005C70; // type:func segment:boot manual
// manual: returns SP_STATUS (0xA4040010)
__osSpGetStatus = 0x80005CA0; // type:func segment:boot manual
// manual: DPC_STATUS (0xA410000C) & DMA_BUSY
__osDpDeviceBusy = 0x80005CB0; // type:func segment:boot manual
// manual: SI_STATUS (0xA4800018) & 3
__osSiDeviceBusy = 0x80005CE0; // type:func segment:boot manual
kdebugserver_text_0220 = 0x80005F30; // type:func segment:boot exact
kdebugserver_text_026C = 0x80005F7C; // type:func segment:boot exact
kdebugserver = 0x80005FA8; // type:func segment:boot exact
__osSyncPutChars = 0x80006190; // type:func segment:boot exact
osSetIntMask = 0x800062C0; // type:func segment:boot exact
osDestroyThread = 0x80006320; // type:func segment:boot exact
__osSetCompare = 0x80006420; // type:func segment:boot exact
__osProbeTLB = 0x80006430; // type:func segment:boot exact
// manual: mfc0 Cause
__osGetCause = 0x800064F0; // type:func segment:boot manual
__osAtomicDec = 0x80006500; // type:func segment:boot exact
osViSetSpecialFeatures = 0x80032AD0; // type:func segment:seg0 exact
guPerspectiveF = 0x80032C90; // type:func segment:seg0 exact
guPerspective = 0x80032EC0; // type:func segment:seg0 exact
sqrtf = 0x80033F70; // type:func segment:seg0 exact
osPfsIsPlug = 0x80034020; // type:func segment:seg0 exact
__osPfsRequestData = 0x800341BC; // type:func segment:seg0 exact
__osPfsGetInitData = 0x80034294; // type:func segment:seg0 exact
osPfsInit = 0x80034350; // type:func segment:seg0 exact
__osPfsGetStatus = 0x800343F4; // type:func segment:seg0 exact
osPfsFindFile = 0x800344D0; // type:func segment:seg0 exact
osPfsChecker = 0x80034670; // type:func segment:seg0 exact
corrupted_init = 0x80034C5C; // type:func segment:seg0 exact
corrupted = 0x80034F40; // type:func segment:seg0 exact
__osPfsGetNextPage = 0x800350E0; // type:func segment:seg0 exact
osPfsReadWriteFile = 0x800351C0; // type:func segment:seg0 exact
osPfsAllocateFile = 0x80035530; // type:func segment:seg0 exact
__osPfsDeclearPage = 0x80035924; // type:func segment:seg0 exact
__osClearPage = 0x80035B24; // type:func segment:seg0 exact
osContStartQuery = 0x80035BD0; // type:func segment:seg0 exact
osContGetQuery = 0x80035C54; // type:func segment:seg0 exact
// manual: __osCheckId, __osPfsSelectBank, then counts used directory entries; writes *files_used, *max_files
osPfsNumFiles = 0x80035C80; // type:func segment:seg0 manual
osPfsFileState = 0x80035DB0; // type:func segment:seg0 exact
osPfsDeleteFile = 0x80036060; // type:func segment:seg0 exact
__osPfsReleasePages = 0x800362E0; // type:func segment:seg0 exact
__osBlockSum = 0x800364E4; // type:func segment:seg0 exact
// manual: SiGetAccess, __osEepStatus, SiRelAccess
osEepromProbe = 0x800365D0; // type:func segment:seg0 manual
// manual: osEepromWrite per block with a 15 ms osSetTimer wait
osEepromLongWrite = 0x80036640; // type:func segment:seg0 manual
// manual: osEepromRead per block
osEepromLongRead = 0x80036780; // type:func segment:seg0 manual
osViBlack = 0x800368C0; // type:func segment:seg0 exact
sinf = 0x80036970; // type:func segment:seg0 exact
__cosf = 0x80036B30; // type:func segment:seg0 exact
osWritebackDCacheAll = 0x80036CA0; // type:func segment:seg0 exact
guMtxF2L = 0x80037080; // type:func segment:seg0 exact
guMtxIdentF = 0x80037180; // type:func segment:seg0 exact
guMtxIdent = 0x80037208; // type:func segment:seg0 exact
guMtxL2F = 0x80037238; // type:func segment:seg0 exact
// manual: tlbwi of an invalid entry at index a0
osUnmapTLB = 0x800372F0; // type:func segment:seg0 manual
// manual: PageMask/EntryHi/EntryLo then tlbwi
osMapTLB = 0x80037330; // type:func segment:seg0 manual
guFrustumF = 0x800373F0; // type:func segment:seg0 exact
guFrustum = 0x80037544; // type:func segment:seg0 exact
alHeapInit = 0x800375B0; // type:func segment:seg0 exact
alHeapDBAlloc = 0x800375F0; // type:func segment:seg0 exact
alBnkfNew = 0x80037754; // type:func segment:seg0 exact
alSeqFileNew = 0x80037858; // type:func segment:seg0 exact
alSeqpSetVol = 0x80039680; // type:func segment:seg0 exact
osAiSetFrequency = 0x800396C0; // type:func segment:seg0 exact
alUnlink = 0x80039820; // type:func segment:seg0 exact
alLink = 0x80039850; // type:func segment:seg0 exact
alClose = 0x80039874; // type:func segment:seg0 exact
alInit = 0x800398AC; // type:func segment:seg0 exact
osAiSetNextBuffer = 0x800398E0; // type:func segment:seg0 exact
// manual: returns AI_LEN (0xA4500004)
osAiGetLength = 0x80039990; // type:func segment:seg0 manual
_timeToSamples = 0x800399A8; // type:func segment:seg0 exact
_freePVoice = 0x80039A00; // type:func segment:seg0 exact
_collectPVoices = 0x80039A38; // type:func segment:seg0 exact
__freeParam = 0x80039A98; // type:func segment:seg0 exact
__allocParam = 0x80039AB0; // type:func segment:seg0 exact
alAudioFrame = 0x80039AE8; // type:func segment:seg0 exact
alSynNew = 0x80039D70; // type:func segment:seg0 exact
osContInit = 0x8003A070; // type:func segment:seg0 exact
__osContGetInitData = 0x8003A26C; // type:func segment:seg0 exact
__osPackRequestData = 0x8003A33C; // type:func segment:seg0 exact
osContStartReadData = 0x8003A430; // type:func segment:seg0 exact
osContGetReadData = 0x8003A4F4; // type:func segment:seg0 exact
contreaddata_text_017C = 0x8003A59C; // type:func segment:seg0 exact
alEvtqFlushType = 0x8003A690; // type:func segment:seg0 exact
alEvtqFlush = 0x8003A73C; // type:func segment:seg0 exact
alEvtqPostEvent = 0x8003A7AC; // type:func segment:seg0 exact
alEvtqNextEvent = 0x8003A8D0; // type:func segment:seg0 exact
alEvtqNew = 0x8003A95C; // type:func segment:seg0 exact
alSynAddPlayer = 0x8003A9D0; // type:func segment:seg0 exact
_allocatePVoice = 0x8003AA20; // type:func segment:seg0 exact
alSynAllocVoice = 0x8003AB08; // type:func segment:seg0 exact
alSynSetVol = 0x8003AC50; // type:func segment:seg0 exact
alSynStartVoice = 0x8003ACF0; // type:func segment:seg0 exact
alSynSetPan = 0x8003AD80; // type:func segment:seg0 exact
alSynSetPitch = 0x8003AE10; // type:func segment:seg0 exact
alSynSetFXMix = 0x8003AEA0; // type:func segment:seg0 exact
alSynStopVoice = 0x8003AF40; // type:func segment:seg0 exact
alSynFreeVoice = 0x8003AFC0; // type:func segment:seg0 exact
alCents2Ratio = 0x8003B070; // type:func segment:seg0 exact
// manual: precedes __osSiRawStartDma; boot has the PI copy
__osSiCreateAccessQueue = 0x8003B150; // type:func segment:seg0 manual
// manual: called by the EEPROM and controller code
__osSiGetAccess = 0x8003B1A0; // type:func segment:seg0 manual
// manual: SI access queue
__osSiRelAccess = 0x8003B1E4; // type:func segment:seg0 manual
__osSiRawStartDma = 0x8003B210; // type:func segment:seg0 exact
__osSumcalc = 0x8003B2C0; // type:func segment:seg0 exact
__osIdCheckSum = 0x8003B33C; // type:func segment:seg0 exact
__osRepairPackId = 0x8003B438; // type:func segment:seg0 exact
__osCheckPackId = 0x8003B784; // type:func segment:seg0 exact
__osGetId = 0x8003B8E8; // type:func segment:seg0 exact
__osCheckId = 0x8003BAEC; // type:func segment:seg0 exact
__osPfsRWInode = 0x8003BC04; // type:func segment:seg0 exact
__osPfsSelectBank = 0x8003BEA0; // type:func segment:seg0 exact
__osContRamRead = 0x8003BF10; // type:func segment:seg0 exact
__osPackRamReadData = 0x8003C13C; // type:func segment:seg0 exact
__osContRamWrite = 0x8003C2A0; // type:func segment:seg0 exact
__osPackRamWriteData = 0x8003C4C4; // type:func segment:seg0 exact
osPfsFreeBlocks = 0x8003C630; // type:func segment:seg0 exact
// manual: SiGetAccess, __osEepStatus, pack write data, __osSiRawStartDma
osEepromWrite = 0x8003C7E0; // type:func segment:seg0 manual
// manual: SI command 0 (status) on channel 4
__osEepStatus = 0x8003CA9C; // type:func segment:seg0 manual
osSetTimer = 0x8003CCC0; // type:func segment:seg0 exact
// manual: SiGetAccess, __osEepStatus, pack read data, __osSiRawStartDma
osEepromRead = 0x8003CDA0; // type:func segment:seg0 manual
__setInstChanState = 0x8003D0A0; // type:func segment:seg0 exact
__resetPerfChanState = 0x8003D0F4; // type:func segment:seg0 exact
__initFromBank = 0x8003D174; // type:func segment:seg0 exact
__vsDelta = 0x8003D230; // type:func segment:seg0 exact
__vsVol = 0x8003D254; // type:func segment:seg0 exact
__seqpReleaseVoice = 0x8003D2DC; // type:func segment:seg0 exact
__voiceNeedsNoteKill = 0x8003D408; // type:func segment:seg0 exact
__unmapVoice = 0x8003D4B0; // type:func segment:seg0 exact
__postNextSeqEvent = 0x8003D520; // type:func segment:seg0 exact
__vsPan = 0x8003D674; // type:func segment:seg0 exact
__lookupVoice = 0x8003D6BC; // type:func segment:seg0 exact
__mapVoice = 0x8003D730; // type:func segment:seg0 exact
__lookupSoundQuick = 0x8003D7A0; // type:func segment:seg0 exact
seqplayer_text_101C = 0x8003E0BC; // type:func segment:seg0 exact
__seqpStopOsc = 0x8003E6E0; // type:func segment:seg0 exact
__initChanState = 0x8003E7E4; // type:func segment:seg0 exact
alSeqpNew = 0x8003E854; // type:func segment:seg0 exact
alSynStartVoiceParams = 0x8003E9E0; // type:func segment:seg0 exact
alSynDelete = 0x8003EAD0; // type:func segment:seg0 exact
__osAiDeviceBusy = 0x8003EAE0; // type:func segment:seg0 exact
alSaveNew = 0x8003EB10; // type:func segment:seg0 exact
alResampleNew = 0x8003EBFC; // type:func segment:seg0 exact
alLoadNew = 0x8003EC84; // type:func segment:seg0 exact
alEnvmixerNew = 0x8003ED2C; // type:func segment:seg0 exact
init_lpfilter = 0x8003EDD0; // type:func segment:seg0 exact
alFxNew = 0x8003EE70; // type:func segment:seg0 exact
alSynAllocFX = 0x8003F290; // type:func segment:seg0 exact
alMainBusPull = 0x8003F360; // type:func segment:seg0 exact
alLoadParam = 0x8003F480; // type:func segment:seg0 exact
alRaw16Pull = 0x8003F654; // type:func segment:seg0 exact
load_text_0580 = 0x8003FA00; // type:func segment:seg0 exact
alAdpcmPull = 0x8003FB2C; // type:func segment:seg0 exact
alResampleParam = 0x8003FFD0; // type:func segment:seg0 exact
alResamplePull = 0x800400BC; // type:func segment:seg0 exact
_ldexpf = 0x800402D0; // type:func segment:seg0 exact
_frexpf = 0x800402F8; // type:func segment:seg0 exact
alEnvmixerParam = 0x800403E4; // type:func segment:seg0 exact
env_text_03C4 = 0x80040694; // type:func segment:seg0 exact
env_text_065C = 0x8004092C; // type:func segment:seg0 exact
alEnvmixerPull = 0x800409DC; // type:func segment:seg0 exact
alAuxBusPull = 0x80040F60; // type:func segment:seg0 exact
alSaveParam = 0x80041040; // type:func segment:seg0 exact
alSavePull = 0x80041074; // type:func segment:seg0 exact
osGetTime = 0x80041100; // type:func segment:seg0 exact
alCopy = 0x80041190; // type:func segment:seg0 exact
__osContAddressCrc = 0x80041210; // type:func segment:seg0 exact
__osContDataCrc = 0x800412C0; // type:func segment:seg0 exact
alSeqGetLoc = 0x80041390; // type:func segment:seg0 exact
alSeqSetLoc = 0x800413AC; // type:func segment:seg0 exact
seq_text_0048 = 0x800413D8; // type:func segment:seg0 exact
alSeqNextEvent = 0x80041424; // type:func segment:seg0 exact
alSeqNewMarker = 0x800415A8; // type:func segment:seg0 exact
alSeqSecToTicks = 0x800416C8; // type:func segment:seg0 exact
alSeqTicksToSec = 0x800417AC; // type:func segment:seg0 exact
__alSeqNextDelta = 0x80041800; // type:func segment:seg0 exact
seq_text_04AC = 0x80041858; // type:func segment:seg0 exact
seq_text_04FC = 0x800418A8; // type:func segment:seg0 exact
alSeqNew = 0x800418D8; // type:func segment:seg0 exact
alSynSetPriority = 0x800419B0; // type:func segment:seg0 exact
alFilterNew = 0x800419C0; // type:func segment:seg0 exact
_doModFunc = 0x800419E0; // type:func segment:seg0 exact
_filterBuffer = 0x80041A88; // type:func segment:seg0 exact
_saveBuffer = 0x80041B40; // type:func segment:seg0 exact
_loadBuffer = 0x80041CC8; // type:func segment:seg0 exact
_loadOutputBuffer = 0x80041E54; // type:func segment:seg0 exact
alFxParam = 0x80042290; // type:func segment:seg0 exact
alFxPull = 0x800422A8; // type:func segment:seg0 exact
