diff options
author | Jens Arnold <amiconn@rockbox.org> | 2006-07-18 00:04:43 +0000 |
---|---|---|
committer | Jens Arnold <amiconn@rockbox.org> | 2006-07-18 00:04:43 +0000 |
commit | 393f31cc43cd9dff55a92e615ca52209b79944ac (patch) | |
tree | edd0f00c5051a30dcc0afe92f6ec2cceeab0c7fd /firmware/drivers/lcd-h100-remote.c | |
parent | ed00b173059ae76f6a610bd834ace6d59a5c3a1f (diff) | |
download | rockbox-393f31cc43cd9dff55a92e615ca52209b79944ac.tar.gz rockbox-393f31cc43cd9dff55a92e615ca52209b79944ac.zip |
1bit and 2bit LCD drivers: Low-level bit handling optimisations.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10225 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/drivers/lcd-h100-remote.c')
-rw-r--r-- | firmware/drivers/lcd-h100-remote.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/firmware/drivers/lcd-h100-remote.c b/firmware/drivers/lcd-h100-remote.c index 4d58db9a56..f7b3c21f48 100644 --- a/firmware/drivers/lcd-h100-remote.c +++ b/firmware/drivers/lcd-h100-remote.c @@ -716,7 +716,10 @@ static void solidblock(unsigned char *address, unsigned mask, unsigned bits) ICODE_ATTR; static void solidblock(unsigned char *address, unsigned mask, unsigned bits) { - *address = (*address & ~mask) | (bits & mask); + unsigned data = *address; + + bits ^= data; + *address = data ^ (bits & mask); } static void flipinvblock(unsigned char *address, unsigned mask, unsigned bits) @@ -744,7 +747,10 @@ static void solidinvblock(unsigned char *address, unsigned mask, unsigned bits) ICODE_ATTR; static void solidinvblock(unsigned char *address, unsigned mask, unsigned bits) { - *address = (*address & ~mask) | (~bits & mask); + unsigned data = *address; + + bits = ~bits ^ data; + *address = data ^ (bits & mask); } lcd_blockfunc_type* const lcd_remote_blockfuncs[8] = { |