Примечание
Вы можете улучшить конвейер (если вы кодируете на C, компилятор сделает это за вас) и использовать интервал задержки инструкции bne
. Это улучшит ваш параллелизм на уровне команд .
Предполагая, что у вас есть что-то вроде процессора Mips с 1 слотом задержки и 5-ступенчатым конвейером (извлечение инструкций, декодирование, выполнение, память, обратная запись).
Этот конвейер вводит Read After Write Опасности, связанные с зависимостью от данных, больше всего были в $3
регистре.
Атака RaW приводит к остановке вашего трубопровода.
# Reverse the order of data in Reference and store it in $02
Loop: and $03, $01, $06 # mask out one piece ($03 = Reference & $06)
addi $04, $04, -1 # decrement Loop counter (RaW on $3)
sllv $03, $03, $05 # shift piece to new position ($03 <<= $05)
sllv $06, $06, $05 # shift mask for next piece
or $02, $02, $03 # put piece into $02 ($02 |= $03)
and $03, $01, $06 # mask out next piece (#03 = Reference & $06)
srlv $06, $06, $05 # shift mask back
srlv $03, $03, $05 # shift piece to new position ($03 >>= $05)
addi $05, $05, -4 # decrease shift amount by 4
or $02, $02, $03 # put new piece into $02 ($02 |= $03)
bne $04, [110], Loop # keep looping while $04 != 0
sll $06, $06, 2 # shift mask for next loop
Если у вас суперскалярный процессор, решение нуждается в некоторых изменениях.
Это выражение выполнит свою работу.
^(?:.(?<!Polarion))*$
Оно использует утверждение отрицательного просмотра назад нулевой ширины, чтобы утверждать, что строка не содержит "полярион".
^ Anchor to start of string (?: Non-capturing group . Match any character (?<!Polarion) Zero-width negative lookbehind assertion - text to the left of the current position must not be "Polarion" ) * Zero or more times $ Anchor to end of string
Следующая версия будет выполнять утверждение только после «n» - может быть, это будет быстрее, а может быть, медленнее.
^(?:[^n]*|n(?<!Polarion))*$
Было бы проще, если бы вы заставили ваше регулярное выражение соответствовать тому, что вы ищете, а затем отмените результаты.
Большинство инструментов, использующих Regex, позволяют отменить результаты поиска, обычно вызывая опция 'v' для in V ert (сохраняя i для case- I nsensitive):
например
grep -v <search>
find /v <search>
и т. д.
Вот решение, использующее отрицательный просмотр вперед, который поддерживается более широко, чем просмотр назад:
^Message:(?!Polarion).*$
(Кроме того, поскольку мы знаем, где может появиться Полярион, нам не нужно делать ничего из бессмысленные причуды, предложенные Дэниелом.)
Объяснение приведенного выше выражения в форме комментария регулярного выражения:
(?x) # Enable comments
^ # Start of string (start of line in multiline mode)
Message: # Literal text
(?! # Begin negative lookahead
Polarion # Literal text
) # End negative lookahead
.* # Greedily match any number of any character
$ # End of string (end of line in multiline mode)
Я не смог найти никакой информации о том, какой движок регулярных выражений использует TortoiseSVN, но вы можете спросить в списке рассылки . Не все механизмы поддерживают расширенные функции, такие как отрицательный просмотр с нулевой шириной.