potion  0.2
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
vm-ppc.c File Reference

the powerpc jit (32-bit only), unfinished! More...

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "potion.h"
#include "internal.h"
#include "opcodes.h"
#include "asm.h"
+ Include dependency graph for vm-ppc.c:

Go to the source code of this file.

Macros

#define RBP(x)   (0x18 + (x * sizeof(PN)))
 
#define REG(x)   (x == 0 ? 0 : (x == 1 ? 2 : x + 2))
 The EABI reserves GPR1 for a stack pointer, GPR3-GPR7 for function argument passing, and GPR3 for function return values. More...
 
#define REG_TMP   3
 The scratch space, register 3, is referred to as rD in the notation. More...
 
#define PPC(ins, a, b, c, d)
 
#define PPC3(ins, a, b, c)   PPC(ins, a, b, c >> 8, c)
 
#define PPC2(ins, a, b)   PPC(ins, a, 0, b >> 8, b)
 
#define PPCN(ins, a)
 
#define PPC_MOV(a, b)   PPC(31, b, a, (b << 3) | 0x3, 0x78);
 
#define PPC_UNBOX()
 
#define PPC_MATH(do)
 
#define PPC_CMP(cmp)
 
#define TAG_JMP(ins, jpos)
 

Functions

void potion_ppc_setup (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp)
 
void potion_ppc_stack (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, long rsp)
 
void potion_ppc_registers (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, long start)
 
void potion_ppc_local (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, long reg, long arg)
 
void potion_ppc_upvals (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, long lregs, long start, int upc)
 
void potion_ppc_jmpedit (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, unsigned char *asmj, int dist)
 
void potion_ppc_move (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_ppc_loadpn (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_ppc_loadk (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_ppc_self (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_ppc_getlocal (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long regs)
 
void potion_ppc_setlocal (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long regs)
 
void potion_ppc_getupval (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long lregs)
 
void potion_ppc_setupval (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long lregs)
 
void potion_ppc_global (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_ppc_newtuple (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_ppc_gettuple (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_ppc_settuple (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_ppc_search (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_ppc_gettable (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_ppc_settable (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_ppc_newlick (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_ppc_getpath (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_ppc_setpath (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_ppc_add (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_ppc_sub (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_ppc_mult (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_ppc_div (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_ppc_rem (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_ppc_pow (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_ppc_neq (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_ppc_eq (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_ppc_lt (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_ppc_lte (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_ppc_gt (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_ppc_gte (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_ppc_bitn (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_ppc_bitl (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_ppc_bitr (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_ppc_def (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_ppc_bind (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_ppc_message (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_ppc_jmp (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, PN_OP *start, PNJumps *jmps, size_t *offs, int *jmpc)
 
void potion_ppc_test_asm (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, int test)
 
void potion_ppc_test (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_ppc_not (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_ppc_cmp (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_ppc_testjmp (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, PN_OP *start, PNJumps *jmps, size_t *offs, int *jmpc)
 
void potion_ppc_notjmp (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, PN_OP *start, PNJumps *jmps, size_t *offs, int *jmpc)
 
void potion_ppc_named (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_ppc_call (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_ppc_callset (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_ppc_tailcall (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_ppc_return (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_ppc_method (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_OP **pos, long lregs, long start, long regs)
 
void potion_ppc_class (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_ppc_finish (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp)
 
void potion_ppc_mcache (Potion *P, vPN(Vtable) vt, PNAsm *volatile *asmp)
 
void potion_ppc_ivars (Potion *P, PN ivars, PNAsm *volatile *asmp)
 
 MAKE_TARGET (ppc)
 

Detailed Description

the powerpc jit (32-bit only), unfinished!

See also
core/vm.c and doc/INTERNALS.md

(c) 2008 why the lucky stiff, the freelance professor

Definition in file vm-ppc.c.

Macro Definition Documentation

#define RBP (   x)    (0x18 + (x * sizeof(PN)))
STACK LAYOUT

Like on other platforms, Potion attempts to match the conventions used by C compilers. In C, the stack layout looks something like:

sp | linkage (24 bytes) | parameters | locals | saved |

Note that while PowerPC has an EA, registers and stack space are the same. This is actually pretty ideal for Potion, since I can use the parameters area (the general-purpose registers) as if they were Potion's registers, then copy everything to the saved registers area when it comes time to make a call. This cuts down the assembler in every operation except for OP_CALL.

Now, if OP_CALL proves to be slow, I've considered an optimization. Since Potion already uses a contiguous set of registers to pass arguments, maybe I could just save the registers and the linkage, shift the stack pointer, then set it back once the call is done.

Alternatively, maybe it would be nice to give Potion's VM its own set of parameter registers, as a hint to the JIT.

Definition at line 37 of file vm-ppc.c.

#define REG (   x)    (x == 0 ? 0 : (x == 1 ? 2 : x + 2))

The EABI reserves GPR1 for a stack pointer, GPR3-GPR7 for function argument passing, and GPR3 for function return values.

(In Potion, it's the same but GPR3 is also used as scratch space and GPR4-7 act as general registers when not being used for parameters.)

Definition at line 43 of file vm-ppc.c.

#define REG_TMP   3

The scratch space, register 3, is referred to as rD in the notation.

Definition at line 45 of file vm-ppc.c.

#define PPC (   ins,
  a,
  b,
  c,
 
)
Value:
ASM((ins << 2) | ((a >> 2) & 0x3)); \
ASM((a << 5) | (b & 0x1F)); \
ASM(c); ASM(d)
#define ASM(ins)
Definition: asm.h:98

Definition at line 47 of file vm-ppc.c.

#define PPC3 (   ins,
  a,
  b,
 
)    PPC(ins, a, b, c >> 8, c)

Definition at line 51 of file vm-ppc.c.

#define PPC2 (   ins,
  a,
 
)    PPC(ins, a, 0, b >> 8, b)

Definition at line 53 of file vm-ppc.c.

#define PPCN (   ins,
 
)
Value:
ASM(ins << 2); \
ASM(a >> 16); ASM(a >> 8); ASM(a)
#define ASM(ins)
Definition: asm.h:98

Definition at line 55 of file vm-ppc.c.

#define PPC_MOV (   a,
 
)    PPC(31, b, a, (b << 3) | 0x3, 0x78);

Definition at line 59 of file vm-ppc.c.

#define PPC_UNBOX ( )
Value:
PPC(31, REG(op.a), REG(op.a), 0x0e, 0x70); /* srawi rA,rA,1 */ \
PPC(31, REG(op.b), REG(op.b), 0x0e, 0x70) /* srawi rB,rB,1 */
#define REG(x)
The EABI reserves GPR1 for a stack pointer, GPR3-GPR7 for function argument passing, and GPR3 for function return values.
Definition: vm-ppc.c:43
#define PPC(ins, a, b, c, d)
Definition: vm-ppc.c:47

Definition at line 61 of file vm-ppc.c.

#define PPC_MATH (   do)
Value:
do; /* add, sub, ... */ \
PPC(21, REG(op.a), REG(op.a), 0x08, 0x3c); /* rlwin rA,rA,1,0,30 */ \
PPC3(24, REG(op.a), REG(op.a), 1); /* ori rA,1 */ \
PPC(21, REG(op.b), REG(op.b), 0x08, 0x3c); /* rlwin rB,rB,1,0,30 */ \
PPC3(24, REG(op.b), REG(op.b), 1); /* ori rB,1 */
#define REG(x)
The EABI reserves GPR1 for a stack pointer, GPR3-GPR7 for function argument passing, and GPR3 for function return values.
Definition: vm-ppc.c:43
#define PPC3(ins, a, b, c)
Definition: vm-ppc.c:51
#define PPC_UNBOX()
Definition: vm-ppc.c:61
#define PPC(ins, a, b, c, d)
Definition: vm-ppc.c:47

Definition at line 64 of file vm-ppc.c.

#define PPC_CMP (   cmp)
Value:
PPC(31, 7 << 2, REG(op.a), REG(op.b) << 3, 0x40); /* cmplw cr7,rA,rB */ \
ASMI(cmp | 12); /* bCMP +12 */ \
PPC2(14, REG(op.a), PN_TRUE); /* li rA,TRUE */ \
ASMI(0x48000008); /* b +8 */ \
PPC2(14, REG(op.a), PN_FALSE); /* li rA,FALSE */
#define REG(x)
The EABI reserves GPR1 for a stack pointer, GPR3-GPR7 for function argument passing, and GPR3 for function return values.
Definition: vm-ppc.c:43
#define PPC_UNBOX()
Definition: vm-ppc.c:61
#define PN_FALSE
Definition: potion.h:141
#define PPC(ins, a, b, c, d)
Definition: vm-ppc.c:47
#define PN_TRUE
Definition: potion.h:142
#define PPC2(ins, a, b)
Definition: vm-ppc.c:53
#define ASMI(pn)
Definition: asm.h:100

Definition at line 71 of file vm-ppc.c.

#define TAG_JMP (   ins,
  jpos 
)
Value:
if (jpos >= pos) { \
jmps[*jmpc].from = asmp[0]->len; \
ASMI(ins); \
jmps[*jmpc].to = jpos + 1; \
*jmpc = *jmpc + 1; \
} else if (jpos < pos) { \
int off = (offs[jpos + 1] - (asmp[0]->len)); \
if (ins == 0x48000000) \
ASMI(ins | (off & 0x3FFFFFF)); \
ASMI(ins | (off & 0xFFFF)); \
} else { \
ASMI(ins); \
}
#define ASMI(pn)
Definition: asm.h:100

Definition at line 78 of file vm-ppc.c.

Function Documentation

void potion_ppc_setup ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp 
)

Definition at line 94 of file vm-ppc.c.

void potion_ppc_stack ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
long  rsp 
)

Definition at line 98 of file vm-ppc.c.

void potion_ppc_registers ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
long  start 
)

Definition at line 104 of file vm-ppc.c.

void potion_ppc_local ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
long  reg,
long  arg 
)

Definition at line 107 of file vm-ppc.c.

void potion_ppc_upvals ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
long  lregs,
long  start,
int  upc 
)

Definition at line 110 of file vm-ppc.c.

void potion_ppc_jmpedit ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
unsigned char *  asmj,
int  dist 
)

Definition at line 113 of file vm-ppc.c.

void potion_ppc_move ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos 
)

Definition at line 122 of file vm-ppc.c.

void potion_ppc_loadpn ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos 
)

Definition at line 127 of file vm-ppc.c.

void potion_ppc_loadk ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  start 
)

Definition at line 132 of file vm-ppc.c.

void potion_ppc_self ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  start 
)

Definition at line 139 of file vm-ppc.c.

void potion_ppc_getlocal ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  regs 
)

Definition at line 142 of file vm-ppc.c.

void potion_ppc_setlocal ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  regs 
)

Definition at line 147 of file vm-ppc.c.

void potion_ppc_getupval ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  lregs 
)

Definition at line 152 of file vm-ppc.c.

void potion_ppc_setupval ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  lregs 
)

Definition at line 155 of file vm-ppc.c.

void potion_ppc_global ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  start 
)

Definition at line 158 of file vm-ppc.c.

void potion_ppc_newtuple ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  start 
)

Definition at line 161 of file vm-ppc.c.

void potion_ppc_gettuple ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  start 
)

Definition at line 164 of file vm-ppc.c.

void potion_ppc_settuple ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  start 
)

Definition at line 167 of file vm-ppc.c.

void potion_ppc_search ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  start 
)

Definition at line 170 of file vm-ppc.c.

void potion_ppc_gettable ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  start 
)

Definition at line 173 of file vm-ppc.c.

void potion_ppc_settable ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  start 
)

Definition at line 175 of file vm-ppc.c.

void potion_ppc_newlick ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  start 
)

Definition at line 178 of file vm-ppc.c.

void potion_ppc_getpath ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  start 
)

Definition at line 181 of file vm-ppc.c.

void potion_ppc_setpath ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  start 
)

Definition at line 184 of file vm-ppc.c.

void potion_ppc_add ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  start 
)

Definition at line 187 of file vm-ppc.c.

void potion_ppc_sub ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  start 
)

Definition at line 194 of file vm-ppc.c.

void potion_ppc_mult ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  start 
)

Definition at line 201 of file vm-ppc.c.

void potion_ppc_div ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  start 
)

Definition at line 208 of file vm-ppc.c.

void potion_ppc_rem ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  start 
)

Definition at line 215 of file vm-ppc.c.

void potion_ppc_pow ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  start 
)

Definition at line 225 of file vm-ppc.c.

void potion_ppc_neq ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos 
)

Definition at line 237 of file vm-ppc.c.

void potion_ppc_eq ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos 
)

Definition at line 242 of file vm-ppc.c.

void potion_ppc_lt ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos 
)

Definition at line 247 of file vm-ppc.c.

void potion_ppc_lte ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos 
)

Definition at line 252 of file vm-ppc.c.

void potion_ppc_gt ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos 
)

Definition at line 257 of file vm-ppc.c.

void potion_ppc_gte ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos 
)

Definition at line 262 of file vm-ppc.c.

void potion_ppc_bitn ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  start 
)

Definition at line 267 of file vm-ppc.c.

void potion_ppc_bitl ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  start 
)

Definition at line 270 of file vm-ppc.c.

void potion_ppc_bitr ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  start 
)

Definition at line 277 of file vm-ppc.c.

void potion_ppc_def ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  start 
)

Definition at line 284 of file vm-ppc.c.

void potion_ppc_bind ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  start 
)

Definition at line 287 of file vm-ppc.c.

void potion_ppc_message ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  start 
)

Definition at line 290 of file vm-ppc.c.

void potion_ppc_jmp ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
PN_OP start,
PNJumps jmps,
size_t *  offs,
int *  jmpc 
)

Definition at line 293 of file vm-ppc.c.

void potion_ppc_test_asm ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
int  test 
)

Definition at line 298 of file vm-ppc.c.

void potion_ppc_test ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos 
)

Definition at line 301 of file vm-ppc.c.

void potion_ppc_not ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos 
)

Definition at line 305 of file vm-ppc.c.

void potion_ppc_cmp ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos 
)

Definition at line 309 of file vm-ppc.c.

void potion_ppc_testjmp ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
PN_OP start,
PNJumps jmps,
size_t *  offs,
int *  jmpc 
)

Definition at line 312 of file vm-ppc.c.

void potion_ppc_notjmp ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
PN_OP start,
PNJumps jmps,
size_t *  offs,
int *  jmpc 
)

Definition at line 318 of file vm-ppc.c.

void potion_ppc_named ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  start 
)

Definition at line 324 of file vm-ppc.c.

void potion_ppc_call ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  start 
)

Definition at line 327 of file vm-ppc.c.

void potion_ppc_callset ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  start 
)

Definition at line 330 of file vm-ppc.c.

void potion_ppc_tailcall ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  start 
)

Definition at line 333 of file vm-ppc.c.

void potion_ppc_return ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos 
)

Definition at line 336 of file vm-ppc.c.

void potion_ppc_method ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_OP **  pos,
long  lregs,
long  start,
long  regs 
)

Definition at line 344 of file vm-ppc.c.

void potion_ppc_class ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
PN_SIZE  pos,
long  start 
)

Definition at line 347 of file vm-ppc.c.

void potion_ppc_finish ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp 
)

Definition at line 350 of file vm-ppc.c.

void potion_ppc_mcache ( Potion P,
vPN(Vtable)  vt,
PNAsm *volatile *  asmp 
)

Definition at line 353 of file vm-ppc.c.

void potion_ppc_ivars ( Potion P,
PN  ivars,
PNAsm *volatile *  asmp 
)

Definition at line 356 of file vm-ppc.c.

MAKE_TARGET ( ppc  )