mirror of https://github.com/PrimeDecomp/prime.git
parent
d4c1747688
commit
4de93b4f68
|
@ -699,11 +699,11 @@ LIBS = [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lib": "ai",
|
"lib": "ai",
|
||||||
"mwcc_version": "1.2.5",
|
"mwcc_version": "1.2.5e",
|
||||||
"cflags": "$cflags_base",
|
"cflags": "$cflags_base",
|
||||||
"host": False,
|
"host": False,
|
||||||
"objects": [
|
"objects": [
|
||||||
["Dolphin/ai", False],
|
["Dolphin/ai", True],
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -22,6 +22,7 @@ void __AIDHandler(s16 interrupt, OSContext* context);
|
||||||
void __AICallbackStackSwitch(register AIDCallback cb);
|
void __AICallbackStackSwitch(register AIDCallback cb);
|
||||||
void __AI_SRC_INIT(void);
|
void __AI_SRC_INIT(void);
|
||||||
|
|
||||||
|
#if NONMATCHING
|
||||||
AIDCallback AIRegisterDMACallback(AIDCallback callback) {
|
AIDCallback AIRegisterDMACallback(AIDCallback callback) {
|
||||||
s32 oldInts;
|
s32 oldInts;
|
||||||
AIDCallback ret;
|
AIDCallback ret;
|
||||||
|
@ -32,6 +33,34 @@ AIDCallback AIRegisterDMACallback(AIDCallback callback) {
|
||||||
OSRestoreInterrupts(oldInts);
|
OSRestoreInterrupts(oldInts);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
/* clang-format off */
|
||||||
|
#pragma push
|
||||||
|
#pragma optimization_level 0
|
||||||
|
#pragma optimizewithasm off
|
||||||
|
asm AIDCallback AIRegisterDMACallback(AIDCallback callback) {
|
||||||
|
nofralloc
|
||||||
|
mflr r0
|
||||||
|
stw r0, 4(r1)
|
||||||
|
stwu r1, -0x18(r1)
|
||||||
|
stw r31, 0x14(r1)
|
||||||
|
stw r30, 0x10(r1)
|
||||||
|
mr r30, r3
|
||||||
|
lwz r31, __AID_Callback
|
||||||
|
bl OSDisableInterrupts
|
||||||
|
stw r30, __AID_Callback
|
||||||
|
bl OSRestoreInterrupts
|
||||||
|
mr r3, r31
|
||||||
|
lwz r0, 0x1c(r1)
|
||||||
|
lwz r31, 0x14(r1)
|
||||||
|
lwz r30, 0x10(r1)
|
||||||
|
addi r1, r1, 0x18
|
||||||
|
mtlr r0
|
||||||
|
blr
|
||||||
|
}
|
||||||
|
#pragma pop
|
||||||
|
/* clang-format on */
|
||||||
|
#endif
|
||||||
|
|
||||||
void AIInitDMA(u32 addr, u32 length) {
|
void AIInitDMA(u32 addr, u32 length) {
|
||||||
s32 oldInts;
|
s32 oldInts;
|
||||||
|
@ -50,6 +79,7 @@ u32 AIGetDMAStartAddr(void) {
|
||||||
return (u32)((__DSPRegs[24] & 0x03ff) << 16) | (__DSPRegs[25] & 0xffe0);
|
return (u32)((__DSPRegs[24] & 0x03ff) << 16) | (__DSPRegs[25] & 0xffe0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if NONMATCHING
|
||||||
AISCallback AIRegisterStreamCallback(AISCallback callback) {
|
AISCallback AIRegisterStreamCallback(AISCallback callback) {
|
||||||
AISCallback ret;
|
AISCallback ret;
|
||||||
s32 oldInts;
|
s32 oldInts;
|
||||||
|
@ -60,6 +90,34 @@ AISCallback AIRegisterStreamCallback(AISCallback callback) {
|
||||||
OSRestoreInterrupts(oldInts);
|
OSRestoreInterrupts(oldInts);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
/* clang-format off */
|
||||||
|
#pragma push
|
||||||
|
#pragma optimization_level 0
|
||||||
|
#pragma optimizewithasm off
|
||||||
|
asm AISCallback AIRegisterStreamCallback(AISCallback callback) {
|
||||||
|
nofralloc
|
||||||
|
mflr r0
|
||||||
|
stw r0, 4(r1)
|
||||||
|
stwu r1, -0x18(r1)
|
||||||
|
stw r31, 0x14(r1)
|
||||||
|
stw r30, 0x10(r1)
|
||||||
|
mr r30, r3
|
||||||
|
lwz r31, __AIS_Callback
|
||||||
|
bl OSDisableInterrupts
|
||||||
|
stw r30, __AIS_Callback
|
||||||
|
bl OSRestoreInterrupts
|
||||||
|
mr r3, r31
|
||||||
|
lwz r0, 0x1c(r1)
|
||||||
|
lwz r31, 0x14(r1)
|
||||||
|
lwz r30, 0x10(r1)
|
||||||
|
addi r1, r1, 0x18
|
||||||
|
mtlr r0
|
||||||
|
blr
|
||||||
|
}
|
||||||
|
#pragma pop
|
||||||
|
/* clang-format on */
|
||||||
|
#endif
|
||||||
|
|
||||||
void AIResetStreamSampleCount(void) { __AIRegs[0] = (__AIRegs[0] & ~0x20) | 0x20; }
|
void AIResetStreamSampleCount(void) { __AIRegs[0] = (__AIRegs[0] & ~0x20) | 0x20; }
|
||||||
|
|
||||||
|
|
|
@ -833,5 +833,6 @@ lbl_80387664:
|
||||||
mtlr r0
|
mtlr r0
|
||||||
blr
|
blr
|
||||||
}
|
}
|
||||||
|
/* clang-format on */
|
||||||
#pragma pop
|
#pragma pop
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue