linux/arch/xtensa/variants/test_mmuhifi_c3/include/variant/tie-asm.h
<<
>>
Prefs
   1/*
   2 * This header file contains assembly-language definitions (assembly
   3 * macros, etc.) for this specific Xtensa processor's TIE extensions
   4 * and options.  It is customized to this Xtensa processor configuration.
   5 *
   6 * This file is subject to the terms and conditions of version 2.1 of the GNU
   7 * Lesser General Public License as published by the Free Software Foundation.
   8 *
   9 * Copyright (C) 1999-2009 Tensilica Inc.
  10 */
  11
  12#ifndef _XTENSA_CORE_TIE_ASM_H
  13#define _XTENSA_CORE_TIE_ASM_H
  14
  15/*  Selection parameter values for save-area save/restore macros:  */
  16/*  Option vs. TIE:  */
  17#define XTHAL_SAS_TIE   0x0001  /* custom extension or coprocessor */
  18#define XTHAL_SAS_OPT   0x0002  /* optional (and not a coprocessor) */
  19/*  Whether used automatically by compiler:  */
  20#define XTHAL_SAS_NOCC  0x0004  /* not used by compiler w/o special opts/code */
  21#define XTHAL_SAS_CC    0x0008  /* used by compiler without special opts/code */
  22/*  ABI handling across function calls:  */
  23#define XTHAL_SAS_CALR  0x0010  /* caller-saved */
  24#define XTHAL_SAS_CALE  0x0020  /* callee-saved */
  25#define XTHAL_SAS_GLOB  0x0040  /* global across function calls (in thread) */
  26/*  Misc  */
  27#define XTHAL_SAS_ALL   0xFFFF  /* include all default NCP contents */
  28
  29
  30
  31/* Macro to save all non-coprocessor (extra) custom TIE and optional state
  32 * (not including zero-overhead loop registers).
  33 * Save area ptr (clobbered):  ptr  (8 byte aligned)
  34 * Scratch regs  (clobbered):  at1..at4  (only first XCHAL_NCP_NUM_ATMPS needed)
  35 */
  36        .macro xchal_ncp_store  ptr at1 at2 at3 at4  continue=0 ofs=-1 select=XTHAL_SAS_ALL
  37        xchal_sa_start  \continue, \ofs
  38        .ifeq (XTHAL_SAS_OPT | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~\select
  39        xchal_sa_align  \ptr, 0, 1024-4, 4, 4
  40        rsr     \at1, BR                // boolean option
  41        s32i    \at1, \ptr, .Lxchal_ofs_ + 0
  42        .set    .Lxchal_ofs_, .Lxchal_ofs_ + 4
  43        .endif
  44        .ifeq (XTHAL_SAS_OPT | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~\select
  45        xchal_sa_align  \ptr, 0, 1024-4, 4, 4
  46        rsr     \at1, SCOMPARE1         // conditional store option
  47        s32i    \at1, \ptr, .Lxchal_ofs_ + 0
  48        .set    .Lxchal_ofs_, .Lxchal_ofs_ + 4
  49        .endif
  50        .ifeq (XTHAL_SAS_OPT | XTHAL_SAS_CC | XTHAL_SAS_GLOB) & ~\select
  51        xchal_sa_align  \ptr, 0, 1024-4, 4, 4
  52        rur     \at1, THREADPTR         // threadptr option
  53        s32i    \at1, \ptr, .Lxchal_ofs_ + 0
  54        .set    .Lxchal_ofs_, .Lxchal_ofs_ + 4
  55        .endif
  56        .endm   // xchal_ncp_store
  57
  58/* Macro to save all non-coprocessor (extra) custom TIE and optional state
  59 * (not including zero-overhead loop registers).
  60 * Save area ptr (clobbered):  ptr  (8 byte aligned)
  61 * Scratch regs  (clobbered):  at1..at4  (only first XCHAL_NCP_NUM_ATMPS needed)
  62 */
  63        .macro xchal_ncp_load  ptr at1 at2 at3 at4  continue=0 ofs=-1 select=XTHAL_SAS_ALL
  64        xchal_sa_start  \continue, \ofs
  65        .ifeq (XTHAL_SAS_OPT | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~\select
  66        xchal_sa_align  \ptr, 0, 1024-4, 4, 4
  67        l32i    \at1, \ptr, .Lxchal_ofs_ + 0
  68        wsr     \at1, BR                // boolean option
  69        .set    .Lxchal_ofs_, .Lxchal_ofs_ + 4
  70        .endif
  71        .ifeq (XTHAL_SAS_OPT | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~\select
  72        xchal_sa_align  \ptr, 0, 1024-4, 4, 4
  73        l32i    \at1, \ptr, .Lxchal_ofs_ + 0
  74        wsr     \at1, SCOMPARE1         // conditional store option
  75        .set    .Lxchal_ofs_, .Lxchal_ofs_ + 4
  76        .endif
  77        .ifeq (XTHAL_SAS_OPT | XTHAL_SAS_CC | XTHAL_SAS_GLOB) & ~\select
  78        xchal_sa_align  \ptr, 0, 1024-4, 4, 4
  79        l32i    \at1, \ptr, .Lxchal_ofs_ + 0
  80        wur     \at1, THREADPTR         // threadptr option
  81        .set    .Lxchal_ofs_, .Lxchal_ofs_ + 4
  82        .endif
  83        .endm   // xchal_ncp_load
  84
  85
  86
  87#define XCHAL_NCP_NUM_ATMPS     1
  88
  89
  90
  91/* Macro to save the state of TIE coprocessor AudioEngineLX.
  92 * Save area ptr (clobbered):  ptr  (8 byte aligned)
  93 * Scratch regs  (clobbered):  at1..at4  (only first XCHAL_CP1_NUM_ATMPS needed)
  94 */
  95#define xchal_cp_AudioEngineLX_store    xchal_cp1_store
  96/* #define xchal_cp_AudioEngineLX_store_a2      xchal_cp1_store a2 a3 a4 a5 a6 */
  97        .macro  xchal_cp1_store  ptr at1 at2 at3 at4  continue=0 ofs=-1 select=XTHAL_SAS_ALL
  98        xchal_sa_start \continue, \ofs
  99        .ifeq (XTHAL_SAS_TIE | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~\select
 100        xchal_sa_align  \ptr, 0, 0, 1, 8
 101        rur240  \at1            // AE_OVF_SAR
 102        s32i    \at1, \ptr, 0
 103        rur241  \at1            // AE_BITHEAD
 104        s32i    \at1, \ptr, 4
 105        rur242  \at1            // AE_TS_FTS_BU_BP
 106        s32i    \at1, \ptr, 8
 107        rur243  \at1            // AE_SD_NO
 108        s32i    \at1, \ptr, 12
 109        AE_SP24X2S.I aep0, \ptr,  16
 110        AE_SP24X2S.I aep1, \ptr,  24
 111        AE_SP24X2S.I aep2, \ptr,  32
 112        AE_SP24X2S.I aep3, \ptr,  40
 113        AE_SP24X2S.I aep4, \ptr,  48
 114        AE_SP24X2S.I aep5, \ptr,  56
 115        addi    \ptr, \ptr, 64
 116        AE_SP24X2S.I aep6, \ptr,  0
 117        AE_SP24X2S.I aep7, \ptr,  8
 118        AE_SQ56S.I aeq0, \ptr,  16
 119        AE_SQ56S.I aeq1, \ptr,  24
 120        AE_SQ56S.I aeq2, \ptr,  32
 121        AE_SQ56S.I aeq3, \ptr,  40
 122        .set    .Lxchal_pofs_, .Lxchal_pofs_ + 64
 123        .set    .Lxchal_ofs_, .Lxchal_ofs_ + 112
 124        .endif
 125        .endm   // xchal_cp1_store
 126
 127/* Macro to restore the state of TIE coprocessor AudioEngineLX.
 128 * Save area ptr (clobbered):  ptr  (8 byte aligned)
 129 * Scratch regs  (clobbered):  at1..at4  (only first XCHAL_CP1_NUM_ATMPS needed)
 130 */
 131#define xchal_cp_AudioEngineLX_load     xchal_cp1_load
 132/* #define xchal_cp_AudioEngineLX_load_a2       xchal_cp1_load a2 a3 a4 a5 a6 */
 133        .macro  xchal_cp1_load  ptr at1 at2 at3 at4  continue=0 ofs=-1 select=XTHAL_SAS_ALL
 134        xchal_sa_start \continue, \ofs
 135        .ifeq (XTHAL_SAS_TIE | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~\select
 136        xchal_sa_align  \ptr, 0, 0, 1, 8
 137        l32i    \at1, \ptr, 0
 138        wur240  \at1            // AE_OVF_SAR
 139        l32i    \at1, \ptr, 4
 140        wur241  \at1            // AE_BITHEAD
 141        l32i    \at1, \ptr, 8
 142        wur242  \at1            // AE_TS_FTS_BU_BP
 143        l32i    \at1, \ptr, 12
 144        wur243  \at1            // AE_SD_NO
 145        addi    \ptr, \ptr, 80
 146        AE_LQ56.I aeq0, \ptr,  0
 147        AE_LQ56.I aeq1, \ptr,  8
 148        AE_LQ56.I aeq2, \ptr,  16
 149        AE_LQ56.I aeq3, \ptr,  24
 150        AE_LP24X2.I aep0, \ptr,  -64
 151        AE_LP24X2.I aep1, \ptr,  -56
 152        AE_LP24X2.I aep2, \ptr,  -48
 153        AE_LP24X2.I aep3, \ptr,  -40
 154        AE_LP24X2.I aep4, \ptr,  -32
 155        AE_LP24X2.I aep5, \ptr,  -24
 156        AE_LP24X2.I aep6, \ptr,  -16
 157        AE_LP24X2.I aep7, \ptr,  -8
 158        .set    .Lxchal_pofs_, .Lxchal_pofs_ + 80
 159        .set    .Lxchal_ofs_, .Lxchal_ofs_ + 112
 160        .endif
 161        .endm   // xchal_cp1_load
 162
 163#define XCHAL_CP1_NUM_ATMPS     1
 164#define XCHAL_SA_NUM_ATMPS      1
 165
 166        /*  Empty macros for unconfigured coprocessors:  */
 167        .macro xchal_cp0_store  p a b c d continue=0 ofs=-1 select=-1 ; .endm
 168        .macro xchal_cp0_load   p a b c d continue=0 ofs=-1 select=-1 ; .endm
 169        .macro xchal_cp2_store  p a b c d continue=0 ofs=-1 select=-1 ; .endm
 170        .macro xchal_cp2_load   p a b c d continue=0 ofs=-1 select=-1 ; .endm
 171        .macro xchal_cp3_store  p a b c d continue=0 ofs=-1 select=-1 ; .endm
 172        .macro xchal_cp3_load   p a b c d continue=0 ofs=-1 select=-1 ; .endm
 173        .macro xchal_cp4_store  p a b c d continue=0 ofs=-1 select=-1 ; .endm
 174        .macro xchal_cp4_load   p a b c d continue=0 ofs=-1 select=-1 ; .endm
 175        .macro xchal_cp5_store  p a b c d continue=0 ofs=-1 select=-1 ; .endm
 176        .macro xchal_cp5_load   p a b c d continue=0 ofs=-1 select=-1 ; .endm
 177        .macro xchal_cp6_store  p a b c d continue=0 ofs=-1 select=-1 ; .endm
 178        .macro xchal_cp6_load   p a b c d continue=0 ofs=-1 select=-1 ; .endm
 179        .macro xchal_cp7_store  p a b c d continue=0 ofs=-1 select=-1 ; .endm
 180        .macro xchal_cp7_load   p a b c d continue=0 ofs=-1 select=-1 ; .endm
 181
 182#endif /*_XTENSA_CORE_TIE_ASM_H*/
 183