/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 6 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . backend . jvm . intr insics Ċ Ċ import Ġorg . jetbrains . kotlin . backend . jvm . Jvm Backend Context Ċ import Ġorg . jetbrains . kotlin . codegen . Asm Util . comparison Operand Type Ċ import Ġorg . jetbrains . kotlin . codegen . Stack Value Ċ import Ġorg . jetbrains . kotlin . ir . expressions . Ir Member Access Expression Ċ import Ġorg . jetbrains . kotlin . lexer . Kt Single Value Token Ċ import Ġorg . jetbrains . kotlin . resolve . jvm . jvm Signature . Jvm Method Signature Ċ import Ġorg . jetbrains . kotlin . types . Kotlin Type Ċ import Ġorg . jetbrains . org . object web . asm . Type Ċ import Ġorg . jetbrains . org . object web . asm . commons . Instruction Adapter Ċ import Ġjava . lang . Unsupported OperationException Ċ Ċ class ĠCompare To Ġ: ĠIntr insic Method () Ġ{ ĊĠĠĠ Ġprivate Ġfun Ġgen Invoke ( type : ĠType ?, Ġv : ĠInstruction Adapter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠType . CHAR _ TYPE , ĠType . BYTE _ TYPE , ĠType . SHORT _ TYPE , ĠType . INT _ TYPE Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . inv ok est atic ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntr insic Methods . INTR INS ICS _ CLASS _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" compare ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"( II ) I ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠType . LONG _ TYPE Ġ-> Ġv . inv ok est atic ( Intr insic Methods . INTR INS ICS _ CLASS _ NAME , Ġ" compare ", Ġ"( JJ ) I ", Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠType . FLOAT _ TYPE Ġ-> Ġv . inv ok est atic (" java / lang / Float ", Ġ" compare ", Ġ"( FF ) I ", Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠType . DOUBLE _ TYPE Ġ-> Ġv . inv ok est atic (" java / lang / Double ", Ġ" compare ", Ġ"( DD ) I ", Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠUnsupportedOperationException () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġto Callable ( ĊĠĠĠĠĠĠĠ Ġexpression : ĠIr Member Access Expression , ĊĠĠĠĠĠĠĠ Ġsignature : ĠJ vm Method Signature , ĊĠĠĠĠĠĠĠ Ġcontext : ĠJ vm Backend Context ĊĠĠĠ Ġ): ĠIr Intr insic Function Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparameter Type Ġ= Ġcomparison Operand Type ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Type ( expression . dispatch Receiver Ġ?: Ġexpression . extension Receiver !! , Ġcontext ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsignature . value Parameters . single (). asm Type ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn ĠIr Intr insic Function . create ( expression , Ġsignature , Ġcontext , ĠlistOf ( parameter Type , Ġparameter Type )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgen Invoke ( parameter Type , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ class ĠPrimitive Comparison ( ĊĠĠĠ Ġprivate Ġval Ġprimitive Number Type : ĠKotlin Type , ĊĠĠĠ Ġprivate Ġval Ġoperator Token : ĠK t Single Value Token Ċ ) Ġ: ĠIntr insic Method () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġto Callable ( ĊĠĠĠĠĠĠĠ Ġexpression : ĠIr Member Access Expression , ĊĠĠĠĠĠĠĠ Ġsignature : ĠJ vm Method Signature , ĊĠĠĠĠĠĠĠ Ġcontext : ĠJ vm Backend Context ĊĠĠĠ Ġ): ĠIr Intr insic Function Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparameter Type Ġ= Ġcontext . state . type Mapper . map Type ( primitive Number Type ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠIr Intr insic Function ( expression , Ġsignature , Ġcontext , ĠlistOf ( parameter Type , Ġparameter Type )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġgen Invoke Instruction ( v : ĠInstruction Adapter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStack Value . cmp ( operator Token , Ġparameter Type , ĠStack Value . on Stack ( parameter Type ), ĠStack Value . on Stack ( parameter Type )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( Type . BOOLEAN _ TYPE , Ġv ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ