crc16: banked wrapper for cross-bank callers

The lookup tables live in BANK1, so the routine switches the code bank to
reach them with movc and never switches it back. That is the contract the
__naked declaration already implied: same bank or common segment only.
The name now says it.

crc16_bank1 is the routine unchanged. crc16 becomes a __banked wrapper in
BANK1, so a caller from another bank has its own bank put back by
__sdcc_banked_ret. The two existing call sites take the direct path and
pay nothing.
This commit is contained in:
d00f committed 2026-09-09 01:52:12 +02:00
1 parent dd09be9dd0
commit 53f12a42c5
3 files changed
+12 -6

No files matched your search

+3 -3
View File
@@ -89,7 +89,7 @@ __xdata uint32_t last_session_use;
extern __xdata uint16_t crc_value;
__xdata uint16_t crc_final;
void crc16(__xdata uint8_t *v) __naked;
void crc16_bank1(__xdata uint8_t *v) __naked;
inline uint8_t is_separator(uint8_t c)
@@ -518,7 +518,7 @@ uint8_t stream_upload(void)
if (upload_settings.p[upload_settings.bptr] == boundary[bindex]) {
if (!bindex)
crc_final = crc_value;
crc16(upload_settings.p + upload_settings.bptr);
crc16_bank1(upload_settings.p + upload_settings.bptr);
upload_settings.bptr++;
bindex++;
} else {
@@ -527,7 +527,7 @@ uint8_t stream_upload(void)
write_len += bindex;
bindex = 0;
}
crc16(upload_settings.p + upload_settings.bptr);
crc16_bank1(upload_settings.p + upload_settings.bptr);
flash_buf[write_len++] = upload_settings.p[upload_settings.bptr++];
if (write_len >= FLASH_PAGE_SIZE) {
dbg_string("len: "); dbg_short(write_len); dbg_char(' ');