aboutsummaryrefslogtreecommitdiff
path: root/tmk_core/common/action_layer.c
diff options
context:
space:
mode:
authorWojciech Siewierski <wojciech.siewierski@onet.pl>2016-04-13 22:24:42 +0200
committerWojciech Siewierski <wojciech.siewierski@onet.pl>2016-04-13 22:24:42 +0200
commit02a3d77940d9b9dcf3af3e8ca9672145155fbfe6 (patch)
treef0e901f12bbc079208fc7629337ad639e8c82f42 /tmk_core/common/action_layer.c
parenta0194d7e5ff2f3d242a5c6508abf81b4ddf67a3e (diff)
downloadqmk_firmware-02a3d77940d9b9dcf3af3e8ca9672145155fbfe6.tar.gz
qmk_firmware-02a3d77940d9b9dcf3af3e8ca9672145155fbfe6.zip
Optimize source_layers_cache for the cache memory
Swapping the array indices should increase the locality of the memory access.
Diffstat (limited to 'tmk_core/common/action_layer.c')
-rw-r--r--tmk_core/common/action_layer.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/tmk_core/common/action_layer.c b/tmk_core/common/action_layer.c
index fc721a732..e817c0d51 100644
--- a/tmk_core/common/action_layer.c
+++ b/tmk_core/common/action_layer.c
@@ -111,7 +111,7 @@ void layer_debug(void)
111#endif 111#endif
112 112
113#if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS) 113#if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS)
114uint8_t source_layers_cache[MAX_LAYER_BITS][(MATRIX_ROWS * MATRIX_COLS + 7) / 8] = {0}; 114uint8_t source_layers_cache[(MATRIX_ROWS * MATRIX_COLS + 7) / 8][MAX_LAYER_BITS] = {0};
115 115
116void update_source_layers_cache(keypos_t key, uint8_t layer) 116void update_source_layers_cache(keypos_t key, uint8_t layer)
117{ 117{
@@ -120,9 +120,9 @@ void update_source_layers_cache(keypos_t key, uint8_t layer)
120 const uint8_t storage_bit = key_number % 8; 120 const uint8_t storage_bit = key_number % 8;
121 121
122 for (uint8_t bit_number = 0; bit_number < MAX_LAYER_BITS; bit_number++) { 122 for (uint8_t bit_number = 0; bit_number < MAX_LAYER_BITS; bit_number++) {
123 source_layers_cache[bit_number][storage_row] ^= 123 source_layers_cache[storage_row][bit_number] ^=
124 (-((layer & (1U << bit_number)) != 0) 124 (-((layer & (1U << bit_number)) != 0)
125 ^ source_layers_cache[bit_number][storage_row]) 125 ^ source_layers_cache[storage_row][bit_number])
126 & (1U << storage_bit); 126 & (1U << storage_bit);
127 } 127 }
128} 128}
@@ -136,7 +136,7 @@ uint8_t read_source_layers_cache(keypos_t key)
136 136
137 for (uint8_t bit_number = 0; bit_number < MAX_LAYER_BITS; bit_number++) { 137 for (uint8_t bit_number = 0; bit_number < MAX_LAYER_BITS; bit_number++) {
138 layer |= 138 layer |=
139 ((source_layers_cache[bit_number][storage_row] 139 ((source_layers_cache[storage_row][bit_number]
140 & (1U << storage_bit)) != 0) 140 & (1U << storage_bit)) != 0)
141 << bit_number; 141 << bit_number;
142 } 142 }