Няшная / Говнокод #27660 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
for (size_t i = 0; i < 4; ++i) {
    __m128 x0 = _mm_loadu_ps((const float*)blocks[0] + i * 4);
    __m128 x1 = _mm_loadu_ps((const float*)blocks[1] + i * 4);
    __m128 x2 = _mm_loadu_ps((const float*)blocks[2] + i * 4);
    __m128 x3 = _mm_loadu_ps((const float*)blocks[3] + i * 4);
 
    __m128 t0 = _mm_unpacklo_ps(x0, x1);
    __m128 t1 = _mm_unpackhi_ps(x0, x1);
    __m128 t2 = _mm_unpacklo_ps(x2, x3);
    __m128 t3 = _mm_unpackhi_ps(x2, x3);
 
    x[i * 4 + 0] = _mm_castps_si128(_mm_movelh_ps(t0, t2));
    x[i * 4 + 1] = _mm_castps_si128(_mm_movehl_ps(t2, t0));
    x[i * 4 + 2] = _mm_castps_si128(_mm_movelh_ps(t1, t3));
    x[i * 4 + 3] = _mm_castps_si128(_mm_movehl_ps(t3, t1));
}

4х MD5

https://ideone.com/a8YcZ8

bormand bormand, (Updated )

Комментарии (193, +193)

Няшная / Говнокод #27641 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
// https://github.com/layerfsd/WorkPlatForm/blob/f14a8cdd2bc3772ea4bd37a0381f5f8305a0a2c2/Common/BuilDefine.h

// source file build_defs.h

#ifndef BUILD_DEFS_H

#define BUILD_DEFS_H

#define VERSION_MAJOR 1
// Example of __DATE__ string: "Jul 27 2012"
//                              01234567890

#define BUILD_YEAR_CH0 (__DATE__[ 7])
#define BUILD_YEAR_CH1 (__DATE__[ 8])
#define BUILD_YEAR_CH2 (__DATE__[ 9])
#define BUILD_YEAR_CH3 (__DATE__[10])


#define BUILD_MONTH_IS_JAN (__DATE__[0] == 'J' && __DATE__[1] == 'a' && __DATE__[2] == 'n')
#define BUILD_MONTH_IS_FEB (__DATE__[0] == 'F')
#define BUILD_MONTH_IS_MAR (__DATE__[0] == 'M' && __DATE__[1] == 'a' && __DATE__[2] == 'r')
#define BUILD_MONTH_IS_APR (__DATE__[0] == 'A' && __DATE__[1] == 'p')
#define BUILD_MONTH_IS_MAY (__DATE__[0] == 'M' && __DATE__[1] == 'a' && __DATE__[2] == 'y')
#define BUILD_MONTH_IS_JUN (__DATE__[0] == 'J' && __DATE__[1] == 'u' && __DATE__[2] == 'n')
#define BUILD_MONTH_IS_JUL (__DATE__[0] == 'J' && __DATE__[1] == 'u' && __DATE__[2] == 'l')
#define BUILD_MONTH_IS_AUG (__DATE__[0] == 'A' && __DATE__[1] == 'u')
#define BUILD_MONTH_IS_SEP (__DATE__[0] == 'S')
#define BUILD_MONTH_IS_OCT (__DATE__[0] == 'O')
#define BUILD_MONTH_IS_NOV (__DATE__[0] == 'N')
#define BUILD_MONTH_IS_DEC (__DATE__[0] == 'D')


#define BUILD_MONTH_CH0 \
	((BUILD_MONTH_IS_OCT || BUILD_MONTH_IS_NOV || BUILD_MONTH_IS_DEC) ? '1' : '0')

#define BUILD_MONTH_CH1 \
	( \
	(BUILD_MONTH_IS_JAN) ? '1' : \
	(BUILD_MONTH_IS_FEB) ? '2' : \
	(BUILD_MONTH_IS_MAR) ? '3' : \
	(BUILD_MONTH_IS_APR) ? '4' : \
	(BUILD_MONTH_IS_MAY) ? '5' : \
	(BUILD_MONTH_IS_JUN) ? '6' : \
	(BUILD_MONTH_IS_JUL) ? '7' : \
	(BUILD_MONTH_IS_AUG) ? '8' : \
	(BUILD_MONTH_IS_SEP) ? '9' : \
	(BUILD_MONTH_IS_OCT) ? '0' : \
	(BUILD_MONTH_IS_NOV) ? '1' : \
	(BUILD_MONTH_IS_DEC) ? '2' : \
	/* error default */    '?' \
	)

#define BUILD_DAY_CH0 ((__DATE__[4] >= '0') ? (__DATE__[4]) : '0')
#define BUILD_DAY_CH1 (__DATE__[ 5])


#define BUILD_HOUR_CH0 (__TIME__[0])
#define BUILD_HOUR_CH1 (__TIME__[1])

#define BUILD_MIN_CH0 (__TIME__[3])
#define BUILD_MIN_CH1 (__TIME__[4])

#define BUILD_SEC_CH0 (__TIME__[6])
#define BUILD_SEC_CH1 (__TIME__[7])


#if VERSION_MAJOR > 100

#define VERSION_MAJOR_INIT \
	((VERSION_MAJOR / 100) + '0'), \
	(((VERSION_MAJOR % 100) / 10) + '0'), \
	((VERSION_MAJOR % 10) + '0')

#elif VERSION_MAJOR > 10

#define VERSION_MAJOR_INIT \
	((VERSION_MAJOR / 10) + '0'), \
	((VERSION_MAJOR % 10) + '0')

#else

#define VERSION_MAJOR_INIT \
	(VERSION_MAJOR + '0')

#endif


#endif // BUILD_DEFS_H

Генерация даты через разковыривание макроса __DATE__

j123123 j123123, (Updated )

Комментарии (14, +14)

Няшная / Говнокод #27629 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
// https://github.com/mailru/confetti/blob/63ed82c65a7fbcd2baf8a67f1b7410e044dfd1dd/h_dump.c#L44

static void
dumpParamDef(FILE *fh, char* name, ParamDef *def) {
	
	dumpComment(fh, def, 1);
	
	switch(def->paramType) {
		case	int32Type:
			fprintf(fh, "\tint32_t\t%s;\n", def->name);
			break;
		case	uint32Type:
			fprintf(fh, "\tu_int32_t\t%s;\n", def->name);
			break;
		case	int64Type:
			fprintf(fh, "\tint64_t\t%s;\n", def->name);
			break;
		case	uint64Type:
			fprintf(fh, "\tu_int64_t\t%s;\n", def->name);
			break;
		case	doubleType:
			fprintf(fh, "\tdouble\t%s;\n", def->name);
			break;
		case	stringType:
			fprintf(fh, "\tchar*\t%s;\n", def->name);
			break;
		case	boolType:
			fprintf(fh, "\tconfetti_bool_t\t%s;\n", def->name);
			break;
		case	commentType:
			fprintf(stderr, "Unexpected comment"); 
			break;
		case	structType:
			fprintf(fh, "\t%s", name);
			dumpStructName(fh, def->paramValue.structval, "_");
			fprintf(fh, "*\t%s;\n", def->name);
			break;
		case	arrayType:
			fprintf(fh, "\t%s", name);
			dumpStructName(fh, def->paramValue.arrayval->paramValue.structval, "_");
			fprintf(fh, "**\t%s;\n", def->name);
			break;
		case 	builtinType:
			break;
		default:
			fprintf(stderr,"Unknown paramType (%d)\n", def->paramType);
			exit(1);
	}
}

Какое же говно эта ваша сишка. А в крестоговне эта задача легко и элегантно решается, правда ведь?

j123123 j123123, (Updated )

Комментарии (76, +76)

Няшная / Говнокод #27584 Ссылка на оригинал

0

  1. 1
- Я так раньше никогда не делала. Мне понравилось. А тебее? - сказала она после того, как я влил в неё свой заряд и, уставший, уселся прямо на ковролин на полу кабинета.

- Я так раньше никогда не делала. Мне понравилось. А тебее? - сказала она после того, как я влил в неё свой заряд и, уставший, уселся прямо на ковролин на полу кабинета.

ajtkulov ajtkulov, (Updated )

Комментарии (5, +5)

Няшная / Говнокод #27559 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
#include <stdlib.h>
#include <stdio.h>
#include <inttypes.h>

#define STRING 0
#define INTEGER 1


#define CAT(x,y) x ## _ ## y
#define J(x,y)  CAT(x,y)


typedef union
{
  char *J(v, STRING);
  int J(v,INTEGER);
} Un;

typedef struct
{
  uint8_t Obj_t;
  Un u;
} Object;

#define IF_INSTOF(var, t, newvar) \
if(var.Obj_t == t) \
{ \
  typeof(var.u.J(v,t)) *newvar = &var.u.J(v,t);

int main(void)
{
  Object obj1 = {STRING, {.J(v,STRING) = "1"}};
  
  IF_INSTOF(obj1,STRING,str)
    printf("String: %s\n", *str);
  }
  else
  {
    printf("Not a string\n");
  }

  Object obj2 = {INTEGER, {.J(v,INTEGER) = 1}};
  IF_INSTOF(obj2,INTEGER,i)
    printf("Integer: %d\n", *i);
  }
  else
  {
    printf("Not an Integer\n");
  }

  return EXIT_SUCCESS;
}

Вот такие смарткасты через препроцессор.

https://govnokod.ru/27556#comment655527

j123123 j123123, (Updated )

Комментарии (32, +32)

Няшная / Говнокод #27541 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
/* https://fstarlang.github.io/lowstar/html/Introduction.html#the-essence-of-low

Consider the following very simple program:

module Intro

module P = LowStar.Printf
module C = LowStar.Comment
module B = LowStar.Buffer

open FStar.HyperStack.ST
open LowStar.BufferOps

let main (): St Int32.t =
  push_frame ();
  let b: B.buffer UInt32.t = B.alloca 0ul 8ul in
  b.(0ul) <- 255ul;
  C.comment "Calls to printf are desugared via meta-programming";
  let s = "from Low*!" in
  P.(printf "Hello from %s\nbuffer contents: %xul\n"
    s 8ul b done);
  pop_frame ();
  0l

....

Once compiled by the KreMLin compiler, we obtain the following C code:
*/

int32_t main()
{
  uint32_t b[8U] = { 0U };
  b[0U] = (uint32_t)255U;
  /* Calls to printf are desugared via meta-programming */
  Prims_string s = "from Low*!";
  LowStar_Printf_print_string("Hello from ");
  LowStar_Printf_print_string(s);
  LowStar_Printf_print_string("\nbuffer contents: ");
  LowStar_Printf_print_lmbuffer_u32((uint32_t)8U, (uint32_t *)b);
  LowStar_Printf_print_string("\n");
  return (int32_t)0;
}

Какая-то компилируемая в сишку хренотень с завтипами, разрабатываемая в Microsoft Research

j123123 j123123, (Updated )

Комментарии (66, +66)

Няшная / Говнокод #27535 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
void* execute_thread(void* arg)
{
    int i;
    int interval;

    //Период контроля времени задаётся с точностью в 10мс.
    //Контролировать в данной реализации таймера точность в 1мс не имеет смысла,
    //так как это почти не возможно и, как правило, не требуется,
    //а крутить проверку таймеров с такой частотой только "пожерать" ресурсы процессора.

    struct timespec sleep_period = {0,9999999}; //Период, почти 10 мс

    do {
        for(i=0;i<n_timers;i++){
            if(timers[i]->enable == false){
                //Если таймер не активный, то присваиваем ему начальное значение
                clock_gettime(CLOCK_REALTIME, &timers[i]->time_before);
            }
        }
        //Засыпаем на 10мс
        nanosleep(&sleep_period , NULL);

        for(i=0;i<n_timers;i++){
            if(timers[i]->enable == true){
                //Получаем текущее значение времени.
                clock_gettime(CLOCK_REALTIME, &timers[i]->time_after);
                //Вычисляем прошедшее время ожидания
                interval = ((timers[i]->time_after.tv_sec-timers[i]->time_before.tv_sec)*1000000000 
                            +timers[i]->time_after.tv_nsec-timers[i]->time_before.tv_nsec)/1000000; 
                //Проверяем условие, если ОК, то обновляем время и формируем событие
                if(interval >= timers[i]->interval){
                    clock_gettime(CLOCK_REALTIME, &timers[i]->time_before);
                    timers[i]->listener->on_time(timers[i]);
                }
            }
        }
     } while (terminate == false);
}

https://habr.com/ru/post/569392/
> Объектно-ориентированное программирование на Си без плюсов. Часть 2. Таймер

PolinaAksenova PolinaAksenova, (Updated )

Комментарии (6, +6)

Няшная / Говнокод #27525 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>

typedef struct list list;

struct list
{
  list* next;
  uint32_t data;
};

#define ADD_LIST(ptr, val) \
do { \
  (ptr)->next = (list *)alloca(sizeof(list)); \
  (ptr)->next->data = val; \
  (ptr)->next->next = NULL;\
} while (0)

// https://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html
#define INIT_LIST(val) \
({ \
  list *INIT_LIST = (list *)alloca(sizeof(list)); \
  INIT_LIST->data = val; \
  INIT_LIST->next = NULL; \
  INIT_LIST; \
})


int main(void)
{
  list *a = INIT_LIST(5);
  ADD_LIST(a,10);
  ADD_LIST(a->next,15);
  ADD_LIST(a->next->next,20);
  ADD_LIST(a->next->next->next,25);
  ADD_LIST(a->next->next->next->next,30);

  for(list *ptr = a; ptr != NULL; ptr = ptr->next)
  {
    printf("%d ", ptr->data);
  }

  return EXIT_SUCCESS;
}

А можно ли в крестоговне так сделать без Сишного Препроцессора?

j123123 j123123, (Updated )

Комментарии (93, +93)