Path: blob/master/arch/xtensa/variants/s6000/include/variant/tie-asm.h
10821 views
/*1* This header file contains assembly-language definitions (assembly2* macros, etc.) for this specific Xtensa processor's TIE extensions3* and options. It is customized to this Xtensa processor configuration.4*5* This file is subject to the terms and conditions of the GNU General Public6* License. See the file "COPYING" in the main directory of this archive7* for more details.8*9* Copyright (C) 1999-2008 Tensilica Inc.10*/1112#ifndef _XTENSA_CORE_TIE_ASM_H13#define _XTENSA_CORE_TIE_ASM_H1415/* 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 */28293031/* Macro to save all non-coprocessor (extra) custom TIE and optional state32* (not including zero-overhead loop registers).33* Save area ptr (clobbered): ptr (16 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_ALL37xchal_sa_start \continue, \ofs38.ifeq (XTHAL_SAS_OPT | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~\select39xchal_sa_align \ptr, 0, 1024-4, 4, 440rsr \at1, BR // boolean option41s32i \at1, \ptr, .Lxchal_ofs_ + 042.set .Lxchal_ofs_, .Lxchal_ofs_ + 443.endif44.endm // xchal_ncp_store4546/* Macro to save all non-coprocessor (extra) custom TIE and optional state47* (not including zero-overhead loop registers).48* Save area ptr (clobbered): ptr (16 byte aligned)49* Scratch regs (clobbered): at1..at4 (only first XCHAL_NCP_NUM_ATMPS needed)50*/51.macro xchal_ncp_load ptr at1 at2 at3 at4 continue=0 ofs=-1 select=XTHAL_SAS_ALL52xchal_sa_start \continue, \ofs53.ifeq (XTHAL_SAS_OPT | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~\select54xchal_sa_align \ptr, 0, 1024-4, 4, 455l32i \at1, \ptr, .Lxchal_ofs_ + 056wsr \at1, BR // boolean option57.set .Lxchal_ofs_, .Lxchal_ofs_ + 458.endif59.endm // xchal_ncp_load60616263#define XCHAL_NCP_NUM_ATMPS 164656667/* Macro to save the state of TIE coprocessor FPU.68* Save area ptr (clobbered): ptr (16 byte aligned)69* Scratch regs (clobbered): at1..at4 (only first XCHAL_CP0_NUM_ATMPS needed)70*/71#define xchal_cp_FPU_store xchal_cp0_store72/* #define xchal_cp_FPU_store_a2 xchal_cp0_store a2 a3 a4 a5 a6 */73.macro xchal_cp0_store ptr at1 at2 at3 at4 continue=0 ofs=-1 select=XTHAL_SAS_ALL74xchal_sa_start \continue, \ofs75.ifeq (XTHAL_SAS_TIE | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~\select76xchal_sa_align \ptr, 0, 0, 1, 1677rur232 \at1 // FCR78s32i \at1, \ptr, 079rur233 \at1 // FSR80s32i \at1, \ptr, 481SSI f0, \ptr, 882SSI f1, \ptr, 1283SSI f2, \ptr, 1684SSI f3, \ptr, 2085SSI f4, \ptr, 2486SSI f5, \ptr, 2887SSI f6, \ptr, 3288SSI f7, \ptr, 3689SSI f8, \ptr, 4090SSI f9, \ptr, 4491SSI f10, \ptr, 4892SSI f11, \ptr, 5293SSI f12, \ptr, 5694SSI f13, \ptr, 6095SSI f14, \ptr, 6496SSI f15, \ptr, 6897.set .Lxchal_ofs_, .Lxchal_ofs_ + 7298.endif99.endm // xchal_cp0_store100101/* Macro to restore the state of TIE coprocessor FPU.102* Save area ptr (clobbered): ptr (16 byte aligned)103* Scratch regs (clobbered): at1..at4 (only first XCHAL_CP0_NUM_ATMPS needed)104*/105#define xchal_cp_FPU_load xchal_cp0_load106/* #define xchal_cp_FPU_load_a2 xchal_cp0_load a2 a3 a4 a5 a6 */107.macro xchal_cp0_load ptr at1 at2 at3 at4 continue=0 ofs=-1 select=XTHAL_SAS_ALL108xchal_sa_start \continue, \ofs109.ifeq (XTHAL_SAS_TIE | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~\select110xchal_sa_align \ptr, 0, 0, 1, 16111l32i \at1, \ptr, 0112wur232 \at1 // FCR113l32i \at1, \ptr, 4114wur233 \at1 // FSR115LSI f0, \ptr, 8116LSI f1, \ptr, 12117LSI f2, \ptr, 16118LSI f3, \ptr, 20119LSI f4, \ptr, 24120LSI f5, \ptr, 28121LSI f6, \ptr, 32122LSI f7, \ptr, 36123LSI f8, \ptr, 40124LSI f9, \ptr, 44125LSI f10, \ptr, 48126LSI f11, \ptr, 52127LSI f12, \ptr, 56128LSI f13, \ptr, 60129LSI f14, \ptr, 64130LSI f15, \ptr, 68131.set .Lxchal_ofs_, .Lxchal_ofs_ + 72132.endif133.endm // xchal_cp0_load134135#define XCHAL_CP0_NUM_ATMPS 1136137/* Macro to save the state of TIE coprocessor XAD.138* Save area ptr (clobbered): ptr (16 byte aligned)139* Scratch regs (clobbered): at1..at4 (only first XCHAL_CP6_NUM_ATMPS needed)140*/141#define xchal_cp_XAD_store xchal_cp6_store142/* #define xchal_cp_XAD_store_a2 xchal_cp6_store a2 a3 a4 a5 a6 */143.macro xchal_cp6_store ptr at1 at2 at3 at4 continue=0 ofs=-1 select=XTHAL_SAS_ALL144xchal_sa_start \continue, \ofs145.ifeq (XTHAL_SAS_TIE | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~\select146xchal_sa_align \ptr, 0, 0, 1, 16147rur0 \at1 // LDCBHI148s32i \at1, \ptr, 0149rur1 \at1 // LDCBLO150s32i \at1, \ptr, 4151rur2 \at1 // STCBHI152s32i \at1, \ptr, 8153rur3 \at1 // STCBLO154s32i \at1, \ptr, 12155rur8 \at1 // LDBRBASE156s32i \at1, \ptr, 16157rur9 \at1 // LDBROFF158s32i \at1, \ptr, 20159rur10 \at1 // LDBRINC160s32i \at1, \ptr, 24161rur11 \at1 // STBRBASE162s32i \at1, \ptr, 28163rur12 \at1 // STBROFF164s32i \at1, \ptr, 32165rur13 \at1 // STBRINC166s32i \at1, \ptr, 36167rur24 \at1 // SCRATCH0168s32i \at1, \ptr, 40169rur25 \at1 // SCRATCH1170s32i \at1, \ptr, 44171rur26 \at1 // SCRATCH2172s32i \at1, \ptr, 48173rur27 \at1 // SCRATCH3174s32i \at1, \ptr, 52175WRAS128I wra0, \ptr, 64176WRAS128I wra1, \ptr, 80177WRAS128I wra2, \ptr, 96178WRAS128I wra3, \ptr, 112179WRAS128I wra4, \ptr, 128180WRAS128I wra5, \ptr, 144181WRAS128I wra6, \ptr, 160182WRAS128I wra7, \ptr, 176183WRAS128I wra8, \ptr, 192184WRAS128I wra9, \ptr, 208185WRAS128I wra10, \ptr, 224186WRAS128I wra11, \ptr, 240187WRAS128I wra12, \ptr, 256188WRAS128I wra13, \ptr, 272189WRAS128I wra14, \ptr, 288190WRAS128I wra15, \ptr, 304191WRBS128I wrb0, \ptr, 320192WRBS128I wrb1, \ptr, 336193WRBS128I wrb2, \ptr, 352194WRBS128I wrb3, \ptr, 368195WRBS128I wrb4, \ptr, 384196WRBS128I wrb5, \ptr, 400197WRBS128I wrb6, \ptr, 416198WRBS128I wrb7, \ptr, 432199WRBS128I wrb8, \ptr, 448200WRBS128I wrb9, \ptr, 464201WRBS128I wrb10, \ptr, 480202WRBS128I wrb11, \ptr, 496203WRBS128I wrb12, \ptr, 512204WRBS128I wrb13, \ptr, 528205WRBS128I wrb14, \ptr, 544206WRBS128I wrb15, \ptr, 560207.set .Lxchal_ofs_, .Lxchal_ofs_ + 576208.endif209.endm // xchal_cp6_store210211/* Macro to restore the state of TIE coprocessor XAD.212* Save area ptr (clobbered): ptr (16 byte aligned)213* Scratch regs (clobbered): at1..at4 (only first XCHAL_CP6_NUM_ATMPS needed)214*/215#define xchal_cp_XAD_load xchal_cp6_load216/* #define xchal_cp_XAD_load_a2 xchal_cp6_load a2 a3 a4 a5 a6 */217.macro xchal_cp6_load ptr at1 at2 at3 at4 continue=0 ofs=-1 select=XTHAL_SAS_ALL218xchal_sa_start \continue, \ofs219.ifeq (XTHAL_SAS_TIE | XTHAL_SAS_NOCC | XTHAL_SAS_CALR) & ~\select220xchal_sa_align \ptr, 0, 0, 1, 16221l32i \at1, \ptr, 0222wur0 \at1 // LDCBHI223l32i \at1, \ptr, 4224wur1 \at1 // LDCBLO225l32i \at1, \ptr, 8226wur2 \at1 // STCBHI227l32i \at1, \ptr, 12228wur3 \at1 // STCBLO229l32i \at1, \ptr, 16230wur8 \at1 // LDBRBASE231l32i \at1, \ptr, 20232wur9 \at1 // LDBROFF233l32i \at1, \ptr, 24234wur10 \at1 // LDBRINC235l32i \at1, \ptr, 28236wur11 \at1 // STBRBASE237l32i \at1, \ptr, 32238wur12 \at1 // STBROFF239l32i \at1, \ptr, 36240wur13 \at1 // STBRINC241l32i \at1, \ptr, 40242wur24 \at1 // SCRATCH0243l32i \at1, \ptr, 44244wur25 \at1 // SCRATCH1245l32i \at1, \ptr, 48246wur26 \at1 // SCRATCH2247l32i \at1, \ptr, 52248wur27 \at1 // SCRATCH3249WRBL128I wrb0, \ptr, 320250WRBL128I wrb1, \ptr, 336251WRBL128I wrb2, \ptr, 352252WRBL128I wrb3, \ptr, 368253WRBL128I wrb4, \ptr, 384254WRBL128I wrb5, \ptr, 400255WRBL128I wrb6, \ptr, 416256WRBL128I wrb7, \ptr, 432257WRBL128I wrb8, \ptr, 448258WRBL128I wrb9, \ptr, 464259WRBL128I wrb10, \ptr, 480260WRBL128I wrb11, \ptr, 496261WRBL128I wrb12, \ptr, 512262WRBL128I wrb13, \ptr, 528263WRBL128I wrb14, \ptr, 544264WRBL128I wrb15, \ptr, 560265WRAL128I wra0, \ptr, 64266WRAL128I wra1, \ptr, 80267WRAL128I wra2, \ptr, 96268WRAL128I wra3, \ptr, 112269WRAL128I wra4, \ptr, 128270WRAL128I wra5, \ptr, 144271WRAL128I wra6, \ptr, 160272WRAL128I wra7, \ptr, 176273WRAL128I wra8, \ptr, 192274WRAL128I wra9, \ptr, 208275WRAL128I wra10, \ptr, 224276WRAL128I wra11, \ptr, 240277WRAL128I wra12, \ptr, 256278WRAL128I wra13, \ptr, 272279WRAL128I wra14, \ptr, 288280WRAL128I wra15, \ptr, 304281.set .Lxchal_ofs_, .Lxchal_ofs_ + 576282.endif283.endm // xchal_cp6_load284285#define XCHAL_CP6_NUM_ATMPS 1286#define XCHAL_SA_NUM_ATMPS 1287288/* Empty macros for unconfigured coprocessors: */289.macro xchal_cp1_store p a b c d continue=0 ofs=-1 select=-1 ; .endm290.macro xchal_cp1_load p a b c d continue=0 ofs=-1 select=-1 ; .endm291.macro xchal_cp2_store p a b c d continue=0 ofs=-1 select=-1 ; .endm292.macro xchal_cp2_load p a b c d continue=0 ofs=-1 select=-1 ; .endm293.macro xchal_cp3_store p a b c d continue=0 ofs=-1 select=-1 ; .endm294.macro xchal_cp3_load p a b c d continue=0 ofs=-1 select=-1 ; .endm295.macro xchal_cp4_store p a b c d continue=0 ofs=-1 select=-1 ; .endm296.macro xchal_cp4_load p a b c d continue=0 ofs=-1 select=-1 ; .endm297.macro xchal_cp5_store p a b c d continue=0 ofs=-1 select=-1 ; .endm298.macro xchal_cp5_load p a b c d continue=0 ofs=-1 select=-1 ; .endm299.macro xchal_cp7_store p a b c d continue=0 ofs=-1 select=-1 ; .endm300.macro xchal_cp7_load p a b c d continue=0 ofs=-1 select=-1 ; .endm301302#endif /*_XTENSA_CORE_TIE_ASM_H*/303304305306