X-Git-Url: https://git.hcoop.net/bpt/guile.git/blobdiff_plain/5f236208d0d864546e59afa0f5a11c9b3ba14b10..08c5d888d4634669634937d9f7b57145fefc848a:/libguile/instructions.h diff --git a/libguile/instructions.h b/libguile/instructions.h index a2263228f..ad058cd9d 100644 --- a/libguile/instructions.h +++ b/libguile/instructions.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2001, 2009 Free Software Foundation, Inc. +/* Copyright (C) 2001, 2009, 2012, 2013 Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -20,26 +20,30 @@ #define _SCM_INSTRUCTIONS_H_ #include +#include + +#ifdef BUILDING_LIBGUILE + +enum scm_opcode + { +#define ENUM(opcode, tag, name, meta) scm_op_##tag = opcode, + FOR_EACH_VM_OPERATION(ENUM) +#undef ENUM + }; + +#define SCM_PACK_OP_24(op,arg) (scm_op_##op | (arg) << 8) +#define SCM_PACK_OP_8_8_8(op,a,b,c) SCM_PACK_OP_24 (op, (a) | ((b) << 8) | ((c) << 16)) +#define SCM_PACK_OP_8_16(op,a,b) SCM_PACK_OP_24 (op, (a) | (b) << 8) +#define SCM_PACK_OP_16_8(op,a,b) SCM_PACK_OP_24 (op, (a) | (b) << 16) +#define SCM_PACK_OP_12_12(op,a,b) SCM_PACK_OP_24 (op, (a) | (b) << 12) +#define SCM_PACK_OP_ARG_8_24(a,b) ((a) | ((b) << 8)) #define SCM_VM_NUM_INSTRUCTIONS (1<<8) #define SCM_VM_INSTRUCTION_MASK (SCM_VM_NUM_INSTRUCTIONS-1) -enum scm_opcode { -#define VM_INSTRUCTION_TO_OPCODE 1 -#include -#include -#include -#include -#undef VM_INSTRUCTION_TO_OPCODE -}; - -SCM_API SCM scm_instruction_list (void); -SCM_API SCM scm_instruction_p (SCM obj); -SCM_API SCM scm_instruction_length (SCM inst); -SCM_API SCM scm_instruction_pops (SCM inst); -SCM_API SCM scm_instruction_pushes (SCM inst); -SCM_API SCM scm_instruction_to_opcode (SCM inst); -SCM_API SCM scm_opcode_to_instruction (SCM op); +#endif /* BUILDING_LIBGUILE */ + +SCM_INTERNAL SCM scm_instruction_list (void); SCM_INTERNAL void scm_bootstrap_instructions (void); SCM_INTERNAL void scm_init_instructions (void);