Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

98
Vistas
Comprender la instrucción rlwinm de PowerPC

Así que finalmente me convencí de probar y aprender/usar PowerPC (PPC). Todo va bien y la mayor parte de la información se encontró en línea. Sin embargo, al mirar algunos ejemplos me encontré con esto:

 rlwinm r3, r3, 0,1,1

¿Cómo haría esto en C? Intenté investigar un poco, pero no pude encontrar nada que me ayudara. ¡Gracias por adelantado!

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

rlwinm significa "Rotar palabra a la izquierda inmediatamente, luego y con máscara", y su uso correcto es

 rlwinm RA, RS, SH, MB, ME

Según la página de descripción :

  • RA Especifica el registro de propósito general de destino donde se almacena el resultado de la operación.
  • RS Especifica el registro fuente de propósito general para la operación.
  • SH Especifica el valor de cambio para la operación.
  • MB Especifica el valor inicial de la máscara para la operación.
  • ME Especifica el valor final de la máscara para la operación.
  • BM Especifica el valor de la máscara de 32 bits.

Y

  • Si el valor de MB es menor que el valor de ME + 1, entonces los bits de máscara entre el punto de inicio y el punto final inclusive se establecen en unos. Todos los demás bits se establecen en ceros.
  • Si el valor de MB es el mismo que el valor de ME + 1, los 32 bits de máscara se establecen en unos.
  • Si el valor de MB es mayor que el valor de ME + 1, entonces todos los bits de máscara entre el valor de ME +1 y el valor de MB -1 inclusive se establecen en ceros. Todos los demás bits se establecen en unos.

Entonces, en su ejemplo, la fuente y el destino son los mismos. La cantidad de cambio es 0 , por lo que no hay cambio. Y MB=ME=1 , por lo que se aplica el primer caso, de modo que la máscara se convierte en ceros con el número de bit 1 como 1 , mientras se numera desde MSB=0 : 0x40000000 .

En C podemos escribirlo tan simple como

 a &= 0x40000000;

suponiendo que a es una variable de 32 bits.

over 4 years ago · Santiago Trujillo Denunciar

0

rlwinm gira el valor de un registro dejado por el número especificado, realiza un AND y almacena el resultado en un registro.

Ejemplo: rlwinm r3, r4, 5, 0, 31

r4 es el registro de origen que se rota por 5 y antes de que el resultado rotado se coloque en r3 , también se le aplica AND con una máscara de bits de solo 1 s, ya que el intervalo entre 0 y 31 es el valor completo de 32 bits.

Ejemplo tomado de aquí .

Para una implementación de C , es posible que desee ver cómo girar a la izquierda y cómo AND , que debería ser trivial para construir juntos ahora. Algo como lo siguiente debería funcionar:

 int rotateLeft(int input, int shift) { return (input << shift) | ((input >> (32 - shift)) & ~(-1 << shift)); } int rlwinm(int input, int shift, int mask) { return rotateLeft(input, shift) & mask; }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda