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

the arm7 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-arm.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 ARM(ins, a, b, c, d)
 
#define ARM3(ins, a, b, c)   ARM(ins, a, b, c >> 8, c)
 
#define ARM2(ins, a, b)   ARM(ins, a, 0, b >> 8, b)
 
#define ARMN(ins, a)
 
#define ARM_MOV(a, b)   ARM(31, b, a, (b << 3) | 0x3, 0x78);
 
#define ARM_UNBOX()
 
#define ARM_MATH(do)
 
#define ARM_CMP(cmp)
 
#define TAG_JMP(ins, jpos)
 

Functions

void potion_arm_setup (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp)
 
void potion_arm_stack (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, long rsp)
 
void potion_arm_registers (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, long start)
 
void potion_arm_local (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, long reg, long arg)
 
void potion_arm_upvals (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, long lregs, long start, int upc)
 
void potion_arm_jmpedit (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, unsigned char *asmj, int dist)
 
void potion_arm_move (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_arm_loadpn (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_arm_loadk (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_arm_self (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_arm_getlocal (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long regs)
 
void potion_arm_setlocal (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long regs)
 
void potion_arm_getupval (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long lregs)
 
void potion_arm_setupval (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long lregs)
 
void potion_arm_global (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_arm_newtuple (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_arm_gettuple (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_arm_settuple (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_arm_search (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_arm_gettable (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_arm_settable (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_arm_newlick (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_arm_getpath (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_arm_setpath (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_arm_add (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_arm_sub (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_arm_mult (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_arm_div (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_arm_rem (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_arm_pow (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_arm_neq (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_arm_eq (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_arm_lt (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_arm_lte (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_arm_gt (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_arm_gte (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_arm_bitn (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_arm_bitl (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_arm_bitr (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_arm_def (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_arm_bind (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_arm_message (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_arm_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_arm_test_asm (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, int test)
 
void potion_arm_test (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_arm_not (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_arm_cmp (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_arm_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_arm_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_arm_named (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_arm_call (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_arm_callset (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_arm_tailcall (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_arm_return (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_arm_method (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_OP **pos, long lregs, long start, long regs)
 
void potion_arm_class (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_arm_finish (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp)
 
void potion_arm_mcache (Potion *P, vPN(Vtable) vt, PNAsm *volatile *asmp)
 
void potion_arm_ivars (Potion *P, PN ivars, PNAsm *volatile *asmp)
 
 MAKE_TARGET (arm)
 

Detailed Description

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

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

(c) 2008 why the lucky stiff, the freelance professor (c) 2014 perl11.org

Definition in file vm-arm.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 38 of file vm-arm.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 44 of file vm-arm.c.

#define REG_TMP   3

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

Definition at line 46 of file vm-arm.c.

#define ARM (   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 48 of file vm-arm.c.

#define ARM3 (   ins,
  a,
  b,
 
)    ARM(ins, a, b, c >> 8, c)

Definition at line 52 of file vm-arm.c.

#define ARM2 (   ins,
  a,
 
)    ARM(ins, a, 0, b >> 8, b)

Definition at line 54 of file vm-arm.c.

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

Definition at line 56 of file vm-arm.c.

#define ARM_MOV (   a,
 
)    ARM(31, b, a, (b << 3) | 0x3, 0x78);

Definition at line 60 of file vm-arm.c.

#define ARM_UNBOX ( )
Value:
ARM(31, REG(op.a), REG(op.a), 0x0e, 0x70); /* srawi rA,rA,1 */ \
ARM(31, REG(op.b), REG(op.b), 0x0e, 0x70) /* srawi rB,rB,1 */
#define ARM(ins, a, b, c, d)
Definition: vm-arm.c:48
#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-arm.c:44

Definition at line 62 of file vm-arm.c.

#define ARM_MATH (   do)
Value:
do; /* add, sub, ... */ \
ARM(21, REG(op.a), REG(op.a), 0x08, 0x3c); /* rlwin rA,rA,1,0,30 */ \
ARM3(24, REG(op.a), REG(op.a), 1); /* ori rA,1 */ \
ARM(21, REG(op.b), REG(op.b), 0x08, 0x3c); /* rlwin rB,rB,1,0,30 */ \
ARM3(24, REG(op.b), REG(op.b), 1); /* ori rB,1 */
#define ARM3(ins, a, b, c)
Definition: vm-arm.c:52
#define ARM(ins, a, b, c, d)
Definition: vm-arm.c:48
#define ARM_UNBOX()
Definition: vm-arm.c:62
#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-arm.c:44

Definition at line 65 of file vm-arm.c.

#define ARM_CMP (   cmp)
Value:
ARM(31, 7 << 2, REG(op.a), REG(op.b) << 3, 0x40); /* cmplw cr7,rA,rB */ \
ASMI(cmp | 12); /* bCMP +12 */ \
ARM2(14, REG(op.a), PN_TRUE); /* li rA,TRUE */ \
ASMI(0x48000008); /* b +8 */ \
ARM2(14, REG(op.a), PN_FALSE); /* li rA,FALSE */
#define ARM(ins, a, b, c, d)
Definition: vm-arm.c:48
#define PN_FALSE
Definition: potion.h:141
#define PN_TRUE
Definition: potion.h:142
#define ARM_UNBOX()
Definition: vm-arm.c:62
#define ARM2(ins, a, b)
Definition: vm-arm.c:54
#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-arm.c:44
#define ASMI(pn)
Definition: asm.h:100

Definition at line 72 of file vm-arm.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 79 of file vm-arm.c.

Function Documentation

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

Definition at line 95 of file vm-arm.c.

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

Definition at line 99 of file vm-arm.c.

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

Definition at line 105 of file vm-arm.c.

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

Definition at line 108 of file vm-arm.c.

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

Definition at line 111 of file vm-arm.c.

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

Definition at line 114 of file vm-arm.c.

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

Definition at line 123 of file vm-arm.c.

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

Definition at line 128 of file vm-arm.c.

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

Definition at line 133 of file vm-arm.c.

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

Definition at line 140 of file vm-arm.c.

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

Definition at line 143 of file vm-arm.c.

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

Definition at line 148 of file vm-arm.c.

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

Definition at line 153 of file vm-arm.c.

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

Definition at line 156 of file vm-arm.c.

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

Definition at line 159 of file vm-arm.c.

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

Definition at line 162 of file vm-arm.c.

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

Definition at line 165 of file vm-arm.c.

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

Definition at line 168 of file vm-arm.c.

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

Definition at line 171 of file vm-arm.c.

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

Definition at line 174 of file vm-arm.c.

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

Definition at line 176 of file vm-arm.c.

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

Definition at line 179 of file vm-arm.c.

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

Definition at line 182 of file vm-arm.c.

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

Definition at line 185 of file vm-arm.c.

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

Definition at line 188 of file vm-arm.c.

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

Definition at line 195 of file vm-arm.c.

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

Definition at line 202 of file vm-arm.c.

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

Definition at line 209 of file vm-arm.c.

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

Definition at line 216 of file vm-arm.c.

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

Definition at line 226 of file vm-arm.c.

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

Definition at line 238 of file vm-arm.c.

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

Definition at line 243 of file vm-arm.c.

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

Definition at line 248 of file vm-arm.c.

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

Definition at line 253 of file vm-arm.c.

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

Definition at line 258 of file vm-arm.c.

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

Definition at line 263 of file vm-arm.c.

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

Definition at line 268 of file vm-arm.c.

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

Definition at line 271 of file vm-arm.c.

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

Definition at line 278 of file vm-arm.c.

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

Definition at line 285 of file vm-arm.c.

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

Definition at line 288 of file vm-arm.c.

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

Definition at line 291 of file vm-arm.c.

void potion_arm_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 294 of file vm-arm.c.

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

Definition at line 299 of file vm-arm.c.

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

Definition at line 302 of file vm-arm.c.

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

Definition at line 306 of file vm-arm.c.

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

Definition at line 310 of file vm-arm.c.

void potion_arm_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 313 of file vm-arm.c.

void potion_arm_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 319 of file vm-arm.c.

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

Definition at line 325 of file vm-arm.c.

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

Definition at line 328 of file vm-arm.c.

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

Definition at line 331 of file vm-arm.c.

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

Definition at line 334 of file vm-arm.c.

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

Definition at line 337 of file vm-arm.c.

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

Definition at line 345 of file vm-arm.c.

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

Definition at line 348 of file vm-arm.c.

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

Definition at line 351 of file vm-arm.c.

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

Definition at line 354 of file vm-arm.c.

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

Definition at line 357 of file vm-arm.c.

MAKE_TARGET ( arm  )