Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-15838

item_cmp_type: simplier for a faster codepath

    XMLWordPrintable

Details

    Description

      The common case for this function is that both types are the same.

      The Item_result defination from include/mysql.h.pp is the following enum

      enum Item_result
      {
      STRING_RESULT=0, REAL_RESULT, INT_RESULT, ROW_RESULT, DECIMAL_RESULT,
      TIME_RESULT
      };
      

      The compilers aren't quite smart enough to optimize to this shortcut so
      this makes it quicker.

      Before the change:

      0000000000012730 <item_cmp_type(Item_result, Item_result)>:
      12730: 89 f0 mov %esi,%eax
      12732: 09 f8 or %edi,%eax
      12734: 74 4c je 12782 <item_cmp_type(Item_result, Item_result)+0x52>
      12736: 83 ff 02 cmp $0x2,%edi
      12739: 75 0a jne 12745 <item_cmp_type(Item_result, Item_result)+0x15>
      1273b: b8 02 00 00 00 mov $0x2,%eax
      12740: 83 fe 02 cmp $0x2,%esi
      12743: 74 3c je 12781 <item_cmp_type(Item_result, Item_result)+0x51>
      12745: 83 ff 03 cmp $0x3,%edi
      12748: b8 03 00 00 00 mov $0x3,%eax
      1274d: 74 32 je 12781 <item_cmp_type(Item_result, Item_result)+0x51>
      1274f: 83 fe 03 cmp $0x3,%esi
      12752: 74 2d je 12781 <item_cmp_type(Item_result, Item_result)+0x51>
      12754: 83 ff 05 cmp $0x5,%edi
      12757: b8 05 00 00 00 mov $0x5,%eax
      1275c: 74 23 je 12781 <item_cmp_type(Item_result, Item_result)+0x51>
      1275e: 83 fe 05 cmp $0x5,%esi
      12761: 74 1e je 12781 <item_cmp_type(Item_result, Item_result)+0x51>
      12763: 83 ff 04 cmp $0x4,%edi
      12766: 74 05 je 1276d <item_cmp_type(Item_result, Item_result)+0x3d>
      12768: 83 ff 02 cmp $0x2,%edi
      1276b: 75 0f jne 1277c <item_cmp_type(Item_result, Item_result)+0x4c>
      1276d: b8 04 00 00 00 mov $0x4,%eax
      12772: 83 fe 02 cmp $0x2,%esi
      12775: 74 0a je 12781 <item_cmp_type(Item_result, Item_result)+0x51>
      12777: 83 fe 04 cmp $0x4,%esi
      1277a: 74 05 je 12781 <item_cmp_type(Item_result, Item_result)+0x51>
      1277c: b8 01 00 00 00 mov $0x1,%eax
      12781: c3 retq
      12782: 31 c0 xor %eax,%eax
      12784: c3 retq
      

      After, noting the short cut and the beginning of the function:

      0000000000012730 <item_cmp_type(Item_result, Item_result)>:
      12730: 39 f7 cmp %esi,%edi
      12732: 75 03 jne 12737 <item_cmp_type(Item_result, Item_result)+0x7>
      12734: 89 f8 mov %edi,%eax
      12736: c3 retq
      12737: 83 ff 03 cmp $0x3,%edi
      1273a: b8 03 00 00 00 mov $0x3,%eax
      1273f: 74 32 je 12773 <item_cmp_type(Item_result, Item_result)+0x43>
      12741: 83 fe 03 cmp $0x3,%esi
      12744: 74 2d je 12773 <item_cmp_type(Item_result, Item_result)+0x43>
      12746: 83 ff 05 cmp $0x5,%edi
      12749: b8 05 00 00 00 mov $0x5,%eax
      1274e: 74 23 je 12773 <item_cmp_type(Item_result, Item_result)+0x43>
      12750: 83 fe 05 cmp $0x5,%esi
      12753: 74 1e je 12773 <item_cmp_type(Item_result, Item_result)+0x43>
      12755: 83 ff 04 cmp $0x4,%edi
      12758: 74 05 je 1275f <item_cmp_type(Item_result, Item_result)+0x2f>
      1275a: 83 ff 02 cmp $0x2,%edi
      1275d: 75 0f jne 1276e <item_cmp_type(Item_result, Item_result)+0x3e>
      1275f: b8 04 00 00 00 mov $0x4,%eax
      12764: 83 fe 02 cmp $0x2,%esi
      12767: 74 0a je 12773 <item_cmp_type(Item_result, Item_result)+0x43>
      12769: 83 fe 04 cmp $0x4,%esi
      1276c: 74 05 je 12773 <item_cmp_type(Item_result, Item_result)+0x43>
      1276e: b8 01 00 00 00 mov $0x1,%eax
      12773: c3 retq
      

      Attachments

        Activity

          People

            sanja Oleksandr Byelkin
            svoj Sergey Vojtovich
            Votes:
            1 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Git Integration

                Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.