PostgreSQL Source Code
git master
Loading...
Searching...
No Matches
checksum.c
Go to the documentation of this file.
1
/*-------------------------------------------------------------------------
2
*
3
* checksum.c
4
* Checksum implementation for data pages.
5
*
6
* Portions Copyright (c) 1996-2026, PostgreSQL Global Development Group
7
* Portions Copyright (c) 1994, Regents of the University of California
8
*
9
* IDENTIFICATION
10
* src/backend/storage/page/checksum.c
11
*
12
*-------------------------------------------------------------------------
13
*/
14
#include "
postgres.h
"
15
16
#include "
port/pg_cpu.h
"
17
#include "
storage/checksum.h
"
18
/*
19
* The actual code is in storage/checksum_impl.h. This is done so that
20
* external programs can incorporate the checksum code by #include'ing
21
* that file from the exported Postgres headers. (Compare our legacy
22
* CRC code in pg_crc.h.)
23
* The PG_CHECKSUM_INTERNAL symbol allows core to use hardware-specific
24
* coding without affecting external programs.
25
*/
26
#define PG_CHECKSUM_INTERNAL
27
#include "
storage/checksum_impl.h
"
/* IWYU pragma: keep */
28
29
30
static
uint32
31
pg_checksum_block_fallback
(
const
PGChecksummablePage
*page)
32
{
33
#include "
storage/checksum_block_internal.h
"
34
}
35
36
/*
37
* AVX2-optimized block checksum algorithm.
38
*/
39
#ifdef USE_AVX2_WITH_RUNTIME_CHECK
40
pg_attribute_target
(
"avx2"
)
41
static
uint32
42
pg_checksum_block_avx2
(
const
PGChecksummablePage
*page)
43
{
44
#include "
storage/checksum_block_internal.h
"
45
}
46
#endif
/* USE_AVX2_WITH_RUNTIME_CHECK */
47
48
/*
49
* Choose the best available checksum implementation.
50
*/
51
static
uint32
52
pg_checksum_choose
(
const
PGChecksummablePage
*page)
53
{
54
pg_checksum_block
=
pg_checksum_block_fallback
;
55
56
#ifdef USE_AVX2_WITH_RUNTIME_CHECK
57
if
(
x86_feature_available
(
PG_AVX2
))
58
pg_checksum_block
=
pg_checksum_block_avx2
;
59
#endif
60
61
return
pg_checksum_block
(page);
62
}
63
64
static
uint32
(*
pg_checksum_block
) (
const
PGChecksummablePage
*page) =
pg_checksum_choose
;
uint32
uint32_t uint32
Definition
c.h:624
pg_attribute_target
#define pg_attribute_target(...)
Definition
c.h:238
pg_checksum_choose
static uint32 pg_checksum_choose(const PGChecksummablePage *page)
Definition
checksum.c:52
pg_checksum_block_fallback
static uint32 pg_checksum_block_fallback(const PGChecksummablePage *page)
Definition
checksum.c:31
pg_checksum_block
static uint32(* pg_checksum_block)(const PGChecksummablePage *page)
Definition
checksum.c:64
checksum.h
checksum_block_internal.h
checksum_impl.h
pg_cpu.h
postgres.h
fb
static int fb(int x)
Definition
preproc-init.c:92
PGChecksummablePage
Definition
checksum_impl.h:114
src
backend
storage
page
checksum.c
Generated on Thu Apr 9 2026 05:13:14 for PostgreSQL Source Code by
1.9.8