Skip to content

Instantly share code, notes, and snippets.

@johnjohnlin
Created May 12, 2025 17:19
Show Gist options
  • Select an option

  • Save johnjohnlin/3ed11ff797e2fe57d3b09599b7eeca7a to your computer and use it in GitHub Desktop.

Select an option

Save johnjohnlin/3ed11ff797e2fe57d3b09599b7eeca7a to your computer and use it in GitHub Desktop.
POC: How to implement large integer addition using only macro
#define _ADD_TABLE00 0,0
#define _ADD_TABLE01 0,1
#define _ADD_TABLE02 0,2
#define _ADD_TABLE03 0,3
#define _ADD_TABLE04 0,4
#define _ADD_TABLE05 0,5
#define _ADD_TABLE06 0,6
#define _ADD_TABLE07 0,7
#define _ADD_TABLE08 0,8
#define _ADD_TABLE09 0,9
#define _ADD_TABLE10 0,1
#define _ADD_TABLE11 0,2
#define _ADD_TABLE12 0,3
#define _ADD_TABLE13 0,4
#define _ADD_TABLE14 0,5
#define _ADD_TABLE15 0,6
#define _ADD_TABLE16 0,7
#define _ADD_TABLE17 0,8
#define _ADD_TABLE18 0,9
#define _ADD_TABLE19 1,0
#define _ADD_TABLE20 0,2
#define _ADD_TABLE21 0,3
#define _ADD_TABLE22 0,4
#define _ADD_TABLE23 0,5
#define _ADD_TABLE24 0,6
#define _ADD_TABLE25 0,7
#define _ADD_TABLE26 0,8
#define _ADD_TABLE27 0,9
#define _ADD_TABLE28 1,0
#define _ADD_TABLE29 1,1
#define _ADD_TABLE30 0,3
#define _ADD_TABLE31 0,4
#define _ADD_TABLE32 0,5
#define _ADD_TABLE33 0,6
#define _ADD_TABLE34 0,7
#define _ADD_TABLE35 0,8
#define _ADD_TABLE36 0,9
#define _ADD_TABLE37 1,0
#define _ADD_TABLE38 1,1
#define _ADD_TABLE39 1,2
#define _ADD_TABLE40 0,4
#define _ADD_TABLE41 0,5
#define _ADD_TABLE42 0,6
#define _ADD_TABLE43 0,7
#define _ADD_TABLE44 0,8
#define _ADD_TABLE45 0,9
#define _ADD_TABLE46 1,0
#define _ADD_TABLE47 1,1
#define _ADD_TABLE48 1,2
#define _ADD_TABLE49 1,3
#define _ADD_TABLE50 0,5
#define _ADD_TABLE51 0,6
#define _ADD_TABLE52 0,7
#define _ADD_TABLE53 0,8
#define _ADD_TABLE54 0,9
#define _ADD_TABLE55 1,0
#define _ADD_TABLE56 1,1
#define _ADD_TABLE57 1,2
#define _ADD_TABLE58 1,3
#define _ADD_TABLE59 1,4
#define _ADD_TABLE60 0,6
#define _ADD_TABLE61 0,7
#define _ADD_TABLE62 0,8
#define _ADD_TABLE63 0,9
#define _ADD_TABLE64 1,0
#define _ADD_TABLE65 1,1
#define _ADD_TABLE66 1,2
#define _ADD_TABLE67 1,3
#define _ADD_TABLE68 1,4
#define _ADD_TABLE69 1,5
#define _ADD_TABLE70 0,7
#define _ADD_TABLE71 0,8
#define _ADD_TABLE72 0,9
#define _ADD_TABLE73 1,0
#define _ADD_TABLE74 1,1
#define _ADD_TABLE75 1,2
#define _ADD_TABLE76 1,3
#define _ADD_TABLE77 1,4
#define _ADD_TABLE78 1,5
#define _ADD_TABLE79 1,6
#define _ADD_TABLE80 0,8
#define _ADD_TABLE81 0,9
#define _ADD_TABLE82 1,0
#define _ADD_TABLE83 1,1
#define _ADD_TABLE84 1,2
#define _ADD_TABLE85 1,3
#define _ADD_TABLE86 1,4
#define _ADD_TABLE87 1,5
#define _ADD_TABLE88 1,6
#define _ADD_TABLE89 1,7
#define _ADD_TABLE90 0,9
#define _ADD_TABLE91 1,0
#define _ADD_TABLE92 1,1
#define _ADD_TABLE93 1,2
#define _ADD_TABLE94 1,3
#define _ADD_TABLE95 1,4
#define _ADD_TABLE96 1,5
#define _ADD_TABLE97 1,6
#define _ADD_TABLE98 1,7
#define _ADD_TABLE99 1,8
#define MY_ADD_ONE0(_,a) a
#define MY_ADD_ONE0_(a) MY_ADD_ONE0(a)
#define MY_ADD_ONE1(a,_,b) MY_ADD_ONE0_(_ADD_TABLE##a##_),b
#define MY_ADD_ONE1_(a,b) MY_ADD_ONE1(a,b)
#define MY_ADD_ONE2(a,b,_,c) MY_ADD_ONE1_(a,_ADD_TABLE##b##_),c
#define MY_ADD_ONE2_(a,b,c) MY_ADD_ONE2(a,b,c)
#define MY_ADD_ONE3(a,b,c,_,d) MY_ADD_ONE2_(a,b,_ADD_TABLE##c##_),d
#define MY_ADD_ONE3_(a,b,c,d) MY_ADD_ONE3(a,b,c,d)
#define MY_ADD_ONE(a,b,c,d) MY_ADD_ONE3_(a,b,c,_ADD_TABLE1##d)
MY_ADD_ONE(0,0,0,2) // 0,0,0,3
MY_ADD_ONE(9,9,9,9) // 0,0,0,0
MY_ADD_ONE(1,4,9,9) // 1,5,0,0
#define MY_ADD_ONE_r(x) MY_ADD_ONE(x)
MY_ADD_ONE_r(MY_ADD_ONE(1,4,9,9)) // 1,5,0,1
MY_ADD_ONE_r(MY_ADD_ONE_r(MY_ADD_ONE(1,4,9,9))) // 1,5,0,2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment