SSE2 provides functionality for performing faster on aligned memory. By copying the first and last bytes of an unaligned memory destination using the conventional unaligned functionality, and copying everything in between as aligned, it is possible to make use of this performance improvement on large unaligned memory blocks as well.
In this graph the green lines are the conventional memcpy available in Microsoft Visual Studio 2008, the red lines are the SSE memcpy function available in Nevrax NeL, and the blue lines are the custom SSE2 function. The bright colored lines are the performance on alinged memory blocks, while the dark colored lines are tested on differently unaligned blocks of memory. Horizontally the copy function is tested on different sizes of memory, on the vertical axis the copy speed is displayed in MB/s.
As you can see, NeL’s SSE memcpy performs very well on aligned memory, but gives horrible performance on unaligned memory, as it does not take the aligning of the memory blocks into account. The builtin memcpy function is fastest of all at copying blocks below 128 bytes, but also reaches it’s speed limit there. The SSE2 memcpy takes larger sizes to get to it’s maximum performance, but peaks above NeL’s aligned SSE memcpy even for unaligned memory blocks.
Code is available below, ask before using.

void *memcpy_kaetemi_sse2(void *dst, void *src, int nBytes) { __asm { // Copyright (C) 2009 Jan Boon (Kaetemi) // optimized on Intel Core 2 Duo T7500 mov ecx, nBytes mov edi, dst mov esi, src add ecx, edi prefetchnta [esi] prefetchnta [esi+32] prefetchnta [esi+64] prefetchnta [esi+96] // handle nBytes lower than 128 cmp nBytes, 512 jge fast slow: mov bl, [esi] mov [edi], bl inc edi inc esi cmp ecx, edi jnz slow jmp end fast: // align dstEnd to 128 bytes and ecx, 0xFFFFFF80 // get srcEnd aligned to dstEnd aligned to 128 bytes mov ebx, esi sub ebx, edi add ebx, ecx // skip unaligned copy if dst is aligned mov eax, edi and edi, 0xFFFFFF80 cmp eax, edi jne first jmp more first: // copy the first 128 bytes unaligned movdqu xmm0, [esi] movdqu xmm1, [esi+16] movdqu xmm2, [esi+32] movdqu xmm3, [esi+48] movdqu xmm4, [esi+64] movdqu xmm5, [esi+80] movdqu xmm6, [esi+96] movdqu xmm7, [esi+112] movdqu [eax], xmm0 movdqu [eax+16], xmm1 movdqu [eax+32], xmm2 movdqu [eax+48], xmm3 movdqu [eax+64], xmm4 movdqu [eax+80], xmm5 movdqu [eax+96], xmm6 movdqu [eax+112], xmm7 // add 128 bytes to edi aligned earlier add edi, 128 // offset esi by the same value sub eax, edi sub esi, eax // last bytes if dst at dstEnd cmp ecx, edi jnz more jmp last more: // handle equally aligned arrays mov eax, esi and eax, 0xFFFFFF80 cmp eax, esi jne unaligned4k aligned4k: mov eax, esi add eax, 4096 cmp eax, ebx jle aligned4kin cmp ecx, edi jne alignedlast jmp last aligned4kin: prefetchnta [esi] prefetchnta [esi+32] prefetchnta [esi+64] prefetchnta [esi+96] add esi, 128 cmp eax, esi jne aligned4kin sub esi, 4096 alinged4kout: movdqa xmm0, [esi] movdqa xmm1, [esi+16] movdqa xmm2, [esi+32] movdqa xmm3, [esi+48] movdqa xmm4, [esi+64] movdqa xmm5, [esi+80] movdqa xmm6, [esi+96] movdqa xmm7, [esi+112] movntdq [edi], xmm0 movntdq [edi+16], xmm1 movntdq [edi+32], xmm2 movntdq [edi+48], xmm3 movntdq [edi+64], xmm4 movntdq [edi+80], xmm5 movntdq [edi+96], xmm6 movntdq [edi+112], xmm7 add esi, 128 add edi, 128 cmp eax, esi jne alinged4kout jmp aligned4k alignedlast: mov eax, esi alignedlastin: prefetchnta [esi] prefetchnta [esi+32] prefetchnta [esi+64] prefetchnta [esi+96] add esi, 128 cmp ebx, esi jne alignedlastin mov esi, eax alignedlastout: movdqa xmm0, [esi] movdqa xmm1, [esi+16] movdqa xmm2, [esi+32] movdqa xmm3, [esi+48] movdqa xmm4, [esi+64] movdqa xmm5, [esi+80] movdqa xmm6, [esi+96] movdqa xmm7, [esi+112] movntdq [edi], xmm0 movntdq [edi+16], xmm1 movntdq [edi+32], xmm2 movntdq [edi+48], xmm3 movntdq [edi+64], xmm4 movntdq [edi+80], xmm5 movntdq [edi+96], xmm6 movntdq [edi+112], xmm7 add esi, 128 add edi, 128 cmp ecx, edi jne alignedlastout jmp last unaligned4k: mov eax, esi add eax, 4096 cmp eax, ebx jle unaligned4kin cmp ecx, edi jne unalignedlast jmp last unaligned4kin: prefetchnta [esi] prefetchnta [esi+32] prefetchnta [esi+64] prefetchnta [esi+96] add esi, 128 cmp eax, esi jne unaligned4kin sub esi, 4096 unalinged4kout: movdqu xmm0, [esi] movdqu xmm1, [esi+16] movdqu xmm2, [esi+32] movdqu xmm3, [esi+48] movdqu xmm4, [esi+64] movdqu xmm5, [esi+80] movdqu xmm6, [esi+96] movdqu xmm7, [esi+112] movntdq [edi], xmm0 movntdq [edi+16], xmm1 movntdq [edi+32], xmm2 movntdq [edi+48], xmm3 movntdq [edi+64], xmm4 movntdq [edi+80], xmm5 movntdq [edi+96], xmm6 movntdq [edi+112], xmm7 add esi, 128 add edi, 128 cmp eax, esi jne unalinged4kout jmp unaligned4k unalignedlast: mov eax, esi unalignedlastin: prefetchnta [esi] prefetchnta [esi+32] prefetchnta [esi+64] prefetchnta [esi+96] add esi, 128 cmp ebx, esi jne unalignedlastin mov esi, eax unalignedlastout: movdqu xmm0, [esi] movdqu xmm1, [esi+16] movdqu xmm2, [esi+32] movdqu xmm3, [esi+48] movdqu xmm4, [esi+64] movdqu xmm5, [esi+80] movdqu xmm6, [esi+96] movdqu xmm7, [esi+112] movntdq [edi], xmm0 movntdq [edi+16], xmm1 movntdq [edi+32], xmm2 movntdq [edi+48], xmm3 movntdq [edi+64], xmm4 movntdq [edi+80], xmm5 movntdq [edi+96], xmm6 movntdq [edi+112], xmm7 add esi, 128 add edi, 128 cmp ecx, edi jne unalignedlastout jmp last last: // get the last 128 bytes mov ecx, nBytes mov edi, dst mov esi, src add edi, ecx add esi, ecx sub edi, 128 sub esi, 128 // copy the last 128 bytes unaligned movdqu xmm0, [esi] movdqu xmm1, [esi+16] movdqu xmm2, [esi+32] movdqu xmm3, [esi+48] movdqu xmm4, [esi+64] movdqu xmm5, [esi+80] movdqu xmm6, [esi+96] movdqu xmm7, [esi+112] movdqu [edi], xmm0 movdqu [edi+16], xmm1 movdqu [edi+32], xmm2 movdqu [edi+48], xmm3 movdqu [edi+64], xmm4 movdqu [edi+80], xmm5 movdqu [edi+96], xmm6 movdqu [edi+112], xmm7 end: } return dst; }
order provigil 100mg buy generic provigil
I share with you professional website promotion services. The best price, the work is done within a few days. More than 1500 backlinks are created. Money back guarantee. A professional works through the kwork exchange. Here is the link https://kwork.com/offpageseo/13467403/professional-website-promotion-1500-good-back-links
Приветствую Вас дамы и господа! Есть такой интересный сайт для заказа бурения скважин на воду. Бурение скважин в Минске – полный комплекс качественных и разумных по цене услуг. Мы бурим любые виды скважин.У нас доступная ценовая политика, рассрочка на услуги и оборудование.Заказывайте скважину для воды – получите доступ к экологически чистой природной воде по самым выгодным в Минске ценам! Итак, вам нужна собственная скважина и вы решаете самостоятельно обеспечивать себя чистой водой — на своем загородном участке или на промышленном объекте в Минской области. Поздравляем с первым шагом. Но до того как мы приступим к бурению вашей скважины, вам предстоит сделать еще один выбор — решить, какая скважина у вас будет. Выбрать предстоит из двух вариантов: шнековая (до 35-40м) или артезианская (от 40м). Артезианская скважина бурится роторным способом. Этот способ бурения дороже уже по той причине, что сама скважина глубже. Цены на прохождение одного погонного метра при бурении артезианской или фильтровой скважины существенно не отличаются, однако за счет глубины конечная цена на роторное бурение выше.
Увидимся!
https://cardmafia.cc/members/299826.html
http://truesith.org/viewtopic.php?f=6&t=7531
http://raovatsoctrang.com/member.php?u=3189192
http://archive.appraisalbuzz.com/buzz/blog/2014/12/09/the-buzz-on-marijuana-grow-house-reporting?page=2979#comment-248696
http://www.glaschat.ru/glas-f/member.php?253638-Andreaskge
Привет товарищи!
https://drive.google.com/file/d/1Z3XEpblaCaEBdSLzZP8E22b0ZjbBT3QO/view?usp=sharing
Предлагаем Вашему вниманию интересный сайт для заказа бурения скважин на воду. Бурение скважин в Минске – полный комплекс качественных и разумных по цене услуг. Мы бурим любые виды скважин.У нас доступная ценовая политика, рассрочка на услуги и оборудование.Заказывайте скважину для воды – получите доступ к экологически чистой природной воде по самым выгодным в Минске ценам! Почему роторное бурение — более результативное? Роторное бурение в МинскеКогда бурится менее глубокая, фильтровая скважина, то используется обычное долото-резец и шнеки (стержень со сплошной винтовой поверхностью вдоль продольной оси), которые «ввинчиваются» в породу. При роторном бурении применяются шарошечные долота из высокопрочных сплавов с центральной или боковой промывкой, которые пробивают любую породу. При этом промывочная жидкость осуществляет выброс грунта из скважины и препятствует обрушению стенок пробуренного ствола. Поэтому роторным способом достигается глубина более 200м. Почему бурение называется роторным? Долото проходит твердую породу не только потому, что прилагает усилие и «пробивает» ее, но и потому что вращается и подает промывочную жидкость под давлением. А вращается долото при помощи ротора — крутящейся части двигателя. Ротор применяется в ряде технических областей, и бурильное оборудование — не исключение.
Увидимся!
buy generic modafinil 200mg order provigil 100mg online
Привет дамы и господа!
Предлагаем Вашему вниманию изделия из стекла для дома и офиса.Наша организация ООО «СТЕКЛОЭЛИТ» работает 10 лет на рынке этой продукции в Беларуси.Стеклянные двери межкомнатные в Минске с ценами и фото представлены на данной странице. Вы можете заказать и купить их с бесплатным замером и доставкой по Беларуси. Вам по нраву такой неординарный вариант как стеклянные межкомнатные двери? Наша Команда в Минске расскажет всё о секретах установки, дизайнах интерьера с примерами фото, и поможет выбрать и купить дверь вашей мечты по нормальным ценам. Плюсы и минусы дверей из стекла: Сейчас такие варианты пользуются большой популярностью. Их выбирают для установки в душе, бане, а некоторые и вовсе предпочитают видеть их в качестве межкомнатных.
Увидимся!
http://wafer.minedgames.com/forum/viewtopic.php?f=6&t=24521
https://board.radionomy.com/memberlist.php?mode=viewprofile&u=306006
https://forum.adultscriptpro.com/profile.php?id=319594
http://forum.dynamics.com.ru/memberlist.php?mode=viewprofile&u=52692
http://spotlight.radiantwaltz.net/forums/viewtopic.php?f=35&t=28509
Здравствуйте друзья[url=https://vika-service.by/]![/url]
Благодаря тому, что заправка картриджей осуществляется исключительно нами, не привлекая сторонние организации, конечная стоимость услуг не будет увеличена из-за посредничества. Сотрудничаем с первыми импортёрами расходных материалов для оргтехники в РБ, поэтому готовы предложить Вам лучшие цены на все виды услуг. Все ремонтные работы мы проводим с применением специализированного оборудования. Благодаря тому, что сотрудничаем с проверенными компаниями-поставщиками комплектующих оргтехники, у нас всегда в наличие большинство деталей к моделям принтеров и МФУ ведущих мировых производителей. Работы, выполненные нашей компанией – гарант безукоризненной работы Вашей техники!
Наша фирма занимается свыше 10 лет ремонтом и обслуживанием оргтехники в городе Минске.
Нам будет приятно видеть у нас на сайте
Всегда рады помочь Вам!С уважением,ТЕХНОСЕРВИC
http://aena.at/phpbb3/viewtopic.php?f=5&t=325060&p=2384387#p2384387
https://cardmafia.cc/members/305995.html
https://goldenv.by/user/rentdrescqb/
http://www.charlottewrestling.com/boards/viewtopic.php?f=1&t=73519
http://www.17-school.com/index/8-26211
[url=https://newfasttadalafil.com/]cialis tablets for sale[/url] Nkhgzu Amoxicillin 50mg where to buy cialis online forum Fvdicn Kkvlvx https://newfasttadalafil.com/ – buying generic cialis online safe Wyveop Propecia Pas Cher 2011
Please let me know if you’re looking for a writer for your weblog.
You have some really good articles and I feel I would be a good asset.
If you ever want to take some of the load off, I’d absolutely love to write some material for your blog in exchange for
a link back to mine. Please send me an email if interested.
Regards!
Добрый день господа!
https://drive.google.com/file/d/1Z3XEpblaCaEBdSLzZP8E22b0ZjbBT3QO/view?usp=sharing
Предлагаем Вашему вниманию интересный сайт для заказа бурения скважин на воду. Бурение скважин в Минске – полный комплекс качественных и разумных по цене услуг. Мы бурим любые виды скважин.У нас доступная ценовая политика, рассрочка на услуги и оборудование.Заказывайте скважину для воды – получите доступ к экологически чистой природной воде по самым выгодным в Минске ценам! Наша сфера деятельности — проектирование и бурение скважин на воду, установка любого насосного оборудования, монтаж систем канализации всех видов, дренажей, ливневых систем и др.Миссия компании: мы добываем чистую воду – источник всего живого на Земле, и делаем ее доступной людям. Самый короткий срок, за который мы пробурили и обустроили скважину, — 1 час 36 минут. Мы ценим время своих клиентов и гордимся, что оперативность — отличительное свойство наших услуг. Мы показываем, насколько быстро и качественно может происходить бурение скважины.
От всей души Вам всех благ!
buy lisinopril uk
ivermectin pills canada
generic 100 mg levitra
furosemide tab 80mg
Состоит из профильных столбов размером 50х50, 60х60 вбитых или забетонированных в грунт дренаж участка
Между столбами приварены лаги от 2х до 3 х штук в зависимости от высоты забора к которым крепятся на специальных саморезах с термошайбами листы поликарбоната заборы для дачи
Всем, кто имеет свой участок вокруг дома или коттеджа, хочется как-то его отгородить от праздного любопытства сторонних лиц забор деревянный
Поставить забор – это означает создать возможность уединения, отдыха от городской суеты, покоя калитка
Можно возвести его из древесины, из
what infections does a z pack treat 600 mg zithromax buy zithromax online azithromycin zithromax z pak
can you buy valtrex over the counter in australia