GPIO Access on Cortex-M4 : Read-Modify-Write vs Atomic
You assume that all operations on IO ports are at bit level. I wrote an external LCD interface a while ago that used Px0..Px7 for the data interface, and Px8 for the write control. This allowed me to directly stream a pixel (16-bit colour) to the display using a sequence of four GPIO_ODR writes. If I had used BSRR I would have had to translate the raw pixel data into bit masks for that register. This would have slowed things down significantly.