[svn:parrot] r41140 - trunk/include/parrot
bacek at svn.parrot.org
bacek at svn.parrot.org
Mon Sep 7 22:49:42 UTC 2009
Author: bacek
Date: Mon Sep 7 22:49:41 2009
New Revision: 41140
URL: https://trac.parrot.org/parrot/changeset/41140
Log:
[core] Manually inline REG macros for optimised builds
Modified:
trunk/include/parrot/context.h
Modified: trunk/include/parrot/context.h
==============================================================================
--- trunk/include/parrot/context.h Mon Sep 7 22:49:23 2009 (r41139)
+++ trunk/include/parrot/context.h Mon Sep 7 22:49:41 2009 (r41140)
@@ -16,15 +16,35 @@
* Macros to make accessing registers more convenient/readable.
*/
-#define CTX_REG_NUM(p, x) (*Parrot_pcc_get_FLOATVAL_reg(interp, (p), (x)))
-#define CTX_REG_INT(p, x) (*Parrot_pcc_get_INTVAL_reg(interp, (p), (x)))
-#define CTX_REG_PMC(p, x) (*Parrot_pcc_get_PMC_reg(interp, (p), (x)))
-#define CTX_REG_STR(p, x) (*Parrot_pcc_get_STRING_reg(interp, (p), (x)))
-
-#define REG_NUM(interp, x) (*Parrot_pcc_get_FLOATVAL_reg((interp), (interp)->ctx, (x)))
-#define REG_INT(interp, x) (*Parrot_pcc_get_INTVAL_reg((interp), (interp)->ctx, (x)))
-#define REG_PMC(interp, x) (*Parrot_pcc_get_PMC_reg((interp), (interp)->ctx, (x)))
-#define REG_STR(interp, x) (*Parrot_pcc_get_STRING_reg((interp), (interp)->ctx, (x)))
+#ifndef NDEBUG
+
+# define CTX_REG_NUM(p, x) (*Parrot_pcc_get_FLOATVAL_reg(interp, (p), (x)))
+# define CTX_REG_INT(p, x) (*Parrot_pcc_get_INTVAL_reg(interp, (p), (x)))
+# define CTX_REG_PMC(p, x) (*Parrot_pcc_get_PMC_reg(interp, (p), (x)))
+# define CTX_REG_STR(p, x) (*Parrot_pcc_get_STRING_reg(interp, (p), (x)))
+
+# define REG_NUM(interp, x) (*Parrot_pcc_get_FLOATVAL_reg((interp), (interp)->ctx, (x)))
+# define REG_INT(interp, x) (*Parrot_pcc_get_INTVAL_reg((interp), (interp)->ctx, (x)))
+# define REG_PMC(interp, x) (*Parrot_pcc_get_PMC_reg((interp), (interp)->ctx, (x)))
+# define REG_STR(interp, x) (*Parrot_pcc_get_STRING_reg((interp), (interp)->ctx, (x)))
+
+#else /* NDEBUG */
+
+/* Manually inlined macros. Used in optimised builds */
+
+# define __C(c) (PMC_data_typed(c, Parrot_Context*))
+
+# define CTX_REG_NUM(p, x) (__C(p)->bp.regs_n[-1L - (x)])
+# define CTX_REG_INT(p, x) (__C(p)->bp.regs_i[(x)])
+# define CTX_REG_PMC(p, x) (__C(p)->bp_ps.regs_p[-1L - (x)])
+# define CTX_REG_STR(p, x) (__C(p)->bp_ps.regs_s[(x)])
+
+# define REG_NUM(interp, x) CTX_REG_NUM((interp)->ctx, (x))
+# define REG_INT(interp, x) CTX_REG_INT((interp)->ctx, (x))
+# define REG_PMC(interp, x) CTX_REG_PMC((interp)->ctx, (x))
+# define REG_STR(interp, x) CTX_REG_STR((interp)->ctx, (x))
+
+#endif
/*
* and a set of macros to access a register by offset, used
More information about the parrot-commits
mailing list