On Thu, Nov 21, 2002 at 11:59:36AM -0500, Andy Dougherty wrote:

> While compiling, I did get the warnings:
> 
> "cpu_dep.c", line 24: warning: initializer does not fit or is out of
> range: 0x91d02003
> "cpu_dep.c", line 26: warning: initializer does not fit or is out of
> range: 0x81c3e008

That in itself shouldn't have mattered (signed/unsigned) but this version does
fix the lexicals.t test failures.

-- 
Jason
/* cpu_dep.c
 *  Copyright: (When this is determined...it will go here)
 *  CVS Info
 *     $Id$
 *  Overview:
 *     CPU dependent functions
 *  Data Structure and Algorithms:
 *  History:
 *  Notes:
 *  References:
 */

#include "parrot/parrot.h"

void flush_register_windows(void){

#ifdef __sparc

    static union {
        int insns[4];
        double align_hack[2];
    } u = { {
#ifdef __sparcv9
                            0x81580000, /* flushw */
#else
                            0x91d02003, /* ta ST_FLUSH_WINDOWS */
#endif
                            0x81c3e008, /* retl */ 
                            0x01000000  /* nop */
    } };

    static void (*fn_ptr)(void) = (void (*)(void))&u.align_hack[0];
    fn_ptr();

#else

    return;

#endif
}
? cpu_dep.c
Index: MANIFEST
===================================================================
RCS file: /cvs/public/parrot/MANIFEST,v
retrieving revision 1.256
diff -u -r1.256 MANIFEST
--- MANIFEST    21 Nov 2002 04:30:56 -0000      1.256
+++ MANIFEST    21 Nov 2002 22:55:03 -0000
@@ -1657,3 +1657,4 @@
 vtable.tbl
 vtable_h.pl
 warnings.c
+cpu_dep.c
Index: dod.c
===================================================================
RCS file: /cvs/public/parrot/dod.c,v
retrieving revision 1.32
diff -u -r1.32 dod.c
--- dod.c       6 Nov 2002 08:52:07 -0000       1.32
+++ dod.c       21 Nov 2002 22:55:03 -0000
@@ -20,6 +20,7 @@
 int CONSERVATIVE_POINTER_CHASING = 0;
 #endif
 
+extern flush_register_windows(void);
 static size_t find_common_mask(size_t val1, size_t val2);
 
 PMC *
@@ -494,6 +495,9 @@
 
     size_t mask = find_common_mask(buffer_min < pmc_min ? buffer_min : pmc_min,
             buffer_max > pmc_max ? buffer_max : pmc_max);
+
+    /* Flush register windows if needed */
+    flush_register_windows();
 
     if (!lo_var_ptr)
         return last;
Index: config/gen/makefiles/root.in
===================================================================
RCS file: /cvs/public/parrot/config/gen/makefiles/root.in,v
retrieving revision 1.58
diff -u -r1.58 root.in
--- config/gen/makefiles/root.in        20 Nov 2002 17:46:47 -0000      1.58
+++ config/gen/makefiles/root.in        21 Nov 2002 22:55:03 -0000
@@ -106,7 +106,7 @@
        packout$(O) byteorder$(O) debug$(O) smallobject$(O) \
        headers$(O) dod$(O) method_util$(O) exit$(O) \
        misc$(O) spf_render$(O) spf_vtable$(O) datatypes$(O) fingerprint$(O) \
-       nci$(O)
+       nci$(O) cpu_dep$(O)
 
 O_FILES = $(INTERP_O_FILES) $(IO_O_FILES) $(CLASS_O_FILES) \
        $(ENCODING_O_FILES) $(CHARTYPE_O_FILES)
@@ -424,6 +424,8 @@
 exit$(O) : $(GENERAL_H_FILES) exit.c
 
 nci$(O) : $(GENERAL_H_FILES) exit.c
+
+cpu_dep$(O) : $(GENERAL_H_FILES)
 
 #core_ops depends upon config.h so that it gets updated along with updates to 
config.h's version numbers
 core_ops.c $(INC)/oplib/core_ops.h : $(OPS_FILES) ops2c.pl lib/Parrot/OpsFile.pm 
lib/Parrot/Op.pm $(INC)/config.h

Reply via email to