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

the x86 and x86_64 jit. More...

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

Go to the source code of this file.

Macros

#define RBP(x)   (0x100 - ((x + 1) * sizeof(PN)))
 
#define RBPN(x)   (- (int)((x + 1) * sizeof(PN)))
 
#define RBPI(x)   (0x100 - ((x + 1) * sizeof(int)))
 
#define X86_PRE_T   1
 
#define X86_PRE()   ASM(0x48)
 
#define X86_POST()   ASM(0x48); ASM(0x98)
 
#define X86C(op32, op64, n, reg)   op64+((reg)>31?(n)*3:0)
 
#define ASM_MOV_EBP(op, reg)
 
#define X86_MOV_RBP(reg, x)   X86_PRE(); ASM(reg); ASM_MOV_EBP(0x45,x)
 
#define X86_MOVQ(reg, x)
 
#define TAG_PREP(tag)   tag = (*asmp)->len + 1
 
#define TAG_LABEL(tag)   (*asmp)->ptr[tag] = ((*asmp)->len - tag - 1)
 
#define TAG_JMPTO(tag)   TAG_LABEL(tag)
 
#define TAG_JMPF(insn, tag)
 
#define TAG_JMPFW(insn, tag)
 
#define TAG_JMPTOW(tag)   TAG_LABEL4(tag)
 
#define TAG_JMPB(insn, tag)
 
#define TAG_JMPTOB(tag)   tag = (*asmp)->len
 
#define TAG_PREP4(tag)   tag = (*asmp)->len
 
#define TAG_LABEL4(tag)
 
#define X86_MATH(two, dbl_func, ops)
 
#define X86_NUMCMP(iop, xop, xmms)
 
#define X86_ARGO(regn, argn)   potion_x86_c_arg(P, asmp, 1, regn, argn)
 
#define X86_ARGO_IMM(regn, argn)   potion_x86_c_arg(P, asmp, 2, regn, argn)
 
#define X86_ARGI(regn, argn)   potion_x86_c_arg(P, asmp, 0, regn, argn)
 
#define TAG_JMP(jpos)
 
#define X86_DEBUG()
 

Functions

void potion_x86_debug ()
 
static void potion_x86_c_arg (Potion *P, PNAsm *volatile *asmp, int out, int regn, int argn)
 mimick c calling convention More...
 
void potion_x86_setup (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp)
 
void potion_x86_stack (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, long need)
 
void potion_x86_registers (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, long start)
 
void potion_x86_local (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, long reg, long arg)
 
void potion_x86_upvals (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, long lregs, long start, int upc)
 
void potion_x86_jmpedit (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, unsigned char *asmj, int dist)
 
void potion_x86_move (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_x86_loadpn (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
PN potion_f_values (Potion *P, PN cl)
 
void potion_x86_loadk (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_x86_self (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_x86_getlocal (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long regs)
 
void potion_x86_setlocal (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long regs)
 
void potion_x86_getupval (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long lregs)
 
void potion_x86_setupval (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long lregs)
 
void potion_x86_global (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_x86_newtuple (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_x86_gettuple (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_x86_settuple (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_x86_gettable (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_x86_settable (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_x86_newlick (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_x86_getpath (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_x86_setpath (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_x86_add (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_x86_sub (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_x86_mult (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_x86_div (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_x86_rem (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_x86_pow (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_x86_neq (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_x86_eq (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_x86_lt (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_x86_lte (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_x86_gt (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_x86_gte (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_x86_bitn (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_x86_bitl (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_x86_bitr (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_x86_def (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_x86_bind (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_x86_message (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_x86_jmp (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, PNJumps *jmps, size_t *offs, int *jmpc)
 
void potion_x86_test_asm (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, int test)
 
void potion_x86_test (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_x86_not (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_x86_cmp (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_x86_testjmp (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, PNJumps *jmps, size_t *offs, int *jmpc)
 
void potion_x86_notjmp (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, PNJumps *jmps, size_t *offs, int *jmpc)
 
void potion_x86_named (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_x86_call (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_x86_callset (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_x86_tailcall (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
void potion_x86_return (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos)
 
PN potion_f_protos (Potion *P, PN cl, PN i)
 
void potion_x86_method (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE *pos, long lregs, long start, long regs)
 
void potion_x86_class (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp, PN_SIZE pos, long start)
 
void potion_x86_finish (Potion *P, struct PNProto *volatile f, PNAsm *volatile *asmp)
 
void potion_x86_mcache (Potion *P, vPN(Vtable) vt, PNAsm *volatile *asmp)
 
void potion_x86_ivars (Potion *P, PN ivars, PNAsm *volatile *asmp)
 
 MAKE_TARGET (x86)
 

Detailed Description

the x86 and x86_64 jit.

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

(c) 2008 why the lucky stiff, the freelance professor (c) 2013-2015 perl11 org

Definition in file vm-x86.c.

Macro Definition Documentation

#define RBP (   x)    (0x100 - ((x + 1) * sizeof(PN)))

Definition at line 17 of file vm-x86.c.

#define RBPN (   x)    (- (int)((x + 1) * sizeof(PN)))

Definition at line 18 of file vm-x86.c.

#define RBPI (   x)    (0x100 - ((x + 1) * sizeof(int)))

Definition at line 19 of file vm-x86.c.

#define X86_PRE_T   1

Definition at line 38 of file vm-x86.c.

#define X86_PRE ( )    ASM(0x48)

Definition at line 39 of file vm-x86.c.

#define X86_POST ( )    ASM(0x48); ASM(0x98)

Definition at line 40 of file vm-x86.c.

#define X86C (   op32,
  op64,
  n,
  reg 
)    op64+((reg)>31?(n)*3:0)

Definition at line 41 of file vm-x86.c.

#define ASM_MOV_EBP (   op,
  reg 
)
Value:
if (reg > 15) { \
DBG_v("; reg %d > 15, op 0x%x\n", (int)reg, op); \
ASM((op)+0x40); ASMI(RBPN(reg)); } \
else { ASM(op); ASM(RBP(reg)); }
#define RBP(x)
Definition: vm-x86.c:17
#define DBG_v(...)
Definition: potion.h:244
#define RBPN(x)
Definition: vm-x86.c:18
#define ASM(ins)
Definition: asm.h:98
#define ASMI(pn)
Definition: asm.h:100

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

#define X86_MOV_RBP (   reg,
 
)    X86_PRE(); ASM(reg); ASM_MOV_EBP(0x45,x)

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

#define X86_MOVQ (   reg,
 
)
Value:
/* size = 14,17 */ \
X86_PRE(); ASM(0xb8); ASMN((PN)(x)); /* movq x, %rax */ \
X86_PRE(); ASM(0x89); ASM_MOV_EBP(0x45,reg) /* movq %rax, -A(%rbp) */
#define ASM_MOV_EBP(op, reg)
Definition: vm-x86.c:43
#define ASMN(pn)
Definition: asm.h:101
volatile _PN PN
Definition: potion.h:81
#define X86_PRE()
Definition: vm-x86.c:39
#define ASM(ins)
Definition: asm.h:98

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

#define TAG_PREP (   tag)    tag = (*asmp)->len + 1

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

#define TAG_LABEL (   tag)    (*asmp)->ptr[tag] = ((*asmp)->len - tag - 1)

Definition at line 66 of file vm-x86.c.

#define TAG_JMPTO (   tag)    TAG_LABEL(tag)

Definition at line 67 of file vm-x86.c.

#define TAG_JMPF (   insn,
  tag 
)
Value:
TAG_PREP(tag); \
ASM(insn); \
ASM(0); \
#define TAG_PREP(tag)
Definition: vm-x86.c:65
#define ASM(ins)
Definition: asm.h:98

Definition at line 69 of file vm-x86.c.

#define TAG_JMPFW (   insn,
  tag 
)
Value:
ASM(0x0f); ASM(insn); \
TAG_PREP4(tag); ASMI(0);
#define TAG_PREP4(tag)
Definition: vm-x86.c:96
#define ASM(ins)
Definition: asm.h:98
#define ASMI(pn)
Definition: asm.h:100

Definition at line 75 of file vm-x86.c.

#define TAG_JMPTOW (   tag)    TAG_LABEL4(tag)

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

#define TAG_JMPB (   insn,
  tag 
)
Value:
if (tag > (*asmp)->len) { \
potion_fatal("jmp fw"); \
} else if ((*asmp)->len - tag > 127) { /* jx long */ \
ASM(0x0f); \
ASM(insn + 0x10); \
ASMI(tag - (*asmp)->len - 2); \
} else { /* jx short */ \
ASM(insn); \
ASM(tag - (*asmp)->len - 2); \
}
#define ASM(ins)
Definition: asm.h:98
void potion_fatal(char *message)
Definition: internal.c:282
#define ASMI(pn)
Definition: asm.h:100

Definition at line 84 of file vm-x86.c.

#define TAG_JMPTOB (   tag)    tag = (*asmp)->len

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

#define TAG_PREP4 (   tag)    tag = (*asmp)->len

Definition at line 96 of file vm-x86.c.

#define TAG_LABEL4 (   tag)
Value:
({ int* ptr = (int*)((*asmp)->ptr + tag); \
*ptr = (*asmp)->len - tag - 4; })

Definition at line 97 of file vm-x86.c.

#define X86_MATH (   two,
  dbl_func,
  ops 
)
Value:
({ \
int dbl_a, dbl_a1, end_b; \
X86_MOV_RBP(0x8B, op.a); /* mov -A(%rbp) %eax */ \
if (two) { X86_PRE(); ASM(0x8B); ASM_MOV_EBP(0x55,op.b) } /* mov -B(%rbp) %edx */ \
ASM(0xF6); ASM(0xC0); ASM(0x01); /* test 0x1 %al */ \
TAG_PREP(dbl_a); ASM(0x74); ASM(0); /* je [a] */ \
if (two) { ASM(0xF6); ASM(0xC2); ASM(0x01); } /* test 0x1 %dl */ \
if (two) { TAG_PREP(dbl_a1); ASM(0x74); ASM(0); /* je [a] */ } \
ops; /* add, sub, ... */ \
TAG_PREP(end_b); ASM(0xEB); ASM(0); /* jmp [b] */ \
TAG_LABEL(dbl_a); if (two) { TAG_LABEL(dbl_a1); } \
X86_ARGO(start - 3, 0); /* [a]: mov &P 0(%esp) */ \
X86_ARGO(op.a, 1); /* mov &CL 1(%esp) */ \
X86_ARGO(op.b, 2); /* mov B 2(%esp) */ \
X86_PRE(); ASM(0xB8); ASMN(dbl_func); /* mov &dbl_func %rax */ \
ASM(0xFF); ASM(0xD0); /* callq %rax */ \
TAG_LABEL(end_b); \
X86_MOV_RBP(0x89, op.a) /* [b]: mov -B(%rbp) %eax */ \
})
#define X86_MOV_RBP(reg, x)
Definition: vm-x86.c:55
#define TAG_LABEL(tag)
Definition: vm-x86.c:66
#define ASM_MOV_EBP(op, reg)
Definition: vm-x86.c:43
#define X86_ARGO(regn, argn)
Definition: vm-x86.c:250
#define ASMN(pn)
Definition: asm.h:101
#define TAG_PREP(tag)
Definition: vm-x86.c:65
#define X86_PRE()
Definition: vm-x86.c:39
#define ASM(ins)
Definition: asm.h:98

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

#define X86_NUMCMP (   iop,
  xop,
  xmms 
)

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

#define X86_ARGO (   regn,
  argn 
)    potion_x86_c_arg(P, asmp, 1, regn, argn)

Definition at line 250 of file vm-x86.c.

#define X86_ARGO_IMM (   regn,
  argn 
)    potion_x86_c_arg(P, asmp, 2, regn, argn)

Definition at line 251 of file vm-x86.c.

#define X86_ARGI (   regn,
  argn 
)    potion_x86_c_arg(P, asmp, 0, regn, argn)

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

#define TAG_JMP (   jpos)
Value:
ASM(0xE9); \
if ((int)jpos >= (int)pos) { \
jmps[*jmpc].from = asmp[0]->len; \
ASMI(0); \
jmps[*jmpc].to = jpos + 1; \
*jmpc = *jmpc + 1; \
} else if ((int)jpos < (int)pos) { \
ASMI(offs[jpos + 1] - ((asmp[0]->len) + 4)); \
} else { \
ASMI(0); \
}
#define ASM(ins)
Definition: asm.h:98
#define ASMI(pn)
Definition: asm.h:100

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

#define X86_DEBUG ( )
Value:
ASM(0xFF); ASM(0xD0)
void potion_x86_debug()
Definition: vm-x86.c:272
#define ASMN(pn)
Definition: asm.h:101
#define X86_PRE()
Definition: vm-x86.c:39
#define ASM(ins)
Definition: asm.h:98

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

Function Documentation

void potion_x86_debug ( )

Definition at line 272 of file vm-x86.c.

static void potion_x86_c_arg ( Potion P,
PNAsm *volatile *  asmp,
int  out,
int  regn,
int  argn 
)
static

mimick c calling convention

See also
http://en.wikipedia.org/wiki/X86_calling_conventions
Parameters
asmpjit buffer
out1 out-param only, 2 out+immediate, 0 in-param also
regnvalue (usually indirect stack ptr, relative to ebp)
argnargument index (0-5 in regs on 64bit)

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

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

Definition at line 415 of file vm-x86.c.

void potion_x86_stack ( Potion P,
struct PNProto *volatile  f,
PNAsm *volatile *  asmp,
long  need 
)

Definition at line 420 of file vm-x86.c.

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

Definition at line 433 of file vm-x86.c.

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

Definition at line 450 of file vm-x86.c.

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

Definition at line 454 of file vm-x86.c.

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

Definition at line 466 of file vm-x86.c.

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

Definition at line 470 of file vm-x86.c.

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

Definition at line 476 of file vm-x86.c.

PN potion_f_values ( Potion P,
PN  cl 
)

Definition at line 481 of file vm-x86.c.

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

Definition at line 485 of file vm-x86.c.

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

Definition at line 497 of file vm-x86.c.

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

Definition at line 505 of file vm-x86.c.

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

Definition at line 524 of file vm-x86.c.

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

Definition at line 543 of file vm-x86.c.

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

Definition at line 552 of file vm-x86.c.

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

Definition at line 559 of file vm-x86.c.

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

Definition at line 570 of file vm-x86.c.

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

Definition at line 580 of file vm-x86.c.

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

Definition at line 598 of file vm-x86.c.

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

Definition at line 608 of file vm-x86.c.

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

Definition at line 619 of file vm-x86.c.

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

Definition at line 630 of file vm-x86.c.

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

Definition at line 653 of file vm-x86.c.

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

Definition at line 663 of file vm-x86.c.

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

Definition at line 673 of file vm-x86.c.

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

Definition at line 681 of file vm-x86.c.

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

Definition at line 690 of file vm-x86.c.

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

Definition at line 701 of file vm-x86.c.

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

Definition at line 714 of file vm-x86.c.

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

Definition at line 727 of file vm-x86.c.

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

Definition at line 737 of file vm-x86.c.

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

Definition at line 749 of file vm-x86.c.

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

Definition at line 761 of file vm-x86.c.

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

Definition at line 768 of file vm-x86.c.

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

Definition at line 775 of file vm-x86.c.

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

Definition at line 782 of file vm-x86.c.

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

Definition at line 789 of file vm-x86.c.

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

Definition at line 797 of file vm-x86.c.

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

Definition at line 810 of file vm-x86.c.

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

Definition at line 823 of file vm-x86.c.

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

Definition at line 834 of file vm-x86.c.

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

Definition at line 844 of file vm-x86.c.

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

Definition at line 854 of file vm-x86.c.

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

Definition at line 859 of file vm-x86.c.

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

Definition at line 874 of file vm-x86.c.

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

Definition at line 878 of file vm-x86.c.

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

Definition at line 882 of file vm-x86.c.

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

Definition at line 886 of file vm-x86.c.

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

Definition at line 896 of file vm-x86.c.

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

! +2 only XXX

Definition at line 907 of file vm-x86.c.

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

Definition at line 935 of file vm-x86.c.

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

Definition at line 1019 of file vm-x86.c.

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

Definition at line 1029 of file vm-x86.c.

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

Definition at line 1032 of file vm-x86.c.

PN potion_f_protos ( Potion P,
PN  cl,
PN  i 
)

Definition at line 1037 of file vm-x86.c.

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

Definition at line 1048 of file vm-x86.c.

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

Definition at line 1083 of file vm-x86.c.

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

Definition at line 1093 of file vm-x86.c.

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

Definition at line 1096 of file vm-x86.c.

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

Definition at line 1122 of file vm-x86.c.

MAKE_TARGET ( x86  )