1*c0909341SAndroid Build Coastguard Worker/* 2*c0909341SAndroid Build Coastguard Worker * Copyright © 2018, VideoLAN and dav1d authors 3*c0909341SAndroid Build Coastguard Worker * Copyright © 2023, Nathan Egge 4*c0909341SAndroid Build Coastguard Worker * All rights reserved. 5*c0909341SAndroid Build Coastguard Worker * 6*c0909341SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 7*c0909341SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions are met: 8*c0909341SAndroid Build Coastguard Worker * 9*c0909341SAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright notice, this 10*c0909341SAndroid Build Coastguard Worker * list of conditions and the following disclaimer. 11*c0909341SAndroid Build Coastguard Worker * 12*c0909341SAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright notice, 13*c0909341SAndroid Build Coastguard Worker * this list of conditions and the following disclaimer in the documentation 14*c0909341SAndroid Build Coastguard Worker * and/or other materials provided with the distribution. 15*c0909341SAndroid Build Coastguard Worker * 16*c0909341SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 17*c0909341SAndroid Build Coastguard Worker * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18*c0909341SAndroid Build Coastguard Worker * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19*c0909341SAndroid Build Coastguard Worker * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 20*c0909341SAndroid Build Coastguard Worker * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 21*c0909341SAndroid Build Coastguard Worker * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 22*c0909341SAndroid Build Coastguard Worker * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 23*c0909341SAndroid Build Coastguard Worker * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24*c0909341SAndroid Build Coastguard Worker * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 25*c0909341SAndroid Build Coastguard Worker * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26*c0909341SAndroid Build Coastguard Worker */ 27*c0909341SAndroid Build Coastguard Worker 28*c0909341SAndroid Build Coastguard Worker#ifndef DAV1D_SRC_RISCV_ASM_S 29*c0909341SAndroid Build Coastguard Worker#define DAV1D_SRC_RISCV_ASM_S 30*c0909341SAndroid Build Coastguard Worker 31*c0909341SAndroid Build Coastguard Worker#include "config.h" 32*c0909341SAndroid Build Coastguard Worker 33*c0909341SAndroid Build Coastguard Worker#if !defined(PIC) 34*c0909341SAndroid Build Coastguard Worker#if defined(__PIC__) 35*c0909341SAndroid Build Coastguard Worker#define PIC __PIC__ 36*c0909341SAndroid Build Coastguard Worker#elif defined(__pic__) 37*c0909341SAndroid Build Coastguard Worker#define PIC __pic__ 38*c0909341SAndroid Build Coastguard Worker#endif 39*c0909341SAndroid Build Coastguard Worker#endif 40*c0909341SAndroid Build Coastguard Worker 41*c0909341SAndroid Build Coastguard Worker#ifndef PRIVATE_PREFIX 42*c0909341SAndroid Build Coastguard Worker#define PRIVATE_PREFIX dav1d_ 43*c0909341SAndroid Build Coastguard Worker#endif 44*c0909341SAndroid Build Coastguard Worker 45*c0909341SAndroid Build Coastguard Worker#define PASTE(a,b) a ## b 46*c0909341SAndroid Build Coastguard Worker#define CONCAT(a,b) PASTE(a,b) 47*c0909341SAndroid Build Coastguard Worker 48*c0909341SAndroid Build Coastguard Worker#ifdef PREFIX 49*c0909341SAndroid Build Coastguard Worker#define EXTERN CONCAT(_,PRIVATE_PREFIX) 50*c0909341SAndroid Build Coastguard Worker#else 51*c0909341SAndroid Build Coastguard Worker#define EXTERN PRIVATE_PREFIX 52*c0909341SAndroid Build Coastguard Worker#endif 53*c0909341SAndroid Build Coastguard Worker 54*c0909341SAndroid Build Coastguard Worker.macro arch ext:req, more:vararg 55*c0909341SAndroid Build Coastguard Worker .option arch, +\ext 56*c0909341SAndroid Build Coastguard Worker .ifnb \more 57*c0909341SAndroid Build Coastguard Worker arch \more 58*c0909341SAndroid Build Coastguard Worker .endif 59*c0909341SAndroid Build Coastguard Worker.endm 60*c0909341SAndroid Build Coastguard Worker 61*c0909341SAndroid Build Coastguard Worker.macro function name, export=0, ext= 62*c0909341SAndroid Build Coastguard Worker .macro endfunc 63*c0909341SAndroid Build Coastguard Worker#ifdef __ELF__ 64*c0909341SAndroid Build Coastguard Worker .size \name, . - \name 65*c0909341SAndroid Build Coastguard Worker#endif 66*c0909341SAndroid Build Coastguard Worker .option pop 67*c0909341SAndroid Build Coastguard Worker .purgem endfunc 68*c0909341SAndroid Build Coastguard Worker .endm 69*c0909341SAndroid Build Coastguard Worker .text 70*c0909341SAndroid Build Coastguard Worker .option push 71*c0909341SAndroid Build Coastguard Worker .ifnb \ext 72*c0909341SAndroid Build Coastguard Worker arch \ext 73*c0909341SAndroid Build Coastguard Worker .endif 74*c0909341SAndroid Build Coastguard Worker .if \export 75*c0909341SAndroid Build Coastguard Worker .global EXTERN\name 76*c0909341SAndroid Build Coastguard Worker#ifdef __ELF__ 77*c0909341SAndroid Build Coastguard Worker .type EXTERN\name, %function 78*c0909341SAndroid Build Coastguard Worker .hidden EXTERN\name 79*c0909341SAndroid Build Coastguard Worker#elif defined(__MACH__) 80*c0909341SAndroid Build Coastguard Worker .private_extern EXTERN\name 81*c0909341SAndroid Build Coastguard Worker#endif 82*c0909341SAndroid Build Coastguard WorkerEXTERN\name: 83*c0909341SAndroid Build Coastguard Worker .else 84*c0909341SAndroid Build Coastguard Worker#ifdef __ELF__ 85*c0909341SAndroid Build Coastguard Worker .type \name, %function 86*c0909341SAndroid Build Coastguard Worker#endif 87*c0909341SAndroid Build Coastguard Worker .endif 88*c0909341SAndroid Build Coastguard Worker\name: 89*c0909341SAndroid Build Coastguard Worker.endm 90*c0909341SAndroid Build Coastguard Worker 91*c0909341SAndroid Build Coastguard Worker.macro const name, export=0, align=2 92*c0909341SAndroid Build Coastguard Worker .macro endconst 93*c0909341SAndroid Build Coastguard Worker#ifdef __ELF__ 94*c0909341SAndroid Build Coastguard Worker .size \name, . - \name 95*c0909341SAndroid Build Coastguard Worker#endif 96*c0909341SAndroid Build Coastguard Worker .purgem endconst 97*c0909341SAndroid Build Coastguard Worker .endm 98*c0909341SAndroid Build Coastguard Worker#if defined(_WIN32) 99*c0909341SAndroid Build Coastguard Worker .section .rdata 100*c0909341SAndroid Build Coastguard Worker#elif !defined(__MACH__) 101*c0909341SAndroid Build Coastguard Worker .section .rodata 102*c0909341SAndroid Build Coastguard Worker#else 103*c0909341SAndroid Build Coastguard Worker .const_data 104*c0909341SAndroid Build Coastguard Worker#endif 105*c0909341SAndroid Build Coastguard Worker .align \align 106*c0909341SAndroid Build Coastguard Worker .if \export 107*c0909341SAndroid Build Coastguard Worker .global EXTERN\name 108*c0909341SAndroid Build Coastguard Worker#ifdef __ELF__ 109*c0909341SAndroid Build Coastguard Worker .hidden EXTERN\name 110*c0909341SAndroid Build Coastguard Worker#elif defined(__MACH__) 111*c0909341SAndroid Build Coastguard Worker .private_extern EXTERN\name 112*c0909341SAndroid Build Coastguard Worker#endif 113*c0909341SAndroid Build Coastguard WorkerEXTERN\name: 114*c0909341SAndroid Build Coastguard Worker .endif 115*c0909341SAndroid Build Coastguard Worker\name: 116*c0909341SAndroid Build Coastguard Worker.endm 117*c0909341SAndroid Build Coastguard Worker 118*c0909341SAndroid Build Coastguard Worker.macro thread_local name, align=3, quads=1 119*c0909341SAndroid Build Coastguard Worker .macro end_thread_local 120*c0909341SAndroid Build Coastguard Worker .size \name, . - \name 121*c0909341SAndroid Build Coastguard Worker .purgem end_thread_local 122*c0909341SAndroid Build Coastguard Worker .endm 123*c0909341SAndroid Build Coastguard Worker .section .tbss, "waT" 124*c0909341SAndroid Build Coastguard Worker .align \align 125*c0909341SAndroid Build Coastguard Worker .hidden \name 126*c0909341SAndroid Build Coastguard Worker\name: 127*c0909341SAndroid Build Coastguard Worker .rept \quads 128*c0909341SAndroid Build Coastguard Worker .quad 0 129*c0909341SAndroid Build Coastguard Worker .endr 130*c0909341SAndroid Build Coastguard Worker end_thread_local 131*c0909341SAndroid Build Coastguard Worker.endm 132*c0909341SAndroid Build Coastguard Worker 133*c0909341SAndroid Build Coastguard Worker#define L(x) .L ## x 134*c0909341SAndroid Build Coastguard Worker 135*c0909341SAndroid Build Coastguard Worker#define MA (1 << 7) 136*c0909341SAndroid Build Coastguard Worker#define TA (1 << 6) 137*c0909341SAndroid Build Coastguard Worker#define E8 (0 << 3) 138*c0909341SAndroid Build Coastguard Worker#define E16 (1 << 3) 139*c0909341SAndroid Build Coastguard Worker#define E32 (2 << 3) 140*c0909341SAndroid Build Coastguard Worker#define E64 (3 << 3) 141*c0909341SAndroid Build Coastguard Worker#define M1 0 142*c0909341SAndroid Build Coastguard Worker#define M2 1 143*c0909341SAndroid Build Coastguard Worker#define M4 2 144*c0909341SAndroid Build Coastguard Worker#define M8 3 145*c0909341SAndroid Build Coastguard Worker#define MF2 7 146*c0909341SAndroid Build Coastguard Worker#define MF4 6 147*c0909341SAndroid Build Coastguard Worker#define MF8 5 148*c0909341SAndroid Build Coastguard Worker 149*c0909341SAndroid Build Coastguard Worker#endif /* DAV1D_SRC_RISCV_ASM_S */ 150