Oz and Mozart Hackers Mailing List

Re: good news from the inline-opcode-map branch


From: Kevin Glynn (glynn@info.ucl.ac.be)
Date: Thu Dec 04 2003 - 12:42:06 CET


The test is still failing on solaris:

@savannah:tmp 4Q> c++ -o conftest -fno-exceptions -fno-implicit-templates -DARCH_SPARC conftest.C -lz -lgmp -ldl -lm -lsocket -lnsl -save-temps -fverbose-asm
/usr/ccs/bin/as: "conftest.s", line 57: error: statement syntax
/usr/ccs/bin/as: "conftest.s", line 66: error: statement syntax
/usr/ccs/bin/as: "conftest.s", line 75: error: statement syntax
/usr/ccs/bin/as: "conftest.s", line 84: error: statement syntax
/usr/ccs/bin/as: "conftest.s", line 93: error: statement syntax
/usr/ccs/bin/as: "conftest.s", line 102: error: statement syntax

k

conftest.s


        .file "conftest.C"
! GNU C++ version 2.95.3 20010315 (release) (sparc-sun-solaris2.7) compiled by GNU C version 2.95.3 20010315 (release).
! options passed: -fno-exceptions -fno-implicit-templates -fverbose-asm
! options enabled: -fpeephole -ffunction-cse -fkeep-static-consts
! -fpcc-struct-return -fsched-interblock -fsched-spec -fcommon
! -fverbose-asm -fgnu-linker -fargument-alias -fident -mepilogue -mapp-regs

gcc2_compiled.:
.section ".text"
        .align 4
        .global main
        .type main,#function
        .proc 04
main:
        !#PROLOGUE# 0
        save %sp, -112, %sp
        !#PROLOGUE# 1
        mov 0, %o0
        call engine__FPPv, 0
         nop
        sethi %hi(program), %o1
        or %o1, %lo(program), %o0
        call engine__FPPv, 0
         nop
        mov %o0, %i0
        b .LL2
         nop
        mov 0, %i0
        b .LL2
         nop
.LL2:
        ret
        restore
.LLfe1:
        .size main,.LLfe1-main
        .align 4
        .global engine__FPPv
        .type engine__FPPv,#function
        .proc 04
engine__FPPv:
        !#PROLOGUE# 0
        save %sp, -120, %sp
        !#PROLOGUE# 1
        st %i0, [%fp+68]
        ld [%fp+68], %o0
        cmp %o0, 0
        bne .LL4
        nop
        sethi %hi(program), %o1
        or %o1, %lo(program), %o0
        st %o0, [%fp-24]
        ld [%fp-24], %o0
        sethi %hi(.LL5), %o2
        or %o2, %lo(.LL5), %o1
        st %o1, [%o0]
        ld [%fp-24], %o0
        set LABEL5,[%o0]
        ld [%fp-24], %o0
        add %o0, 4, %o1
        st %o1, [%fp-24]
        ld [%fp-24], %o0
        sethi %hi(.LL6), %o2
        or %o2, %lo(.LL6), %o1
        st %o1, [%o0]
        ld [%fp-24], %o0
        set LABEL4,[%o0]
        ld [%fp-24], %o0
        add %o0, 4, %o1
        st %o1, [%fp-24]
        ld [%fp-24], %o0
        sethi %hi(.LL7), %o2
        or %o2, %lo(.LL7), %o1
        st %o1, [%o0]
        ld [%fp-24], %o0
        set LABEL3,[%o0]
        ld [%fp-24], %o0
        add %o0, 4, %o1
        st %o1, [%fp-24]
        ld [%fp-24], %o0
        sethi %hi(.LL8), %o2
        or %o2, %lo(.LL8), %o1
        st %o1, [%o0]
        ld [%fp-24], %o0
        set LABEL2,[%o0]
        ld [%fp-24], %o0
        add %o0, 4, %o1
        st %o1, [%fp-24]
        ld [%fp-24], %o0
        sethi %hi(.LL9), %o2
        or %o2, %lo(.LL9), %o1
        st %o1, [%o0]
        ld [%fp-24], %o0
        set LABEL1,[%o0]
        ld [%fp-24], %o0
        add %o0, 4, %o1
        st %o1, [%fp-24]
        ld [%fp-24], %o0
        sethi %hi(.LL10), %o2
        or %o2, %lo(.LL10), %o1
        st %o1, [%o0]
        ld [%fp-24], %o0
        set LABEL0,[%o0]
        ld [%fp-24], %o0
        add %o0, 4, %o1
        st %o1, [%fp-24]
        mov 0, %i0
        b .LL3
         nop
.LL4:
        mov 5, %o0
        st %o0, [%fp-20]
        ld [%fp+68], %o0
        ld [%o0], %o1
        add %o0, 4, %o0
        st %o0, [%fp+68]
        mov %o1, %o0
        jmp %o0
         nop
.LL10:
        .byte 0
        .byte 0
        .byte 0
        .byte 0
        LABEL0:
        ld [%fp-20], %o1
        add %o1, -1, %o0
        mov %o0, %o1
        st %o1, [%fp-20]
        cmp %o1, -1
        bne .LL12
        nop
        mov -4, %o0
        ld [%fp+68], %o1
        add %o0, %o1, %o0
        mov -1, %o1
        ld [%o0], %o2
        add %o1, %o2, %o0
        ldub [%o0], %o1
        sll %o1, 24, %o0
        sra %o0, 24, %o1
        mov 0, %o0
        call equal__Fii, 0
         nop
        cmp %o0, 0
        bne .LL11
        nop
        b .LL12
         nop
.LL12:
        mov 1, %i0
        b .LL3
         nop
.LL11:
        mov 0, %i0
        b .LL3
         nop
.LL9:
        .byte 1
        .byte 1
        .byte 1
        .byte 1
        LABEL1:
        ld [%fp-20], %o1
        add %o1, -1, %o0
        mov %o0, %o1
        st %o1, [%fp-20]
        cmp %o1, 0
        bne .LL14
        nop
        mov -4, %o0
        ld [%fp+68], %o1
        add %o0, %o1, %o0
        mov -1, %o1
        ld [%o0], %o2
        add %o1, %o2, %o0
        ldub [%o0], %o1
        sll %o1, 24, %o0
        sra %o0, 24, %o1
        mov 1, %o0
        call equal__Fii, 0
         nop
        cmp %o0, 0
        bne .LL13
        nop
        b .LL14
         nop
.LL14:
        mov 1, %i0
        b .LL3
         nop
.LL13:
        ld [%fp+68], %o0
        ld [%o0], %o1
        add %o0, 4, %o0
        st %o0, [%fp+68]
        mov %o1, %o0
        jmp %o0
         nop
.LL8:
        .byte 2
        .byte 2
        .byte 2
        .byte 2
        LABEL2:
        ld [%fp-20], %o1
        add %o1, -1, %o0
        mov %o0, %o1
        st %o1, [%fp-20]
        cmp %o1, 1
        bne .LL16
        nop
        mov -4, %o0
        ld [%fp+68], %o1
        add %o0, %o1, %o0
        mov -1, %o1
        ld [%o0], %o2
        add %o1, %o2, %o0
        ldub [%o0], %o1
        sll %o1, 24, %o0
        sra %o0, 24, %o1
        mov 2, %o0
        call equal__Fii, 0
         nop
        cmp %o0, 0
        bne .LL15
        nop
        b .LL16
         nop
.LL16:
        mov 1, %i0
        b .LL3
         nop
.LL15:
        ld [%fp+68], %o0
        ld [%o0], %o1
        add %o0, 4, %o0
        st %o0, [%fp+68]
        mov %o1, %o0
        jmp %o0
         nop
.LL7:
        .byte 3
        .byte 3
        .byte 3
        .byte 3
        LABEL3:
        ld [%fp-20], %o1
        add %o1, -1, %o0
        mov %o0, %o1
        st %o1, [%fp-20]
        cmp %o1, 2
        bne .LL18
        nop
        mov -4, %o0
        ld [%fp+68], %o1
        add %o0, %o1, %o0
        mov -1, %o1
        ld [%o0], %o2
        add %o1, %o2, %o0
        ldub [%o0], %o1
        sll %o1, 24, %o0
        sra %o0, 24, %o1
        mov 3, %o0
        call equal__Fii, 0
         nop
        cmp %o0, 0
        bne .LL17
        nop
        b .LL18
         nop
.LL18:
        mov 1, %i0
        b .LL3
         nop
.LL17:
        ld [%fp+68], %o0
        ld [%o0], %o1
        add %o0, 4, %o0
        st %o0, [%fp+68]
        mov %o1, %o0
        jmp %o0
         nop
.LL6:
        .byte 4
        .byte 4
        .byte 4
        .byte 4
        LABEL4:
        ld [%fp-20], %o1
        add %o1, -1, %o0
        mov %o0, %o1
        st %o1, [%fp-20]
        cmp %o1, 3
        bne .LL20
        nop
        mov -4, %o0
        ld [%fp+68], %o1
        add %o0, %o1, %o0
        mov -1, %o1
        ld [%o0], %o2
        add %o1, %o2, %o0
        ldub [%o0], %o1
        sll %o1, 24, %o0
        sra %o0, 24, %o1
        mov 4, %o0
        call equal__Fii, 0
         nop
        cmp %o0, 0
        bne .LL19
        nop
        b .LL20
         nop
.LL20:
        mov 1, %i0
        b .LL3
         nop
.LL19:
        ld [%fp+68], %o0
        ld [%o0], %o1
        add %o0, 4, %o0
        st %o0, [%fp+68]
        mov %o1, %o0
        jmp %o0
         nop
.LL5:
        .byte 5
        .byte 5
        .byte 5
        .byte 5
        LABEL5:
        ld [%fp-20], %o1
        add %o1, -1, %o0
        mov %o0, %o1
        st %o1, [%fp-20]
        cmp %o1, 4
        bne .LL22
        nop
        mov -4, %o0
        ld [%fp+68], %o1
        add %o0, %o1, %o0
        mov -1, %o1
        ld [%o0], %o2
        add %o1, %o2, %o0
        ldub [%o0], %o1
        sll %o1, 24, %o0
        sra %o0, 24, %o1
        mov 5, %o0
        call equal__Fii, 0
         nop
        cmp %o0, 0
        bne .LL21
        nop
        b .LL22
         nop
.LL22:
        mov 1, %i0
        b .LL3
         nop
.LL21:
        ld [%fp+68], %o0
        ld [%o0], %o1
        add %o0, 4, %o0
        st %o0, [%fp+68]
        mov %o1, %o0
        jmp %o0
         nop
        b .LL23
         nop
        b .LL3
         nop
.LL23:
.LL3:
        ret
        restore
.LLfe2:
        .size engine__FPPv,.LLfe2-engine__FPPv
        .align 4
        .global equal__Fii
        .type equal__Fii,#function
        .proc 00
equal__Fii:
        !#PROLOGUE# 0
        save %sp, -112, %sp
        !#PROLOGUE# 1
        st %i0, [%fp+68]
        st %i1, [%fp+72]
        ld [%fp+68], %o0
        ld [%fp+72], %o1
        xor %o0, %o1, %o2
        subcc %g0, %o2, %g0
        subx %g0, -1, %o0
        mov %o0, %i0
        b .LL24
         nop
        b .LL25
         nop
        b .LL24
         nop
.LL25:
.LL24:
        ret
        restore
.LLfe3:
        .size equal__Fii,.LLfe3-equal__Fii
        .local program
        .common program,24,4
        .ident "GCC: (GNU) 2.95.3 20010315 (release)"


Excerpt from config.log

configure:9905: c++ -o conftest -fno-exceptions -fno-implicit-templates -DARCH_SPARC conftest.C -lz -lgmp -ldl -lm -lsocket -lnsl 1>&5
/usr/ccs/bin/as: "/var/tmp/ccAIOH50.s", line 51: error: statement syntax
/usr/ccs/bin/as: "/var/tmp/ccAIOH50.s", line 60: error: statement syntax
/usr/ccs/bin/as: "/var/tmp/ccAIOH50.s", line 69: error: statement syntax
/usr/ccs/bin/as: "/var/tmp/ccAIOH50.s", line 78: error: statement syntax
/usr/ccs/bin/as: "/var/tmp/ccAIOH50.s", line 87: error: statement syntax
/usr/ccs/bin/as: "/var/tmp/ccAIOH50.s", line 96: error: statement syntax
configure: failed program was:
#line 9803 "configure"
#include "confdefs.h"
#ifdef __cplusplus
extern "C" void exit(int);
#endif

int engine(void**);
bool equal(int,int);

static void* program[6];

int main()
{
  (void) engine(0);
  return engine(program);
}

#define OP0_VALUE 0
#define OP1_VALUE 1
#define OP2_VALUE 2
#define OP3_VALUE 3
#define OP4_VALUE 4
#define OP5_VALUE 5

#define OP0_STRING "0"
#define OP1_STRING "1"
#define OP2_STRING "2"
#define OP3_STRING "3"
#define OP4_STRING "4"
#define OP5_STRING "5"

/*
 * define a C++ label
 * then also define an ASM label
 * and fill the bytes between them with the opcode
 * we will actually jump to the ASM label
 * but given the ASM label, we can immediately
 * recover the corresponding opcode by reading
 * the preceding byte
 */

#define REPEAT_FOR_ALIGNMENT(S) S;S;S;S

#define CASE(N) FAKE_ ##N :REPEAT_FOR_ALIGNMENT(asm(".byte " OP##N##_STRING)); asm("LABEL" OP##N##_STRING":");

/*
 * appear to use the C++ label
 * but really store ASM label
 */

#if defined(ARCH_I486)
#define LOAD_LABEL(N) asm("movl $LABEL"OP##N##_STRING",%0" : "=m" (*ptr))
#elif defined(ARCH_SPARC)
#define LOAD_LABEL(N) asm("set LABEL"OP##N##_STRING",%0" : "=m" (*ptr))
#else
#error platform not supported
#endif

#define LOAD(N) *ptr = && FAKE_##N; LOAD_LABEL(N); ++ptr;

#define DO(N) if (N!=n-- || !equal(OP##N##_VALUE,((char*)*(bytecode-1))[-1])) return 1

#define DISPATCH goto **bytecode++

int engine(void**bytecode)
{
  int n;
  if (! bytecode)
    {
      void** ptr = program;
      LOAD(5);
      LOAD(4);
      LOAD(3);
      LOAD(2);
      LOAD(1);
      LOAD(0);
      return 0;
    }

  n = 5;
  DISPATCH;
  CASE(0) { DO(0); return 0; }
  CASE(1) { DO(1); DISPATCH; }
  CASE(2) { DO(2); DISPATCH; }
  CASE(3) { DO(3); DISPATCH; }
  CASE(4) { DO(4); DISPATCH; }
  CASE(5) { DO(5); DISPATCH; }
}

bool equal(int want,int have)
{
  return want==have;
}

-
Please send submissions to hackers@mozart-oz.org
and administriva mail to hackers-request@mozart-oz.org.
The Mozart Oz web site is at http://www.mozart-oz.org/.



This archive was generated by hypermail 2b29.