You welcome. The program run on Mac Pro 5.1.painter 2022 on Monterey, Big Sur and Catalina. Some brushes are just not newly “more”!accelerated by the Avx2. Painter pretend some are GPU accelerated on top but there aren’t if Avx2 is missing. It look likes it requires Avx2 + GPU to work together. A lot of brushes are fast enough to work with on 5.1, some big new are to avoid. They are faster on my Late 2013 i7 Macbookpro, with Avx2 but with crappy GPU.This is sad to hear @xb12, but thank you for sharing. I have a family member that will be really sad to hear this as they were talking about upgrading Painter and can't afford to move past their MacPro5,1 for at least another couple years.
Since Corel painter 2019 (launched year 2018) , the Humble bundle company Sold at Fall the previous year Corel painter and gave found for charity. This is nice from Corel company to make it possible. For around 26 bucks you can have some brushes and full legit upgrade licence of the software, just not the last version. Upgrade from Corel website is usually around 220 $, 150 $ on sale once a year. Humble bundle have a newsletter if you want to watch it out. Corel painter number 2023 should launch at summer 2022, humble bundle Corel painter “2022” sale could be around Halloween.This is sad to hear @xb12, but thank you for sharing. I have a family member that will be really sad to hear this as they were talking about upgrading Painter and can't afford to move past their MacPro5,1 for at least another couple years.
True, I ran into "This software requires a CPU that supports the AVX instruction set" just recently when trying to install c4d S26 and am searching for a solution since. Still need to find out if khronokernel's noavx kext wil have any positive effect on that (https://forums.macrumors.com/thread....2180095/page-144?post=31136145#post-31136145).Thanks for your hard work. New Cinema 4D released today need AVX to run
It’s a slippery slope and not easy to handle. In the last months there were several bots/attacks of new registrations spamming the forum.I do not see the point for this forum if a program may not even be named without it being warned as advertising.
OK, thank you.It’s a slippery slope and not easy to handle. In the last months there were several bots/attacks of new registrations spamming the forum.
On the other hand there are legit users like you who register with a specific question/suggestion in mind.
Just understand that you did nothing wrong but (probably) unintentionally triggered some automatism to prevent/reduce spam and take some load of the (mostly volunteering) mods.
Just contact a mod like suggested, they are actual humans and will sort it out.
Check this page for tools to search for SSE4 and AVX/AVX2 opcodes.Not entirely sure if this is AVX related, but I think better reported at here first. So that you can have a look.
There are at least two cMP users have problem of running AQC107S 10Gbps network card since 12.3. So, there is a possibility that Apple also make the AppleEtheretAquantiaAqtion kexts need AVX to function correctly now.
AppleEthernetAquantiaAqtion
does not use any AVX opcodes listed there. Used the same method back last summer to find AVX2 code in the all AMD GLdriver.bundle binaries and in the OpenCL binaries - which broke Ventura support on all pre Haswell systems in a nasty way.Yes I know replying to an old post....@Syncretic:
may you can try the Programs from "Topaz Labs", for example "Gigapixel AI", it needs AVX.
The program runs in full in the demo version, only the saving of a file is failed with a watermark for protection. For testing for an AVX emulator it would probably be suitable.
I wanted to test the program for myself, but with my cMP 5.1 the program crashes immediately when I try it.
I think many photographers still use older Mac systems and would be happy if there is a way to use the programs.
I can also run Gigapixel AI flawlessly on my cMP. So, it seems this software isn't really need AVX.Yes I know replying to an old post....
I have been using Topaz for over a year where Gigapixel AI has zero issues on my MacPro 5.1, where I'm one of the photographers still using an older Mac to process still imagery given the architecture / implementation is still relevant for still images. Though not so much for video given the GPUs we have to work with.
I don't know if Topaz photo AI requires really Avx2 but I with my tryout the AI learning model don't load if no AVX2 CPU.It loads on my Late 2013 MacBook Pro. https://docs.topazlabs.com/photo-ai/system-requirementsI can also run Gigapixel AI flawlessly on my cMP. So, it seems this software isn't really need AVX.
Ok was able to copy paste in Macpro/private /var/folder/ "Topaz Photo AI2.0.1.lock" light file from the macbookPro. Edit not working.I can also run Gigapixel AI flawlessly on my cMP. So, it seems this software isn't really need AVX.
user@Macmini ~ % ~/Downloads/avx2 /Library/Audio/Plug-Ins/VST3 -c
Macschrauber's AVX/AVX2 Scanner 16-1-2025 F
Scanning directory: /Library/Audio/Plug-Ins/VST3/Massive X.vst3/
Executable with 6037 AVX and AVX2 commands: /Library/Audio/Plug-Ins/VST3/Massive X.vst3/Contents/PkgInfoMacOS/Massive X
AVX and AVX2 code found.
#!/bin/bash
# chmod +x avx2
terminal_output=true
found_avx1=false
found_avx2=false
AVX1_PATTERN='vaddpd|vaddps|vsubpd|vsubps|vmovapd|vmovaps|vmovupd|vmovups|vbroadcastsd|vbroadcastss|vperm2f128|vshufpd|vshufps|vcmppd|vcmpps|vpcmpeqb|vpcmpeqw|vpcmpeqd|vpcmpeqq|vgatherdpd|vgatherqpd|vgatherdps|vgatherqps'
AVX2_PATTERN='vpaddd|vpaddq|vpsubd|vpsubq|vpmulld|vpmullq|vandpd|vandps|vandnpd|vandnps|vorpd|vorps|vxorpd|vxorps|vpbroadcastb|vpbroadcastw|vpbroadcastd|vpbroadcastq|vpermd|vpblendd|vpblendvb|vpslldq|vpsrldq|vpsllw|vpslld|vpsllq|vpsrlw|vpsrld|vpsrlq|vpminsb|vpminsw|vpminsd|vpminsq|vpmaxsb|vpmaxsw|vpmaxsd|vpmaxsq'
##### functions block #####
function echo_red () {
$terminal_output && printf "%s \n" "$(tput setaf 1)$1$(tput sgr0)" || echo "$1"
}
function echo_green () {
$terminal_output && printf "%s \n" "$(tput setaf 2)$1$(tput sgr0)" || echo "$1"
}
function print_and_overwrite() {
local message="$1"
# Get the terminal width
local term_width=$(tput cols)
printf "%s" "$message"
# Calculate the number of lines the message occupies
local message_length=${#message}
cursor_lines=$(( (message_length + term_width - 1) / term_width ))
}
function clear_message() {
# Move the cursor back to the start of the line
printf "\r"
# Clear all lines occupied by the previous message
for ((i = 0; i < cursor_lines; i++)); do
printf "%*s\r" "$(tput cols)" " "
# Move up one line if not on the last line
(( i < cursor_lines - 1 )) && printf "\033[A"
done
cursor_lines=0
}
function is_x86() {
[[ $(file -b "$1") == *x86* ]] && return 0 || return 1
}
# Function to check for AVX and AVX2 instructions in executable code sections
function has_avx12() {
[ -e /tmp/otool.txt ] && rm /tmp/otool.txt
print_and_overwrite "..disassembling $1"
otool -tv "$1" 2>/dev/null > /tmp/otool.txt
clear_message
local report_avx1=false
local report_avx2=false
# Check for AVX instructions
print_and_overwrite "..checking for AVX in $1"
if grep -q -m1 -E "$AVX1_PATTERN" /tmp/otool.txt; then
found_avx1=true
report_avx1=true
fi
clear_message
# Check for AVX2 instructions
print_and_overwrite "..checking for AVX2 in $1"
if grep -q -m1 -E "$AVX2_PATTERN" /tmp/otool.txt; then
found_avx2=true
report_avx2=true
fi
clear_message
if $count_commands; then
count=0
if $report_avx1; then
print_and_overwrite "..counting AVX commands in $1"
count=$((count + $(grep -oE "$AVX1_PATTERN" /tmp/otool.txt | wc -l)))
clear_message
fi
if $report_avx2; then
print_and_overwrite "..counting AVX2 commands in $1"
count=$((count + $(grep -oE "$AVX2_PATTERN" /tmp/otool.txt | wc -l)))
clear_message
fi
count="$count "
commands_string=" commands"
else
count=""
commands_string=""
fi
[ -e /tmp/otool.txt ] && rm /tmp/otool.txt
$report_avx1 && $report_avx2 && echo_red "Executable with ${count}AVX and AVX2${commands_string}: $1" && return 0
$report_avx1 && echo_red "Executable with ${count}AVX${commands_string}: $1" && return 0
$report_avx2 && echo_red "Executable with ${count}AVX2${commands_string}: $1" && return 0
# If AVX1 or 2 is not found
echo_green "Executable without AVX/AVX2: $1"
return 1
}
##### end of functions block #####
echo "Macschrauber's AVX/AVX2 Scanner 22-1-2025"
# Check if command line tools / otool are available
# also triggers Mac Os installing command line tools
if ! otool --version 2>/dev/null; then
echo_red "command line tools are missing"
exit 1
fi
# Check if input is provided
if [ $# -eq 0 ]; then
echo "Usage: $0 <directory> or <file> -c[ount AVX/AVX2]"
exit 1
fi
[[ $2 == -c* ]] && count_commands=true || count_commands=false
given_file_or_directory="$1"
# Handle single file input
if [ -f "$given_file_or_directory" ]; then
echo "Scanning file: $given_file_or_directory"
if is_x86 "$given_file_or_directory"; then # Check if the file is executable
has_avx12 "$given_file_or_directory"
else
echo_red "Error: The file '$given_file_or_directory' is not a x86 executable."
exit 1
fi
# Handle directory input
elif [ -d "$given_file_or_directory" ]; then
echo "Scanning directory: $given_file_or_directory"
# Track whether any executable files were found in the directory
found_executables=false
# Use find to locate all files and process them one by one without subshells
while IFS= read -r -d '' file; do
if is_x86 "$file"; then # Check if the file is a x86 executable
found_executables=true
has_avx12 "$file"
fi
done < <(find "$given_file_or_directory" -type f -print0)
# If no executables were found in the directory, notify the user.
if ! $found_executables; then
# maybe restrictions, scan /Contents
if [ -d "$given_file_or_directory/Contents" ]; then
while IFS= read -r -d '' file; do
if is_x86 "$file"; then # Check if the file is a x86 executable
found_executables=true
has_avx12 "$file"
fi
done < <(find "$given_file_or_directory/Contents" -type f -print0)
fi
if ! $found_executables; then
echo_red "No x86 executable files found in the directory."
exit 1
fi
fi
# Handle invalid input (neither file nor directory)
else
echo_red "Error: The input '$given_file_or_directory' is neither a valid file nor a directory."
exit 1
fi
# Final report based on whether AVX, AVX2 code was found or not.
$found_avx1 && $found_avx2 && echo_red "AVX and AVX2 code found." && exit 0
$found_avx1 && echo_red "AVX code found." && exit 0
$found_avx2 && echo_red "AVX2 code found." && exit 0
echo_green "No AVX/AVX2 code found."
exit 1
xattr -c ~/Downloads/avx2
chmod +x ~/Downloads/avx2
~/Downloads/avx2 /System/Applications/Preview.app
Gatekeeper unprotect app
tool from the package.xattr -cr ~/Downloads/avx2.app
Awesome news!!! just wow!I hacked a very basic bash script, for scanning AVX and AVX2 commands.
It disassembles the executables and scans for AVX/AVX2 command strings, it needs installing the command line developer tools. There will be a dialog, asking for this install, if you run the script the first time.
Don't mind, if installing the tools will tell it takes an insane amount of time, this is pretty normal.
Tested with Massive X:
View attachment 2472689
Code:user@Macmini ~ % avx2 /Library/Audio/Plug-Ins/VST3 Macschrauber's AVX/AVX2 Scanner 15-1-2025 Scanning directory: /Library/Audio/Plug-Ins/VST3/Massive X.vst3/ Executable without AVX/AVX2: /Library/Audio/Plug-Ins/VST3/Massive X.vst3/Contents/PkgInfo_CodeSignature/CodeResources Executable with AVX: /Library/Audio/Plug-Ins/VST3/Massive X.vst3/Contents/PkgInfoMacOS/Massive X Executable with AVX2: /Library/Audio/Plug-Ins/VST3/Massive X.vst3/Contents/PkgInfoMacOS/Massive X Executable without AVX/AVX2: /Library/Audio/Plug-Ins/VST3/Massive X.vst3/Contents/PkgInfoInfo.plist Executable without AVX/AVX2: /Library/Audio/Plug-Ins/VST3/Massive X.vst3/Contents/PkgInfoPkgInfo AVX/AVX2 code found.
the script:
Bash:#!/bin/bash # chmod +x avx2 terminal_output=true found_avx1=false found_avx2=false function echo_red () { $terminal_output && printf "%s \n" "$(tput setaf 1)$1$(tput sgr0)" || echo "$1" } function echo_green () { $terminal_output && printf "%s \n" "$(tput setaf 2)$1$(tput sgr0)" || echo "$1" } echo "Macschrauber's AVX/AVX2 Scanner 16-1-2025" # Check if otool is available if ! command -v otool &> /dev/null; then echo_red "Error: 'otool' is not installed or not found in PATH." exit 1 fi # Check if input is provided if [ $# -eq 0 ]; then echo "Usage: $0 <directory> or <file>" exit 1 fi given_file_or_directory="$1" # AVX # grep -qE 'vaddpd|vaddps|vsubpd|vsubps|vmovapd|vmovaps|vmovupd|vmovups|vbroadcastsd|vbroadcastss|vperm2f128|vshufpd|vshufps|vcmppd|vcmpps|vpcmpeqb|vpcmpeqw|vpcmpeqd|vpcmpeqq|vgatherdpd|vgatherqpd|vgatherdps|vgatherqps' # AVX2 # grep -qE 'vpaddd|vpaddq|vpsubd|vpsubq|vpmulld|vpmullq|vandpd|vandps|vandnpd|vandnps|vorpd|vorps|vxorpd|vxorps|vpbroadcastb|vpbroadcastw|vpbroadcastd|vpbroadcastq|vpermd|vpblendd|vpblendvb|vpslldq|vpsrldq|vpsllw|vpslld|vpsllq|vpsrlw|vpsrld|vpsrlq|vpminsb|vpminsw|vpminsd|vpminsq|vpmaxsb|vpmaxsw|vpmaxsd|vpmaxsq' # Function to check for AVX2 instructions in executable code sections has_avx2() { [ -e /tmp/otool.txt ] && rm /tmp/otool.txt otool -tv "$1" 2>/dev/null > /tmp/otool.txt local found_avx12=false # Check for AVX instructions if grep -q -m1 -E 'vaddpd|vaddps|vsubpd|vsubps|vmovapd|vmovaps|vmovupd|vmovups|vbroadcastsd|vbroadcastss|vperm2f128|vshufpd|vshufps|vcmppd|vcmpps|vpcmpeqb|vpcmpeqw|vpcmpeqd|vpcmpeqq|vgatherdpd|vgatherqpd|vgatherdps|vgatherqps' /tmp/otool.txt; then found_avx1=true found_avx12=true echo_red "Executable with AVX: $1" fi # Check for AVX2 instructions if grep -q -m1 -E 'vpaddd|vpaddq|vpsubd|vpsubq|vpmulld|vpmullq|vandpd|vandps|vandnpd|vandnps|vorpd|vorps|vxorpd|vxorps|vpbroadcastb|vpbroadcastw|vpbroadcastd|vpbroadcastq|vpermd|vpblendd|vpblendvb|vpslldq|vpsrldq|vpsllw|vpslld|vpsllq|vpsrlw|vpsrld|vpsrlq|vpminsb|vpminsw|vpminsd|vpminsq|vpmaxsb|vpmaxsw|vpmaxsd|vpmaxsq' /tmp/otool.txt; then found_avx2=true found_avx12=true echo_red "Executable with AVX2: $1" fi [ -e /tmp/otool.txt ] && rm /tmp/otool.txt $found_avx12 && return 0 # If AVX1 or 2 is not found if ! $found_avx12; then echo_green "Executable without AVX/AVX2: $1" return 1 fi } # Handle single file input if [ -f "$given_file_or_directory" ]; then echo "Scanning file: $given_file_or_directory" if [ -x "$given_file_or_directory" ]; then # Check if the file is executable has_avx2 "$given_file_or_directory" else echo_red "Error: The file '$given_file_or_directory' is not executable." exit 1 fi # Handle directory input elif [ -d "$given_file_or_directory" ]; then echo "Scanning directory: $given_file_or_directory" # Track whether any executable files were found in the directory found_executables=false # Use find to locate all files and process them one by one without subshells while IFS= read -r -d '' file; do if [ -x "$file" ]; then # Check if the file is executable found_executables=true has_avx2 "$file" fi done < <(find "$given_file_or_directory" -type f -print0) # If no executables were found in the directory, notify the user. if ! $found_executables; then # maybe restrictions, scan /Contents if [ -d "$given_file_or_directory/Contents" ]; then while IFS= read -r -d '' file; do if [ -x "$file" ]; then # Check if the file is executable found_executables=true has_avx2 "$file" fi done < <(find "$given_file_or_directory/Contents" -type f -print0) fi if ! $found_executables; then echo_red "No executable files found in the directory." exit 1 fi fi # Handle invalid input (neither file nor directory) else echo_red "Error: The input '$given_file_or_directory' is neither a valid file nor a directory." exit 1 fi # Final report based on whether AVX, AVX2 code was found or not. $found_avx1 && $found_avx2 && echo_red "AVX/AVX2 code found." && exit 0 $found_avx1 && echo_red "AVX code found." && exit 0 $found_avx2 && echo_red "AVX2 code found." && exit 0 echo_green "No AVX/AVX2 code found." exit 1
if copied to /Downloads, prepare:
Code:xattr -c ~/Downloads/avx2 chmod +x ~/Downloads/avx2
and run with:
Code:~/Downloads/avx2 /System/Applications/Preview.app
the script will need some time, as it disassembles a lot of code
script attached, zipped
edit: Version 16-1-2025 separates AVX and AVX2 commands from the report
I will wrap it to a GUI some time, but it needs more testing.
If you guys find commands what I (or the AI) missed, or are not correct, dont mind hitting me![]()