uboot/arch/xtensa/include/asm/arch-de212/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 * This file is autogenerated, please do not edit.
   6 *
   7 * Copyright (C) 1999-2015 Cadence Design Systems Inc.
   8 *
   9 * SPDX-License-Identifier:     GPL-2.0+
  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#define XTHAL_SAS_ANYOT 0x0003  /* both of the above */
  20/*  Whether used automatically by compiler:  */
  21#define XTHAL_SAS_NOCC  0x0004  /* not used by compiler w/o special opts/code */
  22#define XTHAL_SAS_CC    0x0008  /* used by compiler without special opts/code */
  23#define XTHAL_SAS_ANYCC 0x000C  /* both of the above */
  24/*  ABI handling across function calls:  */
  25#define XTHAL_SAS_CALR  0x0010  /* caller-saved */
  26#define XTHAL_SAS_CALE  0x0020  /* callee-saved */
  27#define XTHAL_SAS_GLOB  0x0040  /* global across function calls (in thread) */
  28#define XTHAL_SAS_ANYABI        0x0070  /* all of the above three */
  29/*  Misc  */
  30#define XTHAL_SAS_ALL   0xFFFF  /* include all default NCP contents */
  31#define XTHAL_SAS3(optie,ccuse,abi)     ( ((optie) & XTHAL_SAS_ANYOT)  \
  32                                        | ((ccuse) & XTHAL_SAS_ANYCC)  \
  33                                        | ((abi)   & XTHAL_SAS_ANYABI) )
  34
  35
  36    /*
  37      *  Macro to store all non-coprocessor (extra) custom TIE and optional state
  38      *  (not including zero-overhead loop registers).
  39      *  Required parameters:
  40      *      ptr         Save area pointer address register (clobbered)
  41      *                  (register must contain a 4 byte aligned address).
  42      *      at1..at4    Four temporary address registers (first XCHAL_NCP_NUM_ATMPS
  43      *                  registers are clobbered, the remaining are unused).
  44      *  Optional parameters:
  45      *      continue    If macro invoked as part of a larger store sequence, set to 1
  46      *                  if this is not the first in the sequence.  Defaults to 0.
  47      *      ofs         Offset from start of larger sequence (from value of first ptr
  48      *                  in sequence) at which to store.  Defaults to next available space
  49      *                  (or 0 if <continue> is 0).
  50      *      select      Select what category(ies) of registers to store, as a bitmask
  51      *                  (see XTHAL_SAS_xxx constants).  Defaults to all registers.
  52      *      alloc       Select what category(ies) of registers to allocate; if any
  53      *                  category is selected here that is not in <select>, space for
  54      *                  the corresponding registers is skipped without doing any store.
  55      */
  56    .macro xchal_ncp_store  ptr at1 at2 at3 at4  continue=0 ofs=-1 select=XTHAL_SAS_ALL alloc=0
  57        xchal_sa_start  \continue, \ofs
  58        // Optional caller-saved registers used by default by the compiler:
  59        .ifeq (XTHAL_SAS_OPT | XTHAL_SAS_CC | XTHAL_SAS_CALR) & ~(\select)
  60        xchal_sa_align  \ptr, 0, 1016, 4, 4
  61        rsr.ACCLO       \at1            // MAC16 option
  62        s32i    \at1, \ptr, .Lxchal_ofs_+0
  63        rsr.ACCHI       \at1            // MAC16 option
  64        s32i    \at1, \ptr, .Lxchal_ofs_+4
  65        .set    .Lxchal_ofs_, .Lxchal_ofs_ + 8
  66        .elseif ((XTHAL_SAS_OPT | XTHAL_SAS_CC | XTHAL_SAS_CALR) & ~(\alloc)) == 0
  67        xchal_sa_align  \ptr, 0, 1016, 4, 4
  68        .set    .Lxchal_ofs_, .Lxchal_ofs_ + 8
  69        .endif
  70        // Optional caller-saved registers not used by default by the compiler:
  71        .ifeq (XTHAL_SAS_OPT | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~(\select)
  72        xchal_sa_align  \ptr, 0, 1004, 4, 4
  73        rsr.SCOMPARE1   \at1            // conditional store option
  74        s32i    \at1, \ptr, .Lxchal_ofs_+0
  75        rsr.M0  \at1            // MAC16 option
  76        s32i    \at1, \ptr, .Lxchal_ofs_+4
  77        rsr.M1  \at1            // MAC16 option
  78        s32i    \at1, \ptr, .Lxchal_ofs_+8
  79        rsr.M2  \at1            // MAC16 option
  80        s32i    \at1, \ptr, .Lxchal_ofs_+12
  81        rsr.M3  \at1            // MAC16 option
  82        s32i    \at1, \ptr, .Lxchal_ofs_+16
  83        .set    .Lxchal_ofs_, .Lxchal_ofs_ + 20
  84        .elseif ((XTHAL_SAS_OPT | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~(\alloc)) == 0
  85        xchal_sa_align  \ptr, 0, 1004, 4, 4
  86        .set    .Lxchal_ofs_, .Lxchal_ofs_ + 20
  87        .endif
  88    .endm       // xchal_ncp_store
  89
  90    /*
  91      *  Macro to load all non-coprocessor (extra) custom TIE and optional state
  92      *  (not including zero-overhead loop registers).
  93      *  Required parameters:
  94      *      ptr         Save area pointer address register (clobbered)
  95      *                  (register must contain a 4 byte aligned address).
  96      *      at1..at4    Four temporary address registers (first XCHAL_NCP_NUM_ATMPS
  97      *                  registers are clobbered, the remaining are unused).
  98      *  Optional parameters:
  99      *      continue    If macro invoked as part of a larger load sequence, set to 1
 100      *                  if this is not the first in the sequence.  Defaults to 0.
 101      *      ofs         Offset from start of larger sequence (from value of first ptr
 102      *                  in sequence) at which to load.  Defaults to next available space
 103      *                  (or 0 if <continue> is 0).
 104      *      select      Select what category(ies) of registers to load, as a bitmask
 105      *                  (see XTHAL_SAS_xxx constants).  Defaults to all registers.
 106      *      alloc       Select what category(ies) of registers to allocate; if any
 107      *                  category is selected here that is not in <select>, space for
 108      *                  the corresponding registers is skipped without doing any load.
 109      */
 110    .macro xchal_ncp_load  ptr at1 at2 at3 at4  continue=0 ofs=-1 select=XTHAL_SAS_ALL alloc=0
 111        xchal_sa_start  \continue, \ofs
 112        // Optional caller-saved registers used by default by the compiler:
 113        .ifeq (XTHAL_SAS_OPT | XTHAL_SAS_CC | XTHAL_SAS_CALR) & ~(\select)
 114        xchal_sa_align  \ptr, 0, 1016, 4, 4
 115        l32i    \at1, \ptr, .Lxchal_ofs_+0
 116        wsr.ACCLO       \at1            // MAC16 option
 117        l32i    \at1, \ptr, .Lxchal_ofs_+4
 118        wsr.ACCHI       \at1            // MAC16 option
 119        .set    .Lxchal_ofs_, .Lxchal_ofs_ + 8
 120        .elseif ((XTHAL_SAS_OPT | XTHAL_SAS_CC | XTHAL_SAS_CALR) & ~(\alloc)) == 0
 121        xchal_sa_align  \ptr, 0, 1016, 4, 4
 122        .set    .Lxchal_ofs_, .Lxchal_ofs_ + 8
 123        .endif
 124        // Optional caller-saved registers not used by default by the compiler:
 125        .ifeq (XTHAL_SAS_OPT | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~(\select)
 126        xchal_sa_align  \ptr, 0, 1004, 4, 4
 127        l32i    \at1, \ptr, .Lxchal_ofs_+0
 128        wsr.SCOMPARE1   \at1            // conditional store option
 129        l32i    \at1, \ptr, .Lxchal_ofs_+4
 130        wsr.M0  \at1            // MAC16 option
 131        l32i    \at1, \ptr, .Lxchal_ofs_+8
 132        wsr.M1  \at1            // MAC16 option
 133        l32i    \at1, \ptr, .Lxchal_ofs_+12
 134        wsr.M2  \at1            // MAC16 option
 135        l32i    \at1, \ptr, .Lxchal_ofs_+16
 136        wsr.M3  \at1            // MAC16 option
 137        .set    .Lxchal_ofs_, .Lxchal_ofs_ + 20
 138        .elseif ((XTHAL_SAS_OPT | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~(\alloc)) == 0
 139        xchal_sa_align  \ptr, 0, 1004, 4, 4
 140        .set    .Lxchal_ofs_, .Lxchal_ofs_ + 20
 141        .endif
 142    .endm       // xchal_ncp_load
 143
 144
 145#define XCHAL_NCP_NUM_ATMPS     1
 146
 147#define XCHAL_SA_NUM_ATMPS      1
 148
 149#endif /*_XTENSA_CORE_TIE_ASM_H*/
 150
 151