Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/arch/sparc/kernel/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 8 kB image not shown  

Quelle  fpu_traps.S   Sprache: Sparc

 
/* SPDX-License-Identifier: GPL-2.0 */
 /* This is trivial with the new code... */
 .globl  do_fpdis
 .type  do_fpdis,#function
do_fpdis:
 sethi  %hi(TSTATE_PEF), %g4
 rdpr  %tstate, %g5
 andcc  %g5, %g4, %g0
 be,pt  %xcc, 1f
  nop
 rd  %fprs, %g5
 andcc  %g5, FPRS_FEF, %g0
 be,pt  %xcc, 1f
  nop

 /* Legal state when DCR_IFPOE is set in Cheetah %dcr. */
 sethi  %hi(109f), %g7
 ba,pt  %xcc, etrap
109:  or  %g7, %lo(109b), %g7
 add  %g0, %g0, %g0
 ba,a,pt  %xcc, rtrap

1: TRAP_LOAD_THREAD_REG(%g6, %g1)
 ldub  [%g6 + TI_FPSAVED], %g5
 wr  %g0, FPRS_FEF, %fprs
 andcc  %g5, FPRS_FEF, %g0
 be,a,pt  %icc, 1f
  clr  %g7
 ldx  [%g6 + TI_GSR], %g7
1: andcc  %g5, FPRS_DL, %g0
 bne,pn  %icc, 2f
  fzero  %f0
 andcc  %g5, FPRS_DU, %g0
 bne,pn  %icc, 1f
  fzero  %f2
 faddd  %f0, %f2, %f4
 fmuld  %f0, %f2, %f6
 faddd  %f0, %f2, %f8
 fmuld  %f0, %f2, %f10
 faddd  %f0, %f2, %f12
 fmuld  %f0, %f2, %f14
 faddd  %f0, %f2, %f16
 fmuld  %f0, %f2, %f18
 faddd  %f0, %f2, %f20
 fmuld  %f0, %f2, %f22
 faddd  %f0, %f2, %f24
 fmuld  %f0, %f2, %f26
 faddd  %f0, %f2, %f28
 fmuld  %f0, %f2, %f30
 faddd  %f0, %f2, %f32
 fmuld  %f0, %f2, %f34
 faddd  %f0, %f2, %f36
 fmuld  %f0, %f2, %f38
 faddd  %f0, %f2, %f40
 fmuld  %f0, %f2, %f42
 faddd  %f0, %f2, %f44
 fmuld  %f0, %f2, %f46
 faddd  %f0, %f2, %f48
 fmuld  %f0, %f2, %f50
 faddd  %f0, %f2, %f52
 fmuld  %f0, %f2, %f54
 faddd  %f0, %f2, %f56
 fmuld  %f0, %f2, %f58
 b,pt  %xcc, fpdis_exit2
  faddd  %f0, %f2, %f60
1: mov  SECONDARY_CONTEXT, %g3
 add  %g6, TI_FPREGS + 0x80, %g1
 faddd  %f0, %f2, %f4
 fmuld  %f0, %f2, %f6

661: ldxa  [%g3] ASI_DMMU, %g5
 .section .sun4v_1insn_patch, "ax"
 .word  661b
 ldxa  [%g3] ASI_MMU, %g5
 .previous

 sethi  %hi(sparc64_kern_sec_context), %g2
 ldx  [%g2 + %lo(sparc64_kern_sec_context)], %g2

661: stxa  %g2, [%g3] ASI_DMMU
 .section .sun4v_1insn_patch, "ax"
 .word  661b
 stxa  %g2, [%g3] ASI_MMU
 .previous

 membar  #Sync
 add  %g6, TI_FPREGS + 0xc0, %g2
 faddd  %f0, %f2, %f8
 fmuld  %f0, %f2, %f10
 membar  #Sync
 ldda  [%g1] ASI_BLK_S, %f32
 ldda  [%g2] ASI_BLK_S, %f48
 membar  #Sync
 faddd  %f0, %f2, %f12
 fmuld  %f0, %f2, %f14
 faddd  %f0, %f2, %f16
 fmuld  %f0, %f2, %f18
 faddd  %f0, %f2, %f20
 fmuld  %f0, %f2, %f22
 faddd  %f0, %f2, %f24
 fmuld  %f0, %f2, %f26
 faddd  %f0, %f2, %f28
 fmuld  %f0, %f2, %f30
 ba,a,pt  %xcc, fpdis_exit

2: andcc  %g5, FPRS_DU, %g0
 bne,pt  %icc, 3f
  fzero  %f32
 mov  SECONDARY_CONTEXT, %g3
 fzero  %f34

661: ldxa  [%g3] ASI_DMMU, %g5
 .section .sun4v_1insn_patch, "ax"
 .word  661b
 ldxa  [%g3] ASI_MMU, %g5
 .previous

 add  %g6, TI_FPREGS, %g1
 sethi  %hi(sparc64_kern_sec_context), %g2
 ldx  [%g2 + %lo(sparc64_kern_sec_context)], %g2

661: stxa  %g2, [%g3] ASI_DMMU
 .section .sun4v_1insn_patch, "ax"
 .word  661b
 stxa  %g2, [%g3] ASI_MMU
 .previous

 membar  #Sync
 add  %g6, TI_FPREGS + 0x40, %g2
 faddd  %f32, %f34, %f36
 fmuld  %f32, %f34, %f38
 membar  #Sync
 ldda  [%g1] ASI_BLK_S, %f0
 ldda  [%g2] ASI_BLK_S, %f16
 membar  #Sync
 faddd  %f32, %f34, %f40
 fmuld  %f32, %f34, %f42
 faddd  %f32, %f34, %f44
 fmuld  %f32, %f34, %f46
 faddd  %f32, %f34, %f48
 fmuld  %f32, %f34, %f50
 faddd  %f32, %f34, %f52
 fmuld  %f32, %f34, %f54
 faddd  %f32, %f34, %f56
 fmuld  %f32, %f34, %f58
 faddd  %f32, %f34, %f60
 fmuld  %f32, %f34, %f62
 ba,a,pt  %xcc, fpdis_exit

3: mov  SECONDARY_CONTEXT, %g3
 add  %g6, TI_FPREGS, %g1

661: ldxa  [%g3] ASI_DMMU, %g5
 .section .sun4v_1insn_patch, "ax"
 .word  661b
 ldxa  [%g3] ASI_MMU, %g5
 .previous

 sethi  %hi(sparc64_kern_sec_context), %g2
 ldx  [%g2 + %lo(sparc64_kern_sec_context)], %g2

661: stxa  %g2, [%g3] ASI_DMMU
 .section .sun4v_1insn_patch, "ax"
 .word  661b
 stxa  %g2, [%g3] ASI_MMU
 .previous

 membar  #Sync
 mov  0x40, %g2
 membar  #Sync
 ldda  [%g1] ASI_BLK_S, %f0
 ldda  [%g1 + %g2] ASI_BLK_S, %f16
 add  %g1, 0x80, %g1
 ldda  [%g1] ASI_BLK_S, %f32
 ldda  [%g1 + %g2] ASI_BLK_S, %f48
 membar  #Sync
fpdis_exit:

661: stxa  %g5, [%g3] ASI_DMMU
 .section .sun4v_1insn_patch, "ax"
 .word  661b
 stxa  %g5, [%g3] ASI_MMU
 .previous

 membar  #Sync
fpdis_exit2:
 wr  %g7, 0, %gsr
 ldx  [%g6 + TI_XFSR], %fsr
 rdpr  %tstate, %g3
 or  %g3, %g4, %g3  ! anal...
 wrpr  %g3, %tstate
 wr  %g0, FPRS_FEF, %fprs ! clean DU/DL bits
 retry
 .size  do_fpdis,.-do_fpdis

 .align  32
 .type  fp_other_bounce,#function
fp_other_bounce:
 call  do_fpother
  add  %sp, PTREGS_OFF, %o0
 ba,a,pt  %xcc, rtrap
 .size  fp_other_bounce,.-fp_other_bounce

 .align  32
 .globl  do_fpother_check_fitos
 .type  do_fpother_check_fitos,#function
do_fpother_check_fitos:
 TRAP_LOAD_THREAD_REG(%g6, %g1)
 sethi  %hi(fp_other_bounce - 4), %g7
 or  %g7, %lo(fp_other_bounce - 4), %g7

 /* NOTE: Need to preserve %g7 until we fully commit
 *       to the fitos fixup.
 */

 stx  %fsr, [%g6 + TI_XFSR]
 rdpr  %tstate, %g3
 andcc  %g3, TSTATE_PRIV, %g0
 bne,pn  %xcc, do_fptrap_after_fsr
  nop
 ldx  [%g6 + TI_XFSR], %g3
 srlx  %g3, 14, %g1
 and  %g1, 7, %g1
 cmp  %g1, 2   ! Unfinished FP-OP
 bne,pn  %xcc, do_fptrap_after_fsr
  sethi  %hi(1 << 23), %g1 ! Inexact
 andcc  %g3, %g1, %g0
 bne,pn  %xcc, do_fptrap_after_fsr
  rdpr  %tpc, %g1
 lduwa  [%g1] ASI_AIUP, %g3 ! This cannot ever fail
#define FITOS_MASK 0xc1f83fe0
#define FITOS_COMPARE 0x81a01880
 sethi  %hi(FITOS_MASK), %g1
 or  %g1, %lo(FITOS_MASK), %g1
 and  %g3, %g1, %g1
 sethi  %hi(FITOS_COMPARE), %g2
 or  %g2, %lo(FITOS_COMPARE), %g2
 cmp  %g1, %g2
 bne,pn  %xcc, do_fptrap_after_fsr
  nop
 std  %f62, [%g6 + TI_FPREGS + (62 * 4)]
 sethi  %hi(fitos_table_1), %g1
 and  %g3, 0x1f, %g2
 or  %g1, %lo(fitos_table_1),  %g1
 sllx  %g2, 2, %g2
 jmpl  %g1 + %g2, %g0
  ba,pt  %xcc, fitos_emul_continue

fitos_table_1:
 fitod  %f0, %f62
 fitod  %f1, %f62
 fitod  %f2, %f62
 fitod  %f3, %f62
 fitod  %f4, %f62
 fitod  %f5, %f62
 fitod  %f6, %f62
 fitod  %f7, %f62
 fitod  %f8, %f62
 fitod  %f9, %f62
 fitod  %f10, %f62
 fitod  %f11, %f62
 fitod  %f12, %f62
 fitod  %f13, %f62
 fitod  %f14, %f62
 fitod  %f15, %f62
 fitod  %f16, %f62
 fitod  %f17, %f62
 fitod  %f18, %f62
 fitod  %f19, %f62
 fitod  %f20, %f62
 fitod  %f21, %f62
 fitod  %f22, %f62
 fitod  %f23, %f62
 fitod  %f24, %f62
 fitod  %f25, %f62
 fitod  %f26, %f62
 fitod  %f27, %f62
 fitod  %f28, %f62
 fitod  %f29, %f62
 fitod  %f30, %f62
 fitod  %f31, %f62

fitos_emul_continue:
 sethi  %hi(fitos_table_2), %g1
 srl  %g3, 25, %g2
 or  %g1, %lo(fitos_table_2), %g1
 and  %g2, 0x1f, %g2
 sllx  %g2, 2, %g2
 jmpl  %g1 + %g2, %g0
  ba,pt  %xcc, fitos_emul_fini

fitos_table_2:
 fdtos  %f62, %f0
 fdtos  %f62, %f1
 fdtos  %f62, %f2
 fdtos  %f62, %f3
 fdtos  %f62, %f4
 fdtos  %f62, %f5
 fdtos  %f62, %f6
 fdtos  %f62, %f7
 fdtos  %f62, %f8
 fdtos  %f62, %f9
 fdtos  %f62, %f10
 fdtos  %f62, %f11
 fdtos  %f62, %f12
 fdtos  %f62, %f13
 fdtos  %f62, %f14
 fdtos  %f62, %f15
 fdtos  %f62, %f16
 fdtos  %f62, %f17
 fdtos  %f62, %f18
 fdtos  %f62, %f19
 fdtos  %f62, %f20
 fdtos  %f62, %f21
 fdtos  %f62, %f22
 fdtos  %f62, %f23
 fdtos  %f62, %f24
 fdtos  %f62, %f25
 fdtos  %f62, %f26
 fdtos  %f62, %f27
 fdtos  %f62, %f28
 fdtos  %f62, %f29
 fdtos  %f62, %f30
 fdtos  %f62, %f31

fitos_emul_fini:
 ldd  [%g6 + TI_FPREGS + (62 * 4)], %f62
 done
 .size  do_fpother_check_fitos,.-do_fpother_check_fitos

 .align  32
 .globl  do_fptrap
 .type  do_fptrap,#function
do_fptrap:
 TRAP_LOAD_THREAD_REG(%g6, %g1)
 stx  %fsr, [%g6 + TI_XFSR]
do_fptrap_after_fsr:
 ldub  [%g6 + TI_FPSAVED], %g3
 rd  %fprs, %g1
 or  %g3, %g1, %g3
 stb  %g3, [%g6 + TI_FPSAVED]
 rd  %gsr, %g3
 stx  %g3, [%g6 + TI_GSR]
 mov  SECONDARY_CONTEXT, %g3

661: ldxa  [%g3] ASI_DMMU, %g5
 .section .sun4v_1insn_patch, "ax"
 .word  661b
 ldxa  [%g3] ASI_MMU, %g5
 .previous

 sethi  %hi(sparc64_kern_sec_context), %g2
 ldx  [%g2 + %lo(sparc64_kern_sec_context)], %g2

661: stxa  %g2, [%g3] ASI_DMMU
 .section .sun4v_1insn_patch, "ax"
 .word  661b
 stxa  %g2, [%g3] ASI_MMU
 .previous

 membar  #Sync
 add  %g6, TI_FPREGS, %g2
 andcc  %g1, FPRS_DL, %g0
 be,pn  %icc, 4f
  mov  0x40, %g3
 stda  %f0, [%g2] ASI_BLK_S
 stda  %f16, [%g2 + %g3] ASI_BLK_S
 andcc  %g1, FPRS_DU, %g0
 be,pn  %icc, 5f
4:       add  %g2, 128, %g2
 stda  %f32, [%g2] ASI_BLK_S
 stda  %f48, [%g2 + %g3] ASI_BLK_S
5: mov  SECONDARY_CONTEXT, %g1
 membar  #Sync

661: stxa  %g5, [%g1] ASI_DMMU
 .section .sun4v_1insn_patch, "ax"
 .word  661b
 stxa  %g5, [%g1] ASI_MMU
 .previous

 membar  #Sync
 ba,pt  %xcc, etrap
  wr  %g0, 0, %fprs
 .size  do_fptrap,.-do_fptrap

Messung V0.5
C=98 H=100 G=98

¤ Dauer der Verarbeitung: 0.0 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.