linux/tools/testing/selftests/powerpc/include/fpu_asm.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-or-later */
   2/*
   3 * Copyright 2016, Cyril Bur, IBM Corp.
   4 */
   5
   6#ifndef _SELFTESTS_POWERPC_FPU_ASM_H
   7#define _SELFTESTS_POWERPC_FPU_ASM_H
   8#include "basic_asm.h"
   9
  10#define PUSH_FPU(stack_size) \
  11        stfd    f31,(stack_size + STACK_FRAME_MIN_SIZE)(%r1); \
  12        stfd    f30,(stack_size + STACK_FRAME_MIN_SIZE - 8)(%r1); \
  13        stfd    f29,(stack_size + STACK_FRAME_MIN_SIZE - 16)(%r1); \
  14        stfd    f28,(stack_size + STACK_FRAME_MIN_SIZE - 24)(%r1); \
  15        stfd    f27,(stack_size + STACK_FRAME_MIN_SIZE - 32)(%r1); \
  16        stfd    f26,(stack_size + STACK_FRAME_MIN_SIZE - 40)(%r1); \
  17        stfd    f25,(stack_size + STACK_FRAME_MIN_SIZE - 48)(%r1); \
  18        stfd    f24,(stack_size + STACK_FRAME_MIN_SIZE - 56)(%r1); \
  19        stfd    f23,(stack_size + STACK_FRAME_MIN_SIZE - 64)(%r1); \
  20        stfd    f22,(stack_size + STACK_FRAME_MIN_SIZE - 72)(%r1); \
  21        stfd    f21,(stack_size + STACK_FRAME_MIN_SIZE - 80)(%r1); \
  22        stfd    f20,(stack_size + STACK_FRAME_MIN_SIZE - 88)(%r1); \
  23        stfd    f19,(stack_size + STACK_FRAME_MIN_SIZE - 96)(%r1); \
  24        stfd    f18,(stack_size + STACK_FRAME_MIN_SIZE - 104)(%r1); \
  25        stfd    f17,(stack_size + STACK_FRAME_MIN_SIZE - 112)(%r1); \
  26        stfd    f16,(stack_size + STACK_FRAME_MIN_SIZE - 120)(%r1); \
  27        stfd    f15,(stack_size + STACK_FRAME_MIN_SIZE - 128)(%r1); \
  28        stfd    f14,(stack_size + STACK_FRAME_MIN_SIZE - 136)(%r1);
  29
  30#define POP_FPU(stack_size) \
  31        lfd     f31,(stack_size + STACK_FRAME_MIN_SIZE)(%r1); \
  32        lfd     f30,(stack_size + STACK_FRAME_MIN_SIZE - 8)(%r1); \
  33        lfd     f29,(stack_size + STACK_FRAME_MIN_SIZE - 16)(%r1); \
  34        lfd     f28,(stack_size + STACK_FRAME_MIN_SIZE - 24)(%r1); \
  35        lfd     f27,(stack_size + STACK_FRAME_MIN_SIZE - 32)(%r1); \
  36        lfd     f26,(stack_size + STACK_FRAME_MIN_SIZE - 40)(%r1); \
  37        lfd     f25,(stack_size + STACK_FRAME_MIN_SIZE - 48)(%r1); \
  38        lfd     f24,(stack_size + STACK_FRAME_MIN_SIZE - 56)(%r1); \
  39        lfd     f23,(stack_size + STACK_FRAME_MIN_SIZE - 64)(%r1); \
  40        lfd     f22,(stack_size + STACK_FRAME_MIN_SIZE - 72)(%r1); \
  41        lfd     f21,(stack_size + STACK_FRAME_MIN_SIZE - 80)(%r1); \
  42        lfd     f20,(stack_size + STACK_FRAME_MIN_SIZE - 88)(%r1); \
  43        lfd     f19,(stack_size + STACK_FRAME_MIN_SIZE - 96)(%r1); \
  44        lfd     f18,(stack_size + STACK_FRAME_MIN_SIZE - 104)(%r1); \
  45        lfd     f17,(stack_size + STACK_FRAME_MIN_SIZE - 112)(%r1); \
  46        lfd     f16,(stack_size + STACK_FRAME_MIN_SIZE - 120)(%r1); \
  47        lfd     f15,(stack_size + STACK_FRAME_MIN_SIZE - 128)(%r1); \
  48        lfd     f14,(stack_size + STACK_FRAME_MIN_SIZE - 136)(%r1);
  49
  50/*
  51 * Careful calling this, it will 'clobber' fpu (by design)
  52 * Don't call this from C
  53 */
  54FUNC_START(load_fpu)
  55        lfd     f14,0(r3)
  56        lfd     f15,8(r3)
  57        lfd     f16,16(r3)
  58        lfd     f17,24(r3)
  59        lfd     f18,32(r3)
  60        lfd     f19,40(r3)
  61        lfd     f20,48(r3)
  62        lfd     f21,56(r3)
  63        lfd     f22,64(r3)
  64        lfd     f23,72(r3)
  65        lfd     f24,80(r3)
  66        lfd     f25,88(r3)
  67        lfd     f26,96(r3)
  68        lfd     f27,104(r3)
  69        lfd     f28,112(r3)
  70        lfd     f29,120(r3)
  71        lfd     f30,128(r3)
  72        lfd     f31,136(r3)
  73        blr
  74FUNC_END(load_fpu)
  75
  76#endif /* _SELFTESTS_POWERPC_FPU_ASM_H */
  77