2015-05-25 13:11:41 +02:00
|
|
|
// Copyright 2008 Dolphin Emulator Project
|
|
|
|
|
// Copyright 2004 Duddie & Tratax
|
|
|
|
|
// Licensed under GPLv2+
|
|
|
|
|
// Refer to the license.txt file included.
|
2009-03-23 09:10:32 +00:00
|
|
|
|
2014-09-07 20:06:58 -05:00
|
|
|
#include "Common/CommonTypes.h"
|
2009-05-01 20:06:24 +00:00
|
|
|
|
2014-02-17 05:18:15 -05:00
|
|
|
#include "Core/DSP/DSPCore.h"
|
|
|
|
|
#include "Core/DSP/DSPStacks.h"
|
2009-03-23 09:10:32 +00:00
|
|
|
|
2009-04-05 15:46:47 +00:00
|
|
|
// Stacks. The stacks are outside the DSP RAM, in dedicated hardware.
|
2009-03-23 09:10:32 +00:00
|
|
|
|
2011-02-02 18:21:20 +00:00
|
|
|
static void dsp_reg_stack_push(int stack_reg)
|
2009-03-23 09:10:32 +00:00
|
|
|
{
|
|
|
|
|
g_dsp.reg_stack_ptr[stack_reg]++;
|
|
|
|
|
g_dsp.reg_stack_ptr[stack_reg] &= DSP_STACK_MASK;
|
2010-12-29 20:20:52 +00:00
|
|
|
g_dsp.reg_stack[stack_reg][g_dsp.reg_stack_ptr[stack_reg]] = g_dsp.r.st[stack_reg];
|
2009-03-23 09:10:32 +00:00
|
|
|
}
|
|
|
|
|
|
2011-02-02 18:21:20 +00:00
|
|
|
static void dsp_reg_stack_pop(int stack_reg)
|
2009-03-23 09:10:32 +00:00
|
|
|
{
|
2010-12-29 20:20:52 +00:00
|
|
|
g_dsp.r.st[stack_reg] = g_dsp.reg_stack[stack_reg][g_dsp.reg_stack_ptr[stack_reg]];
|
2009-03-23 09:10:32 +00:00
|
|
|
g_dsp.reg_stack_ptr[stack_reg]--;
|
|
|
|
|
g_dsp.reg_stack_ptr[stack_reg] &= DSP_STACK_MASK;
|
|
|
|
|
}
|
|
|
|
|
|
2009-06-28 16:23:40 +00:00
|
|
|
void dsp_reg_store_stack(int stack_reg, u16 val)
|
2009-03-23 09:10:32 +00:00
|
|
|
{
|
|
|
|
|
dsp_reg_stack_push(stack_reg);
|
2010-12-29 20:20:52 +00:00
|
|
|
g_dsp.r.st[stack_reg] = val;
|
2009-03-23 09:10:32 +00:00
|
|
|
}
|
|
|
|
|
|
2009-06-28 16:23:40 +00:00
|
|
|
u16 dsp_reg_load_stack(int stack_reg)
|
2009-03-23 09:10:32 +00:00
|
|
|
{
|
2010-12-29 20:20:52 +00:00
|
|
|
u16 val = g_dsp.r.st[stack_reg];
|
2009-03-23 09:10:32 +00:00
|
|
|
dsp_reg_stack_pop(stack_reg);
|
2009-04-05 15:46:47 +00:00
|
|
|
return val;
|
2009-05-03 11:15:17 +00:00
|
|
|
}
|