@@ -1544,14 +1544,15 @@ page_zip_compress(
1544
1544
page_zip->n_blobs = unsigned (n_blobs);
1545
1545
/* Copy those header fields that will not be written
1546
1546
in buf_flush_init_for_writing() */
1547
- memcpy (page_zip->data + FIL_PAGE_PREV, page + FIL_PAGE_PREV,
1548
- FIL_PAGE_LSN - FIL_PAGE_PREV);
1549
- memcpy (page_zip->data + FIL_PAGE_TYPE, page + FIL_PAGE_TYPE, 2 );
1550
- memcpy (page_zip->data + FIL_PAGE_DATA, page + FIL_PAGE_DATA,
1551
- PAGE_DATA - FIL_PAGE_DATA);
1547
+ memcpy_aligned<8 >(page_zip->data + FIL_PAGE_PREV, page + FIL_PAGE_PREV,
1548
+ FIL_PAGE_LSN - FIL_PAGE_PREV);
1549
+ memcpy_aligned<2 >(page_zip->data + FIL_PAGE_TYPE, page + FIL_PAGE_TYPE,
1550
+ 2 );
1551
+ memcpy_aligned<2 >(page_zip->data + FIL_PAGE_DATA, page + FIL_PAGE_DATA,
1552
+ PAGE_DATA - FIL_PAGE_DATA);
1552
1553
/* Copy the rest of the compressed page */
1553
- memcpy (page_zip->data + PAGE_DATA, buf,
1554
- page_zip_get_size (page_zip) - PAGE_DATA);
1554
+ memcpy_aligned< 2 > (page_zip->data + PAGE_DATA, buf,
1555
+ page_zip_get_size (page_zip) - PAGE_DATA);
1555
1556
mem_heap_free (heap);
1556
1557
#ifdef UNIV_ZIP_DEBUG
1557
1558
ut_a (page_zip_validate (page_zip, page, index));
@@ -3021,7 +3022,7 @@ page_zip_decompress_low(
3021
3022
3022
3023
if (all) {
3023
3024
/* Copy the page header. */
3024
- memcpy (page, page_zip->data , PAGE_DATA);
3025
+ memcpy_aligned< 2 > (page, page_zip->data , PAGE_DATA);
3025
3026
} else {
3026
3027
/* Check that the bytes that we skip are identical. */
3027
3028
#if defined UNIV_DEBUG || defined UNIV_ZIP_DEBUG
@@ -3034,9 +3035,10 @@ page_zip_decompress_low(
3034
3035
#endif /* UNIV_DEBUG || UNIV_ZIP_DEBUG */
3035
3036
3036
3037
/* Copy the mutable parts of the page header. */
3037
- memcpy (page, page_zip->data , FIL_PAGE_TYPE);
3038
- memcpy (PAGE_HEADER + page, PAGE_HEADER + page_zip->data ,
3039
- PAGE_LEVEL - PAGE_N_DIR_SLOTS);
3038
+ memcpy_aligned<8 >(page, page_zip->data , FIL_PAGE_TYPE);
3039
+ memcpy_aligned<2 >(PAGE_HEADER + page,
3040
+ PAGE_HEADER + page_zip->data ,
3041
+ PAGE_LEVEL - PAGE_N_DIR_SLOTS);
3040
3042
3041
3043
#if defined UNIV_DEBUG || defined UNIV_ZIP_DEBUG
3042
3044
/* Check that the page headers match after copying. */
@@ -3070,8 +3072,9 @@ page_zip_decompress_low(
3070
3072
& PAGE_ZIP_DIR_SLOT_MASK);
3071
3073
}
3072
3074
memcpy (page + PAGE_NEW_INFIMUM, infimum_data, sizeof infimum_data);
3073
- memcpy (page + (PAGE_NEW_SUPREMUM - REC_N_NEW_EXTRA_BYTES + 1 ),
3074
- supremum_extra_data, sizeof supremum_extra_data);
3075
+ memcpy_aligned<4 >(PAGE_NEW_SUPREMUM - REC_N_NEW_EXTRA_BYTES + 1
3076
+ + page, supremum_extra_data,
3077
+ sizeof supremum_extra_data);
3075
3078
3076
3079
page_zip_set_alloc (&d_stream, heap);
3077
3080
@@ -4737,8 +4740,8 @@ page_zip_reorganize(
4737
4740
index, mtr);
4738
4741
4739
4742
/* Copy the PAGE_MAX_TRX_ID or PAGE_ROOT_AUTO_INC. */
4740
- memcpy (page + (PAGE_HEADER + PAGE_MAX_TRX_ID),
4741
- temp_page + (PAGE_HEADER + PAGE_MAX_TRX_ID), 8 );
4743
+ memcpy_aligned< 8 > (page + (PAGE_HEADER + PAGE_MAX_TRX_ID),
4744
+ temp_page + (PAGE_HEADER + PAGE_MAX_TRX_ID), 8 );
4742
4745
/* PAGE_MAX_TRX_ID must be set on secondary index leaf pages. */
4743
4746
ut_ad (dict_index_is_clust (index) || !page_is_leaf (temp_page)
4744
4747
|| page_get_max_trx_id (page) != 0 );
@@ -4806,21 +4809,24 @@ page_zip_copy_recs(
4806
4809
PAGE_MAX_TRX_ID. Skip the rest of the page header and
4807
4810
trailer. On the compressed page, there is no trailer. */
4808
4811
compile_time_assert (PAGE_MAX_TRX_ID + 8 == PAGE_HEADER_PRIV_END);
4809
- memcpy (PAGE_HEADER + page, PAGE_HEADER + src,
4810
- PAGE_HEADER_PRIV_END);
4811
- memcpy (PAGE_DATA + page, PAGE_DATA + src,
4812
- srv_page_size - PAGE_DATA - FIL_PAGE_DATA_END);
4813
- memcpy (PAGE_HEADER + page_zip->data , PAGE_HEADER + src_zip->data ,
4814
- PAGE_HEADER_PRIV_END);
4815
- memcpy (PAGE_DATA + page_zip->data , PAGE_DATA + src_zip->data ,
4816
- page_zip_get_size (page_zip) - PAGE_DATA);
4812
+ memcpy_aligned<2 >(PAGE_HEADER + page, PAGE_HEADER + src,
4813
+ PAGE_HEADER_PRIV_END);
4814
+ memcpy_aligned<2 >(PAGE_DATA + page, PAGE_DATA + src,
4815
+ srv_page_size - (PAGE_DATA + FIL_PAGE_DATA_END));
4816
+ memcpy_aligned<2 >(PAGE_HEADER + page_zip->data ,
4817
+ PAGE_HEADER + src_zip->data ,
4818
+ PAGE_HEADER_PRIV_END);
4819
+ memcpy_aligned<2 >(PAGE_DATA + page_zip->data ,
4820
+ PAGE_DATA + src_zip->data ,
4821
+ page_zip_get_size (page_zip) - PAGE_DATA);
4817
4822
4818
4823
if (dict_index_is_clust (index)) {
4819
4824
/* Reset the PAGE_ROOT_AUTO_INC field when copying
4820
4825
from a root page. */
4821
- memset (PAGE_HEADER + PAGE_ROOT_AUTO_INC + page, 0 , 8 );
4822
- memset (PAGE_HEADER + PAGE_ROOT_AUTO_INC + page_zip->data ,
4823
- 0 , 8 );
4826
+ memset_aligned<8 >(PAGE_HEADER + PAGE_ROOT_AUTO_INC
4827
+ + page, 0 , 8 );
4828
+ memset_aligned<8 >(PAGE_HEADER + PAGE_ROOT_AUTO_INC
4829
+ + page_zip->data , 0 , 8 );
4824
4830
} else {
4825
4831
/* The PAGE_MAX_TRX_ID must be nonzero on leaf pages
4826
4832
of secondary indexes, and 0 on others. */
0 commit comments