Below are some functions that were affected 
bool Check_crc(uint8_t *ptr ) {
uint16_t crc;
uint8_t dat;
crc=0;
uint8_t len=ptr[0]-2;
while(len--!=0)
{
dat=crc>>8;
crc<<=8;
#ifdef __AVR__
crc^= pgm_read_word_near (&CRC_TAB [dat^*ptr]);
#endif
#ifdef ARDUINO_ARCH_SAMD
crc^= CRC_TAB [dat^*ptr]; // Original statement when array is stored in RAM
#endif
ptr++;
}
dat=crc;
if((*ptr==(crc>>8))&&(*(ptr+1)==dat))
{
return(true);
}
else
{
return(false);
}
}
CRC_TAB []=const uint16_t CRC_TAB[] = {
0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
0x9339, 0x8318, 0xb37b, 0xa35a,0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, ......}
CRC_TAB was a const word [] and also stored in PROGMEM which on ARM is not supported.
Before changing variables to int16_t etc all CRC checks failed.
Likewise the opposite function which calculates CRC (not shown) also calculated wrong CRCs
I wonder if the following would be affected :
word opCode= word(IncPacket[5],IncPacket[6]);
if (opCode==0xF065)
{
....
..
}
Or this :
void setupBusPacket(word opCode ){
OutPacket[1]=DeviceSubNet;
OutPacket[2]=DeviceID;
OutPacket[3]=highByte(DeviceType);
OutPacket[4]=lowByte(DeviceType);
OutPacket[5]=highByte(opCode+1);
OutPacket[6]=lowByte (opCode+1);
OutPacket[7]=IncPacket[1];
OutPacket[8]=IncPacket[2];
}
In general, I wonder if I should do a find & replace of all variable types to their "explicit length equivalent" just to make sure that functionality is not affected.
For exapmle I have some other functions that take float measurements, split them into individual bytes - 4 bytes were expected - and then send them serially over RS485.
For now and given the level of testing I did, everything seems to be working by just replacing "int"s .