[svn:parrot] r41343 - in branches/kill_jit: . tools/build
darbelo at svn.parrot.org
darbelo at svn.parrot.org
Fri Sep 18 21:57:37 UTC 2009
Author: darbelo
Date: Fri Sep 18 21:57:36 2009
New Revision: 41343
URL: https://trac.parrot.org/parrot/changeset/41343
Log:
Remove jit2c.pl
Deleted:
branches/kill_jit/tools/build/jit2c.pl
Modified:
branches/kill_jit/MANIFEST
Modified: branches/kill_jit/MANIFEST
==============================================================================
--- branches/kill_jit/MANIFEST Fri Sep 18 21:49:45 2009 (r41342)
+++ branches/kill_jit/MANIFEST Fri Sep 18 21:57:36 2009 (r41343)
@@ -1,7 +1,7 @@
# ex: set ro:
# $Id$
#
-# generated by tools/dev/mk_manifest_and_skip.pl Fri Sep 18 21:45:03 2009 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Fri Sep 18 21:45:35 2009 UT
#
# See below for documentation on the format of this file.
#
@@ -2077,7 +2077,6 @@
tools/build/c2str.pl []
tools/build/fixup_gen_file.pl []
tools/build/headerizer.pl []
-tools/build/jit2c.pl []
tools/build/nativecall.pl []
tools/build/ops2c.pl [devel]
tools/build/ops2pm.pl []
Deleted: branches/kill_jit/tools/build/jit2c.pl
==============================================================================
--- branches/kill_jit/tools/build/jit2c.pl Fri Sep 18 21:57:36 2009 (r41342)
+++ /dev/null 00:00:00 1970 (deleted)
@@ -1,530 +0,0 @@
-#! perl
-# Copyright (C) 2001-2006, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-tools/build/jit2c.pl - JIT to C
-
-=head1 SYNOPSIS
-
- % perl tools/build/jit2c.pl <cpu-architecture-name> src/jit_cpu.c
-
-=head1 DESCRIPTION
-
-This script creates F<src/jit_cpu.c>. It parses the JIT file for the
-specified CPU architecture type (F<src/jit/cpu-architecture-name/core.jit>).
-
-=cut
-
-use warnings;
-use strict;
-use lib 'lib';
-
-use Parrot::OpLib::core;
-use Parrot::Op;
-use Parrot::OpTrans::C;
-
-my $trans = Parrot::OpTrans::C->new;
-
-my %type_to_arg = (
- INT_CONST => 'ic',
- NUM_CONST => 'nc',
- PMC_CONST => 'pc',
- STRING_CONST => 'sc',
- STR_CONST => 'sc',
- INT_REG => 'i',
- NUM_REG => 'n',
- PMC_REG => 'p',
- STRING_REG => 's',
- STR_REG => 's',
-);
-
-my $core_numops = scalar @{$Parrot::OpLib::core::ops};
-my @core_opfunc = map { $_->func_name($trans) } @{$Parrot::OpLib::core::ops};
-my %opcodes;
-
-for ( @{$Parrot::OpLib::core::ops} ) {
- my $name = join( '_', $_->{NAME}, @{ $_->{ARGS} }[ 0 .. $#{ $_->{ARGS} } ] );
- $opcodes{$name} = $_->{CODE};
-}
-
-my $cpuarch = shift @ARGV;
-my $genfile = shift @ARGV;
-
-my ( $function, $body, $extern, $header, $asm, $precompiled );
-
-my %templates;
-
-my @jit_funcs;
-my $func_end;
-my ( $normal_op, $cpcf_op, $restart_op );
-my %argmaps;
-my $jit_cpu;
-
-if ( $genfile =~ /jit_cpu.c/ ) {
- $jit_cpu = 1;
- push @jit_funcs, "Parrot_jit_fn_info_t _op_jit[$core_numops] = {\n";
- $func_end = '_jit';
- $normal_op = 'Parrot_jit_normal_op';
- $cpcf_op = 'Parrot_jit_cpcf_op';
- $restart_op = 'Parrot_jit_restart_op';
- %argmaps = %Parrot::OpTrans::C::arg_maps;
-}
-else {
- $jit_cpu = ( $cpuarch eq 'i386' ) ? 0 : 1;
- push @jit_funcs, "Parrot_jit_fn_info_t op_exec[$core_numops] = {\n";
- $func_end = "_exec";
- $normal_op = "Parrot_exec_normal_op";
- $cpcf_op = "Parrot_exec_cpcf_op";
- $restart_op = "Parrot_exec_restart_op";
- %argmaps = (
- op => "cur_opcode[%ld]",
-
- i => "IREG(%ld)",
- n => "NREG(%ld)",
- p => "PREG(%ld)",
- s => "SREG(%ld)",
- k => "PREG(%ld)",
- ki => "IREG(%ld)",
-
- ic => "cur_opcode[%ld]",
- nc => "CONST(%ld)",
- pc => "CONST(%ld)",
- sc => "CONST(%ld)",
- kc => "CONST(%ld)",
- kic => "cur_opcode[%ld]"
- );
-}
-
-sub readjit {
- my $file = shift;
-
- my %ops;
- my $template;
-
- local $.;
-
- open my $IN, '<', $file or die "Can't open file $file: $!";
- while ( my $line = <$IN> ) {
- if ( $line =~ m/^#define/ ) {
- $line =~
-s/PREV_OP\s(..?)\s(\w+)/(jit_info->prev_op) && (*jit_info->prev_op $1 $opcodes{$2})/g;
- $header .= $line;
- next;
- }
-
- # ignore comment and empty lines
- next if $line =~ m/^;/ || $line !~ m/\S/;
-
- if ( !defined($function) && !defined($template) ) {
- if ( $line =~ m/TEMPLATE\s+(\w+)\s*{/ ) { #}
- $template = $1;
- $asm = qq{#line $. "$file"\n};
- next;
- }
- else {
- $line =~ m/(extern\s*)?(\w+)\s*{/; #}
- $extern = ( defined($1) ) ? 1 : 0;
- $function = $2;
- $asm = qq{#line $. "$file"\n};
- next;
- }
- }
- if ( $line =~ m/^}/ ) { #{
- # 1. check templates
- while ( my ( $t, $body ) = each %templates ) {
- if ( $asm =~ /$t\s+/ ) {
- my $tbody = $body;
- while ( $asm =~ s/\b(s(.).+?\2.*?\2)(?:\s+)?// ) {
- eval "\$tbody =~ ${1}g";
- die "error in template subst: $@\n" if $@;
- }
- $asm = $tbody;
-
- # reset iterator for next run
- keys %templates;
- last;
- }
- }
-
- # end of template definition?
- if ( defined($template) ) {
- $templates{$template} = $asm;
- $template = undef;
- next;
- }
-
- # no, end of function
-
- # then do other substitutions
- $asm =~ s/([\&\*])([a-zA-Z_]+)\[(\d+)\]/make_subs($1,$2,$3)/ge;
- $asm =~ s/NEW_FIXUP/Parrot_jit_newfixup(jit_info)/g;
- $asm =~ s/CUR_FIXUP/jit_info->arena.fixups/g;
- $asm =~ s/NATIVECODE/jit_info->native_ptr/g;
- $asm =~ s/CUR_OPCODE/jit_info->cur_op/g;
- $asm =~ s/cur_opcode/jit_info->cur_op/g;
- $asm =~ s/MAP\[(\d)\]/MAP($1)/g;
-
- # set extern if the code calls a function
- $extern = -1 if $asm =~ /CALL_FUNCTION/;
- unless ($jit_cpu) {
-
- # no address of
- $asm =~ s/&([INSP])REG/$1REG/g;
- $asm =~ s/&CONST/CONST/g;
-
- # Use the macro
- $asm =~ s/CALL_FUNCTION\(\s*jit_info\s*,\s*\(void\*\)\s*(.*)\)/CALL("$1")/g;
-
- # The ->u.(string|float) is unnecessary.
- $asm =~ s/\)->u\.(\w+)/)/g;
- $asm =~
-s/CONST\((\d)\)\s*([><=!]=?)\s*CONST\((\d)\)/RCONST($1)->u.number $2 RCONST($3)->u.number/
- if ( $asm =~ /CONST.*CONST/ );
- $asm =~
-s/(emitm_pushl_m[^\n]*CONST[^\n]*)/$1\\\n Parrot_exec_add_text_rellocation(jit_info->objfile, jit_info->native_ptr, RTYPE_DATA, "const_table", 0);/g;
- $asm =~ s/jit_emit_end/exec_emit_end/;
- }
- if ( ( $cpuarch eq 'ppc' ) && ( $genfile ne "src/jit_cpu.c" ) ) {
- $asm =~
-s/jit_emit_mov_ri_i\(jit_info->native_ptr, ISR([12]), &CONST\((\d)\)\);/load_nc(jit_info->native_ptr, ISR$1, ECONST($2));/g;
- }
-
- $asm =~ s/PUSH_MAPPED_REG\((\d)\)/Parrot_jit_push_registers(jit_info,$1)/g;
- $ops{$function} = [ $asm, $extern ];
- $function = undef;
- }
- unless ($jit_cpu) {
- $line =~ s/emitm_pushl_i/emitm_pushl_m/ if $line =~ /string/;
- }
- $asm .= $line;
- }
- return %ops;
-}
-
-use Parrot::Vtable;
-my $vtable;
-my $vjit = 0;
-
-sub vtable_num {
- my $meth = shift;
- unless ($vtable) {
- $vtable = parse_vtable();
- }
- my $i = 0;
- $vjit++;
- for my $entry ( @{$vtable} ) {
- next if $entry->[4] =~ /MMD_/; # RT#46915 all
- return $i if ( $entry->[1] eq $meth );
- $i++;
- }
- die("vtable not found for $meth\n");
- return;
-}
-
-my $jit_emit_n = ( $genfile =~ /jit_cpu.c/ ) ? 2 : 1;
-
-open my $JITCPU, '>', $genfile or die;
-
-print $JITCPU <<"END_C";
-/* ex: set ro:
- * !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
- *
- * This file is generated automatically from 'src/jit/$cpuarch/core.jit'
- * by $0.
- *
- * Any changes made here will be lost!
- *
- */
-
-/* HEADERIZER HFILE: none */
-/* HEADERIZER STOP */
-
-#include<parrot/parrot.h>
-#ifdef HAVE_COMPUTED_GOTO
-# include<parrot/oplib/core_ops_cgp.h>
-#endif
-#include"parrot/exec.h"
-#include"jit.h"
-#define JIT_EMIT $jit_emit_n
-
-/* Disable "truncation from 'const int' to 'char'" warning. */
-#if defined (_MSC_VER)
-#pragma warning(disable: 4305)
-#endif
-
-/*
- *define default jit_funcs, if architecture doesn't have these optimizations
- */
-#define Parrot_jit_vtable1_op Parrot_jit_normal_op
-#define Parrot_jit_vtable1r_op Parrot_jit_normal_op
-/*
- * the numbers correspond to the registers
- */
-#define Parrot_jit_vtable_111_op Parrot_jit_normal_op
-#define Parrot_jit_vtable_112_op Parrot_jit_normal_op
-#define Parrot_jit_vtable_221_op Parrot_jit_normal_op
-#define Parrot_jit_vtable_1121_op Parrot_jit_normal_op
-#define Parrot_jit_vtable_1123_op Parrot_jit_normal_op
-#define Parrot_jit_vtable_2231_op Parrot_jit_normal_op
-#define Parrot_jit_vtable_1r223_op Parrot_jit_normal_op
-#define Parrot_jit_vtable_1r332_op Parrot_jit_normal_op
-#define Parrot_jit_vtable_1r221_op Parrot_jit_normal_op
-
-#define Parrot_jit_vtable_ifp_op Parrot_jit_cpcf_op
-#define Parrot_jit_vtable_unlessp_op Parrot_jit_cpcf_op
-#define Parrot_jit_vtable_newp_ic_op Parrot_jit_normal_op
-
-#define Parrot_jit_restart_op Parrot_jit_cpcf_op
-
-#include"jit_emit.h"
-
-#undef CONST
-#ifndef MAP
-# define MAP(i) jit_info->optimizer->map_branch[jit_info->op_i + (i)]
-#endif
-
-#define ROFFS_INT(x) REG_OFFS_INT(jit_info->cur_op[x])
-#define ROFFS_NUM(x) REG_OFFS_NUM(jit_info->cur_op[x])
-#define ROFFS_STR(x) REG_OFFS_STR(jit_info->cur_op[x])
-#define ROFFS_PMC(x) REG_OFFS_PMC(jit_info->cur_op[x])
-#
-END_C
-
-if ($jit_cpu) {
- print $JITCPU <<'END_C';
-#define IREG(i) REG_INT(interp, jit_info->cur_op[i])
-#define NREG(i) REG_NUM(interp, jit_info->cur_op[i])
-#define PREG(i) REG_PMC(interp, jit_info->cur_op[i])
-#define SREG(i) REG_STR(interp, jit_info->cur_op[i])
-#define CONST(i) interp->code->const_table->constants[jit_info->cur_op[i]]
-END_C
-}
-else {
- print $JITCPU <<'END_C';
-#define CONST(i) (int *)(jit_info->cur_op[i] * sizeof(PackFile_Constant) + offsetof(PackFile_Constant, u))
-#define RCONST(i) interp->code->const_table->constants[jit_info->cur_op[i]]
-#define CALL(f) Parrot_exec_add_text_rellocation_func(jit_info->objfile, jit_info->native_ptr, f); \
- emitm_calll(jit_info->native_ptr, EXEC_CALLDISP);
-
-END_C
-}
-if ( $cpuarch eq 'ppc' && $genfile ne 'src/jit_cpu.c' ) {
- print $JITCPU
- "#define ECONST(i) (int *)(jit_info->cur_op[i] * sizeof(PackFile_Constant) + 8)\n";
-}
-
-my %core_ops = readjit("src/jit/$cpuarch/core.jit");
-
-print $JITCPU $header if $header;
-
-my $njit = keys %core_ops;
-
-my $jit_fn_retn = 'void';
-my $jit_fn_params = '(Parrot_jit_info_t *jit_info, Interp *interp)';
-
-for my $i ( 0 .. $core_numops - 1) {
- $body = $core_ops{ $core_opfunc[$i] }[0];
- $extern = $core_ops{ $core_opfunc[$i] }[1];
-
- my $jit_func;
- my $op = $Parrot::OpLib::core::ops->[$i];
-
- $precompiled = 0;
- if ( !defined $body ) {
- $precompiled = 1;
- $extern = 1;
- my $opbody = $op->body;
-
- # retranslate VTABLE_macro to the expanded form
- $opbody =~ s/
- \bVTABLE_(\w+)
- \s*\(
- interp,\s*
- {{\@(\d)}}/
- {{\@$2}}->vtable->$1(interp, {{\@$2}}/x;
-
- if ( $op->full_name eq 'new_p_ic' ) {
- $jit_func = "Parrot_jit_vtable_newp_ic_op";
- $opbody =~ /vtable->(\w+)/;
- $extern = 2; # fake number
- #print "$jit_func $extern\n";
- }
-
- # jitable vtable funcs:
- # *) $1->vtable->{vtable}(interp, $1)
- elsif (
- $opbody =~ /
- ^(?:.*\.ops")\s+
- {{\@1}}->vtable->
- (\w+)
- \(interp,
- \s*
- {{\@1}}
- \);
- \s+{{\+=\d}}/xm
- )
- {
- $jit_func = 'Parrot_jit_vtable1_op';
- $extern = vtable_num($1);
-
- #print $op->full_name .": $jit_func $extern\n";
- }
-
- # *) $1 = $2->vtable->{vtable}(interp, $2)
- elsif (
- $opbody =~ /
- ^(?:.*\.ops")\s+
- {{\@1}}\s*=\s*
- {{\@2}}->vtable->
- (\w+)
- \(interp,
- \s*
- {{\@2}}
- \);
- \s+{{\+=\d}}/xm
- )
- {
- $jit_func = 'Parrot_jit_vtable1r_op';
- $extern = vtable_num($1);
-
- #print $op->full_name .": $jit_func $extern\n";
- }
-
- # *) $X->vtable->{vtable}(interp, $Y, $Z)
- elsif (
- $opbody =~ /
- ^(?:.*\.ops")\s+
- {{\@(\d)}}->vtable->
- (\w+)
- \(interp,
- \s*
- {{\@(\d)}},\s*{{\@(\d)}}
- \);
- \s+{{\+=\d}}/xm
- )
- {
- $jit_func = "Parrot_jit_vtable_$1$3$4_op";
- $extern = vtable_num($2);
-
- #print $op->full_name .": $jit_func $extern\n";
- }
-
- # *) $R = $X->vtable->{vtable}(interp, $Y, $Z)
- elsif (
- $opbody =~ /
- ^(?:.*\.ops")\s+
- {{\@(\d)}}\s*=\s*
- {{\@(\d)}}->vtable->
- (\w+)
- \(interp,
- \s*
- {{\@(\d)}},\s*{{\@(\d)}}
- \);
- \s+{{\+=\d}}/xm
- )
- {
- $jit_func = "Parrot_jit_vtable_$1r$2$4$5_op";
- $extern = vtable_num($3);
-
- #print $op->full_name .": $jit_func $extern\n";
- }
-
- # *) $X->vtable->{vtable}(interp, $Y, $Z, $A)
- elsif (
- $opbody =~ /
- ^(?:.*\.ops")\s+
- {{\@(\d)}}->vtable->
- (\w+)
- \(interp,
- \s*
- {{\@(\d)}},\s*{{\@(\d)}},\s*{{\@(\d)}}
- \);
- \s+{{\+=\d}}/xm
- )
- {
- $jit_func = "Parrot_jit_vtable_$1$3$4$5_op";
- $extern = vtable_num($2);
-
- #print $op->full_name .": $jit_func $extern\n";
- }
-
- # some specials
- elsif ( $op->full_name eq 'if_p_ic' ) {
- $jit_func = "Parrot_jit_vtable_ifp_op";
- $opbody =~ /vtable->(\w+)/;
- $extern = vtable_num($1);
-
- #print "$jit_func $extern\n";
- }
- elsif ( $op->full_name eq 'unless_p_ic' ) {
- $jit_func = "Parrot_jit_vtable_unlessp_op";
- $opbody =~ /vtable->(\w+)/;
- $extern = vtable_num($1);
-
- #print "$jit_func $extern\n";
- }
-
- elsif ( $op->jump =~ /JUMP_RESTART/ ) {
- $jit_func = $restart_op;
- }
- elsif ( $op->jump ) {
- $jit_func = $cpcf_op;
- }
- else {
- $jit_func = $normal_op;
- }
- }
- else {
- $jit_func = "$core_opfunc[$i]$func_end";
- }
-
- unless ($precompiled) {
- print $JITCPU "\nstatic $jit_fn_retn\n"
- . $core_opfunc[$i]
- . $func_end
- . $jit_fn_params . "\n{\n"
- . $body . "}\n";
- }
- push @jit_funcs, "{ $jit_func, $extern }, " . "/* op $i: $core_opfunc[$i] */\n";
-}
-
-print $JITCPU @jit_funcs, "};\n";
-
-if ( $genfile =~ /jit_cpu.c/ ) {
- print $JITCPU <<"EOC";
- Parrot_jit_fn_info_t *op_jit = &_op_jit[0];
-
- extern int jit_op_count(void);
- int jit_op_count(void) { return $core_numops; }
-EOC
-}
-
-# append the C code coda
-print $JITCPU <<"EOC";
-
-/*
- * Local variables:
- * c-file-style: "parrot"
- * buffer-read-only: t
- * End:
- * vim: expandtab shiftwidth=4:
- */
-EOC
-
-print("jit2c: JITed $njit (+ $vjit vtable) of $core_numops ops\n");
-
-sub make_subs {
- my ( $ptr, $type, $index ) = @_;
-
- return ( ( $ptr eq '&' ? '&' : '' ) . sprintf( $argmaps{ $type_to_arg{$type} }, $index ) );
-}
-
-
-# Local Variables:
-# mode: cperl
-# cperl-indent-level: 4
-# fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:
More information about the parrot-commits
mailing list