longjmp.s raw

   1  	.global _longjmp
   2  	.global longjmp
   3  	.type   _longjmp,@function
   4  	.type   longjmp,@function
   5  _longjmp:
   6  longjmp:
   7  	# 0) move old return address into the link register
   8  	ld   0,  0*8(3)
   9  	mtlr 0
  10  	# 1) restore cr
  11  	ld   0,  1*8(3)
  12  	mtcr 0
  13  	# 2) restore SP
  14  	ld   1,  2*8(3)
  15  	# 3) restore TOC into both r2 and the caller's stack.
  16  	#    Which location is required depends on whether setjmp was called
  17  	#    locally or non-locally, but it's always safe to restore to both.
  18  	ld   2,  3*8(3)
  19  	std  2,   24(1)
  20  	# 4) restore r14-r31
  21  	ld  14,  4*8(3)
  22  	ld  15,  5*8(3)
  23  	ld  16,  6*8(3)
  24  	ld  17,  7*8(3)
  25  	ld  18,  8*8(3)
  26  	ld  19,  9*8(3)
  27  	ld  20, 10*8(3)
  28  	ld  21, 11*8(3)
  29  	ld  22, 12*8(3)
  30  	ld  23, 13*8(3)
  31  	ld  24, 14*8(3)
  32  	ld  25, 15*8(3)
  33  	ld  26, 16*8(3)
  34  	ld  27, 17*8(3)
  35  	ld  28, 18*8(3)
  36  	ld  29, 19*8(3)
  37  	ld  30, 20*8(3)
  38  	ld  31, 21*8(3)
  39  	# 5) restore floating point registers f14-f31
  40  	lfd 14, 22*8(3)
  41  	lfd 15, 23*8(3)
  42  	lfd 16, 24*8(3)
  43  	lfd 17, 25*8(3)
  44  	lfd 18, 26*8(3)
  45  	lfd 19, 27*8(3)
  46  	lfd 20, 28*8(3)
  47  	lfd 21, 29*8(3)
  48  	lfd 22, 30*8(3)
  49  	lfd 23, 31*8(3)
  50  	lfd 24, 32*8(3)
  51  	lfd 25, 33*8(3)
  52  	lfd 26, 34*8(3)
  53  	lfd 27, 35*8(3)
  54  	lfd 28, 36*8(3)
  55  	lfd 29, 37*8(3)
  56  	lfd 30, 38*8(3)
  57  	lfd 31, 39*8(3)
  58  
  59  	# 6) restore vector registers v20-v31
  60  	addi 3, 3, 40*8
  61  	lvx 20, 0, 3 ; addi 3, 3, 16
  62  	lvx 21, 0, 3 ; addi 3, 3, 16
  63  	lvx 22, 0, 3 ; addi 3, 3, 16
  64  	lvx 23, 0, 3 ; addi 3, 3, 16
  65  	lvx 24, 0, 3 ; addi 3, 3, 16
  66  	lvx 25, 0, 3 ; addi 3, 3, 16
  67  	lvx 26, 0, 3 ; addi 3, 3, 16
  68  	lvx 27, 0, 3 ; addi 3, 3, 16
  69  	lvx 28, 0, 3 ; addi 3, 3, 16
  70  	lvx 29, 0, 3 ; addi 3, 3, 16
  71  	lvx 30, 0, 3 ; addi 3, 3, 16
  72  	lvx 31, 0, 3
  73  
  74  	# 7) return r4 ? r4 : 1
  75  	mr    3,   4
  76  	cmpwi cr7, 4, 0
  77  	bne   cr7, 1f
  78  	li    3,   1
  79  1:
  80  	blr
  81  
  82