2014-11-26 Matthew Fortune <Matthew.Fortune@imgtec.com>
* mips/crt0.S: Remove .set noreorder throughout.
        (zerobss): Open code the bltu macro instruction so that the
        zero-loop does not have a NOP in the branch delay slot.
			
			
This commit is contained in:
		@@ -1,3 +1,9 @@
 | 
			
		||||
2014-11-26  Matthew Fortune  <Matthew.Fortune@imgtec.com>
 | 
			
		||||
 | 
			
		||||
	* mips/crt0.S: Remove .set noreorder throughout.
 | 
			
		||||
	(zerobss): Open code the bltu macro instruction so that the
 | 
			
		||||
	zero-loop does not have a NOP in the branch delay slot.
 | 
			
		||||
 | 
			
		||||
2014-11-13  Nick Clifton  <nickc@redhat.com>
 | 
			
		||||
 | 
			
		||||
	* msp430/Makefile.in (CRT_OBJS): Add crt_high_bss.o.
 | 
			
		||||
 
 | 
			
		||||
@@ -57,13 +57,14 @@
 | 
			
		||||
	.globl	_start
 | 
			
		||||
	.ent	_start
 | 
			
		||||
_start:
 | 
			
		||||
	.set	noreorder
 | 
			
		||||
#ifdef __mips_embedded_pic
 | 
			
		||||
#define PICBASE start_PICBASE
 | 
			
		||||
	.set	noreorder
 | 
			
		||||
	PICBASE = .+8
 | 
			
		||||
        bal	PICBASE
 | 
			
		||||
	nop
 | 
			
		||||
	move	s0,$31
 | 
			
		||||
	.set	reorder
 | 
			
		||||
#endif
 | 
			
		||||
#if __mips<3
 | 
			
		||||
#  define STATUS_MASK (SR_CU1|SR_PE)
 | 
			
		||||
@@ -89,9 +90,7 @@ _start:
 | 
			
		||||
	/* Avoid hazard from FPU enable and other SR changes.  */
 | 
			
		||||
	LA (t0, hardware_hazard_hook)
 | 
			
		||||
	beq	t0,zero,1f
 | 
			
		||||
	nop
 | 
			
		||||
	jal	t0
 | 
			
		||||
	nop
 | 
			
		||||
	jalr	t0
 | 
			
		||||
1:
 | 
			
		||||
 | 
			
		||||
/* Check for FPU presence.  Don't check if we know that soft_float is
 | 
			
		||||
@@ -105,11 +104,8 @@ _start:
 | 
			
		||||
	mfc1	t1,fp1
 | 
			
		||||
	nop
 | 
			
		||||
	bne	t0,t2,1f	/* check for match */
 | 
			
		||||
	nop
 | 
			
		||||
	bne	t1,zero,1f	/* double check */
 | 
			
		||||
	nop
 | 
			
		||||
	j	2f		/* FPU is present. */
 | 
			
		||||
	nop
 | 
			
		||||
#endif
 | 
			
		||||
1:
 | 
			
		||||
	/* FPU is not present.  Set status register to say that. */
 | 
			
		||||
@@ -119,9 +115,7 @@ _start:
 | 
			
		||||
	/* Avoid hazard from FPU disable.  */
 | 
			
		||||
	LA (t0, hardware_hazard_hook)
 | 
			
		||||
	beq	t0,zero,2f
 | 
			
		||||
	nop
 | 
			
		||||
	jal	t0
 | 
			
		||||
	nop
 | 
			
		||||
	jalr	t0
 | 
			
		||||
2:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -129,7 +123,6 @@ _start:
 | 
			
		||||
   doesn't get confused.  */
 | 
			
		||||
	LA (v0, 3f)
 | 
			
		||||
	jr	v0
 | 
			
		||||
	nop
 | 
			
		||||
3:
 | 
			
		||||
	LA (gp, _gp)				# set the global data pointer
 | 
			
		||||
	.end _start
 | 
			
		||||
@@ -145,21 +138,20 @@ _start:
 | 
			
		||||
zerobss:
 | 
			
		||||
	LA (v0, _fbss)
 | 
			
		||||
	LA (v1, _end)
 | 
			
		||||
3:
 | 
			
		||||
	sw	zero,0(v0)
 | 
			
		||||
	bltu	v0,v1,3b
 | 
			
		||||
	addiu	v0,v0,4				# executed in delay slot
 | 
			
		||||
 | 
			
		||||
	beq	v0,v1,2f
 | 
			
		||||
1:
 | 
			
		||||
	addiu	v0,v0,4
 | 
			
		||||
	sw	zero,-4(v0)
 | 
			
		||||
	bne	v0,v1,1b
 | 
			
		||||
2:
 | 
			
		||||
	la	t0, __lstack			# make a small stack so we
 | 
			
		||||
	addiu	sp, t0, STARTUP_STACK_SIZE	# can run some C code
 | 
			
		||||
	la	a0, __memsize			# get the usable memory size
 | 
			
		||||
	jal	get_mem_info
 | 
			
		||||
	nop
 | 
			
		||||
 | 
			
		||||
	/* setup the stack pointer */
 | 
			
		||||
	LA (t0, __stack)			# is __stack set ?
 | 
			
		||||
	bne	t0,zero,4f
 | 
			
		||||
	nop
 | 
			
		||||
 | 
			
		||||
	/* NOTE: a0[0] contains the amount of memory available, and
 | 
			
		||||
	         not the last memory address. */
 | 
			
		||||
@@ -189,19 +181,14 @@ zerobss:
 | 
			
		||||
init:
 | 
			
		||||
	LA (t9, hardware_init_hook)		# init the hardware if needed
 | 
			
		||||
	beq	t9,zero,6f
 | 
			
		||||
	nop
 | 
			
		||||
	jal	t9
 | 
			
		||||
	nop
 | 
			
		||||
	jalr	t9
 | 
			
		||||
6:
 | 
			
		||||
	LA (t9, software_init_hook)		# init the hardware if needed
 | 
			
		||||
	beq	t9,zero,7f
 | 
			
		||||
	nop
 | 
			
		||||
	jal	t9
 | 
			
		||||
	nop
 | 
			
		||||
	jalr	t9
 | 
			
		||||
7:
 | 
			
		||||
	LA (a0, _fini)
 | 
			
		||||
	jal	atexit
 | 
			
		||||
	nop
 | 
			
		||||
 | 
			
		||||
#ifdef GCRT0
 | 
			
		||||
	.globl	_ftext
 | 
			
		||||
@@ -209,12 +196,10 @@ init:
 | 
			
		||||
	LA (a0, _ftext)
 | 
			
		||||
	LA (a1, _etext)
 | 
			
		||||
	jal	monstartup
 | 
			
		||||
	nop
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	jal	_init				# run global constructors
 | 
			
		||||
	nop
 | 
			
		||||
 | 
			
		||||
	addiu	a1,sp,32			# argv = sp + 32
 | 
			
		||||
	addiu	a2,sp,40			# envp = sp + 40
 | 
			
		||||
@@ -225,13 +210,13 @@ init:
 | 
			
		||||
	sw	zero,(a1)
 | 
			
		||||
	sw	zero,(a2)
 | 
			
		||||
#endif
 | 
			
		||||
	jal	main				# call the program start function
 | 
			
		||||
	move	a0,zero				# set argc to 0
 | 
			
		||||
	jal	main				# call the program start function
 | 
			
		||||
 | 
			
		||||
	# fall through to the "exit" routine
 | 
			
		||||
	move	a0,v0				# pass through the exit code
 | 
			
		||||
	jal	exit				# call libc exit to run the G++
 | 
			
		||||
						# destructors
 | 
			
		||||
	move	a0,v0				# pass through the exit code
 | 
			
		||||
	.end	init
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -257,27 +242,25 @@ _exit:
 | 
			
		||||
	/* Need to reinit PICBASE, since we might be called via exit()
 | 
			
		||||
	   rather than via a return path which would restore old s0.  */
 | 
			
		||||
#define PICBASE exit_PICBASE
 | 
			
		||||
	.set	noreorder
 | 
			
		||||
	PICBASE = .+8
 | 
			
		||||
	bal	PICBASE
 | 
			
		||||
	nop
 | 
			
		||||
	move	s0,$31
 | 
			
		||||
	.set	reorder
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef GCRT0
 | 
			
		||||
	LA (t0, _mcleanup)
 | 
			
		||||
	jal	t0
 | 
			
		||||
	nop
 | 
			
		||||
	jalr	t0
 | 
			
		||||
#endif
 | 
			
		||||
	LA (t0, hardware_exit_hook)
 | 
			
		||||
	beq	t0,zero,1f
 | 
			
		||||
	nop
 | 
			
		||||
	jal	t0
 | 
			
		||||
	nop
 | 
			
		||||
	jalr	t0
 | 
			
		||||
1:
 | 
			
		||||
 | 
			
		||||
	# break instruction can cope with 0xfffff, but GAS limits the range:
 | 
			
		||||
	break	1023
 | 
			
		||||
	b	7b				# but loop back just in-case
 | 
			
		||||
	nop
 | 
			
		||||
	.end _exit
 | 
			
		||||
 
 | 
			
		||||
/* Assume the PICBASE set up above is no longer valid below here.  */
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user