Nugget
Bare-metal libraries and examples for the original PlayStation
Loading...
Searching...
No Matches
Classes | Macros | Typedefs
gwu.h File Reference
#include <stdint.h>
#include "gte-latency-common.h"
Include dependency graph for gwu.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  GwuCell
 

Macros

#define GWU_NMAX   4
 
#define GWU_AMAX   4
 
#define GWU_W_D   "mtc2"
 
#define GWU_W_C   "ctc2"
 
#define GWU_GET_D   cop2_get
 
#define GWU_GET_C   cop2_getc
 
#define GWU_ISC_D   0
 
#define GWU_ISC_C   1
 
#define GWU_FN(W, name, op, reg, N, A)
 
#define GWU_FN_A(W, name, op, reg, N)
 
#define GWU_FUNCS(K, name, scene, op, reg, canary, label, expect)
 
#define GWU_ROW(name, N)   {name##_##N##_0, name##_##N##_1, name##_##N##_2, name##_##N##_3}
 
#define GWU_ENTRY(K, name, scene, op, reg, canary, label, expect)
 

Typedefs

typedef void(* GwuFn) (uint32_t, uint32_t)
 

Macro Definition Documentation

◆ GWU_AMAX

#define GWU_AMAX   4

◆ GWU_ENTRY

#define GWU_ENTRY (   K,
  name,
  scene,
  op,
  reg,
  canary,
  label,
  expect 
)
Value:
{label, scene, name##_rd, {GWU_ROW(name, 0), GWU_ROW(name, 1), GWU_ROW(name, 2), GWU_ROW(name, 3)}, \
canary, GWU_ISC_##K, reg, expect},
#define GWU_ROW(name, N)
Definition gwu.h:109
The GTE math kernels.
Definition gte-kernels.hh:46

◆ GWU_FN

#define GWU_FN (   W,
  name,
  op,
  reg,
  N,
  A 
)
Value:
static void name##_##N##_##A(uint32_t a, uint32_t b) { \
__asm__ volatile(".set push\n.set noreorder\n.balign 16\n.rept " #A "\nnop\n.endr\n" W " %0, $" #reg \
"\nnop\nnop\nnop\nnop\n" W " %1, $" #reg "\n.rept " #N \
"\nnop\n.endr\ncop2 %2\nnop\nnop\n.set pop\n" \
: \
: "r"(a), "r"(b), "i"(op)); \
}
uint8_t b
Definition gte-depthcue.c:41
#define W(i)
#define N
Definition main.c:37
__asm__(" .section .text.monitorSlotEntry, \"ax\", @progbits\n" " .align 2\n" " .global monitorSlotEntry\n" " .type monitorSlotEntry, @function\n" " .set push\n" " .set noreorder\n" " .set noat\n" "monitorSlotEntry:\n" " mfc0 $v0, $13\n" " nop\n" " andi $v0, $v0, 0x7c\n" " beqz $v0, 1f\n" " srl $v0, $v0, 2\n" " li $v1, " MON_STR(MON_SLOT_EXCMASK) "\n" " srlv $v1, $v1, $v0\n" " andi $v1, $v1, 1\n" " bnez $v1, 2f\n" " nop\n" " jr $ra\n" " nop\n" "1:\n" MON_SLOT_RX_TEST " jr $ra\n" " nop\n" "2:\n" " sw $a0, 0x10($k0)\n" " sw $a1, 0x14($k0)\n" " sw $a2, 0x18($k0)\n" " sw $a3, 0x1c($k0)\n" " mfc0 $a0, $12\n" " nop\n" " sw $a0, 0x8c($k0)\n" " mfc0 $a1, $13\n" " nop\n" " sw $a1, 0x90($k0)\n" " sw $k1, 0x6c($k0)\n" " sw $s0, 0x40($k0)\n" " sw $s1, 0x44($k0)\n" " sw $s2, 0x48($k0)\n" " sw $s3, 0x4c($k0)\n" " sw $s4, 0x50($k0)\n" " sw $s5, 0x54($k0)\n" " sw $s6, 0x58($k0)\n" " sw $s7, 0x5c($k0)\n" " sw $t0, 0x20($k0)\n" " sw $t1, 0x24($k0)\n" " sw $t2, 0x28($k0)\n" " sw $t3, 0x2c($k0)\n" " sw $t4, 0x30($k0)\n" " sw $t5, 0x34($k0)\n" " sw $t6, 0x38($k0)\n" " sw $t7, 0x3c($k0)\n" " sw $t8, 0x60($k0)\n" " sw $t9, 0x64($k0)\n" " sw $gp, 0x70($k0)\n" " sw $sp, 0x74($k0)\n" " sw $fp, 0x78($k0)\n" " mfhi $a0\n" " nop\n" " sw $a0, 0x84($k0)\n" " mflo $a0\n" " nop\n" " sw $a0, 0x88($k0)\n" " move $s0, $ra\n" " la $sp, monitorSlotStack + " MON_STR(MONITOR_SLOT_STACK_WORDS) " * 4 - 16\n" " jal monitorSlotDispatch\n" " nop\n" " lw $k0, 0x108($zero)\n" " move $ra, $s0\n" " lw $k0, 0($k0)\n" " nop\n" " addiu $k0, $k0, 8\n" " lw $a0, 0x84($k0)\n" " lw $a1, 0x88($k0)\n" " mthi $a0\n" " mtlo $a1\n" " lw $a0, 0x10($k0)\n" " lw $a1, 0x14($k0)\n" " lw $a2, 0x18($k0)\n" " lw $a3, 0x1c($k0)\n" " lw $t0, 0x20($k0)\n" " lw $t1, 0x24($k0)\n" " lw $t2, 0x28($k0)\n" " lw $t3, 0x2c($k0)\n" " lw $t4, 0x30($k0)\n" " lw $t5, 0x34($k0)\n" " lw $t6, 0x38($k0)\n" " lw $t7, 0x3c($k0)\n" " lw $t8, 0x60($k0)\n" " lw $t9, 0x64($k0)\n" " lw $s0, 0x40($k0)\n" " lw $sp, 0x74($k0)\n" " jr $ra\n" " nop\n" " .set pop\n" " .size monitorSlotEntry, . - monitorSlotEntry\n" " .previous\n")

◆ GWU_FN_A

#define GWU_FN_A (   W,
  name,
  op,
  reg,
  N 
)
Value:
GWU_FN(W, name, op, reg, N, 0) \
GWU_FN(W, name, op, reg, N, 1) \
GWU_FN(W, name, op, reg, N, 2) \
GWU_FN(W, name, op, reg, N, 3)
#define GWU_FN(W, name, op, reg, N, A)
Definition gwu.h:83

◆ GWU_FUNCS

#define GWU_FUNCS (   K,
  name,
  scene,
  op,
  reg,
  canary,
  label,
  expect 
)
Value:
GWU_FN_A(GWU_W_##K, name, op, reg, 0) \
GWU_FN_A(GWU_W_##K, name, op, reg, 1) \
GWU_FN_A(GWU_W_##K, name, op, reg, 2) \
GWU_FN_A(GWU_W_##K, name, op, reg, 3) \
static uint32_t name##_rd(void) { \
uint32_t v; \
GWU_GET_##K(reg, v); \
return v; \
}
#define GWU_FN_A(W, name, op, reg, N)
Definition gwu.h:92

◆ GWU_GET_C

#define GWU_GET_C   cop2_getc

◆ GWU_GET_D

#define GWU_GET_D   cop2_get

◆ GWU_ISC_C

#define GWU_ISC_C   1

◆ GWU_ISC_D

#define GWU_ISC_D   0

◆ GWU_NMAX

#define GWU_NMAX   4

◆ GWU_ROW

#define GWU_ROW (   name,
  N 
)    {name##_##N##_0, name##_##N##_1, name##_##N##_2, name##_##N##_3}

◆ GWU_W_C

#define GWU_W_C   "ctc2"

◆ GWU_W_D

#define GWU_W_D   "mtc2"

Typedef Documentation

◆ GwuFn

typedef void(* GwuFn) (uint32_t, uint32_t)