1*4bdc9457SAndroid Build Coastguard Worker // Copyright 2022 Google LLC
2*4bdc9457SAndroid Build Coastguard Worker //
3*4bdc9457SAndroid Build Coastguard Worker // This source code is licensed under the BSD-style license found in the
4*4bdc9457SAndroid Build Coastguard Worker // LICENSE file in the root directory of this source tree.
5*4bdc9457SAndroid Build Coastguard Worker
6*4bdc9457SAndroid Build Coastguard Worker #pragma once
7*4bdc9457SAndroid Build Coastguard Worker
8*4bdc9457SAndroid Build Coastguard Worker #include <stddef.h>
9*4bdc9457SAndroid Build Coastguard Worker #include <stdint.h>
10*4bdc9457SAndroid Build Coastguard Worker
11*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/common.h>
12*4bdc9457SAndroid Build Coastguard Worker
13*4bdc9457SAndroid Build Coastguard Worker
unaligned_load_f32(const void * address)14*4bdc9457SAndroid Build Coastguard Worker XNN_INLINE static float unaligned_load_f32(const void* address) {
15*4bdc9457SAndroid Build Coastguard Worker typedef XNN_UNALIGNED float xnn_unaligned_float;
16*4bdc9457SAndroid Build Coastguard Worker return *((const xnn_unaligned_float*) address);
17*4bdc9457SAndroid Build Coastguard Worker }
18*4bdc9457SAndroid Build Coastguard Worker
unaligned_load_s32(const void * address)19*4bdc9457SAndroid Build Coastguard Worker XNN_INLINE static int32_t unaligned_load_s32(const void* address) {
20*4bdc9457SAndroid Build Coastguard Worker typedef XNN_UNALIGNED int32_t xnn_unaligned_int32_t;
21*4bdc9457SAndroid Build Coastguard Worker return *((const xnn_unaligned_int32_t*) address);
22*4bdc9457SAndroid Build Coastguard Worker }
23*4bdc9457SAndroid Build Coastguard Worker
unaligned_load_u32(const void * address)24*4bdc9457SAndroid Build Coastguard Worker XNN_INLINE static uint32_t unaligned_load_u32(const void* address) {
25*4bdc9457SAndroid Build Coastguard Worker typedef XNN_UNALIGNED uint32_t xnn_unaligned_uint32_t;
26*4bdc9457SAndroid Build Coastguard Worker return *((const xnn_unaligned_uint32_t*) address);
27*4bdc9457SAndroid Build Coastguard Worker }
28*4bdc9457SAndroid Build Coastguard Worker
unaligned_indexed_load_f32(const void * address,size_t index)29*4bdc9457SAndroid Build Coastguard Worker XNN_INLINE static float unaligned_indexed_load_f32(const void* address, size_t index) {
30*4bdc9457SAndroid Build Coastguard Worker typedef XNN_UNALIGNED float xnn_unaligned_float;
31*4bdc9457SAndroid Build Coastguard Worker return ((const xnn_unaligned_float*) address)[index];
32*4bdc9457SAndroid Build Coastguard Worker }
33*4bdc9457SAndroid Build Coastguard Worker
unaligned_indexed_load_s32(const void * address,size_t index)34*4bdc9457SAndroid Build Coastguard Worker XNN_INLINE static int32_t unaligned_indexed_load_s32(const void* address, size_t index) {
35*4bdc9457SAndroid Build Coastguard Worker typedef XNN_UNALIGNED int32_t xnn_unaligned_int32_t;
36*4bdc9457SAndroid Build Coastguard Worker return ((const xnn_unaligned_int32_t*) address)[index];
37*4bdc9457SAndroid Build Coastguard Worker }
38*4bdc9457SAndroid Build Coastguard Worker
unaligned_indexed_load_u32(const void * address,size_t index)39*4bdc9457SAndroid Build Coastguard Worker XNN_INLINE static uint32_t unaligned_indexed_load_u32(const void* address, size_t index) {
40*4bdc9457SAndroid Build Coastguard Worker typedef XNN_UNALIGNED uint32_t xnn_unaligned_uint32_t;
41*4bdc9457SAndroid Build Coastguard Worker return ((const xnn_unaligned_uint32_t*) address)[index];
42*4bdc9457SAndroid Build Coastguard Worker }
43*4bdc9457SAndroid Build Coastguard Worker
unaligned_store_u16(void * address,uint16_t value)44*4bdc9457SAndroid Build Coastguard Worker XNN_INLINE static void unaligned_store_u16(void* address, uint16_t value) {
45*4bdc9457SAndroid Build Coastguard Worker typedef XNN_UNALIGNED uint16_t xnn_unaligned_uint16_t;
46*4bdc9457SAndroid Build Coastguard Worker *((xnn_unaligned_uint16_t*) address) = value;
47*4bdc9457SAndroid Build Coastguard Worker }
48*4bdc9457SAndroid Build Coastguard Worker
unaligned_store_f32(void * address,float value)49*4bdc9457SAndroid Build Coastguard Worker XNN_INLINE static void unaligned_store_f32(void* address, float value) {
50*4bdc9457SAndroid Build Coastguard Worker typedef XNN_UNALIGNED float xnn_unaligned_float;
51*4bdc9457SAndroid Build Coastguard Worker *((xnn_unaligned_float*) address) = value;
52*4bdc9457SAndroid Build Coastguard Worker }
53*4bdc9457SAndroid Build Coastguard Worker
unaligned_store_s32(void * address,int32_t value)54*4bdc9457SAndroid Build Coastguard Worker XNN_INLINE static void unaligned_store_s32(void* address, int32_t value) {
55*4bdc9457SAndroid Build Coastguard Worker typedef XNN_UNALIGNED int32_t xnn_unaligned_int32_t;
56*4bdc9457SAndroid Build Coastguard Worker *((xnn_unaligned_int32_t*) address) = value;
57*4bdc9457SAndroid Build Coastguard Worker }
58*4bdc9457SAndroid Build Coastguard Worker
unaligned_store_u32(void * address,uint32_t value)59*4bdc9457SAndroid Build Coastguard Worker XNN_INLINE static void unaligned_store_u32(void* address, uint32_t value) {
60*4bdc9457SAndroid Build Coastguard Worker typedef XNN_UNALIGNED uint32_t xnn_unaligned_uint32_t;
61*4bdc9457SAndroid Build Coastguard Worker *((xnn_unaligned_uint32_t*) address) = value;
62*4bdc9457SAndroid Build Coastguard Worker }
63*4bdc9457SAndroid Build Coastguard Worker
unaligned_indexed_store_f32(void * address,size_t index,float value)64*4bdc9457SAndroid Build Coastguard Worker XNN_INLINE static void unaligned_indexed_store_f32(void* address, size_t index, float value) {
65*4bdc9457SAndroid Build Coastguard Worker typedef XNN_UNALIGNED float xnn_unaligned_float;
66*4bdc9457SAndroid Build Coastguard Worker ((xnn_unaligned_float*) address)[index] = value;
67*4bdc9457SAndroid Build Coastguard Worker }
68*4bdc9457SAndroid Build Coastguard Worker
unaligned_indexed_store_s32(void * address,size_t index,int32_t value)69*4bdc9457SAndroid Build Coastguard Worker XNN_INLINE static void unaligned_indexed_store_s32(void* address, size_t index, int32_t value) {
70*4bdc9457SAndroid Build Coastguard Worker typedef XNN_UNALIGNED int32_t xnn_unaligned_int32_t;
71*4bdc9457SAndroid Build Coastguard Worker ((xnn_unaligned_int32_t*) address)[index] = value;
72*4bdc9457SAndroid Build Coastguard Worker }
73*4bdc9457SAndroid Build Coastguard Worker
unaligned_indexed_store_u32(void * address,size_t index,uint32_t value)74*4bdc9457SAndroid Build Coastguard Worker XNN_INLINE static void unaligned_indexed_store_u32(void* address, size_t index, uint32_t value) {
75*4bdc9457SAndroid Build Coastguard Worker typedef XNN_UNALIGNED uint32_t xnn_unaligned_uint32_t;
76*4bdc9457SAndroid Build Coastguard Worker ((xnn_unaligned_uint32_t*) address)[index] = value;
77*4bdc9457SAndroid Build Coastguard Worker }
78