Ked uz sa tam spominaju tie aritmeticke/logicke posuny... vidim, ze tie SIMD instrukcie su asymetricke, cize maju logicky posun doprava a dolava, ale len aritmeticky posun doprava.
Podobne je to aj pri x86 instrukcnej sade, kde SAL = SHL (maju rovnaky operacny kod).
Preco potom ale niektore CPUs, napriklad m68k, obsahuju vsetky styri instrukcie? Na m68k je jediny rozdiel medzi ASL a LSL hodnota "V" (overflow) flagu, ktory je pri LSL vzdy 0, inak su tie instrukcie identicke.
Vie si niekto predstavit nejake prakticke vyuzitie tohto rozdielu?
Aritmetický posun doleva nedává příliš smysl. Aritmetický posun doprava zachovává sign-bit, to v případě posunu doleva neexistuje.
Pokud m68k umí posouvat přes overflow flag, tak x86 má na tohle instrukce taky - RCL a RCR - ale to je posun s přenosem, ne aritmetický posun.
18. 2. 2025, 16:33 editováno autorem komentáře
Ještě se sám upřesním - ty 680x0 ASR a ASL nedělají posun přes carry flag, ASL jenom nastavuje V (signed overflow) flag. Příliš smysl mi to nedává a už vůbec, proč na to mají speciální instrukci a není to jen jako side-effect u LSL (předpokládám, že snaha vyhnout se modifikacím flags z důvodu pipeline optimalizace to v 70-tých letech ještě nebyla). Intel x86 má zmíněné SHL, SHR a SAR, které nastavují carry flag vždycky, signed overflow flag při posunu o 1 a ostatní flags podle obvyklých pravidel. Přičemž prakticky použitelný je jen ten Carry flag pro víceslovný posun. RCL a RCR se pak dají použít pro pokračování víceslovného posunu.