[svn:parrot] r44688 - in branches/ops_pct/compilers/opsc/src/Ops: . Trans
bacek at svn.parrot.org
bacek at svn.parrot.org
Sat Mar 6 11:46:45 UTC 2010
Author: bacek
Date: Sat Mar 6 11:46:44 2010
New Revision: 44688
URL: https://trac.parrot.org/parrot/changeset/44688
Log:
Add more stuff for emitting C source
Modified:
branches/ops_pct/compilers/opsc/src/Ops/Emitter.pm
branches/ops_pct/compilers/opsc/src/Ops/Trans.pm
branches/ops_pct/compilers/opsc/src/Ops/Trans/C.pm
Modified: branches/ops_pct/compilers/opsc/src/Ops/Emitter.pm
==============================================================================
--- branches/ops_pct/compilers/opsc/src/Ops/Emitter.pm Sat Mar 6 11:46:17 2010 (r44687)
+++ branches/ops_pct/compilers/opsc/src/Ops/Emitter.pm Sat Mar 6 11:46:44 2010 (r44688)
@@ -83,8 +83,30 @@
}
method emit_c_source_file($fh) {
+ self._emit_source_preamble($fh);
}
+method _emit_source_preamble($fh) {
+
+ self._emit_preamble($fh);
+ $fh.print(qq|
+#include "{self<include>}"
+#include "pmc/pmc_parrotlibrary.h"
+#include "pmc/pmc_callcontext.h"
+
+{self.trans.defines}
+
+|);
+
+# if ( $self->{suffix} eq '' && !$self->{flag}->{dynamic} ) {
+# print $fh <<END_C_2;
+#static int get_op(PARROT_INTERP, const char * name, int full);
+#
+#END_C_2
+# }
+
+ $fh.print(self.ops_file.preamble);
+}
# given a headerfile name like "include/parrot/oplib/core_ops.h", this
# returns a string like "PARROT_OPLIB_CORE_OPS_H_GUARD"
Modified: branches/ops_pct/compilers/opsc/src/Ops/Trans.pm
==============================================================================
--- branches/ops_pct/compilers/opsc/src/Ops/Trans.pm Sat Mar 6 11:46:17 2010 (r44687)
+++ branches/ops_pct/compilers/opsc/src/Ops/Trans.pm Sat Mar 6 11:46:44 2010 (r44688)
@@ -22,6 +22,7 @@
# Called from Ops::Op.
method body_prelude() { '' }
+method defines() { die('...') }
# vim: expandtab shiftwidth=4 ft=perl6:
Modified: branches/ops_pct/compilers/opsc/src/Ops/Trans/C.pm
==============================================================================
--- branches/ops_pct/compilers/opsc/src/Ops/Trans/C.pm Sat Mar 6 11:46:17 2010 (r44687)
+++ branches/ops_pct/compilers/opsc/src/Ops/Trans/C.pm Sat Mar 6 11:46:44 2010 (r44688)
@@ -47,4 +47,29 @@
}
}
+=begin
+
+=item C<defines()>
+
+Returns the C C<#define> macros for register access etc.
+
+=end
+
+method defines() {
+ return qq|
+#include "pmc/pmc_callcontext.h"
+
+/* defines - Ops::Trans::C */
+#undef CONST
+#define REL_PC ((size_t)(cur_opcode - (opcode_t *)interp->code->base.data))
+#define CUR_OPCODE cur_opcode
+#define IREG(i) (CUR_CTX->bp.regs_i[cur_opcode[i]])
+#define NREG(i) (CUR_CTX->bp.regs_n[-1L - cur_opcode[i]])
+#define PREG(i) (CUR_CTX->bp_ps.regs_p[-1L - cur_opcode[i]])
+#define SREG(i) (CUR_CTX->bp_ps.regs_s[cur_opcode[i]])
+#define CONST(i) Parrot_pcc_get_constants(interp, interp->ctx)[cur_opcode[i]]
+|;
+
+}
+
# vim: expandtab shiftwidth=4 ft=perl6:
More information about the parrot-commits
mailing list