Problems with Dec Alpha's OSF/1 V3.0 ...

Daniel.Veillard at imag.fr Daniel.Veillard at imag.fr
Wed Mar 12 08:58:38 PST 1997


I'm having problems with the machine dependant file for these platform.
The system is OSF1 V3.0 358.78 alpha .

file alpha/osf/md.c

init_md(void)
{
        /* Set the bits in the hw fpcr for cpu's that implement
           all the bits.  */
        __asm__ __volatile__(
                "excb\n\t"
                "mt_fpcr %0\n\t"
                "excb"
                : : "f"(FPCR_INED | FPCR_UNFD | FPCR_DYN_NORMAL
                        | FPCR_OVFD | FPCR_DZED));

        /* Set the software emulation bits in the kernel for
           those that don't.  */
        ieee_set_fp_control(IEEE_TRAP_ENABLE_INV);
}

The assembly instruction set bits in the FPU Control register,
but these bits definitions are not defined in the corresponding
/usr/include/machine/fpu.h :

~/opera/osf1 -> grep FPCR /usr/include/machine/*
/usr/include/machine/fpu.h:#define FPCR_INV     0x0010000000000000UL    /* 
inval
/usr/include/machine/fpu.h:#define FPCR_DZE     0x0020000000000000UL    /* 
divid
/usr/include/machine/fpu.h:#define FPCR_OVF     0x0040000000000000UL    /* 
overf
/usr/include/machine/fpu.h:#define FPCR_UNF     0x0080000000000000UL    /* 
undef
/usr/include/machine/fpu.h:#define FPCR_INE     0x0100000000000000UL    /* 
inexa
/usr/include/machine/fpu.h:#define FPCR_IOV     0x0200000000000000UL    /* 
integ
/usr/include/machine/fpu.h:#define FPCR_DYN_MASK        0x0c00000000000000UL   
/
/usr/include/machine/fpu.h:#define FPCR_DYN_SHIFT       58                     
/
/usr/include/machine/fpu.h:#define FPCR_DYN_CHOPPED 0x0000000000000000UL/* 
chopp
/usr/include/machine/fpu.h:#define FPCR_DYN_MINUS       0x0400000000000000UL   
/
/usr/include/machine/fpu.h:#define FPCR_DYN_NORMAL      0x0800000000000000UL   
/
/usr/include/machine/fpu.h:#define FPCR_DYN_PLUS        0x0c00000000000000UL   
/
/usr/include/machine/fpu.h:#define FPCR_SUM     0x8000000000000000UL    /* 
summa
/usr/include/machine/fpu.h:#define FPCR_DYN_RM_MASK     FPCR_DYN_MASK
/usr/include/machine/fpu.h:#define FPCR_DYN_RM_SHIFT    FPCR_DYN_SHIFT
/usr/include/machine/fpu.h:#define FPCR_DYN_RM_CHOPPED  FPCR_DYN_CHOPPED
/usr/include/machine/fpu.h:#define FPCR_DYN_RM_MINUS    FPCR_DYN_MINUS
/usr/include/machine/fpu.h:#define FPCR_DYN_RM_NORMAL   FPCR_DYN_NORMAL
/usr/include/machine/fpu.h:#define FPCR_DYN_RM_PLUS     FPCR_DYN_PLUS
~/opera/osf1 ->  

  And these name matches the names in my "Alpha Architecture Handbook"
I suggest to use the following patch

--------------------------------- patch1 --------------------------------
Index: kaffe-0.8.2//config/alpha/osf/md.c
===================================================================
RCS file: /sources/cvsroot/opera/kaffe-0.8.2/config/alpha/osf/md.c,v
retrieving revision 1.1.1.1
diff -p -r1.1.1.1 md.c
*** md.c        1997/03/07 10:52:37     1.1.1.1
--- md.c        1997/03/12 16:09:10
***************
*** 15,20 ****
--- 15,32 ----
  #include <machine/hal_sysinfo.h>
  #include <sys/proc.h>
  
+ #ifndef FPCR_INED
+ #define FPCR_INED FPCR_INE
+ #endif
+ #ifndef FPCR_UNFD
+ #define FPCR_UNFD FPCR_UNF
+ #endif
+ #ifndef FPCR_OVFD
+ #define FPCR_OVFD FPCR_OVF
+ #endif
+ #ifndef FPCR_DZED
+ #define FPCR_DZED FPCR_DZE
+ #endif
  
  void
  init_md(void)
----------------------------- patch1 ---------------------------------

There was also a problem with Object to KaffeObject renaming I forgot
and should only be a problem for Tim :

----------------------------- patch2 ---------------------------------
Index: kaffe-0.8.2/config/alpha/jit-alpha.def
===================================================================
RCS file: /sources/cvsroot/opera/kaffe-0.8.2/config/alpha/jit-alpha.def,v
retrieving revision 1.1.1.1
diff -p -r1.1.1.1 jit-alpha.def
*** jit-alpha.def       1997/03/07 10:52:37     1.1.1.1
--- jit-alpha.def       1997/03/12 16:31:01
*************** $$3:    ldq     $9,2*8($30)
*** 2934,2940 ****
  
  
  jword
! alpha_call_kaffe_function_varargs(Method *meth, Object *obj, va_list argptr)
  {
        struct {
                long iargs[6];
--- 2934,2940 ----
  
  
  jword
! alpha_call_kaffe_function_varargs(Method *meth, KaffeObject *obj, va_list 
argptr)
  {
        struct {
                long iargs[6];
*************** alpha_call_kaffe_function_varargs(Method
*** 3009,3015 ****
  }
  
  jword
! alpha_call_kaffe_function(Method *meth, Object *obj)
  {
        struct {
                long iargs[6];
--- 3009,3015 ----
  }
  
  jword
! alpha_call_kaffe_function(Method *meth, KaffeObject *obj)
  {
        struct {
                long iargs[6];
------------------------------- patch2 -------------------------

  But I'm still struggling with kaffe on this platform:

gcc -g -O -DNO_SHARED_LIBRARIES -I. -I/home/hermine/veillard/opera/kaffe-0.8.2/
kaffe/kaffevm -I/home/hermine/veillard/opera/kaffe-0.8.2/kaffe/kaffevm/../../co
nfig -I../../config -I../../include -DTRANSLATOR -I/home/hermine/veillard/opera
/kaffe-0.8.2/kaffe/kaffevm/jit -DKVER=\"0.82\" -c  
/home/hermine/veillard/opera/kaffe-0.8.2/kaffe/kaffevm/jit/icode.c
/home/hermine/veillard/opera/kaffe-0.8.2/kaffe/kaffevm/jit/icode.c: In 
function `rem_double':
/home/hermine/veillard/opera/kaffe-0.8.2/kaffe/kaffevm/jit/icode.c:927: 
`pusharg_long_idx_inc' undeclared (first use this function)
/home/hermine/veillard/opera/kaffe-0.8.2/kaffe/kaffevm/jit/icode.c:927: (Each 
undeclared identifier is reported only once
/home/hermine/veillard/opera/kaffe-0.8.2/kaffe/kaffevm/jit/icode.c:927: for 
each function it appears in.)
/home/hermine/veillard/opera/kaffe-0.8.2/kaffe/kaffevm/jit/icode.c: In 
function `pusharg_double':
/home/hermine/veillard/opera/kaffe-0.8.2/kaffe/kaffevm/jit/icode.c:1657: 
`pusharg_long_idx_inc' undeclared (first use this function)
/home/hermine/veillard/opera/kaffe-0.8.2/kaffe/kaffevm/jit/icode.c: In 
function `pusharg_long':
/home/hermine/veillard/opera/kaffe-0.8.2/kaffe/kaffevm/jit/icode.c:1666: 
`pusharg_long_idx_inc' undeclared (first use this function)
/home/hermine/veillard/opera/kaffe-0.8.2/kaffe/kaffevm/jit/icode.c: In 
function `cmpl_double':
/home/hermine/veillard/opera/kaffe-0.8.2/kaffe/kaffevm/jit/icode.c:2131: 
`pusharg_long_idx_inc' undeclared (first use this function)
/home/hermine/veillard/opera/kaffe-0.8.2/kaffe/kaffevm/jit/icode.c: In 
function `cmpg_double':
/home/hermine/veillard/opera/kaffe-0.8.2/kaffe/kaffevm/jit/icode.c:2163: 
`pusharg_long_idx_inc' undeclared (first use this function)
make[2]: *** [icode.o] Error 1
make[2]: Leaving directory `/home/hermine/veillard/opera/osf1/kaffe-0.8.2/kaffe
/kaffevm'

  Looking for the pusharg_long_idx_inc identifier :

~/opera/javalib -> cherche pusharg_long_idx_inc
../kaffe-0.8.2/config/i386/jit-icode.h:#define pusharg_long_idx_inc            
2
../kaffe-0.8.2/config/m68k/jit-icode.h:#define pusharg_long_idx_inc            
2
../kaffe-0.8.2/config/sparc/jit-icode.h:#define pusharg_long_idx_inc    2
../kaffe-0.8.2/kaffe/kaffevm/jit/icode.c:       pusharg_long(src2, 
pusharg_long_
[more references in kaffe-0.8.2/kaffe/kaffevm/jit/icode.c]
~/opera/javalib ->

It seems to be defined in the i386, m68k and sparc JIT headers but not
on the Alpha ... 

   Any hint on what's happening ?

Daniel
-- 
Daniel Veillard at w3.org      | W3C / INRIA Rhone-Alpes | Today's Bookmarks :
Daniel.Veillard at inrialpes.fr| 655 av de l'Europe      | Linux, WWW, Java,
Tel : +33 04 76 61 53 85    | 38330 Montbonnot        | badminton, Kaffe,
Fax : +33 04 76 54 76 15    | France                  | Amaya and CSS.
Home: +33 04 76 63 05 86    | http://opera.inrialpes.fr/veillard




More information about the kaffe mailing list