[gnu.utils.bug] gas 1.34/sparc

jjc@UUNET.UU.NET (James Clark) (06/13/89)

gas 1.34/sparc doesn't like some g++ output. It rejects lines 162 and
164 of the following with an ``Illegal operands'' diagnostic. The
relevant lines are:

	ld [%lo(LC1)+%g1],%o1
and
	ld [%lo(LC1+4)+%g1],%o2

The complete input file was:

gcc_compiled.:
.text
	.align 4
	.proc 1
_peek_PSchar_list_iterator:
	!#PROLOGUE# 0
	save %sp,-112,%sp
	!#PROLOGUE# 1
	mov %i0,%o1
	ld [%o1],%o0
	tst %o0
	bne L43
	nop
	b L42
	mov -1,%i0
L43:
	ldsh [%o1+4],%o3
	ld [%o1],%o2
	ld [%o2+4],%o0
	cmp %o3,%o0
	bge L45
	nop
	add %o2,%o3,%o0
	b L42
	ldub [%o0+8],%i0
L45:
	ld [%o1],%o0
	ld [%o0],%o4
	st %o4,[%o1]
	sth %g0,[%o1+4]
	call _peek_PSchar_list_iterator,0
	mov %o1,%o0
	mov %o0,%i0
L42:
	ret
	restore
	.align 4
	.proc 1
_next_PSchar_list_iterator:
	!#PROLOGUE# 0
	save %sp,-112,%sp
	!#PROLOGUE# 1
	mov %i0,%o2
	ld [%o2],%o0
	tst %o0
	bne L53
	nop
	b L52
	mov -1,%i0
L53:
	ldsh [%o2+4],%o0
	ld [%o2],%o3
	ld [%o3+4],%o1
	cmp %o0,%o1
	bge L55
	nop
	add %o2,4,%o0
	ldsh [%o0],%o1
	ldsh [%o0],%o2
	add %o2,1,%o2
	sth %o2,[%o0]
	sll %o1,0x10,%o1
	sra %o1,0x10,%o1
	add %o3,%o1,%o1
	b L52
	ldub [%o1+8],%i0
L55:
	ld [%o2],%o0
	ld [%o0],%o4
	st %o4,[%o2]
	sth %g0,[%o2+4]
	call _next_PSchar_list_iterator,0
	mov %o2,%o0
	mov %o0,%i0
L52:
	ret
	restore
	.align 4
	.proc 1
_is_dummy_PSnode:
	!#PROLOGUE# 0
	save %sp,-112,%sp
	!#PROLOGUE# 1
	mov 0,%i0
	ret
	restore
	.align 4
	.proc 1
_copy_PSline_start_node:
	!#PROLOGUE# 0
	save %sp,-120,%sp
	!#PROLOGUE# 1
	mov %i0,%l0
	call _line_start_node_PSline_start_node,0
	mov 0,%o0
	ld [%o0+4],%o4
	st %o4,[%fp-20]
	mov %o0,%o2
	ld [%l0+4],%g1
	st %g1,[%o2+4]
	ld [%l0+0],%g1
	st %g1,[%o2+0]
	ld [%fp-20],%o4
	st %o4,[%o0+4]
	mov %o0,%i0
	ret
	restore
LC0:
	.ascii "<line start>\0"
	.align 4
	.proc 1
_print_PSline_start_node:
	!#PROLOGUE# 0
	save %sp,-112,%sp
	!#PROLOGUE# 1
	sethi %hi(__iob),%o0
	or %lo(__iob),%o0,%o0
	add %o0,40,%o0
	sethi %hi(LC0),%o1
	call _fprintf,0
	or %o1,%lo(LC0),%o1
	ret
	restore
	.align 4
	.proc 1
_line_start_node_PSline_start_node:
	!#PROLOGUE# 0
	save %sp,-112,%sp
	!#PROLOGUE# 1
	orcc %i0,%g0,%o0 ! 2-insn combine
	bne L80
	nop
	call ___builtin_new,0
	mov 8,%o0
L80:
	call _node_PSnode_PSnode,0
	mov 0,%o1
	sethi %hi(__vt$line_start_node),%o2
	or %lo(__vt$line_start_node),%o2,%o2
	st %o2,[%o0+4]
	mov %o0,%i0
	ret
	restore
	.align 8
LC1:
	.double 0r0.00000000000000000000e+00
	.align 4
.global _do_break_PSenvironment
	.proc 1
_do_break_PSenvironment:
	!#PROLOGUE# 0
	save %sp,-112,%sp
	!#PROLOGUE# 1
	mov %i0,%l0
	ld [%l0+248],%o3
	tst %o3
	be L111
	nop
	mov 0,%o0
	sethi %hi(LC1),%g1
	sethi %hi(LC1),%g1
	ld [%lo(LC1)+%g1],%o1
	sethi %hi(LC1+4),%g1
	ld [%lo(LC1+4)+%g1],%o2
	call _space_node_PSspace_node_DF_PSnode,0
	nop
	st %o0,[%l0+248]
	mov %l0,%o0
	call _possibly_break_line_PSenvironment_SI,0
	mov 0,%o1
L111:
	ld [%l0+248],%o0
	tst %o0
	be L112
	nop
	ldd [%l0+264],%f2
	ldd [%l0+272],%f4
	faddd %f2,%f4,%f2
	ldd [%l0+280],%f4
	fsubd %f4,%f2,%f4
	std %f4,[%l0+280]
	ldd [%l0+264],%f2
	ldd [%l0+272],%f4
	mov %l0,%o0
	ld [%l0+248],%o1
	faddd %f2,%f4,%f6
	std %f6,[%fp-8]
	ldd [%fp-8],%o2
	call _output_line_PSenvironment_PSnode_DF,0
	nop
	st %g0,[%l0+248]
L112:
	st %g0,[%l0+332]
	ret
	restore
.global _dfont$next_dfontno
.common _dfont$next_dfontno,8,"bss"
.global _font_size$next_size
.common _font_size$next_size,8,"bss"
.global _font_size$table
.common _font_size$table,8192,"bss"
.global _symbol$block_size
.common _symbol$block_size,8,"bss"
.global _symbol$block
.common _symbol$block,8,"bss"
.global _symbol$table_size
.common _symbol$table_size,8,"bss"
.global _symbol$table_used
.common _symbol$table_used,8,"bss"
.global _symbol$table
.common _symbol$table,8,"bss"
.data
	.align 8
__vt$space_node:
	.half 0
	.half 0
	.word 0
	.half 0
	.half 0
	.word __$_node
	.half 0
	.half 0
	.word _copy_PSspace_node
	.half 0
	.half 0
	.word _width_PSspace_node
	.half 0
	.half 0
	.word _space_width_PSspace_node
	.half 0
	.half 0
	.word _vertical_width_PSnode
	.half 0
	.half 0
	.word _prev_char_width_PSnode
	.half 0
	.half 0
	.word _character_type_PSnode
	.half 0
	.half 0
	.word _set_vertical_size_PSnode_PSvertical_size
	.half 0
	.half 0
	.word _print_PSspace_node
	.half 0
	.half 0
	.word _is_dummy_PSnode
	.half 0
	.half 0
	.word _ends_sentence_PSnode
	.half 0
	.half 0
	.word _merge_glyph_node_PSnode_PSglyph_node
	.half 0
	.half 0
	.word _add_discretionary_hyphen_PSnode
	.half 0
	.half 0
	.word _add_self_PSnode_PSnode_PPShyphen_list
	.half 0
	.half 0
	.word _get_hyphen_list_PSnode_PShyphen_list
	.half 0
	.half 0
	.word _typeset_PSspace_node_PStypeset_output_file
	.half 0
	.half 0
	.word _zero_width_typeset_PSnode_PStypeset_output_file
	.half 0
	.half 0
	.word _ascii_print_PSspace_node_PSascii_output_file
	.half 0
	.half 0
	.word _discardable_PSspace_node
	.half 0
	.half 0
	.word _set_space_factor_PSspace_node_DF
	.half 0
	.half 0
	.word _get_breakpoints_PSspace_node_DF_DF_PSbreakpoint_SI
	.half 0
	.half 0
	.word _nbreaks_PSspace_node
	.half 0
	.half 0
	.word _split_PSspace_node_SI_PPSnode_PPSnode
	.half 0
	.half 0
	.word _get_hyphenation_type_PSnode
	.half 0
	.half 0
	.word _get_diverted_space_node_PSnode
	.half 0
	.half 0
	.word _overlaps_vertically_PSnode
	.half 0
	.half 0
	.word _overlaps_horizontally_PSnode
	.half 0
	.half 0
	.word _size_PSnode
	.half 0
	.half 0
	.word _transparent_char_PSnode
	.align 8
__vt$line_start_node:
	.half 0
	.half 0
	.word 0
	.half 0
	.half 0
	.word __$_node
	.half 0
	.half 0
	.word _copy_PSline_start_node
	.half 0
	.half 0
	.word _width_PSnode
	.half 0
	.half 0
	.word _space_width_PSnode
	.half 0
	.half 0
	.word _vertical_width_PSnode
	.half 0
	.half 0
	.word _prev_char_width_PSnode
	.half 0
	.half 0
	.word _character_type_PSnode
	.half 0
	.half 0
	.word _set_vertical_size_PSnode_PSvertical_size
	.half 0
	.half 0
	.word _print_PSline_start_node
	.half 0
	.half 0
	.word _is_dummy_PSnode
	.half 0
	.half 0
	.word _ends_sentence_PSnode
	.half 0
	.half 0
	.word _merge_glyph_node_PSnode_PSglyph_node
	.half 0
	.half 0
	.word _add_discretionary_hyphen_PSnode
	.half 0
	.half 0
	.word _add_self_PSnode_PSnode_PPShyphen_list
	.half 0
	.half 0
	.word _get_hyphen_list_PSnode_PShyphen_list
	.half 0
	.half 0
	.word _typeset_PSnode_PStypeset_output_file
	.half 0
	.half 0
	.word _zero_width_typeset_PSnode_PStypeset_output_file
	.half 0
	.half 0
	.word _ascii_print_PSnode_PSascii_output_file
	.half 0
	.half 0
	.word _discardable_PSnode
	.half 0
	.half 0
	.word _set_space_factor_PSnode_DF
	.half 0
	.half 0
	.word _get_breakpoints_PSnode_DF_DF_PSbreakpoint_SI
	.half 0
	.half 0
	.word _nbreaks_PSnode
	.half 0
	.half 0
	.word _split_PSnode_SI_PPSnode_PPSnode
	.half 0
	.half 0
	.word _get_hyphenation_type_PSnode
	.half 0
	.half 0
	.word _get_diverted_space_node_PSnode
	.half 0
	.half 0
	.word _overlaps_vertically_PSnode
	.half 0
	.half 0
	.word _overlaps_horizontally_PSnode
	.half 0
	.half 0
	.word _size_PSnode
	.half 0
	.half 0
	.word _transparent_char_PSnode
.global _sys_nerr
.common _sys_nerr,8,"bss"
.global _errno
.common _errno,8,"bss"

James Clark
jjc@jclark.uucp