From: SourceForge.net <no...@so...> - 2005-08-25 17:28:40
|
Feature Requests item #1272903, was opened at 2005-08-25 17:28 Message generated for change (Tracker Item Submitted) made by Item Submitter You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=350599&aid=1272903&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Open Priority: 5 Submitted By: Oliver Sedlacek (oliver-sedlacek) Assigned to: Nobody/Anonymous (nobody) Summary: Optimised bit clear with masks Initial Comment: C does not really have any bit operations, which is a nuisance if the target microprocessor has bit manipulation instructions. To set or clear a bit in a byte the programmer may choose to go with the portable C code or drop down into non-portable assembler. Eg. char abyte; const char bitOfInterestMask = 0x01; /* set the bit */ abyte |= bitOfInterestMask; /* clear the bit */ abyte &= ~bitOfInterestMask; I noticed on the HC08 port that the set operation is efficiently optimised to the bset instruction but the clear operation isn't optimised to the bclr instruction. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=350599&aid=1272903&group_id=599 |
From: SourceForge.net <no...@so...> - 2005-08-28 14:05:25
|
Feature Requests item #1272903, was opened at 2005-08-25 12:28 Message generated for change (Comment added) made by epetrich You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=350599&aid=1272903&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Open Priority: 5 Submitted By: Oliver Sedlacek (oliver-sedlacek) Assigned to: Nobody/Anonymous (nobody) Summary: Optimised bit clear with masks Initial Comment: C does not really have any bit operations, which is a nuisance if the target microprocessor has bit manipulation instructions. To set or clear a bit in a byte the programmer may choose to go with the portable C code or drop down into non-portable assembler. Eg. char abyte; const char bitOfInterestMask = 0x01; /* set the bit */ abyte |= bitOfInterestMask; /* clear the bit */ abyte &= ~bitOfInterestMask; I noticed on the HC08 port that the set operation is efficiently optimised to the bset instruction but the clear operation isn't optimised to the bclr instruction. ---------------------------------------------------------------------- >Comment By: Erik Petrich (epetrich) Date: 2005-08-28 09:05 Message: Logged In: YES user_id=635249 The code generator already supports using bclr this way. Could you post a compilable example in which |= reduces to bset, but &= does not reduce to bclr? I tried your code snippet in a number of different contexts and found that either both bit set and clear would be optimized or neither would. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=350599&aid=1272903&group_id=599 |
From: SourceForge.net <no...@so...> - 2005-08-29 13:14:25
|
Feature Requests item #1272903, was opened at 2005-08-25 17:28 Message generated for change (Comment added) made by oliver-sedlacek You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=350599&aid=1272903&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Open Priority: 5 Submitted By: Oliver Sedlacek (oliver-sedlacek) Assigned to: Nobody/Anonymous (nobody) Summary: Optimised bit clear with masks Initial Comment: C does not really have any bit operations, which is a nuisance if the target microprocessor has bit manipulation instructions. To set or clear a bit in a byte the programmer may choose to go with the portable C code or drop down into non-portable assembler. Eg. char abyte; const char bitOfInterestMask = 0x01; /* set the bit */ abyte |= bitOfInterestMask; /* clear the bit */ abyte &= ~bitOfInterestMask; I noticed on the HC08 port that the set operation is efficiently optimised to the bset instruction but the clear operation isn't optimised to the bclr instruction. ---------------------------------------------------------------------- >Comment By: Oliver Sedlacek (oliver-sedlacek) Date: 2005-08-29 13:14 Message: Logged In: YES user_id=1316375 I've uploaded the C source of an example. The code snippet of significance is lines 257 and 258, if(hectoRPM.b[U16_MSB] > miscCfg.stc.REV_LIMITER) PORTB |= MskPBRevLmt; else PORTB &= ~MskPBRevLmt; This was compiled with version 2.5.0 using sdcc -c -mhco8 measure.c ---------------------------------------------------------------------- Comment By: Erik Petrich (epetrich) Date: 2005-08-28 14:05 Message: Logged In: YES user_id=635249 The code generator already supports using bclr this way. Could you post a compilable example in which |= reduces to bset, but &= does not reduce to bclr? I tried your code snippet in a number of different contexts and found that either both bit set and clear would be optimized or neither would. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=350599&aid=1272903&group_id=599 |
From: SourceForge.net <no...@so...> - 2005-09-15 21:23:16
|
Feature Requests item #1272903, was opened at 2005-08-25 19:28 Message generated for change (Comment added) made by frief You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=350599&aid=1272903&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Open Priority: 5 Submitted By: Oliver Sedlacek (oliver-sedlacek) Assigned to: Nobody/Anonymous (nobody) Summary: Optimised bit clear with masks Initial Comment: C does not really have any bit operations, which is a nuisance if the target microprocessor has bit manipulation instructions. To set or clear a bit in a byte the programmer may choose to go with the portable C code or drop down into non-portable assembler. Eg. char abyte; const char bitOfInterestMask = 0x01; /* set the bit */ abyte |= bitOfInterestMask; /* clear the bit */ abyte &= ~bitOfInterestMask; I noticed on the HC08 port that the set operation is efficiently optimised to the bset instruction but the clear operation isn't optimised to the bclr instruction. ---------------------------------------------------------------------- >Comment By: Frieder Ferlemann (frief) Date: 2005-09-15 23:23 Message: Logged In: YES user_id=589052 the mcs51 port doesn't always use bitset/bitclear operations either: #include <8052.h> void main(void) { /* P0 is a bit-addressable SFR (an SFR which is dividable by 8 without rest) */ P0 |= 0x01; } ---------------------------------------------------------------------- Comment By: Oliver Sedlacek (oliver-sedlacek) Date: 2005-08-29 15:14 Message: Logged In: YES user_id=1316375 I've uploaded the C source of an example. The code snippet of significance is lines 257 and 258, if(hectoRPM.b[U16_MSB] > miscCfg.stc.REV_LIMITER) PORTB |= MskPBRevLmt; else PORTB &= ~MskPBRevLmt; This was compiled with version 2.5.0 using sdcc -c -mhco8 measure.c ---------------------------------------------------------------------- Comment By: Erik Petrich (epetrich) Date: 2005-08-28 16:05 Message: Logged In: YES user_id=635249 The code generator already supports using bclr this way. Could you post a compilable example in which |= reduces to bset, but &= does not reduce to bclr? I tried your code snippet in a number of different contexts and found that either both bit set and clear would be optimized or neither would. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=350599&aid=1272903&group_id=599 |