Articles of ensamblaje

La forma más rápida de calcular un módulo entero de 128 bits un entero de 64 bits

Tengo un entero A de 128 bits sin signo y un entero sin signo de 64 bits B. ¿Cuál es la forma más rápida de calcular A % B , es decir, el rest (de 64 bits) de dividir A entre B? Estoy buscando hacer esto en C o en lenguaje ensamblador, pero tengo que […]

Qué significa “rep; nop; “¿significa en ensamblaje x86? ¿Es lo mismo que la instrucción de “pausa”?

¿Qué hace rep; nop rep; nop significa? ¿Es lo mismo que la instrucción de pause ? ¿Es lo mismo que rep nop (sin el punto y coma)? ¿Cuál es la diferencia con la instrucción simple nop ? ¿Se comporta de manera diferente en los procesadores AMD e Intel? (bonificación) ¿Dónde está la documentación oficial para […]

_addcarry_u64 y _addcarryx_u64 con MSVC e ICC

Tanto _addcarry_u64 como ICC admiten los intrínsecos _addcarry_u64 y _addcarryx_u64 . De acuerdo con la Guía intrínseca de Intel y el libro blanco, estos deben adcx a adcx y adox respectivamente. Sin embargo, al observar el ensamblaje generado, está claro que se asignan a adc y adcx respectivamente, y no hay ningún intrínseco que se […]

Optimice para una multiplicación rápida pero lenta: FMA y doubledouble

Cuando obtuve por primera vez un procesador Haswell, traté de implementar FMA para determinar el conjunto de Mandelbrot. El algoritmo principal es este: intn = 0; for(int32_t i=0; i<maxiter; i++) { floatn x2 = square(x), y2 = square(y); //square(x) = x*x floatn r2 = x2 + y2; booln mask = r2<cut; //booln is in the […]

¿Por qué usar LDR sobre MOV (o viceversa) en el ensamblaje de ARM?

Estoy mirando este tutorial: http://www.cl.cam.ac.uk/freshers/raspberrypi/tutorials/os/ok01.html La primera línea de ensamblaje es: ldr r0,=0x20200000 el segundo es: mov r1,#1 Pensé que ldr era para cargar valores de la memoria en registros. Pero parece que = significa que el 0x20200000 es un valor, no una dirección de memoria. Ambas líneas parecen estar cargando los valores absolutos.

imprimir una variable __m128i

Estoy tratando de aprender a codificar usando intrínsecos y abajo hay un código que hace la adición compiler used: icc #include #include int main() { __m128i a = _mm_set_epi32(1,2,3,4); __m128i b = _mm_set_epi32(1,2,3,4); __m128i c; c = _mm_add_epi32(a,b); printf(“%d\n”,c[2]); return 0; } Me sale el siguiente error: test.c(9): error: expression must have pointer-to-object type printf(“%d\n”,c[2]); […]

¿El modelo de memoria Intel hace que SFENCE y LFENCE sean redundantes?

El modelo de memoria Intel garantiza: Las tiendas no se reordenarán con otras tiendas Las cargas no se reordenarán con otras cargas http://bartoszmilewski.com/2008/11/05/who-ordered-memory-fences-on-an-x86/ He visto afirmaciones de que SFENCE es redundante en x86-64 debido al modelo de memoria Intel, pero nunca LFENCE. ¿Las reglas del modelo de memoria anterior hacen que las instrucciones sean redundantes?

¿Por qué la PC ARM registra el punto de la instrucción después de la siguiente para ser ejecutado?

De acuerdo con el ARM IC. En el estado ARM, el valor de la PC es la dirección de la instrucción actual más 8 bytes. En estado de pulgar: Para las instrucciones B, BL, CBNZ y CBZ, el valor de la PC es la dirección de la instrucción actual más 4 bytes. Para todas las […]

Cómo escribir código de auto modificación en ensamblaje x86

Estoy buscando escribir un comstackdor JIT para una máquina virtual de hobby en la que he estado trabajando recientemente. Sé un poco de ensamblaje, (soy principalmente un progtwigdor de C. Puedo leer la mayoría del ensamblaje con referencia para los códigos de operación que no entiendo, y escribir algunos progtwigs simples.) Pero estoy teniendo dificultades […]

La operación de búsqueda TSC de la CPU especialmente en el entorno multinúcleo-procesador múltiple

En el mundo de Linux, para obtener temporizadores / indicadores de precisión de nano segundos uno puede usar: #include int foo() { timespec ts; clock_gettime(CLOCK_REALTIME, &ts); //–snip– } Esta respuesta sugiere un enfoque asm para consultar directamente el reloj de la CPU con la instrucción RDTSC . En una architecture multi-core, multiprocesador, ¿cómo se sincroniza […]