Howdy -- I'm starting with Cortex M processors, but I have lots of experience with 8bit MCUs.
I have been working on learning the STMicro PAL headers.
One thing, coming from an 8051, is that you can individually set/read pins. I didn't think this was significant, until I kind of started looking at the HAL headers and realized there doesn't seem to be similar functionality.
In 8051 with the Keil compiler, you do something like:
sbit LedOutput P2^5;
Is this not the Cortex M way to accomplish bit level reads like that?
Like I was taken aback that there is an BSRR and BRR registers. No such concepts on 8051s.
THERE IS AN EPIC THREAD ON THIS FROM 9 YEARS AGO: http://www.keil.com/forum/15029/direct-referrence-to-gpio-pins/
Near the end of this masterpiece post, there is some discussion of bit banding and reading individual bits in the works for M3's.
Did this ever come to fruition for M0's?
In the STHeaders, define all the individual registers, with shifts and masks. So it seems like bit level access is not the way this works in 2018.
If you want to read an individual register, is shifts and masks the most efficient way to get the job done on a Cortex M0?
I can't comment on what cores offer bit banding, but I would say this:
Your initial example; i.e.,
Is typically used to so that you can set/clear/test an individual port pin.
Many processors with ARM cores (or at least, many I've read datasheets of) have registers specific to individual operations such as set/clear/test and can be used to carry out the desired operation on one or a combination of bits.
Some processors go further and allow you to do other things at the bit level, such as toggle the bit.
Using these registers, it is easy to create macros for individual bit control.
When I first looked at ARM I looked into bit banding for creating an equivalent of the C51 Bit for variables, but in truth I've not yet found a need in my applications to use it.
The registers for manipulating individual port pins has clear uses and it is something I look for when choosing a processor for a task.
(Apologies if this response appeared prigish ;) )