Group pointer increments for better assembly (in recent GCC)

This commit is contained in:
Allen Hill
2026-05-12 10:14:15 -07:00
parent 1e715d1daa
commit 62f755c265
+23 -19
View File
@@ -869,18 +869,23 @@ response_t AVCLAN_handleframe(const AVCLAN_frame_t *in, AVCLAN_frame_t *out) {
out->controller_addr = DEVICE_ADDR; out->controller_addr = DEVICE_ADDR;
out->control = 0xF; out->control = 0xF;
uint8_t *data = in->data; const uint16_t peripheral_addr = in->peripheral_addr;
const uint8_t *data = in->data;
const uint8_t b0 = *data++;
const uint8_t b1 = *data++;
const uint8_t b2 = *data++;
const uint8_t b3 = *data++;
uint8_t from; uint8_t from;
// BROADCAST // BROADCAST
if (in->broadcast == 0) { if (in->broadcast == BROADCAST) {
// skip confirming peripheral_addr, because it will be 0xFFF or 0x1FF based // skip confirming peripheral_addr, because it will be 0xFFF or 0x1FF based
// on all currently known examples // on all currently known examples
switch (*data++ /* data[0] == "from" device */) { switch (b0 /* "from" device */) {
case dev_LAN: case dev_LAN:
switch (*data++ /* data[1] == "to" device */) { switch (b1 /* "to" device */) {
case dev_COMM_CTRL: case dev_COMM_CTRL:
switch (*data++ /* data[2] == device action */) { switch (b2 /* device action */) {
case Lancheck_Scan_Req: case Lancheck_Scan_Req:
lancheck_resp[3] = Lancheck_Scan_Resp; lancheck_resp[3] = Lancheck_Scan_Resp;
lancheck_resp[4] = 0x01; lancheck_resp[4] = 0x01;
@@ -909,11 +914,10 @@ response_t AVCLAN_handleframe(const AVCLAN_frame_t *in, AVCLAN_frame_t *out) {
break; break;
case dev_COMM_v1: case dev_COMM_v1:
case dev_COMM_v2: case dev_COMM_v2:
if (*data++ /* data[1] == "to" device */ == dev_COMM_CTRL) { if (b1 /* "to" device */ == dev_COMM_CTRL) {
switch (*data++ /* data[2] == device action */) { switch (b2 /* device action */) {
case Current_Function: case Current_Function:
if ((*data++ /* data[2] */ == dev_CD_CHANGER) && if ((b3 == dev_CD_CHANGER) && !AVCLAN_isPlaying()) {
!AVCLAN_isPlaying()) {
cd_status.state = cd_SEEKING | cd_SEEKING_TRACK; cd_status.state = cd_SEEKING | cd_SEEKING_TRACK;
cd_status.flags2 = 0x80; cd_status.flags2 = 0x80;
AVCLAN_startPlaying(); AVCLAN_startPlaying();
@@ -925,7 +929,7 @@ response_t AVCLAN_handleframe(const AVCLAN_frame_t *in, AVCLAN_frame_t *out) {
out->broadcast = UNICAST; out->broadcast = UNICAST;
out->peripheral_addr = HU_ADDR; out->peripheral_addr = HU_ADDR;
out->length = sizeof(ping_resp); out->length = sizeof(ping_resp);
ping_resp[4] = *data++ /* data[2] */; ping_resp[4] = b3;
memcpy(out->data, ping_resp, sizeof(ping_resp)); memcpy(out->data, ping_resp, sizeof(ping_resp));
respond = r_Handled; respond = r_Handled;
break; break;
@@ -945,15 +949,15 @@ response_t AVCLAN_handleframe(const AVCLAN_frame_t *in, AVCLAN_frame_t *out) {
break; break;
default: default:
} }
} else if (in->peripheral_addr == DEVICE_ADDR) { // unicast to CD changer } else if (peripheral_addr == DEVICE_ADDR) { // unicast to CD changer
if (*data++ == 0) { // unicasts begin with a zero-byte if (b0 == 0) { // unicasts begin with a zero-byte
from = *data++; /* data[1] */ from = b1;
switch (from) { switch (from) {
case dev_COMM_v1: case dev_COMM_v1:
case dev_COMM_v2: case dev_COMM_v2:
switch (*data++ /* data[2] == "to" device */) { switch (b2 /* "to" device */) {
case dev_CD_CHANGER: case dev_CD_CHANGER:
switch (*data++ /* data[3] == device action */) { switch (b3 /* device action */) {
case Enable_Function_Req: case Enable_Function_Req:
function_change_resp[3] = Enable_Function_Resp; function_change_resp[3] = Enable_Function_Resp;
cd_status.state = cd_SEEKING | cd_SEEKING_TRACK; cd_status.state = cd_SEEKING | cd_SEEKING_TRACK;
@@ -986,9 +990,9 @@ response_t AVCLAN_handleframe(const AVCLAN_frame_t *in, AVCLAN_frame_t *out) {
} }
break; break;
case dev_CMD_SW: case dev_CMD_SW:
switch (*data++ /* data[2] == "to" device */) { switch (b2 /* "to" device */) {
case dev_CD_CHANGER: case dev_CD_CHANGER:
switch (*data++ /* data[3] == device action */) { switch (b3 /* device action */) {
case Initial_Report_Request: case Initial_Report_Request:
out->length = sizeof(cdinitreport_resp); out->length = sizeof(cdinitreport_resp);
memcpy(out->data, cdinitreport_resp, memcpy(out->data, cdinitreport_resp,
@@ -1038,9 +1042,9 @@ response_t AVCLAN_handleframe(const AVCLAN_frame_t *in, AVCLAN_frame_t *out) {
} }
break; break;
case dev_STATUS: case dev_STATUS:
switch (*data++ /* data[2] == "to" device */) { switch (b2 /* "to" device */) {
case dev_CD_CHANGER: case dev_CD_CHANGER:
switch (*data++ /* data[3] == device action */) { switch (b3 /* device action */) {
case Initial_Report_Request: case Initial_Report_Request:
out->length = sizeof(cdinitreport_resp); out->length = sizeof(cdinitreport_resp);
memcpy(out->data, cdinitreport_resp, memcpy(out->data, cdinitreport_resp,