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