blit
Loading...
Searching...
No Matches
phase_align.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2025, Roy Ratcliffe, Northumberland, United Kingdom
3 * SPDX-License-Identifier: MIT
4 */
15#ifndef __BLIT_PHASE_ALIGN_H__
16#define __BLIT_PHASE_ALIGN_H__
17
18#include <blit/scan.h>
19
54
64void blit_phase_align_start(struct blit_phase_align *align, int x, int x_store,
65 const blit_scanline_t *store);
66
74
81
89static inline uint8_t blit_phase_align_byte(int x_store,
90 const blit_scanline_t *store) {
91 struct blit_phase_align align;
92 blit_phase_align_start(&align, 0, x_store, store);
93 return blit_phase_align_fetch(&align);
94}
95
102static inline uint16_t blit_phase_align_be16(int x_store,
103 const blit_scanline_t *store) {
104 struct blit_phase_align align;
105 blit_phase_align_start(&align, 0, x_store, store);
106 return (blit_phase_align_fetch(&align) << 8) | blit_phase_align_fetch(&align);
107}
108
115static inline uint16_t blit_phase_align_le16(int x_store,
116 const blit_scanline_t *store) {
117 struct blit_phase_align align;
118 blit_phase_align_start(&align, 0, x_store, store);
119 return blit_phase_align_fetch(&align) | (blit_phase_align_fetch(&align) << 8);
120}
121
128static inline uint32_t blit_phase_align_be32(int x_store,
129 const blit_scanline_t *store) {
130 struct blit_phase_align align;
131 blit_phase_align_start(&align, 0, x_store, store);
132 return (blit_phase_align_fetch(&align) << 24) |
133 (blit_phase_align_fetch(&align) << 16) |
134 (blit_phase_align_fetch(&align) << 8) | blit_phase_align_fetch(&align);
135}
136
143static inline uint32_t blit_phase_align_le32(int x_store,
144 const blit_scanline_t *store) {
145 struct blit_phase_align align;
146 blit_phase_align_start(&align, 0, x_store, store);
147 return blit_phase_align_fetch(&align) |
148 (blit_phase_align_fetch(&align) << 8) |
149 (blit_phase_align_fetch(&align) << 16) |
150 (blit_phase_align_fetch(&align) << 24);
151}
152
153#endif /* __BLIT_PHASE_ALIGN_H__ */
void blit_phase_align_prefetch(struct blit_phase_align *align)
Prefetches the next byte into the alignment structure.
Definition phase_align.c:79
void blit_phase_align_start(struct blit_phase_align *align, int x, int x_store, const blit_scanline_t *store)
Initialises the phase alignment structure.
Definition phase_align.c:48
blit_scanline_t blit_phase_align_fetch(struct blit_phase_align *align)
Fetches the next byte from the phase alignment structure.
Definition phase_align.c:83
Scanline structure definition.
uint8_t blit_scanline_t
Type definition for a scanline element.
Definition scan.h:24
Phase alignment structure.
Definition phase_align.h:32
blit_scanline_t(* fetch)(struct blit_phase_align *align)
Fetch the next byte with appropriate shifting.
Definition phase_align.h:40
void(* prefetch)(struct blit_phase_align *align)
Prefetch the next byte into the alignment structure.
Definition phase_align.h:36
const blit_scanline_t * store
Pointer to the data being processed.
Definition phase_align.h:44
blit_scanline_t carry
Overflow from the previous byte fetch.
Definition phase_align.h:52
int shift
Number of bits to shift the data.
Definition phase_align.h:48