カラーホイールを回すとCPUに負荷が掛かるようなので、彩度・輝度空間の描画部分にSIMD命令を使って高速化を図ってみました。
MMXとかSSE2を使うのにはインラインアセンブラしかないと思いこんでいたが、

#include <emmintrin.h>
#include <xmmintrin.h>
#include <mmintrin.h> 

これらのヘッダファイルをインクルードすることで、イントリンシック記法が使えるそうです。(参考:SIMD命令セットの記述方法)

高速化する前のコード

for (unsigned long i=0; i<svw; i++)
	for (unsigned long j=0; j<svw; j++) {
		unsigned long s = (i*0xff)/svw;
		unsigned long v = (j*0xff)/svw;
		unsigned long vff = v*0xff;
		unsigned long vffff = vff*0xff;
		unsigned long vs = v*s;
		unsigned long vsff = v*s*0xff;
		unsigned long fvs = f*vs;
		unsigned long P = (vff-vs)>>8; // v*(0xff-s)
		unsigned long q = (vffff-fvs)>>16; // v*(0xff-f*s)
		unsigned long t = (vffff-vsff+fvs)>>16; // v*(0xff-s+f*s)
		unsigned long rgbmap[6][3] = {
			{v, t, P},
			{q, v, P},
			{P, v, t},
			{P, q, v},
			{t, P, v},
			{v, P, q},
		};
		unsigned long svpos = (svw2-j*svw-svw+i)*3;
		sv_data[svpos] = rgbmap[modh][0];
		sv_data[svpos + 1] = rgbmap[modh][1];
		sv_data[svpos + 2] = rgbmap[modh][2];
	}

XMMレジスタにおいてワード整数のMMX命令セット PMULLW, PSUBW, PSRLWを使って高速化したコード

#define COLORWHEEL(RR, GG, BB) {\
	__m128i m_f; \
	m_f.m128i_i32[0] = 0;		m_f.m128i_i32[1] = 256;		m_f.m128i_i32[2] = f;		m_f.m128i_i32[3] = f1; \
	for (unsigned long c=0,p=0; c<svw2-1; c++,p+=3) { \
		unsigned long i = c%svw; \
		unsigned long j = svw-1-c/svw; \
		__m128i  m_a, m_b, m_v, m_s; \
		unsigned long s = (i*256)/svw; \
		unsigned long v = (j*256)/svw; \
		m_v.m128i_i32[0] = v; /* - v v v */ \
		m_v = _mm_shuffle_epi32(m_v, 0); \
		m_a = _mm_slli_epi32(m_v, 8); \
		m_s.m128i_i32[0] = s; /* - s s s */ \
		m_s = _mm_shuffle_epi32(m_s, 0); \
		m_s = _mm_mullo_epi16(m_s, m_f); \
		m_s = _mm_srli_epi32(m_s, 8); \
		m_s = _mm_mullo_epi16(m_v, m_s); \
		m_b = _mm_sub_epi16(m_a, m_s); \
		m_s = _mm_srli_epi32(m_b, 8); \
		unsigned long P = m_s.m128i_i32[1]; \
		unsigned long q = m_s.m128i_i32[2]; \
		unsigned long t = m_s.m128i_i32[3]; \
		sv_data[p] = RR; \
		sv_data[p + 1] = GG; \
		sv_data[p + 2] = BB; \
	}}

	switch (modh) {
		case 0: COLORWHEEL(v, t, P) break;
		case 1: COLORWHEEL(q, v, P) break;
		case 2: COLORWHEEL(P, v, t) break;
		case 3: COLORWHEEL(P, q, v) break;
		case 4: COLORWHEEL(t, P, v) break;
		case 5: COLORWHEEL(v, P, q) break;
	}

PMULLW(ワード単位の積)に相当するダブルワードの演算がSSE4.1にならないと使えない(多分)らしく、
E6300までしか持っていないので、計算を2回に分けてワード単位に納めました。

しばらくデバッグし、なんとかMMXでも前と同じものが描画できるようになりました。
喜び勇んでホイールをくるくるすると…

変わらない。
CPUが50% (2コア中1コアのmax)近くまで使われます。配列部分のストアが悪いのか、とおもって描画サイズを上げてみると、驚愕の事実が。
どれだけ大きくしてもCPU負荷変わらず。しかも前のコードでもほぼ同じくらい。SV空間描画部分は実はたいして重くなかったようです。

別の箇所を切り離して、カラーピッカーだけで動かすと、
H/SVカラーピッカー
このくらいのサイズでCPU20%以内くらいでした。