This is for MinGW ( read below why not MSVC )

Changes:
* Configure.pl
  correctly detect $cpuarch/$osname

* jit2h.pl
  Accept a new osname parameter
  search jit/cpuarch/$file-$osname.jit, and if found
  add ops found there/override ops in $file.jit

* Makefile.in
  add jitosname to the parameters to jit2h.pl

* hints/mswin32.pl
  platform is win32 ( not MSWin32-x86-multi-thread,
  MSWin32-x86-perl-object, etc )

* include/parrot/file.h
  #include <windows.h>, otherwise you can't count on
  HANDLE and LARGE_INTEGER to be magically defined

* platforms/win32.h
  those #pragma are MSVC specific, #ifdef them

* jit/i386/core-win32.jit
  New file ( overrides some print_* and time_n:
  Win32 does not have syscalls, I think )

* lib/Parrot/Jit/i386-win32.pm
  likewise

MSVC would require an AT&T -> Intel syntax translator, but
since it seems we are going to have our own assembler, I don't
think it's worth the ( small ) effort.

Regards
Mattia



diff -u -2 -r1.90 Configure.pl
--- Configure.pl        31 Jan 2002 21:46:36 -0000      1.90
+++ Configure.pl        3 Feb 2002 17:39:03 -0000
@@ -10,4 +10,5 @@
 use strict;
 use lib 'lib';
+$File::Find::dont_use_nlink = 1;
 
 use Config;
@@ -147,4 +148,7 @@
 $archname                 =  $Config{archname};
 ($cpuarch, $osname)       =  split('-', $archname);
+if( "$cpuarch$osname" =~ m/^mswin32x86$/i ) {
+    ($cpuarch,$osname) = ('i386', 'win32');
+}
 if (!defined $osname) {
     ($osname, $cpuarch) = ($cpuarch, "");
diff -u -2 -r1.129 Makefile.in
--- Makefile.in 1 Feb 2002 01:38:28 -0000       1.129
+++ Makefile.in 3 Feb 2002 17:39:05 -0000
@@ -344,5 +344,5 @@
 
 $(INC)/jit_struct.h: jit2h.pl lib/Parrot/OpLib/core.pm lib/Parrot/Jit.pm 
jit/${jitcpuarch}/core.jit jit/${jitcpuarch}/string.jit
-       $(PERL) jit2h.pl ${jitcpuarch} > $(INC)/jit_struct.h
+       $(PERL) jit2h.pl ${jitcpuarch} ${jitosname} > $(INC)/jit_struct.h
 
 docs: docs/.dummy
diff -u -2 -r1.16 jit2h.pl
--- jit2h.pl    30 Jan 2002 23:19:44 -0000      1.16
+++ jit2h.pl    3 Feb 2002 17:39:09 -0000
@@ -16,4 +16,5 @@
 
 my $cpuarch = shift @ARGV;
+my $osname = shift @ARGV;
 
 #
@@ -28,5 +29,6 @@
 my ($position, $bytecode, $type, $number, $size, $char, $move, $strflag, $asm, 
$precompiled);
 
-my (%core_ops, %string, %lib, $arg, $tmp, $which, $argc, $argv, $syscall, 
$tmp_bytecode, $nargop);
+my (%core_ops, %string, %lib,
+    $arg, $tmp, $which, $argc, $argv, $syscall, $tmp_bytecode, $nargop);
 
 my (@values);
@@ -61,5 +63,5 @@
         }
         if ($line =~ m/}/) {
-            $ops{$function} = Parrot::Jit->Assemble($asm);
+            $ops{$function} = $asm;
             $function = undef;
             $body = undef;
@@ -70,7 +72,18 @@
 }
 
-%core_ops = readjit("jit/$cpuarch/core.jit");
-%string = readjit("jit/$cpuarch/string.jit");
-%lib = readjit("jit/$cpuarch/lib.jit");
+my @files;
+foreach my $i ( qw(core string lib) ) {
+    my %ops = readjit("jit/$cpuarch/$i.jit");
+    my %ops_os = readjit("jit/$cpuarch/$i-$osname.jit")
+        if -e "jit/$cpuarch/$i-$osname.jit";
+    @ops{keys %ops_os} = values %ops_os;
+    foreach my $j ( keys %ops ) {
+        $ops{$j} = Parrot::Jit->Assemble( $ops{$j} );
+    }
+    push @files, \%ops;
+}
+%core_ops = %{$files[0]};
+%string = %{$files[1]};
+%lib = %{$files[2]};
 
 my $start = Parrot::Jit->init();
diff -u -2 -r1.9 mswin32.pl
--- hints/mswin32.pl    31 Jan 2002 21:46:43 -0000      1.9
+++ hints/mswin32.pl    3 Feb 2002 17:39:10 -0000
@@ -5,4 +5,5 @@
        $c{rm_f} = '$(PERL) -MExtUtils::Command -e rm_f';
        $c{rm_rf} = '$(PERL) -MExtUtils::Command -e rm_rf';
+        $c{platform} = 'win32';
 
        if( $is_msvc ) {
diff -u -2 -r1.11 io.h
--- include/parrot/io.h 29 Jan 2002 21:47:01 -0000      1.11
+++ include/parrot/io.h 3 Feb 2002 17:39:13 -0000
@@ -98,4 +98,6 @@
 
 #ifdef WIN32
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
 typedef HANDLE PIOHANDLE; 
 typedef LARGE_INTEGER PIOOFF_T;
diff -u -2 -r1.6 win32.h
--- platforms/win32.h   29 Jan 2002 18:39:20 -0000      1.6
+++ platforms/win32.h   3 Feb 2002 17:39:14 -0000
@@ -15,6 +15,8 @@
 
 /* These disable certain Level 4 Warnings */
+#ifdef _MSC_VER
 #pragma warning( disable: 4100 ) /* disables 'unreferenced formal parameter' warnings 
*/
 #pragma warning( disable: 4115 ) /* disables 'named type definition in parentheses' 
warnings triggered in VC98 include files */
+#endif
 
 /*
diff -u -2 /dev/null jit/i386/core-win32.jit
--- /dev/null   Thu Nov 30 16:25:58 2000
+++ jit/i386/core-win32.jit     Sun Feb  3 18:02:10 2002
@@ -0,0 +1,30 @@
+;
+;   core-win32.jit 
+;
+; $Id: $
+;
+
+Parrot_print_ic {
+    CALL(Parrot_op,V*CUR_OPCODE[0]V&INTERPRETER[0])
+    CALL(fflush, V*CONST_INTVAL[0])
+}
+
+Parrot_print_i {
+    CALL(Parrot_op,V*CUR_OPCODE[0]V&INTERPRETER[0])
+    CALL(fflush, V*CONST_INTVAL[0])
+}
+
+Parrot_print_sc {
+    CALL(Parrot_op,V*CUR_OPCODE[0]V&INTERPRETER[0])
+    CALL(fflush, V*CONST_INTVAL[0])
+}
+
+Parrot_print_s {
+    CALL(Parrot_op,V*CUR_OPCODE[0]V&INTERPRETER[0])
+    CALL(fflush, V*CONST_INTVAL[0])
+}
+
+Parrot_time_n {
+    CALL(Parrot_op,V*CUR_OPCODE[0]V&INTERPRETER[0])
+    CALL(fflush, V*CONST_INTVAL[0])
+}
diff -u -2 /dev/null lib/Parrot/Jit/i386-win32.pm
--- /dev/null   Thu Nov 30 16:25:58 2000
+++ lib/Parrot/Jit/i386-win32.pm        Sun Feb  3 17:56:34 2002
@@ -0,0 +1,34 @@
+#
+# Parrot::Jit;
+#
+# $Id: $
+#
+
+package Parrot::Jit;
+
+use base qw(Parrot::Jit::i386Generic);
+
+# just for MinGW
+$OBJDUMP = "objdump -w -d";
+$AS      = "as";
+
+$OP_ARGUMENT_SIZE = 4;
+
+$Call_inmediate_arg_size = 5;
+$Call_address_arg_size = 6;
+$Call_start = 1;
+$Call_move = 0;
+$Precompiled_call_position = 11;
+
+$Correct_objdump_output = '$result =~ s/\\x90 $//';
+
+#my %syscall_number = (
+#    "WRITE"         => 4,
+#    "GETTIMEOFDAY"  => 78
+#);
+
+sub system_call($$$) {
+    die "Win32 can't do syscalls";
+}
+
+1;

Reply via email to