Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

vt: process the full-width ASCII fallback range programmatically

This shaves about 170 bytes from ucs.o.

Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
Link: https://lore.kernel.org/r/20250507141535.40655-9-nico@fluxnic.net
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Nicolas Pitre and committed by
Greg Kroah-Hartman
63f0d28d 6802f359

+17 -95
+8
drivers/tty/vt/gen_ucs_fallback_table.py
··· 197 197 # Exclude U+2028 (LINE SEPARATOR) 198 198 overrides[0x2028] = 0 # LINE SEPARATOR (unidecode: '\n') 199 199 200 + # Full-width to ASCII mapping (covering all printable ASCII 33-126) 201 + # 0xFF01 (!) to 0xFF5E (~) -> ASCII 33 (!) to 126 (~) 202 + # Those are excluded here to reduce the table size. 203 + # It is more efficient to process them programmatically in 204 + # ucs.c:ucs_get_fallback(). 205 + for cp in range(0xFF01, 0xFF5E + 1): 206 + overrides[cp] = 0 # Double-width ASCII characters 207 + 200 208 return overrides 201 209 202 210 def organize_by_pages(fallback_map):
+8
drivers/tty/vt/ucs.c
··· 224 224 if (!UCS_IS_BMP(cp)) 225 225 return 0; 226 226 227 + /* 228 + * Full-width to ASCII mapping (covering all printable ASCII 33-126) 229 + * 0xFF01 (!) to 0xFF5E (~) -> ASCII 33 (!) to 126 (~) 230 + * We process them programmatically to reduce the table size. 231 + */ 232 + if (cp >= 0xFF01 && cp <= 0xFF5E) 233 + return cp - 0xFF01 + 33; 234 + 227 235 page = __inline_bsearch(&page_idx, ucs_fallback_pages, 228 236 ARRAY_SIZE(ucs_fallback_pages), 229 237 sizeof(*ucs_fallback_pages),
+1 -95
drivers/tty/vt/ucs_fallback_table.h_shipped
··· 60 60 { 0xC7, 1, 3105 }, 61 61 { 0xFB, 35, 3106 }, 62 62 { 0xFE, 37, 3141 }, 63 - { 0xFF, 144, 3178 }, 63 + { 0xFF, 50, 3178 }, 64 64 }; 65 65 66 66 /* Page entries array (referenced by page descriptors) */ ··· 3291 3291 { 0x6A, 0x25 }, /* SMALL PERCENT SIGN -> '%' */ 3292 3292 { 0x6B, 0x40 }, /* SMALL COMMERCIAL AT -> '@' */ 3293 3293 /* Entries for page 0xFF */ 3294 - { 0x01, 0x21 }, /* FULLWIDTH EXCLAMATION MARK -> '!' */ 3295 - { 0x02, 0x22 }, /* FULLWIDTH QUOTATION MARK -> '"' */ 3296 - { 0x03, 0x23 }, /* FULLWIDTH NUMBER SIGN -> '#' */ 3297 - { 0x04, 0x24 }, /* FULLWIDTH DOLLAR SIGN -> '$' */ 3298 - { 0x05, 0x25 }, /* FULLWIDTH PERCENT SIGN -> '%' */ 3299 - { 0x06, 0x26 }, /* FULLWIDTH AMPERSAND -> '&' */ 3300 - { 0x07, 0x27 }, /* FULLWIDTH APOSTROPHE -> ''' */ 3301 - { 0x08, 0x28 }, /* FULLWIDTH LEFT PARENTHESIS -> '(' */ 3302 - { 0x09, 0x29 }, /* FULLWIDTH RIGHT PARENTHESIS -> ')' */ 3303 - { 0x0A, 0x2A }, /* FULLWIDTH ASTERISK -> '*' */ 3304 - { 0x0B, 0x2B }, /* FULLWIDTH PLUS SIGN -> '+' */ 3305 - { 0x0C, 0x2C }, /* FULLWIDTH COMMA -> ',' */ 3306 - { 0x0D, 0x2D }, /* FULLWIDTH HYPHEN-MINUS -> '-' */ 3307 - { 0x0E, 0x2E }, /* FULLWIDTH FULL STOP -> '.' */ 3308 - { 0x0F, 0x2F }, /* FULLWIDTH SOLIDUS -> '/' */ 3309 - { 0x10, 0x30 }, /* FULLWIDTH DIGIT ZERO -> '0' */ 3310 - { 0x11, 0x31 }, /* FULLWIDTH DIGIT ONE -> '1' */ 3311 - { 0x12, 0x32 }, /* FULLWIDTH DIGIT TWO -> '2' */ 3312 - { 0x13, 0x33 }, /* FULLWIDTH DIGIT THREE -> '3' */ 3313 - { 0x14, 0x34 }, /* FULLWIDTH DIGIT FOUR -> '4' */ 3314 - { 0x15, 0x35 }, /* FULLWIDTH DIGIT FIVE -> '5' */ 3315 - { 0x16, 0x36 }, /* FULLWIDTH DIGIT SIX -> '6' */ 3316 - { 0x17, 0x37 }, /* FULLWIDTH DIGIT SEVEN -> '7' */ 3317 - { 0x18, 0x38 }, /* FULLWIDTH DIGIT EIGHT -> '8' */ 3318 - { 0x19, 0x39 }, /* FULLWIDTH DIGIT NINE -> '9' */ 3319 - { 0x1A, 0x3A }, /* FULLWIDTH COLON -> ':' */ 3320 - { 0x1B, 0x3B }, /* FULLWIDTH SEMICOLON -> ';' */ 3321 - { 0x1C, 0x3C }, /* FULLWIDTH LESS-THAN SIGN -> '<' */ 3322 - { 0x1D, 0x3D }, /* FULLWIDTH EQUALS SIGN -> '=' */ 3323 - { 0x1E, 0x3E }, /* FULLWIDTH GREATER-THAN SIGN -> '>' */ 3324 - { 0x1F, 0x3F }, /* FULLWIDTH QUESTION MARK -> '?' */ 3325 - { 0x20, 0x40 }, /* FULLWIDTH COMMERCIAL AT -> '@' */ 3326 - { 0x21, 0x41 }, /* FULLWIDTH LATIN CAPITAL LETTER A -> 'A' */ 3327 - { 0x22, 0x42 }, /* FULLWIDTH LATIN CAPITAL LETTER B -> 'B' */ 3328 - { 0x23, 0x43 }, /* FULLWIDTH LATIN CAPITAL LETTER C -> 'C' */ 3329 - { 0x24, 0x44 }, /* FULLWIDTH LATIN CAPITAL LETTER D -> 'D' */ 3330 - { 0x25, 0x45 }, /* FULLWIDTH LATIN CAPITAL LETTER E -> 'E' */ 3331 - { 0x26, 0x46 }, /* FULLWIDTH LATIN CAPITAL LETTER F -> 'F' */ 3332 - { 0x27, 0x47 }, /* FULLWIDTH LATIN CAPITAL LETTER G -> 'G' */ 3333 - { 0x28, 0x48 }, /* FULLWIDTH LATIN CAPITAL LETTER H -> 'H' */ 3334 - { 0x29, 0x49 }, /* FULLWIDTH LATIN CAPITAL LETTER I -> 'I' */ 3335 - { 0x2A, 0x4A }, /* FULLWIDTH LATIN CAPITAL LETTER J -> 'J' */ 3336 - { 0x2B, 0x4B }, /* FULLWIDTH LATIN CAPITAL LETTER K -> 'K' */ 3337 - { 0x2C, 0x4C }, /* FULLWIDTH LATIN CAPITAL LETTER L -> 'L' */ 3338 - { 0x2D, 0x4D }, /* FULLWIDTH LATIN CAPITAL LETTER M -> 'M' */ 3339 - { 0x2E, 0x4E }, /* FULLWIDTH LATIN CAPITAL LETTER N -> 'N' */ 3340 - { 0x2F, 0x4F }, /* FULLWIDTH LATIN CAPITAL LETTER O -> 'O' */ 3341 - { 0x30, 0x50 }, /* FULLWIDTH LATIN CAPITAL LETTER P -> 'P' */ 3342 - { 0x31, 0x51 }, /* FULLWIDTH LATIN CAPITAL LETTER Q -> 'Q' */ 3343 - { 0x32, 0x52 }, /* FULLWIDTH LATIN CAPITAL LETTER R -> 'R' */ 3344 - { 0x33, 0x53 }, /* FULLWIDTH LATIN CAPITAL LETTER S -> 'S' */ 3345 - { 0x34, 0x54 }, /* FULLWIDTH LATIN CAPITAL LETTER T -> 'T' */ 3346 - { 0x35, 0x55 }, /* FULLWIDTH LATIN CAPITAL LETTER U -> 'U' */ 3347 - { 0x36, 0x56 }, /* FULLWIDTH LATIN CAPITAL LETTER V -> 'V' */ 3348 - { 0x37, 0x57 }, /* FULLWIDTH LATIN CAPITAL LETTER W -> 'W' */ 3349 - { 0x38, 0x58 }, /* FULLWIDTH LATIN CAPITAL LETTER X -> 'X' */ 3350 - { 0x39, 0x59 }, /* FULLWIDTH LATIN CAPITAL LETTER Y -> 'Y' */ 3351 - { 0x3A, 0x5A }, /* FULLWIDTH LATIN CAPITAL LETTER Z -> 'Z' */ 3352 - { 0x3B, 0x5B }, /* FULLWIDTH LEFT SQUARE BRACKET -> '[' */ 3353 - { 0x3C, 0x5C }, /* FULLWIDTH REVERSE SOLIDUS -> '\' */ 3354 - { 0x3D, 0x5D }, /* FULLWIDTH RIGHT SQUARE BRACKET -> ']' */ 3355 - { 0x3E, 0x5E }, /* FULLWIDTH CIRCUMFLEX ACCENT -> '^' */ 3356 - { 0x3F, 0x5F }, /* FULLWIDTH LOW LINE -> '_' */ 3357 - { 0x40, 0x60 }, /* FULLWIDTH GRAVE ACCENT -> '`' */ 3358 - { 0x41, 0x61 }, /* FULLWIDTH LATIN SMALL LETTER A -> 'a' */ 3359 - { 0x42, 0x62 }, /* FULLWIDTH LATIN SMALL LETTER B -> 'b' */ 3360 - { 0x43, 0x63 }, /* FULLWIDTH LATIN SMALL LETTER C -> 'c' */ 3361 - { 0x44, 0x64 }, /* FULLWIDTH LATIN SMALL LETTER D -> 'd' */ 3362 - { 0x45, 0x65 }, /* FULLWIDTH LATIN SMALL LETTER E -> 'e' */ 3363 - { 0x46, 0x66 }, /* FULLWIDTH LATIN SMALL LETTER F -> 'f' */ 3364 - { 0x47, 0x67 }, /* FULLWIDTH LATIN SMALL LETTER G -> 'g' */ 3365 - { 0x48, 0x68 }, /* FULLWIDTH LATIN SMALL LETTER H -> 'h' */ 3366 - { 0x49, 0x69 }, /* FULLWIDTH LATIN SMALL LETTER I -> 'i' */ 3367 - { 0x4A, 0x6A }, /* FULLWIDTH LATIN SMALL LETTER J -> 'j' */ 3368 - { 0x4B, 0x6B }, /* FULLWIDTH LATIN SMALL LETTER K -> 'k' */ 3369 - { 0x4C, 0x6C }, /* FULLWIDTH LATIN SMALL LETTER L -> 'l' */ 3370 - { 0x4D, 0x6D }, /* FULLWIDTH LATIN SMALL LETTER M -> 'm' */ 3371 - { 0x4E, 0x6E }, /* FULLWIDTH LATIN SMALL LETTER N -> 'n' */ 3372 - { 0x4F, 0x6F }, /* FULLWIDTH LATIN SMALL LETTER O -> 'o' */ 3373 - { 0x50, 0x70 }, /* FULLWIDTH LATIN SMALL LETTER P -> 'p' */ 3374 - { 0x51, 0x71 }, /* FULLWIDTH LATIN SMALL LETTER Q -> 'q' */ 3375 - { 0x52, 0x72 }, /* FULLWIDTH LATIN SMALL LETTER R -> 'r' */ 3376 - { 0x53, 0x73 }, /* FULLWIDTH LATIN SMALL LETTER S -> 's' */ 3377 - { 0x54, 0x74 }, /* FULLWIDTH LATIN SMALL LETTER T -> 't' */ 3378 - { 0x55, 0x75 }, /* FULLWIDTH LATIN SMALL LETTER U -> 'u' */ 3379 - { 0x56, 0x76 }, /* FULLWIDTH LATIN SMALL LETTER V -> 'v' */ 3380 - { 0x57, 0x77 }, /* FULLWIDTH LATIN SMALL LETTER W -> 'w' */ 3381 - { 0x58, 0x78 }, /* FULLWIDTH LATIN SMALL LETTER X -> 'x' */ 3382 - { 0x59, 0x79 }, /* FULLWIDTH LATIN SMALL LETTER Y -> 'y' */ 3383 - { 0x5A, 0x7A }, /* FULLWIDTH LATIN SMALL LETTER Z -> 'z' */ 3384 - { 0x5B, 0x7B }, /* FULLWIDTH LEFT CURLY BRACKET -> '{' */ 3385 - { 0x5C, 0x7C }, /* FULLWIDTH VERTICAL LINE -> '|' */ 3386 - { 0x5D, 0x7D }, /* FULLWIDTH RIGHT CURLY BRACKET -> '}' */ 3387 - { 0x5E, 0x7E }, /* FULLWIDTH TILDE -> '~' */ 3388 3294 { 0x61, 0x2E }, /* HALFWIDTH IDEOGRAPHIC FULL STOP -> '.' */ 3389 3295 { 0x62, 0x5B }, /* HALFWIDTH LEFT CORNER BRACKET -> '[' */ 3390 3296 { 0x63, 0x5D }, /* HALFWIDTH RIGHT CORNER BRACKET -> ']' */