Sse2 какие процессоры поддерживают

Какой выбрать браузер для слабого компьютера. процессор не поддерживает набор инструкций sse2 до какой версии яндекс не требует sse2

Что делать с проблемой?

Как уже понятно – ошибка “This program requires a computer that supports SSE2 instructions” возникает при попытке установить приложение, выполнение которого не будет поддержано процессором, ввиду его “древности”. Наиболее часто данная проблема встречается при установке актуальных версий браузеров (Firefox, Opera, Chrome, Internet Explorer), сторонних приложений (Office, Skype, антивирус Norton и т.д.), либо при переустановке ОС Windows.

Если вы получили данную ошибку, то выбора тут не много: обновлять железо – в крайнем случае материнскую плату и процессор, либо же устанавливать более раннюю версию софта. Если вы не желаете докупать новые детали на ПК, тогда отыщите для своей программы более старые версии, которые будут совместимы с требованиями процессора. Например, версии браузеров не требующие SSE2: Опера 20.0.1387.91, Хром 35.0.1870.2, Файерфокс ниже 48 версии. Вот полный список.

Инструкции

SSE2 расширяет технологию MMX и технологию SSE с добавлением 144 инструкций, поставляющих увеличения производительности через широкий диапазон приложений. Команды SIMD для работы с целыми числами, введенными с технологией MMX, увеличены с 64 до 128 бит, что обеспечивает удвоение эффективной скорости исполнения операций с целыми числами типа SIMD.

Инструкции по SIMD плавающей точки двойной точности допускают две операции с плавающей точкой, которые будут одновременно выполняться в Формате SIMD, Эта поддержа операций двойной точности помогает ускорить создание контента, финансовое, разработка и научные приложения. .

Если процессор не поддерживает sse2, Вы:

  1. Не сможете установить актуальную версию windows. Вернее, даже не установите windows 7.
  2. Не установите ни одного браузера, даже никому ненужный амиго и сафари. Мне чисто повезло, что у меня была сборка XP chip 2010 и там были старенькие браузеры, которые я смог установить.
  3. Не откроите 30% сайтов, а из оставшихся 70 половина будет частично не работающими.
  4. Не сможете смотреть фильмы онлайн. На половине сайтов вас пошлют… обновляться всмысле, а на второй половине, каждая секунда фильма будет идти 2-5 сек.

Я так могу долго перечислять, но в этом нет необходимости. И так все ясно. Так что – компьютеры для интернета вымерли.
Остались только слабенькие и нормальные.

Streaming SIMD Extensions (SSE)

Introduction

SSE was introduced in the Pentium III and offered an additional 70 instructions to the Intel Instruction Set. SSE instructions can help give an increase in data thouroughput due to Single Instruction, Multiple Data (SIMD) instructions. These instructions can execute a common expression on multiple data in parallel.

There are 8 (16 in 64-bit mode) XMM registers (XMM0-7(15)) that come with SSE, and they are 128-bit registers. Certain SSE instructions (movntdqa, movdqa, movdqu, etc…) can load 16 bytes from memory or store 16 bytes to memory in a single operation. Also, SSE introduces a few non-temporal hint instructions (movntdqa and movntdq) that allow one-shot memory locations to be stored in non-temporal memory so those location references to do not pollute the small on-chip caches.

Since this change added new registers, it is disabled by default as the typical operating system of that time was not yet able to save those registers on a task switch. To support SSE, you will need to implement separate code paths for saving and restoring SSE state (as those instructions will cause an exception on processors that do not support it), and handlers for the new exceptions. After that, you can tell the CPU to enable SSE use in userland tasks.

Checking for SSE

to check for SSE CPUID.01h:EDX.SSE needs to be set

mov eax, 0x1
cpuid
test edx, 1<<25
jz .noSSE
;SSE is available

Adding support

In order to allow SSE instructions to be executed without generating a #UD, we need to alter the CR0 and CR4 registers.

clear the CR0.EM bit (bit 2) 
set the CR0.MP bit (bit 1) 
set the CR4.OSFXSR bit (bit 9) 
set the CR4.OSXMMEXCPT bit (bit 10) 

Here is an asm example:

;now enable SSE and the like
mov eax, cr0
and ax, 0xFFFB		;clear coprocessor emulation CR0.EM
or ax, 0x2			;set coprocessor monitoring  CR0.MP
mov cr0, eax
mov eax, cr4
or ax, 3 << 9		;set CR4.OSFXSR and CR4.OSXMMEXCPT at the same time
mov cr4, eax
ret

FXSAVE and FXRSTOR

FXSAVE and FXRSTOR are used to save and load the complete SSE, x87 FPU, and MMX states from memory. The host needs to allocate 512 bytes for the storage and use that memory pointer as an operand to either FXSAVE or FXRSTOR. Before using either of those instructions, make sure to check the CPUID features for the FXSR bit. Also, like most SSE instructions, the memory operand needs to be 16-byte aligned or a #GP exception will occur. Remember to execute FXSAVE *before* any MXCSR modifications happen, or else it the register will most likely get overwritten or set to 0 based on the unknown state of the MXCSR_MASK.

Example usage:

char fxsave_region512 __attribute__((aligned(16)));
asm volatile(" fxsave %0 "::"m"(fxsave_region));

or in asm:

segment .code
SaveFloats
fxsave SavedFloats
segment .data
align 16
SavedFloats TIMES 512 db 

Pitfalls: only one level of saving supported.

MXCSR and its helpers LDMXCSR and STMXCSR

The MXCSR register holds all of the masking and flag information for use with SSE floating-point operations. Just like the x87 FPU control word, if you would like to mask certain exceptions from occuring or would like to specify rounding types, MXCSR will need to be modified. Bits 16-31 are reserved and will cause a #GP exception if set. LDMXCSR and STMXCSR load and write the MXCSR register respectively. They both require a 32-bit memory operand. SSE support needs to already be set up before using either of these instructions (CR4.OSFXSR = 1, CR0.EM = 0, and CR0.TS = 0). If bits 7-12 are set, all SSE floating-point exceptions are masked. Bits 0-5 are exception status flags that are set if the corresponding exception has occured. Bits 13-14 are the RC (Rounding Control) bits. RC:0 = to nearest, RC:1 = down, RC:2 = up, RC:3 = truncate.

SSE4.1 это расширенный набор команд SSE4 от Intel.

Ниже приведены инструкции, входящие в SSE4.1:


Ускорение видео (3 инструкции)


Векторные примитивы (5 инструкций)


Вставки/извлечения (4 инструкции)


Скалярное умножение векторов (2 инструкции)


Смешивания (4 инструкции)

Проверки бит


Округления (2 инструкции)

Чтение WC памяти

SSE4.2 состоит из 7 инструкций.


Обработка строк (4 инструкции)

Подсчет CRC32


Подсчет популяции единичных бит


Векторные примитивы

SSE4A это расширенный набор команд SSE4 от AMD, разработанный скорее не как дополнение, а как альтернатива инструкциям SSE4 от Intel.

SSSE3 (Supplemental Streaming SIMD Extension 3) — это обозначение данное Intel 4-му расширению системы команд. Предыдущее имело обозначение SSE3 и Intel добавил ещё один символ «S» вместо того, чтобы увеличить номер расширения, возможно потому, что они посчитали SSSE3 простым дополнением к SSE3. Часто, до того как стало использоваться официальное обозначение SSSE3, эти новые команды назывались SSE4. Также их называли кодовыми именами Tejas New Instructions (TNI) и Merom New Instructions (MNI) по названию процессоров, где впервые Intel намеревалась поддержать эти новые команды. Появившись в Intel Core Microarchitecture, SSSE3 доступно в сериях процессоров Xeon 5100 (Server и Workstation версии), а также в процессорах Intel Core 2 (Notebook и Desktop версии).

Новыми в SSSE3, по сравнению с SSE3, являются 16 уникальных команд, работающих с упакованными целыми. Каждая из них может работать как с 64-х битными (MMX), так и с 128-ми битными (XMM) регистрами, поэтому Intel в своих материалах ссылается на 32 новые команды.

Вот некоторые из них:


Работа со знаком (2 инструкции)

Сдвиги


Перемешивание байт


Умножения (2 инструкции)


Горизонтальные сложения/вычитания целых (4 инструкции)

3DNow! — дополнительное расширение MMX для процессоров AMD, начиная с AMD K6 3D. Причиной создания 3DNow! послужило стремление завоевать превосходство над процессорами производства компании Intel в области обработки мультимедийных данных. Хотя это расширение является разработкой AMD, его также интегрировали в свои процессоры IBM, Cyrix и другие.

Технология 3DNow! ввела 21 новую команду процессора и возможность оперировать 32-битными вещественными типами в стандартных MMXрегистрах. Также были добавлены специальные инструкции, оптимизирующие переключение в режим MMX/3DNow! (femms, которая заменяла стандартную инструкцию emms) и работу с кешем процессора. Таким образом технология 3DNow! расширяла возможности технологии MMX, не требуя введения новых режимов работы процессора и новых регистров.

Особенности

  • SSE2 использует восемь 128-битных регистров (xmm0 до xmm7), включённых в архитектуру x86 с вводом расширения SSE , каждый из которых трактуется как 2 последовательных значения с плавающей точкой двойной точности.
  • SSE2 включает в себя набор инструкций, который производит операции со скалярными и упакованными типами данных.
  • SSE2 содержит инструкции для потоковой обработки целочисленных данных в тех же 128-битных xmm регистрах, что делает это расширение более предпочтительным для целочисленных вычислений, нежели использование набора инструкций MMX , появившегося гораздо раньше.
  • SSE2 включает в себя две части – продолжение SSE и продолжение MMX .
    • Продолжение SSE работает с вещественными числами.
    • продолжение MMX работает с целыми. В SSE2 регистры по сравнению с MMX удвоились (64 бита -> 128 битов). Т.к. скорость выполнения инструкций не изменилась, при оптимизации под SSE2 программа получает двукратный прирост производительности. Если программа уже была оптимизирована под MMX, то оптимизация под SSE2 даётся сравнительно легко в силу сходности системы команд.
  • SSE2 включает в себя ряд команд управления кэшем, предназначенных для минимизации загрязнения кэша при обработке неопределенных потоков информации.
  • SSE2 включает в себя сложные дополнения к командам преобразования чисел

Различия между MMX и SSE2

Хотя одна инструкция SSE2 может обрабатывать вдвое больше данных, чем инструкция MMX, производительность может незначительно повыситься. Две основные причины: доступ к данным SSE2 в памяти, не выровненной по 16-байтовой границе, может привести к значительным потерям, а пропускная способность инструкций SSE2 в более старых реализациях x86 была вдвое меньше, чем для инструкций MMX. Intel решила первую проблему, добавив инструкцию в SSE3, чтобы уменьшить накладные расходы на доступ к невыровненным данным и улучшить общую производительность несовпадающих нагрузок, и последнюю проблему, расширив механизм выполнения в своей микроархитектуре Core в Core 2 Duo и более поздних продуктах.

Поскольку файлы регистров MMX и x87 являются псевдонимами друг друга, использование MMX не позволит инструкциям x87 работать должным образом. После использования MMX программист должен использовать инструкцию emms (C: _mm_empty ()) для восстановления работы в регистровом файле x87. В некоторых операционных системах x87 используется не очень часто, но все же может использоваться в некоторых критических областях, таких как pow (), где требуется дополнительная точность. В таких случаях поврежденное состояние с плавающей запятой, вызванное отказом в выдаче emms, может остаться незамеченным для миллионов инструкций, прежде чем в конечном итоге приведет к сбою процедуры с плавающей запятой, возвращающей NaN. Поскольку проблема не проявляется локально в коде MMX, поиск и исправление ошибки может занять очень много времени. Поскольку SSE2 не имеет этой проблемы, обычно обеспечивает гораздо лучшую пропускную способность и предоставляет больше регистров в 64-битном коде, его следует предпочесть почти для всех работ по векторизации.

Требования к поддержке

В этом разделе описаны меры, которые проверяют поддержку требований к PAE, NX и SSE2 процессорами систем, работающих под управлением Windows 8.

Требование к эмблеме Windows 8

Требование сертификации оборудования для Windows 8 требует, чтобы все драйверы работали вместе с защитой предотвращения выполнения данных для обеспечения надлежащего поведения системы устройства и драйвера. Драйверы не должны выполнять код из стека, выгружаемого пула и пула сеансов. Драйверы не должны давать сбои при загрузке, если включен режим PAE. Во встроенном ПО системы должна быть включена функция NX, а для политики DEP должно быть установлено значение Всегда выключено
. Включен сертификационный тест, подтверждающий, что система соответствует этому требованию к поддержке NX.

Дополнительные сведения см. в разделе Требования к сертификации оборудования для Windows .

Проверка на совместимость оборудования при установке Windows

Программа установки Windows имеет средство проверки совместимости оборудования для поддержки PAE, NX и SSE2 в устанавливаемой системе. Системы, которые не соответствуют требованию к поддержке процессором PAE, NX и SSE2, отмечаются как блокировки по оборудованию для Windows 8 в отчете о проблемах совместимости, при этом отображается сообщение Процессор вашего компьютера не совместим с Windows 8
.

Рис. 1. Сообщение об ошибке, связанной с несовместимостью процессора

Примечание

Эта проверка требований к поддержке доступна только в новой программе установки Windows и помощнике по обновлению. Windows 8 включает альтернативную версию программы установки и папке Sources на установочном носителе, которая не выполняет подобной проверки. Клиенты, которые попытаются использовать эту альтернативную версию программы установки Windows в системе, не соответствующей требованиям к поддержке PAE/NX/SSE2, увидят сообщение об ошибке во время установки, после чего будет выполнен откат к предыдущей версии операционной системы.

При загрузке с носителя или из сети, например с помощью служб развертывания Windows (WDS) во время установки Windows проверка совместимости не выполняется. При таких сценариях система без поддержки NX и SSE2 выдаст критическую ошибку (которая описана в следующем разделе Улучшения ядра
), когда программа установки попытается загрузить Windows.

Улучшения ядра

В целях проверки соответствия требованию поддержки инструкций SSE2 и функции NX для работы Windows 8 ядро этой операционной системы проверяет наличие этих функций во время инициализации. Системы, которые не поддерживают NX или SSE2, не могут инициализировать ядро Windows 8. В системах, которые могут отключить NX во встроенном ПО, этот параметр переопределяется, поэтому неправильно настроенное встроенное ПО не приводит к сбою загрузки. Попытка загрузить систему без поддержки NX или SSE2 приведет к возникновению критической ошибки. В 32-разрядной системе пользователи получают ошибку кода UNSUPPORTED_PROCESSOR (0x0000005D) вместе с 4 информационными строками:

Строка 1 — код, указывающий отсутствующую функцию и идентификатор ЦП

Строки 2 — 4 — строки идентификатора поставщика

В 64-разрядной системе критическая ошибка показывает тот же код UNSUPPORTED_PROCESSOR, что и на 32-разрядной системе вместе со следующими четырьмя информационными строками:

Строка 1 — содержимое регистра стандартных функций

Строка 2 — содержимое регистра расширенных функций

Строки 3 — 4 — обе со значением 0

Проверка поддержки 3DNow! процессором.

Перед началом работы с расширением 3DNow! следует убедиться, что ЦП их поддерживает. Для этого используется инструкция CPUID. Общий порядок действий при проверке выглядит следующим образом:

1.
Убедиться, что процессор поддерживает инструкцию CPUID. Если нет, то ЦП не поддерживает и 3DNow!.

2.
Выполнить инструкцию cpuid со значением EAX = 0 — это необходимо для следующего шага.

3.
Выполнить CPUID со значением EAX = 80000000h. Если после выполнения инструкции в EAX будет значение меньше 1, то 3DNow! не поддерживается.

4.
Выполнить CPUID с EAX = 80000001h. Если после выполнения бит 31 регистра EDX будет установлен в 1, то 3DNow! поддерживается. Иначе — нет.

Всем привет Поговорим сегодня о том как узнать какие инструкции SSE поддерживает процессор. Но что такое SSE вы знаете? Я вот не знаю и не то чтобы не знаю, я даже понять не могу что это такое. Ну то есть я понимаю, что это инструкция процессора, которая нужна для оптимизации его работы, то есть чтобы при одной и тоже частотой проц с этой инструкцией мог больше обрабатывать команд. Но это так, грубо говоря так бы сказать…

Про SSE я вообще не знаю где в жизни он нужен, может быть для игр? Я знаю что такое Hyper-threading (правда это не инструкция процессора, это технология), что такое VT-x, VT-d, что такое EM64T знаю, а вот что такое SSE не знаю! Ну вот такие пироги ребята

Итак ребята, скачали CPU-Z, установили и потом запускаем. И вот сразу же вы все узнаете, вот сколько у меня этих SSE:

Не одна и не две, а целых шесть, огогошеньки ребята

Кстати, как видите тут еще много есть всякой полезной инфы, видите? Если срочно нужно узнать что-то о своем проце, то вы быстро запускаете CPU-Z и опа, все что вам нужно у вас под рукой! Говорю же что прога CPU-Z это одна годнота! Не верите? Ну нет проблем, я вам щас докажу. Смотрите, вот вы знаете когда у вас была выпущена та или иная планка памяти? Ну то есть дату ее выпуска на заводе так бы сказать. Или вам это не интересно? Ну некоторым очень интересно, вот мне например очень интересно! И вот прога CPU-Z может показать такую инфу! Итак ребята, смотрите, запустили CPU-Z, идете на вкладку SPD, там выбираете слот с планкой (слева), ну то есть разьем куда она установлена и смотрите инфу по выбранной планке. У меня вот стоит одна планка на 8 гигов в четвертом слоту и вот какую инфу показала прога CPU-Z:

Тут видно, что моя планка была выпущена в 30-тую неделю 2014-го года. Также написано что производитель у меня это Hyundai Electronics, ну это планка Hynix так называется

Ну короче CPU-Z это супер, если нужно быстро посмотреть вообще самую важную инфу о железе компа или ноута, она все это покажет без приколов! Короче рекомендую ребята!

И еще, забыл кое что написать про SSE. Включить или отключить SSE нельзя. Ибо эта инструкция или есть или нет. Вот например Hyper-threading включить/отключить можно, а SSE нет!

На этом все ребята, надеюсь что все вам тут было понятно, а если что-то не так, то прошу прощения. Эта инфа была вам полезной, только честно? Я буду всем сердцем надеется что да! Удачи вам в жизни, чтобы вы были здоровы и не болели, удачи

SSE2 instructions – сокращение от Streaming SIMD Extensions 2. Появился только в линейке процессоров Pentium 4. Технология SSE2 – это набор инструкций, которые содержат 144 команды, и они крайне необходимы для всех современных программ.

Без поддержки этих технологий, Вы не сможете установить актуальную версию windows, и даже любой современный браузер. Во время установки, если процессор не поддерживает SSE2 Вы увидите ошибку — This program requires a computer that supports SSE2 instructions
. Давайте разберемся с этим подробнее.

Как включить SSE2

Если ваш процессор не поддерживает эту технологию, включить её не получиться. Убедитесь, что ваша модель новее чем:

  • IA-32
  • Все процессоры AMD до Athlon 64 не поддерживают sse2
  • Pentium 1, 2, 3. Как сказано выше, поддержка появилась только в 4.
  • Transmeta Crusoe
  • VIA C3

Все остальные уже имеют поддержку набора инструкций.

Так же, чтоб убедится, что поддержка присутствует, установите программу «CPU-Z »

Чтоб при помощи программы понять, есть ли поддержка sse2, обратите внимание на графу «Instructions». В ней должны быть перечислены технологии, которые поддерживает ваш процессор

Чтоб включить её в BIOS сделайте следящее:

Перезагрузите компьютер и в тот момент как он будет только включаться, нажимайте много раз Del или F1 (в зависимости от материнской платы). После того, как у вас получилось попасть в BIOS, зайдите в «SSE Tweaks» затем вам необходимой поставить «SSE Enable». Нажмите F10, Y, Enter.

Скачать браузер который не требует sse2

Лох не мамонт, он не вымрет

Компы вымерли, а лохи никогда! Вот наглядный пример – Я
. Казалось бы, вроде вебмастер, можно даже сказать программист, а это г… купил. Как так, бро? Прикинь, открыл олх, смотрю – ПК 1.8 ггц, 2 гб ОЗУ, 512 видео, 500 ВТ БП, 120 хдд, и все это за 20$. Я быстро рванул, т.к. аналоги стоят в 2 раза дороже, купил, думаю во лохи, а я п…. Приехал домой, пытаюсь все установить, а мне сплошные error’ы, подумал дрова, а оказалось sse2. Печаль одним словом.

Многие пользователи при установке различных приложений, сталкиваются с сообщением “Процессор не поддерживает набор инструкций SSE2”
. Эта ошибка встречается на компьютерах со старым железом и вводит в ступор пользователей – вроде бы Windows работает без проблем, но программа устанавливаться не хочет. Мы постараемся понятным языком рассказать, что это за технология SSE2 и каковы её функции в PC. Также вы узнаете, можно ли включить поддержку SSE2 Instructions в Windows.

Updates to SSE

Later processors have added more instructions for different work to be performed on the vector registers. Supporting them with SSE support in place doesn’t require any effort on the part of the OS (except for AVX, see below). The actual user of the instructions should however check if those instructions actually exist.

CPUID bits

SSE4

Streaming SIMD Extensions 4 (SSE4)
The bit for SSE4.1 can be found on CPUID page 1, in ECX bit 19

The bit for SSE4.2 can be found on CPUID page 1, in ECX bit 20

The bit for SSE4A can be found on CPUID page 1, in ECX bit 6

SSE5

Streaming SIMD Extensions 5 (SSE5)
SSE5 was planned as one unit, but split into several:

XOP

The bit for XOP can be found on CPUID page 1, in ECX bit 11

FMA4

The bit for FMA4 can be found on CPUID page 1, in ECX bit 16

CVT16

The bit for CVT16 can be found on CPUID page 1, in ECX bit 29

AVX

The bit for AVX can be found on CPUID page 1, in ECX bit 28

XSAVE

The bit for XSAVE (needed to manage extended processor states) can be found on CPUID page 1, in ECX bit 26

AVX2

The bit for AVX2 can be found on CPUID page 7, 0, in EBX bit 5

AVX-512

The bits for AVX-512 are in CPUID page 0x0D, 0x0, EAX bits 5-7

X86_64

When the X86-64 architecture was introduced, AMD demanded a minimum level of SSE support to simplify OS code. Any system capable of long mode should support at least SSE and SSE2, which means that the kernel does not need to care about the old FPU save code.
X86-64 adds 8 SSE registers (xmm8 — xmm15) to the mix. However, you can only access these in 64 bit mode.

Advanced Vector Extensions is a SIMD (Single Instruction, Multiple Data) instruction set introduced by Intel in 2011.

AVX

AVX needs to be enabled by the kernel before being used. Forgetting to do this will raise an #UD on the first AVX call.
Both SSE and OSXSAVE must be enabled before allowing. Failing to do so will also produce an #UD.

AVX is enabled by setting bit 2 of the XCR0 register. Bit 1 of XCR0 must also be set (indicating SSE support).

Here is an example of assembly code enabling AVX after SSE has been enabled (you should check AVX and XSAVE are supported first, see above):

enable_avx
    push rax
    push rcx
    push rdx
 
    xor rcx, rcx
    xgetbv ;Load XCR0 register
    or eax, 7 ;Set AVX, SSE, X87 bits
    xsetbv ;Save back to XCR0
 
    pop rdx
    pop rcx
    pop rax
    ret

To enable AVX-512, set the OPMASK (bit 5), ZMM_Hi256 (bit 6), Hi16_ZMM (bit 7) of XCR0. You must ensure that these bits are valid first (see above).

Использование компилятора

Впервые представленный в 2000 году, SSE2 не поддерживался средствами разработки программного обеспечения. Например, чтобы использовать SSE2 в проекте Microsoft Visual Studio , программист должен был либо вручную написать встроенную сборку, либо импортировать объектный код из внешнего источника. Позже пакет процессоров Visual C ++ добавил поддержку SSE2 в Visual C ++ и MASM .

++ компилятор Intel C может автоматически генерировать SSE4 , SSSE3 , SSE3 , SSE2 и SSE код без использования рук-кодированной сборки.

Начиная с GCC 3, GCC может автоматически генерировать скалярный код SSE / SSE2, если цель поддерживает эти инструкции. Автоматическая векторизация для SSE / SSE2 была добавлена ​​с GCC 4.

Пакет компилятора Sun Studio также может генерировать инструкции SSE2 при использовании флага компилятора -xvector = simd.

Начиная с Microsoft Visual C ++ 2012, опция компилятора для генерации инструкций SSE2 включена по умолчанию.

Понравилась статья? Поделиться с друзьями:
Wi-Fi Роутер
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: