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/.