fork download
  1. : ?>
  2. BEGIN
  3. SOURCE >IN @ /STRING 2DUP
  4. S" <?" SEARCH NIP
  5. IF
  6. NIP OVER -
  7. DUP 2 + >IN +!
  8. STATE @ IF
  9. POSTPONE SLITERAL
  10. ['] TYPE COMPILE,
  11. ELSE
  12. TYPE
  13. THEN
  14. TRUE
  15. ELSE
  16. DROP
  17. STATE @ IF
  18. POSTPONE SLITERAL
  19. ['] TYPE COMPILE,
  20. ['] CR COMPILE,
  21. ELSE
  22. TYPE CR
  23. THEN
  24. REFILL 0=
  25. THEN
  26. UNTIL
  27. ; IMMEDIATE
  28.  
  29. :noname ?>
  30. void add_SSE(uint8_t a[static 7], uint8_t b[static 7], uint8_t out[static 7])
  31. {
  32. uint64_t a_64 = 0;
  33. uint64_t b_64 = 0;
  34. <? 7 0 do ?>
  35. a_64 |= (uint64_t)a[ <? i . ?> ] << ( <? i . ?> *9);
  36. b_64 |= (uint64_t)b[ <? i . ?> ] << ( <? i . ?> *9);
  37. <? loop ?>
  38.  
  39. uint64_t c_64 = a_64 + b_64;
  40.  
  41. <? 7 0 do ?>
  42. out[ <? i . ?> ] = (uint64_t)c_64 >> ( <? i . ?> *9);
  43. <? loop ?>
  44. } <? ; execute
Success #stdin #stdout 0s 22520KB
stdin
Standard input is empty
stdout
void add_SSE(uint8_t a[static 7], uint8_t b[static 7], uint8_t out[static 7])
{
  uint64_t a_64 = 0;
  uint64_t b_64 = 0;
  
    a_64 |= (uint64_t)a[ 0 ] << ( 0 *9);
    b_64 |= (uint64_t)b[ 0 ] << ( 0 *9);
  
    a_64 |= (uint64_t)a[ 1 ] << ( 1 *9);
    b_64 |= (uint64_t)b[ 1 ] << ( 1 *9);
  
    a_64 |= (uint64_t)a[ 2 ] << ( 2 *9);
    b_64 |= (uint64_t)b[ 2 ] << ( 2 *9);
  
    a_64 |= (uint64_t)a[ 3 ] << ( 3 *9);
    b_64 |= (uint64_t)b[ 3 ] << ( 3 *9);
  
    a_64 |= (uint64_t)a[ 4 ] << ( 4 *9);
    b_64 |= (uint64_t)b[ 4 ] << ( 4 *9);
  
    a_64 |= (uint64_t)a[ 5 ] << ( 5 *9);
    b_64 |= (uint64_t)b[ 5 ] << ( 5 *9);
  
    a_64 |= (uint64_t)a[ 6 ] << ( 6 *9);
    b_64 |= (uint64_t)b[ 6 ] << ( 6 *9);
  
  
  uint64_t c_64 = a_64 + b_64;
  
  
    out[ 0 ] = (uint64_t)c_64 >> ( 0 *9);
  
    out[ 1 ] = (uint64_t)c_64 >> ( 1 *9);
  
    out[ 2 ] = (uint64_t)c_64 >> ( 2 *9);
  
    out[ 3 ] = (uint64_t)c_64 >> ( 3 *9);
  
    out[ 4 ] = (uint64_t)c_64 >> ( 4 *9);
  
    out[ 5 ] = (uint64_t)c_64 >> ( 5 *9);
  
    out[ 6 ] = (uint64_t)c_64 >> ( 6 *9);
  
}