Inspirado por una recent question, me gustaría saber si alguien sabe cómo conseguir gcc
para generar la instrucción x86-64 bts
(prueba de bits y establecer) en plataformas Linux x86-64, y sin recurrir a la asamblea o inline a los intrínsecos del compilador no estándar.¿Cómo hacer que `gcc` genere la instrucción` bts` para x86-64 del estándar C?
preguntas relacionadas:
Why doesn't gcc do this for a simple
|=
operation were the right-hand side has exactly 1 bit set?How to get
bts
using compiler intrinsics or theasm
directive
portabilidad es más importante para mí que bts
, por lo que no voy a usar y asm
Directiva, y si hay otra solución, prefiero no utilizar instrinsics del compilador.
EDITAR: El lenguaje C fuente no soporta operaciones atómicas, así que no estoy particularmente interesado en conseguir atómica prueba-y-set (a pesar de que esa es la razón original para la prueba-y-set de existir en primer lugar). Si quiero algo atómico, sé que no tengo ninguna posibilidad de hacerlo con la fuente C estándar: tiene que ser una función intrínseca, de biblioteca o en línea. (He implementado operaciones atómicas en compiladores que admiten varios hilos).
Hmm, buena pregunta. Veo 'vtst_ *' para vector bit-test en ARM + NEON, pero nada más general ... – ephemient
Si bts es realmente más rápido, envíe un informe de error. Estoy seguro de que los programadores de gcc ya conocen la existencia de bts. Después de todo, un compilador no debe mapear 1: 1. – jbcreix
Mejor aún, envíe un parche para usar bts junto con testcases que puedan perfilarse para demostrar que la optimización vale la pena. –