Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/arch/sh/kernel/cpu/sh3/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 2 kB image not shown  

Quelle  swsusp.S   Sprache: Sparc

 
/* SPDX-License-Identifier: GPL-2.0
 *
 * arch/sh/kernel/cpu/sh3/swsusp.S
 *
 * Copyright (C) 2009 Magnus Damm
 */

#include <linux/sys.h>
#include <linux/errno.h>
#include <linux/linkage.h>
#include <asm/asm-offsets.h>
#include <asm/page.h>

#define k0 r0
#define k1 r1
#define k2 r2
#define k3 r3
#define k4 r4

! swsusp_arch_resume()
! - copy restore_pblist pages
! - restore registers from swsusp_arch_regs_cpu0

ENTRY(swsusp_arch_resume)
 mov.l 1f, r15
 mov.l 2f, r4
 mov.l @r4, r4

swsusp_copy_loop:
 mov r4, r0
 cmp/eq #0, r0
 bt swsusp_restore_regs

 mov.l @(PBE_ADDRESS, r4), r2
 mov.l @(PBE_ORIG_ADDRESS, r4), r5

 mov #(PAGE_SIZE >> 10), r3
 shll8 r3
 shlr2 r3 /* PAGE_SIZE / 16 */
swsusp_copy_page:
 dt r3
 mov.l @r2+,r1   /*  16n+0 */
 mov.l r1,@r5
 add #4,r5
 mov.l @r2+,r1   /*  16n+4 */
 mov.l r1,@r5
 add #4,r5
 mov.l @r2+,r1   /*  16n+8 */
 mov.l r1,@r5
 add #4,r5
 mov.l @r2+,r1   /*  16n+12 */
 mov.l r1,@r5
 bf/s swsusp_copy_page
  add #4,r5

 bra swsusp_copy_loop
  mov.l @(PBE_NEXT, r4), r4

swsusp_restore_regs:
 ! BL=0: R7->R0 is bank0
 mov.l 3f, r8
 mov.l 4f, r5
 jsr @r5
  nop

 ! BL=1: R7->R0 is bank1
 lds k2, pr
 ldc k3, ssr

 mov.l @r15+, r0
 mov.l @r15+, r1
 mov.l @r15+, r2
 mov.l @r15+, r3
 mov.l @r15+, r4
 mov.l @r15+, r5
 mov.l @r15+, r6
 mov.l @r15+, r7

 rte
  nop
 ! BL=0: R7->R0 is bank0

 .align 2
1: .long swsusp_arch_regs_cpu0
2: .long restore_pblist
3: .long 0x20000000 ! RB=1
4: .long restore_regs

! swsusp_arch_suspend()
! - prepare pc for resume, return from function without swsusp_save on resume
! - save registers in swsusp_arch_regs_cpu0
! - call swsusp_save write suspend image

ENTRY(swsusp_arch_suspend)
 sts pr, r0  ! save pr in r0
 mov r15, r2  ! save sp in r2
 mov r8, r5  ! save r8 in r5
 stc sr, r1
 ldc r1, ssr  ! save sr in ssr
 mov.l 1f, r1
 ldc r1, spc  ! setup pc value for resuming
 mov.l 5f, r15  ! use swsusp_arch_regs_cpu0 as stack
 mov.l 6f, r3
 add r3, r15  ! save from top of structure

 ! BL=0: R7->R0 is bank0
 mov.l 2f, r3  ! get new SR value for bank1
 mov #0, r4
 mov.l 7f, r1
 jsr @r1  ! switch to bank1 and save bank1 r7->r0
  not r4, r4

 ! BL=1: R7->R0 is bank1
 stc r2_bank, k0 ! fetch old sp from r2_bank0
 mov.l 3f, k4  ! SR bits to clear in k4
 mov.l 8f, k1
 jsr @k1  ! switch to bank0 and save all regs
  stc r0_bank, k3 ! fetch old pr from r0_bank0

 ! BL=0: R7->R0 is bank0
 mov r2, r15  ! restore old sp
 mov r5, r8  ! restore old r8
 stc ssr, r1
 ldc r1, sr  ! restore old sr
 lds r0, pr  ! restore old pr
 mov.l 4f, r0
 jmp @r0
  nop

swsusp_call_save:
 mov r2, r15  ! restore old sp
 mov r5, r8  ! restore old r8
 lds r0, pr  ! restore old pr
 rts
  mov #0, r0

 .align 2
1: .long swsusp_call_save
2: .long 0x20000000 ! RB=1
3: .long 0xdfffffff ! RB=0
4: .long swsusp_save
5: .long swsusp_arch_regs_cpu0
6: .long SWSUSP_ARCH_REGS_SIZE
7: .long save_low_regs
8: .long save_regs

Messung V0.5
C=72 H=100 G=86

¤ Dauer der Verarbeitung: 0.10 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.