The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/openzfs/module/zfs/vdev_raidz_math_aarch64_neonx2.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * CDDL HEADER START
    3  *
    4  * The contents of this file are subject to the terms of the
    5  * Common Development and Distribution License (the "License").
    6  * You may not use this file except in compliance with the License.
    7  *
    8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
    9  * or https://opensource.org/licenses/CDDL-1.0.
   10  * See the License for the specific language governing permissions
   11  * and limitations under the License.
   12  *
   13  * When distributing Covered Code, include this CDDL HEADER in each
   14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
   15  * If applicable, add the following below this CDDL HEADER, with the
   16  * fields enclosed by brackets "[]" replaced with your own identifying
   17  * information: Portions Copyright [yyyy] [name of copyright owner]
   18  *
   19  * CDDL HEADER END
   20  */
   21 /*
   22  * Copyright (C) 2016 Romain Dolbeau. All rights reserved.
   23  */
   24 
   25 #include <sys/isa_defs.h>
   26 
   27 #if defined(__aarch64__)
   28 
   29 #include "vdev_raidz_math_aarch64_neon_common.h"
   30 
   31 #define SYN_STRIDE              4
   32 
   33 #define ZERO_STRIDE             8
   34 #define ZERO_DEFINE()   \
   35         GEN_X_DEFINE_0_3()      \
   36         GEN_X_DEFINE_4_5()      \
   37         GEN_X_DEFINE_6_7()
   38 #define ZERO_D                  0, 1, 2, 3, 4, 5, 6, 7
   39 
   40 #define COPY_STRIDE             8
   41 #define COPY_DEFINE()   \
   42         GEN_X_DEFINE_0_3()      \
   43         GEN_X_DEFINE_4_5()      \
   44         GEN_X_DEFINE_6_7()
   45 #define COPY_D                  0, 1, 2, 3, 4, 5, 6, 7
   46 
   47 #define ADD_STRIDE              8
   48 #define ADD_DEFINE()    \
   49         GEN_X_DEFINE_0_3()      \
   50         GEN_X_DEFINE_4_5()      \
   51         GEN_X_DEFINE_6_7()
   52 #define ADD_D                   0, 1, 2, 3, 4, 5, 6, 7
   53 
   54 #define MUL_STRIDE              4
   55 #define MUL_DEFINE()    \
   56         GEN_X_DEFINE_0_3()  \
   57         GEN_X_DEFINE_33_36()
   58 #define MUL_D                   0, 1, 2, 3
   59 
   60 #define GEN_P_DEFINE() \
   61         GEN_X_DEFINE_0_3() \
   62         GEN_X_DEFINE_33_36()
   63 #define GEN_P_STRIDE            4
   64 #define GEN_P_P                 0, 1, 2, 3
   65 
   66 #define GEN_PQ_DEFINE() \
   67         GEN_X_DEFINE_0_3()      \
   68         GEN_X_DEFINE_4_5()      \
   69         GEN_X_DEFINE_6_7()      \
   70         GEN_X_DEFINE_16()       \
   71         GEN_X_DEFINE_17()       \
   72         GEN_X_DEFINE_33_36()
   73 #define GEN_PQ_STRIDE           4
   74 #define GEN_PQ_D                0, 1, 2, 3
   75 #define GEN_PQ_C                4, 5, 6, 7
   76 
   77 #define GEN_PQR_DEFINE() \
   78         GEN_X_DEFINE_0_3()      \
   79         GEN_X_DEFINE_4_5()      \
   80         GEN_X_DEFINE_6_7()      \
   81         GEN_X_DEFINE_16()       \
   82         GEN_X_DEFINE_17()       \
   83         GEN_X_DEFINE_33_36()
   84 #define GEN_PQR_STRIDE          4
   85 #define GEN_PQR_D               0, 1, 2, 3
   86 #define GEN_PQR_C               4, 5, 6, 7
   87 
   88 #define SYN_Q_DEFINE() \
   89         GEN_X_DEFINE_0_3()      \
   90         GEN_X_DEFINE_4_5()      \
   91         GEN_X_DEFINE_6_7()      \
   92         GEN_X_DEFINE_16()       \
   93         GEN_X_DEFINE_17()       \
   94         GEN_X_DEFINE_33_36()
   95 #define SYN_Q_STRIDE            4
   96 #define SYN_Q_D                 0, 1, 2, 3
   97 #define SYN_Q_X                 4, 5, 6, 7
   98 
   99 #define SYN_R_DEFINE() \
  100         GEN_X_DEFINE_0_3()      \
  101         GEN_X_DEFINE_4_5()      \
  102         GEN_X_DEFINE_6_7()      \
  103         GEN_X_DEFINE_16()       \
  104         GEN_X_DEFINE_17()       \
  105         GEN_X_DEFINE_33_36()
  106 #define SYN_R_STRIDE            4
  107 #define SYN_R_D                 0, 1, 2, 3
  108 #define SYN_R_X                 4, 5, 6, 7
  109 
  110 #define SYN_PQ_DEFINE() \
  111         GEN_X_DEFINE_0_3()      \
  112         GEN_X_DEFINE_4_5()      \
  113         GEN_X_DEFINE_6_7()      \
  114         GEN_X_DEFINE_16()       \
  115         GEN_X_DEFINE_17()       \
  116         GEN_X_DEFINE_33_36()
  117 #define SYN_PQ_STRIDE           4
  118 #define SYN_PQ_D                0, 1, 2, 3
  119 #define SYN_PQ_X                4, 5, 6, 7
  120 
  121 #define REC_PQ_DEFINE() \
  122         GEN_X_DEFINE_0_3()      \
  123         GEN_X_DEFINE_4_5()      \
  124         GEN_X_DEFINE_6_7()      \
  125         GEN_X_DEFINE_8_9()      \
  126         GEN_X_DEFINE_22_23()    \
  127         GEN_X_DEFINE_33_36()
  128 #define REC_PQ_STRIDE           4
  129 #define REC_PQ_X                0, 1, 2, 3
  130 #define REC_PQ_Y                4, 5, 6, 7
  131 #define REC_PQ_T                8, 9, 22, 23
  132 
  133 #define SYN_PR_DEFINE() \
  134         GEN_X_DEFINE_0_3()      \
  135         GEN_X_DEFINE_4_5()      \
  136         GEN_X_DEFINE_6_7()      \
  137         GEN_X_DEFINE_16()       \
  138         GEN_X_DEFINE_17()       \
  139         GEN_X_DEFINE_33_36()
  140 #define SYN_PR_STRIDE           4
  141 #define SYN_PR_D                0, 1, 2, 3
  142 #define SYN_PR_X                4, 5, 6, 7
  143 
  144 #define REC_PR_DEFINE() \
  145         GEN_X_DEFINE_0_3()      \
  146         GEN_X_DEFINE_4_5()      \
  147         GEN_X_DEFINE_6_7()      \
  148         GEN_X_DEFINE_8_9()      \
  149         GEN_X_DEFINE_22_23()    \
  150         GEN_X_DEFINE_33_36()
  151 #define REC_PR_STRIDE           4
  152 #define REC_PR_X                0, 1, 2, 3
  153 #define REC_PR_Y                4, 5, 6, 7
  154 #define REC_PR_T                8, 9, 22, 23
  155 
  156 #define SYN_QR_DEFINE() \
  157         GEN_X_DEFINE_0_3()      \
  158         GEN_X_DEFINE_4_5()      \
  159         GEN_X_DEFINE_6_7()      \
  160         GEN_X_DEFINE_16()       \
  161         GEN_X_DEFINE_17()       \
  162         GEN_X_DEFINE_33_36()
  163 #define SYN_QR_STRIDE           4
  164 #define SYN_QR_D                0, 1, 2, 3
  165 #define SYN_QR_X                4, 5, 6, 7
  166 
  167 #define REC_QR_DEFINE() \
  168         GEN_X_DEFINE_0_3()      \
  169         GEN_X_DEFINE_4_5()      \
  170         GEN_X_DEFINE_6_7()      \
  171         GEN_X_DEFINE_8_9()      \
  172         GEN_X_DEFINE_22_23()    \
  173         GEN_X_DEFINE_33_36()
  174 #define REC_QR_STRIDE           4
  175 #define REC_QR_X                0, 1, 2, 3
  176 #define REC_QR_Y                4, 5, 6, 7
  177 #define REC_QR_T                8, 9, 22, 23
  178 
  179 #define SYN_PQR_DEFINE() \
  180         GEN_X_DEFINE_0_3()      \
  181         GEN_X_DEFINE_4_5()      \
  182         GEN_X_DEFINE_6_7()      \
  183         GEN_X_DEFINE_16()       \
  184         GEN_X_DEFINE_17()       \
  185         GEN_X_DEFINE_33_36()
  186 #define SYN_PQR_STRIDE           4
  187 #define SYN_PQR_D                0, 1, 2, 3
  188 #define SYN_PQR_X                4, 5, 6, 7
  189 
  190 #define REC_PQR_DEFINE() \
  191         GEN_X_DEFINE_0_3()      \
  192         GEN_X_DEFINE_4_5()      \
  193         GEN_X_DEFINE_6_7()      \
  194         GEN_X_DEFINE_8_9()      \
  195         GEN_X_DEFINE_31()       \
  196         GEN_X_DEFINE_32()       \
  197         GEN_X_DEFINE_33_36()
  198 #define REC_PQR_STRIDE          2
  199 #define REC_PQR_X               0, 1
  200 #define REC_PQR_Y               2, 3
  201 #define REC_PQR_Z               4, 5
  202 #define REC_PQR_XS              6, 7
  203 #define REC_PQR_YS              8, 9
  204 
  205 #include <sys/vdev_raidz_impl.h>
  206 #include "vdev_raidz_math_impl.h"
  207 
  208 DEFINE_GEN_METHODS(aarch64_neonx2);
  209 /*
  210  * If compiled with -O0, gcc doesn't do any stack frame coalescing
  211  * and -Wframe-larger-than=1024 is triggered in debug mode.
  212  */
  213 #if defined(__GNUC__) && !defined(__clang__)
  214 #pragma GCC diagnostic ignored "-Wframe-larger-than="
  215 #endif
  216 DEFINE_REC_METHODS(aarch64_neonx2);
  217 #if defined(__GNUC__) && !defined(__clang__)
  218 #pragma GCC diagnostic pop
  219 #endif
  220 
  221 static boolean_t
  222 raidz_will_aarch64_neonx2_work(void)
  223 {
  224         return (kfpu_allowed());
  225 }
  226 
  227 const raidz_impl_ops_t vdev_raidz_aarch64_neonx2_impl = {
  228         .init = NULL,
  229         .fini = NULL,
  230         .gen = RAIDZ_GEN_METHODS(aarch64_neonx2),
  231         .rec = RAIDZ_REC_METHODS(aarch64_neonx2),
  232         .is_supported = &raidz_will_aarch64_neonx2_work,
  233         .name = "aarch64_neonx2"
  234 };
  235 
  236 #endif /* defined(__aarch64__) */

Cache object: 72f29e7b03c10e6bcf25952b0d7c6a8b


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.